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.
Files changed (534) hide show
  1. package/CHANGES.md +116 -0
  2. package/NOTICE +1 -1
  3. package/README.md +59 -9
  4. package/builder.js +375 -358
  5. package/chrome.js +549 -586
  6. package/edge.js +378 -0
  7. package/error.js +9 -6
  8. package/example/google_search.js +1 -1
  9. package/example/google_search_generator.js +2 -4
  10. package/example/logging.js +6 -2
  11. package/example/sample.js +21 -0
  12. package/executors.js +11 -27
  13. package/firefox/binary.js +149 -98
  14. package/firefox/extension.js +15 -19
  15. package/firefox/index.js +256 -163
  16. package/firefox/profile.js +223 -243
  17. package/http/index.js +487 -81
  18. package/http/util.js +40 -36
  19. package/ie.js +288 -309
  20. package/index.js +34 -125
  21. package/io/exec.js +58 -39
  22. package/io/index.js +72 -60
  23. package/lib/README +4 -0
  24. package/lib/actions.js +596 -0
  25. package/lib/by.js +277 -0
  26. package/lib/capabilities.js +450 -0
  27. package/lib/{webdriver/command.js → command.js} +91 -72
  28. package/lib/{webdriver/button.js → devmode.js} +13 -8
  29. package/lib/error.js +690 -0
  30. package/lib/events.js +212 -0
  31. package/lib/firefox/amd64/libnoblur64.so +0 -0
  32. package/lib/firefox/i386/libnoblur.so +0 -0
  33. package/lib/firefox/webdriver.json +5 -1
  34. package/lib/firefox/webdriver.xpi +0 -0
  35. package/lib/{webdriver/key.js → input.js} +84 -2
  36. package/lib/logging.js +670 -0
  37. package/lib/{webdriver/promise.js → promise.js} +817 -644
  38. package/lib/safari/client.js +266 -214
  39. package/lib/session.js +80 -0
  40. package/lib/{webdriver/serializable.js → symbols.js} +16 -19
  41. package/lib/test/build.js +4 -4
  42. package/lib/test/data/click_tests/html5_submit_buttons.html +2 -1
  43. package/lib/test/data/click_tests/overlapping_elements.html +15 -4
  44. package/lib/test/data/click_tests/partially_overlapping_elements.html +124 -0
  45. package/lib/test/data/click_tests/wrapped_overlapping_elements.html +13 -0
  46. package/lib/test/data/hidden_partially.html +45 -0
  47. package/lib/test/data/readOnlyPage.html +1 -1
  48. package/lib/test/data/selectPage.html +18 -2
  49. package/lib/test/fileserver.js +3 -4
  50. package/lib/test/index.js +7 -3
  51. package/lib/test/resources.js +1 -1
  52. package/lib/until.js +376 -0
  53. package/lib/webdriver.js +2440 -0
  54. package/net/index.js +4 -0
  55. package/net/portprober.js +16 -12
  56. package/opera.js +295 -314
  57. package/package.json +6 -5
  58. package/phantomjs.js +144 -147
  59. package/proxy.js +10 -6
  60. package/remote/index.js +289 -238
  61. package/safari.js +326 -311
  62. package/test/chrome/options_test.js +11 -9
  63. package/test/element_finding_test.js +51 -13
  64. package/test/execute_script_test.js +17 -3
  65. package/test/firefox/firefox_test.js +0 -32
  66. package/test/http/http_test.js +671 -61
  67. package/test/http/util_test.js +25 -23
  68. package/test/io_test.js +67 -1
  69. package/test/lib/by_test.js +139 -0
  70. package/test/lib/capabilities_test.js +111 -0
  71. package/test/lib/error_test.js +325 -0
  72. package/test/lib/events_test.js +177 -0
  73. package/test/lib/logging_test.js +272 -0
  74. package/test/{promise_aplus_test.js → lib/promise_aplus_test.js} +4 -13
  75. package/test/lib/promise_error_test.js +808 -0
  76. package/test/lib/promise_flow_test.js +2282 -0
  77. package/test/lib/promise_generator_test.js +308 -0
  78. package/test/lib/promise_test.js +996 -0
  79. package/test/lib/testutil.js +90 -0
  80. package/test/lib/until_test.js +400 -0
  81. package/test/lib/webdriver_test.js +2157 -0
  82. package/test/page_loading_test.js +7 -9
  83. package/test/remote_test.js +50 -3
  84. package/test/session_test.js +53 -0
  85. package/test/stale_element_test.js +2 -2
  86. package/test/testing/assert_test.js +374 -0
  87. package/test/testing/index_test.js +9 -11
  88. package/testing/assert.js +334 -17
  89. package/testing/index.js +12 -2
  90. package/_base.js +0 -200
  91. package/docs/Changes.html +0 -356
  92. package/docs/class_bot_Error.html +0 -15
  93. package/docs/class_webdriver_ActionSequence.html +0 -115
  94. package/docs/class_webdriver_Alert.html +0 -24
  95. package/docs/class_webdriver_AlertPromise.html +0 -92
  96. package/docs/class_webdriver_Capabilities.html +0 -60
  97. package/docs/class_webdriver_Command.html +0 -15
  98. package/docs/class_webdriver_EventEmitter.html +0 -35
  99. package/docs/class_webdriver_FileDetector.html +0 -21
  100. package/docs/class_webdriver_Locator.html +0 -12
  101. package/docs/class_webdriver_Serializable.html +0 -9
  102. package/docs/class_webdriver_Session.html +0 -13
  103. package/docs/class_webdriver_TouchSequence.html +0 -49
  104. package/docs/class_webdriver_UnhandledAlertError.html +0 -18
  105. package/docs/class_webdriver_WebDriver.html +0 -313
  106. package/docs/class_webdriver_WebDriver_Logs.html +0 -15
  107. package/docs/class_webdriver_WebDriver_Navigation.html +0 -16
  108. package/docs/class_webdriver_WebDriver_Options.html +0 -41
  109. package/docs/class_webdriver_WebDriver_TargetLocator.html +0 -38
  110. package/docs/class_webdriver_WebDriver_Timeouts.html +0 -29
  111. package/docs/class_webdriver_WebDriver_Window.html +0 -27
  112. package/docs/class_webdriver_WebElement.html +0 -223
  113. package/docs/class_webdriver_WebElementPromise.html +0 -274
  114. package/docs/class_webdriver_http_Executor.html +0 -22
  115. package/docs/class_webdriver_http_Request.html +0 -12
  116. package/docs/class_webdriver_http_Response.html +0 -13
  117. package/docs/class_webdriver_logging_Entry.html +0 -15
  118. package/docs/class_webdriver_logging_Level.html +0 -55
  119. package/docs/class_webdriver_logging_LogRecord.html +0 -45
  120. package/docs/class_webdriver_logging_Logger.html +0 -119
  121. package/docs/class_webdriver_logging_Preferences.html +0 -8
  122. package/docs/class_webdriver_promise_CancellationError.html +0 -17
  123. package/docs/class_webdriver_promise_ControlFlow.html +0 -153
  124. package/docs/class_webdriver_promise_Deferred.html +0 -84
  125. package/docs/class_webdriver_promise_MultipleUnhandledRejectionError.html +0 -14
  126. package/docs/class_webdriver_promise_Promise.html +0 -75
  127. package/docs/class_webdriver_stacktrace_Frame.html +0 -20
  128. package/docs/class_webdriver_stacktrace_Snapshot.html +0 -6
  129. package/docs/class_webdriver_testing_Assertion.html +0 -99
  130. package/docs/class_webdriver_testing_Assertion_DelegatingMatcher_.html +0 -13
  131. package/docs/class_webdriver_testing_ContainsMatcher.html +0 -11
  132. package/docs/class_webdriver_testing_NegatedAssertion.html +0 -97
  133. package/docs/class_webdriver_until_Condition.html +0 -7
  134. package/docs/dossier.css +0 -1
  135. package/docs/dossier.js +0 -86
  136. package/docs/enum_bot_ErrorCode.html +0 -3
  137. package/docs/enum_bot_Error_State.html +0 -2
  138. package/docs/enum_webdriver_Browser.html +0 -2
  139. package/docs/enum_webdriver_Button.html +0 -2
  140. package/docs/enum_webdriver_Capability.html +0 -33
  141. package/docs/enum_webdriver_CommandName.html +0 -3
  142. package/docs/enum_webdriver_Key.html +0 -12
  143. package/docs/enum_webdriver_logging_Type.html +0 -6
  144. package/docs/enum_webdriver_promise_ControlFlow_EventType.html +0 -9
  145. package/docs/index.html +0 -125
  146. package/docs/interface_webdriver_CommandExecutor.html +0 -9
  147. package/docs/interface_webdriver_http_Client.html +0 -10
  148. package/docs/interface_webdriver_promise_Thenable.html +0 -77
  149. package/docs/module_selenium-webdriver.html +0 -23
  150. package/docs/module_selenium-webdriver__base.html +0 -23
  151. package/docs/module_selenium-webdriver__base_class_Context.html +0 -5
  152. package/docs/module_selenium-webdriver_builder.html +0 -2
  153. package/docs/module_selenium-webdriver_builder_class_Builder.html +0 -138
  154. package/docs/module_selenium-webdriver_chrome.html +0 -90
  155. package/docs/module_selenium-webdriver_chrome_class_Driver.html +0 -280
  156. package/docs/module_selenium-webdriver_chrome_class_Options.html +0 -127
  157. package/docs/module_selenium-webdriver_chrome_class_ServiceBuilder.html +0 -46
  158. package/docs/module_selenium-webdriver_class_ActionSequence.html +0 -115
  159. package/docs/module_selenium-webdriver_class_Builder.html +0 -138
  160. package/docs/module_selenium-webdriver_class_Capabilities.html +0 -60
  161. package/docs/module_selenium-webdriver_class_Command.html +0 -15
  162. package/docs/module_selenium-webdriver_class_EventEmitter.html +0 -35
  163. package/docs/module_selenium-webdriver_class_FileDetector.html +0 -21
  164. package/docs/module_selenium-webdriver_class_Serializable.html +0 -9
  165. package/docs/module_selenium-webdriver_class_Session.html +0 -13
  166. package/docs/module_selenium-webdriver_class_WebDriver.html +0 -313
  167. package/docs/module_selenium-webdriver_class_WebElement.html +0 -223
  168. package/docs/module_selenium-webdriver_class_WebElementPromise.html +0 -274
  169. package/docs/module_selenium-webdriver_enum_Browser.html +0 -2
  170. package/docs/module_selenium-webdriver_enum_Button.html +0 -2
  171. package/docs/module_selenium-webdriver_enum_Capability.html +0 -33
  172. package/docs/module_selenium-webdriver_enum_CommandName.html +0 -3
  173. package/docs/module_selenium-webdriver_enum_Key.html +0 -12
  174. package/docs/module_selenium-webdriver_error.html +0 -4
  175. package/docs/module_selenium-webdriver_error_class_Error.html +0 -15
  176. package/docs/module_selenium-webdriver_error_enum_ErrorCode.html +0 -3
  177. package/docs/module_selenium-webdriver_executors.html +0 -10
  178. package/docs/module_selenium-webdriver_executors_class_DeferredExecutor.html +0 -12
  179. package/docs/module_selenium-webdriver_firefox.html +0 -68
  180. package/docs/module_selenium-webdriver_firefox_binary.html +0 -5
  181. package/docs/module_selenium-webdriver_firefox_binary_class_Binary.html +0 -20
  182. package/docs/module_selenium-webdriver_firefox_class_Binary.html +0 -20
  183. package/docs/module_selenium-webdriver_firefox_class_Driver.html +0 -276
  184. package/docs/module_selenium-webdriver_firefox_class_Options.html +0 -19
  185. package/docs/module_selenium-webdriver_firefox_class_Profile.html +0 -50
  186. package/docs/module_selenium-webdriver_firefox_extension.html +0 -8
  187. package/docs/module_selenium-webdriver_firefox_profile.html +0 -13
  188. package/docs/module_selenium-webdriver_firefox_profile_class_Profile.html +0 -50
  189. package/docs/module_selenium-webdriver_http.html +0 -9
  190. package/docs/module_selenium-webdriver_http_class_Executor.html +0 -22
  191. package/docs/module_selenium-webdriver_http_class_HttpClient.html +0 -16
  192. package/docs/module_selenium-webdriver_http_class_Request.html +0 -12
  193. package/docs/module_selenium-webdriver_http_class_Response.html +0 -13
  194. package/docs/module_selenium-webdriver_http_util.html +0 -17
  195. package/docs/module_selenium-webdriver_ie.html +0 -11
  196. package/docs/module_selenium-webdriver_ie_class_Driver.html +0 -274
  197. package/docs/module_selenium-webdriver_ie_class_Options.html +0 -89
  198. package/docs/module_selenium-webdriver_ie_enum_Level.html +0 -1
  199. package/docs/module_selenium-webdriver_io.html +0 -37
  200. package/docs/module_selenium-webdriver_io_exec.html +0 -6
  201. package/docs/module_selenium-webdriver_namespace_By.html +0 -56
  202. package/docs/module_selenium-webdriver_namespace_error.html +0 -4
  203. package/docs/module_selenium-webdriver_namespace_logging.html +0 -18
  204. package/docs/module_selenium-webdriver_namespace_promise.html +0 -163
  205. package/docs/module_selenium-webdriver_namespace_stacktrace.html +0 -17
  206. package/docs/module_selenium-webdriver_namespace_until.html +0 -82
  207. package/docs/module_selenium-webdriver_net.html +0 -7
  208. package/docs/module_selenium-webdriver_net_portprober.html +0 -12
  209. package/docs/module_selenium-webdriver_opera.html +0 -62
  210. package/docs/module_selenium-webdriver_opera_class_Driver.html +0 -276
  211. package/docs/module_selenium-webdriver_opera_class_Options.html +0 -44
  212. package/docs/module_selenium-webdriver_opera_class_ServiceBuilder.html +0 -35
  213. package/docs/module_selenium-webdriver_phantomjs.html +0 -2
  214. package/docs/module_selenium-webdriver_phantomjs_class_Driver.html +0 -299
  215. package/docs/module_selenium-webdriver_proxy.html +0 -28
  216. package/docs/module_selenium-webdriver_remote.html +0 -8
  217. package/docs/module_selenium-webdriver_remote_class_DriverService.html +0 -32
  218. package/docs/module_selenium-webdriver_remote_class_FileDetector.html +0 -22
  219. package/docs/module_selenium-webdriver_remote_class_SeleniumServer.html +0 -41
  220. package/docs/module_selenium-webdriver_safari.html +0 -9
  221. package/docs/module_selenium-webdriver_safari_class_Driver.html +0 -279
  222. package/docs/module_selenium-webdriver_safari_class_Options.html +0 -23
  223. package/docs/module_selenium-webdriver_testing.html +0 -74
  224. package/docs/module_selenium-webdriver_testing_assert.html +0 -9
  225. package/docs/namespace_bot.html +0 -4
  226. package/docs/namespace_bot_json.html +0 -20
  227. package/docs/namespace_bot_response.html +0 -18
  228. package/docs/namespace_bot_userAgent.html +0 -33
  229. package/docs/namespace_webdriver.html +0 -30
  230. package/docs/namespace_webdriver_By.html +0 -56
  231. package/docs/namespace_webdriver_http.html +0 -6
  232. package/docs/namespace_webdriver_logging.html +0 -70
  233. package/docs/namespace_webdriver_promise.html +0 -688
  234. package/docs/namespace_webdriver_stacktrace.html +0 -17
  235. package/docs/namespace_webdriver_testing.html +0 -7
  236. package/docs/namespace_webdriver_testing_assert.html +0 -9
  237. package/docs/namespace_webdriver_testing_asserts.html +0 -18
  238. package/docs/namespace_webdriver_until.html +0 -82
  239. package/docs/source/_base.js.src.html +0 -1
  240. package/docs/source/builder.js.src.html +0 -1
  241. package/docs/source/chrome.js.src.html +0 -1
  242. package/docs/source/error.js.src.html +0 -1
  243. package/docs/source/executors.js.src.html +0 -1
  244. package/docs/source/firefox/binary.js.src.html +0 -1
  245. package/docs/source/firefox/extension.js.src.html +0 -1
  246. package/docs/source/firefox/index.js.src.html +0 -1
  247. package/docs/source/firefox/profile.js.src.html +0 -1
  248. package/docs/source/http/index.js.src.html +0 -1
  249. package/docs/source/http/util.js.src.html +0 -1
  250. package/docs/source/ie.js.src.html +0 -1
  251. package/docs/source/index.js.src.html +0 -1
  252. package/docs/source/io/exec.js.src.html +0 -1
  253. package/docs/source/io/index.js.src.html +0 -1
  254. package/docs/source/lib/atoms/error.js.src.html +0 -1
  255. package/docs/source/lib/atoms/json.js.src.html +0 -1
  256. package/docs/source/lib/atoms/response.js.src.html +0 -1
  257. package/docs/source/lib/atoms/userAgent.js.src.html +0 -1
  258. package/docs/source/lib/goog/array/array.js.src.html +0 -1
  259. package/docs/source/lib/goog/asserts/asserts.js.src.html +0 -1
  260. package/docs/source/lib/goog/async/freelist.js.src.html +0 -1
  261. package/docs/source/lib/goog/async/nexttick.js.src.html +0 -1
  262. package/docs/source/lib/goog/async/run.js.src.html +0 -1
  263. package/docs/source/lib/goog/async/workqueue.js.src.html +0 -1
  264. package/docs/source/lib/goog/base.js.src.html +0 -1
  265. package/docs/source/lib/goog/debug/debug.js.src.html +0 -1
  266. package/docs/source/lib/goog/debug/entrypointregistry.js.src.html +0 -1
  267. package/docs/source/lib/goog/debug/error.js.src.html +0 -1
  268. package/docs/source/lib/goog/debug/logbuffer.js.src.html +0 -1
  269. package/docs/source/lib/goog/debug/logger.js.src.html +0 -1
  270. package/docs/source/lib/goog/debug/logrecord.js.src.html +0 -1
  271. package/docs/source/lib/goog/deps.js.src.html +0 -1
  272. package/docs/source/lib/goog/disposable/disposable.js.src.html +0 -1
  273. package/docs/source/lib/goog/disposable/idisposable.js.src.html +0 -1
  274. package/docs/source/lib/goog/dom/browserfeature.js.src.html +0 -1
  275. package/docs/source/lib/goog/dom/dom.js.src.html +0 -1
  276. package/docs/source/lib/goog/dom/nodetype.js.src.html +0 -1
  277. package/docs/source/lib/goog/dom/safe.js.src.html +0 -1
  278. package/docs/source/lib/goog/dom/tagname.js.src.html +0 -1
  279. package/docs/source/lib/goog/dom/tags.js.src.html +0 -1
  280. package/docs/source/lib/goog/dom/vendor.js.src.html +0 -1
  281. package/docs/source/lib/goog/events/browserevent.js.src.html +0 -1
  282. package/docs/source/lib/goog/events/browserfeature.js.src.html +0 -1
  283. package/docs/source/lib/goog/events/event.js.src.html +0 -1
  284. package/docs/source/lib/goog/events/eventid.js.src.html +0 -1
  285. package/docs/source/lib/goog/events/events.js.src.html +0 -1
  286. package/docs/source/lib/goog/events/eventtarget.js.src.html +0 -1
  287. package/docs/source/lib/goog/events/eventtype.js.src.html +0 -1
  288. package/docs/source/lib/goog/events/keycodes.js.src.html +0 -1
  289. package/docs/source/lib/goog/events/listenable.js.src.html +0 -1
  290. package/docs/source/lib/goog/events/listener.js.src.html +0 -1
  291. package/docs/source/lib/goog/events/listenermap.js.src.html +0 -1
  292. package/docs/source/lib/goog/fs/url.js.src.html +0 -1
  293. package/docs/source/lib/goog/functions/functions.js.src.html +0 -1
  294. package/docs/source/lib/goog/html/safehtml.js.src.html +0 -1
  295. package/docs/source/lib/goog/html/safescript.js.src.html +0 -1
  296. package/docs/source/lib/goog/html/safestyle.js.src.html +0 -1
  297. package/docs/source/lib/goog/html/safestylesheet.js.src.html +0 -1
  298. package/docs/source/lib/goog/html/safeurl.js.src.html +0 -1
  299. package/docs/source/lib/goog/html/trustedresourceurl.js.src.html +0 -1
  300. package/docs/source/lib/goog/html/uncheckedconversions.js.src.html +0 -1
  301. package/docs/source/lib/goog/i18n/bidi.js.src.html +0 -1
  302. package/docs/source/lib/goog/iter/iter.js.src.html +0 -1
  303. package/docs/source/lib/goog/json/json.js.src.html +0 -1
  304. package/docs/source/lib/goog/labs/testing/assertthat.js.src.html +0 -1
  305. package/docs/source/lib/goog/labs/testing/logicmatcher.js.src.html +0 -1
  306. package/docs/source/lib/goog/labs/testing/matcher.js.src.html +0 -1
  307. package/docs/source/lib/goog/labs/testing/numbermatcher.js.src.html +0 -1
  308. package/docs/source/lib/goog/labs/testing/objectmatcher.js.src.html +0 -1
  309. package/docs/source/lib/goog/labs/testing/stringmatcher.js.src.html +0 -1
  310. package/docs/source/lib/goog/labs/useragent/browser.js.src.html +0 -1
  311. package/docs/source/lib/goog/labs/useragent/engine.js.src.html +0 -1
  312. package/docs/source/lib/goog/labs/useragent/platform.js.src.html +0 -1
  313. package/docs/source/lib/goog/labs/useragent/util.js.src.html +0 -1
  314. package/docs/source/lib/goog/log/log.js.src.html +0 -1
  315. package/docs/source/lib/goog/math/box.js.src.html +0 -1
  316. package/docs/source/lib/goog/math/coordinate.js.src.html +0 -1
  317. package/docs/source/lib/goog/math/math.js.src.html +0 -1
  318. package/docs/source/lib/goog/math/rect.js.src.html +0 -1
  319. package/docs/source/lib/goog/math/size.js.src.html +0 -1
  320. package/docs/source/lib/goog/net/wrapperxmlhttpfactory.js.src.html +0 -1
  321. package/docs/source/lib/goog/net/xhrlike.js.src.html +0 -1
  322. package/docs/source/lib/goog/net/xmlhttp.js.src.html +0 -1
  323. package/docs/source/lib/goog/net/xmlhttpfactory.js.src.html +0 -1
  324. package/docs/source/lib/goog/object/object.js.src.html +0 -1
  325. package/docs/source/lib/goog/promise/promise.js.src.html +0 -1
  326. package/docs/source/lib/goog/promise/resolver.js.src.html +0 -1
  327. package/docs/source/lib/goog/promise/thenable.js.src.html +0 -1
  328. package/docs/source/lib/goog/reflect/reflect.js.src.html +0 -1
  329. package/docs/source/lib/goog/string/const.js.src.html +0 -1
  330. package/docs/source/lib/goog/string/string.js.src.html +0 -1
  331. package/docs/source/lib/goog/string/typedstring.js.src.html +0 -1
  332. package/docs/source/lib/goog/structs/collection.js.src.html +0 -1
  333. package/docs/source/lib/goog/structs/map.js.src.html +0 -1
  334. package/docs/source/lib/goog/structs/set.js.src.html +0 -1
  335. package/docs/source/lib/goog/structs/structs.js.src.html +0 -1
  336. package/docs/source/lib/goog/style/style.js.src.html +0 -1
  337. package/docs/source/lib/goog/testing/asserts.js.src.html +0 -1
  338. package/docs/source/lib/goog/testing/events/events.js.src.html +0 -1
  339. package/docs/source/lib/goog/testing/functionmock.js.src.html +0 -1
  340. package/docs/source/lib/goog/testing/jsunit.js.src.html +0 -1
  341. package/docs/source/lib/goog/testing/loosemock.js.src.html +0 -1
  342. package/docs/source/lib/goog/testing/mock.js.src.html +0 -1
  343. package/docs/source/lib/goog/testing/mockclock.js.src.html +0 -1
  344. package/docs/source/lib/goog/testing/mockcontrol.js.src.html +0 -1
  345. package/docs/source/lib/goog/testing/mockinterface.js.src.html +0 -1
  346. package/docs/source/lib/goog/testing/mockmatchers.js.src.html +0 -1
  347. package/docs/source/lib/goog/testing/objectpropertystring.js.src.html +0 -1
  348. package/docs/source/lib/goog/testing/propertyreplacer.js.src.html +0 -1
  349. package/docs/source/lib/goog/testing/recordfunction.js.src.html +0 -1
  350. package/docs/source/lib/goog/testing/stacktrace.js.src.html +0 -1
  351. package/docs/source/lib/goog/testing/strictmock.js.src.html +0 -1
  352. package/docs/source/lib/goog/testing/testcase.js.src.html +0 -1
  353. package/docs/source/lib/goog/testing/testrunner.js.src.html +0 -1
  354. package/docs/source/lib/goog/uri/uri.js.src.html +0 -1
  355. package/docs/source/lib/goog/uri/utils.js.src.html +0 -1
  356. package/docs/source/lib/goog/useragent/product.js.src.html +0 -1
  357. package/docs/source/lib/goog/useragent/product_isversion.js.src.html +0 -1
  358. package/docs/source/lib/goog/useragent/useragent.js.src.html +0 -1
  359. package/docs/source/lib/webdriver/actionsequence.js.src.html +0 -1
  360. package/docs/source/lib/webdriver/button.js.src.html +0 -1
  361. package/docs/source/lib/webdriver/capabilities.js.src.html +0 -1
  362. package/docs/source/lib/webdriver/command.js.src.html +0 -1
  363. package/docs/source/lib/webdriver/events.js.src.html +0 -1
  364. package/docs/source/lib/webdriver/http/http.js.src.html +0 -1
  365. package/docs/source/lib/webdriver/key.js.src.html +0 -1
  366. package/docs/source/lib/webdriver/locators.js.src.html +0 -1
  367. package/docs/source/lib/webdriver/logging.js.src.html +0 -1
  368. package/docs/source/lib/webdriver/promise.js.src.html +0 -1
  369. package/docs/source/lib/webdriver/serializable.js.src.html +0 -1
  370. package/docs/source/lib/webdriver/session.js.src.html +0 -1
  371. package/docs/source/lib/webdriver/stacktrace.js.src.html +0 -1
  372. package/docs/source/lib/webdriver/testing/asserts.js.src.html +0 -1
  373. package/docs/source/lib/webdriver/touchsequence.js.src.html +0 -1
  374. package/docs/source/lib/webdriver/until.js.src.html +0 -1
  375. package/docs/source/lib/webdriver/webdriver.js.src.html +0 -1
  376. package/docs/source/net/index.js.src.html +0 -1
  377. package/docs/source/net/portprober.js.src.html +0 -1
  378. package/docs/source/opera.js.src.html +0 -1
  379. package/docs/source/phantomjs.js.src.html +0 -1
  380. package/docs/source/proxy.js.src.html +0 -1
  381. package/docs/source/remote/index.js.src.html +0 -1
  382. package/docs/source/safari.js.src.html +0 -1
  383. package/docs/source/testing/assert.js.src.html +0 -1
  384. package/docs/source/testing/index.js.src.html +0 -1
  385. package/docs/types.js +0 -1
  386. package/lib/atoms/error.js +0 -202
  387. package/lib/atoms/json.js +0 -80
  388. package/lib/atoms/response.js +0 -110
  389. package/lib/atoms/userAgent.js +0 -257
  390. package/lib/goog/LICENSE +0 -176
  391. package/lib/goog/array/array.js +0 -1654
  392. package/lib/goog/asserts/asserts.js +0 -365
  393. package/lib/goog/async/freelist.js +0 -88
  394. package/lib/goog/async/nexttick.js +0 -241
  395. package/lib/goog/async/run.js +0 -133
  396. package/lib/goog/async/workqueue.js +0 -139
  397. package/lib/goog/base.js +0 -2548
  398. package/lib/goog/debug/debug.js +0 -653
  399. package/lib/goog/debug/entrypointregistry.js +0 -158
  400. package/lib/goog/debug/error.js +0 -63
  401. package/lib/goog/debug/logbuffer.js +0 -148
  402. package/lib/goog/debug/logger.js +0 -873
  403. package/lib/goog/debug/logrecord.js +0 -242
  404. package/lib/goog/deps.js +0 -151
  405. package/lib/goog/disposable/disposable.js +0 -307
  406. package/lib/goog/disposable/idisposable.js +0 -45
  407. package/lib/goog/dom/browserfeature.js +0 -72
  408. package/lib/goog/dom/dom.js +0 -2991
  409. package/lib/goog/dom/nodetype.js +0 -48
  410. package/lib/goog/dom/safe.js +0 -347
  411. package/lib/goog/dom/tagname.js +0 -160
  412. package/lib/goog/dom/tags.js +0 -41
  413. package/lib/goog/dom/vendor.js +0 -96
  414. package/lib/goog/events/browserevent.js +0 -400
  415. package/lib/goog/events/browserfeature.js +0 -85
  416. package/lib/goog/events/event.js +0 -143
  417. package/lib/goog/events/eventid.js +0 -47
  418. package/lib/goog/events/events.js +0 -984
  419. package/lib/goog/events/eventtarget.js +0 -394
  420. package/lib/goog/events/eventtype.js +0 -237
  421. package/lib/goog/events/keycodes.js +0 -427
  422. package/lib/goog/events/listenable.js +0 -335
  423. package/lib/goog/events/listener.js +0 -131
  424. package/lib/goog/events/listenermap.js +0 -308
  425. package/lib/goog/fs/url.js +0 -109
  426. package/lib/goog/functions/functions.js +0 -442
  427. package/lib/goog/html/safehtml.js +0 -757
  428. package/lib/goog/html/safescript.js +0 -234
  429. package/lib/goog/html/safestyle.js +0 -442
  430. package/lib/goog/html/safestylesheet.js +0 -276
  431. package/lib/goog/html/safeurl.js +0 -398
  432. package/lib/goog/html/trustedresourceurl.js +0 -224
  433. package/lib/goog/html/uncheckedconversions.js +0 -232
  434. package/lib/goog/i18n/bidi.js +0 -908
  435. package/lib/goog/iter/iter.js +0 -1302
  436. package/lib/goog/json/json.js +0 -363
  437. package/lib/goog/labs/testing/assertthat.js +0 -58
  438. package/lib/goog/labs/testing/logicmatcher.js +0 -212
  439. package/lib/goog/labs/testing/matcher.js +0 -80
  440. package/lib/goog/labs/testing/numbermatcher.js +0 -346
  441. package/lib/goog/labs/testing/objectmatcher.js +0 -317
  442. package/lib/goog/labs/testing/stringmatcher.js +0 -415
  443. package/lib/goog/labs/useragent/browser.js +0 -341
  444. package/lib/goog/labs/useragent/engine.js +0 -160
  445. package/lib/goog/labs/useragent/platform.js +0 -160
  446. package/lib/goog/labs/useragent/util.js +0 -148
  447. package/lib/goog/log/log.js +0 -197
  448. package/lib/goog/math/box.js +0 -398
  449. package/lib/goog/math/coordinate.js +0 -268
  450. package/lib/goog/math/math.js +0 -451
  451. package/lib/goog/math/rect.js +0 -476
  452. package/lib/goog/math/size.js +0 -227
  453. package/lib/goog/net/wrapperxmlhttpfactory.js +0 -71
  454. package/lib/goog/net/xhrlike.js +0 -124
  455. package/lib/goog/net/xmlhttp.js +0 -246
  456. package/lib/goog/net/xmlhttpfactory.js +0 -67
  457. package/lib/goog/object/object.js +0 -686
  458. package/lib/goog/promise/promise.js +0 -1350
  459. package/lib/goog/promise/resolver.js +0 -48
  460. package/lib/goog/promise/thenable.js +0 -126
  461. package/lib/goog/reflect/reflect.js +0 -77
  462. package/lib/goog/string/const.js +0 -182
  463. package/lib/goog/string/string.js +0 -1599
  464. package/lib/goog/string/typedstring.js +0 -48
  465. package/lib/goog/structs/collection.js +0 -56
  466. package/lib/goog/structs/map.js +0 -457
  467. package/lib/goog/structs/set.js +0 -279
  468. package/lib/goog/structs/structs.js +0 -354
  469. package/lib/goog/style/style.js +0 -2037
  470. package/lib/goog/testing/asserts.js +0 -1278
  471. package/lib/goog/testing/events/events.js +0 -767
  472. package/lib/goog/testing/functionmock.js +0 -175
  473. package/lib/goog/testing/jsunit.js +0 -162
  474. package/lib/goog/testing/loosemock.js +0 -242
  475. package/lib/goog/testing/mock.js +0 -645
  476. package/lib/goog/testing/mockclock.js +0 -606
  477. package/lib/goog/testing/mockcontrol.js +0 -220
  478. package/lib/goog/testing/mockinterface.js +0 -45
  479. package/lib/goog/testing/mockmatchers.js +0 -400
  480. package/lib/goog/testing/objectpropertystring.js +0 -68
  481. package/lib/goog/testing/propertyreplacer.js +0 -262
  482. package/lib/goog/testing/recordfunction.js +0 -215
  483. package/lib/goog/testing/stacktrace.js +0 -594
  484. package/lib/goog/testing/strictmock.js +0 -130
  485. package/lib/goog/testing/testcase.js +0 -1629
  486. package/lib/goog/testing/testrunner.js +0 -440
  487. package/lib/goog/uri/uri.js +0 -1524
  488. package/lib/goog/uri/utils.js +0 -1064
  489. package/lib/goog/useragent/product.js +0 -183
  490. package/lib/goog/useragent/product_isversion.js +0 -144
  491. package/lib/goog/useragent/useragent.js +0 -572
  492. package/lib/webdriver/actionsequence.js +0 -356
  493. package/lib/webdriver/builder.js +0 -207
  494. package/lib/webdriver/capabilities.js +0 -412
  495. package/lib/webdriver/events.js +0 -179
  496. package/lib/webdriver/firefoxdomexecutor.js +0 -175
  497. package/lib/webdriver/http/corsclient.js +0 -133
  498. package/lib/webdriver/http/http.js +0 -525
  499. package/lib/webdriver/http/xhrclient.js +0 -67
  500. package/lib/webdriver/locators.js +0 -257
  501. package/lib/webdriver/logging.js +0 -347
  502. package/lib/webdriver/session.js +0 -74
  503. package/lib/webdriver/stacktrace.js +0 -619
  504. package/lib/webdriver/test/builder_test.js +0 -53
  505. package/lib/webdriver/test/capabilities_test.js +0 -72
  506. package/lib/webdriver/test/events_test.js +0 -203
  507. package/lib/webdriver/test/http/corsclient_test.js +0 -151
  508. package/lib/webdriver/test/http/http_test.js +0 -428
  509. package/lib/webdriver/test/http/xhrclient_test.js +0 -196
  510. package/lib/webdriver/test/locators_test.js +0 -59
  511. package/lib/webdriver/test/logging_test.js +0 -85
  512. package/lib/webdriver/test/promise_error_test.js +0 -892
  513. package/lib/webdriver/test/promise_flow_test.js +0 -2365
  514. package/lib/webdriver/test/promise_generator_test.js +0 -323
  515. package/lib/webdriver/test/promise_test.js +0 -2012
  516. package/lib/webdriver/test/stacktrace_test.js +0 -480
  517. package/lib/webdriver/test/test_bootstrap.js +0 -67
  518. package/lib/webdriver/test/testing/asserts_test.js +0 -117
  519. package/lib/webdriver/test/testing/client_test.js +0 -88
  520. package/lib/webdriver/test/testing/testcase_test.js +0 -229
  521. package/lib/webdriver/test/testutil.js +0 -209
  522. package/lib/webdriver/test/testutil_test.js +0 -104
  523. package/lib/webdriver/test/until_test.js +0 -411
  524. package/lib/webdriver/test/webdriver_generator_test.js +0 -92
  525. package/lib/webdriver/test/webdriver_test.js +0 -2369
  526. package/lib/webdriver/testing/asserts.js +0 -487
  527. package/lib/webdriver/testing/client.js +0 -179
  528. package/lib/webdriver/testing/jsunit.js +0 -363
  529. package/lib/webdriver/testing/testcase.js +0 -168
  530. package/lib/webdriver/testing/window.js +0 -244
  531. package/lib/webdriver/touchsequence.js +0 -248
  532. package/lib/webdriver/until.js +0 -412
  533. package/lib/webdriver/webdriver.js +0 -2511
  534. 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);