// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "media/base/video_frame.h"
#include "media/cast/test/utility/barcode.h"
#include "testing/gtest/include/gtest/gtest.h"

namespace cobalt {
namespace media {
namespace cast {
namespace test {
namespace {

TEST(BarcodeTest, Small) {
  scoped_refptr<media::VideoFrame> frame =
      media::VideoFrame::CreateBlackFrame(gfx::Size(320, 10));
  for (unsigned char in_bits = 0; in_bits < 255; in_bits++) {
    EXPECT_TRUE(EncodeBarcode(in_bits, frame));
    unsigned char out_bits = ~in_bits;
    EXPECT_TRUE(DecodeBarcode(frame, &out_bits));
    EXPECT_EQ(in_bits, out_bits);
  }
}

TEST(BarcodeTest, Large) {
  scoped_refptr<media::VideoFrame> frame =
      media::VideoFrame::CreateBlackFrame(gfx::Size(10000, 10));
  std::vector<bool> in_bits(1024);
  std::vector<bool> out_bits(1024);
  for (int i = 0; i < 1024; i++) in_bits[i] = true;
  EXPECT_TRUE(EncodeBarcode(in_bits, frame));
  EXPECT_TRUE(DecodeBarcode(frame, &out_bits));
  for (int i = 0; i < 1024; i++) {
    EXPECT_EQ(in_bits[i], out_bits[i]);
  }

  for (int i = 0; i < 1024; i++) in_bits[i] = false;
  EXPECT_TRUE(EncodeBarcode(in_bits, frame));
  EXPECT_TRUE(DecodeBarcode(frame, &out_bits));
  for (int i = 0; i < 1024; i++) {
    EXPECT_EQ(in_bits[i], out_bits[i]);
  }

  for (int i = 0; i < 1024; i++) in_bits[i] = (i & 1) == 0;
  EXPECT_TRUE(EncodeBarcode(in_bits, frame));
  EXPECT_TRUE(DecodeBarcode(frame, &out_bits));
  for (int i = 0; i < 1024; i++) {
    EXPECT_EQ(in_bits[i], out_bits[i]);
  }

  for (int i = 0; i < 1024; i++) in_bits[i] = (i & 1) == 1;
  EXPECT_TRUE(EncodeBarcode(in_bits, frame));
  EXPECT_TRUE(DecodeBarcode(frame, &out_bits));
  for (int i = 0; i < 1024; i++) {
    EXPECT_EQ(in_bits[i], out_bits[i]);
  }
}

}  // namespace
}  // namespace test
}  // namespace cast
}  // namespace media
}  // namespace cobalt
