selenium-webdriver 2.48.2 → 2.53.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGES.md +116 -0
- package/NOTICE +1 -1
- package/README.md +59 -9
- package/builder.js +375 -358
- package/chrome.js +549 -586
- package/edge.js +378 -0
- package/error.js +9 -6
- package/example/google_search.js +1 -1
- package/example/google_search_generator.js +2 -4
- package/example/logging.js +6 -2
- package/example/sample.js +21 -0
- package/executors.js +11 -27
- package/firefox/binary.js +149 -98
- package/firefox/extension.js +15 -19
- package/firefox/index.js +256 -163
- package/firefox/profile.js +223 -243
- package/http/index.js +487 -81
- package/http/util.js +40 -36
- package/ie.js +288 -309
- package/index.js +34 -125
- package/io/exec.js +58 -39
- package/io/index.js +72 -60
- package/lib/README +4 -0
- package/lib/actions.js +596 -0
- package/lib/by.js +277 -0
- package/lib/capabilities.js +450 -0
- package/lib/{webdriver/command.js → command.js} +91 -72
- package/lib/{webdriver/button.js → devmode.js} +13 -8
- package/lib/error.js +690 -0
- package/lib/events.js +212 -0
- package/lib/firefox/amd64/libnoblur64.so +0 -0
- package/lib/firefox/i386/libnoblur.so +0 -0
- package/lib/firefox/webdriver.json +5 -1
- package/lib/firefox/webdriver.xpi +0 -0
- package/lib/{webdriver/key.js → input.js} +84 -2
- package/lib/logging.js +670 -0
- package/lib/{webdriver/promise.js → promise.js} +817 -644
- package/lib/safari/client.js +266 -214
- package/lib/session.js +80 -0
- package/lib/{webdriver/serializable.js → symbols.js} +16 -19
- package/lib/test/build.js +4 -4
- package/lib/test/data/click_tests/html5_submit_buttons.html +2 -1
- package/lib/test/data/click_tests/overlapping_elements.html +15 -4
- package/lib/test/data/click_tests/partially_overlapping_elements.html +124 -0
- package/lib/test/data/click_tests/wrapped_overlapping_elements.html +13 -0
- package/lib/test/data/hidden_partially.html +45 -0
- package/lib/test/data/readOnlyPage.html +1 -1
- package/lib/test/data/selectPage.html +18 -2
- package/lib/test/fileserver.js +3 -4
- package/lib/test/index.js +7 -3
- package/lib/test/resources.js +1 -1
- package/lib/until.js +376 -0
- package/lib/webdriver.js +2440 -0
- package/net/index.js +4 -0
- package/net/portprober.js +16 -12
- package/opera.js +295 -314
- package/package.json +6 -5
- package/phantomjs.js +144 -147
- package/proxy.js +10 -6
- package/remote/index.js +289 -238
- package/safari.js +326 -311
- package/test/chrome/options_test.js +11 -9
- package/test/element_finding_test.js +51 -13
- package/test/execute_script_test.js +17 -3
- package/test/firefox/firefox_test.js +0 -32
- package/test/http/http_test.js +671 -61
- package/test/http/util_test.js +25 -23
- package/test/io_test.js +67 -1
- package/test/lib/by_test.js +139 -0
- package/test/lib/capabilities_test.js +111 -0
- package/test/lib/error_test.js +325 -0
- package/test/lib/events_test.js +177 -0
- package/test/lib/logging_test.js +272 -0
- package/test/{promise_aplus_test.js → lib/promise_aplus_test.js} +4 -13
- package/test/lib/promise_error_test.js +808 -0
- package/test/lib/promise_flow_test.js +2282 -0
- package/test/lib/promise_generator_test.js +308 -0
- package/test/lib/promise_test.js +996 -0
- package/test/lib/testutil.js +90 -0
- package/test/lib/until_test.js +400 -0
- package/test/lib/webdriver_test.js +2157 -0
- package/test/page_loading_test.js +7 -9
- package/test/remote_test.js +50 -3
- package/test/session_test.js +53 -0
- package/test/stale_element_test.js +2 -2
- package/test/testing/assert_test.js +374 -0
- package/test/testing/index_test.js +9 -11
- package/testing/assert.js +334 -17
- package/testing/index.js +12 -2
- package/_base.js +0 -200
- package/docs/Changes.html +0 -356
- package/docs/class_bot_Error.html +0 -15
- package/docs/class_webdriver_ActionSequence.html +0 -115
- package/docs/class_webdriver_Alert.html +0 -24
- package/docs/class_webdriver_AlertPromise.html +0 -92
- package/docs/class_webdriver_Capabilities.html +0 -60
- package/docs/class_webdriver_Command.html +0 -15
- package/docs/class_webdriver_EventEmitter.html +0 -35
- package/docs/class_webdriver_FileDetector.html +0 -21
- package/docs/class_webdriver_Locator.html +0 -12
- package/docs/class_webdriver_Serializable.html +0 -9
- package/docs/class_webdriver_Session.html +0 -13
- package/docs/class_webdriver_TouchSequence.html +0 -49
- package/docs/class_webdriver_UnhandledAlertError.html +0 -18
- package/docs/class_webdriver_WebDriver.html +0 -313
- package/docs/class_webdriver_WebDriver_Logs.html +0 -15
- package/docs/class_webdriver_WebDriver_Navigation.html +0 -16
- package/docs/class_webdriver_WebDriver_Options.html +0 -41
- package/docs/class_webdriver_WebDriver_TargetLocator.html +0 -38
- package/docs/class_webdriver_WebDriver_Timeouts.html +0 -29
- package/docs/class_webdriver_WebDriver_Window.html +0 -27
- package/docs/class_webdriver_WebElement.html +0 -223
- package/docs/class_webdriver_WebElementPromise.html +0 -274
- package/docs/class_webdriver_http_Executor.html +0 -22
- package/docs/class_webdriver_http_Request.html +0 -12
- package/docs/class_webdriver_http_Response.html +0 -13
- package/docs/class_webdriver_logging_Entry.html +0 -15
- package/docs/class_webdriver_logging_Level.html +0 -55
- package/docs/class_webdriver_logging_LogRecord.html +0 -45
- package/docs/class_webdriver_logging_Logger.html +0 -119
- package/docs/class_webdriver_logging_Preferences.html +0 -8
- package/docs/class_webdriver_promise_CancellationError.html +0 -17
- package/docs/class_webdriver_promise_ControlFlow.html +0 -153
- package/docs/class_webdriver_promise_Deferred.html +0 -84
- package/docs/class_webdriver_promise_MultipleUnhandledRejectionError.html +0 -14
- package/docs/class_webdriver_promise_Promise.html +0 -75
- package/docs/class_webdriver_stacktrace_Frame.html +0 -20
- package/docs/class_webdriver_stacktrace_Snapshot.html +0 -6
- package/docs/class_webdriver_testing_Assertion.html +0 -99
- package/docs/class_webdriver_testing_Assertion_DelegatingMatcher_.html +0 -13
- package/docs/class_webdriver_testing_ContainsMatcher.html +0 -11
- package/docs/class_webdriver_testing_NegatedAssertion.html +0 -97
- package/docs/class_webdriver_until_Condition.html +0 -7
- package/docs/dossier.css +0 -1
- package/docs/dossier.js +0 -86
- package/docs/enum_bot_ErrorCode.html +0 -3
- package/docs/enum_bot_Error_State.html +0 -2
- package/docs/enum_webdriver_Browser.html +0 -2
- package/docs/enum_webdriver_Button.html +0 -2
- package/docs/enum_webdriver_Capability.html +0 -33
- package/docs/enum_webdriver_CommandName.html +0 -3
- package/docs/enum_webdriver_Key.html +0 -12
- package/docs/enum_webdriver_logging_Type.html +0 -6
- package/docs/enum_webdriver_promise_ControlFlow_EventType.html +0 -9
- package/docs/index.html +0 -125
- package/docs/interface_webdriver_CommandExecutor.html +0 -9
- package/docs/interface_webdriver_http_Client.html +0 -10
- package/docs/interface_webdriver_promise_Thenable.html +0 -77
- package/docs/module_selenium-webdriver.html +0 -23
- package/docs/module_selenium-webdriver__base.html +0 -23
- package/docs/module_selenium-webdriver__base_class_Context.html +0 -5
- package/docs/module_selenium-webdriver_builder.html +0 -2
- package/docs/module_selenium-webdriver_builder_class_Builder.html +0 -138
- package/docs/module_selenium-webdriver_chrome.html +0 -90
- package/docs/module_selenium-webdriver_chrome_class_Driver.html +0 -280
- package/docs/module_selenium-webdriver_chrome_class_Options.html +0 -127
- package/docs/module_selenium-webdriver_chrome_class_ServiceBuilder.html +0 -46
- package/docs/module_selenium-webdriver_class_ActionSequence.html +0 -115
- package/docs/module_selenium-webdriver_class_Builder.html +0 -138
- package/docs/module_selenium-webdriver_class_Capabilities.html +0 -60
- package/docs/module_selenium-webdriver_class_Command.html +0 -15
- package/docs/module_selenium-webdriver_class_EventEmitter.html +0 -35
- package/docs/module_selenium-webdriver_class_FileDetector.html +0 -21
- package/docs/module_selenium-webdriver_class_Serializable.html +0 -9
- package/docs/module_selenium-webdriver_class_Session.html +0 -13
- package/docs/module_selenium-webdriver_class_WebDriver.html +0 -313
- package/docs/module_selenium-webdriver_class_WebElement.html +0 -223
- package/docs/module_selenium-webdriver_class_WebElementPromise.html +0 -274
- package/docs/module_selenium-webdriver_enum_Browser.html +0 -2
- package/docs/module_selenium-webdriver_enum_Button.html +0 -2
- package/docs/module_selenium-webdriver_enum_Capability.html +0 -33
- package/docs/module_selenium-webdriver_enum_CommandName.html +0 -3
- package/docs/module_selenium-webdriver_enum_Key.html +0 -12
- package/docs/module_selenium-webdriver_error.html +0 -4
- package/docs/module_selenium-webdriver_error_class_Error.html +0 -15
- package/docs/module_selenium-webdriver_error_enum_ErrorCode.html +0 -3
- package/docs/module_selenium-webdriver_executors.html +0 -10
- package/docs/module_selenium-webdriver_executors_class_DeferredExecutor.html +0 -12
- package/docs/module_selenium-webdriver_firefox.html +0 -68
- package/docs/module_selenium-webdriver_firefox_binary.html +0 -5
- package/docs/module_selenium-webdriver_firefox_binary_class_Binary.html +0 -20
- package/docs/module_selenium-webdriver_firefox_class_Binary.html +0 -20
- package/docs/module_selenium-webdriver_firefox_class_Driver.html +0 -276
- package/docs/module_selenium-webdriver_firefox_class_Options.html +0 -19
- package/docs/module_selenium-webdriver_firefox_class_Profile.html +0 -50
- package/docs/module_selenium-webdriver_firefox_extension.html +0 -8
- package/docs/module_selenium-webdriver_firefox_profile.html +0 -13
- package/docs/module_selenium-webdriver_firefox_profile_class_Profile.html +0 -50
- package/docs/module_selenium-webdriver_http.html +0 -9
- package/docs/module_selenium-webdriver_http_class_Executor.html +0 -22
- package/docs/module_selenium-webdriver_http_class_HttpClient.html +0 -16
- package/docs/module_selenium-webdriver_http_class_Request.html +0 -12
- package/docs/module_selenium-webdriver_http_class_Response.html +0 -13
- package/docs/module_selenium-webdriver_http_util.html +0 -17
- package/docs/module_selenium-webdriver_ie.html +0 -11
- package/docs/module_selenium-webdriver_ie_class_Driver.html +0 -274
- package/docs/module_selenium-webdriver_ie_class_Options.html +0 -89
- package/docs/module_selenium-webdriver_ie_enum_Level.html +0 -1
- package/docs/module_selenium-webdriver_io.html +0 -37
- package/docs/module_selenium-webdriver_io_exec.html +0 -6
- package/docs/module_selenium-webdriver_namespace_By.html +0 -56
- package/docs/module_selenium-webdriver_namespace_error.html +0 -4
- package/docs/module_selenium-webdriver_namespace_logging.html +0 -18
- package/docs/module_selenium-webdriver_namespace_promise.html +0 -163
- package/docs/module_selenium-webdriver_namespace_stacktrace.html +0 -17
- package/docs/module_selenium-webdriver_namespace_until.html +0 -82
- package/docs/module_selenium-webdriver_net.html +0 -7
- package/docs/module_selenium-webdriver_net_portprober.html +0 -12
- package/docs/module_selenium-webdriver_opera.html +0 -62
- package/docs/module_selenium-webdriver_opera_class_Driver.html +0 -276
- package/docs/module_selenium-webdriver_opera_class_Options.html +0 -44
- package/docs/module_selenium-webdriver_opera_class_ServiceBuilder.html +0 -35
- package/docs/module_selenium-webdriver_phantomjs.html +0 -2
- package/docs/module_selenium-webdriver_phantomjs_class_Driver.html +0 -299
- package/docs/module_selenium-webdriver_proxy.html +0 -28
- package/docs/module_selenium-webdriver_remote.html +0 -8
- package/docs/module_selenium-webdriver_remote_class_DriverService.html +0 -32
- package/docs/module_selenium-webdriver_remote_class_FileDetector.html +0 -22
- package/docs/module_selenium-webdriver_remote_class_SeleniumServer.html +0 -41
- package/docs/module_selenium-webdriver_safari.html +0 -9
- package/docs/module_selenium-webdriver_safari_class_Driver.html +0 -279
- package/docs/module_selenium-webdriver_safari_class_Options.html +0 -23
- package/docs/module_selenium-webdriver_testing.html +0 -74
- package/docs/module_selenium-webdriver_testing_assert.html +0 -9
- package/docs/namespace_bot.html +0 -4
- package/docs/namespace_bot_json.html +0 -20
- package/docs/namespace_bot_response.html +0 -18
- package/docs/namespace_bot_userAgent.html +0 -33
- package/docs/namespace_webdriver.html +0 -30
- package/docs/namespace_webdriver_By.html +0 -56
- package/docs/namespace_webdriver_http.html +0 -6
- package/docs/namespace_webdriver_logging.html +0 -70
- package/docs/namespace_webdriver_promise.html +0 -688
- package/docs/namespace_webdriver_stacktrace.html +0 -17
- package/docs/namespace_webdriver_testing.html +0 -7
- package/docs/namespace_webdriver_testing_assert.html +0 -9
- package/docs/namespace_webdriver_testing_asserts.html +0 -18
- package/docs/namespace_webdriver_until.html +0 -82
- package/docs/source/_base.js.src.html +0 -1
- package/docs/source/builder.js.src.html +0 -1
- package/docs/source/chrome.js.src.html +0 -1
- package/docs/source/error.js.src.html +0 -1
- package/docs/source/executors.js.src.html +0 -1
- package/docs/source/firefox/binary.js.src.html +0 -1
- package/docs/source/firefox/extension.js.src.html +0 -1
- package/docs/source/firefox/index.js.src.html +0 -1
- package/docs/source/firefox/profile.js.src.html +0 -1
- package/docs/source/http/index.js.src.html +0 -1
- package/docs/source/http/util.js.src.html +0 -1
- package/docs/source/ie.js.src.html +0 -1
- package/docs/source/index.js.src.html +0 -1
- package/docs/source/io/exec.js.src.html +0 -1
- package/docs/source/io/index.js.src.html +0 -1
- package/docs/source/lib/atoms/error.js.src.html +0 -1
- package/docs/source/lib/atoms/json.js.src.html +0 -1
- package/docs/source/lib/atoms/response.js.src.html +0 -1
- package/docs/source/lib/atoms/userAgent.js.src.html +0 -1
- package/docs/source/lib/goog/array/array.js.src.html +0 -1
- package/docs/source/lib/goog/asserts/asserts.js.src.html +0 -1
- package/docs/source/lib/goog/async/freelist.js.src.html +0 -1
- package/docs/source/lib/goog/async/nexttick.js.src.html +0 -1
- package/docs/source/lib/goog/async/run.js.src.html +0 -1
- package/docs/source/lib/goog/async/workqueue.js.src.html +0 -1
- package/docs/source/lib/goog/base.js.src.html +0 -1
- package/docs/source/lib/goog/debug/debug.js.src.html +0 -1
- package/docs/source/lib/goog/debug/entrypointregistry.js.src.html +0 -1
- package/docs/source/lib/goog/debug/error.js.src.html +0 -1
- package/docs/source/lib/goog/debug/logbuffer.js.src.html +0 -1
- package/docs/source/lib/goog/debug/logger.js.src.html +0 -1
- package/docs/source/lib/goog/debug/logrecord.js.src.html +0 -1
- package/docs/source/lib/goog/deps.js.src.html +0 -1
- package/docs/source/lib/goog/disposable/disposable.js.src.html +0 -1
- package/docs/source/lib/goog/disposable/idisposable.js.src.html +0 -1
- package/docs/source/lib/goog/dom/browserfeature.js.src.html +0 -1
- package/docs/source/lib/goog/dom/dom.js.src.html +0 -1
- package/docs/source/lib/goog/dom/nodetype.js.src.html +0 -1
- package/docs/source/lib/goog/dom/safe.js.src.html +0 -1
- package/docs/source/lib/goog/dom/tagname.js.src.html +0 -1
- package/docs/source/lib/goog/dom/tags.js.src.html +0 -1
- package/docs/source/lib/goog/dom/vendor.js.src.html +0 -1
- package/docs/source/lib/goog/events/browserevent.js.src.html +0 -1
- package/docs/source/lib/goog/events/browserfeature.js.src.html +0 -1
- package/docs/source/lib/goog/events/event.js.src.html +0 -1
- package/docs/source/lib/goog/events/eventid.js.src.html +0 -1
- package/docs/source/lib/goog/events/events.js.src.html +0 -1
- package/docs/source/lib/goog/events/eventtarget.js.src.html +0 -1
- package/docs/source/lib/goog/events/eventtype.js.src.html +0 -1
- package/docs/source/lib/goog/events/keycodes.js.src.html +0 -1
- package/docs/source/lib/goog/events/listenable.js.src.html +0 -1
- package/docs/source/lib/goog/events/listener.js.src.html +0 -1
- package/docs/source/lib/goog/events/listenermap.js.src.html +0 -1
- package/docs/source/lib/goog/fs/url.js.src.html +0 -1
- package/docs/source/lib/goog/functions/functions.js.src.html +0 -1
- package/docs/source/lib/goog/html/safehtml.js.src.html +0 -1
- package/docs/source/lib/goog/html/safescript.js.src.html +0 -1
- package/docs/source/lib/goog/html/safestyle.js.src.html +0 -1
- package/docs/source/lib/goog/html/safestylesheet.js.src.html +0 -1
- package/docs/source/lib/goog/html/safeurl.js.src.html +0 -1
- package/docs/source/lib/goog/html/trustedresourceurl.js.src.html +0 -1
- package/docs/source/lib/goog/html/uncheckedconversions.js.src.html +0 -1
- package/docs/source/lib/goog/i18n/bidi.js.src.html +0 -1
- package/docs/source/lib/goog/iter/iter.js.src.html +0 -1
- package/docs/source/lib/goog/json/json.js.src.html +0 -1
- package/docs/source/lib/goog/labs/testing/assertthat.js.src.html +0 -1
- package/docs/source/lib/goog/labs/testing/logicmatcher.js.src.html +0 -1
- package/docs/source/lib/goog/labs/testing/matcher.js.src.html +0 -1
- package/docs/source/lib/goog/labs/testing/numbermatcher.js.src.html +0 -1
- package/docs/source/lib/goog/labs/testing/objectmatcher.js.src.html +0 -1
- package/docs/source/lib/goog/labs/testing/stringmatcher.js.src.html +0 -1
- package/docs/source/lib/goog/labs/useragent/browser.js.src.html +0 -1
- package/docs/source/lib/goog/labs/useragent/engine.js.src.html +0 -1
- package/docs/source/lib/goog/labs/useragent/platform.js.src.html +0 -1
- package/docs/source/lib/goog/labs/useragent/util.js.src.html +0 -1
- package/docs/source/lib/goog/log/log.js.src.html +0 -1
- package/docs/source/lib/goog/math/box.js.src.html +0 -1
- package/docs/source/lib/goog/math/coordinate.js.src.html +0 -1
- package/docs/source/lib/goog/math/math.js.src.html +0 -1
- package/docs/source/lib/goog/math/rect.js.src.html +0 -1
- package/docs/source/lib/goog/math/size.js.src.html +0 -1
- package/docs/source/lib/goog/net/wrapperxmlhttpfactory.js.src.html +0 -1
- package/docs/source/lib/goog/net/xhrlike.js.src.html +0 -1
- package/docs/source/lib/goog/net/xmlhttp.js.src.html +0 -1
- package/docs/source/lib/goog/net/xmlhttpfactory.js.src.html +0 -1
- package/docs/source/lib/goog/object/object.js.src.html +0 -1
- package/docs/source/lib/goog/promise/promise.js.src.html +0 -1
- package/docs/source/lib/goog/promise/resolver.js.src.html +0 -1
- package/docs/source/lib/goog/promise/thenable.js.src.html +0 -1
- package/docs/source/lib/goog/reflect/reflect.js.src.html +0 -1
- package/docs/source/lib/goog/string/const.js.src.html +0 -1
- package/docs/source/lib/goog/string/string.js.src.html +0 -1
- package/docs/source/lib/goog/string/typedstring.js.src.html +0 -1
- package/docs/source/lib/goog/structs/collection.js.src.html +0 -1
- package/docs/source/lib/goog/structs/map.js.src.html +0 -1
- package/docs/source/lib/goog/structs/set.js.src.html +0 -1
- package/docs/source/lib/goog/structs/structs.js.src.html +0 -1
- package/docs/source/lib/goog/style/style.js.src.html +0 -1
- package/docs/source/lib/goog/testing/asserts.js.src.html +0 -1
- package/docs/source/lib/goog/testing/events/events.js.src.html +0 -1
- package/docs/source/lib/goog/testing/functionmock.js.src.html +0 -1
- package/docs/source/lib/goog/testing/jsunit.js.src.html +0 -1
- package/docs/source/lib/goog/testing/loosemock.js.src.html +0 -1
- package/docs/source/lib/goog/testing/mock.js.src.html +0 -1
- package/docs/source/lib/goog/testing/mockclock.js.src.html +0 -1
- package/docs/source/lib/goog/testing/mockcontrol.js.src.html +0 -1
- package/docs/source/lib/goog/testing/mockinterface.js.src.html +0 -1
- package/docs/source/lib/goog/testing/mockmatchers.js.src.html +0 -1
- package/docs/source/lib/goog/testing/objectpropertystring.js.src.html +0 -1
- package/docs/source/lib/goog/testing/propertyreplacer.js.src.html +0 -1
- package/docs/source/lib/goog/testing/recordfunction.js.src.html +0 -1
- package/docs/source/lib/goog/testing/stacktrace.js.src.html +0 -1
- package/docs/source/lib/goog/testing/strictmock.js.src.html +0 -1
- package/docs/source/lib/goog/testing/testcase.js.src.html +0 -1
- package/docs/source/lib/goog/testing/testrunner.js.src.html +0 -1
- package/docs/source/lib/goog/uri/uri.js.src.html +0 -1
- package/docs/source/lib/goog/uri/utils.js.src.html +0 -1
- package/docs/source/lib/goog/useragent/product.js.src.html +0 -1
- package/docs/source/lib/goog/useragent/product_isversion.js.src.html +0 -1
- package/docs/source/lib/goog/useragent/useragent.js.src.html +0 -1
- package/docs/source/lib/webdriver/actionsequence.js.src.html +0 -1
- package/docs/source/lib/webdriver/button.js.src.html +0 -1
- package/docs/source/lib/webdriver/capabilities.js.src.html +0 -1
- package/docs/source/lib/webdriver/command.js.src.html +0 -1
- package/docs/source/lib/webdriver/events.js.src.html +0 -1
- package/docs/source/lib/webdriver/http/http.js.src.html +0 -1
- package/docs/source/lib/webdriver/key.js.src.html +0 -1
- package/docs/source/lib/webdriver/locators.js.src.html +0 -1
- package/docs/source/lib/webdriver/logging.js.src.html +0 -1
- package/docs/source/lib/webdriver/promise.js.src.html +0 -1
- package/docs/source/lib/webdriver/serializable.js.src.html +0 -1
- package/docs/source/lib/webdriver/session.js.src.html +0 -1
- package/docs/source/lib/webdriver/stacktrace.js.src.html +0 -1
- package/docs/source/lib/webdriver/testing/asserts.js.src.html +0 -1
- package/docs/source/lib/webdriver/touchsequence.js.src.html +0 -1
- package/docs/source/lib/webdriver/until.js.src.html +0 -1
- package/docs/source/lib/webdriver/webdriver.js.src.html +0 -1
- package/docs/source/net/index.js.src.html +0 -1
- package/docs/source/net/portprober.js.src.html +0 -1
- package/docs/source/opera.js.src.html +0 -1
- package/docs/source/phantomjs.js.src.html +0 -1
- package/docs/source/proxy.js.src.html +0 -1
- package/docs/source/remote/index.js.src.html +0 -1
- package/docs/source/safari.js.src.html +0 -1
- package/docs/source/testing/assert.js.src.html +0 -1
- package/docs/source/testing/index.js.src.html +0 -1
- package/docs/types.js +0 -1
- package/lib/atoms/error.js +0 -202
- package/lib/atoms/json.js +0 -80
- package/lib/atoms/response.js +0 -110
- package/lib/atoms/userAgent.js +0 -257
- package/lib/goog/LICENSE +0 -176
- package/lib/goog/array/array.js +0 -1654
- package/lib/goog/asserts/asserts.js +0 -365
- package/lib/goog/async/freelist.js +0 -88
- package/lib/goog/async/nexttick.js +0 -241
- package/lib/goog/async/run.js +0 -133
- package/lib/goog/async/workqueue.js +0 -139
- package/lib/goog/base.js +0 -2548
- package/lib/goog/debug/debug.js +0 -653
- package/lib/goog/debug/entrypointregistry.js +0 -158
- package/lib/goog/debug/error.js +0 -63
- package/lib/goog/debug/logbuffer.js +0 -148
- package/lib/goog/debug/logger.js +0 -873
- package/lib/goog/debug/logrecord.js +0 -242
- package/lib/goog/deps.js +0 -151
- package/lib/goog/disposable/disposable.js +0 -307
- package/lib/goog/disposable/idisposable.js +0 -45
- package/lib/goog/dom/browserfeature.js +0 -72
- package/lib/goog/dom/dom.js +0 -2991
- package/lib/goog/dom/nodetype.js +0 -48
- package/lib/goog/dom/safe.js +0 -347
- package/lib/goog/dom/tagname.js +0 -160
- package/lib/goog/dom/tags.js +0 -41
- package/lib/goog/dom/vendor.js +0 -96
- package/lib/goog/events/browserevent.js +0 -400
- package/lib/goog/events/browserfeature.js +0 -85
- package/lib/goog/events/event.js +0 -143
- package/lib/goog/events/eventid.js +0 -47
- package/lib/goog/events/events.js +0 -984
- package/lib/goog/events/eventtarget.js +0 -394
- package/lib/goog/events/eventtype.js +0 -237
- package/lib/goog/events/keycodes.js +0 -427
- package/lib/goog/events/listenable.js +0 -335
- package/lib/goog/events/listener.js +0 -131
- package/lib/goog/events/listenermap.js +0 -308
- package/lib/goog/fs/url.js +0 -109
- package/lib/goog/functions/functions.js +0 -442
- package/lib/goog/html/safehtml.js +0 -757
- package/lib/goog/html/safescript.js +0 -234
- package/lib/goog/html/safestyle.js +0 -442
- package/lib/goog/html/safestylesheet.js +0 -276
- package/lib/goog/html/safeurl.js +0 -398
- package/lib/goog/html/trustedresourceurl.js +0 -224
- package/lib/goog/html/uncheckedconversions.js +0 -232
- package/lib/goog/i18n/bidi.js +0 -908
- package/lib/goog/iter/iter.js +0 -1302
- package/lib/goog/json/json.js +0 -363
- package/lib/goog/labs/testing/assertthat.js +0 -58
- package/lib/goog/labs/testing/logicmatcher.js +0 -212
- package/lib/goog/labs/testing/matcher.js +0 -80
- package/lib/goog/labs/testing/numbermatcher.js +0 -346
- package/lib/goog/labs/testing/objectmatcher.js +0 -317
- package/lib/goog/labs/testing/stringmatcher.js +0 -415
- package/lib/goog/labs/useragent/browser.js +0 -341
- package/lib/goog/labs/useragent/engine.js +0 -160
- package/lib/goog/labs/useragent/platform.js +0 -160
- package/lib/goog/labs/useragent/util.js +0 -148
- package/lib/goog/log/log.js +0 -197
- package/lib/goog/math/box.js +0 -398
- package/lib/goog/math/coordinate.js +0 -268
- package/lib/goog/math/math.js +0 -451
- package/lib/goog/math/rect.js +0 -476
- package/lib/goog/math/size.js +0 -227
- package/lib/goog/net/wrapperxmlhttpfactory.js +0 -71
- package/lib/goog/net/xhrlike.js +0 -124
- package/lib/goog/net/xmlhttp.js +0 -246
- package/lib/goog/net/xmlhttpfactory.js +0 -67
- package/lib/goog/object/object.js +0 -686
- package/lib/goog/promise/promise.js +0 -1350
- package/lib/goog/promise/resolver.js +0 -48
- package/lib/goog/promise/thenable.js +0 -126
- package/lib/goog/reflect/reflect.js +0 -77
- package/lib/goog/string/const.js +0 -182
- package/lib/goog/string/string.js +0 -1599
- package/lib/goog/string/typedstring.js +0 -48
- package/lib/goog/structs/collection.js +0 -56
- package/lib/goog/structs/map.js +0 -457
- package/lib/goog/structs/set.js +0 -279
- package/lib/goog/structs/structs.js +0 -354
- package/lib/goog/style/style.js +0 -2037
- package/lib/goog/testing/asserts.js +0 -1278
- package/lib/goog/testing/events/events.js +0 -767
- package/lib/goog/testing/functionmock.js +0 -175
- package/lib/goog/testing/jsunit.js +0 -162
- package/lib/goog/testing/loosemock.js +0 -242
- package/lib/goog/testing/mock.js +0 -645
- package/lib/goog/testing/mockclock.js +0 -606
- package/lib/goog/testing/mockcontrol.js +0 -220
- package/lib/goog/testing/mockinterface.js +0 -45
- package/lib/goog/testing/mockmatchers.js +0 -400
- package/lib/goog/testing/objectpropertystring.js +0 -68
- package/lib/goog/testing/propertyreplacer.js +0 -262
- package/lib/goog/testing/recordfunction.js +0 -215
- package/lib/goog/testing/stacktrace.js +0 -594
- package/lib/goog/testing/strictmock.js +0 -130
- package/lib/goog/testing/testcase.js +0 -1629
- package/lib/goog/testing/testrunner.js +0 -440
- package/lib/goog/uri/uri.js +0 -1524
- package/lib/goog/uri/utils.js +0 -1064
- package/lib/goog/useragent/product.js +0 -183
- package/lib/goog/useragent/product_isversion.js +0 -144
- package/lib/goog/useragent/useragent.js +0 -572
- package/lib/webdriver/actionsequence.js +0 -356
- package/lib/webdriver/builder.js +0 -207
- package/lib/webdriver/capabilities.js +0 -412
- package/lib/webdriver/events.js +0 -179
- package/lib/webdriver/firefoxdomexecutor.js +0 -175
- package/lib/webdriver/http/corsclient.js +0 -133
- package/lib/webdriver/http/http.js +0 -525
- package/lib/webdriver/http/xhrclient.js +0 -67
- package/lib/webdriver/locators.js +0 -257
- package/lib/webdriver/logging.js +0 -347
- package/lib/webdriver/session.js +0 -74
- package/lib/webdriver/stacktrace.js +0 -619
- package/lib/webdriver/test/builder_test.js +0 -53
- package/lib/webdriver/test/capabilities_test.js +0 -72
- package/lib/webdriver/test/events_test.js +0 -203
- package/lib/webdriver/test/http/corsclient_test.js +0 -151
- package/lib/webdriver/test/http/http_test.js +0 -428
- package/lib/webdriver/test/http/xhrclient_test.js +0 -196
- package/lib/webdriver/test/locators_test.js +0 -59
- package/lib/webdriver/test/logging_test.js +0 -85
- package/lib/webdriver/test/promise_error_test.js +0 -892
- package/lib/webdriver/test/promise_flow_test.js +0 -2365
- package/lib/webdriver/test/promise_generator_test.js +0 -323
- package/lib/webdriver/test/promise_test.js +0 -2012
- package/lib/webdriver/test/stacktrace_test.js +0 -480
- package/lib/webdriver/test/test_bootstrap.js +0 -67
- package/lib/webdriver/test/testing/asserts_test.js +0 -117
- package/lib/webdriver/test/testing/client_test.js +0 -88
- package/lib/webdriver/test/testing/testcase_test.js +0 -229
- package/lib/webdriver/test/testutil.js +0 -209
- package/lib/webdriver/test/testutil_test.js +0 -104
- package/lib/webdriver/test/until_test.js +0 -411
- package/lib/webdriver/test/webdriver_generator_test.js +0 -92
- package/lib/webdriver/test/webdriver_test.js +0 -2369
- package/lib/webdriver/testing/asserts.js +0 -487
- package/lib/webdriver/testing/client.js +0 -179
- package/lib/webdriver/testing/jsunit.js +0 -363
- package/lib/webdriver/testing/testcase.js +0 -168
- package/lib/webdriver/testing/window.js +0 -244
- package/lib/webdriver/touchsequence.js +0 -248
- package/lib/webdriver/until.js +0 -412
- package/lib/webdriver/webdriver.js +0 -2511
- package/test/_base_test.js +0 -129
|
@@ -1,1278 +0,0 @@
|
|
|
1
|
-
// Copyright 2010 The Closure Library Authors. All Rights Reserved.
|
|
2
|
-
//
|
|
3
|
-
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
-
// you may not use this file except in compliance with the License.
|
|
5
|
-
// You may obtain a copy of the License at
|
|
6
|
-
//
|
|
7
|
-
// http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
-
//
|
|
9
|
-
// Unless required by applicable law or agreed to in writing, software
|
|
10
|
-
// distributed under the License is distributed on an "AS-IS" BASIS,
|
|
11
|
-
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
-
// See the License for the specific language governing permissions and
|
|
13
|
-
// limitations under the License.
|
|
14
|
-
goog.provide('goog.testing.JsUnitException');
|
|
15
|
-
goog.provide('goog.testing.asserts');
|
|
16
|
-
goog.provide('goog.testing.asserts.ArrayLike');
|
|
17
|
-
|
|
18
|
-
goog.require('goog.testing.stacktrace');
|
|
19
|
-
|
|
20
|
-
// TODO(user): Copied from JsUnit with some small modifications, we should
|
|
21
|
-
// reimplement the asserters.
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* @typedef {Array|NodeList|Arguments|{length: number}}
|
|
26
|
-
*/
|
|
27
|
-
goog.testing.asserts.ArrayLike;
|
|
28
|
-
|
|
29
|
-
var DOUBLE_EQUALITY_PREDICATE = function(var1, var2) {
|
|
30
|
-
return var1 == var2;
|
|
31
|
-
};
|
|
32
|
-
var JSUNIT_UNDEFINED_VALUE = void 0;
|
|
33
|
-
var TO_STRING_EQUALITY_PREDICATE = function(var1, var2) {
|
|
34
|
-
return var1.toString() === var2.toString();
|
|
35
|
-
};
|
|
36
|
-
|
|
37
|
-
/** @typedef {function(?, ?):boolean} */
|
|
38
|
-
var PredicateFunctionType;
|
|
39
|
-
|
|
40
|
-
/**
|
|
41
|
-
* @const {{
|
|
42
|
-
* String : PredicateFunctionType,
|
|
43
|
-
* Number : PredicateFunctionType,
|
|
44
|
-
* Boolean : PredicateFunctionType,
|
|
45
|
-
* Date : PredicateFunctionType,
|
|
46
|
-
* RegExp : PredicateFunctionType,
|
|
47
|
-
* Function : PredicateFunctionType
|
|
48
|
-
* }}
|
|
49
|
-
*/
|
|
50
|
-
var PRIMITIVE_EQUALITY_PREDICATES = {
|
|
51
|
-
'String': DOUBLE_EQUALITY_PREDICATE,
|
|
52
|
-
'Number': DOUBLE_EQUALITY_PREDICATE,
|
|
53
|
-
'Boolean': DOUBLE_EQUALITY_PREDICATE,
|
|
54
|
-
'Date': function(date1, date2) {
|
|
55
|
-
return date1.getTime() == date2.getTime();
|
|
56
|
-
},
|
|
57
|
-
'RegExp': TO_STRING_EQUALITY_PREDICATE,
|
|
58
|
-
'Function': TO_STRING_EQUALITY_PREDICATE
|
|
59
|
-
};
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
/**
|
|
63
|
-
* Compares equality of two numbers, allowing them to differ up to a given
|
|
64
|
-
* tolerance.
|
|
65
|
-
* @param {number} var1 A number.
|
|
66
|
-
* @param {number} var2 A number.
|
|
67
|
-
* @param {number} tolerance the maximum allowed difference.
|
|
68
|
-
* @return {boolean} Whether the two variables are sufficiently close.
|
|
69
|
-
* @private
|
|
70
|
-
*/
|
|
71
|
-
goog.testing.asserts.numberRoughEqualityPredicate_ = function(
|
|
72
|
-
var1, var2, tolerance) {
|
|
73
|
-
return Math.abs(var1 - var2) <= tolerance;
|
|
74
|
-
};
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
/**
|
|
78
|
-
* @type {Object<string, function(*, *, number): boolean>}
|
|
79
|
-
* @private
|
|
80
|
-
*/
|
|
81
|
-
goog.testing.asserts.primitiveRoughEqualityPredicates_ = {
|
|
82
|
-
'Number': goog.testing.asserts.numberRoughEqualityPredicate_
|
|
83
|
-
};
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
var _trueTypeOf = function(something) {
|
|
87
|
-
var result = typeof something;
|
|
88
|
-
try {
|
|
89
|
-
switch (result) {
|
|
90
|
-
case 'string':
|
|
91
|
-
break;
|
|
92
|
-
case 'boolean':
|
|
93
|
-
break;
|
|
94
|
-
case 'number':
|
|
95
|
-
break;
|
|
96
|
-
case 'object':
|
|
97
|
-
if (something == null) {
|
|
98
|
-
result = 'null';
|
|
99
|
-
break;
|
|
100
|
-
}
|
|
101
|
-
case 'function':
|
|
102
|
-
switch (something.constructor) {
|
|
103
|
-
case new String('').constructor:
|
|
104
|
-
result = 'String';
|
|
105
|
-
break;
|
|
106
|
-
case new Boolean(true).constructor:
|
|
107
|
-
result = 'Boolean';
|
|
108
|
-
break;
|
|
109
|
-
case new Number(0).constructor:
|
|
110
|
-
result = 'Number';
|
|
111
|
-
break;
|
|
112
|
-
case new Array().constructor:
|
|
113
|
-
result = 'Array';
|
|
114
|
-
break;
|
|
115
|
-
case new RegExp().constructor:
|
|
116
|
-
result = 'RegExp';
|
|
117
|
-
break;
|
|
118
|
-
case new Date().constructor:
|
|
119
|
-
result = 'Date';
|
|
120
|
-
break;
|
|
121
|
-
case Function:
|
|
122
|
-
result = 'Function';
|
|
123
|
-
break;
|
|
124
|
-
default:
|
|
125
|
-
var m = something.constructor.toString().match(
|
|
126
|
-
/function\s*([^( ]+)\(/);
|
|
127
|
-
if (m) {
|
|
128
|
-
result = m[1];
|
|
129
|
-
} else {
|
|
130
|
-
break;
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
break;
|
|
134
|
-
}
|
|
135
|
-
} catch (e) {
|
|
136
|
-
|
|
137
|
-
} finally {
|
|
138
|
-
result = result.substr(0, 1).toUpperCase() + result.substr(1);
|
|
139
|
-
}
|
|
140
|
-
return result;
|
|
141
|
-
};
|
|
142
|
-
|
|
143
|
-
var _displayStringForValue = function(aVar) {
|
|
144
|
-
var result;
|
|
145
|
-
try {
|
|
146
|
-
result = '<' + String(aVar) + '>';
|
|
147
|
-
} catch (ex) {
|
|
148
|
-
result = '<toString failed: ' + ex.message + '>';
|
|
149
|
-
// toString does not work on this object :-(
|
|
150
|
-
}
|
|
151
|
-
if (!(aVar === null || aVar === JSUNIT_UNDEFINED_VALUE)) {
|
|
152
|
-
result += ' (' + _trueTypeOf(aVar) + ')';
|
|
153
|
-
}
|
|
154
|
-
return result;
|
|
155
|
-
};
|
|
156
|
-
|
|
157
|
-
var fail = function(failureMessage) {
|
|
158
|
-
goog.testing.asserts.raiseException('Call to fail()', failureMessage);
|
|
159
|
-
};
|
|
160
|
-
|
|
161
|
-
var argumentsIncludeComments = function(expectedNumberOfNonCommentArgs, args) {
|
|
162
|
-
return args.length == expectedNumberOfNonCommentArgs + 1;
|
|
163
|
-
};
|
|
164
|
-
|
|
165
|
-
var commentArg = function(expectedNumberOfNonCommentArgs, args) {
|
|
166
|
-
if (argumentsIncludeComments(expectedNumberOfNonCommentArgs, args)) {
|
|
167
|
-
return args[0];
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
return null;
|
|
171
|
-
};
|
|
172
|
-
|
|
173
|
-
var nonCommentArg = function(desiredNonCommentArgIndex,
|
|
174
|
-
expectedNumberOfNonCommentArgs, args) {
|
|
175
|
-
return argumentsIncludeComments(expectedNumberOfNonCommentArgs, args) ?
|
|
176
|
-
args[desiredNonCommentArgIndex] :
|
|
177
|
-
args[desiredNonCommentArgIndex - 1];
|
|
178
|
-
};
|
|
179
|
-
|
|
180
|
-
var _validateArguments = function(expectedNumberOfNonCommentArgs, args) {
|
|
181
|
-
var valid = args.length == expectedNumberOfNonCommentArgs ||
|
|
182
|
-
args.length == expectedNumberOfNonCommentArgs + 1 &&
|
|
183
|
-
goog.isString(args[0]);
|
|
184
|
-
_assert(null, valid, 'Incorrect arguments passed to assert function');
|
|
185
|
-
};
|
|
186
|
-
|
|
187
|
-
var _assert = function(comment, booleanValue, failureMessage) {
|
|
188
|
-
if (!booleanValue) {
|
|
189
|
-
goog.testing.asserts.raiseException(comment, failureMessage);
|
|
190
|
-
}
|
|
191
|
-
};
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
/**
|
|
195
|
-
* @param {*} expected The expected value.
|
|
196
|
-
* @param {*} actual The actual value.
|
|
197
|
-
* @return {string} A failure message of the values don't match.
|
|
198
|
-
* @private
|
|
199
|
-
*/
|
|
200
|
-
goog.testing.asserts.getDefaultErrorMsg_ = function(expected, actual) {
|
|
201
|
-
var msg = 'Expected ' + _displayStringForValue(expected) + ' but was ' +
|
|
202
|
-
_displayStringForValue(actual);
|
|
203
|
-
if ((typeof expected == 'string') && (typeof actual == 'string')) {
|
|
204
|
-
// Try to find a human-readable difference.
|
|
205
|
-
var limit = Math.min(expected.length, actual.length);
|
|
206
|
-
var commonPrefix = 0;
|
|
207
|
-
while (commonPrefix < limit &&
|
|
208
|
-
expected.charAt(commonPrefix) == actual.charAt(commonPrefix)) {
|
|
209
|
-
commonPrefix++;
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
var commonSuffix = 0;
|
|
213
|
-
while (commonSuffix < limit &&
|
|
214
|
-
expected.charAt(expected.length - commonSuffix - 1) ==
|
|
215
|
-
actual.charAt(actual.length - commonSuffix - 1)) {
|
|
216
|
-
commonSuffix++;
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
if (commonPrefix + commonSuffix > limit) {
|
|
220
|
-
commonSuffix = 0;
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
if (commonPrefix > 2 || commonSuffix > 2) {
|
|
224
|
-
var printString = function(str) {
|
|
225
|
-
var startIndex = Math.max(0, commonPrefix - 2);
|
|
226
|
-
var endIndex = Math.min(str.length, str.length - (commonSuffix - 2));
|
|
227
|
-
return (startIndex > 0 ? '...' : '') +
|
|
228
|
-
str.substring(startIndex, endIndex) +
|
|
229
|
-
(endIndex < str.length ? '...' : '');
|
|
230
|
-
};
|
|
231
|
-
|
|
232
|
-
msg += '\nDifference was at position ' + commonPrefix +
|
|
233
|
-
'. Expected [' + printString(expected) +
|
|
234
|
-
'] vs. actual [' + printString(actual) + ']';
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
return msg;
|
|
238
|
-
};
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
/**
|
|
242
|
-
* @param {*} a The value to assert (1 arg) or debug message (2 args).
|
|
243
|
-
* @param {*=} opt_b The value to assert (2 args only).
|
|
244
|
-
*/
|
|
245
|
-
var assert = function(a, opt_b) {
|
|
246
|
-
_validateArguments(1, arguments);
|
|
247
|
-
var comment = commentArg(1, arguments);
|
|
248
|
-
var booleanValue = nonCommentArg(1, 1, arguments);
|
|
249
|
-
|
|
250
|
-
_assert(comment, goog.isBoolean(booleanValue),
|
|
251
|
-
'Bad argument to assert(boolean)');
|
|
252
|
-
_assert(comment, booleanValue, 'Call to assert(boolean) with false');
|
|
253
|
-
};
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
/**
|
|
257
|
-
* Asserts that the function throws an error.
|
|
258
|
-
*
|
|
259
|
-
* @param {!(string|Function)} a The assertion comment or the function to call.
|
|
260
|
-
* @param {!Function=} opt_b The function to call (if the first argument of
|
|
261
|
-
* {@code assertThrows} was the comment).
|
|
262
|
-
* @return {*} The error thrown by the function.
|
|
263
|
-
* @throws {goog.testing.JsUnitException} If the assertion failed.
|
|
264
|
-
*/
|
|
265
|
-
var assertThrows = function(a, opt_b) {
|
|
266
|
-
_validateArguments(1, arguments);
|
|
267
|
-
var func = nonCommentArg(1, 1, arguments);
|
|
268
|
-
var comment = commentArg(1, arguments);
|
|
269
|
-
_assert(comment, typeof func == 'function',
|
|
270
|
-
'Argument passed to assertThrows is not a function');
|
|
271
|
-
|
|
272
|
-
try {
|
|
273
|
-
func();
|
|
274
|
-
} catch (e) {
|
|
275
|
-
if (e && goog.isString(e['stacktrace']) && goog.isString(e['message'])) {
|
|
276
|
-
// Remove the stack trace appended to the error message by Opera 10.0
|
|
277
|
-
var startIndex = e['message'].length - e['stacktrace'].length;
|
|
278
|
-
if (e['message'].indexOf(e['stacktrace'], startIndex) == startIndex) {
|
|
279
|
-
e['message'] = e['message'].substr(0, startIndex - 14);
|
|
280
|
-
}
|
|
281
|
-
}
|
|
282
|
-
return e;
|
|
283
|
-
}
|
|
284
|
-
goog.testing.asserts.raiseException(comment,
|
|
285
|
-
'No exception thrown from function passed to assertThrows');
|
|
286
|
-
};
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
/**
|
|
290
|
-
* Asserts that the function does not throw an error.
|
|
291
|
-
*
|
|
292
|
-
* @param {!(string|Function)} a The assertion comment or the function to call.
|
|
293
|
-
* @param {!Function=} opt_b The function to call (if the first argument of
|
|
294
|
-
* {@code assertNotThrows} was the comment).
|
|
295
|
-
* @return {*} The return value of the function.
|
|
296
|
-
* @throws {goog.testing.JsUnitException} If the assertion failed.
|
|
297
|
-
*/
|
|
298
|
-
var assertNotThrows = function(a, opt_b) {
|
|
299
|
-
_validateArguments(1, arguments);
|
|
300
|
-
var comment = commentArg(1, arguments);
|
|
301
|
-
var func = nonCommentArg(1, 1, arguments);
|
|
302
|
-
_assert(comment, typeof func == 'function',
|
|
303
|
-
'Argument passed to assertNotThrows is not a function');
|
|
304
|
-
|
|
305
|
-
try {
|
|
306
|
-
return func();
|
|
307
|
-
} catch (e) {
|
|
308
|
-
comment = comment ? (comment + '\n') : '';
|
|
309
|
-
comment += 'A non expected exception was thrown from function passed to ' +
|
|
310
|
-
'assertNotThrows';
|
|
311
|
-
// Some browsers don't have a stack trace so at least have the error
|
|
312
|
-
// description.
|
|
313
|
-
var stackTrace = e['stack'] || e['stacktrace'] || e.toString();
|
|
314
|
-
goog.testing.asserts.raiseException(comment, stackTrace);
|
|
315
|
-
}
|
|
316
|
-
};
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
/**
|
|
320
|
-
* Asserts that the given callback function results in a JsUnitException when
|
|
321
|
-
* called, and that the resulting failure message matches the given expected
|
|
322
|
-
* message.
|
|
323
|
-
* @param {function() : void} callback Function to be run expected to result
|
|
324
|
-
* in a JsUnitException (usually contains a call to an assert).
|
|
325
|
-
* @param {string=} opt_expectedMessage Failure message expected to be given
|
|
326
|
-
* with the exception.
|
|
327
|
-
*/
|
|
328
|
-
var assertThrowsJsUnitException = function(callback, opt_expectedMessage) {
|
|
329
|
-
var failed = false;
|
|
330
|
-
try {
|
|
331
|
-
goog.testing.asserts.callWithoutLogging(callback);
|
|
332
|
-
} catch (ex) {
|
|
333
|
-
if (!ex.isJsUnitException) {
|
|
334
|
-
fail('Expected a JsUnitException');
|
|
335
|
-
}
|
|
336
|
-
if (typeof opt_expectedMessage != 'undefined' &&
|
|
337
|
-
ex.message != opt_expectedMessage) {
|
|
338
|
-
fail('Expected message [' + opt_expectedMessage + '] but got [' +
|
|
339
|
-
ex.message + ']');
|
|
340
|
-
}
|
|
341
|
-
failed = true;
|
|
342
|
-
}
|
|
343
|
-
if (!failed) {
|
|
344
|
-
fail('Expected a failure: ' + opt_expectedMessage);
|
|
345
|
-
}
|
|
346
|
-
};
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
/**
|
|
350
|
-
* @param {*} a The value to assert (1 arg) or debug message (2 args).
|
|
351
|
-
* @param {*=} opt_b The value to assert (2 args only).
|
|
352
|
-
*/
|
|
353
|
-
var assertTrue = function(a, opt_b) {
|
|
354
|
-
_validateArguments(1, arguments);
|
|
355
|
-
var comment = commentArg(1, arguments);
|
|
356
|
-
var booleanValue = nonCommentArg(1, 1, arguments);
|
|
357
|
-
|
|
358
|
-
_assert(comment, goog.isBoolean(booleanValue),
|
|
359
|
-
'Bad argument to assertTrue(boolean)');
|
|
360
|
-
_assert(comment, booleanValue, 'Call to assertTrue(boolean) with false');
|
|
361
|
-
};
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
/**
|
|
365
|
-
* @param {*} a The value to assert (1 arg) or debug message (2 args).
|
|
366
|
-
* @param {*=} opt_b The value to assert (2 args only).
|
|
367
|
-
*/
|
|
368
|
-
var assertFalse = function(a, opt_b) {
|
|
369
|
-
_validateArguments(1, arguments);
|
|
370
|
-
var comment = commentArg(1, arguments);
|
|
371
|
-
var booleanValue = nonCommentArg(1, 1, arguments);
|
|
372
|
-
|
|
373
|
-
_assert(comment, goog.isBoolean(booleanValue),
|
|
374
|
-
'Bad argument to assertFalse(boolean)');
|
|
375
|
-
_assert(comment, !booleanValue, 'Call to assertFalse(boolean) with true');
|
|
376
|
-
};
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
/**
|
|
380
|
-
* @param {*} a The expected value (2 args) or the debug message (3 args).
|
|
381
|
-
* @param {*} b The actual value (2 args) or the expected value (3 args).
|
|
382
|
-
* @param {*=} opt_c The actual value (3 args only).
|
|
383
|
-
*/
|
|
384
|
-
var assertEquals = function(a, b, opt_c) {
|
|
385
|
-
_validateArguments(2, arguments);
|
|
386
|
-
var var1 = nonCommentArg(1, 2, arguments);
|
|
387
|
-
var var2 = nonCommentArg(2, 2, arguments);
|
|
388
|
-
_assert(commentArg(2, arguments), var1 === var2,
|
|
389
|
-
goog.testing.asserts.getDefaultErrorMsg_(var1, var2));
|
|
390
|
-
};
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
/**
|
|
394
|
-
* @param {*} a The expected value (2 args) or the debug message (3 args).
|
|
395
|
-
* @param {*} b The actual value (2 args) or the expected value (3 args).
|
|
396
|
-
* @param {*=} opt_c The actual value (3 args only).
|
|
397
|
-
*/
|
|
398
|
-
var assertNotEquals = function(a, b, opt_c) {
|
|
399
|
-
_validateArguments(2, arguments);
|
|
400
|
-
var var1 = nonCommentArg(1, 2, arguments);
|
|
401
|
-
var var2 = nonCommentArg(2, 2, arguments);
|
|
402
|
-
_assert(commentArg(2, arguments), var1 !== var2,
|
|
403
|
-
'Expected not to be ' + _displayStringForValue(var2));
|
|
404
|
-
};
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
/**
|
|
408
|
-
* @param {*} a The value to assert (1 arg) or debug message (2 args).
|
|
409
|
-
* @param {*=} opt_b The value to assert (2 args only).
|
|
410
|
-
*/
|
|
411
|
-
var assertNull = function(a, opt_b) {
|
|
412
|
-
_validateArguments(1, arguments);
|
|
413
|
-
var aVar = nonCommentArg(1, 1, arguments);
|
|
414
|
-
_assert(commentArg(1, arguments), aVar === null,
|
|
415
|
-
goog.testing.asserts.getDefaultErrorMsg_(null, aVar));
|
|
416
|
-
};
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
/**
|
|
420
|
-
* @param {*} a The value to assert (1 arg) or debug message (2 args).
|
|
421
|
-
* @param {*=} opt_b The value to assert (2 args only).
|
|
422
|
-
*/
|
|
423
|
-
var assertNotNull = function(a, opt_b) {
|
|
424
|
-
_validateArguments(1, arguments);
|
|
425
|
-
var aVar = nonCommentArg(1, 1, arguments);
|
|
426
|
-
_assert(commentArg(1, arguments), aVar !== null,
|
|
427
|
-
'Expected not to be ' + _displayStringForValue(null));
|
|
428
|
-
};
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
/**
|
|
432
|
-
* @param {*} a The value to assert (1 arg) or debug message (2 args).
|
|
433
|
-
* @param {*=} opt_b The value to assert (2 args only).
|
|
434
|
-
*/
|
|
435
|
-
var assertUndefined = function(a, opt_b) {
|
|
436
|
-
_validateArguments(1, arguments);
|
|
437
|
-
var aVar = nonCommentArg(1, 1, arguments);
|
|
438
|
-
_assert(commentArg(1, arguments), aVar === JSUNIT_UNDEFINED_VALUE,
|
|
439
|
-
goog.testing.asserts.getDefaultErrorMsg_(JSUNIT_UNDEFINED_VALUE, aVar));
|
|
440
|
-
};
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
/**
|
|
444
|
-
* @param {*} a The value to assert (1 arg) or debug message (2 args).
|
|
445
|
-
* @param {*=} opt_b The value to assert (2 args only).
|
|
446
|
-
*/
|
|
447
|
-
var assertNotUndefined = function(a, opt_b) {
|
|
448
|
-
_validateArguments(1, arguments);
|
|
449
|
-
var aVar = nonCommentArg(1, 1, arguments);
|
|
450
|
-
_assert(commentArg(1, arguments), aVar !== JSUNIT_UNDEFINED_VALUE,
|
|
451
|
-
'Expected not to be ' + _displayStringForValue(JSUNIT_UNDEFINED_VALUE));
|
|
452
|
-
};
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
/**
|
|
456
|
-
* @param {*} a The value to assert (1 arg) or debug message (2 args).
|
|
457
|
-
* @param {*=} opt_b The value to assert (2 args only).
|
|
458
|
-
*/
|
|
459
|
-
var assertNotNullNorUndefined = function(a, opt_b) {
|
|
460
|
-
_validateArguments(1, arguments);
|
|
461
|
-
assertNotNull.apply(null, arguments);
|
|
462
|
-
assertNotUndefined.apply(null, arguments);
|
|
463
|
-
};
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
/**
|
|
467
|
-
* @param {*} a The value to assert (1 arg) or debug message (2 args).
|
|
468
|
-
* @param {*=} opt_b The value to assert (2 args only).
|
|
469
|
-
*/
|
|
470
|
-
var assertNonEmptyString = function(a, opt_b) {
|
|
471
|
-
_validateArguments(1, arguments);
|
|
472
|
-
var aVar = nonCommentArg(1, 1, arguments);
|
|
473
|
-
_assert(commentArg(1, arguments),
|
|
474
|
-
aVar !== JSUNIT_UNDEFINED_VALUE && aVar !== null &&
|
|
475
|
-
typeof aVar == 'string' && aVar !== '',
|
|
476
|
-
'Expected non-empty string but was ' + _displayStringForValue(aVar));
|
|
477
|
-
};
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
/**
|
|
481
|
-
* @param {*} a The value to assert (1 arg) or debug message (2 args).
|
|
482
|
-
* @param {*=} opt_b The value to assert (2 args only).
|
|
483
|
-
*/
|
|
484
|
-
var assertNaN = function(a, opt_b) {
|
|
485
|
-
_validateArguments(1, arguments);
|
|
486
|
-
var aVar = nonCommentArg(1, 1, arguments);
|
|
487
|
-
_assert(commentArg(1, arguments), isNaN(aVar), 'Expected NaN');
|
|
488
|
-
};
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
/**
|
|
492
|
-
* @param {*} a The value to assert (1 arg) or debug message (2 args).
|
|
493
|
-
* @param {*=} opt_b The value to assert (2 args only).
|
|
494
|
-
*/
|
|
495
|
-
var assertNotNaN = function(a, opt_b) {
|
|
496
|
-
_validateArguments(1, arguments);
|
|
497
|
-
var aVar = nonCommentArg(1, 1, arguments);
|
|
498
|
-
_assert(commentArg(1, arguments), !isNaN(aVar), 'Expected not NaN');
|
|
499
|
-
};
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
/**
|
|
503
|
-
* Runs a function in an environment where test failures are not logged. This is
|
|
504
|
-
* useful for testing test code, where failures can be a normal part of a test.
|
|
505
|
-
* @param {function() : void} fn Function to run without logging failures.
|
|
506
|
-
*/
|
|
507
|
-
goog.testing.asserts.callWithoutLogging = function(fn) {
|
|
508
|
-
var testRunner = goog.global['G_testRunner'];
|
|
509
|
-
var oldLogTestFailure = testRunner['logTestFailure'];
|
|
510
|
-
try {
|
|
511
|
-
// Any failures in the callback shouldn't be recorded.
|
|
512
|
-
testRunner['logTestFailure'] = undefined;
|
|
513
|
-
fn();
|
|
514
|
-
} finally {
|
|
515
|
-
testRunner['logTestFailure'] = oldLogTestFailure;
|
|
516
|
-
}
|
|
517
|
-
};
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
/**
|
|
521
|
-
* The return value of the equality predicate passed to findDifferences below,
|
|
522
|
-
* in cases where the predicate can't test the input variables for equality.
|
|
523
|
-
* @type {?string}
|
|
524
|
-
*/
|
|
525
|
-
goog.testing.asserts.EQUALITY_PREDICATE_CANT_PROCESS = null;
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
/**
|
|
529
|
-
* The return value of the equality predicate passed to findDifferences below,
|
|
530
|
-
* in cases where the input vriables are equal.
|
|
531
|
-
* @type {?string}
|
|
532
|
-
*/
|
|
533
|
-
goog.testing.asserts.EQUALITY_PREDICATE_VARS_ARE_EQUAL = '';
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
/**
|
|
537
|
-
* Determines if two items of any type match, and formulates an error message
|
|
538
|
-
* if not.
|
|
539
|
-
* @param {*} expected Expected argument to match.
|
|
540
|
-
* @param {*} actual Argument as a result of performing the test.
|
|
541
|
-
* @param {(function(string, *, *): ?string)=} opt_equalityPredicate An optional
|
|
542
|
-
* function that can be used to check equality of variables. It accepts 3
|
|
543
|
-
* arguments: type-of-variables, var1, var2 (in that order) and returns an
|
|
544
|
-
* error message if the variables are not equal,
|
|
545
|
-
* goog.testing.asserts.EQUALITY_PREDICATE_VARS_ARE_EQUAL if the variables
|
|
546
|
-
* are equal, or
|
|
547
|
-
* goog.testing.asserts.EQUALITY_PREDICATE_CANT_PROCESS if the predicate
|
|
548
|
-
* couldn't check the input variables. The function will be called only if
|
|
549
|
-
* the types of var1 and var2 are identical.
|
|
550
|
-
* @return {?string} Null on success, error message on failure.
|
|
551
|
-
*/
|
|
552
|
-
goog.testing.asserts.findDifferences = function(expected, actual,
|
|
553
|
-
opt_equalityPredicate) {
|
|
554
|
-
var failures = [];
|
|
555
|
-
var seen1 = [];
|
|
556
|
-
var seen2 = [];
|
|
557
|
-
|
|
558
|
-
// To avoid infinite recursion when the two parameters are self-referential
|
|
559
|
-
// along the same path of properties, keep track of the object pairs already
|
|
560
|
-
// seen in this call subtree, and abort when a cycle is detected.
|
|
561
|
-
function innerAssertWithCycleCheck(var1, var2, path) {
|
|
562
|
-
// This is used for testing, so we can afford to be slow (but more
|
|
563
|
-
// accurate). So we just check whether var1 is in seen1. If we
|
|
564
|
-
// found var1 in index i, we simply need to check whether var2 is
|
|
565
|
-
// in seen2[i]. If it is, we do not recurse to check var1/var2. If
|
|
566
|
-
// it isn't, we know that the structures of the two objects must be
|
|
567
|
-
// different.
|
|
568
|
-
//
|
|
569
|
-
// This is based on the fact that values at index i in seen1 and
|
|
570
|
-
// seen2 will be checked for equality eventually (when
|
|
571
|
-
// innerAssertImplementation(seen1[i], seen2[i], path) finishes).
|
|
572
|
-
for (var i = 0; i < seen1.length; ++i) {
|
|
573
|
-
var match1 = seen1[i] === var1;
|
|
574
|
-
var match2 = seen2[i] === var2;
|
|
575
|
-
if (match1 || match2) {
|
|
576
|
-
if (!match1 || !match2) {
|
|
577
|
-
// Asymmetric cycles, so the objects have different structure.
|
|
578
|
-
failures.push('Asymmetric cycle detected at ' + path);
|
|
579
|
-
}
|
|
580
|
-
return;
|
|
581
|
-
}
|
|
582
|
-
}
|
|
583
|
-
|
|
584
|
-
seen1.push(var1);
|
|
585
|
-
seen2.push(var2);
|
|
586
|
-
innerAssertImplementation(var1, var2, path);
|
|
587
|
-
seen1.pop();
|
|
588
|
-
seen2.pop();
|
|
589
|
-
}
|
|
590
|
-
|
|
591
|
-
var equalityPredicate = opt_equalityPredicate || function(type, var1, var2) {
|
|
592
|
-
var typedPredicate = PRIMITIVE_EQUALITY_PREDICATES[type];
|
|
593
|
-
if (!typedPredicate) {
|
|
594
|
-
return goog.testing.asserts.EQUALITY_PREDICATE_CANT_PROCESS;
|
|
595
|
-
}
|
|
596
|
-
var equal = typedPredicate(var1, var2);
|
|
597
|
-
return equal ? goog.testing.asserts.EQUALITY_PREDICATE_VARS_ARE_EQUAL :
|
|
598
|
-
goog.testing.asserts.getDefaultErrorMsg_(var1, var2);
|
|
599
|
-
};
|
|
600
|
-
|
|
601
|
-
/**
|
|
602
|
-
* @param {*} var1 An item in the expected object.
|
|
603
|
-
* @param {*} var2 The corresponding item in the actual object.
|
|
604
|
-
* @param {string} path Their path in the objects.
|
|
605
|
-
* @suppress {missingProperties} The map_ property is unknown to the compiler
|
|
606
|
-
* unless goog.structs.Map is loaded.
|
|
607
|
-
*/
|
|
608
|
-
function innerAssertImplementation(var1, var2, path) {
|
|
609
|
-
if (var1 === var2) {
|
|
610
|
-
return;
|
|
611
|
-
}
|
|
612
|
-
|
|
613
|
-
var typeOfVar1 = _trueTypeOf(var1);
|
|
614
|
-
var typeOfVar2 = _trueTypeOf(var2);
|
|
615
|
-
|
|
616
|
-
if (typeOfVar1 == typeOfVar2) {
|
|
617
|
-
var isArray = typeOfVar1 == 'Array';
|
|
618
|
-
var errorMessage = equalityPredicate(typeOfVar1, var1, var2);
|
|
619
|
-
if (errorMessage !=
|
|
620
|
-
goog.testing.asserts.EQUALITY_PREDICATE_CANT_PROCESS) {
|
|
621
|
-
if (errorMessage !=
|
|
622
|
-
goog.testing.asserts.EQUALITY_PREDICATE_VARS_ARE_EQUAL) {
|
|
623
|
-
failures.push(path + ': ' + errorMessage);
|
|
624
|
-
}
|
|
625
|
-
} else if (isArray && var1.length != var2.length) {
|
|
626
|
-
failures.push(path + ': Expected ' + var1.length + '-element array ' +
|
|
627
|
-
'but got a ' + var2.length + '-element array');
|
|
628
|
-
} else {
|
|
629
|
-
var childPath = path + (isArray ? '[%s]' : (path ? '.%s' : '%s'));
|
|
630
|
-
|
|
631
|
-
// if an object has an __iterator__ property, we have no way of
|
|
632
|
-
// actually inspecting its raw properties, and JS 1.7 doesn't
|
|
633
|
-
// overload [] to make it possible for someone to generically
|
|
634
|
-
// use what the iterator returns to compare the object-managed
|
|
635
|
-
// properties. This gets us into deep poo with things like
|
|
636
|
-
// goog.structs.Map, at least on systems that support iteration.
|
|
637
|
-
if (!var1['__iterator__']) {
|
|
638
|
-
for (var prop in var1) {
|
|
639
|
-
if (isArray && goog.testing.asserts.isArrayIndexProp_(prop)) {
|
|
640
|
-
// Skip array indices for now. We'll handle them later.
|
|
641
|
-
continue;
|
|
642
|
-
}
|
|
643
|
-
|
|
644
|
-
if (prop in var2) {
|
|
645
|
-
innerAssertWithCycleCheck(var1[prop], var2[prop],
|
|
646
|
-
childPath.replace('%s', prop));
|
|
647
|
-
} else {
|
|
648
|
-
failures.push('property ' + prop +
|
|
649
|
-
' not present in actual ' + (path || typeOfVar2));
|
|
650
|
-
}
|
|
651
|
-
}
|
|
652
|
-
// make sure there aren't properties in var2 that are missing
|
|
653
|
-
// from var1. if there are, then by definition they don't
|
|
654
|
-
// match.
|
|
655
|
-
for (var prop in var2) {
|
|
656
|
-
if (isArray && goog.testing.asserts.isArrayIndexProp_(prop)) {
|
|
657
|
-
// Skip array indices for now. We'll handle them later.
|
|
658
|
-
continue;
|
|
659
|
-
}
|
|
660
|
-
|
|
661
|
-
if (!(prop in var1)) {
|
|
662
|
-
failures.push('property ' + prop +
|
|
663
|
-
' not present in expected ' +
|
|
664
|
-
(path || typeOfVar1));
|
|
665
|
-
}
|
|
666
|
-
}
|
|
667
|
-
|
|
668
|
-
// Handle array indices by iterating from 0 to arr.length.
|
|
669
|
-
//
|
|
670
|
-
// Although all browsers allow holes in arrays, browsers
|
|
671
|
-
// are inconsistent in what they consider a hole. For example,
|
|
672
|
-
// "[0,undefined,2]" has a hole on IE but not on Firefox.
|
|
673
|
-
//
|
|
674
|
-
// Because our style guide bans for...in iteration over arrays,
|
|
675
|
-
// we assume that most users don't care about holes in arrays,
|
|
676
|
-
// and that it is ok to say that a hole is equivalent to a slot
|
|
677
|
-
// populated with 'undefined'.
|
|
678
|
-
if (isArray) {
|
|
679
|
-
for (prop = 0; prop < var1.length; prop++) {
|
|
680
|
-
innerAssertWithCycleCheck(var1[prop], var2[prop],
|
|
681
|
-
childPath.replace('%s', String(prop)));
|
|
682
|
-
}
|
|
683
|
-
}
|
|
684
|
-
} else {
|
|
685
|
-
// special-case for closure objects that have iterators
|
|
686
|
-
if (goog.isFunction(var1.equals)) {
|
|
687
|
-
// use the object's own equals function, assuming it accepts an
|
|
688
|
-
// object and returns a boolean
|
|
689
|
-
if (!var1.equals(var2)) {
|
|
690
|
-
failures.push('equals() returned false for ' +
|
|
691
|
-
(path || typeOfVar1));
|
|
692
|
-
}
|
|
693
|
-
} else if (var1.map_) {
|
|
694
|
-
// assume goog.structs.Map or goog.structs.Set, where comparing
|
|
695
|
-
// their private map_ field is sufficient
|
|
696
|
-
innerAssertWithCycleCheck(var1.map_, var2.map_,
|
|
697
|
-
childPath.replace('%s', 'map_'));
|
|
698
|
-
} else {
|
|
699
|
-
// else die, so user knows we can't do anything
|
|
700
|
-
failures.push('unable to check ' + (path || typeOfVar1) +
|
|
701
|
-
' for equality: it has an iterator we do not ' +
|
|
702
|
-
'know how to handle. please add an equals method');
|
|
703
|
-
}
|
|
704
|
-
}
|
|
705
|
-
}
|
|
706
|
-
} else {
|
|
707
|
-
failures.push(path + ' ' +
|
|
708
|
-
goog.testing.asserts.getDefaultErrorMsg_(var1, var2));
|
|
709
|
-
}
|
|
710
|
-
}
|
|
711
|
-
|
|
712
|
-
innerAssertWithCycleCheck(expected, actual, '');
|
|
713
|
-
return failures.length == 0 ? null :
|
|
714
|
-
goog.testing.asserts.getDefaultErrorMsg_(expected, actual) +
|
|
715
|
-
'\n ' + failures.join('\n ');
|
|
716
|
-
};
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
/**
|
|
720
|
-
* Notes:
|
|
721
|
-
* Object equality has some nasty browser quirks, and this implementation is
|
|
722
|
-
* not 100% correct. For example,
|
|
723
|
-
*
|
|
724
|
-
* <code>
|
|
725
|
-
* var a = [0, 1, 2];
|
|
726
|
-
* var b = [0, 1, 2];
|
|
727
|
-
* delete a[1];
|
|
728
|
-
* b[1] = undefined;
|
|
729
|
-
* assertObjectEquals(a, b); // should fail, but currently passes
|
|
730
|
-
* </code>
|
|
731
|
-
*
|
|
732
|
-
* See asserts_test.html for more interesting edge cases.
|
|
733
|
-
*
|
|
734
|
-
* The first comparison object provided is the expected value, the second is
|
|
735
|
-
* the actual.
|
|
736
|
-
*
|
|
737
|
-
* @param {*} a Assertion message or comparison object.
|
|
738
|
-
* @param {*} b Comparison object.
|
|
739
|
-
* @param {*=} opt_c Comparison object, if an assertion message was provided.
|
|
740
|
-
*/
|
|
741
|
-
var assertObjectEquals = function(a, b, opt_c) {
|
|
742
|
-
_validateArguments(2, arguments);
|
|
743
|
-
var v1 = nonCommentArg(1, 2, arguments);
|
|
744
|
-
var v2 = nonCommentArg(2, 2, arguments);
|
|
745
|
-
var failureMessage = commentArg(2, arguments) ? commentArg(2, arguments) : '';
|
|
746
|
-
var differences = goog.testing.asserts.findDifferences(v1, v2);
|
|
747
|
-
|
|
748
|
-
_assert(failureMessage, !differences, differences);
|
|
749
|
-
};
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
/**
|
|
753
|
-
* Similar to assertObjectEquals above, but accepts a tolerance margin.
|
|
754
|
-
*
|
|
755
|
-
* @param {*} a Assertion message or comparison object.
|
|
756
|
-
* @param {*} b Comparison object.
|
|
757
|
-
* @param {*} c Comparison object or tolerance.
|
|
758
|
-
* @param {*=} opt_d Tolerance, if an assertion message was provided.
|
|
759
|
-
*/
|
|
760
|
-
var assertObjectRoughlyEquals = function(a, b, c, opt_d) {
|
|
761
|
-
_validateArguments(3, arguments);
|
|
762
|
-
var v1 = nonCommentArg(1, 3, arguments);
|
|
763
|
-
var v2 = nonCommentArg(2, 3, arguments);
|
|
764
|
-
var tolerance = nonCommentArg(3, 3, arguments);
|
|
765
|
-
var failureMessage = commentArg(3, arguments) ? commentArg(3, arguments) : '';
|
|
766
|
-
var equalityPredicate = function(type, var1, var2) {
|
|
767
|
-
var typedPredicate =
|
|
768
|
-
goog.testing.asserts.primitiveRoughEqualityPredicates_[type];
|
|
769
|
-
if (!typedPredicate) {
|
|
770
|
-
return goog.testing.asserts.EQUALITY_PREDICATE_CANT_PROCESS;
|
|
771
|
-
}
|
|
772
|
-
var equal = typedPredicate(var1, var2, tolerance);
|
|
773
|
-
return equal ? goog.testing.asserts.EQUALITY_PREDICATE_VARS_ARE_EQUAL :
|
|
774
|
-
goog.testing.asserts.getDefaultErrorMsg_(var1, var2) +
|
|
775
|
-
' which was more than ' + tolerance + ' away';
|
|
776
|
-
};
|
|
777
|
-
var differences = goog.testing.asserts.findDifferences(
|
|
778
|
-
v1, v2, equalityPredicate);
|
|
779
|
-
|
|
780
|
-
_assert(failureMessage, !differences, differences);
|
|
781
|
-
};
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
/**
|
|
785
|
-
* Compares two arbitrary objects for non-equalness.
|
|
786
|
-
*
|
|
787
|
-
* All the same caveats as for assertObjectEquals apply here:
|
|
788
|
-
* Undefined values may be confused for missing values, or vice versa.
|
|
789
|
-
*
|
|
790
|
-
* @param {*} a Assertion message or comparison object.
|
|
791
|
-
* @param {*} b Comparison object.
|
|
792
|
-
* @param {*=} opt_c Comparison object, if an assertion message was provided.
|
|
793
|
-
*/
|
|
794
|
-
var assertObjectNotEquals = function(a, b, opt_c) {
|
|
795
|
-
_validateArguments(2, arguments);
|
|
796
|
-
var v1 = nonCommentArg(1, 2, arguments);
|
|
797
|
-
var v2 = nonCommentArg(2, 2, arguments);
|
|
798
|
-
var failureMessage = commentArg(2, arguments) ? commentArg(2, arguments) : '';
|
|
799
|
-
var differences = goog.testing.asserts.findDifferences(v1, v2);
|
|
800
|
-
|
|
801
|
-
_assert(failureMessage, differences, 'Objects should not be equal');
|
|
802
|
-
};
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
/**
|
|
806
|
-
* Compares two arrays ignoring negative indexes and extra properties on the
|
|
807
|
-
* array objects. Use case: Internet Explorer adds the index, lastIndex and
|
|
808
|
-
* input enumerable fields to the result of string.match(/regexp/g), which makes
|
|
809
|
-
* assertObjectEquals fail.
|
|
810
|
-
* @param {*} a The expected array (2 args) or the debug message (3 args).
|
|
811
|
-
* @param {*} b The actual array (2 args) or the expected array (3 args).
|
|
812
|
-
* @param {*=} opt_c The actual array (3 args only).
|
|
813
|
-
*/
|
|
814
|
-
var assertArrayEquals = function(a, b, opt_c) {
|
|
815
|
-
_validateArguments(2, arguments);
|
|
816
|
-
var v1 = nonCommentArg(1, 2, arguments);
|
|
817
|
-
var v2 = nonCommentArg(2, 2, arguments);
|
|
818
|
-
var failureMessage = commentArg(2, arguments) ? commentArg(2, arguments) : '';
|
|
819
|
-
|
|
820
|
-
var typeOfVar1 = _trueTypeOf(v1);
|
|
821
|
-
_assert(failureMessage,
|
|
822
|
-
typeOfVar1 == 'Array',
|
|
823
|
-
'Expected an array for assertArrayEquals but found a ' + typeOfVar1);
|
|
824
|
-
|
|
825
|
-
var typeOfVar2 = _trueTypeOf(v2);
|
|
826
|
-
_assert(failureMessage,
|
|
827
|
-
typeOfVar2 == 'Array',
|
|
828
|
-
'Expected an array for assertArrayEquals but found a ' + typeOfVar2);
|
|
829
|
-
|
|
830
|
-
assertObjectEquals(failureMessage,
|
|
831
|
-
Array.prototype.concat.call(v1), Array.prototype.concat.call(v2));
|
|
832
|
-
};
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
/**
|
|
836
|
-
* Compares two objects that can be accessed like an array and assert that
|
|
837
|
-
* each element is equal.
|
|
838
|
-
* @param {string|Object} a Failure message (3 arguments)
|
|
839
|
-
* or object #1 (2 arguments).
|
|
840
|
-
* @param {Object} b Object #1 (2 arguments) or object #2 (3 arguments).
|
|
841
|
-
* @param {Object=} opt_c Object #2 (3 arguments).
|
|
842
|
-
*/
|
|
843
|
-
var assertElementsEquals = function(a, b, opt_c) {
|
|
844
|
-
_validateArguments(2, arguments);
|
|
845
|
-
|
|
846
|
-
var v1 = nonCommentArg(1, 2, arguments);
|
|
847
|
-
var v2 = nonCommentArg(2, 2, arguments);
|
|
848
|
-
var failureMessage = commentArg(2, arguments) ? commentArg(2, arguments) : '';
|
|
849
|
-
|
|
850
|
-
if (!v1) {
|
|
851
|
-
assert(failureMessage, !v2);
|
|
852
|
-
} else {
|
|
853
|
-
assertEquals('length mismatch: ' + failureMessage, v1.length, v2.length);
|
|
854
|
-
for (var i = 0; i < v1.length; ++i) {
|
|
855
|
-
assertEquals(
|
|
856
|
-
'mismatch at index ' + i + ': ' + failureMessage, v1[i], v2[i]);
|
|
857
|
-
}
|
|
858
|
-
}
|
|
859
|
-
};
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
/**
|
|
863
|
-
* Compares two objects that can be accessed like an array and assert that
|
|
864
|
-
* each element is roughly equal.
|
|
865
|
-
* @param {string|Object} a Failure message (4 arguments)
|
|
866
|
-
* or object #1 (3 arguments).
|
|
867
|
-
* @param {Object} b Object #1 (4 arguments) or object #2 (3 arguments).
|
|
868
|
-
* @param {Object|number} c Object #2 (4 arguments) or tolerance (3 arguments).
|
|
869
|
-
* @param {number=} opt_d tolerance (4 arguments).
|
|
870
|
-
*/
|
|
871
|
-
var assertElementsRoughlyEqual = function(a, b, c, opt_d) {
|
|
872
|
-
_validateArguments(3, arguments);
|
|
873
|
-
|
|
874
|
-
var v1 = nonCommentArg(1, 3, arguments);
|
|
875
|
-
var v2 = nonCommentArg(2, 3, arguments);
|
|
876
|
-
var tolerance = nonCommentArg(3, 3, arguments);
|
|
877
|
-
var failureMessage = commentArg(3, arguments) ? commentArg(3, arguments) : '';
|
|
878
|
-
|
|
879
|
-
if (!v1) {
|
|
880
|
-
assert(failureMessage, !v2);
|
|
881
|
-
} else {
|
|
882
|
-
assertEquals('length mismatch: ' + failureMessage, v1.length, v2.length);
|
|
883
|
-
for (var i = 0; i < v1.length; ++i) {
|
|
884
|
-
assertRoughlyEquals(failureMessage, v1[i], v2[i], tolerance);
|
|
885
|
-
}
|
|
886
|
-
}
|
|
887
|
-
};
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
/**
|
|
891
|
-
* Compares two array-like objects without taking their order into account.
|
|
892
|
-
* @param {string|goog.testing.asserts.ArrayLike} a Assertion message or the
|
|
893
|
-
* expected elements.
|
|
894
|
-
* @param {goog.testing.asserts.ArrayLike} b Expected elements or the actual
|
|
895
|
-
* elements.
|
|
896
|
-
* @param {goog.testing.asserts.ArrayLike=} opt_c Actual elements.
|
|
897
|
-
*/
|
|
898
|
-
var assertSameElements = function(a, b, opt_c) {
|
|
899
|
-
_validateArguments(2, arguments);
|
|
900
|
-
var expected = nonCommentArg(1, 2, arguments);
|
|
901
|
-
var actual = nonCommentArg(2, 2, arguments);
|
|
902
|
-
var message = commentArg(2, arguments);
|
|
903
|
-
|
|
904
|
-
assertTrue('Bad arguments to assertSameElements(opt_message, expected: ' +
|
|
905
|
-
'ArrayLike, actual: ArrayLike)',
|
|
906
|
-
goog.isArrayLike(expected) && goog.isArrayLike(actual));
|
|
907
|
-
|
|
908
|
-
// Clones expected and actual and converts them to real arrays.
|
|
909
|
-
expected = goog.testing.asserts.toArray_(expected);
|
|
910
|
-
actual = goog.testing.asserts.toArray_(actual);
|
|
911
|
-
// TODO(user): It would be great to show only the difference
|
|
912
|
-
// between the expected and actual elements.
|
|
913
|
-
_assert(message, expected.length == actual.length,
|
|
914
|
-
'Expected ' + expected.length + ' elements: [' + expected + '], ' +
|
|
915
|
-
'got ' + actual.length + ' elements: [' + actual + ']');
|
|
916
|
-
|
|
917
|
-
var toFind = goog.testing.asserts.toArray_(expected);
|
|
918
|
-
for (var i = 0; i < actual.length; i++) {
|
|
919
|
-
var index = goog.testing.asserts.indexOf_(toFind, actual[i]);
|
|
920
|
-
_assert(message, index != -1, 'Expected [' + expected + '], got [' +
|
|
921
|
-
actual + ']');
|
|
922
|
-
toFind.splice(index, 1);
|
|
923
|
-
}
|
|
924
|
-
};
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
/**
|
|
928
|
-
* @param {*} a The value to assert (1 arg) or debug message (2 args).
|
|
929
|
-
* @param {*=} opt_b The value to assert (2 args only).
|
|
930
|
-
*/
|
|
931
|
-
var assertEvaluatesToTrue = function(a, opt_b) {
|
|
932
|
-
_validateArguments(1, arguments);
|
|
933
|
-
var value = nonCommentArg(1, 1, arguments);
|
|
934
|
-
if (!value) {
|
|
935
|
-
_assert(commentArg(1, arguments), false, 'Expected to evaluate to true');
|
|
936
|
-
}
|
|
937
|
-
};
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
/**
|
|
941
|
-
* @param {*} a The value to assert (1 arg) or debug message (2 args).
|
|
942
|
-
* @param {*=} opt_b The value to assert (2 args only).
|
|
943
|
-
*/
|
|
944
|
-
var assertEvaluatesToFalse = function(a, opt_b) {
|
|
945
|
-
_validateArguments(1, arguments);
|
|
946
|
-
var value = nonCommentArg(1, 1, arguments);
|
|
947
|
-
if (value) {
|
|
948
|
-
_assert(commentArg(1, arguments), false, 'Expected to evaluate to false');
|
|
949
|
-
}
|
|
950
|
-
};
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
/**
|
|
954
|
-
* Compares two HTML snippets.
|
|
955
|
-
*
|
|
956
|
-
* Take extra care if attributes are involved. {@code assertHTMLEquals}'s
|
|
957
|
-
* implementation isn't prepared for complex cases. For example, the following
|
|
958
|
-
* comparisons erroneously fail:
|
|
959
|
-
* <pre>
|
|
960
|
-
* assertHTMLEquals('<a href="x" target="y">', '<a target="y" href="x">');
|
|
961
|
-
* assertHTMLEquals('<div class="a b">', '<div class="b a">');
|
|
962
|
-
* assertHTMLEquals('<input disabled>', '<input disabled="disabled">');
|
|
963
|
-
* </pre>
|
|
964
|
-
*
|
|
965
|
-
* When in doubt, use {@code goog.testing.dom.assertHtmlMatches}.
|
|
966
|
-
*
|
|
967
|
-
* @param {*} a The expected value (2 args) or the debug message (3 args).
|
|
968
|
-
* @param {*} b The actual value (2 args) or the expected value (3 args).
|
|
969
|
-
* @param {*=} opt_c The actual value (3 args only).
|
|
970
|
-
*/
|
|
971
|
-
var assertHTMLEquals = function(a, b, opt_c) {
|
|
972
|
-
_validateArguments(2, arguments);
|
|
973
|
-
var var1 = nonCommentArg(1, 2, arguments);
|
|
974
|
-
var var2 = nonCommentArg(2, 2, arguments);
|
|
975
|
-
var var1Standardized = standardizeHTML(var1);
|
|
976
|
-
var var2Standardized = standardizeHTML(var2);
|
|
977
|
-
|
|
978
|
-
_assert(commentArg(2, arguments), var1Standardized === var2Standardized,
|
|
979
|
-
goog.testing.asserts.getDefaultErrorMsg_(
|
|
980
|
-
var1Standardized, var2Standardized));
|
|
981
|
-
};
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
/**
|
|
985
|
-
* Compares two CSS property values to make sure that they represent the same
|
|
986
|
-
* things. This will normalize values in the browser. For example, in Firefox,
|
|
987
|
-
* this assertion will consider "rgb(0, 0, 255)" and "#0000ff" to be identical
|
|
988
|
-
* values for the "color" property. This function won't normalize everything --
|
|
989
|
-
* for example, in most browsers, "blue" will not match "#0000ff". It is
|
|
990
|
-
* intended only to compensate for unexpected normalizations performed by
|
|
991
|
-
* the browser that should also affect your expected value.
|
|
992
|
-
* @param {string} a Assertion message, or the CSS property name.
|
|
993
|
-
* @param {string} b CSS property name, or the expected value.
|
|
994
|
-
* @param {string} c The expected value, or the actual value.
|
|
995
|
-
* @param {string=} opt_d The actual value.
|
|
996
|
-
*/
|
|
997
|
-
var assertCSSValueEquals = function(a, b, c, opt_d) {
|
|
998
|
-
_validateArguments(3, arguments);
|
|
999
|
-
var propertyName = nonCommentArg(1, 3, arguments);
|
|
1000
|
-
var expectedValue = nonCommentArg(2, 3, arguments);
|
|
1001
|
-
var actualValue = nonCommentArg(3, 3, arguments);
|
|
1002
|
-
var expectedValueStandardized =
|
|
1003
|
-
standardizeCSSValue(propertyName, expectedValue);
|
|
1004
|
-
var actualValueStandardized =
|
|
1005
|
-
standardizeCSSValue(propertyName, actualValue);
|
|
1006
|
-
|
|
1007
|
-
_assert(commentArg(3, arguments),
|
|
1008
|
-
expectedValueStandardized == actualValueStandardized,
|
|
1009
|
-
goog.testing.asserts.getDefaultErrorMsg_(
|
|
1010
|
-
expectedValueStandardized, actualValueStandardized));
|
|
1011
|
-
};
|
|
1012
|
-
|
|
1013
|
-
|
|
1014
|
-
/**
|
|
1015
|
-
* @param {*} a The expected value (2 args) or the debug message (3 args).
|
|
1016
|
-
* @param {*} b The actual value (2 args) or the expected value (3 args).
|
|
1017
|
-
* @param {*=} opt_c The actual value (3 args only).
|
|
1018
|
-
*/
|
|
1019
|
-
var assertHashEquals = function(a, b, opt_c) {
|
|
1020
|
-
_validateArguments(2, arguments);
|
|
1021
|
-
var var1 = nonCommentArg(1, 2, arguments);
|
|
1022
|
-
var var2 = nonCommentArg(2, 2, arguments);
|
|
1023
|
-
var message = commentArg(2, arguments);
|
|
1024
|
-
for (var key in var1) {
|
|
1025
|
-
_assert(message,
|
|
1026
|
-
key in var2, 'Expected hash had key ' + key + ' that was not found');
|
|
1027
|
-
_assert(message, var1[key] == var2[key], 'Value for key ' + key +
|
|
1028
|
-
' mismatch - expected = ' + var1[key] + ', actual = ' + var2[key]);
|
|
1029
|
-
}
|
|
1030
|
-
|
|
1031
|
-
for (var key in var2) {
|
|
1032
|
-
_assert(message, key in var1, 'Actual hash had key ' + key +
|
|
1033
|
-
' that was not expected');
|
|
1034
|
-
}
|
|
1035
|
-
};
|
|
1036
|
-
|
|
1037
|
-
|
|
1038
|
-
/**
|
|
1039
|
-
* @param {*} a The expected value (3 args) or the debug message (4 args).
|
|
1040
|
-
* @param {*} b The actual value (3 args) or the expected value (4 args).
|
|
1041
|
-
* @param {*} c The tolerance (3 args) or the actual value (4 args).
|
|
1042
|
-
* @param {*=} opt_d The tolerance (4 args only).
|
|
1043
|
-
*/
|
|
1044
|
-
var assertRoughlyEquals = function(a, b, c, opt_d) {
|
|
1045
|
-
_validateArguments(3, arguments);
|
|
1046
|
-
var expected = nonCommentArg(1, 3, arguments);
|
|
1047
|
-
var actual = nonCommentArg(2, 3, arguments);
|
|
1048
|
-
var tolerance = nonCommentArg(3, 3, arguments);
|
|
1049
|
-
_assert(commentArg(3, arguments),
|
|
1050
|
-
goog.testing.asserts.numberRoughEqualityPredicate_(
|
|
1051
|
-
expected, actual, tolerance),
|
|
1052
|
-
'Expected ' + expected + ', but got ' + actual +
|
|
1053
|
-
' which was more than ' + tolerance + ' away');
|
|
1054
|
-
};
|
|
1055
|
-
|
|
1056
|
-
|
|
1057
|
-
/**
|
|
1058
|
-
* Checks if the test value is a member of the given container. Uses
|
|
1059
|
-
* container.indexOf as the underlying function, so this works for strings
|
|
1060
|
-
* and arrays.
|
|
1061
|
-
* @param {*} a Failure message (3 arguments) or the test value
|
|
1062
|
-
* (2 arguments).
|
|
1063
|
-
* @param {*} b The test value (3 arguments) or the container
|
|
1064
|
-
* (2 arguments).
|
|
1065
|
-
* @param {*=} opt_c The container.
|
|
1066
|
-
*/
|
|
1067
|
-
var assertContains = function(a, b, opt_c) {
|
|
1068
|
-
_validateArguments(2, arguments);
|
|
1069
|
-
var contained = nonCommentArg(1, 2, arguments);
|
|
1070
|
-
var container = nonCommentArg(2, 2, arguments);
|
|
1071
|
-
_assert(commentArg(2, arguments),
|
|
1072
|
-
goog.testing.asserts.contains_(container, contained),
|
|
1073
|
-
'Expected \'' + container + '\' to contain \'' + contained + '\'');
|
|
1074
|
-
};
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
/**
|
|
1078
|
-
* Checks if the given element is not the member of the given container.
|
|
1079
|
-
* @param {*} a Failure message (3 arguments) or the contained element
|
|
1080
|
-
* (2 arguments).
|
|
1081
|
-
* @param {*} b The contained element (3 arguments) or the container
|
|
1082
|
-
* (2 arguments).
|
|
1083
|
-
* @param {*=} opt_c The container.
|
|
1084
|
-
*/
|
|
1085
|
-
var assertNotContains = function(a, b, opt_c) {
|
|
1086
|
-
_validateArguments(2, arguments);
|
|
1087
|
-
var contained = nonCommentArg(1, 2, arguments);
|
|
1088
|
-
var container = nonCommentArg(2, 2, arguments);
|
|
1089
|
-
_assert(commentArg(2, arguments),
|
|
1090
|
-
!goog.testing.asserts.contains_(container, contained),
|
|
1091
|
-
'Expected \'' + container + '\' not to contain \'' + contained + '\'');
|
|
1092
|
-
};
|
|
1093
|
-
|
|
1094
|
-
|
|
1095
|
-
/**
|
|
1096
|
-
* Checks if the given string matches the given regular expression.
|
|
1097
|
-
* @param {*} a Failure message (3 arguments) or the expected regular
|
|
1098
|
-
* expression as a string or RegExp (2 arguments).
|
|
1099
|
-
* @param {*} b The regular expression (3 arguments) or the string to test
|
|
1100
|
-
* (2 arguments).
|
|
1101
|
-
* @param {*=} opt_c The string to test.
|
|
1102
|
-
*/
|
|
1103
|
-
var assertRegExp = function(a, b, opt_c) {
|
|
1104
|
-
_validateArguments(2, arguments);
|
|
1105
|
-
var regexp = nonCommentArg(1, 2, arguments);
|
|
1106
|
-
var string = nonCommentArg(2, 2, arguments);
|
|
1107
|
-
if (typeof(regexp) == 'string') {
|
|
1108
|
-
regexp = new RegExp(regexp);
|
|
1109
|
-
}
|
|
1110
|
-
_assert(commentArg(2, arguments),
|
|
1111
|
-
regexp.test(string),
|
|
1112
|
-
'Expected \'' + string + '\' to match RegExp ' + regexp.toString());
|
|
1113
|
-
};
|
|
1114
|
-
|
|
1115
|
-
|
|
1116
|
-
/**
|
|
1117
|
-
* Converts an array like object to array or clones it if it's already array.
|
|
1118
|
-
* @param {goog.testing.asserts.ArrayLike} arrayLike The collection.
|
|
1119
|
-
* @return {!Array<?>} Copy of the collection as array.
|
|
1120
|
-
* @private
|
|
1121
|
-
*/
|
|
1122
|
-
goog.testing.asserts.toArray_ = function(arrayLike) {
|
|
1123
|
-
var ret = [];
|
|
1124
|
-
for (var i = 0; i < arrayLike.length; i++) {
|
|
1125
|
-
ret[i] = arrayLike[i];
|
|
1126
|
-
}
|
|
1127
|
-
return ret;
|
|
1128
|
-
};
|
|
1129
|
-
|
|
1130
|
-
|
|
1131
|
-
/**
|
|
1132
|
-
* Finds the position of the first occurrence of an element in a container.
|
|
1133
|
-
* @param {goog.testing.asserts.ArrayLike} container
|
|
1134
|
-
* The array to find the element in.
|
|
1135
|
-
* @param {*} contained Element to find.
|
|
1136
|
-
* @return {number} Index of the first occurrence or -1 if not found.
|
|
1137
|
-
* @private
|
|
1138
|
-
*/
|
|
1139
|
-
goog.testing.asserts.indexOf_ = function(container, contained) {
|
|
1140
|
-
if (container.indexOf) {
|
|
1141
|
-
return container.indexOf(contained);
|
|
1142
|
-
} else {
|
|
1143
|
-
// IE6/7 do not have indexOf so do a search.
|
|
1144
|
-
for (var i = 0; i < container.length; i++) {
|
|
1145
|
-
if (container[i] === contained) {
|
|
1146
|
-
return i;
|
|
1147
|
-
}
|
|
1148
|
-
}
|
|
1149
|
-
return -1;
|
|
1150
|
-
}
|
|
1151
|
-
};
|
|
1152
|
-
|
|
1153
|
-
|
|
1154
|
-
/**
|
|
1155
|
-
* Tells whether the array contains the given element.
|
|
1156
|
-
* @param {goog.testing.asserts.ArrayLike} container The array to
|
|
1157
|
-
* find the element in.
|
|
1158
|
-
* @param {*} contained Element to find.
|
|
1159
|
-
* @return {boolean} Whether the element is in the array.
|
|
1160
|
-
* @private
|
|
1161
|
-
*/
|
|
1162
|
-
goog.testing.asserts.contains_ = function(container, contained) {
|
|
1163
|
-
// TODO(user): Can we check for container.contains as well?
|
|
1164
|
-
// That would give us support for most goog.structs (though weird results
|
|
1165
|
-
// with anything else with a contains method, like goog.math.Range). Falling
|
|
1166
|
-
// back with container.some would catch all iterables, too.
|
|
1167
|
-
return goog.testing.asserts.indexOf_(container, contained) != -1;
|
|
1168
|
-
};
|
|
1169
|
-
|
|
1170
|
-
var standardizeHTML = function(html) {
|
|
1171
|
-
var translator = document.createElement('DIV');
|
|
1172
|
-
translator.innerHTML = html;
|
|
1173
|
-
|
|
1174
|
-
// Trim whitespace from result (without relying on goog.string)
|
|
1175
|
-
return translator.innerHTML.replace(/^\s+|\s+$/g, '');
|
|
1176
|
-
};
|
|
1177
|
-
|
|
1178
|
-
|
|
1179
|
-
/**
|
|
1180
|
-
* Standardizes a CSS value for a given property by applying it to an element
|
|
1181
|
-
* and then reading it back.
|
|
1182
|
-
* @param {string} propertyName CSS property name.
|
|
1183
|
-
* @param {string} value CSS value.
|
|
1184
|
-
* @return {string} Normalized CSS value.
|
|
1185
|
-
*/
|
|
1186
|
-
var standardizeCSSValue = function(propertyName, value) {
|
|
1187
|
-
var styleDeclaration = document.createElement('DIV').style;
|
|
1188
|
-
styleDeclaration[propertyName] = value;
|
|
1189
|
-
return styleDeclaration[propertyName];
|
|
1190
|
-
};
|
|
1191
|
-
|
|
1192
|
-
|
|
1193
|
-
/**
|
|
1194
|
-
* Raises a JsUnit exception with the given comment.
|
|
1195
|
-
* @param {string} comment A summary for the exception.
|
|
1196
|
-
* @param {string=} opt_message A description of the exception.
|
|
1197
|
-
*/
|
|
1198
|
-
goog.testing.asserts.raiseException = function(comment, opt_message) {
|
|
1199
|
-
throw new goog.testing.JsUnitException(comment, opt_message);
|
|
1200
|
-
};
|
|
1201
|
-
|
|
1202
|
-
|
|
1203
|
-
/**
|
|
1204
|
-
* Helper function for assertObjectEquals.
|
|
1205
|
-
* @param {string} prop A property name.
|
|
1206
|
-
* @return {boolean} If the property name is an array index.
|
|
1207
|
-
* @private
|
|
1208
|
-
*/
|
|
1209
|
-
goog.testing.asserts.isArrayIndexProp_ = function(prop) {
|
|
1210
|
-
return (prop | 0) == prop;
|
|
1211
|
-
};
|
|
1212
|
-
|
|
1213
|
-
|
|
1214
|
-
|
|
1215
|
-
/**
|
|
1216
|
-
* @param {string} comment A summary for the exception.
|
|
1217
|
-
* @param {?string=} opt_message A description of the exception.
|
|
1218
|
-
* @constructor
|
|
1219
|
-
* @extends {Error}
|
|
1220
|
-
* @final
|
|
1221
|
-
*/
|
|
1222
|
-
goog.testing.JsUnitException = function(comment, opt_message) {
|
|
1223
|
-
this.isJsUnitException = true;
|
|
1224
|
-
this.message = (comment ? comment : '') +
|
|
1225
|
-
(comment && opt_message ? '\n' : '') +
|
|
1226
|
-
(opt_message ? opt_message : '');
|
|
1227
|
-
this.stackTrace = goog.testing.stacktrace.get();
|
|
1228
|
-
// These fields are for compatibility with jsUnitTestManager.
|
|
1229
|
-
this.comment = comment || null;
|
|
1230
|
-
this.jsUnitMessage = opt_message || '';
|
|
1231
|
-
|
|
1232
|
-
// Ensure there is a stack trace.
|
|
1233
|
-
if (Error.captureStackTrace) {
|
|
1234
|
-
Error.captureStackTrace(this, goog.testing.JsUnitException);
|
|
1235
|
-
} else {
|
|
1236
|
-
this.stack = new Error().stack || '';
|
|
1237
|
-
}
|
|
1238
|
-
};
|
|
1239
|
-
goog.inherits(goog.testing.JsUnitException, Error);
|
|
1240
|
-
|
|
1241
|
-
|
|
1242
|
-
/** @override */
|
|
1243
|
-
goog.testing.JsUnitException.prototype.toString = function() {
|
|
1244
|
-
return this.message;
|
|
1245
|
-
};
|
|
1246
|
-
|
|
1247
|
-
|
|
1248
|
-
goog.exportSymbol('fail', fail);
|
|
1249
|
-
goog.exportSymbol('assert', assert);
|
|
1250
|
-
goog.exportSymbol('assertThrows', assertThrows);
|
|
1251
|
-
goog.exportSymbol('assertNotThrows', assertNotThrows);
|
|
1252
|
-
goog.exportSymbol('assertTrue', assertTrue);
|
|
1253
|
-
goog.exportSymbol('assertFalse', assertFalse);
|
|
1254
|
-
goog.exportSymbol('assertEquals', assertEquals);
|
|
1255
|
-
goog.exportSymbol('assertNotEquals', assertNotEquals);
|
|
1256
|
-
goog.exportSymbol('assertNull', assertNull);
|
|
1257
|
-
goog.exportSymbol('assertNotNull', assertNotNull);
|
|
1258
|
-
goog.exportSymbol('assertUndefined', assertUndefined);
|
|
1259
|
-
goog.exportSymbol('assertNotUndefined', assertNotUndefined);
|
|
1260
|
-
goog.exportSymbol('assertNotNullNorUndefined', assertNotNullNorUndefined);
|
|
1261
|
-
goog.exportSymbol('assertNonEmptyString', assertNonEmptyString);
|
|
1262
|
-
goog.exportSymbol('assertNaN', assertNaN);
|
|
1263
|
-
goog.exportSymbol('assertNotNaN', assertNotNaN);
|
|
1264
|
-
goog.exportSymbol('assertObjectEquals', assertObjectEquals);
|
|
1265
|
-
goog.exportSymbol('assertObjectRoughlyEquals', assertObjectRoughlyEquals);
|
|
1266
|
-
goog.exportSymbol('assertObjectNotEquals', assertObjectNotEquals);
|
|
1267
|
-
goog.exportSymbol('assertArrayEquals', assertArrayEquals);
|
|
1268
|
-
goog.exportSymbol('assertElementsEquals', assertElementsEquals);
|
|
1269
|
-
goog.exportSymbol('assertElementsRoughlyEqual', assertElementsRoughlyEqual);
|
|
1270
|
-
goog.exportSymbol('assertSameElements', assertSameElements);
|
|
1271
|
-
goog.exportSymbol('assertEvaluatesToTrue', assertEvaluatesToTrue);
|
|
1272
|
-
goog.exportSymbol('assertEvaluatesToFalse', assertEvaluatesToFalse);
|
|
1273
|
-
goog.exportSymbol('assertHTMLEquals', assertHTMLEquals);
|
|
1274
|
-
goog.exportSymbol('assertHashEquals', assertHashEquals);
|
|
1275
|
-
goog.exportSymbol('assertRoughlyEquals', assertRoughlyEquals);
|
|
1276
|
-
goog.exportSymbol('assertContains', assertContains);
|
|
1277
|
-
goog.exportSymbol('assertNotContains', assertNotContains);
|
|
1278
|
-
goog.exportSymbol('assertRegExp', assertRegExp);
|