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

Side by Side Diff: content/renderer/render_view_browsertest.cc

Issue 1999423002: tyrbot test for commitText (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: SetHasCompositionTextToTrue 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
« no previous file with comments | « content/renderer/render_frame_impl.cc ('k') | content/renderer/render_widget.h » ('j') | 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 <stddef.h> 5 #include <stddef.h>
6 #include <stdint.h> 6 #include <stdint.h>
7 #include <tuple> 7 #include <tuple>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/callback.h" 10 #include "base/callback.h"
(...skipping 1228 matching lines...) Expand 10 before | Expand all | Expand 10 after
1239 // the window focus while composing a CJK text. To handle such complicated 1239 // the window focus while composing a CJK text. To handle such complicated
1240 // cases, this test should not only call IME-related functions in the 1240 // cases, this test should not only call IME-related functions in the
1241 // RenderWidget class, but also call some RenderWidget members, e.g. 1241 // RenderWidget class, but also call some RenderWidget members, e.g.
1242 // ExecuteJavaScriptForTests(), RenderWidget::OnSetFocus(), etc. 1242 // ExecuteJavaScriptForTests(), RenderWidget::OnSetFocus(), etc.
1243 TEST_F(RenderViewImplTest, ImeComposition) { 1243 TEST_F(RenderViewImplTest, ImeComposition) {
1244 enum ImeCommand { 1244 enum ImeCommand {
1245 IME_INITIALIZE, 1245 IME_INITIALIZE,
1246 IME_SETINPUTMODE, 1246 IME_SETINPUTMODE,
1247 IME_SETFOCUS, 1247 IME_SETFOCUS,
1248 IME_SETCOMPOSITION, 1248 IME_SETCOMPOSITION,
1249 IME_CONFIRMCOMPOSITION, 1249 IME_COMMITTEXT,
1250 IME_FINISHCOMPOSINGTEXT,
1250 IME_CANCELCOMPOSITION 1251 IME_CANCELCOMPOSITION
1251 }; 1252 };
1252 struct ImeMessage { 1253 struct ImeMessage {
1253 ImeCommand command; 1254 ImeCommand command;
1254 bool enable; 1255 bool enable;
1255 int selection_start; 1256 int selection_start;
1256 int selection_end; 1257 int selection_end;
1257 const wchar_t* ime_string; 1258 const wchar_t* ime_string;
1258 const wchar_t* result; 1259 const wchar_t* result;
1259 }; 1260 };
1260 static const ImeMessage kImeMessages[] = { 1261 static const ImeMessage kImeMessages[] = {
1261 // Scenario 1: input a Chinese word with Microsoft IME (on Vista). 1262 // Scenario 1: input a Chinese word with Microsoft IME (on Vista).
1262 {IME_INITIALIZE, true, 0, 0, NULL, NULL}, 1263 {IME_INITIALIZE, true, 0, 0, NULL, NULL},
1263 {IME_SETINPUTMODE, true, 0, 0, NULL, NULL}, 1264 {IME_SETINPUTMODE, true, 0, 0, NULL, NULL},
1264 {IME_SETFOCUS, true, 0, 0, NULL, NULL}, 1265 {IME_SETFOCUS, true, 0, 0, NULL, NULL},
1265 {IME_SETCOMPOSITION, false, 1, 1, L"n", L"n"}, 1266 {IME_SETCOMPOSITION, false, 1, 1, L"n", L"n"},
1266 {IME_SETCOMPOSITION, false, 2, 2, L"ni", L"ni"}, 1267 {IME_SETCOMPOSITION, false, 2, 2, L"ni", L"ni"},
1267 {IME_SETCOMPOSITION, false, 3, 3, L"nih", L"nih"}, 1268 {IME_SETCOMPOSITION, false, 3, 3, L"nih", L"nih"},
1268 {IME_SETCOMPOSITION, false, 4, 4, L"niha", L"niha"}, 1269 {IME_SETCOMPOSITION, false, 4, 4, L"niha", L"niha"},
1269 {IME_SETCOMPOSITION, false, 5, 5, L"nihao", L"nihao"}, 1270 {IME_SETCOMPOSITION, false, 5, 5, L"nihao", L"nihao"},
1270 {IME_CONFIRMCOMPOSITION, false, -1, -1, L"\x4F60\x597D", L"\x4F60\x597D"}, 1271 {IME_COMMITTEXT, false, -1, -1, L"\x4F60\x597D", L"\x4F60\x597D"},
1271 // Scenario 2: input a Japanese word with Microsoft IME (on Vista). 1272 // Scenario 2: input a Japanese word with Microsoft IME (on Vista).
1272 {IME_INITIALIZE, true, 0, 0, NULL, NULL}, 1273 {IME_INITIALIZE, true, 0, 0, NULL, NULL},
1273 {IME_SETINPUTMODE, true, 0, 0, NULL, NULL}, 1274 {IME_SETINPUTMODE, true, 0, 0, NULL, NULL},
1274 {IME_SETFOCUS, true, 0, 0, NULL, NULL}, 1275 {IME_SETFOCUS, true, 0, 0, NULL, NULL},
1275 {IME_SETCOMPOSITION, false, 0, 1, L"\xFF4B", L"\xFF4B"}, 1276 {IME_SETCOMPOSITION, false, 0, 1, L"\xFF4B", L"\xFF4B"},
1276 {IME_SETCOMPOSITION, false, 0, 1, L"\x304B", L"\x304B"}, 1277 {IME_SETCOMPOSITION, false, 0, 1, L"\x304B", L"\x304B"},
1277 {IME_SETCOMPOSITION, false, 0, 2, L"\x304B\xFF4E", L"\x304B\xFF4E"}, 1278 {IME_SETCOMPOSITION, false, 0, 2, L"\x304B\xFF4E", L"\x304B\xFF4E"},
1278 {IME_SETCOMPOSITION, false, 0, 3, L"\x304B\x3093\xFF4A", 1279 {IME_SETCOMPOSITION, false, 0, 3, L"\x304B\x3093\xFF4A",
1279 L"\x304B\x3093\xFF4A"}, 1280 L"\x304B\x3093\xFF4A"},
1280 {IME_SETCOMPOSITION, false, 0, 3, L"\x304B\x3093\x3058", 1281 {IME_SETCOMPOSITION, false, 0, 3, L"\x304B\x3093\x3058",
1281 L"\x304B\x3093\x3058"}, 1282 L"\x304B\x3093\x3058"},
1282 {IME_SETCOMPOSITION, false, 0, 2, L"\x611F\x3058", L"\x611F\x3058"}, 1283 {IME_SETCOMPOSITION, false, 0, 2, L"\x611F\x3058", L"\x611F\x3058"},
1283 {IME_SETCOMPOSITION, false, 0, 2, L"\x6F22\x5B57", L"\x6F22\x5B57"}, 1284 {IME_SETCOMPOSITION, false, 0, 2, L"\x6F22\x5B57", L"\x6F22\x5B57"},
1284 {IME_CONFIRMCOMPOSITION, false, -1, -1, L"", L"\x6F22\x5B57"}, 1285 {IME_FINISHCOMPOSINGTEXT, false, -1, -1, L"", L"\x6F22\x5B57"},
1285 {IME_CANCELCOMPOSITION, false, -1, -1, L"", L"\x6F22\x5B57"}, 1286 {IME_CANCELCOMPOSITION, false, -1, -1, L"", L"\x6F22\x5B57"},
1286 // Scenario 3: input a Korean word with Microsot IME (on Vista). 1287 // Scenario 3: input a Korean word with Microsot IME (on Vista).
1287 {IME_INITIALIZE, true, 0, 0, NULL, NULL}, 1288 {IME_INITIALIZE, true, 0, 0, NULL, NULL},
1288 {IME_SETINPUTMODE, true, 0, 0, NULL, NULL}, 1289 {IME_SETINPUTMODE, true, 0, 0, NULL, NULL},
1289 {IME_SETFOCUS, true, 0, 0, NULL, NULL}, 1290 {IME_SETFOCUS, true, 0, 0, NULL, NULL},
1290 {IME_SETCOMPOSITION, false, 0, 1, L"\x3147", L"\x3147"}, 1291 {IME_SETCOMPOSITION, false, 0, 1, L"\x3147", L"\x3147"},
1291 {IME_SETCOMPOSITION, false, 0, 1, L"\xC544", L"\xC544"}, 1292 {IME_SETCOMPOSITION, false, 0, 1, L"\xC544", L"\xC544"},
1292 {IME_SETCOMPOSITION, false, 0, 1, L"\xC548", L"\xC548"}, 1293 {IME_SETCOMPOSITION, false, 0, 1, L"\xC548", L"\xC548"},
1293 {IME_CONFIRMCOMPOSITION, false, -1, -1, L"", L"\xC548"}, 1294 {IME_FINISHCOMPOSINGTEXT, false, -1, -1, L"", L"\xC548"},
1294 {IME_SETCOMPOSITION, false, 0, 1, L"\x3134", L"\xC548\x3134"}, 1295 {IME_SETCOMPOSITION, false, 0, 1, L"\x3134", L"\xC548\x3134"},
1295 {IME_SETCOMPOSITION, false, 0, 1, L"\xB140", L"\xC548\xB140"}, 1296 {IME_SETCOMPOSITION, false, 0, 1, L"\xB140", L"\xC548\xB140"},
1296 {IME_SETCOMPOSITION, false, 0, 1, L"\xB155", L"\xC548\xB155"}, 1297 {IME_SETCOMPOSITION, false, 0, 1, L"\xB155", L"\xC548\xB155"},
1297 {IME_CANCELCOMPOSITION, false, -1, -1, L"", L"\xC548"}, 1298 {IME_CANCELCOMPOSITION, false, -1, -1, L"", L"\xC548"},
1298 {IME_SETCOMPOSITION, false, 0, 1, L"\xB155", L"\xC548\xB155"}, 1299 {IME_SETCOMPOSITION, false, 0, 1, L"\xB155", L"\xC548\xB155"},
1299 {IME_CONFIRMCOMPOSITION, false, -1, -1, L"", L"\xC548\xB155"}, 1300 {IME_FINISHCOMPOSINGTEXT, false, -1, -1, L"", L"\xC548\xB155"},
1300 }; 1301 };
1301 1302
1302 for (size_t i = 0; i < arraysize(kImeMessages); i++) { 1303 for (size_t i = 0; i < arraysize(kImeMessages); i++) {
1303 const ImeMessage* ime_message = &kImeMessages[i]; 1304 const ImeMessage* ime_message = &kImeMessages[i];
1304 switch (ime_message->command) { 1305 switch (ime_message->command) {
1305 case IME_INITIALIZE: 1306 case IME_INITIALIZE:
1306 // Load an HTML page consisting of a content-editable <div> element, 1307 // Load an HTML page consisting of a content-editable <div> element,
1307 // and move the input focus to the <div> element, where we can use 1308 // and move the input focus to the <div> element, where we can use
1308 // IMEs. 1309 // IMEs.
1309 LoadHTML("<html>" 1310 LoadHTML("<html>"
(...skipping 16 matching lines...) Expand all
1326 1327
1327 case IME_SETCOMPOSITION: 1328 case IME_SETCOMPOSITION:
1328 view()->OnImeSetComposition( 1329 view()->OnImeSetComposition(
1329 base::WideToUTF16(ime_message->ime_string), 1330 base::WideToUTF16(ime_message->ime_string),
1330 std::vector<blink::WebCompositionUnderline>(), 1331 std::vector<blink::WebCompositionUnderline>(),
1331 gfx::Range::InvalidRange(), 1332 gfx::Range::InvalidRange(),
1332 ime_message->selection_start, 1333 ime_message->selection_start,
1333 ime_message->selection_end); 1334 ime_message->selection_end);
1334 break; 1335 break;
1335 1336
1336 case IME_CONFIRMCOMPOSITION: 1337 case IME_COMMITTEXT:
1337 view()->OnImeConfirmComposition( 1338 view()->OnImeCommitText(base::WideToUTF16(ime_message->ime_string),
1338 base::WideToUTF16(ime_message->ime_string), 1339 gfx::Range::InvalidRange(), 0);
1339 gfx::Range::InvalidRange(), 1340 break;
1340 false); 1341
1342 case IME_FINISHCOMPOSINGTEXT:
1343 view()->OnImeFinishComposingText(false);
1341 break; 1344 break;
1342 1345
1343 case IME_CANCELCOMPOSITION: 1346 case IME_CANCELCOMPOSITION:
1344 view()->OnImeSetComposition( 1347 view()->OnImeSetComposition(
1345 base::string16(), 1348 base::string16(),
1346 std::vector<blink::WebCompositionUnderline>(), 1349 std::vector<blink::WebCompositionUnderline>(),
1347 gfx::Range::InvalidRange(), 1350 gfx::Range::InvalidRange(),
1348 0, 0); 1351 0, 0);
1349 break; 1352 break;
1350 } 1353 }
(...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after
1586 1589
1587 // ASCII composition 1590 // ASCII composition
1588 const base::string16 ascii_composition = base::UTF8ToUTF16("aiueo"); 1591 const base::string16 ascii_composition = base::UTF8ToUTF16("aiueo");
1589 view()->OnImeSetComposition(ascii_composition, empty_underline, 1592 view()->OnImeSetComposition(ascii_composition, empty_underline,
1590 gfx::Range::InvalidRange(), 0, 0); 1593 gfx::Range::InvalidRange(), 0, 0);
1591 view()->GetCompositionCharacterBounds(&bounds); 1594 view()->GetCompositionCharacterBounds(&bounds);
1592 ASSERT_EQ(ascii_composition.size(), bounds.size()); 1595 ASSERT_EQ(ascii_composition.size(), bounds.size());
1593 1596
1594 for (size_t i = 0; i < bounds.size(); ++i) 1597 for (size_t i = 0; i < bounds.size(); ++i)
1595 EXPECT_LT(0, bounds[i].width()); 1598 EXPECT_LT(0, bounds[i].width());
1596 view()->OnImeConfirmComposition( 1599 view()->OnImeCommitText(empty_string, gfx::Range::InvalidRange(), 0);
1597 empty_string, gfx::Range::InvalidRange(), false);
1598 1600
1599 // Non surrogate pair unicode character. 1601 // Non surrogate pair unicode character.
1600 const base::string16 unicode_composition = base::UTF8ToUTF16( 1602 const base::string16 unicode_composition = base::UTF8ToUTF16(
1601 "\xE3\x81\x82\xE3\x81\x84\xE3\x81\x86\xE3\x81\x88\xE3\x81\x8A"); 1603 "\xE3\x81\x82\xE3\x81\x84\xE3\x81\x86\xE3\x81\x88\xE3\x81\x8A");
1602 view()->OnImeSetComposition(unicode_composition, empty_underline, 1604 view()->OnImeSetComposition(unicode_composition, empty_underline,
1603 gfx::Range::InvalidRange(), 0, 0); 1605 gfx::Range::InvalidRange(), 0, 0);
1604 view()->GetCompositionCharacterBounds(&bounds); 1606 view()->GetCompositionCharacterBounds(&bounds);
1605 ASSERT_EQ(unicode_composition.size(), bounds.size()); 1607 ASSERT_EQ(unicode_composition.size(), bounds.size());
1606 for (size_t i = 0; i < bounds.size(); ++i) 1608 for (size_t i = 0; i < bounds.size(); ++i)
1607 EXPECT_LT(0, bounds[i].width()); 1609 EXPECT_LT(0, bounds[i].width());
1608 view()->OnImeConfirmComposition( 1610 view()->OnImeCommitText(empty_string, gfx::Range::InvalidRange(), 0);
1609 empty_string, gfx::Range::InvalidRange(), false);
1610 1611
1611 // Surrogate pair character. 1612 // Surrogate pair character.
1612 const base::string16 surrogate_pair_char = 1613 const base::string16 surrogate_pair_char =
1613 base::UTF8ToUTF16("\xF0\xA0\xAE\x9F"); 1614 base::UTF8ToUTF16("\xF0\xA0\xAE\x9F");
1614 view()->OnImeSetComposition(surrogate_pair_char, 1615 view()->OnImeSetComposition(surrogate_pair_char,
1615 empty_underline, 1616 empty_underline,
1616 gfx::Range::InvalidRange(), 1617 gfx::Range::InvalidRange(),
1617 0, 1618 0,
1618 0); 1619 0);
1619 view()->GetCompositionCharacterBounds(&bounds); 1620 view()->GetCompositionCharacterBounds(&bounds);
1620 ASSERT_EQ(surrogate_pair_char.size(), bounds.size()); 1621 ASSERT_EQ(surrogate_pair_char.size(), bounds.size());
1621 EXPECT_LT(0, bounds[0].width()); 1622 EXPECT_LT(0, bounds[0].width());
1622 EXPECT_EQ(0, bounds[1].width()); 1623 EXPECT_EQ(0, bounds[1].width());
1623 view()->OnImeConfirmComposition( 1624 view()->OnImeCommitText(empty_string, gfx::Range::InvalidRange(), 0);
1624 empty_string, gfx::Range::InvalidRange(), false);
1625 1625
1626 // Mixed string. 1626 // Mixed string.
1627 const base::string16 surrogate_pair_mixed_composition = 1627 const base::string16 surrogate_pair_mixed_composition =
1628 surrogate_pair_char + base::UTF8ToUTF16("\xE3\x81\x82") + 1628 surrogate_pair_char + base::UTF8ToUTF16("\xE3\x81\x82") +
1629 surrogate_pair_char + base::UTF8ToUTF16("b") + surrogate_pair_char; 1629 surrogate_pair_char + base::UTF8ToUTF16("b") + surrogate_pair_char;
1630 const size_t utf16_length = 8UL; 1630 const size_t utf16_length = 8UL;
1631 const bool is_surrogate_pair_empty_rect[8] = { 1631 const bool is_surrogate_pair_empty_rect[8] = {
1632 false, true, false, false, true, false, false, true }; 1632 false, true, false, false, true, false, false, true };
1633 view()->OnImeSetComposition(surrogate_pair_mixed_composition, 1633 view()->OnImeSetComposition(surrogate_pair_mixed_composition,
1634 empty_underline, 1634 empty_underline,
1635 gfx::Range::InvalidRange(), 1635 gfx::Range::InvalidRange(),
1636 0, 1636 0,
1637 0); 1637 0);
1638 view()->GetCompositionCharacterBounds(&bounds); 1638 view()->GetCompositionCharacterBounds(&bounds);
1639 ASSERT_EQ(utf16_length, bounds.size()); 1639 ASSERT_EQ(utf16_length, bounds.size());
1640 for (size_t i = 0; i < utf16_length; ++i) { 1640 for (size_t i = 0; i < utf16_length; ++i) {
1641 if (is_surrogate_pair_empty_rect[i]) { 1641 if (is_surrogate_pair_empty_rect[i]) {
1642 EXPECT_EQ(0, bounds[i].width()); 1642 EXPECT_EQ(0, bounds[i].width());
1643 } else { 1643 } else {
1644 EXPECT_LT(0, bounds[i].width()); 1644 EXPECT_LT(0, bounds[i].width());
1645 } 1645 }
1646 } 1646 }
1647 view()->OnImeConfirmComposition( 1647 view()->OnImeCommitText(empty_string, gfx::Range::InvalidRange(), 0);
1648 empty_string, gfx::Range::InvalidRange(), false);
1649 } 1648 }
1650 #endif 1649 #endif
1651 1650
1652 TEST_F(RenderViewImplTest, ZoomLimit) { 1651 TEST_F(RenderViewImplTest, ZoomLimit) {
1653 const double kMinZoomLevel = ZoomFactorToZoomLevel(kMinimumZoomFactor); 1652 const double kMinZoomLevel = ZoomFactorToZoomLevel(kMinimumZoomFactor);
1654 const double kMaxZoomLevel = ZoomFactorToZoomLevel(kMaximumZoomFactor); 1653 const double kMaxZoomLevel = ZoomFactorToZoomLevel(kMaximumZoomFactor);
1655 1654
1656 // Verifies navigation to a URL with preset zoom level indeed sets the level. 1655 // Verifies navigation to a URL with preset zoom level indeed sets the level.
1657 // Regression test for http://crbug.com/139559, where the level was not 1656 // Regression test for http://crbug.com/139559, where the level was not
1658 // properly set when it is out of the default zoom limits of WebView. 1657 // properly set when it is out of the default zoom limits of WebView.
(...skipping 897 matching lines...) Expand 10 before | Expand all | Expand 10 after
2556 ExpectPauseAndResume(3); 2555 ExpectPauseAndResume(3);
2557 blink::WebScriptSource source2( 2556 blink::WebScriptSource source2(
2558 WebString::fromUTF8("function func2() { func1(); }; func2();")); 2557 WebString::fromUTF8("function func2() { func1(); }; func2();"));
2559 frame()->GetWebFrame()->executeScriptInIsolatedWorld(17, &source2, 1, 1); 2558 frame()->GetWebFrame()->executeScriptInIsolatedWorld(17, &source2, 1, 1);
2560 2559
2561 EXPECT_FALSE(IsPaused()); 2560 EXPECT_FALSE(IsPaused());
2562 Detach(); 2561 Detach();
2563 } 2562 }
2564 2563
2565 } // namespace content 2564 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/render_frame_impl.cc ('k') | content/renderer/render_widget.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698