diff options
author | Android Chromium Automerger <chromium-automerger@android> | 2013-11-22 00:22:29 +0000 |
---|---|---|
committer | Android Chromium Automerger <chromium-automerger@android> | 2013-11-22 00:22:29 +0000 |
commit | 4a8c3597eb72a7042ead9632e4c3e4fddb5ac695 (patch) | |
tree | 3409a319b231317c63b0b3477c161c76822bcb92 /test/cmap_editing_test.cc | |
parent | 0232d0f400400568410e1f85e7aba28bcd2ac183 (diff) | |
parent | 8f090032dd4f8f8908f338cc73bb840b788377f2 (diff) | |
download | src-4a8c3597eb72a7042ead9632e4c3e4fddb5ac695.tar.gz |
Merge third_party/sfntly/cpp/src from https://chromium.googlesource.com/external/sfntly/cpp/src.git at 8f090032dd4f8f8908f338cc73bb840b788377f2
This commit was generated by merge_from_chromium.py.
Change-Id: I6bab7aea653201e125014f7b81504acf7b846300
Diffstat (limited to 'test/cmap_editing_test.cc')
-rw-r--r-- | test/cmap_editing_test.cc | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/test/cmap_editing_test.cc b/test/cmap_editing_test.cc new file mode 100644 index 0000000..6df2720 --- /dev/null +++ b/test/cmap_editing_test.cc @@ -0,0 +1,101 @@ +/* + * 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. + */ + +#include <map> +#include <algorithm> + +#include "sfntly/font.h" +#include "sfntly/font_factory.h" +#include "sfntly/table/core/font_header_table.h" +#include "sfntly/tag.h" +#include "sfntly/data/memory_byte_array.h" +#include "sfntly/port/endian.h" +#include "sfntly/port/file_input_stream.h" +#include "sfntly/port/memory_output_stream.h" +#include "test/test_data.h" +#include "test/test_font_utils.h" +#include "sfntly/table/core/cmap_table.h" +#include "sfntly/port/refcount.h" +#include "gtest/gtest.h" + +namespace sfntly { +TEST(CMapEditingTest, RemoveAllButOneCMap) { + FontBuilderArray builders; + FontFactoryPtr font_factory; + font_factory.Attach(FontFactory::GetInstance()); + BuilderForFontFile(SAMPLE_TTF_FILE, font_factory, &builders); + ASSERT_FALSE(builders.empty()); + FontBuilderPtr font_builder = builders[0]; + Ptr<CMapTable::Builder> cmap_table_builder = + (CMapTable::Builder*)font_builder->GetTableBuilder(Tag::cmap); + ASSERT_NE(cmap_table_builder, reinterpret_cast<CMapTable::Builder*>(NULL)); + CMapTable::CMapBuilderMap* + cmap_builders = cmap_table_builder->GetCMapBuilders(); + ASSERT_FALSE(cmap_builders->empty()); + + for (CMapTable::CMapBuilderMap::iterator + it = cmap_builders->begin(); it != cmap_builders->end();) { + if (it->second->cmap_id() == CMapTable::WINDOWS_BMP) { + ++it; + } else { + cmap_builders->erase(it++); + } + } + ASSERT_EQ(cmap_builders->size(), (uint32_t)1); + Font* font = font_builder->Build(); + CMapTablePtr cmap_table = down_cast<CMapTable*>(font->GetTable(Tag::cmap)); + ASSERT_EQ(1, cmap_table->NumCMaps()); + CMapTable::CMapPtr cmap; + cmap.Attach(cmap_table->GetCMap(CMapTable::WINDOWS_BMP)); + ASSERT_EQ(CMapTable::WINDOWS_BMP, cmap->cmap_id()); + delete font; +} + +TEST(CMapEditingTest, CopyAllCMapsToNewFont) { + FontArray fonts; + FontFactoryPtr font_factory; + font_factory.Attach(FontFactory::GetInstance()); + LoadFont(SAMPLE_TTF_FILE, font_factory, &fonts); + + ASSERT_FALSE(fonts.empty()); + ASSERT_FALSE(fonts[0] == NULL); + FontPtr font = fonts[0]; + CMapTablePtr cmap_table = down_cast<CMapTable*>(font->GetTable(Tag::cmap)); + FontBuilderPtr font_builder; + font_builder.Attach(font_factory->NewFontBuilder()); + Ptr<CMapTable::Builder> cmap_table_builder = + (CMapTable::Builder*)font_builder->NewTableBuilder(Tag::cmap); + + CMapTable::CMapIterator cmap_iter(cmap_table, NULL); + while (cmap_iter.HasNext()) { + CMapTable::CMapPtr cmap; + cmap.Attach(cmap_iter.Next()); + if (!cmap) + continue; + cmap_table_builder->NewCMapBuilder(cmap->cmap_id(), cmap->ReadFontData()); + } + + FontPtr new_font; + new_font.Attach(font_builder->Build()); + CMapTablePtr new_cmap_table = + down_cast<CMapTable*>(font->GetTable(Tag::cmap)); + ASSERT_EQ(cmap_table->NumCMaps(), new_cmap_table->NumCMaps()); + CMapTable::CMapPtr cmap; + cmap.Attach(cmap_table->GetCMap(CMapTable::WINDOWS_BMP)); + ASSERT_NE(cmap, reinterpret_cast<CMapTable::CMap*>(NULL)); + ASSERT_EQ(CMapTable::WINDOWS_BMP, cmap->cmap_id()); +} +} |