selenium-webdriver 2.48.2 → 2.52.0

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