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

#include "media/muxers/mp4_type_conversion.h"

#include <stdint.h>

#include "testing/gtest/include/gtest/gtest.h"

namespace media {

struct LanguageAndCode {
  std::string language;
  uint16_t expected_code;
};

TEST(Mp4TypeConversionTest, LanguageCode) {
  LanguageAndCode test_data[] = {
      {"ara", 0x0641},
      {"zho", 0x690f},
      {"eng", 0x15c7},
      {"fra", 0x1a41},
      {"kor", 0x2df2},
      {"und", kUndefinedLanguageCode},
      {"", kUndefinedLanguageCode},
      {"ENG", kUndefinedLanguageCode},
      {"english", kUndefinedLanguageCode},
  };

  for (const auto& data : test_data) {
    uint16_t language_code = ConvertIso639LanguageCodeToU16(data.language);
    EXPECT_EQ(data.expected_code, language_code);
  }
}

TEST(Mp4TypeConversionTest, TimescaleConversion) {
  base::TimeDelta time_diff = base::Milliseconds(321);
  EXPECT_EQ(ConvertToTimescale(time_diff, 30000), 9630u);
  EXPECT_EQ(ConvertToTimescale(time_diff, 44100), 14156u);

  base::TimeDelta time_diff2 = base::Microseconds(321000);
  EXPECT_EQ(ConvertToTimescale(time_diff2, 30000), 9630u);
  EXPECT_EQ(ConvertToTimescale(time_diff2, 44100), 14156u);
}

}  // namespace media
