Chromium Code Reviews| Index: content/renderer/hyphenator/hyphenator_unittest.cc |
| =================================================================== |
| --- content/renderer/hyphenator/hyphenator_unittest.cc (revision 0) |
| +++ content/renderer/hyphenator/hyphenator_unittest.cc (revision 0) |
| @@ -0,0 +1,91 @@ |
| +// Copyright (c) 2012 The Chromium 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 "content/renderer/hyphenator/hyphenator.h" |
| + |
| +#include "base/path_service.h" |
| +#include "base/platform_file.h" |
| +#include "base/utf_string_conversions.h" |
| +#include "testing/gtest/include/gtest/gtest.h" |
| +#include "third_party/hyphen/hyphen.h" |
| + |
| +// A unit test for our hyphenator. This class loads a sample hyphenation |
| +// dictionary and hyphenates words. |
| +class HyphenatorTest : public testing::Test { |
| + public: |
| + HyphenatorTest() { |
| + Initialize(); |
| + } |
| + |
| + bool Initialize() { |
|
jochen (gone - plz use gerrit)
2012/07/02 15:33:01
should be void SetUp()
|
| + FilePath dictionary_path; |
| + if (!PathService::Get(base::DIR_SOURCE_ROOT, &dictionary_path)) |
| + return false; |
| + dictionary_path = dictionary_path.AppendASCII("third_party"); |
| + dictionary_path = dictionary_path.AppendASCII("hyphen"); |
| + dictionary_path = dictionary_path.AppendASCII("hyph_en_US.dic"); |
| + base::PlatformFile file = base::CreatePlatformFile( |
| + dictionary_path, base::PLATFORM_FILE_OPEN | base::PLATFORM_FILE_READ, |
| + NULL, NULL); |
| + hyphenator_.reset(new Hyphenator(file)); |
| + return hyphenator_->Initialize(); |
| + } |
| + |
| + // Creates a human-readable hyphenated word. This function inserts '-' |
| + // characters to all places where we can insert hyphens to improve the |
| + // readability of this unit test. |
| + void Hyphenate(const string16& word, string16* hyphenated_word) { |
|
tony
2012/06/28 20:06:44
Nit: I would probably just return a string16 with
|
| + hyphenated_word->assign(word); |
| + size_t position = word.length(); |
| + while (position > 0) { |
| + size_t new_position = hyphenator_->ComputeLastHyphenLocation(word, |
| + position); |
| + ASSERT_LT(new_position, position); |
| + if (new_position > 0) |
| + hyphenated_word->insert(new_position, 1, '-'); |
| + position = new_position; |
| + } |
| + } |
| + |
| + private: |
| + scoped_ptr<Hyphenator> hyphenator_; |
| +}; |
| + |
| +// Verifies that our hyphenator yields the same hyphenated words as the original |
| +// hyphen library does. |
| +TEST_F(HyphenatorTest, HyphenateWords) { |
| + static const struct { |
| + const char* input; |
| + const char* expected; |
| + } kTestCases[] = { |
| + { "and", "and" }, |
| + { "concupiscent,", "con-cu-pis-cent," }, |
| + { "evidence.", "ev-i-dence." }, |
| + { "first", "first" }, |
| + { "getting", "get-ting" }, |
| + { "hedgehog", "hedge-hog" }, |
| + { "remarkable", "re-mark-able" }, |
| + { "straightened", "straight-ened" }, |
| + { "undid", "un-did" }, |
| + { "were", "were" }, |
| + { "Simply", "Sim-ply" }, |
| + { "Undone.", "Un-done." }, |
| + { "comfortably", "com-fort-ably"}, |
| + { "declination", "dec-li-na-tion" }, |
| + { "flamingo:", "flamin-go:" }, |
| + { "lination", "lina-tion" }, |
| + { "reciprocity", "rec-i-proc-i-ty" }, |
| + { "throughout", "through-out" }, |
| + { "undid", "un-did" }, |
| + { "undone.", "un-done." }, |
| + { "unnecessary", "un-nec-es-sary" }, |
| + }; |
| + for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kTestCases); ++i) { |
| + string16 input = ASCIIToUTF16(kTestCases[i].input); |
| + string16 expected = ASCIIToUTF16(kTestCases[i].expected); |
| + string16 actual; |
| + Hyphenate(input, &actual); |
| + EXPECT_EQ(expected, actual); |
| + } |
| +} |
| Property changes on: content\renderer\hyphenator\hyphenator_unittest.cc |
| ___________________________________________________________________ |
| Added: svn:eol-style |
| + LF |