Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(373)

Unified Diff: content/renderer/hyphenator/hyphenator_unittest.cc

Issue 10854245: In-te-grate hy-phen-ator to con-tent. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 8 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/renderer/hyphenator/hyphenator.cc ('k') | content/renderer/renderer_webkitplatformsupport_impl.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/renderer/hyphenator/hyphenator_unittest.cc
===================================================================
--- content/renderer/hyphenator/hyphenator_unittest.cc (revision 154648)
+++ content/renderer/hyphenator/hyphenator_unittest.cc (working copy)
@@ -7,15 +7,79 @@
#include "base/path_service.h"
#include "base/platform_file.h"
#include "base/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 {
+
+// 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(content::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.
+ 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();
+ }
+
+ content::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() {
- Initialize();
}
bool Initialize() {
@@ -49,8 +113,22 @@
return hyphenated_word;
}
+ bool OpenDictionary(const string16& locale) {
+ hyphenator_.reset(new content::Hyphenator(base::kInvalidPlatformFileValue));
+ thread_.reset(new content::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<content::Hyphenator> hyphenator_;
+ scoped_ptr<content::MockRenderThread> thread_;
+ scoped_ptr<MockListener> listener_;
};
// Verifies that our hyphenator yields the same hyphenated words as the original
@@ -82,9 +160,29 @@
{ "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));
+}
« no previous file with comments | « content/renderer/hyphenator/hyphenator.cc ('k') | content/renderer/renderer_webkitplatformsupport_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698