diff options
Diffstat (limited to 'test/autogenerated/cmap_basic_test.cc')
-rw-r--r-- | test/autogenerated/cmap_basic_test.cc | 131 |
1 files changed, 131 insertions, 0 deletions
diff --git a/test/autogenerated/cmap_basic_test.cc b/test/autogenerated/cmap_basic_test.cc new file mode 100644 index 0000000..aae35e1 --- /dev/null +++ b/test/autogenerated/cmap_basic_test.cc @@ -0,0 +1,131 @@ +/* + * Copyright 2011 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// type.h needs to be included first because of building issues on Windows +// Type aliases we delcare are defined in other headers and make the build +// fail otherwise. +#include "sfntly/port/type.h" +#include <assert.h> +#include <stdio.h> +#include <unicode/ucnv.h> + +#include <iostream> +#include <string> + +#include "gtest/gtest.h" +#include "sfntly/data/memory_byte_array.h" +#include "sfntly/font.h" +#include "sfntly/font_factory.h" +#include "sfntly/table/core/cmap_table.h" +#include "sfntly/table/core/font_header_table.h" +#include "sfntly/tag.h" +#include "test/autogenerated/cmap_test_data.h" +#include "test/test_font_utils.h" +#include "test/test_utils.h" +#include "test/test_xml_utils.h" + +namespace sfntly { + +#if GTEST_HAS_PARAM_TEST + +using ::testing::TestWithParam; +using ::testing::Values; + +class CMapBasicTests : public :: testing::TestWithParam<const char*> { + public: + CMapBasicTests() {} + virtual void SetUp(); + virtual void TearDown() {} + + Ptr<CMapTable> cmap_table_; + TiXmlDocument document_; +}; + +void CMapBasicTests::SetUp() { + // Loading the font + Ptr<FontFactory> font_factory; + font_factory.Attach(FontFactory::GetInstance()); + FontArray font_array; + std::string font_name = "../../"; +#if defined (WIN32) + font_name += "../"; +#endif + font_name += std::string(GetParam()); + LoadFont(font_name.c_str(), font_factory, &font_array); + ASSERT_FALSE(font_array.empty()); + Ptr<Font> font = font_array.at(0); + ASSERT_NE(font, reinterpret_cast<Font*>(NULL)); + cmap_table_ = down_cast<CMapTable*>(font->GetTable(Tag::cmap)); + if (!cmap_table_) + fprintf(stderr, "No CMap: %s\n", font_name.c_str()); + ASSERT_NE(cmap_table_, reinterpret_cast<CMapTable*>(NULL)); + + // Loading the XML file + document_ = TiXmlDocument((font_name + ".xml").c_str()); + ASSERT_TRUE(document_.LoadFile()); +} + +TEST_P(CMapBasicTests, BasicTest) { + TiXmlNodeVector* cmap_table = GetNodesWithName(&document_, "cmap_table"); + // A font can only have one CMap table + ASSERT_EQ(cmap_table->size(), (size_t)1); + TiXmlNodeVector* cmaps = GetNodesWithName(cmap_table->at(0), "cmap"); + const TiXmlAttribute* num_cmaps_attr = GetAttribute(cmap_table->at(0), + "num_cmaps"); + ASSERT_NE(num_cmaps_attr, reinterpret_cast<TiXmlAttribute*>(NULL)); + // But there may be more than one CMap in this table + ASSERT_LE(cmaps->size(), (size_t)num_cmaps_attr->IntValue()); + for (TiXmlNodeVector::iterator it = cmaps->begin(); + it != cmaps->end(); ++it) { + int32_t platform_id = GetAttribute(*it, "platform_id")->IntValue(); + int32_t encoding_id = GetAttribute(*it, "encoding_id")->IntValue(); + Ptr<CMapTable::CMap> cmap; + cmap.Attach(cmap_table_->GetCMap(platform_id, encoding_id)); + if (!cmap) { + fprintf(stderr, "Cannot test unsupported CMapFormat%d\n", + GetAttribute(*it, "format")->IntValue()); + continue; + } + ASSERT_EQ(cmap->platform_id(), platform_id); + ASSERT_EQ(cmap->encoding_id(), encoding_id); + TiXmlNodeVector* maps = GetNodesWithName(*it, "map"); + for (TiXmlNodeVector::iterator jt = maps->begin(); + jt != maps->end(); ++jt) { + int32_t character; +#if defined (WIN32) + sscanf_s(GetAttribute(*jt, "char")->Value(), "%x", &character); +#else + sscanf(GetAttribute(*jt, "char")->Value(), "%x", &character); +#endif + int32_t glyph_id = GetAttribute(*jt, "gid")->IntValue(); + ASSERT_EQ(cmap->GlyphId(character), glyph_id); + } + delete maps; + } + delete cmaps; + delete cmap_table; +} + +INSTANTIATE_TEST_CASE_P(CMapBasicTests, + CMapBasicTests, + ::testing::ValuesIn(cmap_test_data::kAllTests)); + +#else + +TEST(DummyTest, ValueParameterizedTestsAreNotSupportedOnThisPlatform) {} + +#endif // GTEST_HAS_PARAM +} |