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

Side by Side Diff: ui/base/ime/win/tsf_text_store_unittest.cc

Issue 23548030: Style fix of TSFTextStoreTest (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Style fix Created 7 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 unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ui/base/ime/win/tsf_text_store.h" 5 #include "ui/base/ime/win/tsf_text_store.h"
6 6
7 #include "base/memory/ref_counted.h"
7 #include "base/win/scoped_com_initializer.h" 8 #include "base/win/scoped_com_initializer.h"
8 #include "testing/gtest/include/gtest/gtest.h" 9 #include "testing/gtest/include/gtest/gtest.h"
9 #include "testing/gmock/include/gmock/gmock.h" 10 #include "testing/gmock/include/gmock/gmock.h"
10 #include "ui/base/ime/text_input_client.h" 11 #include "ui/base/ime/text_input_client.h"
11 #include "ui/gfx/rect.h" 12 #include "ui/gfx/rect.h"
12 13
13 using testing::_; 14 using testing::_;
14 using testing::Invoke; 15 using testing::Invoke;
15 using testing::Return; 16 using testing::Return;
16 17
17 namespace ui { 18 namespace ui {
18
19 namespace { 19 namespace {
20 20
21 class MockTextInputClient : public TextInputClient { 21 class MockTextInputClient : public TextInputClient {
22 public: 22 public:
23 ~MockTextInputClient() {} 23 ~MockTextInputClient() {}
24 MOCK_METHOD1(SetCompositionText, void(const ui::CompositionText&)); 24 MOCK_METHOD1(SetCompositionText, void(const ui::CompositionText&));
25 MOCK_METHOD0(ConfirmCompositionText, void()); 25 MOCK_METHOD0(ConfirmCompositionText, void());
26 MOCK_METHOD0(ClearCompositionText, void()); 26 MOCK_METHOD0(ClearCompositionText, void());
27 MOCK_METHOD1(InsertText, void(const string16&)); 27 MOCK_METHOD1(InsertText, void(const string16&));
28 MOCK_METHOD2(InsertChar, void(char16, int)); 28 MOCK_METHOD2(InsertChar, void(char16, int));
(...skipping 12 matching lines...) Expand all
41 MOCK_METHOD2(GetTextFromRange, bool(const gfx::Range&, string16*)); 41 MOCK_METHOD2(GetTextFromRange, bool(const gfx::Range&, string16*));
42 MOCK_METHOD0(OnInputMethodChanged, void()); 42 MOCK_METHOD0(OnInputMethodChanged, void());
43 MOCK_METHOD1(ChangeTextDirectionAndLayoutAlignment, 43 MOCK_METHOD1(ChangeTextDirectionAndLayoutAlignment,
44 bool(base::i18n::TextDirection)); 44 bool(base::i18n::TextDirection));
45 MOCK_METHOD2(ExtendSelectionAndDelete, void(size_t, size_t)); 45 MOCK_METHOD2(ExtendSelectionAndDelete, void(size_t, size_t));
46 MOCK_METHOD1(EnsureCaretInRect, void(const gfx::Rect&)); 46 MOCK_METHOD1(EnsureCaretInRect, void(const gfx::Rect&));
47 }; 47 };
48 48
49 class MockStoreACPSink : public ITextStoreACPSink { 49 class MockStoreACPSink : public ITextStoreACPSink {
50 public: 50 public:
51 MockStoreACPSink() : ref_count_(0) { 51 MockStoreACPSink() : ref_count_(0) {}
52 }
53 52
54 // IUnknown 53 // IUnknown
55 virtual ULONG STDMETHODCALLTYPE AddRef() OVERRIDE { 54 virtual ULONG STDMETHODCALLTYPE AddRef() OVERRIDE {
56 return InterlockedIncrement(&ref_count_); 55 return InterlockedIncrement(&ref_count_);
57 } 56 }
58 virtual ULONG STDMETHODCALLTYPE Release() OVERRIDE { 57 virtual ULONG STDMETHODCALLTYPE Release() OVERRIDE {
59 const LONG count = InterlockedDecrement(&ref_count_); 58 const LONG count = InterlockedDecrement(&ref_count_);
60 if (!count) { 59 if (!count) {
61 delete this; 60 delete this;
62 return 0; 61 return 0;
(...skipping 24 matching lines...) Expand all
87 MOCK_METHOD4_WITH_CALLTYPE(STDMETHODCALLTYPE, OnAttrsChange, 86 MOCK_METHOD4_WITH_CALLTYPE(STDMETHODCALLTYPE, OnAttrsChange,
88 HRESULT(LONG, LONG, ULONG, const TS_ATTRID*)); 87 HRESULT(LONG, LONG, ULONG, const TS_ATTRID*));
89 MOCK_METHOD1_WITH_CALLTYPE(STDMETHODCALLTYPE, OnLockGranted, 88 MOCK_METHOD1_WITH_CALLTYPE(STDMETHODCALLTYPE, OnLockGranted,
90 HRESULT(DWORD)); 89 HRESULT(DWORD));
91 MOCK_METHOD0_WITH_CALLTYPE(STDMETHODCALLTYPE, OnStartEditTransaction, 90 MOCK_METHOD0_WITH_CALLTYPE(STDMETHODCALLTYPE, OnStartEditTransaction,
92 HRESULT()); 91 HRESULT());
93 MOCK_METHOD0_WITH_CALLTYPE(STDMETHODCALLTYPE, OnEndEditTransaction, 92 MOCK_METHOD0_WITH_CALLTYPE(STDMETHODCALLTYPE, OnEndEditTransaction,
94 HRESULT()); 93 HRESULT());
95 94
96 private: 95 private:
97 ~MockStoreACPSink() { 96 virtual ~MockStoreACPSink() {}
98 }
99 97
100 volatile LONG ref_count_; 98 volatile LONG ref_count_;
101 }; 99 };
102 100
101 const HWND kWindowHandle = reinterpret_cast<HWND>(1);
102
103 } // namespace 103 } // namespace
104 104
105 class TSFTextStoreTest : public testing::Test { 105 class TSFTextStoreTest : public testing::Test {
106 protected: 106 protected:
107 virtual void SetUp() OVERRIDE { 107 virtual void SetUp() OVERRIDE {
108 text_store_ = new TSFTextStore(); 108 text_store_ = new TSFTextStore();
109 text_store_->AddRef();
110 sink_ = new MockStoreACPSink(); 109 sink_ = new MockStoreACPSink();
111 sink_->AddRef();
112 EXPECT_EQ(S_OK, text_store_->AdviseSink(IID_ITextStoreACPSink, 110 EXPECT_EQ(S_OK, text_store_->AdviseSink(IID_ITextStoreACPSink,
113 sink_, TS_AS_ALL_SINKS)); 111 sink_, TS_AS_ALL_SINKS));
114 text_store_->SetFocusedTextInputClient(0, &text_input_client_); 112 text_store_->SetFocusedTextInputClient(kWindowHandle,
113 &text_input_client_);
115 } 114 }
116 115
117 virtual void TearDown() OVERRIDE { 116 virtual void TearDown() OVERRIDE {
118 EXPECT_EQ(S_OK, text_store_->UnadviseSink(sink_)); 117 EXPECT_EQ(S_OK, text_store_->UnadviseSink(sink_));
119 sink_->Release(); 118 sink_ = NULL;
120 text_store_->Release(); 119 text_store_ = NULL;
121 } 120 }
122 121
123 base::win::ScopedCOMInitializer com_initializer_; 122 base::win::ScopedCOMInitializer com_initializer_;
124 MockTextInputClient text_input_client_; 123 MockTextInputClient text_input_client_;
125 TSFTextStore* text_store_; 124 scoped_refptr<TSFTextStore> text_store_;
126 MockStoreACPSink* sink_; 125 scoped_refptr<MockStoreACPSink> sink_;
127 }; 126 };
128 127
129 class TSFTextStoreTestCallback { 128 class TSFTextStoreTestCallback {
130 public: 129 public:
131 explicit TSFTextStoreTestCallback(TSFTextStore* text_store) 130 explicit TSFTextStoreTestCallback(TSFTextStore* text_store)
132 : text_store_(text_store) { 131 : text_store_(text_store) {
133 CHECK(text_store_); 132 CHECK(text_store_);
134 } 133 }
135 virtual ~TSFTextStoreTestCallback() {} 134 virtual ~TSFTextStoreTestCallback() {}
136 135
(...skipping 17 matching lines...) Expand all
154 *string_buffer() = new_string_buffer; 153 *string_buffer() = new_string_buffer;
155 *committed_size() = new_committed_size; 154 *committed_size() = new_committed_size;
156 selection()->set_start(new_selection_start); 155 selection()->set_start(new_selection_start);
157 selection()->set_end(new_selection_end); 156 selection()->set_end(new_selection_end);
158 } 157 }
159 158
160 bool HasReadLock() const { return text_store_->HasReadLock(); } 159 bool HasReadLock() const { return text_store_->HasReadLock(); }
161 bool HasReadWriteLock() const { return text_store_->HasReadWriteLock(); } 160 bool HasReadWriteLock() const { return text_store_->HasReadWriteLock(); }
162 161
163 void GetSelectionTest(LONG expected_acp_start, LONG expected_acp_end) { 162 void GetSelectionTest(LONG expected_acp_start, LONG expected_acp_end) {
164 TS_SELECTION_ACP selection; 163 TS_SELECTION_ACP selection = {};
165 ULONG fetched; 164 ULONG fetched = 0;
166 EXPECT_EQ(S_OK, text_store_->GetSelection(0, 1, &selection, &fetched)); 165 EXPECT_EQ(S_OK, text_store_->GetSelection(0, 1, &selection, &fetched));
167 EXPECT_EQ(1, fetched); 166 EXPECT_EQ(1, fetched);
168 EXPECT_EQ(expected_acp_start, selection.acpStart); 167 EXPECT_EQ(expected_acp_start, selection.acpStart);
169 EXPECT_EQ(expected_acp_end, selection.acpEnd); 168 EXPECT_EQ(expected_acp_end, selection.acpEnd);
170 } 169 }
171 170
172 void SetSelectionTest(LONG acp_start, LONG acp_end, HRESULT expected_result) { 171 void SetSelectionTest(LONG acp_start, LONG acp_end, HRESULT expected_result) {
173 TS_SELECTION_ACP selection; 172 TS_SELECTION_ACP selection = {};
174 selection.acpStart = acp_start; 173 selection.acpStart = acp_start;
175 selection.acpEnd = acp_end; 174 selection.acpEnd = acp_end;
176 selection.style.ase = TS_AE_NONE; 175 selection.style.ase = TS_AE_NONE;
177 selection.style.fInterimChar = 0; 176 selection.style.fInterimChar = 0;
178 EXPECT_EQ(expected_result, text_store_->SetSelection(1, &selection)); 177 EXPECT_EQ(expected_result, text_store_->SetSelection(1, &selection));
179 if (expected_result == S_OK) { 178 if (expected_result == S_OK) {
180 GetSelectionTest(acp_start, acp_end); 179 GetSelectionTest(acp_start, acp_end);
181 } 180 }
182 } 181 }
183 182
184 void SetTextTest(LONG acp_start, LONG acp_end, 183 void SetTextTest(LONG acp_start, LONG acp_end,
185 const string16& text, HRESULT error_code) { 184 const string16& text, HRESULT error_code) {
186 TS_TEXTCHANGE change; 185 TS_TEXTCHANGE change = {};
187 ASSERT_EQ(error_code, 186 ASSERT_EQ(error_code,
188 text_store_->SetText(0, acp_start, acp_end, 187 text_store_->SetText(0, acp_start, acp_end,
189 text.c_str(), text.size(), &change)); 188 text.c_str(), text.size(), &change));
190 if (error_code == S_OK) { 189 if (error_code == S_OK) {
191 EXPECT_EQ(acp_start, change.acpStart); 190 EXPECT_EQ(acp_start, change.acpStart);
192 EXPECT_EQ(acp_end, change.acpOldEnd); 191 EXPECT_EQ(acp_end, change.acpOldEnd);
193 EXPECT_EQ(acp_start + text.size(), change.acpNewEnd); 192 EXPECT_EQ(acp_start + text.size(), change.acpNewEnd);
194 } 193 }
195 } 194 }
196 195
197 void GetTextTest(LONG acp_start, LONG acp_end, 196 void GetTextTest(LONG acp_start, LONG acp_end,
198 const string16& expected_string, 197 const string16& expected_string,
199 LONG expected_next_acp) { 198 LONG expected_next_acp) {
200 wchar_t buffer[1024]; 199 wchar_t buffer[1024] = {};
201 ULONG text_buffer_copied; 200 ULONG text_buffer_copied = 0;
202 TS_RUNINFO run_info; 201 TS_RUNINFO run_info = {};
203 ULONG run_info_buffer_copied; 202 ULONG run_info_buffer_copied = 0;
204 LONG next_acp; 203 LONG next_acp = 0;
205 ASSERT_EQ(S_OK, 204 ASSERT_EQ(S_OK,
206 text_store_->GetText(acp_start, acp_end, buffer, 1024, 205 text_store_->GetText(acp_start, acp_end, buffer, 1024,
207 &text_buffer_copied, 206 &text_buffer_copied,
208 &run_info, 1, &run_info_buffer_copied, 207 &run_info, 1, &run_info_buffer_copied,
209 &next_acp)); 208 &next_acp));
210 ASSERT_EQ(expected_string.size(), text_buffer_copied); 209 ASSERT_EQ(expected_string.size(), text_buffer_copied);
211 EXPECT_EQ(expected_string, string16(buffer, buffer + text_buffer_copied)); 210 EXPECT_EQ(expected_string, string16(buffer, buffer + text_buffer_copied));
212 EXPECT_EQ(1, run_info_buffer_copied); 211 EXPECT_EQ(1, run_info_buffer_copied);
213 EXPECT_EQ(expected_string.size(), run_info.uCount); 212 EXPECT_EQ(expected_string.size(), run_info.uCount);
214 EXPECT_EQ(TS_RT_PLAIN, run_info.type); 213 EXPECT_EQ(TS_RT_PLAIN, run_info.type);
215 EXPECT_EQ(expected_next_acp, next_acp); 214 EXPECT_EQ(expected_next_acp, next_acp);
216 } 215 }
217 216
218 void GetTextErrorTest(LONG acp_start, LONG acp_end, HRESULT error_code) { 217 void GetTextErrorTest(LONG acp_start, LONG acp_end, HRESULT error_code) {
219 wchar_t buffer[1024]; 218 wchar_t buffer[1024] = {};
220 ULONG text_buffer_copied; 219 ULONG text_buffer_copied = 0;
221 TS_RUNINFO run_info; 220 TS_RUNINFO run_info = {};
222 ULONG run_info_buffer_copied; 221 ULONG run_info_buffer_copied = 0;
223 LONG next_acp; 222 LONG next_acp = 0;
224 EXPECT_EQ(error_code, 223 EXPECT_EQ(error_code,
225 text_store_->GetText(acp_start, acp_end, buffer, 1024, 224 text_store_->GetText(acp_start, acp_end, buffer, 1024,
226 &text_buffer_copied, 225 &text_buffer_copied,
227 &run_info, 1, &run_info_buffer_copied, 226 &run_info, 1, &run_info_buffer_copied,
228 &next_acp)); 227 &next_acp));
229 } 228 }
230 229
231 void InsertTextAtSelectionTest(const wchar_t* buffer, ULONG buffer_size, 230 void InsertTextAtSelectionTest(const wchar_t* buffer, ULONG buffer_size,
232 LONG expected_start, LONG expected_end, 231 LONG expected_start, LONG expected_end,
233 LONG expected_change_start, 232 LONG expected_change_start,
234 LONG expected_change_old_end, 233 LONG expected_change_old_end,
235 LONG expected_change_new_end) { 234 LONG expected_change_new_end) {
236 LONG start, end; 235 LONG start = 0;
237 TS_TEXTCHANGE change; 236 LONG end = 0;
237 TS_TEXTCHANGE change = {};
238 EXPECT_EQ(S_OK, 238 EXPECT_EQ(S_OK,
239 text_store_->InsertTextAtSelection(0, buffer, buffer_size, 239 text_store_->InsertTextAtSelection(0, buffer, buffer_size,
240 &start, &end, &change)); 240 &start, &end, &change));
241 EXPECT_EQ(expected_start, start); 241 EXPECT_EQ(expected_start, start);
242 EXPECT_EQ(expected_end, end); 242 EXPECT_EQ(expected_end, end);
243 EXPECT_EQ(expected_change_start, change.acpStart); 243 EXPECT_EQ(expected_change_start, change.acpStart);
244 EXPECT_EQ(expected_change_old_end, change.acpOldEnd); 244 EXPECT_EQ(expected_change_old_end, change.acpOldEnd);
245 EXPECT_EQ(expected_change_new_end, change.acpNewEnd); 245 EXPECT_EQ(expected_change_new_end, change.acpNewEnd);
246 } 246 }
247 247
248 void InsertTextAtSelectionQueryOnlyTest(const wchar_t* buffer, 248 void InsertTextAtSelectionQueryOnlyTest(const wchar_t* buffer,
249 ULONG buffer_size, 249 ULONG buffer_size,
250 LONG expected_start, 250 LONG expected_start,
251 LONG expected_end) { 251 LONG expected_end) {
252 LONG start, end; 252 LONG start = 0;
253 LONG end = 0;
253 EXPECT_EQ(S_OK, 254 EXPECT_EQ(S_OK,
254 text_store_->InsertTextAtSelection(TS_IAS_QUERYONLY, buffer, 255 text_store_->InsertTextAtSelection(TS_IAS_QUERYONLY, buffer,
255 buffer_size, &start, &end, 256 buffer_size, &start, &end,
256 NULL)); 257 NULL));
257 EXPECT_EQ(expected_start, start); 258 EXPECT_EQ(expected_start, start);
258 EXPECT_EQ(expected_end, end); 259 EXPECT_EQ(expected_end, end);
259 } 260 }
260 261
261 void GetTextExtTest(TsViewCookie view_cookie, LONG acp_start, LONG acp_end, 262 void GetTextExtTest(TsViewCookie view_cookie, LONG acp_start, LONG acp_end,
262 LONG expected_left, LONG expected_top, 263 LONG expected_left, LONG expected_top,
263 LONG expected_right, LONG expected_bottom) { 264 LONG expected_right, LONG expected_bottom) {
264 RECT rect; 265 RECT rect = {};
265 BOOL clipped; 266 BOOL clipped = FALSE;
266 EXPECT_EQ(S_OK, text_store_->GetTextExt(view_cookie, acp_start, acp_end, 267 EXPECT_EQ(S_OK, text_store_->GetTextExt(view_cookie, acp_start, acp_end,
267 &rect, &clipped)); 268 &rect, &clipped));
268 EXPECT_EQ(expected_left, rect.left); 269 EXPECT_EQ(expected_left, rect.left);
269 EXPECT_EQ(expected_top, rect.top); 270 EXPECT_EQ(expected_top, rect.top);
270 EXPECT_EQ(expected_right, rect.right); 271 EXPECT_EQ(expected_right, rect.right);
271 EXPECT_EQ(expected_bottom, rect.bottom); 272 EXPECT_EQ(expected_bottom, rect.bottom);
272 EXPECT_EQ(FALSE, clipped); 273 EXPECT_EQ(FALSE, clipped);
273 } 274 }
274 275
275 void GetTextExtNoLayoutTest(TsViewCookie view_cookie, LONG acp_start, 276 void GetTextExtNoLayoutTest(TsViewCookie view_cookie, LONG acp_start,
276 LONG acp_end) { 277 LONG acp_end) {
277 RECT rect; 278 RECT rect = {};
278 BOOL clipped; 279 BOOL clipped = FALSE;
279 EXPECT_EQ(TS_E_NOLAYOUT, 280 EXPECT_EQ(TS_E_NOLAYOUT,
280 text_store_->GetTextExt(view_cookie, acp_start, acp_end, 281 text_store_->GetTextExt(view_cookie, acp_start, acp_end,
281 &rect, &clipped)); 282 &rect, &clipped));
282 } 283 }
283 284
284 TSFTextStore* text_store_; 285 scoped_refptr<TSFTextStore> text_store_;
286
287 private:
288 DISALLOW_COPY_AND_ASSIGN(TSFTextStoreTestCallback);
285 }; 289 };
286 290
291 namespace {
292
293 const HRESULT kInvalidResult = 0x12345678;
294
287 TEST_F(TSFTextStoreTest, GetStatusTest) { 295 TEST_F(TSFTextStoreTest, GetStatusTest) {
288 TS_STATUS status; 296 TS_STATUS status = {};
289 EXPECT_EQ(S_OK, text_store_->GetStatus(&status)); 297 EXPECT_EQ(S_OK, text_store_->GetStatus(&status));
290 EXPECT_EQ(0, status.dwDynamicFlags); 298 EXPECT_EQ(0, status.dwDynamicFlags);
291 EXPECT_EQ(TS_SS_TRANSITORY | TS_SS_NOHIDDENTEXT, status.dwStaticFlags); 299 EXPECT_EQ(TS_SS_TRANSITORY | TS_SS_NOHIDDENTEXT, status.dwStaticFlags);
292 } 300 }
293 301
294
295 class SyncRequestLockTestCallback : public TSFTextStoreTestCallback { 302 class SyncRequestLockTestCallback : public TSFTextStoreTestCallback {
296 public: 303 public:
297 explicit SyncRequestLockTestCallback(TSFTextStore* text_store) 304 explicit SyncRequestLockTestCallback(TSFTextStore* text_store)
298 : TSFTextStoreTestCallback(text_store) { 305 : TSFTextStoreTestCallback(text_store) {}
299 }
300 306
301 HRESULT LockGranted1(DWORD flags) { 307 HRESULT LockGranted1(DWORD flags) {
302 EXPECT_TRUE(HasReadLock()); 308 EXPECT_TRUE(HasReadLock());
303 EXPECT_FALSE(HasReadWriteLock()); 309 EXPECT_FALSE(HasReadWriteLock());
304 return S_OK; 310 return S_OK;
305 } 311 }
306 312
307 HRESULT LockGranted2(DWORD flags) { 313 HRESULT LockGranted2(DWORD flags) {
308 EXPECT_TRUE(HasReadLock()); 314 EXPECT_TRUE(HasReadLock());
309 EXPECT_TRUE(HasReadWriteLock()); 315 EXPECT_TRUE(HasReadWriteLock());
310 return S_OK; 316 return S_OK;
311 } 317 }
312 318
313 HRESULT LockGranted3(DWORD flags) { 319 HRESULT LockGranted3(DWORD flags) {
314 EXPECT_TRUE(HasReadLock()); 320 EXPECT_TRUE(HasReadLock());
315 EXPECT_FALSE(HasReadWriteLock()); 321 EXPECT_FALSE(HasReadWriteLock());
316 HRESULT result; 322 HRESULT result = kInvalidResult;
317 EXPECT_EQ(S_OK, text_store_->RequestLock(TS_LF_READ | TS_LF_SYNC, &result)); 323 EXPECT_EQ(S_OK, text_store_->RequestLock(TS_LF_READ | TS_LF_SYNC, &result));
318 EXPECT_EQ(TS_E_SYNCHRONOUS, result); 324 EXPECT_EQ(TS_E_SYNCHRONOUS, result);
319 return S_OK; 325 return S_OK;
320 } 326 }
321 327
322 HRESULT LockGranted4(DWORD flags) { 328 HRESULT LockGranted4(DWORD flags) {
323 EXPECT_TRUE(HasReadLock()); 329 EXPECT_TRUE(HasReadLock());
324 EXPECT_FALSE(HasReadWriteLock()); 330 EXPECT_FALSE(HasReadWriteLock());
325 HRESULT result; 331 HRESULT result = kInvalidResult;
326 EXPECT_EQ(S_OK, 332 EXPECT_EQ(S_OK,
327 text_store_->RequestLock(TS_LF_READWRITE | TS_LF_SYNC, &result)); 333 text_store_->RequestLock(TS_LF_READWRITE | TS_LF_SYNC, &result));
328 EXPECT_EQ(TS_E_SYNCHRONOUS, result); 334 EXPECT_EQ(TS_E_SYNCHRONOUS, result);
329 return S_OK; 335 return S_OK;
330 } 336 }
331 337
332 HRESULT LockGranted5(DWORD flags) { 338 HRESULT LockGranted5(DWORD flags) {
333 EXPECT_TRUE(HasReadLock()); 339 EXPECT_TRUE(HasReadLock());
334 EXPECT_TRUE(HasReadWriteLock()); 340 EXPECT_TRUE(HasReadWriteLock());
335 HRESULT result; 341 HRESULT result = kInvalidResult;
336 EXPECT_EQ(S_OK, text_store_->RequestLock(TS_LF_READ | TS_LF_SYNC, &result)); 342 EXPECT_EQ(S_OK, text_store_->RequestLock(TS_LF_READ | TS_LF_SYNC, &result));
337 EXPECT_EQ(TS_E_SYNCHRONOUS, result); 343 EXPECT_EQ(TS_E_SYNCHRONOUS, result);
338 return S_OK; 344 return S_OK;
339 } 345 }
340 346
341 HRESULT LockGranted6(DWORD flags) { 347 HRESULT LockGranted6(DWORD flags) {
342 EXPECT_TRUE(HasReadLock()); 348 EXPECT_TRUE(HasReadLock());
343 EXPECT_TRUE(HasReadWriteLock()); 349 EXPECT_TRUE(HasReadWriteLock());
344 HRESULT result; 350 HRESULT result = kInvalidResult;
345 EXPECT_EQ(S_OK, 351 EXPECT_EQ(S_OK,
346 text_store_->RequestLock(TS_LF_READWRITE | TS_LF_SYNC, &result)); 352 text_store_->RequestLock(TS_LF_READWRITE | TS_LF_SYNC, &result));
347 EXPECT_EQ(TS_E_SYNCHRONOUS, result); 353 EXPECT_EQ(TS_E_SYNCHRONOUS, result);
348 return S_OK; 354 return S_OK;
349 } 355 }
356
357 private:
358 DISALLOW_COPY_AND_ASSIGN(SyncRequestLockTestCallback);
350 }; 359 };
351 360
352 TEST_F(TSFTextStoreTest, SynchronousRequestLockTest) { 361 TEST_F(TSFTextStoreTest, SynchronousRequestLockTest) {
353 SyncRequestLockTestCallback callback(text_store_); 362 SyncRequestLockTestCallback callback(text_store_);
354 EXPECT_CALL(*sink_, OnLockGranted(_)) 363 EXPECT_CALL(*sink_, OnLockGranted(_))
355 .WillOnce(Invoke(&callback, &SyncRequestLockTestCallback::LockGranted1)) 364 .WillOnce(Invoke(&callback, &SyncRequestLockTestCallback::LockGranted1))
356 .WillOnce(Invoke(&callback, &SyncRequestLockTestCallback::LockGranted2)) 365 .WillOnce(Invoke(&callback, &SyncRequestLockTestCallback::LockGranted2))
357 .WillOnce(Invoke(&callback, &SyncRequestLockTestCallback::LockGranted3)) 366 .WillOnce(Invoke(&callback, &SyncRequestLockTestCallback::LockGranted3))
358 .WillOnce(Invoke(&callback, &SyncRequestLockTestCallback::LockGranted4)) 367 .WillOnce(Invoke(&callback, &SyncRequestLockTestCallback::LockGranted4))
359 .WillOnce(Invoke(&callback, &SyncRequestLockTestCallback::LockGranted5)) 368 .WillOnce(Invoke(&callback, &SyncRequestLockTestCallback::LockGranted5))
360 .WillOnce(Invoke(&callback, &SyncRequestLockTestCallback::LockGranted6)); 369 .WillOnce(Invoke(&callback, &SyncRequestLockTestCallback::LockGranted6));
361 370
362 HRESULT result; 371 HRESULT result = kInvalidResult;
363 EXPECT_EQ(S_OK, text_store_->RequestLock(TS_LF_READ | TS_LF_SYNC, &result)); 372 EXPECT_EQ(S_OK, text_store_->RequestLock(TS_LF_READ | TS_LF_SYNC, &result));
364 EXPECT_EQ(S_OK, result); 373 EXPECT_EQ(S_OK, result);
374 result = kInvalidResult;
365 EXPECT_EQ(S_OK, 375 EXPECT_EQ(S_OK,
366 text_store_->RequestLock(TS_LF_READWRITE | TS_LF_SYNC, &result)); 376 text_store_->RequestLock(TS_LF_READWRITE | TS_LF_SYNC, &result));
367 EXPECT_EQ(S_OK, result); 377 EXPECT_EQ(S_OK, result);
368 378
369 EXPECT_EQ(S_OK, text_store_->RequestLock(TS_LF_READ | TS_LF_SYNC, &result)); 379 EXPECT_EQ(S_OK, text_store_->RequestLock(TS_LF_READ | TS_LF_SYNC, &result));
370 EXPECT_EQ(S_OK, result); 380 EXPECT_EQ(S_OK, result);
381 result = kInvalidResult;
371 EXPECT_EQ(S_OK, text_store_->RequestLock(TS_LF_READ | TS_LF_SYNC, &result)); 382 EXPECT_EQ(S_OK, text_store_->RequestLock(TS_LF_READ | TS_LF_SYNC, &result));
372 EXPECT_EQ(S_OK, result); 383 EXPECT_EQ(S_OK, result);
373 384
385 result = kInvalidResult;
374 EXPECT_EQ(S_OK, 386 EXPECT_EQ(S_OK,
375 text_store_->RequestLock(TS_LF_READWRITE | TS_LF_SYNC, &result)); 387 text_store_->RequestLock(TS_LF_READWRITE | TS_LF_SYNC, &result));
376 EXPECT_EQ(S_OK, result); 388 EXPECT_EQ(S_OK, result);
389 result = kInvalidResult;
377 EXPECT_EQ(S_OK, 390 EXPECT_EQ(S_OK,
378 text_store_->RequestLock(TS_LF_READWRITE | TS_LF_SYNC, &result)); 391 text_store_->RequestLock(TS_LF_READWRITE | TS_LF_SYNC, &result));
379 EXPECT_EQ(S_OK, result); 392 EXPECT_EQ(S_OK, result);
380 } 393 }
381 394
382 class AsyncRequestLockTestCallback : public TSFTextStoreTestCallback { 395 class AsyncRequestLockTestCallback : public TSFTextStoreTestCallback {
383 public: 396 public:
384 explicit AsyncRequestLockTestCallback(TSFTextStore* text_store) 397 explicit AsyncRequestLockTestCallback(TSFTextStore* text_store)
385 : TSFTextStoreTestCallback(text_store), 398 : TSFTextStoreTestCallback(text_store),
386 state_(0) { 399 state_(0) {}
387 }
388 400
389 HRESULT LockGranted1(DWORD flags) { 401 HRESULT LockGranted1(DWORD flags) {
390 EXPECT_EQ(0, state_); 402 EXPECT_EQ(0, state_);
391 state_ = 1; 403 state_ = 1;
392 EXPECT_TRUE(HasReadLock()); 404 EXPECT_TRUE(HasReadLock());
393 EXPECT_FALSE(HasReadWriteLock()); 405 EXPECT_FALSE(HasReadWriteLock());
394 HRESULT result; 406 HRESULT result = kInvalidResult;
395 EXPECT_EQ(S_OK, text_store_->RequestLock(TS_LF_READ, &result)); 407 EXPECT_EQ(S_OK, text_store_->RequestLock(TS_LF_READ, &result));
396 EXPECT_EQ(TS_S_ASYNC, result); 408 EXPECT_EQ(TS_S_ASYNC, result);
397 EXPECT_EQ(1, state_); 409 EXPECT_EQ(1, state_);
398 state_ = 2; 410 state_ = 2;
399 return S_OK; 411 return S_OK;
400 } 412 }
401 413
402 HRESULT LockGranted2(DWORD flags) { 414 HRESULT LockGranted2(DWORD flags) {
403 EXPECT_EQ(2, state_); 415 EXPECT_EQ(2, state_);
404 EXPECT_TRUE(HasReadLock()); 416 EXPECT_TRUE(HasReadLock());
405 EXPECT_FALSE(HasReadWriteLock()); 417 EXPECT_FALSE(HasReadWriteLock());
406 HRESULT result; 418 HRESULT result = kInvalidResult;
407 EXPECT_EQ(S_OK, text_store_->RequestLock(TS_LF_READWRITE, &result)); 419 EXPECT_EQ(S_OK, text_store_->RequestLock(TS_LF_READWRITE, &result));
408 EXPECT_EQ(TS_S_ASYNC, result); 420 EXPECT_EQ(TS_S_ASYNC, result);
409 EXPECT_EQ(2, state_); 421 EXPECT_EQ(2, state_);
410 state_ = 3; 422 state_ = 3;
411 return S_OK; 423 return S_OK;
412 } 424 }
413 425
414 HRESULT LockGranted3(DWORD flags) { 426 HRESULT LockGranted3(DWORD flags) {
415 EXPECT_EQ(3, state_); 427 EXPECT_EQ(3, state_);
416 EXPECT_TRUE(HasReadLock()); 428 EXPECT_TRUE(HasReadLock());
417 EXPECT_TRUE(HasReadWriteLock()); 429 EXPECT_TRUE(HasReadWriteLock());
418 HRESULT result; 430 HRESULT result = kInvalidResult;
419 EXPECT_EQ(S_OK, text_store_->RequestLock(TS_LF_READWRITE, &result)); 431 EXPECT_EQ(S_OK, text_store_->RequestLock(TS_LF_READWRITE, &result));
420 EXPECT_EQ(TS_S_ASYNC, result); 432 EXPECT_EQ(TS_S_ASYNC, result);
421 EXPECT_EQ(3, state_); 433 EXPECT_EQ(3, state_);
422 state_ = 4; 434 state_ = 4;
423 return S_OK; 435 return S_OK;
424 } 436 }
425 437
426 HRESULT LockGranted4(DWORD flags) { 438 HRESULT LockGranted4(DWORD flags) {
427 EXPECT_EQ(4, state_); 439 EXPECT_EQ(4, state_);
428 EXPECT_TRUE(HasReadLock()); 440 EXPECT_TRUE(HasReadLock());
429 EXPECT_TRUE(HasReadWriteLock()); 441 EXPECT_TRUE(HasReadWriteLock());
430 HRESULT result; 442 HRESULT result = kInvalidResult;
431 EXPECT_EQ(S_OK, text_store_->RequestLock(TS_LF_READ, &result)); 443 EXPECT_EQ(S_OK, text_store_->RequestLock(TS_LF_READ, &result));
432 EXPECT_EQ(TS_S_ASYNC, result); 444 EXPECT_EQ(TS_S_ASYNC, result);
433 EXPECT_EQ(4, state_); 445 EXPECT_EQ(4, state_);
434 state_ = 5; 446 state_ = 5;
435 return S_OK; 447 return S_OK;
436 } 448 }
437 449
438 HRESULT LockGranted5(DWORD flags) { 450 HRESULT LockGranted5(DWORD flags) {
439 EXPECT_EQ(5, state_); 451 EXPECT_EQ(5, state_);
440 EXPECT_TRUE(HasReadLock()); 452 EXPECT_TRUE(HasReadLock());
441 EXPECT_FALSE(HasReadWriteLock()); 453 EXPECT_FALSE(HasReadWriteLock());
442 state_ = 6; 454 state_ = 6;
443 return S_OK; 455 return S_OK;
444 } 456 }
445 457
446 private: 458 private:
447 int state_; 459 int state_;
460
461 DISALLOW_COPY_AND_ASSIGN(AsyncRequestLockTestCallback);
448 }; 462 };
449 463
450 TEST_F(TSFTextStoreTest, AsynchronousRequestLockTest) { 464 TEST_F(TSFTextStoreTest, AsynchronousRequestLockTest) {
451 AsyncRequestLockTestCallback callback(text_store_); 465 AsyncRequestLockTestCallback callback(text_store_);
452 EXPECT_CALL(*sink_, OnLockGranted(_)) 466 EXPECT_CALL(*sink_, OnLockGranted(_))
453 .WillOnce(Invoke(&callback, &AsyncRequestLockTestCallback::LockGranted1)) 467 .WillOnce(Invoke(&callback, &AsyncRequestLockTestCallback::LockGranted1))
454 .WillOnce(Invoke(&callback, &AsyncRequestLockTestCallback::LockGranted2)) 468 .WillOnce(Invoke(&callback, &AsyncRequestLockTestCallback::LockGranted2))
455 .WillOnce(Invoke(&callback, &AsyncRequestLockTestCallback::LockGranted3)) 469 .WillOnce(Invoke(&callback, &AsyncRequestLockTestCallback::LockGranted3))
456 .WillOnce(Invoke(&callback, &AsyncRequestLockTestCallback::LockGranted4)) 470 .WillOnce(Invoke(&callback, &AsyncRequestLockTestCallback::LockGranted4))
457 .WillOnce(Invoke(&callback, &AsyncRequestLockTestCallback::LockGranted5)); 471 .WillOnce(Invoke(&callback, &AsyncRequestLockTestCallback::LockGranted5));
458 472
459 HRESULT result; 473 HRESULT result = kInvalidResult;
460 EXPECT_EQ(S_OK, text_store_->RequestLock(TS_LF_READ, &result)); 474 EXPECT_EQ(S_OK, text_store_->RequestLock(TS_LF_READ, &result));
461 EXPECT_EQ(S_OK, result); 475 EXPECT_EQ(S_OK, result);
462 } 476 }
463 477
464 class RequestLockTextChangeTestCallback : public TSFTextStoreTestCallback { 478 class RequestLockTextChangeTestCallback : public TSFTextStoreTestCallback {
465 public: 479 public:
466 explicit RequestLockTextChangeTestCallback(TSFTextStore* text_store) 480 explicit RequestLockTextChangeTestCallback(TSFTextStore* text_store)
467 : TSFTextStoreTestCallback(text_store), 481 : TSFTextStoreTestCallback(text_store),
468 state_(0) { 482 state_(0) {}
469 }
470 483
471 HRESULT LockGranted1(DWORD flags) { 484 HRESULT LockGranted1(DWORD flags) {
472 EXPECT_EQ(0, state_); 485 EXPECT_EQ(0, state_);
473 state_ = 1; 486 state_ = 1;
474 EXPECT_TRUE(HasReadLock()); 487 EXPECT_TRUE(HasReadLock());
475 EXPECT_TRUE(HasReadWriteLock()); 488 EXPECT_TRUE(HasReadWriteLock());
476 489
477 *edit_flag() = true; 490 *edit_flag() = true;
478 SetInternalState(L"012345", 6, 6, 6); 491 SetInternalState(L"012345", 6, 6, 6);
479 composition_undelines()->clear(); 492 composition_undelines()->clear();
(...skipping 12 matching lines...) Expand all
492 EXPECT_EQ(3, state_); 505 EXPECT_EQ(3, state_);
493 EXPECT_EQ(L"", composition.text); 506 EXPECT_EQ(L"", composition.text);
494 EXPECT_EQ(0, composition.selection.start()); 507 EXPECT_EQ(0, composition.selection.start());
495 EXPECT_EQ(0, composition.selection.end()); 508 EXPECT_EQ(0, composition.selection.end());
496 EXPECT_EQ(0, composition.underlines.size()); 509 EXPECT_EQ(0, composition.underlines.size());
497 state_ = 4; 510 state_ = 4;
498 } 511 }
499 512
500 HRESULT OnTextChange(DWORD flags, const TS_TEXTCHANGE* change) { 513 HRESULT OnTextChange(DWORD flags, const TS_TEXTCHANGE* change) {
501 EXPECT_EQ(4, state_); 514 EXPECT_EQ(4, state_);
502 HRESULT result; 515 HRESULT result = kInvalidResult;
503 state_ = 5; 516 state_ = 5;
504 EXPECT_EQ(S_OK, text_store_->RequestLock(TS_LF_READWRITE, &result)); 517 EXPECT_EQ(S_OK, text_store_->RequestLock(TS_LF_READWRITE, &result));
505 EXPECT_EQ(S_OK, result); 518 EXPECT_EQ(S_OK, result);
506 EXPECT_EQ(6, state_); 519 EXPECT_EQ(6, state_);
507 state_ = 7; 520 state_ = 7;
508 return S_OK; 521 return S_OK;
509 } 522 }
510 523
511 HRESULT LockGranted2(DWORD flags) { 524 HRESULT LockGranted2(DWORD flags) {
512 EXPECT_EQ(5, state_); 525 EXPECT_EQ(5, state_);
513 EXPECT_TRUE(HasReadLock()); 526 EXPECT_TRUE(HasReadLock());
514 EXPECT_TRUE(HasReadWriteLock()); 527 EXPECT_TRUE(HasReadWriteLock());
515 state_ = 6; 528 state_ = 6;
516 return S_OK; 529 return S_OK;
517 } 530 }
518 531
519 private: 532 private:
520 int state_; 533 int state_;
534
535 DISALLOW_COPY_AND_ASSIGN(RequestLockTextChangeTestCallback);
521 }; 536 };
522 537
523 TEST_F(TSFTextStoreTest, RequestLockOnTextChangeTest) { 538 TEST_F(TSFTextStoreTest, RequestLockOnTextChangeTest) {
524 RequestLockTextChangeTestCallback callback(text_store_); 539 RequestLockTextChangeTestCallback callback(text_store_);
525 EXPECT_CALL(*sink_, OnLockGranted(_)) 540 EXPECT_CALL(*sink_, OnLockGranted(_))
526 .WillOnce(Invoke(&callback, 541 .WillOnce(Invoke(&callback,
527 &RequestLockTextChangeTestCallback::LockGranted1)) 542 &RequestLockTextChangeTestCallback::LockGranted1))
528 .WillOnce(Invoke(&callback, 543 .WillOnce(Invoke(&callback,
529 &RequestLockTextChangeTestCallback::LockGranted2)); 544 &RequestLockTextChangeTestCallback::LockGranted2));
530 545
531 EXPECT_CALL(*sink_, OnSelectionChange()) 546 EXPECT_CALL(*sink_, OnSelectionChange())
532 .WillOnce(Return(S_OK)); 547 .WillOnce(Return(S_OK));
533 EXPECT_CALL(*sink_, OnLayoutChange(_, _)) 548 EXPECT_CALL(*sink_, OnLayoutChange(_, _))
534 .WillOnce(Return(S_OK)); 549 .WillOnce(Return(S_OK));
535 EXPECT_CALL(*sink_, OnTextChange(_, _)) 550 EXPECT_CALL(*sink_, OnTextChange(_, _))
536 .WillOnce(Invoke(&callback, 551 .WillOnce(Invoke(&callback,
537 &RequestLockTextChangeTestCallback::OnTextChange)); 552 &RequestLockTextChangeTestCallback::OnTextChange));
538 EXPECT_CALL(text_input_client_, InsertText(_)) 553 EXPECT_CALL(text_input_client_, InsertText(_))
539 .WillOnce(Invoke(&callback, 554 .WillOnce(Invoke(&callback,
540 &RequestLockTextChangeTestCallback::InsertText)); 555 &RequestLockTextChangeTestCallback::InsertText));
541 EXPECT_CALL(text_input_client_, SetCompositionText(_)) 556 EXPECT_CALL(text_input_client_, SetCompositionText(_))
542 .WillOnce(Invoke(&callback, 557 .WillOnce(Invoke(&callback,
543 &RequestLockTextChangeTestCallback::SetCompositionText)); 558 &RequestLockTextChangeTestCallback::SetCompositionText));
544 559
545 HRESULT result; 560 HRESULT result = kInvalidResult;
546 EXPECT_EQ(S_OK, text_store_->RequestLock(TS_LF_READWRITE, &result)); 561 EXPECT_EQ(S_OK, text_store_->RequestLock(TS_LF_READWRITE, &result));
547 EXPECT_EQ(S_OK, result); 562 EXPECT_EQ(S_OK, result);
548 } 563 }
549 564
550 class SelectionTestCallback : public TSFTextStoreTestCallback { 565 class SelectionTestCallback : public TSFTextStoreTestCallback {
551 public: 566 public:
552 explicit SelectionTestCallback(TSFTextStore* text_store) 567 explicit SelectionTestCallback(TSFTextStore* text_store)
553 : TSFTextStoreTestCallback(text_store) { 568 : TSFTextStoreTestCallback(text_store) {}
554 }
555 569
556 HRESULT ReadLockGranted(DWORD flags) { 570 HRESULT ReadLockGranted(DWORD flags) {
557 SetInternalState(L"", 0, 0, 0); 571 SetInternalState(L"", 0, 0, 0);
558 572
559 GetSelectionTest(0, 0); 573 GetSelectionTest(0, 0);
560 SetSelectionTest(0, 0, TF_E_NOLOCK); 574 SetSelectionTest(0, 0, TF_E_NOLOCK);
561 575
562 SetInternalState(L"012345", 0, 0, 3); 576 SetInternalState(L"012345", 0, 0, 3);
563 577
564 GetSelectionTest(0, 3); 578 GetSelectionTest(0, 3);
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
624 } 638 }
625 }; 639 };
626 640
627 TEST_F(TSFTextStoreTest, SetGetSelectionTest) { 641 TEST_F(TSFTextStoreTest, SetGetSelectionTest) {
628 SelectionTestCallback callback(text_store_); 642 SelectionTestCallback callback(text_store_);
629 EXPECT_CALL(*sink_, OnLockGranted(_)) 643 EXPECT_CALL(*sink_, OnLockGranted(_))
630 .WillOnce(Invoke(&callback, &SelectionTestCallback::ReadLockGranted)) 644 .WillOnce(Invoke(&callback, &SelectionTestCallback::ReadLockGranted))
631 .WillOnce(Invoke(&callback, 645 .WillOnce(Invoke(&callback,
632 &SelectionTestCallback::ReadWriteLockGranted)); 646 &SelectionTestCallback::ReadWriteLockGranted));
633 647
634 TS_SELECTION_ACP selection_buffer; 648 TS_SELECTION_ACP selection_buffer = {};
635 ULONG fetched_count; 649 ULONG fetched_count = 0;
636 EXPECT_EQ(TS_E_NOLOCK, 650 EXPECT_EQ(TS_E_NOLOCK,
637 text_store_->GetSelection(0, 1, &selection_buffer, 651 text_store_->GetSelection(0, 1, &selection_buffer,
638 &fetched_count)); 652 &fetched_count));
639 653
640 HRESULT result; 654 HRESULT result = kInvalidResult;
641 EXPECT_EQ(S_OK, text_store_->RequestLock(TS_LF_READ, &result)); 655 EXPECT_EQ(S_OK, text_store_->RequestLock(TS_LF_READ, &result));
642 EXPECT_EQ(S_OK, text_store_->RequestLock(TS_LF_READWRITE, &result)); 656 EXPECT_EQ(S_OK, text_store_->RequestLock(TS_LF_READWRITE, &result));
643 } 657 }
644 658
645
646 class SetGetTextTestCallback : public TSFTextStoreTestCallback { 659 class SetGetTextTestCallback : public TSFTextStoreTestCallback {
647 public: 660 public:
648 explicit SetGetTextTestCallback(TSFTextStore* text_store) 661 explicit SetGetTextTestCallback(TSFTextStore* text_store)
649 : TSFTextStoreTestCallback(text_store) { 662 : TSFTextStoreTestCallback(text_store) {}
650 }
651 663
652 HRESULT ReadLockGranted(DWORD flags) { 664 HRESULT ReadLockGranted(DWORD flags) {
653 SetTextTest(0, 0, L"", TF_E_NOLOCK); 665 SetTextTest(0, 0, L"", TF_E_NOLOCK);
654 666
655 GetTextTest(0, -1, L"", 0); 667 GetTextTest(0, -1, L"", 0);
656 GetTextTest(0, 0, L"", 0); 668 GetTextTest(0, 0, L"", 0);
657 GetTextErrorTest(0, 1, TF_E_INVALIDPOS); 669 GetTextErrorTest(0, 1, TF_E_INVALIDPOS);
658 670
659 SetInternalState(L"0123456", 3, 3, 3); 671 SetInternalState(L"0123456", 3, 3, 3);
660 672
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
813 GetTextTest(0, -1, L"012345abc", 9); 825 GetTextTest(0, -1, L"012345abc", 9);
814 GetSelectionTest(6, 9); 826 GetSelectionTest(6, 9);
815 827
816 SetInternalState(L"0123456", 3, 3, 3); 828 SetInternalState(L"0123456", 3, 3, 3);
817 SetTextTest(7, 7, L"abc", S_OK); 829 SetTextTest(7, 7, L"abc", S_OK);
818 GetTextTest(0, -1, L"0123456abc", 10); 830 GetTextTest(0, -1, L"0123456abc", 10);
819 GetSelectionTest(7, 10); 831 GetSelectionTest(7, 10);
820 832
821 return S_OK; 833 return S_OK;
822 } 834 }
835
836 private:
837 DISALLOW_COPY_AND_ASSIGN(SetGetTextTestCallback);
823 }; 838 };
824 839
825 TEST_F(TSFTextStoreTest, SetGetTextTest) { 840 TEST_F(TSFTextStoreTest, SetGetTextTest) {
826 SetGetTextTestCallback callback(text_store_); 841 SetGetTextTestCallback callback(text_store_);
827 EXPECT_CALL(*sink_, OnLockGranted(_)) 842 EXPECT_CALL(*sink_, OnLockGranted(_))
828 .WillOnce(Invoke(&callback, &SetGetTextTestCallback::ReadLockGranted)) 843 .WillOnce(Invoke(&callback, &SetGetTextTestCallback::ReadLockGranted))
829 .WillOnce(Invoke(&callback, 844 .WillOnce(Invoke(&callback,
830 &SetGetTextTestCallback::ReadWriteLockGranted)); 845 &SetGetTextTestCallback::ReadWriteLockGranted));
831 846
832 wchar_t buffer[1024]; 847 wchar_t buffer[1024] = {};
833 ULONG text_buffer_copied; 848 ULONG text_buffer_copied = 0;
834 TS_RUNINFO run_info; 849 TS_RUNINFO run_info = {};
835 ULONG run_info_buffer_copied; 850 ULONG run_info_buffer_copied = 0;
836 LONG next_acp; 851 LONG next_acp = 0;
837 EXPECT_EQ(TF_E_NOLOCK, 852 EXPECT_EQ(TF_E_NOLOCK,
838 text_store_->GetText(0, -1, buffer, 1024, &text_buffer_copied, 853 text_store_->GetText(0, -1, buffer, 1024, &text_buffer_copied,
839 &run_info, 1, &run_info_buffer_copied, 854 &run_info, 1, &run_info_buffer_copied,
840 &next_acp)); 855 &next_acp));
841 TS_TEXTCHANGE change; 856 TS_TEXTCHANGE change = {};
842 EXPECT_EQ(TF_E_NOLOCK, text_store_->SetText(0, 0, 0, L"abc", 3, &change)); 857 EXPECT_EQ(TF_E_NOLOCK, text_store_->SetText(0, 0, 0, L"abc", 3, &change));
843 858
844 HRESULT result; 859 HRESULT result = kInvalidResult;
845 EXPECT_EQ(S_OK, text_store_->RequestLock(TS_LF_READ, &result)); 860 EXPECT_EQ(S_OK, text_store_->RequestLock(TS_LF_READ, &result));
846 EXPECT_EQ(S_OK, text_store_->RequestLock(TS_LF_READWRITE, &result)); 861 EXPECT_EQ(S_OK, text_store_->RequestLock(TS_LF_READWRITE, &result));
847 } 862 }
848 863
849 class InsertTextAtSelectionTestCallback : public TSFTextStoreTestCallback { 864 class InsertTextAtSelectionTestCallback : public TSFTextStoreTestCallback {
850 public: 865 public:
851 explicit InsertTextAtSelectionTestCallback(TSFTextStore* text_store) 866 explicit InsertTextAtSelectionTestCallback(TSFTextStore* text_store)
852 : TSFTextStoreTestCallback(text_store) { 867 : TSFTextStoreTestCallback(text_store) {}
853 }
854 868
855 HRESULT ReadLockGranted(DWORD flags) { 869 HRESULT ReadLockGranted(DWORD flags) {
856 const wchar_t kBuffer[] = L"0123456789"; 870 const wchar_t kBuffer[] = L"0123456789";
857 871
858 SetInternalState(L"abcedfg", 0, 0, 0); 872 SetInternalState(L"abcedfg", 0, 0, 0);
859 InsertTextAtSelectionQueryOnlyTest(kBuffer, 10, 0, 0); 873 InsertTextAtSelectionQueryOnlyTest(kBuffer, 10, 0, 0);
860 GetSelectionTest(0, 0); 874 GetSelectionTest(0, 0);
861 InsertTextAtSelectionQueryOnlyTest(kBuffer, 0, 0, 0); 875 InsertTextAtSelectionQueryOnlyTest(kBuffer, 0, 0, 0);
862 876
863 SetInternalState(L"abcedfg", 0, 2, 5); 877 SetInternalState(L"abcedfg", 0, 2, 5);
864 InsertTextAtSelectionQueryOnlyTest(kBuffer, 10, 2, 5); 878 InsertTextAtSelectionQueryOnlyTest(kBuffer, 10, 2, 5);
865 GetSelectionTest(2, 5); 879 GetSelectionTest(2, 5);
866 InsertTextAtSelectionQueryOnlyTest(kBuffer, 0, 2, 5); 880 InsertTextAtSelectionQueryOnlyTest(kBuffer, 0, 2, 5);
867 881
868 LONG start, end; 882 LONG start = 0;
869 TS_TEXTCHANGE change; 883 LONG end = 0;
884 TS_TEXTCHANGE change = {};
870 EXPECT_EQ(TS_E_NOLOCK, 885 EXPECT_EQ(TS_E_NOLOCK,
871 text_store_->InsertTextAtSelection(0, kBuffer, 10, 886 text_store_->InsertTextAtSelection(0, kBuffer, 10,
872 &start, &end, &change)); 887 &start, &end, &change));
873 return S_OK; 888 return S_OK;
874 } 889 }
875 890
876 HRESULT ReadWriteLockGranted(DWORD flags) { 891 HRESULT ReadWriteLockGranted(DWORD flags) {
877 SetInternalState(L"abcedfg", 0, 0, 0); 892 SetInternalState(L"abcedfg", 0, 0, 0);
878 893
879 const wchar_t kBuffer[] = L"0123456789"; 894 const wchar_t kBuffer[] = L"0123456789";
(...skipping 21 matching lines...) Expand all
901 GetSelectionTest(3, 13); 916 GetSelectionTest(3, 13);
902 GetTextTest(0, -1, L"abc0123456789", 13); 917 GetTextTest(0, -1, L"abc0123456789", 13);
903 918
904 SetInternalState(L"abcedfg", 0, 7, 7); 919 SetInternalState(L"abcedfg", 0, 7, 7);
905 InsertTextAtSelectionTest(kBuffer, 10, 7, 17, 7, 7, 17); 920 InsertTextAtSelectionTest(kBuffer, 10, 7, 17, 7, 7, 17);
906 GetSelectionTest(7, 17); 921 GetSelectionTest(7, 17);
907 GetTextTest(0, -1, L"abcedfg0123456789", 17); 922 GetTextTest(0, -1, L"abcedfg0123456789", 17);
908 923
909 return S_OK; 924 return S_OK;
910 } 925 }
926
927 private:
928 DISALLOW_COPY_AND_ASSIGN(InsertTextAtSelectionTestCallback);
911 }; 929 };
912 930
913 TEST_F(TSFTextStoreTest, InsertTextAtSelectionTest) { 931 TEST_F(TSFTextStoreTest, InsertTextAtSelectionTest) {
914 InsertTextAtSelectionTestCallback callback(text_store_); 932 InsertTextAtSelectionTestCallback callback(text_store_);
915 EXPECT_CALL(*sink_, OnLockGranted(_)) 933 EXPECT_CALL(*sink_, OnLockGranted(_))
916 .WillOnce(Invoke(&callback, 934 .WillOnce(Invoke(&callback,
917 &InsertTextAtSelectionTestCallback::ReadLockGranted)) 935 &InsertTextAtSelectionTestCallback::ReadLockGranted))
918 .WillOnce( 936 .WillOnce(
919 Invoke(&callback, 937 Invoke(&callback,
920 &InsertTextAtSelectionTestCallback::ReadWriteLockGranted)); 938 &InsertTextAtSelectionTestCallback::ReadWriteLockGranted));
921 939
922 HRESULT result; 940 HRESULT result = kInvalidResult;
923 EXPECT_EQ(S_OK, text_store_->RequestLock(TS_LF_READ, &result)); 941 EXPECT_EQ(S_OK, text_store_->RequestLock(TS_LF_READ, &result));
942 EXPECT_EQ(S_OK, result);
943 result = kInvalidResult;
924 EXPECT_EQ(S_OK, text_store_->RequestLock(TS_LF_READWRITE, &result)); 944 EXPECT_EQ(S_OK, text_store_->RequestLock(TS_LF_READWRITE, &result));
945 EXPECT_EQ(S_OK, result);
925 } 946 }
926 947
927 class ScenarioTestCallback : public TSFTextStoreTestCallback { 948 class ScenarioTestCallback : public TSFTextStoreTestCallback {
928 public: 949 public:
929 explicit ScenarioTestCallback(TSFTextStore* text_store) 950 explicit ScenarioTestCallback(TSFTextStore* text_store)
930 : TSFTextStoreTestCallback(text_store) { 951 : TSFTextStoreTestCallback(text_store) {}
931 }
932 952
933 HRESULT LockGranted1(DWORD flags) { 953 HRESULT LockGranted1(DWORD flags) {
934 SetSelectionTest(0, 0, S_OK); 954 SetSelectionTest(0, 0, S_OK);
935 955
936 SetTextTest(0, 0, L"abc", S_OK); 956 SetTextTest(0, 0, L"abc", S_OK);
937 SetTextTest(1, 2, L"xyz", S_OK); 957 SetTextTest(1, 2, L"xyz", S_OK);
938 958
939 GetTextTest(0, -1, L"axyzc", 5); 959 GetTextTest(0, -1, L"axyzc", 5);
940 960
941 composition_undelines()->clear(); 961 composition_undelines()->clear();
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
1016 void InsertText3(const string16& text) { 1036 void InsertText3(const string16& text) {
1017 EXPECT_EQ(L"ZCPc", text); 1037 EXPECT_EQ(L"ZCPc", text);
1018 } 1038 }
1019 1039
1020 void SetCompositionText3(const ui::CompositionText& composition) { 1040 void SetCompositionText3(const ui::CompositionText& composition) {
1021 EXPECT_EQ(L"", composition.text); 1041 EXPECT_EQ(L"", composition.text);
1022 EXPECT_EQ(0, composition.selection.start()); 1042 EXPECT_EQ(0, composition.selection.start());
1023 EXPECT_EQ(0, composition.selection.end()); 1043 EXPECT_EQ(0, composition.selection.end());
1024 EXPECT_EQ(0, composition.underlines.size()); 1044 EXPECT_EQ(0, composition.underlines.size());
1025 } 1045 }
1046
1047 private:
1048 DISALLOW_COPY_AND_ASSIGN(ScenarioTestCallback);
1026 }; 1049 };
1027 1050
1028 TEST_F(TSFTextStoreTest, ScenarioTest) { 1051 TEST_F(TSFTextStoreTest, ScenarioTest) {
1029 ScenarioTestCallback callback(text_store_); 1052 ScenarioTestCallback callback(text_store_);
1030 EXPECT_CALL(text_input_client_, SetCompositionText(_)) 1053 EXPECT_CALL(text_input_client_, SetCompositionText(_))
1031 .WillOnce(Invoke(&callback, &ScenarioTestCallback::SetCompositionText1)) 1054 .WillOnce(Invoke(&callback, &ScenarioTestCallback::SetCompositionText1))
1032 .WillOnce(Invoke(&callback, &ScenarioTestCallback::SetCompositionText2)) 1055 .WillOnce(Invoke(&callback, &ScenarioTestCallback::SetCompositionText2))
1033 .WillOnce(Invoke(&callback, &ScenarioTestCallback::SetCompositionText3)); 1056 .WillOnce(Invoke(&callback, &ScenarioTestCallback::SetCompositionText3));
1034 1057
1035 EXPECT_CALL(text_input_client_, InsertText(_)) 1058 EXPECT_CALL(text_input_client_, InsertText(_))
(...skipping 10 matching lines...) Expand all
1046 .WillOnce(Return(S_OK)); 1069 .WillOnce(Return(S_OK));
1047 1070
1048 // OnLayoutChange will be called once after LockGranted3(). 1071 // OnLayoutChange will be called once after LockGranted3().
1049 EXPECT_CALL(*sink_, OnLayoutChange(_, _)) 1072 EXPECT_CALL(*sink_, OnLayoutChange(_, _))
1050 .WillOnce(Return(S_OK)); 1073 .WillOnce(Return(S_OK));
1051 1074
1052 // OnTextChange will be called once after LockGranted3(). 1075 // OnTextChange will be called once after LockGranted3().
1053 EXPECT_CALL(*sink_, OnTextChange(_, _)) 1076 EXPECT_CALL(*sink_, OnTextChange(_, _))
1054 .WillOnce(Return(S_OK)); 1077 .WillOnce(Return(S_OK));
1055 1078
1056 HRESULT result; 1079 HRESULT result = kInvalidResult;
1057 EXPECT_EQ(S_OK, text_store_->RequestLock(TS_LF_READWRITE, &result)); 1080 EXPECT_EQ(S_OK, text_store_->RequestLock(TS_LF_READWRITE, &result));
1081 EXPECT_EQ(S_OK, result);
1082 result = kInvalidResult;
1058 EXPECT_EQ(S_OK, text_store_->RequestLock(TS_LF_READWRITE, &result)); 1083 EXPECT_EQ(S_OK, text_store_->RequestLock(TS_LF_READWRITE, &result));
1084 EXPECT_EQ(S_OK, result);
1085 result = kInvalidResult;
1059 EXPECT_EQ(S_OK, text_store_->RequestLock(TS_LF_READWRITE, &result)); 1086 EXPECT_EQ(S_OK, text_store_->RequestLock(TS_LF_READWRITE, &result));
1087 EXPECT_EQ(S_OK, result);
1060 } 1088 }
1061 1089
1062 class GetTextExtTestCallback : public TSFTextStoreTestCallback { 1090 class GetTextExtTestCallback : public TSFTextStoreTestCallback {
1063 public: 1091 public:
1064 explicit GetTextExtTestCallback(TSFTextStore* text_store) 1092 explicit GetTextExtTestCallback(TSFTextStore* text_store)
1065 : TSFTextStoreTestCallback(text_store), 1093 : TSFTextStoreTestCallback(text_store),
1066 layout_prepared_character_num_(0) { 1094 layout_prepared_character_num_(0) {}
1067 }
1068 1095
1069 HRESULT LockGranted(DWORD flags) { 1096 HRESULT LockGranted(DWORD flags) {
1070 SetInternalState(L"0123456789012", 0, 0, 0); 1097 SetInternalState(L"0123456789012", 0, 0, 0);
1071 layout_prepared_character_num_ = 13; 1098 layout_prepared_character_num_ = 13;
1072 1099
1073 TsViewCookie view_cookie; 1100 TsViewCookie view_cookie = 0;
1074 EXPECT_EQ(S_OK, text_store_->GetActiveView(&view_cookie)); 1101 EXPECT_EQ(S_OK, text_store_->GetActiveView(&view_cookie));
1075 GetTextExtTest(view_cookie, 0, 0, 11, 12, 11, 20); 1102 GetTextExtTest(view_cookie, 0, 0, 11, 12, 11, 20);
1076 GetTextExtTest(view_cookie, 0, 1, 11, 12, 20, 20); 1103 GetTextExtTest(view_cookie, 0, 1, 11, 12, 20, 20);
1077 GetTextExtTest(view_cookie, 0, 2, 11, 12, 30, 20); 1104 GetTextExtTest(view_cookie, 0, 2, 11, 12, 30, 20);
1078 GetTextExtTest(view_cookie, 9, 9, 100, 12, 100, 20); 1105 GetTextExtTest(view_cookie, 9, 9, 100, 12, 100, 20);
1079 GetTextExtTest(view_cookie, 9, 10, 101, 12, 110, 20); 1106 GetTextExtTest(view_cookie, 9, 10, 101, 12, 110, 20);
1080 GetTextExtTest(view_cookie, 10, 10, 110, 12, 110, 20); 1107 GetTextExtTest(view_cookie, 10, 10, 110, 12, 110, 20);
1081 GetTextExtTest(view_cookie, 11, 11, 20, 112, 20, 120); 1108 GetTextExtTest(view_cookie, 11, 11, 20, 112, 20, 120);
1082 GetTextExtTest(view_cookie, 11, 12, 21, 112, 30, 120); 1109 GetTextExtTest(view_cookie, 11, 12, 21, 112, 30, 120);
1083 GetTextExtTest(view_cookie, 9, 12, 101, 12, 30, 120); 1110 GetTextExtTest(view_cookie, 9, 12, 101, 12, 30, 120);
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
1118 rect->set_height(8); 1145 rect->set_height(8);
1119 return true; 1146 return true;
1120 } 1147 }
1121 1148
1122 gfx::Rect GetCaretBounds() { 1149 gfx::Rect GetCaretBounds() {
1123 return gfx::Rect(1, 2, 3, 4); 1150 return gfx::Rect(1, 2, 3, 4);
1124 } 1151 }
1125 1152
1126 private: 1153 private:
1127 uint32 layout_prepared_character_num_; 1154 uint32 layout_prepared_character_num_;
1155
1156 DISALLOW_COPY_AND_ASSIGN(GetTextExtTestCallback);
1128 }; 1157 };
1129 1158
1130 TEST_F(TSFTextStoreTest, GetTextExtTest) { 1159 TEST_F(TSFTextStoreTest, GetTextExtTest) {
1131 GetTextExtTestCallback callback(text_store_); 1160 GetTextExtTestCallback callback(text_store_);
1132 EXPECT_CALL(text_input_client_, GetCaretBounds()) 1161 EXPECT_CALL(text_input_client_, GetCaretBounds())
1133 .WillRepeatedly(Invoke(&callback, 1162 .WillRepeatedly(Invoke(&callback,
1134 &GetTextExtTestCallback::GetCaretBounds)); 1163 &GetTextExtTestCallback::GetCaretBounds));
1135 1164
1136 EXPECT_CALL(text_input_client_, GetCompositionCharacterBounds(_, _)) 1165 EXPECT_CALL(text_input_client_, GetCompositionCharacterBounds(_, _))
1137 .WillRepeatedly( 1166 .WillRepeatedly(
1138 Invoke(&callback, 1167 Invoke(&callback,
1139 &GetTextExtTestCallback::GetCompositionCharacterBounds)); 1168 &GetTextExtTestCallback::GetCompositionCharacterBounds));
1140 1169
1141 EXPECT_CALL(*sink_, OnLockGranted(_)) 1170 EXPECT_CALL(*sink_, OnLockGranted(_))
1142 .WillOnce(Invoke(&callback, &GetTextExtTestCallback::LockGranted)); 1171 .WillOnce(Invoke(&callback, &GetTextExtTestCallback::LockGranted));
1143 1172
1144 HRESULT result; 1173 HRESULT result = kInvalidResult;
1145 EXPECT_EQ(S_OK, text_store_->RequestLock(TS_LF_READ, &result)); 1174 EXPECT_EQ(S_OK, text_store_->RequestLock(TS_LF_READ, &result));
1175 EXPECT_EQ(S_OK, result);
1146 } 1176 }
1147 1177
1178 } // namespace
1148 } // namespace ui 1179 } // namespace ui
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698