Home | History | Annotate | Download | only in spellchecker
      1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "base/command_line.h"
      6 #include "base/memory/scoped_vector.h"
      7 #include "base/message_loop/message_loop.h"
      8 #include "base/stl_util.h"
      9 #include "base/strings/utf_string_conversions.h"
     10 #include "chrome/browser/spellchecker/spellcheck_message_filter_mac.h"
     11 #include "chrome/common/spellcheck_messages.h"
     12 #include "chrome/common/spellcheck_result.h"
     13 #include "chrome/test/base/in_process_browser_test.h"
     14 #include "chrome/test/base/ui_test_utils.h"
     15 #include "testing/gtest/include/gtest/gtest.h"
     16 
     17 // Fake filter for testing, which stores sent messages and
     18 // allows verification by the test case.
     19 class TestingSpellCheckMessageFilter : public SpellCheckMessageFilterMac {
     20  public:
     21   explicit TestingSpellCheckMessageFilter(base::MessageLoopForUI* loop)
     22       : SpellCheckMessageFilterMac(0),
     23         loop_(loop) { }
     24 
     25   virtual bool Send(IPC::Message* message) OVERRIDE {
     26     sent_messages_.push_back(message);
     27     loop_->PostTask(FROM_HERE, base::MessageLoop::QuitClosure());
     28     return true;
     29   }
     30 
     31   ScopedVector<IPC::Message> sent_messages_;
     32   base::MessageLoopForUI* loop_;
     33 
     34  private:
     35   virtual ~TestingSpellCheckMessageFilter() {}
     36 };
     37 
     38 typedef InProcessBrowserTest SpellCheckMessageFilterMacBrowserTest;
     39 
     40 // Uses browsertest to setup chrome threads.
     41 IN_PROC_BROWSER_TEST_F(SpellCheckMessageFilterMacBrowserTest,
     42                        SpellCheckReturnMessage) {
     43   scoped_refptr<TestingSpellCheckMessageFilter> target(
     44       new TestingSpellCheckMessageFilter(base::MessageLoopForUI::current()));
     45 
     46   SpellCheckHostMsg_RequestTextCheck to_be_received(
     47       123, 456, base::UTF8ToUTF16("zz."), std::vector<SpellCheckMarker>());
     48   target->OnMessageReceived(to_be_received);
     49 
     50   base::MessageLoopForUI::current()->Run();
     51   EXPECT_EQ(1U, target->sent_messages_.size());
     52 
     53   SpellCheckMsg_RespondTextCheck::Param params;
     54   bool ok = SpellCheckMsg_RespondTextCheck::Read(
     55       target->sent_messages_[0], &params);
     56   std::vector<SpellCheckResult> sent_results = params.b;
     57 
     58   EXPECT_TRUE(ok);
     59   EXPECT_EQ(1U, sent_results.size());
     60   EXPECT_EQ(sent_results[0].location, 0);
     61   EXPECT_EQ(sent_results[0].length, 2);
     62   EXPECT_EQ(sent_results[0].decoration,
     63             SpellCheckResult::SPELLING);
     64 }
     65