| Index: content/browser/hyphenator/hyphenator_message_filter_unittest.cc
|
| ===================================================================
|
| --- content/browser/hyphenator/hyphenator_message_filter_unittest.cc (revision 0)
|
| +++ content/browser/hyphenator/hyphenator_message_filter_unittest.cc (revision 0)
|
| @@ -0,0 +1,154 @@
|
| +// 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/browser/hyphenator/hyphenator_message_filter.h"
|
| +
|
| +#include "base/base_paths.h"
|
| +#include "base/file_path.h"
|
| +#include "base/path_service.h"
|
| +#include "base/string16.h"
|
| +#include "base/utf_string_conversions.h"
|
| +#include "content/common/hyphenator_messages.h"
|
| +#include "content/public/test/mock_render_process_host.h"
|
| +#include "content/public/test/test_browser_context.h"
|
| +#include "ipc/ipc_message_utils.h"
|
| +#include "ipc/ipc_platform_file.h"
|
| +#include "testing/gtest/include/gtest/gtest.h"
|
| +
|
| +namespace content {
|
| +
|
| +// A class derived from the HyphenatorMessageFilter class used in unit tests.
|
| +// This class overrides some methods so we can test the HyphenatorMessageFilter
|
| +// class without posting tasks.
|
| +class TestHyphenatorMessageFilter : public content::HyphenatorMessageFilter {
|
| + public:
|
| + explicit TestHyphenatorMessageFilter(content::RenderProcessHost* host)
|
| + : content::HyphenatorMessageFilter(host),
|
| + type_(0),
|
| + file_(base::kInvalidPlatformFileValue) {
|
| + }
|
| +
|
| + const string16& locale() const { return locale_; }
|
| + uint32 type() const { return type_; }
|
| + base::PlatformFile file() const { return file_; }
|
| +
|
| + // content::BrowserMessageFilter implementation.
|
| + virtual bool Send(IPC::Message* message) OVERRIDE {
|
| + if (message->type() != HyphenatorMsg_SetDictionary::ID)
|
| + return false;
|
| +
|
| + // Read the PlatformFileForTransit object and check if its value is
|
| + // kInvalidPlatformFileValue. Close the incoming file if it is not
|
| + // kInvalidPlatformFileValue to prevent leaving the dictionary file open.
|
| + type_ = message->type();
|
| + PickleIterator iter(*message);
|
| + IPC::PlatformFileForTransit file;
|
| + IPC::ParamTraits<IPC::PlatformFileForTransit>::Read(message, &iter, &file);
|
| + file_ = IPC::PlatformFileForTransitToPlatformFile(file);
|
| + return true;
|
| + }
|
| +
|
| + void SetDictionary(base::PlatformFile file) {
|
| + dictionary_file_ = file;
|
| + }
|
| +
|
| + void Reset() {
|
| + if (dictionary_file_ != base::kInvalidPlatformFileValue) {
|
| + base::ClosePlatformFile(dictionary_file_);
|
| + dictionary_file_ = base::kInvalidPlatformFileValue;
|
| + }
|
| + locale_.clear();
|
| + type_ = 0;
|
| + if (file_ != base::kInvalidPlatformFileValue) {
|
| + base::ClosePlatformFile(file_);
|
| + file_ = base::kInvalidPlatformFileValue;
|
| + }
|
| + }
|
| +
|
| + private:
|
| + virtual ~TestHyphenatorMessageFilter() {
|
| + }
|
| +
|
| + // content::HyphenatorMessageFilter implementation. This function emulates the
|
| + // original implementation without posting a task.
|
| + virtual void OnOpenDictionary(const string16& locale) OVERRIDE {
|
| + locale_ = locale;
|
| + if (dictionary_file_ == base::kInvalidPlatformFileValue)
|
| + OpenDictionary(locale);
|
| + SendDictionary();
|
| + }
|
| +
|
| + string16 locale_;
|
| + uint32 type_;
|
| + base::PlatformFile file_;
|
| +};
|
| +
|
| +} // namespace content
|
| +
|
| +class HyphenatorMessageFilterTest : public testing::Test {
|
| + public:
|
| + HyphenatorMessageFilterTest() {
|
| + context_.reset(new content::TestBrowserContext);
|
| + host_.reset(new content::MockRenderProcessHost(context_.get()));
|
| + filter_ = new content::TestHyphenatorMessageFilter(host_.get());
|
| + }
|
| +
|
| + virtual ~HyphenatorMessageFilterTest() {}
|
| +
|
| + scoped_ptr<content::TestBrowserContext> context_;
|
| + scoped_ptr<content::MockRenderProcessHost> host_;
|
| + scoped_refptr<content::TestHyphenatorMessageFilter> filter_;
|
| +};
|
| +
|
| +// Verifies IPC messages sent by the HyphenatorMessageFilter class when it
|
| +// receives IPC messages (HyphenatorHostMsg_OpenDictionary).
|
| +TEST_F(HyphenatorMessageFilterTest, OpenDictionary) {
|
| + // Send a HyphenatorHostMsg_OpenDictionary message with an invalid locale and
|
| + // verify it sends a HyphenatorMsg_SetDictionary message with an invalid file.
|
| + string16 invalid_locale(ASCIIToUTF16("xx-xx"));
|
| + IPC::Message invalid_message(
|
| + 0, HyphenatorHostMsg_OpenDictionary::ID, IPC::Message::PRIORITY_NORMAL);
|
| + invalid_message.WriteString16(invalid_locale);
|
| +
|
| + bool message_was_ok = false;
|
| + filter_->OnMessageReceived(invalid_message, &message_was_ok);
|
| + EXPECT_TRUE(message_was_ok);
|
| + EXPECT_EQ(invalid_locale, filter_->locale());
|
| + EXPECT_EQ(HyphenatorMsg_SetDictionary::ID, filter_->type());
|
| + EXPECT_EQ(base::kInvalidPlatformFileValue, filter_->file());
|
| +
|
| + filter_->Reset();
|
| +
|
| + // Open a sample dictionary file and attach it to the
|
| + // HyphenatorMessageFilter class so it can return a valid file.
|
| + FilePath path;
|
| + PathService::Get(base::DIR_SOURCE_ROOT, &path);
|
| + path = path.Append(FILE_PATH_LITERAL("third_party"));
|
| + path = path.Append(FILE_PATH_LITERAL("hyphen"));
|
| + path = path.Append(FILE_PATH_LITERAL("hyph_en_US.dic"));
|
| + base::PlatformFile file = base::CreatePlatformFile(
|
| + path, base::PLATFORM_FILE_OPEN | base::PLATFORM_FILE_READ,
|
| + NULL, NULL);
|
| + EXPECT_NE(base::kInvalidPlatformFileValue, file);
|
| + filter_->SetDictionary(file);
|
| +
|
| + // Send a HyphenatorHostMsg_OpenDictionary message with an empty locale and
|
| + // verify it sends a HyphenatorMsg_SetDictionary message with a valid file.
|
| + string16 empty_locale;
|
| + IPC::Message valid_message(
|
| + 0, HyphenatorHostMsg_OpenDictionary::ID, IPC::Message::PRIORITY_NORMAL);
|
| + valid_message.WriteString16(empty_locale);
|
| +
|
| + message_was_ok = false;
|
| + filter_->OnMessageReceived(valid_message, &message_was_ok);
|
| + EXPECT_TRUE(message_was_ok);
|
| + EXPECT_EQ(empty_locale, filter_->locale());
|
| + EXPECT_EQ(HyphenatorMsg_SetDictionary::ID, filter_->type());
|
| + EXPECT_NE(base::kInvalidPlatformFileValue, filter_->file());
|
| +
|
| + // Delete all resources used by this test.
|
| + filter_->Reset();
|
| + if (file != base::kInvalidPlatformFileValue)
|
| + base::ClosePlatformFile(file);
|
| +}
|
|
|
| Property changes on: content\browser\hyphenator\hyphenator_message_filter_unittest.cc
|
| ___________________________________________________________________
|
| Added: svn:eol-style
|
| + LF
|
|
|
|
|