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

Side by Side Diff: ios/web/web_state/js/common_js_unittest.mm

Issue 2807213003: Move stringify, form, navigation and scroll methods out of core.js. (Closed)
Patch Set: Created 3 years, 8 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 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 #import <Foundation/Foundation.h> 6 #import <Foundation/Foundation.h>
7 7
8 #include "base/macros.h" 8 #include "base/macros.h"
9 #import "base/strings/sys_string_conversions.h"
Eugene But (OOO till 7-30) 2017/04/10 21:42:07 s/import/include (because this header has Objectiv
danyao 2017/04/10 22:12:59 Done.
9 #import "ios/web/public/test/web_test_with_web_state.h" 10 #import "ios/web/public/test/web_test_with_web_state.h"
10 #include "testing/gtest/include/gtest/gtest.h" 11 #include "testing/gtest/include/gtest/gtest.h"
11 #import "testing/gtest_mac.h" 12 #import "testing/gtest_mac.h"
12 13
13 namespace { 14 namespace {
14 15
15 // Struct for isTextField() test data. 16 /** Struct for isTextField() test data. */
Eugene But (OOO till 7-30) 2017/04/10 21:42:07 /** */ comments Style Is pretty uncommon in Chrome
danyao 2017/04/10 22:12:59 Ah right this is Objective C. I was carrying over
16 struct TextFieldTestElement { 17 struct TextFieldTestElement {
17 // The element name. 18 // The element name.
18 const char* element_name; 19 const char* element_name;
19 // The index of this element in those that have the same name. 20 // The index of this element in those that have the same name.
20 const int element_index; 21 const int element_index;
21 // True if this is expected to be a text field. 22 // True if this is expected to be a text field.
22 const bool expected_is_text_field; 23 const bool expected_is_text_field;
23 }; 24 };
24 25
26 /** Struct for stringify() test data. */
27 struct TestScriptAndExpectedValue {
28 NSString* test_script;
29 id expected_value;
30 };
31
25 } // namespace 32 } // namespace
26 33
27 namespace web { 34 namespace web {
28 35
29 // Test fixture to test common.js. 36 /** Test fixture to test common.js. */
30 typedef web::WebTestWithWebState CommonJsTest; 37 typedef web::WebTestWithWebState CommonJsTest;
31 38
32 // Tests __gCrWeb.common.isTextField JavaScript API. 39 /** Tests __gCrWeb.common.isTextField JavaScript API. */
33 TEST_F(CommonJsTest, IsTestField) { 40 TEST_F(CommonJsTest, IsTestField) {
34 LoadHtml(@"<html><body>" 41 LoadHtml(@"<html><body>"
35 "<input type='text' name='firstname'>" 42 "<input type='text' name='firstname'>"
36 "<input type='text' name='lastname'>" 43 "<input type='text' name='lastname'>"
37 "<input type='email' name='email'>" 44 "<input type='email' name='email'>"
38 "<input type='tel' name='phone'>" 45 "<input type='tel' name='phone'>"
39 "<input type='url' name='blog'>" 46 "<input type='url' name='blog'>"
40 "<input type='number' name='expected number of clicks'>" 47 "<input type='number' name='expected number of clicks'>"
41 "<input type='password' name='pwd'>" 48 "<input type='password' name='pwd'>"
42 "<input type='checkbox' name='vehicle' value='Bike'>" 49 "<input type='checkbox' name='vehicle' value='Bike'>"
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
80 id result = ExecuteJavaScript([NSString 87 id result = ExecuteJavaScript([NSString
81 stringWithFormat:@"__gCrWeb.common.isTextField(" 88 stringWithFormat:@"__gCrWeb.common.isTextField("
82 "window.document.getElementsByName('%s')[%d])", 89 "window.document.getElementsByName('%s')[%d])",
83 element.element_name, element.element_index]); 90 element.element_name, element.element_index]);
84 EXPECT_NSEQ(element.expected_is_text_field ? @YES : @NO, result) 91 EXPECT_NSEQ(element.expected_is_text_field ? @YES : @NO, result)
85 << element.element_name << " with index " << element.element_index 92 << element.element_name << " with index " << element.element_index
86 << " isTextField(): " << element.expected_is_text_field; 93 << " isTextField(): " << element.expected_is_text_field;
87 } 94 }
88 } 95 }
89 96
97 /** Tests __gCrWeb.stringify JavaScript API. */
98 TEST_F(CommonJsTest, Stringify) {
99 TestScriptAndExpectedValue testData[] = {
Eugene But (OOO till 7-30) 2017/04/10 21:42:07 s/testData/test_data to follow C++ Style Guide ins
danyao 2017/04/10 22:12:59 Done.
100 // Stringify a string that contains various characters that must
101 // be escaped.
102 {@"__gCrWeb.stringify('a\\u000a\\t\\b\\\\\\\"Z')",
103 @"\"a\\n\\t\\b\\\\\\\"Z\""},
104 // Stringify a number.
105 {@"__gCrWeb.stringify(77.7)", @"77.7"},
106 // Stringify an array.
107 {@"__gCrWeb.stringify(['a','b'])", @"[\"a\",\"b\"]"},
108 // Stringify an object.
109 {@"__gCrWeb.stringify({'a':'b','c':'d'})", @"{\"a\":\"b\",\"c\":\"d\"}"},
110 // Stringify a hierarchy of objects and arrays.
111 {@"__gCrWeb.stringify([{'a':['b','c'],'d':'e'},'f'])",
112 @"[{\"a\":[\"b\",\"c\"],\"d\":\"e\"},\"f\"]"},
113 // Stringify null.
114 {@"__gCrWeb.stringify(null)", @"null"},
115 // Stringify an object with a toJSON function.
116 {@"temp = [1,2];"
117 "temp.toJSON = function (key) {return undefined};"
118 "__gCrWeb.stringify(temp)",
119 @"[1,2]"},
120 // Stringify an object with a toJSON property that is not a function.
121 {@"temp = [1,2];"
122 "temp.toJSON = 42;"
123 "__gCrWeb.stringify(temp)",
124 @"[1,2]"},
125 // Stringify an undefined object.
126 {@"__gCrWeb.stringify(undefined)", @"undefined"},
127 };
128
129 for (size_t i = 0; i < arraysize(testData); i++) {
130 TestScriptAndExpectedValue& data = testData[i];
131 // Load a sample HTML page. As a side-effect, loading HTML via
132 // |webController_| will also inject core.js.
133 LoadHtml(@"<p>");
134 id result = ExecuteJavaScript(data.test_script);
135 EXPECT_NSEQ(data.expected_value, result)
136 << " in test " << i << ": "
137 << base::SysNSStringToUTF8(data.test_script);
138 }
139 }
140
90 } // namespace web 141 } // namespace web
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698