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

Side by Side Diff: chrome/browser/renderer_host/text_input_client_mac_unittest.mm

Issue 6289009: [Mac] Implement the system dictionary popup by implementing NSTextInput methods. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address comments Created 9 years, 10 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2011 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 #import "chrome/browser/renderer_host/text_input_client_mac.h"
6
7 #include "base/message_loop.h"
8 #include "base/task.h"
9 #include "base/threading/thread.h"
10 #include "testing/gtest/include/gtest/gtest.h"
11 #include "testing/gtest_mac.h"
12
13 namespace {
14
15 // This test does not test the WebKit side of the dictionary system (which
16 // performs the actual data fetching), but rather this just tests that the
17 // service's signaling system works.
18 class TextInputClientMacTest : public testing::Test {
19 public:
20 TextInputClientMacTest()
21 : thread_("TextInputClientMacTestThread") {}
22
23 // Accessor for the TextInputClientMac instance.
24 TextInputClientMac* service() {
25 return TextInputClientMac::GetInstance();
26 }
27
28 // Helper method to post a task on the testing thread's MessageLoop after
29 // a short delay.
30 void PostTask(Task* task) {
31 const int64 kTaskDelayMs = 200;
32 thread_.message_loop()->PostDelayedTask(FROM_HERE, task, kTaskDelayMs);
33 }
34
35 private:
36 friend class ScopedTestingThread;
37 base::Thread thread_;
38 };
39
40 ////////////////////////////////////////////////////////////////////////////////
41
42 // Helper class that Start()s and Stop()s a thread according to the scope of the
43 // object.
44 class ScopedTestingThread {
45 public:
46 ScopedTestingThread(TextInputClientMacTest* test) : thread_(test->thread_) {
47 thread_.Start();
48 }
49 ~ScopedTestingThread() {
50 thread_.Stop();
51 }
52
53 private:
54 base::Thread& thread_;
55 };
56
57 // Helper Tasks ////////////////////////////////////////////////////////////////
58 //
59 // These tasks are posted to the MessageLoop of TextInputClientMacTest::thread_
60 // to test the condition variable signaling. There is one Task for each piece
61 // of information the TextInputClientMac service deals with.
62 ////////////////////////////////////////////////////////////////////////////////
63
64 class CharacterIndexTask : public Task {
65 public:
66 CharacterIndexTask(NSUInteger success_value) : success_value_(success_value) {
67 }
68
69 virtual void Run() {
70 TextInputClientMac::GetInstance()->SetCharacterIndexAndSignal(
71 success_value_);
72 }
73
74 private:
75 NSUInteger success_value_;
76 };
77
78 class RectForRangeTask : public Task {
79 public:
80 RectForRangeTask(NSRect success_value) : success_value_(success_value) {
81 }
82
83 virtual void Run() {
84 TextInputClientMac::GetInstance()->SetFirstRectAndSignal(success_value_);
85 }
86
87 private:
88 NSRect success_value_;
89 };
90
91 class SubstringTask : public Task {
92 public:
93 SubstringTask(NSAttributedString* success_value)
94 : success_value_(success_value) {
95 }
96
97 virtual void Run() {
98 TextInputClientMac::GetInstance()->SetSubstringAndSignal(success_value_);
99 }
100
101 private:
102 NSAttributedString* success_value_; // weak
103 };
104
105 // Test Cases //////////////////////////////////////////////////////////////////
106
107 TEST_F(TextInputClientMacTest, GetCharacterIndex) {
108 ScopedTestingThread thread(this);
109 const NSUInteger kSuccessValue = 42;
110
111 service()->BeforeRequest();
112 PostTask(new CharacterIndexTask(kSuccessValue));
113 NSUInteger index = service()->WaitForCharacterIndex();
114 service()->AfterRequest();
115
116 EXPECT_EQ(kSuccessValue, index);
117 }
118
119 TEST_F(TextInputClientMacTest, TimeoutCharacterIndex) {
120 service()->BeforeRequest();
121 NSUInteger index = service()->WaitForCharacterIndex();
122 service()->AfterRequest();
123 EXPECT_EQ(NSNotFound, index);
124 }
125
126 TEST_F(TextInputClientMacTest, GetRectForRange) {
127 ScopedTestingThread thread(this);
128 const NSRect kSuccessValue = NSMakeRect(42, 43, 44, 45);
129
130 service()->BeforeRequest();
131 PostTask(new RectForRangeTask(kSuccessValue));
132 NSRect rect = service()->WaitForFirstRect();
133 service()->AfterRequest();
134
135 EXPECT_TRUE(NSEqualRects(kSuccessValue, rect));
136 }
137
138 TEST_F(TextInputClientMacTest, TimeoutRectForRange) {
139 service()->BeforeRequest();
140 NSRect rect = service()->WaitForFirstRect();
141 service()->AfterRequest();
142 EXPECT_TRUE(NSEqualRects(NSZeroRect, rect));
143 }
144
145 TEST_F(TextInputClientMacTest, GetSubstring) {
146 ScopedTestingThread thread(this);
147 NSDictionary* attributes =
148 [NSDictionary dictionaryWithObject:[NSColor purpleColor]
149 forKey:NSForegroundColorAttributeName];
150 scoped_nsobject<NSAttributedString> kSuccessValue(
151 [[NSAttributedString alloc] initWithString:@"Barney is a purple dinosaur"
152 attributes:attributes]);
153
154 service()->BeforeRequest();
155 PostTask(new SubstringTask(kSuccessValue.get()));
156 NSAttributedString* string = service()->WaitForSubstring();
157 service()->AfterRequest();
158
159 EXPECT_NSEQ(kSuccessValue, string);
jeremy 2011/02/21 09:19:47 Does this test that the string attributes are the
Robert Sesek 2011/02/24 23:26:52 This does -[NSObject isEqual:]
160 EXPECT_NE(kSuccessValue.get(), string); // |string| should be a copy.
161 }
162
163 TEST_F(TextInputClientMacTest, TimeoutSubstring) {
164 service()->BeforeRequest();
165 NSAttributedString* string = service()->WaitForSubstring();
166 service()->AfterRequest();
167 EXPECT_EQ(nil, string);
168 }
169
170 } // namespace
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698