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

Side by Side Diff: third_party/WebKit/Source/core/editing/InputMethodControllerTest.cpp

Issue 2316053002: Audit the use of updateStyleAndLayoutIgnorePendingStylesheets in InputMethodController::setSelectio… (Closed)
Patch Set: Unfold and remove SelectionOffsetsScope Created 4 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
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "core/editing/InputMethodController.h" 5 #include "core/editing/InputMethodController.h"
6 6
7 #include "core/dom/Document.h" 7 #include "core/dom/Document.h"
8 #include "core/dom/Element.h" 8 #include "core/dom/Element.h"
9 #include "core/dom/Range.h" 9 #include "core/dom/Range.h"
10 #include "core/editing/Editor.h" 10 #include "core/editing/Editor.h"
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
50 element->focus(); 50 element->focus();
51 return element; 51 return element;
52 } 52 }
53 53
54 TEST_F(InputMethodControllerTest, BackspaceFromEndOfInput) 54 TEST_F(InputMethodControllerTest, BackspaceFromEndOfInput)
55 { 55 {
56 HTMLInputElement* input = toHTMLInputElement( 56 HTMLInputElement* input = toHTMLInputElement(
57 insertHTMLElement("<input id='sample'>", "sample")); 57 insertHTMLElement("<input id='sample'>", "sample"));
58 58
59 input->setValue("fooX"); 59 input->setValue("fooX");
60 document().updateStyleAndLayout();
60 controller().setEditableSelectionOffsets(PlainTextRange(4, 4)); 61 controller().setEditableSelectionOffsets(PlainTextRange(4, 4));
61 EXPECT_STREQ("fooX", input->value().utf8().data()); 62 EXPECT_STREQ("fooX", input->value().utf8().data());
62 controller().extendSelectionAndDelete(0, 0); 63 controller().extendSelectionAndDelete(0, 0);
63 EXPECT_STREQ("fooX", input->value().utf8().data()); 64 EXPECT_STREQ("fooX", input->value().utf8().data());
64 65
65 input->setValue("fooX"); 66 input->setValue("fooX");
67 document().updateStyleAndLayout();
66 controller().setEditableSelectionOffsets(PlainTextRange(4, 4)); 68 controller().setEditableSelectionOffsets(PlainTextRange(4, 4));
67 EXPECT_STREQ("fooX", input->value().utf8().data()); 69 EXPECT_STREQ("fooX", input->value().utf8().data());
68 controller().extendSelectionAndDelete(1, 0); 70 controller().extendSelectionAndDelete(1, 0);
69 EXPECT_STREQ("foo", input->value().utf8().data()); 71 EXPECT_STREQ("foo", input->value().utf8().data());
70 72
71 input->setValue(String::fromUTF8("foo\xE2\x98\x85")); // U+2605 == "black st ar" 73 input->setValue(String::fromUTF8("foo\xE2\x98\x85")); // U+2605 == "black st ar"
74 document().updateStyleAndLayout();
72 controller().setEditableSelectionOffsets(PlainTextRange(4, 4)); 75 controller().setEditableSelectionOffsets(PlainTextRange(4, 4));
73 EXPECT_STREQ("foo\xE2\x98\x85", input->value().utf8().data()); 76 EXPECT_STREQ("foo\xE2\x98\x85", input->value().utf8().data());
74 controller().extendSelectionAndDelete(1, 0); 77 controller().extendSelectionAndDelete(1, 0);
75 EXPECT_STREQ("foo", input->value().utf8().data()); 78 EXPECT_STREQ("foo", input->value().utf8().data());
76 79
77 input->setValue(String::fromUTF8("foo\xF0\x9F\x8F\x86")); // U+1F3C6 == "tro phy" 80 input->setValue(String::fromUTF8("foo\xF0\x9F\x8F\x86")); // U+1F3C6 == "tro phy"
81 document().updateStyleAndLayout();
78 controller().setEditableSelectionOffsets(PlainTextRange(4, 4)); 82 controller().setEditableSelectionOffsets(PlainTextRange(4, 4));
79 EXPECT_STREQ("foo\xF0\x9F\x8F\x86", input->value().utf8().data()); 83 EXPECT_STREQ("foo\xF0\x9F\x8F\x86", input->value().utf8().data());
80 controller().extendSelectionAndDelete(1, 0); 84 controller().extendSelectionAndDelete(1, 0);
81 EXPECT_STREQ("foo", input->value().utf8().data()); 85 EXPECT_STREQ("foo", input->value().utf8().data());
82 86
83 input->setValue(String::fromUTF8("foo\xE0\xB8\x81\xE0\xB9\x89")); // compose d U+0E01 "ka kai" + U+0E49 "mai tho" 87 input->setValue(String::fromUTF8("foo\xE0\xB8\x81\xE0\xB9\x89")); // compose d U+0E01 "ka kai" + U+0E49 "mai tho"
88 document().updateStyleAndLayout();
84 controller().setEditableSelectionOffsets(PlainTextRange(4, 4)); 89 controller().setEditableSelectionOffsets(PlainTextRange(4, 4));
85 EXPECT_STREQ("foo\xE0\xB8\x81\xE0\xB9\x89", input->value().utf8().data()); 90 EXPECT_STREQ("foo\xE0\xB8\x81\xE0\xB9\x89", input->value().utf8().data());
86 controller().extendSelectionAndDelete(1, 0); 91 controller().extendSelectionAndDelete(1, 0);
87 EXPECT_STREQ("foo", input->value().utf8().data()); 92 EXPECT_STREQ("foo", input->value().utf8().data());
88 93
89 input->setValue("fooX"); 94 input->setValue("fooX");
95 document().updateStyleAndLayout();
90 controller().setEditableSelectionOffsets(PlainTextRange(4, 4)); 96 controller().setEditableSelectionOffsets(PlainTextRange(4, 4));
91 EXPECT_STREQ("fooX", input->value().utf8().data()); 97 EXPECT_STREQ("fooX", input->value().utf8().data());
92 controller().extendSelectionAndDelete(0, 1); 98 controller().extendSelectionAndDelete(0, 1);
93 EXPECT_STREQ("fooX", input->value().utf8().data()); 99 EXPECT_STREQ("fooX", input->value().utf8().data());
94 } 100 }
95 101
96 TEST_F(InputMethodControllerTest, SetCompositionFromExistingText) 102 TEST_F(InputMethodControllerTest, SetCompositionFromExistingText)
97 { 103 {
98 Element* div = insertHTMLElement( 104 Element* div = insertHTMLElement(
99 "<div id='sample' contenteditable='true'>hello world</div>", "sample"); 105 "<div id='sample' contenteditable='true'>hello world</div>", "sample");
(...skipping 24 matching lines...) Expand all
124 EXPECT_EQ(0, frame().selection().start().computeOffsetInContainerNode()); 130 EXPECT_EQ(0, frame().selection().start().computeOffsetInContainerNode());
125 EXPECT_EQ(0, frame().selection().end().computeOffsetInContainerNode()); 131 EXPECT_EQ(0, frame().selection().end().computeOffsetInContainerNode());
126 } 132 }
127 133
128 TEST_F(InputMethodControllerTest, DeleteBySettingEmptyComposition) 134 TEST_F(InputMethodControllerTest, DeleteBySettingEmptyComposition)
129 { 135 {
130 HTMLInputElement* input = toHTMLInputElement( 136 HTMLInputElement* input = toHTMLInputElement(
131 insertHTMLElement("<input id='sample'>", "sample")); 137 insertHTMLElement("<input id='sample'>", "sample"));
132 138
133 input->setValue("foo "); 139 input->setValue("foo ");
140 document().updateStyleAndLayout();
134 controller().setEditableSelectionOffsets(PlainTextRange(4, 4)); 141 controller().setEditableSelectionOffsets(PlainTextRange(4, 4));
135 EXPECT_STREQ("foo ", input->value().utf8().data()); 142 EXPECT_STREQ("foo ", input->value().utf8().data());
136 controller().extendSelectionAndDelete(0, 0); 143 controller().extendSelectionAndDelete(0, 0);
137 EXPECT_STREQ("foo ", input->value().utf8().data()); 144 EXPECT_STREQ("foo ", input->value().utf8().data());
138 145
139 input->setValue("foo "); 146 input->setValue("foo ");
147 document().updateStyleAndLayout();
140 controller().setEditableSelectionOffsets(PlainTextRange(4, 4)); 148 controller().setEditableSelectionOffsets(PlainTextRange(4, 4));
141 EXPECT_STREQ("foo ", input->value().utf8().data()); 149 EXPECT_STREQ("foo ", input->value().utf8().data());
142 controller().extendSelectionAndDelete(1, 0); 150 controller().extendSelectionAndDelete(1, 0);
143 EXPECT_STREQ("foo", input->value().utf8().data()); 151 EXPECT_STREQ("foo", input->value().utf8().data());
144 152
145 Vector<CompositionUnderline> underlines; 153 Vector<CompositionUnderline> underlines;
146 underlines.append(CompositionUnderline(0, 3, Color(255, 0, 0), false, 0)); 154 underlines.append(CompositionUnderline(0, 3, Color(255, 0, 0), false, 0));
147 controller().setCompositionFromExistingText(underlines, 0, 3); 155 controller().setCompositionFromExistingText(underlines, 0, 3);
148 156
149 controller().setComposition(String(""), underlines, 0, 3); 157 controller().setComposition(String(""), underlines, 0, 3);
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
194 202
195 EXPECT_STREQ("foo", input->value().utf8().data()); 203 EXPECT_STREQ("foo", input->value().utf8().data());
196 } 204 }
197 205
198 TEST_F(InputMethodControllerTest, SetCompositionForInputWithDifferentNewCursorPo sitions) 206 TEST_F(InputMethodControllerTest, SetCompositionForInputWithDifferentNewCursorPo sitions)
199 { 207 {
200 HTMLInputElement* input = toHTMLInputElement( 208 HTMLInputElement* input = toHTMLInputElement(
201 insertHTMLElement("<input id='sample'>", "sample")); 209 insertHTMLElement("<input id='sample'>", "sample"));
202 210
203 input->setValue("hello"); 211 input->setValue("hello");
212 document().updateStyleAndLayout();
204 controller().setEditableSelectionOffsets(PlainTextRange(2, 2)); 213 controller().setEditableSelectionOffsets(PlainTextRange(2, 2));
205 EXPECT_STREQ("hello", input->value().utf8().data()); 214 EXPECT_STREQ("hello", input->value().utf8().data());
206 EXPECT_EQ(2u, controller().getSelectionOffsets().start()); 215 EXPECT_EQ(2u, controller().getSelectionOffsets().start());
207 EXPECT_EQ(2u, controller().getSelectionOffsets().end()); 216 EXPECT_EQ(2u, controller().getSelectionOffsets().end());
208 217
209 Vector<CompositionUnderline> underlines; 218 Vector<CompositionUnderline> underlines;
210 underlines.append(CompositionUnderline(0, 2, Color(255, 0, 0), false, 0)); 219 underlines.append(CompositionUnderline(0, 2, Color(255, 0, 0), false, 0));
211 220
212 // The cursor exceeds left boundary. 221 // The cursor exceeds left boundary.
213 // "*heABllo", where * stands for cursor. 222 // "*heABllo", where * stands for cursor.
(...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after
477 document().setTitle(emptyString()); 486 document().setTitle(emptyString());
478 controller().setComposition("ni", underlines, 0, 1); 487 controller().setComposition("ni", underlines, 0, 1);
479 EXPECT_STREQ("beforeinput.data:ni;input.data:ni;", document().title().utf8() .data()); 488 EXPECT_STREQ("beforeinput.data:ni;input.data:ni;", document().title().utf8() .data());
480 489
481 document().setTitle(emptyString()); 490 document().setTitle(emptyString());
482 controller().confirmComposition(); 491 controller().confirmComposition();
483 EXPECT_STREQ("beforeinput.data:ni;input.data:ni;", document().title().utf8() .data()); 492 EXPECT_STREQ("beforeinput.data:ni;input.data:ni;", document().title().utf8() .data());
484 } 493 }
485 494
486 } // namespace blink 495 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/editing/InputMethodController.cpp ('k') | third_party/WebKit/Source/web/WebLocalFrameImpl.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698