Index: content/renderer/hyphenator/hyphenator_unittest.cc |
diff --git a/content/renderer/hyphenator/hyphenator_unittest.cc b/content/renderer/hyphenator/hyphenator_unittest.cc |
deleted file mode 100644 |
index 02e2bc927d39f7ffc8efbf04eb6a29da69329a25..0000000000000000000000000000000000000000 |
--- a/content/renderer/hyphenator/hyphenator_unittest.cc |
+++ /dev/null |
@@ -1,191 +0,0 @@ |
-// 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/strings/utf_string_conversions.h" |
-#include "content/common/hyphenator_messages.h" |
-#include "content/public/test/mock_render_thread.h" |
-#include "ipc/ipc_listener.h" |
-#include "testing/gtest/include/gtest/gtest.h" |
-#include "third_party/hyphen/hyphen.h" |
- |
-namespace content { |
-namespace { |
- |
-// A mock message listener that listens for HyphenatorHost messages. This class |
-// intercepts a HyphenatorHostMsg_OpenDictionary message sent to an |
-// IPC::TestSink object and emulates the HyphenatorMessageFilter class. |
-class MockListener : public IPC::Listener { |
- public: |
- MockListener(Hyphenator* hyphenator, const string16& locale) |
- : hyphenator_(hyphenator), |
- locale_(locale) { |
- } |
- virtual ~MockListener() { |
- } |
- |
- // IPC::ChannelProxy::MessageFilter implementation. |
- virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE { |
- if (message.type() != HyphenatorHostMsg_OpenDictionary::ID) |
- return false; |
- |
- // Retrieve the locale parameter directly because HyphenatorHost messages |
- // are internal messages and unit tests cannot access its member functions, |
- // i.e. unit tests cannot call the HyphenatorHostMsg_OpenDictionary::Read |
- // function. |
- PickleIterator iter(message); |
- string16 locale; |
- EXPECT_TRUE(message.ReadString16(&iter, &locale)); |
- EXPECT_EQ(locale_, locale); |
- |
- // Open the default dictionary and call the OnControllMessageReceived |
- // function with a HyphenatorMsg_SetDictionary message. |
- base::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); |
- EXPECT_NE(base::kInvalidPlatformFileValue, file); |
- |
- IPC::Message response( |
- 0, HyphenatorMsg_SetDictionary::ID, IPC::Message::PRIORITY_NORMAL); |
- IPC::PlatformFileForTransit transit = IPC::GetFileHandleForProcess( |
- file, GetHandle(), false); |
- IPC::ParamTraits<IPC::PlatformFileForTransit>::Write(&response, transit); |
- hyphenator_->OnControlMessageReceived(response); |
- base::ClosePlatformFile(file); |
- return true; |
- } |
- |
- private: |
- base::ProcessHandle GetHandle() const { |
- return base::Process::Current().handle(); |
- } |
- |
- Hyphenator* hyphenator_; |
- string16 locale_; |
-}; |
- |
-} // namespace |
- |
-// A unit test for our hyphenator. This class loads a sample hyphenation |
-// dictionary and hyphenates words. |
-class HyphenatorTest : public testing::Test { |
- public: |
- HyphenatorTest() { |
- } |
- |
- bool Initialize() { |
- base::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. |
- string16 Hyphenate(const string16& word) { |
- string16 hyphenated_word(word); |
- size_t position = word.length(); |
- while (position > 0) { |
- size_t new_position = hyphenator_->ComputeLastHyphenLocation(word, |
- position); |
- EXPECT_LT(new_position, position); |
- if (new_position > 0) |
- hyphenated_word.insert(new_position, 1, '-'); |
- position = new_position; |
- } |
- return hyphenated_word; |
- } |
- |
- bool OpenDictionary(const string16& locale) { |
- hyphenator_.reset(new Hyphenator(base::kInvalidPlatformFileValue)); |
- thread_.reset(new MockRenderThread()); |
- listener_.reset(new MockListener(hyphenator_.get(), locale)); |
- thread_->sink().AddFilter(listener_.get()); |
- return hyphenator_->Attach(thread_.get(), locale); |
- } |
- |
- size_t GetMessageCount() const { |
- return thread_->sink().message_count(); |
- } |
- |
- private: |
- scoped_ptr<Hyphenator> hyphenator_; |
- scoped_ptr<MockRenderThread> thread_; |
- scoped_ptr<MockListener> listener_; |
-}; |
- |
-// 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" }, |
- }; |
- Initialize(); |
- for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kTestCases); ++i) { |
- string16 input = ASCIIToUTF16(kTestCases[i].input); |
- string16 expected = ASCIIToUTF16(kTestCases[i].expected); |
- EXPECT_EQ(expected, Hyphenate(input)); |
- } |
-} |
- |
-// Verifies that our hyphenator sends a HyphenatorHostMsg_OpenDictionary |
-// message to ask a browser to open a dictionary. Also, this test verifies that |
-// our hyphenator can hyphnate words when the Hyphenator::SetDictionary function |
-// is called. |
-TEST_F(HyphenatorTest, openDictionary) { |
- // Send a HyphenatorHostMsg_OpenDictionary message and verify it is handled by |
- // our MockListner class. |
- EXPECT_TRUE(OpenDictionary(string16())); |
- EXPECT_EQ(0U, GetMessageCount()); |
- |
- // Verify that we can now hyphenate words. When the MockListener class |
- // receives a HyphenatorHostMsg_OpenDictionary message, it calls the |
- // OnControlMessageReceived function with a HyphenatorMsg_SetDictionary |
- // message. So, the Hyphenate function should be able to hyphenate words now. |
- string16 input = ASCIIToUTF16("hyphenation"); |
- string16 expected = ASCIIToUTF16("hy-phen-ation"); |
- EXPECT_EQ(expected, Hyphenate(input)); |
-} |
- |
-} // namespace content |