| OLD | NEW |
| 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 <UIKit/UIKit.h> | 6 #include <Foundation/Foundation.h> |
| 7 | 7 |
| 8 #include "base/macros.h" | 8 #include "base/macros.h" |
| 9 #include "base/strings/stringprintf.h" | |
| 10 #include "base/strings/sys_string_conversions.h" | |
| 11 #include "ios/web/public/test/web_test_util.h" | |
| 12 #import "ios/web/test/web_test.h" | 9 #import "ios/web/test/web_test.h" |
| 13 #include "testing/gtest/include/gtest/gtest.h" | 10 #include "testing/gtest/include/gtest/gtest.h" |
| 14 #include "testing/gtest_mac.h" | 11 #include "testing/gtest_mac.h" |
| 15 | 12 |
| 16 // Unit tests for ios/web/web_state/js/resources/common.js. | |
| 17 | |
| 18 namespace { | 13 namespace { |
| 19 | 14 |
| 20 // Struct for isTextField() test data. | 15 // Struct for isTextField() test data. |
| 21 struct TextFieldTestElement { | 16 struct TextFieldTestElement { |
| 22 // The element name. | 17 // The element name. |
| 23 const char* element_name; | 18 const char* element_name; |
| 24 // The index of this element in those that have the same name. | 19 // The index of this element in those that have the same name. |
| 25 const int element_index; | 20 const int element_index; |
| 26 // True if this is expected to be a text field. | 21 // True if this is expected to be a text field. |
| 27 const bool expected_is_text_field; | 22 const bool expected_is_text_field; |
| 28 }; | 23 }; |
| 29 | 24 |
| 30 // A mixin class for testing with CRWWKWebViewWebController or | 25 } // namespace |
| 31 // CRWUIWebViewWebController. | |
| 32 template <typename WebTestT> | |
| 33 class CommonJsTest : public WebTestT {}; | |
| 34 | 26 |
| 35 // Concrete test fixture to test core.js using UIWebView-based web controller. | 27 namespace web { |
| 36 typedef CommonJsTest<web::WebTestWithUIWebViewWebController> | |
| 37 CommonJSUIWebViewTest; | |
| 38 | 28 |
| 39 // Concrete test fixture to test core.js using WKWebView-based web controller. | 29 // Test fixture to test common.js. |
| 40 typedef CommonJsTest<web::WebTestWithWKWebViewWebController> | 30 typedef web::WebTestWithWKWebViewWebController CommonJsTest; |
| 41 CommonJSWKWebViewTest; | |
| 42 | 31 |
| 43 WEB_TEST_F(CommonJSUIWebViewTest, CommonJSWKWebViewTest, Foo) { | 32 // Tests __gCrWeb.common.isTextField JavaScript API. |
| 44 this->LoadHtml(@"<html><body>" | 33 TEST_F(CommonJsTest, IsTestField) { |
| 45 "<input type='text' name='firstname'>" | 34 LoadHtml(@"<html><body>" |
| 46 "<input type='text' name='lastname'>" | 35 "<input type='text' name='firstname'>" |
| 47 "<input type='email' name='email'>" | 36 "<input type='text' name='lastname'>" |
| 48 "<input type='tel' name='phone'>" | 37 "<input type='email' name='email'>" |
| 49 "<input type='url' name='blog'>" | 38 "<input type='tel' name='phone'>" |
| 50 "<input type='number' name='expected number of clicks'>" | 39 "<input type='url' name='blog'>" |
| 51 "<input type='password' name='pwd'>" | 40 "<input type='number' name='expected number of clicks'>" |
| 52 "<input type='checkbox' name='vehicle' value='Bike'>" | 41 "<input type='password' name='pwd'>" |
| 53 "<input type='checkbox' name='vehicle' value='Car'>" | 42 "<input type='checkbox' name='vehicle' value='Bike'>" |
| 54 "<input type='checkbox' name='vehicle' value='Rocket'>" | 43 "<input type='checkbox' name='vehicle' value='Car'>" |
| 55 "<input type='radio' name='boolean' value='true'>" | 44 "<input type='checkbox' name='vehicle' value='Rocket'>" |
| 56 "<input type='radio' name='boolean' value='false'>" | 45 "<input type='radio' name='boolean' value='true'>" |
| 57 "<input type='radio' name='boolean' value='other'>" | 46 "<input type='radio' name='boolean' value='false'>" |
| 58 "<select name='state'>" | 47 "<input type='radio' name='boolean' value='other'>" |
| 59 " <option value='CA'>CA</option>" | 48 "<select name='state'>" |
| 60 " <option value='MA'>MA</option>" | 49 " <option value='CA'>CA</option>" |
| 61 "</select>" | 50 " <option value='MA'>MA</option>" |
| 62 "<select name='cars' multiple>" | 51 "</select>" |
| 63 " <option value='volvo'>Volvo</option>" | 52 "<select name='cars' multiple>" |
| 64 " <option value='saab'>Saab</option>" | 53 " <option value='volvo'>Volvo</option>" |
| 65 " <option value='opel'>Opel</option>" | 54 " <option value='saab'>Saab</option>" |
| 66 " <option value='audi'>Audi</option>" | 55 " <option value='opel'>Opel</option>" |
| 67 "</select>" | 56 " <option value='audi'>Audi</option>" |
| 68 "<input type='submit' name='submit' value='Submit'>" | 57 "</select>" |
| 69 "</body></html>"); | 58 "<input type='submit' name='submit' value='Submit'>" |
| 59 "</body></html>"); |
| 70 | 60 |
| 71 static const struct TextFieldTestElement testElements[] = { | 61 static const struct TextFieldTestElement testElements[] = { |
| 72 {"firstname", 0, true}, | 62 {"firstname", 0, true}, |
| 73 {"lastname", 0, true}, | 63 {"lastname", 0, true}, |
| 74 {"email", 0, true}, | 64 {"email", 0, true}, |
| 75 {"phone", 0, true}, | 65 {"phone", 0, true}, |
| 76 {"blog", 0, true}, | 66 {"blog", 0, true}, |
| 77 {"expected number of clicks", 0, true}, | 67 {"expected number of clicks", 0, true}, |
| 78 {"pwd", 0, true}, | 68 {"pwd", 0, true}, |
| 79 {"vehicle", 0, false}, | 69 {"vehicle", 0, false}, |
| 80 {"vehicle", 1, false}, | 70 {"vehicle", 1, false}, |
| 81 {"vehicle", 2, false}, | 71 {"vehicle", 2, false}, |
| 82 {"boolean", 0, false}, | 72 {"boolean", 0, false}, |
| 83 {"boolean", 1, false}, | 73 {"boolean", 1, false}, |
| 84 {"boolean", 2, false}, | 74 {"boolean", 2, false}, |
| 85 {"state", 0, false}, | 75 {"state", 0, false}, |
| 86 {"cars", 0, false}, | 76 {"cars", 0, false}, |
| 87 {"submit", 0, false}}; | 77 {"submit", 0, false}}; |
| 88 for (size_t i = 0; i < arraysize(testElements); ++i) { | 78 for (size_t i = 0; i < arraysize(testElements); ++i) { |
| 89 TextFieldTestElement element = testElements[i]; | 79 TextFieldTestElement element = testElements[i]; |
| 90 NSString* result = | 80 NSString* result = RunJavaScript([NSString |
| 91 this->RunJavaScript(base::SysUTF8ToNSString(base::StringPrintf( | 81 stringWithFormat:@"__gCrWeb.common.isTextField(" |
| 92 "__gCrWeb.common.isTextField(" | 82 "window.document.getElementsByName('%s')[%d])", |
| 93 "window.document.getElementsByName('%s')[%u])", | 83 element.element_name, element.element_index]); |
| 94 element.element_name, element.element_index))); | |
| 95 EXPECT_NSEQ(element.expected_is_text_field ? @"true" : @"false", result) | 84 EXPECT_NSEQ(element.expected_is_text_field ? @"true" : @"false", result) |
| 96 << element.element_name << " with index " << element.element_index | 85 << element.element_name << " with index " << element.element_index |
| 97 << " isTextField(): " << element.expected_is_text_field; | 86 << " isTextField(): " << element.expected_is_text_field; |
| 98 } | 87 } |
| 99 } | 88 } |
| 100 | 89 |
| 101 } // namespace | 90 } // namespace web |
| OLD | NEW |