// Copyright 2015 PDFium 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 "core/fpdfapi/fpdf_font/font_int.h"
#include "testing/gtest/include/gtest/gtest.h"

namespace {

bool uint_ranges_equal(uint8_t* a, uint8_t* b, size_t count) {
  for (size_t i = 0; i < count; ++i) {
    if (a[i] != b[i])
      return false;
  }
  return true;
}

}  // namespace

TEST(fpdf_font_cid, CMap_GetCode) {
  EXPECT_EQ(0, CPDF_CMapParser::CMap_GetCode(""));
  EXPECT_EQ(0, CPDF_CMapParser::CMap_GetCode("<"));
  EXPECT_EQ(194, CPDF_CMapParser::CMap_GetCode("<c2"));
  EXPECT_EQ(162, CPDF_CMapParser::CMap_GetCode("<A2"));
  EXPECT_EQ(2802, CPDF_CMapParser::CMap_GetCode("<Af2"));
  EXPECT_EQ(162, CPDF_CMapParser::CMap_GetCode("<A2z"));

  EXPECT_EQ(12, CPDF_CMapParser::CMap_GetCode("12"));
  EXPECT_EQ(12, CPDF_CMapParser::CMap_GetCode("12d"));
  EXPECT_EQ(128, CPDF_CMapParser::CMap_GetCode("128"));
}

TEST(fpdf_font_cid, CMap_GetCodeRange) {
  CMap_CodeRange range;

  // Must start with a <
  EXPECT_FALSE(CPDF_CMapParser::CMap_GetCodeRange(range, "", ""));
  EXPECT_FALSE(CPDF_CMapParser::CMap_GetCodeRange(range, "A", ""));

  // m_CharSize must be <= 4
  EXPECT_FALSE(CPDF_CMapParser::CMap_GetCodeRange(range, "<aaaaaaaaaa>", ""));
  EXPECT_EQ(5, range.m_CharSize);

  EXPECT_TRUE(
      CPDF_CMapParser::CMap_GetCodeRange(range, "<12345678>", "<87654321>"));
  EXPECT_EQ(4, range.m_CharSize);
  {
    uint8_t lower[4] = {18, 52, 86, 120};
    uint8_t upper[4] = {135, 101, 67, 33};
    EXPECT_TRUE(uint_ranges_equal(lower, range.m_Lower, range.m_CharSize));
    EXPECT_TRUE(uint_ranges_equal(upper, range.m_Upper, range.m_CharSize));
  }

  // Hex characters
  EXPECT_TRUE(CPDF_CMapParser::CMap_GetCodeRange(range, "<a1>", "<F3>"));
  EXPECT_EQ(1, range.m_CharSize);
  EXPECT_EQ(161, range.m_Lower[0]);
  EXPECT_EQ(243, range.m_Upper[0]);

  // The second string should return 0's if it is shorter
  EXPECT_TRUE(CPDF_CMapParser::CMap_GetCodeRange(range, "<a1>", ""));
  EXPECT_EQ(1, range.m_CharSize);
  EXPECT_EQ(161, range.m_Lower[0]);
  EXPECT_EQ(0, range.m_Upper[0]);
}
