/*
 *  Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.
 *
 *  Use of this source code is governed by a BSD-style license
 *  that can be found in the LICENSE file in the root of the source
 *  tree. An additional intellectual property rights grant can be found
 *  in the file PATENTS.  All contributing project authors may
 *  be found in the AUTHORS file in the root of the source tree.
 */

#include "modules/video_coding/h264_sprop_parameter_sets.h"

#include <vector>

#include "test/gtest.h"

namespace webrtc {

class H264SpropParameterSetsTest : public ::testing::Test {
 public:
  H264SpropParameterSets h264_sprop;
};

TEST_F(H264SpropParameterSetsTest, Base64DecodeSprop) {
  // Example sprop string from https://tools.ietf.org/html/rfc3984 .
  EXPECT_TRUE(h264_sprop.DecodeSprop("Z0IACpZTBYmI,aMljiA=="));
  static const std::vector<uint8_t> raw_sps{0x67, 0x42, 0x00, 0x0A, 0x96,
                                            0x53, 0x05, 0x89, 0x88};
  static const std::vector<uint8_t> raw_pps{0x68, 0xC9, 0x63, 0x88};
  EXPECT_EQ(raw_sps, h264_sprop.sps_nalu());
  EXPECT_EQ(raw_pps, h264_sprop.pps_nalu());
}

TEST_F(H264SpropParameterSetsTest, InvalidData) {
  EXPECT_FALSE(h264_sprop.DecodeSprop(","));
  EXPECT_FALSE(h264_sprop.DecodeSprop(""));
  EXPECT_FALSE(h264_sprop.DecodeSprop(",iA=="));
  EXPECT_FALSE(h264_sprop.DecodeSprop("iA==,"));
  EXPECT_TRUE(h264_sprop.DecodeSprop("iA==,iA=="));
  EXPECT_FALSE(h264_sprop.DecodeSprop("--,--"));
  EXPECT_FALSE(h264_sprop.DecodeSprop(",,"));
  EXPECT_FALSE(h264_sprop.DecodeSprop("iA=="));
}

}  // namespace webrtc
