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

Side by Side Diff: ios/web/web_state/ui/web_view_js_utils_unittest.mm

Issue 2281803002: [ios] Removed deprecated JS execution API. (Closed)
Patch Set: Merged with master 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 | « ios/web/web_state/ui/web_view_js_utils.mm ('k') | 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 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 #import "ios/web/web_state/ui/web_view_js_utils.h" 5 #import "ios/web/web_state/ui/web_view_js_utils.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #import "base/mac/scoped_nsobject.h"
9 #include "base/test/ios/wait_util.h"
10 #include "base/values.h" 8 #include "base/values.h"
11 #include "ios/web/public/test/test_browser_state.h" 9 #include "testing/gtest/include/gtest/gtest.h"
12 #import "ios/web/public/test/test_web_client.h"
13 #import "ios/web/public/web_view_creation_util.h"
14 #import "ios/web/web_state/web_view_internal_creation_util.h"
15 #include "ios/web/public/test/web_test.h"
16 #include "testing/gtest_mac.h"
17 #include "testing/platform_test.h"
18 10
19 namespace web { 11 namespace web {
20 12
21 // Test fixture for web::EvaluateJavaScript testing.
22 class WebViewJsUtilsTest : public web::WebTest {
23 protected:
24 void SetUp() override {
25 web::WebTest::SetUp();
26 web_view_.reset(web::CreateWKWebView(CGRectZero, GetBrowserState()));
27 }
28 // Synchronously returns result of web::EvaluateJavaScript call.
29 NSString* EvaluateJavaScript(NSString* js) {
30 __block bool evaluation_completed = false;
31 __block base::scoped_nsobject<NSString> evaluation_result;
32 web::EvaluateJavaScript(web_view_, js, ^(NSString* result, NSError* error) {
33 DCHECK(!error);
34 evaluation_result.reset([result copy]);
35 evaluation_completed = true;
36 });
37 base::test::ios::WaitUntilCondition(^{
38 return evaluation_completed;
39 });
40 return [[evaluation_result copy] autorelease];
41 }
42
43 private:
44 // WKWebView created for testing.
45 base::scoped_nsobject<WKWebView> web_view_;
46 };
47
48 // Tests that ValueResultFromWKResult converts nil value to nullptr. 13 // Tests that ValueResultFromWKResult converts nil value to nullptr.
49 TEST_F(WebViewJsUtilsTest, ValueResultFromUndefinedWKResult) { 14 TEST(WebViewJsUtilsTest, ValueResultFromUndefinedWKResult) {
50 EXPECT_FALSE(ValueResultFromWKResult(nil)); 15 EXPECT_FALSE(ValueResultFromWKResult(nil));
51 } 16 }
52 17
53 // Tests that ValueResultFromWKResult converts string to Value::TYPE_STRING. 18 // Tests that ValueResultFromWKResult converts string to Value::TYPE_STRING.
54 TEST_F(WebViewJsUtilsTest, ValueResultFromStringWKResult) { 19 TEST(WebViewJsUtilsTest, ValueResultFromStringWKResult) {
55 std::unique_ptr<base::Value> value(web::ValueResultFromWKResult(@"test")); 20 std::unique_ptr<base::Value> value(web::ValueResultFromWKResult(@"test"));
56 EXPECT_TRUE(value); 21 EXPECT_TRUE(value);
57 EXPECT_EQ(base::Value::TYPE_STRING, value->GetType()); 22 EXPECT_EQ(base::Value::TYPE_STRING, value->GetType());
58 std::string converted_result; 23 std::string converted_result;
59 value->GetAsString(&converted_result); 24 value->GetAsString(&converted_result);
60 EXPECT_EQ("test", converted_result); 25 EXPECT_EQ("test", converted_result);
61 } 26 }
62 27
63 // Tests that ValueResultFromWKResult converts inetger to Value::TYPE_DOUBLE. 28 // Tests that ValueResultFromWKResult converts inetger to Value::TYPE_DOUBLE.
64 // NOTE: WKWebView API returns all numbers as kCFNumberFloat64Type, so there is 29 // NOTE: WKWebView API returns all numbers as kCFNumberFloat64Type, so there is
65 // no way to tell if the result is integer or double. 30 // no way to tell if the result is integer or double.
66 TEST_F(WebViewJsUtilsTest, ValueResultFromIntegerWKResult) { 31 TEST(WebViewJsUtilsTest, ValueResultFromIntegerWKResult) {
67 std::unique_ptr<base::Value> value(web::ValueResultFromWKResult(@1)); 32 std::unique_ptr<base::Value> value(web::ValueResultFromWKResult(@1));
68 EXPECT_TRUE(value); 33 EXPECT_TRUE(value);
69 EXPECT_EQ(base::Value::TYPE_DOUBLE, value->GetType()); 34 EXPECT_EQ(base::Value::TYPE_DOUBLE, value->GetType());
70 double converted_result = 0; 35 double converted_result = 0;
71 value->GetAsDouble(&converted_result); 36 value->GetAsDouble(&converted_result);
72 EXPECT_EQ(1, converted_result); 37 EXPECT_EQ(1, converted_result);
73 } 38 }
74 39
75 // Tests that ValueResultFromWKResult converts double to Value::TYPE_DOUBLE. 40 // Tests that ValueResultFromWKResult converts double to Value::TYPE_DOUBLE.
76 TEST_F(WebViewJsUtilsTest, ValueResultFromDoubleWKResult) { 41 TEST(WebViewJsUtilsTest, ValueResultFromDoubleWKResult) {
77 std::unique_ptr<base::Value> value(web::ValueResultFromWKResult(@3.14)); 42 std::unique_ptr<base::Value> value(web::ValueResultFromWKResult(@3.14));
78 EXPECT_TRUE(value); 43 EXPECT_TRUE(value);
79 EXPECT_EQ(base::Value::TYPE_DOUBLE, value->GetType()); 44 EXPECT_EQ(base::Value::TYPE_DOUBLE, value->GetType());
80 double converted_result = 0; 45 double converted_result = 0;
81 value->GetAsDouble(&converted_result); 46 value->GetAsDouble(&converted_result);
82 EXPECT_EQ(3.14, converted_result); 47 EXPECT_EQ(3.14, converted_result);
83 } 48 }
84 49
85 // Tests that ValueResultFromWKResult converts bool to Value::TYPE_BOOLEAN. 50 // Tests that ValueResultFromWKResult converts bool to Value::TYPE_BOOLEAN.
86 TEST_F(WebViewJsUtilsTest, ValueResultFromBoolWKResult) { 51 TEST(WebViewJsUtilsTest, ValueResultFromBoolWKResult) {
87 std::unique_ptr<base::Value> value(web::ValueResultFromWKResult(@YES)); 52 std::unique_ptr<base::Value> value(web::ValueResultFromWKResult(@YES));
88 EXPECT_TRUE(value); 53 EXPECT_TRUE(value);
89 EXPECT_EQ(base::Value::TYPE_BOOLEAN, value->GetType()); 54 EXPECT_EQ(base::Value::TYPE_BOOLEAN, value->GetType());
90 bool converted_result = false; 55 bool converted_result = false;
91 value->GetAsBoolean(&converted_result); 56 value->GetAsBoolean(&converted_result);
92 EXPECT_TRUE(converted_result); 57 EXPECT_TRUE(converted_result);
93 } 58 }
94 59
95 // Tests that ValueResultFromWKResult converts null to Value::TYPE_NULL. 60 // Tests that ValueResultFromWKResult converts null to Value::TYPE_NULL.
96 TEST_F(WebViewJsUtilsTest, ValueResultFromNullWKResult) { 61 TEST(WebViewJsUtilsTest, ValueResultFromNullWKResult) {
97 std::unique_ptr<base::Value> value( 62 std::unique_ptr<base::Value> value(
98 web::ValueResultFromWKResult([NSNull null])); 63 web::ValueResultFromWKResult([NSNull null]));
99 EXPECT_TRUE(value); 64 EXPECT_TRUE(value);
100 EXPECT_EQ(base::Value::TYPE_NULL, value->GetType()); 65 EXPECT_EQ(base::Value::TYPE_NULL, value->GetType());
101 } 66 }
102 67
103 // Tests that ValueResultFromWKResult converts NSDictionaries to properly 68 // Tests that ValueResultFromWKResult converts NSDictionaries to properly
104 // initialized base::DictionaryValue. 69 // initialized base::DictionaryValue.
105 TEST_F(WebViewJsUtilsTest, ValueResultFromDictionaryWKResult) { 70 TEST(WebViewJsUtilsTest, ValueResultFromDictionaryWKResult) {
106 NSDictionary* testDictionary = 71 NSDictionary* testDictionary =
107 @{ @"Key1" : @"Value1", 72 @{ @"Key1" : @"Value1",
108 @"Key2" : @{@"Key3" : @42} }; 73 @"Key2" : @{@"Key3" : @42} };
109 74
110 std::unique_ptr<base::Value> value( 75 std::unique_ptr<base::Value> value(
111 web::ValueResultFromWKResult(testDictionary)); 76 web::ValueResultFromWKResult(testDictionary));
112 base::DictionaryValue* dictionary = nullptr; 77 base::DictionaryValue* dictionary = nullptr;
113 value->GetAsDictionary(&dictionary); 78 value->GetAsDictionary(&dictionary);
114 EXPECT_NE(nullptr, dictionary); 79 EXPECT_NE(nullptr, dictionary);
115 80
116 std::string value1; 81 std::string value1;
117 dictionary->GetString("Key1", &value1); 82 dictionary->GetString("Key1", &value1);
118 EXPECT_EQ("Value1", value1); 83 EXPECT_EQ("Value1", value1);
119 84
120 base::DictionaryValue const* innerDictionary = nullptr; 85 base::DictionaryValue const* innerDictionary = nullptr;
121 dictionary->GetDictionary("Key2", &innerDictionary); 86 dictionary->GetDictionary("Key2", &innerDictionary);
122 EXPECT_NE(nullptr, innerDictionary); 87 EXPECT_NE(nullptr, innerDictionary);
123 88
124 double value3; 89 double value3;
125 innerDictionary->GetDouble("Key3", &value3); 90 innerDictionary->GetDouble("Key3", &value3);
126 EXPECT_EQ(42, value3); 91 EXPECT_EQ(42, value3);
127 } 92 }
128 93
129 // Tests that a script with undefined result correctly evaluates to string.
130 TEST_F(WebViewJsUtilsTest, UndefinedEvaluation) {
131 EXPECT_NSEQ(@"", EvaluateJavaScript(@"{}"));
132 }
133
134 // Tests that a script with string result correctly evaluates to string.
135 TEST_F(WebViewJsUtilsTest, StringEvaluation) {
136 EXPECT_NSEQ(@"test", EvaluateJavaScript(@"'test'"));
137 }
138
139 // Tests that a script with number result correctly evaluates to string.
140 TEST_F(WebViewJsUtilsTest, NumberEvaluation) {
141 EXPECT_NSEQ(@"-1", EvaluateJavaScript(@"-1"));
142 EXPECT_NSEQ(@"0", EvaluateJavaScript(@"0"));
143 EXPECT_NSEQ(@"1", EvaluateJavaScript(@"1"));
144 EXPECT_NSEQ(@"3.14", EvaluateJavaScript(@"3.14"));
145 }
146
147 // Tests that a script with bool result correctly evaluates to string.
148 TEST_F(WebViewJsUtilsTest, BoolEvaluation) {
149 EXPECT_NSEQ(@"true", EvaluateJavaScript(@"true"));
150 EXPECT_NSEQ(@"false", EvaluateJavaScript(@"false"));
151 }
152
153 // Tests that a script with null result correctly evaluates to empty string.
154 TEST_F(WebViewJsUtilsTest, NullEvaluation) {
155 EXPECT_NSEQ(@"", EvaluateJavaScript(@"null"));
156 }
157
158 } // namespace web 94 } // namespace web
OLDNEW
« no previous file with comments | « ios/web/web_state/ui/web_view_js_utils.mm ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698