jasmine-core 2.0.0 → 2.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (49) hide show
  1. checksums.yaml +4 -4
  2. data/lib/console/console.js +27 -22
  3. data/lib/jasmine-core.js +2 -0
  4. data/lib/jasmine-core.rb +6 -2
  5. data/lib/jasmine-core/__init__.py +1 -0
  6. data/lib/jasmine-core/boot.js +1 -1
  7. data/lib/jasmine-core/boot/node_boot.js +71 -0
  8. data/lib/jasmine-core/core.py +60 -0
  9. data/lib/jasmine-core/example/node_example/spec/PlayerSpec.js +60 -0
  10. data/lib/jasmine-core/example/node_example/spec/SpecHelper.js +15 -0
  11. data/lib/jasmine-core/example/node_example/src/Player.js +24 -0
  12. data/lib/jasmine-core/example/node_example/src/Song.js +9 -0
  13. data/lib/jasmine-core/jasmine-html.js +104 -73
  14. data/lib/jasmine-core/jasmine.css +58 -54
  15. data/lib/jasmine-core/jasmine.js +368 -254
  16. data/lib/jasmine-core/node_boot.js +93 -0
  17. data/lib/jasmine-core/spec/console/ConsoleReporterSpec.js +12 -0
  18. data/lib/jasmine-core/spec/core/AnySpec.js +1 -0
  19. data/lib/jasmine-core/spec/core/ClockSpec.js +103 -17
  20. data/lib/jasmine-core/spec/core/DelayedFunctionSchedulerSpec.js +1 -1
  21. data/lib/jasmine-core/spec/core/EnvSpec.js +14 -14
  22. data/lib/jasmine-core/spec/core/ExceptionFormatterSpec.js +7 -0
  23. data/lib/jasmine-core/spec/core/ExceptionsSpec.js +2 -2
  24. data/lib/jasmine-core/spec/core/ExpectationSpec.js +34 -0
  25. data/lib/jasmine-core/spec/core/MockDateSpec.js +179 -0
  26. data/lib/jasmine-core/spec/core/ObjectContainingSpec.js +6 -0
  27. data/lib/jasmine-core/spec/core/PrettyPrintSpec.js +41 -10
  28. data/lib/jasmine-core/spec/core/QueueRunnerSpec.js +130 -31
  29. data/lib/jasmine-core/spec/core/SpecSpec.js +27 -88
  30. data/lib/jasmine-core/spec/core/TimerSpec.js +18 -0
  31. data/lib/jasmine-core/spec/core/integration/EnvSpec.js +20 -2
  32. data/lib/jasmine-core/spec/core/matchers/matchersUtilSpec.js +8 -0
  33. data/lib/jasmine-core/spec/core/matchers/toBeGreaterThanSpec.js +2 -1
  34. data/lib/jasmine-core/spec/core/matchers/toBeNaNSpec.js +3 -2
  35. data/lib/jasmine-core/spec/core/matchers/toBeUndefinedSpec.js +2 -1
  36. data/lib/jasmine-core/spec/core/matchers/toContainSpec.js +4 -2
  37. data/lib/jasmine-core/spec/core/matchers/toHaveBeenCalledSpec.js +2 -1
  38. data/lib/jasmine-core/spec/core/matchers/toHaveBeenCalledWithSpec.js +17 -3
  39. data/lib/jasmine-core/spec/core/matchers/toThrowErrorSpec.js +11 -11
  40. data/lib/jasmine-core/spec/core/matchers/toThrowSpec.js +5 -5
  41. data/lib/jasmine-core/spec/helpers/defineJasmineUnderTest.js +7 -0
  42. data/lib/jasmine-core/spec/helpers/nodeDefineJasmineUnderTest.js +33 -0
  43. data/lib/jasmine-core/spec/html/HtmlReporterSpec.js +155 -35
  44. data/lib/jasmine-core/spec/html/PrettyPrintHtmlSpec.js +1 -1
  45. data/lib/jasmine-core/spec/performance/large_object_test.js +36 -0
  46. data/lib/jasmine-core/version.rb +1 -1
  47. metadata +34 -23
  48. data/lib/jasmine-core/spec/node_suite.js +0 -187
  49. data/lib/jasmine-core/spec/support/dev_boot.js +0 -124
@@ -1,55 +1,59 @@
1
- body { background-color: #eeeeee; padding: 0; margin: 5px; overflow-y: scroll; }
1
+ body { overflow-y: scroll; }
2
2
 
3
- .html-reporter { font-size: 11px; font-family: Monaco, "Lucida Console", monospace; line-height: 14px; color: #333333; }
4
- .html-reporter a { text-decoration: none; }
5
- .html-reporter a:hover { text-decoration: underline; }
6
- .html-reporter p, .html-reporter h1, .html-reporter h2, .html-reporter h3, .html-reporter h4, .html-reporter h5, .html-reporter h6 { margin: 0; line-height: 14px; }
7
- .html-reporter .banner, .html-reporter .symbol-summary, .html-reporter .summary, .html-reporter .result-message, .html-reporter .spec .description, .html-reporter .spec-detail .description, .html-reporter .alert .bar, .html-reporter .stack-trace { padding-left: 9px; padding-right: 9px; }
8
- .html-reporter .banner .version { margin-left: 14px; }
9
- .html-reporter #jasmine_content { position: fixed; right: 100%; }
10
- .html-reporter .version { color: #aaaaaa; }
11
- .html-reporter .banner { margin-top: 14px; }
12
- .html-reporter .duration { color: #aaaaaa; float: right; }
13
- .html-reporter .symbol-summary { overflow: hidden; *zoom: 1; margin: 14px 0; }
14
- .html-reporter .symbol-summary li { display: inline-block; height: 8px; width: 14px; font-size: 16px; }
15
- .html-reporter .symbol-summary li.passed { font-size: 14px; }
16
- .html-reporter .symbol-summary li.passed:before { color: #5e7d00; content: "\02022"; }
17
- .html-reporter .symbol-summary li.failed { line-height: 9px; }
18
- .html-reporter .symbol-summary li.failed:before { color: #b03911; content: "x"; font-weight: bold; margin-left: -1px; }
19
- .html-reporter .symbol-summary li.disabled { font-size: 14px; }
20
- .html-reporter .symbol-summary li.disabled:before { color: #bababa; content: "\02022"; }
21
- .html-reporter .symbol-summary li.pending { line-height: 17px; }
22
- .html-reporter .symbol-summary li.pending:before { color: #ba9d37; content: "*"; }
23
- .html-reporter .exceptions { color: #fff; float: right; margin-top: 5px; margin-right: 5px; }
24
- .html-reporter .bar { line-height: 28px; font-size: 14px; display: block; color: #eee; }
25
- .html-reporter .bar.failed { background-color: #b03911; }
26
- .html-reporter .bar.passed { background-color: #a6b779; }
27
- .html-reporter .bar.skipped { background-color: #bababa; }
28
- .html-reporter .bar.menu { background-color: #fff; color: #aaaaaa; }
29
- .html-reporter .bar.menu a { color: #333333; }
30
- .html-reporter .bar a { color: white; }
31
- .html-reporter.spec-list .bar.menu.failure-list, .html-reporter.spec-list .results .failures { display: none; }
32
- .html-reporter.failure-list .bar.menu.spec-list, .html-reporter.failure-list .summary { display: none; }
33
- .html-reporter .running-alert { background-color: #666666; }
34
- .html-reporter .results { margin-top: 14px; }
35
- .html-reporter.showDetails .summaryMenuItem { font-weight: normal; text-decoration: inherit; }
36
- .html-reporter.showDetails .summaryMenuItem:hover { text-decoration: underline; }
37
- .html-reporter.showDetails .detailsMenuItem { font-weight: bold; text-decoration: underline; }
38
- .html-reporter.showDetails .summary { display: none; }
39
- .html-reporter.showDetails #details { display: block; }
40
- .html-reporter .summaryMenuItem { font-weight: bold; text-decoration: underline; }
41
- .html-reporter .summary { margin-top: 14px; }
42
- .html-reporter .summary ul { list-style-type: none; margin-left: 14px; padding-top: 0; padding-left: 0; }
43
- .html-reporter .summary ul.suite { margin-top: 7px; margin-bottom: 7px; }
44
- .html-reporter .summary li.passed a { color: #5e7d00; }
45
- .html-reporter .summary li.failed a { color: #b03911; }
46
- .html-reporter .summary li.pending a { color: #ba9d37; }
47
- .html-reporter .description + .suite { margin-top: 0; }
48
- .html-reporter .suite { margin-top: 14px; }
49
- .html-reporter .suite a { color: #333333; }
50
- .html-reporter .failures .spec-detail { margin-bottom: 28px; }
51
- .html-reporter .failures .spec-detail .description { background-color: #b03911; }
52
- .html-reporter .failures .spec-detail .description a { color: white; }
53
- .html-reporter .result-message { padding-top: 14px; color: #333333; white-space: pre; }
54
- .html-reporter .result-message span.result { display: block; }
55
- .html-reporter .stack-trace { margin: 5px 0 0 0; max-height: 224px; overflow: auto; line-height: 18px; color: #666666; border: 1px solid #ddd; background: white; white-space: pre; }
3
+ .jasmine_html-reporter { background-color: #eeeeee; padding: 5px; margin: -8px; font-size: 11px; font-family: Monaco, "Lucida Console", monospace; line-height: 14px; color: #333333; }
4
+ .jasmine_html-reporter a { text-decoration: none; }
5
+ .jasmine_html-reporter a:hover { text-decoration: underline; }
6
+ .jasmine_html-reporter p, .jasmine_html-reporter h1, .jasmine_html-reporter h2, .jasmine_html-reporter h3, .jasmine_html-reporter h4, .jasmine_html-reporter h5, .jasmine_html-reporter h6 { margin: 0; line-height: 14px; }
7
+ .jasmine_html-reporter .banner, .jasmine_html-reporter .symbol-summary, .jasmine_html-reporter .summary, .jasmine_html-reporter .result-message, .jasmine_html-reporter .spec .description, .jasmine_html-reporter .spec-detail .description, .jasmine_html-reporter .alert .bar, .jasmine_html-reporter .stack-trace { padding-left: 9px; padding-right: 9px; }
8
+ .jasmine_html-reporter .banner { position: relative; }
9
+ .jasmine_html-reporter .banner .title { background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFoAAAAZCAMAAACGusnyAAACdlBMVEX/////AP+AgICqVaqAQICZM5mAVYCSSZKAQICOOY6ATYCLRouAQICJO4mSSYCIRIiPQICHPIeOR4CGQ4aMQICGPYaLRoCFQ4WKQICPPYWJRYCOQoSJQICNPoSIRICMQoSHQICHRICKQoOHQICKPoOJO4OJQYOMQICMQ4CIQYKLQICIPoKLQ4CKQICNPoKJQISMQ4KJQoSLQYKJQISLQ4KIQoSKQYKIQICIQISMQoSKQYKLQIOLQoOJQYGLQIOKQIOMQoGKQYOLQYGKQIOLQoGJQYOJQIOKQYGJQIOKQoGKQIGLQIKLQ4KKQoGLQYKJQIGKQYKJQIGKQIKJQoGKQYKLQIGKQYKLQIOJQoKKQoOJQYKKQIOJQoKKQoOKQIOLQoKKQYOLQYKJQIOKQoKKQYKKQoKJQYOKQYKLQIOKQoKLQYOKQYKLQIOJQoGKQYKJQYGJQoGKQYKLQoGLQYGKQoGJQYKKQYGJQIKKQoGJQYKLQIKKQYGLQYKKQYGKQYGKQYKJQYOKQoKJQYOKQYKLQYOLQYOKQYKLQYOKQoKKQYKKQYOKQYOJQYKKQYKLQYKKQIKKQoKKQYKKQYKKQoKJQIKKQYKLQYKKQYKKQIKKQYKKQYKKQYKKQIKKQYKJQYGLQYGKQYKKQYKKQYGKQIKKQYGKQYOJQoKKQYOLQYKKQYOKQoKKQYKKQoKKQYKKQYKJQYKLQYKKQYKKQYKKQYKKQYKKQYKKQYKKQYKKQYKJQYKKQYKKQYKKQYKKQYKKQYKKQYKKQYKKQYKKQYKKQYKKQYKLQYKKQYKKQYKKQYKKQYKKQYKKQYKKQYKKQYKKQYKKQYKKQYKKQYKmIDpEAAAA0XRSTlMAAQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyAiIyQlJycoKissLS4wMTQ1Njc4OTo7PDw+P0BCQ0RISUpLTE1OUFNUVVdYWFlaW15fYGFiY2ZnaGlqa2xtb3BxcnN0dnh5ent8fX5/gIGChIWIioyNjo+QkZOUlZaYmZqbnJ2eoKGio6WmqKmsra6vsLGztre4ubq7vL2+wMHDxMjJysvNzs/Q0dLU1tfY2dvc3t/g4eLj5ebn6Onq6+zt7u/w8vP09fb3+Pn6+/z9/vkVQXAAAAMaSURBVHhe5dXxV1N1GMfxz2ABbDgIAm5VDJOyVDIJLUMaVpBWUZUaGbmqoGpZRSiGiRWp6KoZ5AB0ZY50RImZQIlahKkMYXv/R90dBvET/rJfOr3Ouc8v99zPec59zvf56j+vYKlViSf7250X4Mr3O29Tgq08BdGB4DhcekEJ5YkQKFsgWZdtj9JpV+I8xPjLFqkrsEIqO8PHSpis36jWazcqjEsfJjkvRssVU37SdIOu4XCf5vEJPsnwJpnRNU9JmxhMk8l1gehIrq7hTFjzOD+Vf88629qKMJVNltInFeRexRQyJlNeqd1iGDlSzrIUIyXbyFfm3RYprcQRe7lqtWyGYbfc6dT0R2vmdOOkX3u55C1rP37ftiH+tDby4r/RBT0w8TyEkr+epB9XgPDmSYYWbrhCuFYaIyw3fDQAXTnSkh+ANofiHmWf9l+FY1I90FdQTetstO00o23novzVsJ7uB3/C5TkbjRwZ5JerwV4iRWq9HFbFMaK/d0TYqayRiQPuIxxS3Bu8JWU90/60tKi7vkhaznez0a/TbVOKj5CaOZh6fWG6/Lyv9B/ZLR1gw/S/fpbeVD3MCW1li6SvWDOn65tr99/uvWtBS0XDm4s1t+sOHpG0kpBKx/l77wOSnxLpcx6TXmXLTPQOKYOf9Q1dfr8/SJ2mFdCvl1Yl93DiHUZvXeLJbGSzYu5gVJ2slbSakOR8dxCq5adQ2oFLqsE9Ex3L4qQO0eOPeU5x56bypXp4onSEb5OkICX6lDat55TeoztNKQcJaakrz9KCb95oD69IKq+yKW4XPjknaS52V0TZqE2cTtXjcHSCRmUO88e+85hj3EP74i9p8pylw7lxgMDyyl6OV7ZejnjNMfatu87LxRbH0IS35gt2a4ZjmGpVBdKK3Wr6INk8jWWSGqbA55CKgjBRC6E9w78ydTg3ABS3AFV1QN0Y4Aa2pgEjWnQURj9L0ayK6R2ysEqxHUKzYnLvvyU+i9KM2JHJzE4vyZOyDcOwOsySajeLPc8sNvPJkFlyJd20wpqAzZeAfZ3oWybxd+P/3j+SG3uSBdf2VQAAAABJRU5ErkJggg==') no-repeat; background: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgdmVyc2lvbj0iMS4xIgogICB3aWR0aD0iNjgxLjk2MjUyIgogICBoZWlnaHQ9IjE4Ny41IgogICBpZD0ic3ZnMiIKICAgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhOCI+PHJkZjpSREY+PGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPjxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PjxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz48L2NjOldvcms+PC9yZGY6UkRGPjwvbWV0YWRhdGE+PGRlZnMKICAgICBpZD0iZGVmczYiPjxjbGlwUGF0aAogICAgICAgaWQ9ImNsaXBQYXRoMTgiPjxwYXRoCiAgICAgICAgIGQ9Ik0gMCwxNTAwIDAsMCBsIDU0NTUuNzQsMCAwLDE1MDAgTCAwLDE1MDAgeiIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgaWQ9InBhdGgyMCIgLz48L2NsaXBQYXRoPjwvZGVmcz48ZwogICAgIHRyYW5zZm9ybT0ibWF0cml4KDEuMjUsMCwwLC0xLjI1LDAsMTg3LjUpIgogICAgIGlkPSJnMTAiPjxnCiAgICAgICB0cmFuc2Zvcm09InNjYWxlKDAuMSwwLjEpIgogICAgICAgaWQ9ImcxMiI+PGcKICAgICAgICAgaWQ9ImcxNCI+PGcKICAgICAgICAgICBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGgxOCkiCiAgICAgICAgICAgaWQ9ImcxNiI+PHBhdGgKICAgICAgICAgICAgIGQ9Im0gMTU0NCw1OTkuNDM0IGMgMC45MiwtNDAuMzUyIDI1LjY4LC04MS42MDIgNzEuNTMsLTgxLjYwMiAyNy41MSwwIDQ3LjY4LDEyLjgzMiA2MS40NCwzNS43NTQgMTIuODMsMjIuOTMgMTIuODMsNTYuODUyIDEyLjgzLDgyLjUyNyBsIDAsMzI5LjE4NCAtNzEuNTIsMCAwLDEwNC41NDMgMjY2LjgzLDAgMCwtMTA0LjU0MyAtNzAuNiwwIDAsLTM0NC43NyBjIDAsLTU4LjY5MSAtMy42OCwtMTA0LjUzMSAtNDQuOTMsLTE1Mi4yMTggLTM2LjY4LC00Mi4xOCAtOTYuMjgsLTY2LjAyIC0xNTMuMTQsLTY2LjAyIC0xMTcuMzcsMCAtMjA3LjI0LDc3Ljk0MSAtMjAyLjY0LDE5Ny4xNDUgbCAxMzAuMiwwIgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoMjIiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjxwYXRoCiAgICAgICAgICAgICBkPSJtIDIzMDEuNCw2NjIuNjk1IGMgMCw4MC43MDMgLTY2Ljk0LDE0NS44MTMgLTE0Ny42MywxNDUuODEzIC04My40NCwwIC0xNDcuNjMsLTY4Ljc4MSAtMTQ3LjYzLC0xNTEuMzAxIDAsLTc5Ljc4NSA2Ni45NCwtMTQ1LjgwMSAxNDUuOCwtMTQ1LjgwMSA4NC4zNSwwIDE0OS40Niw2Ny44NTIgMTQ5LjQ2LDE1MS4yODkgeiBtIC0xLjgzLC0xODEuNTQ3IGMgLTM1Ljc3LC01NC4wOTcgLTkzLjUzLC03OC44NTkgLTE1Ny43MiwtNzguODU5IC0xNDAuMywwIC0yNTEuMjQsMTE2LjQ0OSAtMjUxLjI0LDI1NC45MTggMCwxNDIuMTI5IDExMy43LDI2MC40MSAyNTYuNzQsMjYwLjQxIDYzLjI3LDAgMTE4LjI5LC0yOS4zMzYgMTUyLjIyLC04Mi41MjMgbCAwLDY5LjY4NyAxNzUuMTQsMCAwLC0xMDQuNTI3IC02MS40NCwwIDAsLTI4MC41OTggNjEuNDQsMCAwLC0xMDQuNTI3IC0xNzUuMTQsMCAwLDY2LjAxOSIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDI0IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0ibSAyNjIyLjMzLDU1Ny4yNTggYyAzLjY3LC00NC4wMTYgMzMuMDEsLTczLjM0OCA3OC44NiwtNzMuMzQ4IDMzLjkzLDAgNjYuOTMsMjMuODI0IDY2LjkzLDYwLjUwNCAwLDQ4LjYwNiAtNDUuODQsNTYuODU2IC04My40NCw2Ni45NDEgLTg1LjI4LDIyLjAwNCAtMTc4LjgxLDQ4LjYwNiAtMTc4LjgxLDE1NS44NzkgMCw5My41MzYgNzguODYsMTQ3LjYzMyAxNjUuOTgsMTQ3LjYzMyA0NCwwIDgzLjQzLC05LjE3NiAxMTAuOTQsLTQ0LjAwOCBsIDAsMzMuOTIyIDgyLjUzLDAgMCwtMTMyLjk2NSAtMTA4LjIxLDAgYyAtMS44MywzNC44NTYgLTI4LjQyLDU3Ljc3NCAtNjMuMjYsNTcuNzc0IC0zMC4yNiwwIC02Mi4zNSwtMTcuNDIyIC02Mi4zNSwtNTEuMzQ4IDAsLTQ1Ljg0NyA0NC45MywtNTUuOTMgODAuNjksLTY0LjE4IDg4LjAyLC0yMC4xNzUgMTgyLjQ3LC00Ny42OTUgMTgyLjQ3LC0xNTcuNzM0IDAsLTk5LjAyNyAtODMuNDQsLTE1NC4wMzkgLTE3NS4xMywtMTU0LjAzOSAtNDkuNTMsMCAtOTQuNDYsMTUuNTgyIC0xMjYuNTUsNTMuMTggbCAwLC00MC4zNCAtODUuMjcsMCAwLDE0Mi4xMjkgMTE0LjYyLDAiCiAgICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICAgICAgaWQ9InBhdGgyNiIKICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiM4YTQxODI7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiIC8+PHBhdGgKICAgICAgICAgICAgIGQ9Im0gMjk4OC4xOCw4MDAuMjU0IC02My4yNiwwIDAsMTA0LjUyNyAxNjUuMDUsMCAwLC03My4zNTUgYyAzMS4xOCw1MS4zNDcgNzguODYsODUuMjc3IDE0MS4yMSw4NS4yNzcgNjcuODUsMCAxMjQuNzEsLTQxLjI1OCAxNTIuMjEsLTEwMi42OTkgMjYuNiw2Mi4zNTEgOTIuNjIsMTAyLjY5OSAxNjAuNDcsMTAyLjY5OSA1My4xOSwwIDEwNS40NiwtMjIgMTQxLjIxLC02Mi4zNTEgMzguNTIsLTQ0LjkzOCAzOC41MiwtOTMuNTMyIDM4LjUyLC0xNDkuNDU3IGwgMCwtMTg1LjIzOSA2My4yNywwIDAsLTEwNC41MjcgLTIzOC40MiwwIDAsMTA0LjUyNyA2My4yOCwwIDAsMTU3LjcxNSBjIDAsMzIuMTAyIDAsNjAuNTI3IC0xNC42Nyw4OC45NTcgLTE4LjM0LDI2LjU4MiAtNDguNjEsNDAuMzQ0IC03OS43Nyw0MC4zNDQgLTMwLjI2LDAgLTYzLjI4LC0xMi44NDQgLTgyLjUzLC0zNi42NzIgLTIyLjkzLC0yOS4zNTUgLTIyLjkzLC01Ni44NjMgLTIyLjkzLC05Mi42MjkgbCAwLC0xNTcuNzE1IDYzLjI3LDAgMCwtMTA0LjUyNyAtMjM4LjQxLDAgMCwxMDQuNTI3IDYzLjI4LDAgMCwxNTAuMzgzIGMgMCwyOS4zNDggMCw2Ni4wMjMgLTE0LjY3LDkxLjY5OSAtMTUuNTksMjkuMzM2IC00Ny42OSw0NC45MzQgLTgwLjcsNDQuOTM0IC0zMS4xOCwwIC01Ny43NywtMTEuMDA4IC03Ny45NCwtMzUuNzc0IC0yNC43NywtMzAuMjUzIC0yNi42LC02Mi4zNDMgLTI2LjYsLTk5Ljk0MSBsIDAsLTE1MS4zMDEgNjMuMjcsMCAwLC0xMDQuNTI3IC0yMzguNCwwIDAsMTA0LjUyNyA2My4yNiwwIDAsMjgwLjU5OCIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDI4IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0ibSAzOTk4LjY2LDk1MS41NDcgLTExMS44NywwIDAsMTE4LjI5MyAxMTEuODcsMCAwLC0xMTguMjkzIHogbSAwLC00MzEuODkxIDYzLjI3LDAgMCwtMTA0LjUyNyAtMjM5LjMzLDAgMCwxMDQuNTI3IDY0LjE5LDAgMCwyODAuNTk4IC02My4yNywwIDAsMTA0LjUyNyAxNzUuMTQsMCAwLC0zODUuMTI1IgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoMzAiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjxwYXRoCiAgICAgICAgICAgICBkPSJtIDQxNTkuMTIsODAwLjI1NCAtNjMuMjcsMCAwLDEwNC41MjcgMTc1LjE0LDAgMCwtNjkuNjg3IGMgMjkuMzUsNTQuMTAxIDg0LjM2LDgwLjY5OSAxNDQuODcsODAuNjk5IDUzLjE5LDAgMTA1LjQ1LC0yMi4wMTYgMTQxLjIyLC02MC41MjcgNDAuMzQsLTQ0LjkzNCA0MS4yNiwtODguMDMyIDQxLjI2LC0xNDMuOTU3IGwgMCwtMTkxLjY1MyA2My4yNywwIDAsLTEwNC41MjcgLTIzOC40LDAgMCwxMDQuNTI3IDYzLjI2LDAgMCwxNTguNjM3IGMgMCwzMC4yNjIgMCw2MS40MzQgLTE5LjI2LDg4LjAzNSAtMjAuMTcsMjYuNTgyIC01My4xOCwzOS40MTQgLTg2LjE5LDM5LjQxNCAtMzMuOTMsMCAtNjguNzcsLTEzLjc1IC04OC45NCwtNDEuMjUgLTIxLjA5LC0yNy41IC0yMS4wOSwtNjkuNjg3IC0yMS4wOSwtMTAyLjcwNyBsIDAsLTE0Mi4xMjkgNjMuMjYsMCAwLC0xMDQuNTI3IC0yMzguNCwwIDAsMTA0LjUyNyA2My4yNywwIDAsMjgwLjU5OCIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDMyIgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0ibSA1MDgyLjQ4LDcwMy45NjUgYyAtMTkuMjQsNzAuNjA1IC04MS42LDExNS41NDcgLTE1NC4wNCwxMTUuNTQ3IC02Ni4wNCwwIC0xMjkuMywtNTEuMzQ4IC0xNDMuMDUsLTExNS41NDcgbCAyOTcuMDksMCB6IG0gODUuMjcsLTE0NC44ODMgYyAtMzguNTEsLTkzLjUyMyAtMTI5LjI3LC0xNTYuNzkzIC0yMzEuMDUsLTE1Ni43OTMgLTE0My4wNywwIC0yNTcuNjgsMTExLjg3MSAtMjU3LjY4LDI1NS44MzYgMCwxNDQuODgzIDEwOS4xMiwyNjEuMzI4IDI1NC45MSwyNjEuMzI4IDY3Ljg3LDAgMTM1LjcyLC0zMC4yNTggMTgzLjM5LC03OC44NjMgNDguNjIsLTUxLjM0NCA2OC43OSwtMTEzLjY5NSA2OC43OSwtMTgzLjM4MyBsIC0zLjY3LC0zOS40MzQgLTM5Ni4xMywwIGMgMTQuNjcsLTY3Ljg2MyA3Ny4wMywtMTE3LjM2MyAxNDYuNzIsLTExNy4zNjMgNDguNTksMCA5MC43NiwxOC4zMjggMTE4LjI4LDU4LjY3MiBsIDExNi40NCwwIgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoMzQiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjxwYXRoCiAgICAgICAgICAgICBkPSJtIDY5MC44OTUsODUwLjcwMyA5MC43NSwwIDIyLjU0MywzMS4wMzUgMCwyNDMuMTIyIC0xMzUuODI5LDAgMCwtMjQzLjE0MSAyMi41MzYsLTMxLjAxNiIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDM2IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0ibSA2MzIuMzk1LDc0Mi4yNTggMjguMDM5LDg2LjMwNCAtMjIuNTUxLDMxLjA0IC0yMzEuMjIzLDc1LjEyOCAtNDEuOTc2LC0xMjkuMTgzIDIzMS4yNTcsLTc1LjEzNyAzNi40NTQsMTEuODQ4IgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoMzgiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjxwYXRoCiAgICAgICAgICAgICBkPSJtIDcxNy40NDksNjUzLjEwNSAtNzMuNDEsNTMuMzYgLTM2LjQ4OCwtMTEuODc1IC0xNDIuOTAzLC0xOTYuNjkyIDEwOS44ODMsLTc5LjgyOCAxNDIuOTE4LDE5Ni43MDMgMCwzOC4zMzIiCiAgICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICAgICAgaWQ9InBhdGg0MCIKICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiM4YTQxODI7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiIC8+PHBhdGgKICAgICAgICAgICAgIGQ9Im0gODI4LjUyLDcwNi40NjUgLTczLjQyNiwtNTMuMzQgMC4wMTEsLTM4LjM1OSBMIDg5OC4wMDQsNDE4LjA3IDEwMDcuOSw0OTcuODk4IDg2NC45NzMsNjk0LjYwOSA4MjguNTIsNzA2LjQ2NSIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDQyIgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0ibSA4MTIuMDg2LDgyOC41ODYgMjguMDU1LC04Ni4zMiAzNi40ODQsLTExLjgzNiAyMzEuMjI1LDc1LjExNyAtNDEuOTcsMTI5LjE4MyAtMjMxLjIzOSwtNzUuMTQgLTIyLjU1NSwtMzEuMDA0IgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoNDQiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjxwYXRoCiAgICAgICAgICAgICBkPSJtIDczNi4zMDEsMTMzNS44OCBjIC0zMjMuMDQ3LDAgLTU4NS44NzUsLTI2Mi43OCAtNTg1Ljg3NSwtNTg1Ljc4MiAwLC0zMjMuMTE4IDI2Mi44MjgsLTU4NS45NzcgNTg1Ljg3NSwtNTg1Ljk3NyAzMjMuMDE5LDAgNTg1LjgwOSwyNjIuODU5IDU4NS44MDksNTg1Ljk3NyAwLDMyMy4wMDIgLTI2Mi43OSw1ODUuNzgyIC01ODUuODA5LDU4NS43ODIgbCAwLDAgeiBtIDAsLTExOC42MSBjIDI1Ny45NzIsMCA0NjcuMTg5LC0yMDkuMTMgNDY3LjE4OSwtNDY3LjE3MiAwLC0yNTguMTI5IC0yMDkuMjE3LC00NjcuMzQ4IC00NjcuMTg5LC00NjcuMzQ4IC0yNTguMDc0LDAgLTQ2Ny4yNTQsMjA5LjIxOSAtNDY3LjI1NCw0NjcuMzQ4IDAsMjU4LjA0MiAyMDkuMTgsNDY3LjE3MiA0NjcuMjU0LDQ2Ny4xNzIiCiAgICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICAgICAgaWQ9InBhdGg0NiIKICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiM4YTQxODI7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiIC8+PHBhdGgKICAgICAgICAgICAgIGQ9Im0gMTA5MS4xMyw2MTkuODgzIC0xNzUuNzcxLDU3LjEyMSAxMS42MjksMzUuODA4IDE3NS43NjIsLTU3LjEyMSAtMTEuNjIsLTM1LjgwOCIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDQ4IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0iTSA4NjYuOTU3LDkwMi4wNzQgODM2LjUsOTI0LjE5OSA5NDUuMTIxLDEwNzMuNzMgOTc1LjU4NiwxMDUxLjYxIDg2Ni45NTcsOTAyLjA3NCIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDUwIgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0iTSA2MDcuNDY1LDkwMy40NDUgNDk4Ljg1NSwxMDUyLjk3IDUyOS4zMiwxMDc1LjEgNjM3LjkzLDkyNS41NjYgNjA3LjQ2NSw5MDMuNDQ1IgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoNTIiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjxwYXRoCiAgICAgICAgICAgICBkPSJtIDM4MC42ODgsNjIyLjEyOSAtMTEuNjI2LDM1LjgwMSAxNzUuNzU4LDU3LjA5IDExLjYyMSwtMzUuODAxIC0xNzUuNzUzLC01Ny4wOSIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDU0IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0ibSA3MTYuMjg5LDM3Ni41OSAzNy42NDA2LDAgMCwxODQuODE2IC0zNy42NDA2LDAgMCwtMTg0LjgxNiB6IgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoNTYiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjwvZz48L2c+PC9nPjwvZz48L3N2Zz4=') no-repeat, none; -webkit-background-size: 100%; -moz-background-size: 100%; -o-background-size: 100%; background-size: 100%; display: block; float: left; width: 90px; height: 25px; }
10
+ .jasmine_html-reporter .banner .version { margin-left: 14px; position: relative; top: 6px; }
11
+ .jasmine_html-reporter .banner .duration { position: absolute; right: 14px; top: 6px; }
12
+ .jasmine_html-reporter #jasmine_content { position: fixed; right: 100%; }
13
+ .jasmine_html-reporter .version { color: #aaaaaa; }
14
+ .jasmine_html-reporter .banner { margin-top: 14px; }
15
+ .jasmine_html-reporter .duration { color: #aaaaaa; float: right; }
16
+ .jasmine_html-reporter .symbol-summary { overflow: hidden; *zoom: 1; margin: 14px 0; }
17
+ .jasmine_html-reporter .symbol-summary li { display: inline-block; height: 8px; width: 14px; font-size: 16px; }
18
+ .jasmine_html-reporter .symbol-summary li.passed { font-size: 14px; }
19
+ .jasmine_html-reporter .symbol-summary li.passed:before { color: #007069; content: "\02022"; }
20
+ .jasmine_html-reporter .symbol-summary li.failed { line-height: 9px; }
21
+ .jasmine_html-reporter .symbol-summary li.failed:before { color: #ca3a11; content: "\d7"; font-weight: bold; margin-left: -1px; }
22
+ .jasmine_html-reporter .symbol-summary li.disabled { font-size: 14px; }
23
+ .jasmine_html-reporter .symbol-summary li.disabled:before { color: #bababa; content: "\02022"; }
24
+ .jasmine_html-reporter .symbol-summary li.pending { line-height: 17px; }
25
+ .jasmine_html-reporter .symbol-summary li.pending:before { color: #ba9d37; content: "*"; }
26
+ .jasmine_html-reporter .exceptions { color: #fff; float: right; margin-top: 5px; margin-right: 5px; }
27
+ .jasmine_html-reporter .bar { line-height: 28px; font-size: 14px; display: block; color: #eee; }
28
+ .jasmine_html-reporter .bar.failed { background-color: #ca3a11; }
29
+ .jasmine_html-reporter .bar.passed { background-color: #007069; }
30
+ .jasmine_html-reporter .bar.skipped { background-color: #bababa; }
31
+ .jasmine_html-reporter .bar.menu { background-color: #fff; color: #aaaaaa; }
32
+ .jasmine_html-reporter .bar.menu a { color: #333333; }
33
+ .jasmine_html-reporter .bar a { color: white; }
34
+ .jasmine_html-reporter.spec-list .bar.menu.failure-list, .jasmine_html-reporter.spec-list .results .failures { display: none; }
35
+ .jasmine_html-reporter.failure-list .bar.menu.spec-list, .jasmine_html-reporter.failure-list .summary { display: none; }
36
+ .jasmine_html-reporter .running-alert { background-color: #666666; }
37
+ .jasmine_html-reporter .results { margin-top: 14px; }
38
+ .jasmine_html-reporter.showDetails .summaryMenuItem { font-weight: normal; text-decoration: inherit; }
39
+ .jasmine_html-reporter.showDetails .summaryMenuItem:hover { text-decoration: underline; }
40
+ .jasmine_html-reporter.showDetails .detailsMenuItem { font-weight: bold; text-decoration: underline; }
41
+ .jasmine_html-reporter.showDetails .summary { display: none; }
42
+ .jasmine_html-reporter.showDetails #details { display: block; }
43
+ .jasmine_html-reporter .summaryMenuItem { font-weight: bold; text-decoration: underline; }
44
+ .jasmine_html-reporter .summary { margin-top: 14px; }
45
+ .jasmine_html-reporter .summary ul { list-style-type: none; margin-left: 14px; padding-top: 0; padding-left: 0; }
46
+ .jasmine_html-reporter .summary ul.suite { margin-top: 7px; margin-bottom: 7px; }
47
+ .jasmine_html-reporter .summary li.passed a { color: #007069; }
48
+ .jasmine_html-reporter .summary li.failed a { color: #ca3a11; }
49
+ .jasmine_html-reporter .summary li.empty a { color: #ba9d37; }
50
+ .jasmine_html-reporter .summary li.pending a { color: #ba9d37; }
51
+ .jasmine_html-reporter .description + .suite { margin-top: 0; }
52
+ .jasmine_html-reporter .suite { margin-top: 14px; }
53
+ .jasmine_html-reporter .suite a { color: #333333; }
54
+ .jasmine_html-reporter .failures .spec-detail { margin-bottom: 28px; }
55
+ .jasmine_html-reporter .failures .spec-detail .description { background-color: #ca3a11; }
56
+ .jasmine_html-reporter .failures .spec-detail .description a { color: white; }
57
+ .jasmine_html-reporter .result-message { padding-top: 14px; color: #333333; white-space: pre; }
58
+ .jasmine_html-reporter .result-message span.result { display: block; }
59
+ .jasmine_html-reporter .stack-trace { margin: 5px 0 0 0; max-height: 224px; overflow: auto; line-height: 18px; color: #666666; border: 1px solid #ddd; background: white; white-space: pre; }
@@ -1,5 +1,5 @@
1
1
  /*
2
- Copyright (c) 2008-2013 Pivotal Labs
2
+ Copyright (c) 2008-2014 Pivotal Labs
3
3
 
4
4
  Permission is hereby granted, free of charge, to any person obtaining
5
5
  a copy of this software and associated documentation files (the
@@ -21,7 +21,7 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21
21
  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
22
  */
23
23
  function getJasmineRequireObj() {
24
- if (typeof module !== "undefined" && module.exports) {
24
+ if (typeof module !== 'undefined' && module.exports) {
25
25
  return exports;
26
26
  } else {
27
27
  window.jasmineRequire = window.jasmineRequire || {};
@@ -36,6 +36,7 @@ getJasmineRequireObj().core = function(jRequire) {
36
36
  j$.util = jRequire.util();
37
37
  j$.Any = jRequire.Any();
38
38
  j$.CallTracker = jRequire.CallTracker();
39
+ j$.MockDate = jRequire.MockDate();
39
40
  j$.Clock = jRequire.Clock();
40
41
  j$.DelayedFunctionScheduler = jRequire.DelayedFunctionScheduler();
41
42
  j$.Env = jRequire.Env(j$);
@@ -46,7 +47,7 @@ getJasmineRequireObj().core = function(jRequire) {
46
47
  j$.matchersUtil = jRequire.matchersUtil(j$);
47
48
  j$.ObjectContaining = jRequire.ObjectContaining(j$);
48
49
  j$.pp = jRequire.pp(j$);
49
- j$.QueueRunner = jRequire.QueueRunner();
50
+ j$.QueueRunner = jRequire.QueueRunner(j$);
50
51
  j$.ReportDispatcher = jRequire.ReportDispatcher();
51
52
  j$.Spec = jRequire.Spec(j$);
52
53
  j$.SpyStrategy = jRequire.SpyStrategy();
@@ -61,23 +62,23 @@ getJasmineRequireObj().core = function(jRequire) {
61
62
 
62
63
  getJasmineRequireObj().requireMatchers = function(jRequire, j$) {
63
64
  var availableMatchers = [
64
- "toBe",
65
- "toBeCloseTo",
66
- "toBeDefined",
67
- "toBeFalsy",
68
- "toBeGreaterThan",
69
- "toBeLessThan",
70
- "toBeNaN",
71
- "toBeNull",
72
- "toBeTruthy",
73
- "toBeUndefined",
74
- "toContain",
75
- "toEqual",
76
- "toHaveBeenCalled",
77
- "toHaveBeenCalledWith",
78
- "toMatch",
79
- "toThrow",
80
- "toThrowError"
65
+ 'toBe',
66
+ 'toBeCloseTo',
67
+ 'toBeDefined',
68
+ 'toBeFalsy',
69
+ 'toBeGreaterThan',
70
+ 'toBeLessThan',
71
+ 'toBeNaN',
72
+ 'toBeNull',
73
+ 'toBeTruthy',
74
+ 'toBeUndefined',
75
+ 'toContain',
76
+ 'toEqual',
77
+ 'toHaveBeenCalled',
78
+ 'toHaveBeenCalledWith',
79
+ 'toMatch',
80
+ 'toThrow',
81
+ 'toThrowError'
81
82
  ],
82
83
  matchers = {};
83
84
 
@@ -89,104 +90,108 @@ getJasmineRequireObj().requireMatchers = function(jRequire, j$) {
89
90
  return matchers;
90
91
  };
91
92
 
92
- getJasmineRequireObj().base = function(j$) {
93
- j$.unimplementedMethod_ = function() {
94
- throw new Error("unimplemented method");
95
- };
93
+ getJasmineRequireObj().base = (function (jasmineGlobal) {
94
+ if (typeof module !== 'undefined' && module.exports) {
95
+ jasmineGlobal = global;
96
+ }
96
97
 
97
- j$.MAX_PRETTY_PRINT_DEPTH = 40;
98
- j$.DEFAULT_TIMEOUT_INTERVAL = 5000;
98
+ return function(j$) {
99
+ j$.unimplementedMethod_ = function() {
100
+ throw new Error('unimplemented method');
101
+ };
99
102
 
100
- j$.getGlobal = (function() {
101
- var jasmineGlobal = eval.call(null, "this");
102
- return function() {
103
+ j$.MAX_PRETTY_PRINT_DEPTH = 40;
104
+ j$.MAX_PRETTY_PRINT_ARRAY_LENGTH = 100;
105
+ j$.DEFAULT_TIMEOUT_INTERVAL = 5000;
106
+
107
+ j$.getGlobal = function() {
103
108
  return jasmineGlobal;
104
109
  };
105
- })();
106
110
 
107
- j$.getEnv = function(options) {
108
- var env = j$.currentEnv_ = j$.currentEnv_ || new j$.Env(options);
109
- //jasmine. singletons in here (setTimeout blah blah).
110
- return env;
111
- };
111
+ j$.getEnv = function(options) {
112
+ var env = j$.currentEnv_ = j$.currentEnv_ || new j$.Env(options);
113
+ //jasmine. singletons in here (setTimeout blah blah).
114
+ return env;
115
+ };
112
116
 
113
- j$.isArray_ = function(value) {
114
- return j$.isA_("Array", value);
115
- };
117
+ j$.isArray_ = function(value) {
118
+ return j$.isA_('Array', value);
119
+ };
116
120
 
117
- j$.isString_ = function(value) {
118
- return j$.isA_("String", value);
119
- };
121
+ j$.isString_ = function(value) {
122
+ return j$.isA_('String', value);
123
+ };
120
124
 
121
- j$.isNumber_ = function(value) {
122
- return j$.isA_("Number", value);
123
- };
125
+ j$.isNumber_ = function(value) {
126
+ return j$.isA_('Number', value);
127
+ };
124
128
 
125
- j$.isA_ = function(typeName, value) {
126
- return Object.prototype.toString.apply(value) === '[object ' + typeName + ']';
127
- };
129
+ j$.isA_ = function(typeName, value) {
130
+ return Object.prototype.toString.apply(value) === '[object ' + typeName + ']';
131
+ };
128
132
 
129
- j$.isDomNode = function(obj) {
130
- return obj.nodeType > 0;
131
- };
133
+ j$.isDomNode = function(obj) {
134
+ return obj.nodeType > 0;
135
+ };
132
136
 
133
- j$.any = function(clazz) {
134
- return new j$.Any(clazz);
135
- };
137
+ j$.any = function(clazz) {
138
+ return new j$.Any(clazz);
139
+ };
136
140
 
137
- j$.objectContaining = function(sample) {
138
- return new j$.ObjectContaining(sample);
139
- };
141
+ j$.objectContaining = function(sample) {
142
+ return new j$.ObjectContaining(sample);
143
+ };
140
144
 
141
- j$.createSpy = function(name, originalFn) {
142
-
143
- var spyStrategy = new j$.SpyStrategy({
144
- name: name,
145
- fn: originalFn,
146
- getSpy: function() { return spy; }
147
- }),
148
- callTracker = new j$.CallTracker(),
149
- spy = function() {
150
- callTracker.track({
151
- object: this,
152
- args: Array.prototype.slice.apply(arguments)
153
- });
154
- return spyStrategy.exec.apply(this, arguments);
155
- };
145
+ j$.createSpy = function(name, originalFn) {
156
146
 
157
- for (var prop in originalFn) {
158
- if (prop === 'and' || prop === 'calls') {
159
- throw new Error("Jasmine spies would overwrite the 'and' and 'calls' properties on the object being spied upon");
160
- }
147
+ var spyStrategy = new j$.SpyStrategy({
148
+ name: name,
149
+ fn: originalFn,
150
+ getSpy: function() { return spy; }
151
+ }),
152
+ callTracker = new j$.CallTracker(),
153
+ spy = function() {
154
+ callTracker.track({
155
+ object: this,
156
+ args: Array.prototype.slice.apply(arguments)
157
+ });
158
+ return spyStrategy.exec.apply(this, arguments);
159
+ };
161
160
 
162
- spy[prop] = originalFn[prop];
163
- }
161
+ for (var prop in originalFn) {
162
+ if (prop === 'and' || prop === 'calls') {
163
+ throw new Error('Jasmine spies would overwrite the \'and\' and \'calls\' properties on the object being spied upon');
164
+ }
164
165
 
165
- spy.and = spyStrategy;
166
- spy.calls = callTracker;
166
+ spy[prop] = originalFn[prop];
167
+ }
167
168
 
168
- return spy;
169
- };
169
+ spy.and = spyStrategy;
170
+ spy.calls = callTracker;
170
171
 
171
- j$.isSpy = function(putativeSpy) {
172
- if (!putativeSpy) {
173
- return false;
174
- }
175
- return putativeSpy.and instanceof j$.SpyStrategy &&
176
- putativeSpy.calls instanceof j$.CallTracker;
177
- };
172
+ return spy;
173
+ };
178
174
 
179
- j$.createSpyObj = function(baseName, methodNames) {
180
- if (!j$.isArray_(methodNames) || methodNames.length === 0) {
181
- throw "createSpyObj requires a non-empty array of method names to create spies for";
182
- }
183
- var obj = {};
184
- for (var i = 0; i < methodNames.length; i++) {
185
- obj[methodNames[i]] = j$.createSpy(baseName + '.' + methodNames[i]);
186
- }
187
- return obj;
175
+ j$.isSpy = function(putativeSpy) {
176
+ if (!putativeSpy) {
177
+ return false;
178
+ }
179
+ return putativeSpy.and instanceof j$.SpyStrategy &&
180
+ putativeSpy.calls instanceof j$.CallTracker;
181
+ };
182
+
183
+ j$.createSpyObj = function(baseName, methodNames) {
184
+ if (!j$.isArray_(methodNames) || methodNames.length === 0) {
185
+ throw 'createSpyObj requires a non-empty array of method names to create spies for';
186
+ }
187
+ var obj = {};
188
+ for (var i = 0; i < methodNames.length; i++) {
189
+ obj[methodNames[i]] = j$.createSpy(baseName + '.' + methodNames[i]);
190
+ }
191
+ return obj;
192
+ };
188
193
  };
189
- };
194
+ })(this);
190
195
 
191
196
  getJasmineRequireObj().util = function() {
192
197
 
@@ -220,6 +225,16 @@ getJasmineRequireObj().util = function() {
220
225
  return obj === void 0;
221
226
  };
222
227
 
228
+ util.arrayContains = function(array, search) {
229
+ var i = array.length;
230
+ while (i--) {
231
+ if (array[i] == search) {
232
+ return true;
233
+ }
234
+ }
235
+ return false;
236
+ };
237
+
223
238
  return util;
224
239
  };
225
240
 
@@ -239,8 +254,6 @@ getJasmineRequireObj().Spec = function(j$) {
239
254
  this.queueRunnerFactory = attrs.queueRunnerFactory || function() {};
240
255
  this.catchingExceptions = attrs.catchingExceptions || function() { return true; };
241
256
 
242
- this.timer = attrs.timer || {setTimeout: setTimeout, clearTimeout: clearTimeout};
243
-
244
257
  if (!this.fn) {
245
258
  this.pend();
246
259
  }
@@ -249,15 +262,18 @@ getJasmineRequireObj().Spec = function(j$) {
249
262
  id: this.id,
250
263
  description: this.description,
251
264
  fullName: this.getFullName(),
252
- failedExpectations: []
265
+ failedExpectations: [],
266
+ passedExpectations: []
253
267
  };
254
268
  }
255
269
 
256
270
  Spec.prototype.addExpectationResult = function(passed, data) {
271
+ var expectationResult = this.expectationResultFactory(data);
257
272
  if (passed) {
258
- return;
273
+ this.result.passedExpectations.push(expectationResult);
274
+ } else {
275
+ this.result.failedExpectations.push(expectationResult);
259
276
  }
260
- this.result.failedExpectations.push(this.expectationResultFactory(data));
261
277
  };
262
278
 
263
279
  Spec.prototype.expect = function(actual) {
@@ -265,8 +281,7 @@ getJasmineRequireObj().Spec = function(j$) {
265
281
  };
266
282
 
267
283
  Spec.prototype.execute = function(onComplete) {
268
- var self = this,
269
- timeout;
284
+ var self = this;
270
285
 
271
286
  this.onStart(this);
272
287
 
@@ -275,52 +290,26 @@ getJasmineRequireObj().Spec = function(j$) {
275
290
  return;
276
291
  }
277
292
 
278
- function timeoutable(fn) {
279
- return function(done) {
280
- timeout = Function.prototype.apply.apply(self.timer.setTimeout, [j$.getGlobal(), [function() {
281
- onException(new Error('Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.'));
282
- done();
283
- }, j$.DEFAULT_TIMEOUT_INTERVAL]]);
284
-
285
- var callDone = function() {
286
- clearTimeoutable();
287
- done();
288
- };
289
-
290
- fn.call(this, callDone); //TODO: do we care about more than 1 arg?
291
- };
292
- }
293
-
294
- function clearTimeoutable() {
295
- Function.prototype.apply.apply(self.timer.clearTimeout, [j$.getGlobal(), [timeout]]);
296
- timeout = void 0;
297
- }
298
-
299
- var allFns = this.beforeFns().concat(this.fn).concat(this.afterFns()),
300
- allTimeoutableFns = [];
301
- for (var i = 0; i < allFns.length; i++) {
302
- var fn = allFns[i];
303
- allTimeoutableFns.push(fn.length > 0 ? timeoutable(fn) : fn);
304
- }
293
+ var allFns = this.beforeFns().concat(this.fn).concat(this.afterFns());
305
294
 
306
295
  this.queueRunnerFactory({
307
- fns: allTimeoutableFns,
296
+ fns: allFns,
308
297
  onException: onException,
309
- onComplete: complete
298
+ onComplete: complete,
299
+ enforceTimeout: function() { return true; }
310
300
  });
311
301
 
312
302
  function onException(e) {
313
- clearTimeoutable();
314
303
  if (Spec.isPendingSpecException(e)) {
315
304
  self.pend();
316
305
  return;
317
306
  }
318
307
 
319
308
  self.addExpectationResult(false, {
320
- matcherName: "",
309
+ matcherName: '',
321
310
  passed: false,
322
- expected: "",
323
- actual: "",
311
+ expected: '',
312
+ actual: '',
324
313
  error: e
325
314
  });
326
315
  }
@@ -363,16 +352,16 @@ getJasmineRequireObj().Spec = function(j$) {
363
352
  return this.getSpecName(this);
364
353
  };
365
354
 
366
- Spec.pendingSpecExceptionMessage = "=> marked Pending";
355
+ Spec.pendingSpecExceptionMessage = '=> marked Pending';
367
356
 
368
357
  Spec.isPendingSpecException = function(e) {
369
- return e.toString().indexOf(Spec.pendingSpecExceptionMessage) !== -1;
358
+ return !!(e && e.toString && e.toString().indexOf(Spec.pendingSpecExceptionMessage) !== -1);
370
359
  };
371
360
 
372
361
  return Spec;
373
362
  };
374
363
 
375
- if (typeof window == void 0 && typeof exports == "object") {
364
+ if (typeof window == void 0 && typeof exports == 'object') {
376
365
  exports.Spec = jasmineRequire.Spec;
377
366
  }
378
367
 
@@ -389,7 +378,7 @@ getJasmineRequireObj().Env = function(j$) {
389
378
 
390
379
  var realSetTimeout = j$.getGlobal().setTimeout;
391
380
  var realClearTimeout = j$.getGlobal().clearTimeout;
392
- this.clock = new j$.Clock(global, new j$.DelayedFunctionScheduler());
381
+ this.clock = new j$.Clock(global, new j$.DelayedFunctionScheduler(), new j$.MockDate(global));
393
382
 
394
383
  var runnableLookupTable = {};
395
384
 
@@ -399,12 +388,12 @@ getJasmineRequireObj().Env = function(j$) {
399
388
  var currentSuite = null;
400
389
 
401
390
  var reporter = new j$.ReportDispatcher([
402
- "jasmineStarted",
403
- "jasmineDone",
404
- "suiteStarted",
405
- "suiteDone",
406
- "specStarted",
407
- "specDone"
391
+ 'jasmineStarted',
392
+ 'jasmineDone',
393
+ 'suiteStarted',
394
+ 'suiteDone',
395
+ 'specStarted',
396
+ 'specDone'
408
397
  ]);
409
398
 
410
399
  this.specFilter = function() {
@@ -514,6 +503,7 @@ getJasmineRequireObj().Env = function(j$) {
514
503
  var queueRunnerFactory = function(options) {
515
504
  options.catchException = catchException;
516
505
  options.clearStack = options.clearStack || clearStack;
506
+ options.timer = {setTimeout: realSetTimeout, clearTimeout: realClearTimeout};
517
507
 
518
508
  new j$.QueueRunner(options).execute();
519
509
  };
@@ -558,7 +548,7 @@ getJasmineRequireObj().Env = function(j$) {
558
548
 
559
549
  this.spyOn = function(obj, methodName) {
560
550
  if (j$.util.isUndefined(obj)) {
561
- throw new Error("spyOn could not find an object to spy upon for " + methodName + "()");
551
+ throw new Error('spyOn could not find an object to spy upon for ' + methodName + '()');
562
552
  }
563
553
 
564
554
  if (j$.util.isUndefined(obj[methodName])) {
@@ -616,7 +606,7 @@ getJasmineRequireObj().Env = function(j$) {
616
606
  }
617
607
 
618
608
  if (declarationError) {
619
- this.it("encountered a declaration exception", function() {
609
+ this.it('encountered a declaration exception', function() {
620
610
  throw declarationError;
621
611
  });
622
612
  }
@@ -649,8 +639,7 @@ getJasmineRequireObj().Env = function(j$) {
649
639
  description: description,
650
640
  expectationResultFactory: expectationResultFactory,
651
641
  queueRunnerFactory: queueRunnerFactory,
652
- fn: fn,
653
- timer: {setTimeout: realSetTimeout, clearTimeout: realClearTimeout}
642
+ fn: fn
654
643
  });
655
644
 
656
645
  runnableLookupTable[spec.id] = spec;
@@ -695,6 +684,10 @@ getJasmineRequireObj().Env = function(j$) {
695
684
  };
696
685
 
697
686
  this.expect = function(actual) {
687
+ if (!currentSpec) {
688
+ throw new Error('\'expect\' was used when there was no current spec, this could be because an asynchronous test timed out');
689
+ }
690
+
698
691
  return currentSpec.expect(actual);
699
692
  };
700
693
 
@@ -723,7 +716,7 @@ getJasmineRequireObj().JsApiReporter = function() {
723
716
 
724
717
  function JsApiReporter(options) {
725
718
  var timer = options.timer || noopTimer,
726
- status = "loaded";
719
+ status = 'loaded';
727
720
 
728
721
  this.started = false;
729
722
  this.finished = false;
@@ -819,7 +812,7 @@ getJasmineRequireObj().Any = function() {
819
812
  };
820
813
 
821
814
  Any.prototype.jasmineToString = function() {
822
- return '<jasmine.any(' + this.expectedClass + ')>';
815
+ return '<jasmine.any(' + this.expectedObject + ')>';
823
816
  };
824
817
 
825
818
  return Any;
@@ -877,7 +870,7 @@ getJasmineRequireObj().CallTracker = function() {
877
870
  };
878
871
 
879
872
  getJasmineRequireObj().Clock = function() {
880
- function Clock(global, delayedFunctionScheduler) {
873
+ function Clock(global, delayedFunctionScheduler, mockDate) {
881
874
  var self = this,
882
875
  realTimingFunctions = {
883
876
  setTimeout: global.setTimeout,
@@ -894,23 +887,32 @@ getJasmineRequireObj().Clock = function() {
894
887
  installed = false,
895
888
  timer;
896
889
 
890
+
897
891
  self.install = function() {
898
892
  replace(global, fakeTimingFunctions);
899
893
  timer = fakeTimingFunctions;
900
894
  installed = true;
895
+
896
+ return self;
901
897
  };
902
898
 
903
899
  self.uninstall = function() {
904
900
  delayedFunctionScheduler.reset();
901
+ mockDate.uninstall();
905
902
  replace(global, realTimingFunctions);
903
+
906
904
  timer = realTimingFunctions;
907
905
  installed = false;
908
906
  };
909
907
 
908
+ self.mockDate = function(initialDate) {
909
+ mockDate.install(initialDate);
910
+ };
911
+
910
912
  self.setTimeout = function(fn, delay, params) {
911
913
  if (legacyIE()) {
912
914
  if (arguments.length > 2) {
913
- throw new Error("IE < 9 cannot support extra params to setTimeout without a polyfill");
915
+ throw new Error('IE < 9 cannot support extra params to setTimeout without a polyfill');
914
916
  }
915
917
  return timer.setTimeout(fn, delay);
916
918
  }
@@ -920,7 +922,7 @@ getJasmineRequireObj().Clock = function() {
920
922
  self.setInterval = function(fn, delay, params) {
921
923
  if (legacyIE()) {
922
924
  if (arguments.length > 2) {
923
- throw new Error("IE < 9 cannot support extra params to setInterval without a polyfill");
925
+ throw new Error('IE < 9 cannot support extra params to setInterval without a polyfill');
924
926
  }
925
927
  return timer.setInterval(fn, delay);
926
928
  }
@@ -937,9 +939,10 @@ getJasmineRequireObj().Clock = function() {
937
939
 
938
940
  self.tick = function(millis) {
939
941
  if (installed) {
942
+ mockDate.tick(millis);
940
943
  delayedFunctionScheduler.tick(millis);
941
944
  } else {
942
- throw new Error("Mock clock is not installed, use jasmine.clock().install()");
945
+ throw new Error('Mock clock is not installed, use jasmine.clock().install()');
943
946
  }
944
947
  };
945
948
 
@@ -973,7 +976,7 @@ getJasmineRequireObj().Clock = function() {
973
976
  }
974
977
 
975
978
  function argSlice(argsObj, n) {
976
- return Array.prototype.slice.call(argsObj, 2);
979
+ return Array.prototype.slice.call(argsObj, n);
977
980
  }
978
981
  }
979
982
 
@@ -1129,16 +1132,20 @@ getJasmineRequireObj().DelayedFunctionScheduler = function() {
1129
1132
  getJasmineRequireObj().ExceptionFormatter = function() {
1130
1133
  function ExceptionFormatter() {
1131
1134
  this.message = function(error) {
1132
- var message = error.name +
1133
- ': ' +
1134
- error.message;
1135
+ var message = '';
1136
+
1137
+ if (error.name && error.message) {
1138
+ message += error.name + ': ' + error.message;
1139
+ } else {
1140
+ message += error.toString() + ' thrown';
1141
+ }
1135
1142
 
1136
1143
  if (error.fileName || error.sourceURL) {
1137
- message += " in " + (error.fileName || error.sourceURL);
1144
+ message += ' in ' + (error.fileName || error.sourceURL);
1138
1145
  }
1139
1146
 
1140
1147
  if (error.line || error.lineNumber) {
1141
- message += " (line " + (error.line || error.lineNumber) + ")";
1148
+ message += ' (line ' + (error.line || error.lineNumber) + ')';
1142
1149
  }
1143
1150
 
1144
1151
  return message;
@@ -1172,7 +1179,7 @@ getJasmineRequireObj().Expectation = function() {
1172
1179
  return function() {
1173
1180
  var args = Array.prototype.slice.call(arguments, 0),
1174
1181
  expected = args.slice(0),
1175
- message = "";
1182
+ message = '';
1176
1183
 
1177
1184
  args.unshift(this.actual);
1178
1185
 
@@ -1197,7 +1204,11 @@ getJasmineRequireObj().Expectation = function() {
1197
1204
  args.unshift(name);
1198
1205
  message = this.util.buildFailureMessage.apply(null, args);
1199
1206
  } else {
1200
- message = result.message;
1207
+ if (Object.prototype.toString.apply(result.message) === '[object Function]') {
1208
+ message = result.message();
1209
+ } else {
1210
+ message = result.message;
1211
+ }
1201
1212
  }
1202
1213
  }
1203
1214
 
@@ -1273,18 +1284,18 @@ getJasmineRequireObj().buildExpectationResult = function() {
1273
1284
 
1274
1285
  function message() {
1275
1286
  if (options.passed) {
1276
- return "Passed.";
1287
+ return 'Passed.';
1277
1288
  } else if (options.message) {
1278
1289
  return options.message;
1279
1290
  } else if (options.error) {
1280
1291
  return messageFormatter(options.error);
1281
1292
  }
1282
- return "";
1293
+ return '';
1283
1294
  }
1284
1295
 
1285
1296
  function stack() {
1286
1297
  if (options.passed) {
1287
- return "";
1298
+ return '';
1288
1299
  }
1289
1300
 
1290
1301
  var error = options.error;
@@ -1302,6 +1313,73 @@ getJasmineRequireObj().buildExpectationResult = function() {
1302
1313
  return buildExpectationResult;
1303
1314
  };
1304
1315
 
1316
+ getJasmineRequireObj().MockDate = function() {
1317
+ function MockDate(global) {
1318
+ var self = this;
1319
+ var currentTime = 0;
1320
+
1321
+ if (!global || !global.Date) {
1322
+ self.install = function() {};
1323
+ self.tick = function() {};
1324
+ self.uninstall = function() {};
1325
+ return self;
1326
+ }
1327
+
1328
+ var GlobalDate = global.Date;
1329
+
1330
+ self.install = function(mockDate) {
1331
+ if (mockDate instanceof GlobalDate) {
1332
+ currentTime = mockDate.getTime();
1333
+ } else {
1334
+ currentTime = new GlobalDate().getTime();
1335
+ }
1336
+
1337
+ global.Date = FakeDate;
1338
+ };
1339
+
1340
+ self.tick = function(millis) {
1341
+ millis = millis || 0;
1342
+ currentTime = currentTime + millis;
1343
+ };
1344
+
1345
+ self.uninstall = function() {
1346
+ currentTime = 0;
1347
+ global.Date = GlobalDate;
1348
+ };
1349
+
1350
+ createDateProperties();
1351
+
1352
+ return self;
1353
+
1354
+ function FakeDate() {
1355
+ if (arguments.length === 0) {
1356
+ return new GlobalDate(currentTime);
1357
+ } else {
1358
+ return new GlobalDate(arguments[0], arguments[1], arguments[2],
1359
+ arguments[3], arguments[4], arguments[5], arguments[6]);
1360
+ }
1361
+ }
1362
+
1363
+ function createDateProperties() {
1364
+
1365
+ FakeDate.now = function() {
1366
+ if (GlobalDate.now) {
1367
+ return currentTime;
1368
+ } else {
1369
+ throw new Error('Browser does not support Date.now()');
1370
+ }
1371
+ };
1372
+
1373
+ FakeDate.toSource = GlobalDate.toSource;
1374
+ FakeDate.toString = GlobalDate.toString;
1375
+ FakeDate.parse = GlobalDate.parse;
1376
+ FakeDate.UTC = GlobalDate.UTC;
1377
+ }
1378
+ }
1379
+
1380
+ return MockDate;
1381
+ };
1382
+
1305
1383
  getJasmineRequireObj().ObjectContaining = function(j$) {
1306
1384
 
1307
1385
  function ObjectContaining(sample) {
@@ -1309,7 +1387,7 @@ getJasmineRequireObj().ObjectContaining = function(j$) {
1309
1387
  }
1310
1388
 
1311
1389
  ObjectContaining.prototype.jasmineMatches = function(other, mismatchKeys, mismatchValues) {
1312
- if (typeof(this.sample) !== "object") { throw new Error("You must provide an object to objectContaining, not '"+this.sample+"'."); }
1390
+ if (typeof(this.sample) !== 'object') { throw new Error('You must provide an object to objectContaining, not \''+this.sample+'\'.'); }
1313
1391
 
1314
1392
  mismatchKeys = mismatchKeys || [];
1315
1393
  mismatchValues = mismatchValues || [];
@@ -1320,10 +1398,10 @@ getJasmineRequireObj().ObjectContaining = function(j$) {
1320
1398
 
1321
1399
  for (var property in this.sample) {
1322
1400
  if (!hasKey(other, property) && hasKey(this.sample, property)) {
1323
- mismatchKeys.push("expected has key '" + property + "', but missing from actual.");
1401
+ mismatchKeys.push('expected has key \'' + property + '\', but missing from actual.');
1324
1402
  }
1325
- else if (!j$.matchersUtil.equals(this.sample[property], other[property])) {
1326
- mismatchValues.push("'" + property + "' was '" + (other[property] ? j$.util.htmlEscape(other[property].toString()) : other[property]) + "' in actual, but was '" + (this.sample[property] ? j$.util.htmlEscape(this.sample[property].toString()) : this.sample[property]) + "' in expected.");
1403
+ else if (!j$.matchersUtil.equals(other[property], this.sample[property])) {
1404
+ mismatchValues.push('\'' + property + '\' was \'' + (other[property] ? j$.util.htmlEscape(other[property].toString()) : other[property]) + '\' in actual, but was \'' + (this.sample[property] ? j$.util.htmlEscape(this.sample[property].toString()) : this.sample[property]) + '\' in expected.');
1327
1405
  }
1328
1406
  }
1329
1407
 
@@ -1331,7 +1409,7 @@ getJasmineRequireObj().ObjectContaining = function(j$) {
1331
1409
  };
1332
1410
 
1333
1411
  ObjectContaining.prototype.jasmineToString = function() {
1334
- return "<jasmine.objectContaining(" + j$.pp(this.sample) + ")>";
1412
+ return '<jasmine.objectContaining(' + j$.pp(this.sample) + ')>';
1335
1413
  };
1336
1414
 
1337
1415
  return ObjectContaining;
@@ -1341,6 +1419,7 @@ getJasmineRequireObj().pp = function(j$) {
1341
1419
 
1342
1420
  function PrettyPrinter() {
1343
1421
  this.ppNestLevel_ = 0;
1422
+ this.seen = [];
1344
1423
  }
1345
1424
 
1346
1425
  PrettyPrinter.prototype.format = function(value) {
@@ -1350,6 +1429,8 @@ getJasmineRequireObj().pp = function(j$) {
1350
1429
  this.emitScalar('undefined');
1351
1430
  } else if (value === null) {
1352
1431
  this.emitScalar('null');
1432
+ } else if (value === 0 && 1/value === -Infinity) {
1433
+ this.emitScalar('-0');
1353
1434
  } else if (value === j$.getGlobal()) {
1354
1435
  this.emitScalar('<global>');
1355
1436
  } else if (value.jasmineToString) {
@@ -1357,7 +1438,7 @@ getJasmineRequireObj().pp = function(j$) {
1357
1438
  } else if (typeof value === 'string') {
1358
1439
  this.emitString(value);
1359
1440
  } else if (j$.isSpy(value)) {
1360
- this.emitScalar("spy on " + value.and.identity());
1441
+ this.emitScalar('spy on ' + value.and.identity());
1361
1442
  } else if (value instanceof RegExp) {
1362
1443
  this.emitScalar(value.toString());
1363
1444
  } else if (typeof value === 'function') {
@@ -1366,16 +1447,16 @@ getJasmineRequireObj().pp = function(j$) {
1366
1447
  this.emitScalar('HTMLNode');
1367
1448
  } else if (value instanceof Date) {
1368
1449
  this.emitScalar('Date(' + value + ')');
1369
- } else if (value.__Jasmine_been_here_before__) {
1450
+ } else if (j$.util.arrayContains(this.seen, value)) {
1370
1451
  this.emitScalar('<circular reference: ' + (j$.isArray_(value) ? 'Array' : 'Object') + '>');
1371
1452
  } else if (j$.isArray_(value) || j$.isA_('Object', value)) {
1372
- value.__Jasmine_been_here_before__ = true;
1453
+ this.seen.push(value);
1373
1454
  if (j$.isArray_(value)) {
1374
1455
  this.emitArray(value);
1375
1456
  } else {
1376
1457
  this.emitObject(value);
1377
1458
  }
1378
- delete value.__Jasmine_been_here_before__;
1459
+ this.seen.pop();
1379
1460
  } else {
1380
1461
  this.emitScalar(value.toString());
1381
1462
  }
@@ -1386,8 +1467,7 @@ getJasmineRequireObj().pp = function(j$) {
1386
1467
 
1387
1468
  PrettyPrinter.prototype.iterateObject = function(obj, fn) {
1388
1469
  for (var property in obj) {
1389
- if (!obj.hasOwnProperty(property)) { continue; }
1390
- if (property == '__Jasmine_been_here_before__') { continue; }
1470
+ if (!Object.prototype.hasOwnProperty.call(obj, property)) { continue; }
1391
1471
  fn(property, obj.__lookupGetter__ ? (!j$.util.isUndefined(obj.__lookupGetter__(property)) &&
1392
1472
  obj.__lookupGetter__(property) !== null) : false);
1393
1473
  }
@@ -1411,28 +1491,31 @@ getJasmineRequireObj().pp = function(j$) {
1411
1491
  };
1412
1492
 
1413
1493
  StringPrettyPrinter.prototype.emitString = function(value) {
1414
- this.append("'" + value + "'");
1494
+ this.append('\'' + value + '\'');
1415
1495
  };
1416
1496
 
1417
1497
  StringPrettyPrinter.prototype.emitArray = function(array) {
1418
1498
  if (this.ppNestLevel_ > j$.MAX_PRETTY_PRINT_DEPTH) {
1419
- this.append("Array");
1499
+ this.append('Array');
1420
1500
  return;
1421
1501
  }
1422
-
1502
+ var length = Math.min(array.length, j$.MAX_PRETTY_PRINT_ARRAY_LENGTH);
1423
1503
  this.append('[ ');
1424
- for (var i = 0; i < array.length; i++) {
1504
+ for (var i = 0; i < length; i++) {
1425
1505
  if (i > 0) {
1426
1506
  this.append(', ');
1427
1507
  }
1428
1508
  this.format(array[i]);
1429
1509
  }
1510
+ if(array.length > length){
1511
+ this.append(', ...');
1512
+ }
1430
1513
  this.append(' ]');
1431
1514
  };
1432
1515
 
1433
1516
  StringPrettyPrinter.prototype.emitObject = function(obj) {
1434
1517
  if (this.ppNestLevel_ > j$.MAX_PRETTY_PRINT_DEPTH) {
1435
- this.append("Object");
1518
+ this.append('Object');
1436
1519
  return;
1437
1520
  }
1438
1521
 
@@ -1448,7 +1531,7 @@ getJasmineRequireObj().pp = function(j$) {
1448
1531
  }
1449
1532
 
1450
1533
  self.append(property);
1451
- self.append(' : ');
1534
+ self.append(': ');
1452
1535
  if (isGetter) {
1453
1536
  self.append('<getter>');
1454
1537
  } else {
@@ -1470,7 +1553,17 @@ getJasmineRequireObj().pp = function(j$) {
1470
1553
  };
1471
1554
  };
1472
1555
 
1473
- getJasmineRequireObj().QueueRunner = function() {
1556
+ getJasmineRequireObj().QueueRunner = function(j$) {
1557
+
1558
+ function once(fn) {
1559
+ var called = false;
1560
+ return function() {
1561
+ if (!called) {
1562
+ called = true;
1563
+ fn();
1564
+ }
1565
+ };
1566
+ }
1474
1567
 
1475
1568
  function QueueRunner(attrs) {
1476
1569
  this.fns = attrs.fns || [];
@@ -1478,7 +1571,9 @@ getJasmineRequireObj().QueueRunner = function() {
1478
1571
  this.clearStack = attrs.clearStack || function(fn) {fn();};
1479
1572
  this.onException = attrs.onException || function() {};
1480
1573
  this.catchException = attrs.catchException || function() { return true; };
1574
+ this.enforceTimeout = attrs.enforceTimeout || function() { return false; };
1481
1575
  this.userContext = {};
1576
+ this.timer = attrs.timeout || {setTimeout: setTimeout, clearTimeout: clearTimeout};
1482
1577
  }
1483
1578
 
1484
1579
  QueueRunner.prototype.execute = function() {
@@ -1514,7 +1609,21 @@ getJasmineRequireObj().QueueRunner = function() {
1514
1609
  }
1515
1610
 
1516
1611
  function attemptAsync(fn) {
1517
- var next = function () { self.run(fns, iterativeIndex + 1); };
1612
+ var clearTimeout = function () {
1613
+ Function.prototype.apply.apply(self.timer.clearTimeout, [j$.getGlobal(), [timeoutId]]);
1614
+ },
1615
+ next = once(function () {
1616
+ clearTimeout(timeoutId);
1617
+ self.run(fns, iterativeIndex + 1);
1618
+ }),
1619
+ timeoutId;
1620
+
1621
+ if (self.enforceTimeout()) {
1622
+ timeoutId = Function.prototype.apply.apply(self.timer.setTimeout, [j$.getGlobal(), [function() {
1623
+ self.onException(new Error('Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.'));
1624
+ next();
1625
+ }, j$.DEFAULT_TIMEOUT_INTERVAL]]);
1626
+ }
1518
1627
 
1519
1628
  try {
1520
1629
  fn.call(self.userContext, next);
@@ -1578,7 +1687,7 @@ getJasmineRequireObj().SpyStrategy = function() {
1578
1687
  function SpyStrategy(options) {
1579
1688
  options = options || {};
1580
1689
 
1581
- var identity = options.name || "unknown",
1690
+ var identity = options.name || 'unknown',
1582
1691
  originalFn = options.fn || function() {},
1583
1692
  getSpy = options.getSpy || function() {},
1584
1693
  plan = function() {};
@@ -1712,16 +1821,20 @@ getJasmineRequireObj().Suite = function() {
1712
1821
  return Suite;
1713
1822
  };
1714
1823
 
1715
- if (typeof window == void 0 && typeof exports == "object") {
1824
+ if (typeof window == void 0 && typeof exports == 'object') {
1716
1825
  exports.Suite = jasmineRequire.Suite;
1717
1826
  }
1718
1827
 
1719
1828
  getJasmineRequireObj().Timer = function() {
1829
+ var defaultNow = (function(Date) {
1830
+ return function() { return new Date().getTime(); };
1831
+ })(Date);
1832
+
1720
1833
  function Timer(options) {
1721
1834
  options = options || {};
1722
1835
 
1723
- var now = options.now || function() { return new Date().getTime(); },
1724
- startTime;
1836
+ var now = options.now || defaultNow,
1837
+ startTime;
1725
1838
 
1726
1839
  this.start = function() {
1727
1840
  startTime = now();
@@ -1748,7 +1861,7 @@ getJasmineRequireObj().matchersUtil = function(j$) {
1748
1861
  contains: function(haystack, needle, customTesters) {
1749
1862
  customTesters = customTesters || [];
1750
1863
 
1751
- if (Object.prototype.toString.apply(haystack) === "[object Array]") {
1864
+ if (Object.prototype.toString.apply(haystack) === '[object Array]') {
1752
1865
  for (var i = 0; i < haystack.length; i++) {
1753
1866
  if (eq(haystack[i], needle, [], [], customTesters)) {
1754
1867
  return true;
@@ -1756,7 +1869,7 @@ getJasmineRequireObj().matchersUtil = function(j$) {
1756
1869
  }
1757
1870
  return false;
1758
1871
  }
1759
- return haystack.indexOf(needle) >= 0;
1872
+ return !!haystack && haystack.indexOf(needle) >= 0;
1760
1873
  },
1761
1874
 
1762
1875
  buildFailureMessage: function() {
@@ -1767,21 +1880,21 @@ getJasmineRequireObj().matchersUtil = function(j$) {
1767
1880
  expected = args.slice(3),
1768
1881
  englishyPredicate = matcherName.replace(/[A-Z]/g, function(s) { return ' ' + s.toLowerCase(); });
1769
1882
 
1770
- var message = "Expected " +
1883
+ var message = 'Expected ' +
1771
1884
  j$.pp(actual) +
1772
- (isNot ? " not " : " ") +
1885
+ (isNot ? ' not ' : ' ') +
1773
1886
  englishyPredicate;
1774
1887
 
1775
1888
  if (expected.length > 0) {
1776
1889
  for (var i = 0; i < expected.length; i++) {
1777
1890
  if (i > 0) {
1778
- message += ",";
1891
+ message += ',';
1779
1892
  }
1780
- message += " " + j$.pp(expected[i]);
1893
+ message += ' ' + j$.pp(expected[i]);
1781
1894
  }
1782
1895
  }
1783
1896
 
1784
- return message + ".";
1897
+ return message + '.';
1785
1898
  }
1786
1899
  };
1787
1900
 
@@ -2018,9 +2131,9 @@ getJasmineRequireObj().toBeNaN = function(j$) {
2018
2131
  };
2019
2132
 
2020
2133
  if (result.pass) {
2021
- result.message = "Expected actual not to be NaN.";
2134
+ result.message = 'Expected actual not to be NaN.';
2022
2135
  } else {
2023
- result.message = "Expected " + j$.pp(actual) + " to be NaN.";
2136
+ result.message = function() { return 'Expected ' + j$.pp(actual) + ' to be NaN.'; };
2024
2137
  }
2025
2138
 
2026
2139
  return result;
@@ -2132,8 +2245,8 @@ getJasmineRequireObj().toHaveBeenCalled = function(j$) {
2132
2245
  result.pass = actual.calls.any();
2133
2246
 
2134
2247
  result.message = result.pass ?
2135
- "Expected spy " + actual.and.identity() + " not to have been called." :
2136
- "Expected spy " + actual.and.identity() + " to have been called.";
2248
+ 'Expected spy ' + actual.and.identity() + ' not to have been called.' :
2249
+ 'Expected spy ' + actual.and.identity() + ' to have been called.';
2137
2250
 
2138
2251
  return result;
2139
2252
  }
@@ -2145,7 +2258,7 @@ getJasmineRequireObj().toHaveBeenCalled = function(j$) {
2145
2258
 
2146
2259
  getJasmineRequireObj().toHaveBeenCalledWith = function(j$) {
2147
2260
 
2148
- function toHaveBeenCalledWith(util) {
2261
+ function toHaveBeenCalledWith(util, customEqualityTesters) {
2149
2262
  return {
2150
2263
  compare: function() {
2151
2264
  var args = Array.prototype.slice.call(arguments, 0),
@@ -2158,15 +2271,15 @@ getJasmineRequireObj().toHaveBeenCalledWith = function(j$) {
2158
2271
  }
2159
2272
 
2160
2273
  if (!actual.calls.any()) {
2161
- result.message = "Expected spy " + actual.and.identity() + " to have been called with " + j$.pp(expectedArgs) + " but it was never called.";
2274
+ result.message = function() { return 'Expected spy ' + actual.and.identity() + ' to have been called with ' + j$.pp(expectedArgs) + ' but it was never called.'; };
2162
2275
  return result;
2163
2276
  }
2164
2277
 
2165
- if (util.contains(actual.calls.allArgs(), expectedArgs)) {
2278
+ if (util.contains(actual.calls.allArgs(), expectedArgs, customEqualityTesters)) {
2166
2279
  result.pass = true;
2167
- result.message = "Expected spy " + actual.and.identity() + " not to have been called with " + j$.pp(expectedArgs) + " but it was.";
2280
+ result.message = function() { return 'Expected spy ' + actual.and.identity() + ' not to have been called with ' + j$.pp(expectedArgs) + ' but it was.'; };
2168
2281
  } else {
2169
- result.message = "Expected spy " + actual.and.identity() + " to have been called with " + j$.pp(expectedArgs) + " but actual calls were " + j$.pp(actual.calls.allArgs()).replace(/^\[ | \]$/g, '') + ".";
2282
+ result.message = function() { return 'Expected spy ' + actual.and.identity() + ' to have been called with ' + j$.pp(expectedArgs) + ' but actual calls were ' + j$.pp(actual.calls.allArgs()).replace(/^\[ | \]$/g, '') + '.'; };
2170
2283
  }
2171
2284
 
2172
2285
  return result;
@@ -2203,8 +2316,8 @@ getJasmineRequireObj().toThrow = function(j$) {
2203
2316
  threw = false,
2204
2317
  thrown;
2205
2318
 
2206
- if (typeof actual != "function") {
2207
- throw new Error("Actual is not a Function");
2319
+ if (typeof actual != 'function') {
2320
+ throw new Error('Actual is not a Function');
2208
2321
  }
2209
2322
 
2210
2323
  try {
@@ -2215,22 +2328,22 @@ getJasmineRequireObj().toThrow = function(j$) {
2215
2328
  }
2216
2329
 
2217
2330
  if (!threw) {
2218
- result.message = "Expected function to throw an exception.";
2331
+ result.message = 'Expected function to throw an exception.';
2219
2332
  return result;
2220
2333
  }
2221
2334
 
2222
2335
  if (arguments.length == 1) {
2223
2336
  result.pass = true;
2224
- result.message = "Expected function not to throw, but it threw " + j$.pp(thrown) + ".";
2337
+ result.message = function() { return 'Expected function not to throw, but it threw ' + j$.pp(thrown) + '.'; };
2225
2338
 
2226
2339
  return result;
2227
2340
  }
2228
2341
 
2229
2342
  if (util.equals(thrown, expected)) {
2230
2343
  result.pass = true;
2231
- result.message = "Expected function not to throw " + j$.pp(expected) + ".";
2344
+ result.message = function() { return 'Expected function not to throw ' + j$.pp(expected) + '.'; };
2232
2345
  } else {
2233
- result.message = "Expected function to throw " + j$.pp(expected) + ", but it threw " + j$.pp(thrown) + ".";
2346
+ result.message = function() { return 'Expected function to throw ' + j$.pp(expected) + ', but it threw ' + j$.pp(thrown) + '.'; };
2234
2347
  }
2235
2348
 
2236
2349
  return result;
@@ -2246,6 +2359,8 @@ getJasmineRequireObj().toThrowError = function(j$) {
2246
2359
  return {
2247
2360
  compare: function(actual) {
2248
2361
  var threw = false,
2362
+ pass = {pass: true},
2363
+ fail = {pass: false},
2249
2364
  thrown,
2250
2365
  errorType,
2251
2366
  message,
@@ -2253,8 +2368,8 @@ getJasmineRequireObj().toThrowError = function(j$) {
2253
2368
  name,
2254
2369
  constructorName;
2255
2370
 
2256
- if (typeof actual != "function") {
2257
- throw new Error("Actual is not a Function");
2371
+ if (typeof actual != 'function') {
2372
+ throw new Error('Actual is not a Function');
2258
2373
  }
2259
2374
 
2260
2375
  extractExpectedParams.apply(null, arguments);
@@ -2267,15 +2382,18 @@ getJasmineRequireObj().toThrowError = function(j$) {
2267
2382
  }
2268
2383
 
2269
2384
  if (!threw) {
2270
- return fail("Expected function to throw an Error.");
2385
+ fail.message = 'Expected function to throw an Error.';
2386
+ return fail;
2271
2387
  }
2272
2388
 
2273
2389
  if (!(thrown instanceof Error)) {
2274
- return fail("Expected function to throw an Error, but it threw " + thrown + ".");
2390
+ fail.message = function() { return 'Expected function to throw an Error, but it threw ' + j$.pp(thrown) + '.'; };
2391
+ return fail;
2275
2392
  }
2276
2393
 
2277
2394
  if (arguments.length == 1) {
2278
- return pass("Expected function not to throw an Error, but it threw " + fnNameFor(thrown) + ".");
2395
+ pass.message = 'Expected function not to throw an Error, but it threw ' + fnNameFor(thrown) + '.';
2396
+ return pass;
2279
2397
  }
2280
2398
 
2281
2399
  if (errorType) {
@@ -2285,45 +2403,55 @@ getJasmineRequireObj().toThrowError = function(j$) {
2285
2403
 
2286
2404
  if (errorType && message) {
2287
2405
  if (thrown.constructor == errorType && util.equals(thrown.message, message)) {
2288
- return pass("Expected function not to throw " + name + " with message \"" + message + "\".");
2406
+ pass.message = function() { return 'Expected function not to throw ' + name + ' with message ' + j$.pp(message) + '.'; };
2407
+ return pass;
2289
2408
  } else {
2290
- return fail("Expected function to throw " + name + " with message \"" + message +
2291
- "\", but it threw " + constructorName + " with message \"" + thrown.message + "\".");
2409
+ fail.message = function() { return 'Expected function to throw ' + name + ' with message ' + j$.pp(message) +
2410
+ ', but it threw ' + constructorName + ' with message ' + j$.pp(thrown.message) + '.'; };
2411
+ return fail;
2292
2412
  }
2293
2413
  }
2294
2414
 
2295
2415
  if (errorType && regexp) {
2296
2416
  if (thrown.constructor == errorType && regexp.test(thrown.message)) {
2297
- return pass("Expected function not to throw " + name + " with message matching " + regexp + ".");
2417
+ pass.message = function() { return 'Expected function not to throw ' + name + ' with message matching ' + j$.pp(regexp) + '.'; };
2418
+ return pass;
2298
2419
  } else {
2299
- return fail("Expected function to throw " + name + " with message matching " + regexp +
2300
- ", but it threw " + constructorName + " with message \"" + thrown.message + "\".");
2420
+ fail.message = function() { return 'Expected function to throw ' + name + ' with message matching ' + j$.pp(regexp) +
2421
+ ', but it threw ' + constructorName + ' with message ' + j$.pp(thrown.message) + '.'; };
2422
+ return fail;
2301
2423
  }
2302
2424
  }
2303
2425
 
2304
2426
  if (errorType) {
2305
2427
  if (thrown.constructor == errorType) {
2306
- return pass("Expected function not to throw " + name + ".");
2428
+ pass.message = 'Expected function not to throw ' + name + '.';
2429
+ return pass;
2307
2430
  } else {
2308
- return fail("Expected function to throw " + name + ", but it threw " + constructorName + ".");
2431
+ fail.message = 'Expected function to throw ' + name + ', but it threw ' + constructorName + '.';
2432
+ return fail;
2309
2433
  }
2310
2434
  }
2311
2435
 
2312
2436
  if (message) {
2313
2437
  if (thrown.message == message) {
2314
- return pass("Expected function not to throw an exception with message " + j$.pp(message) + ".");
2438
+ pass.message = function() { return 'Expected function not to throw an exception with message ' + j$.pp(message) + '.'; };
2439
+ return pass;
2315
2440
  } else {
2316
- return fail("Expected function to throw an exception with message " + j$.pp(message) +
2317
- ", but it threw an exception with message " + j$.pp(thrown.message) + ".");
2441
+ fail.message = function() { return 'Expected function to throw an exception with message ' + j$.pp(message) +
2442
+ ', but it threw an exception with message ' + j$.pp(thrown.message) + '.'; };
2443
+ return fail;
2318
2444
  }
2319
2445
  }
2320
2446
 
2321
2447
  if (regexp) {
2322
2448
  if (regexp.test(thrown.message)) {
2323
- return pass("Expected function not to throw an exception with a message matching " + j$.pp(regexp) + ".");
2449
+ pass.message = function() { return 'Expected function not to throw an exception with a message matching ' + j$.pp(regexp) + '.'; };
2450
+ return pass;
2324
2451
  } else {
2325
- return fail("Expected function to throw an exception with a message matching " + j$.pp(regexp) +
2326
- ", but it threw an exception with message " + j$.pp(thrown.message) + ".");
2452
+ fail.message = function() { return 'Expected function to throw an exception with a message matching ' + j$.pp(regexp) +
2453
+ ', but it threw an exception with message ' + j$.pp(thrown.message) + '.'; };
2454
+ return fail;
2327
2455
  }
2328
2456
  }
2329
2457
 
@@ -2331,20 +2459,6 @@ getJasmineRequireObj().toThrowError = function(j$) {
2331
2459
  return func.name || func.toString().match(/^\s*function\s*(\w*)\s*\(/)[1];
2332
2460
  }
2333
2461
 
2334
- function pass(notMessage) {
2335
- return {
2336
- pass: true,
2337
- message: notMessage
2338
- };
2339
- }
2340
-
2341
- function fail(message) {
2342
- return {
2343
- pass: false,
2344
- message: message
2345
- };
2346
- }
2347
-
2348
2462
  function extractExpectedParams() {
2349
2463
  if (arguments.length == 1) {
2350
2464
  return;
@@ -2355,34 +2469,34 @@ getJasmineRequireObj().toThrowError = function(j$) {
2355
2469
 
2356
2470
  if (expected instanceof RegExp) {
2357
2471
  regexp = expected;
2358
- } else if (typeof expected == "string") {
2472
+ } else if (typeof expected == 'string') {
2359
2473
  message = expected;
2360
2474
  } else if (checkForAnErrorType(expected)) {
2361
2475
  errorType = expected;
2362
2476
  }
2363
2477
 
2364
2478
  if (!(errorType || message || regexp)) {
2365
- throw new Error("Expected is not an Error, string, or RegExp.");
2479
+ throw new Error('Expected is not an Error, string, or RegExp.');
2366
2480
  }
2367
2481
  } else {
2368
2482
  if (checkForAnErrorType(arguments[1])) {
2369
2483
  errorType = arguments[1];
2370
2484
  } else {
2371
- throw new Error("Expected error type is not an Error.");
2485
+ throw new Error('Expected error type is not an Error.');
2372
2486
  }
2373
2487
 
2374
2488
  if (arguments[2] instanceof RegExp) {
2375
2489
  regexp = arguments[2];
2376
- } else if (typeof arguments[2] == "string") {
2490
+ } else if (typeof arguments[2] == 'string') {
2377
2491
  message = arguments[2];
2378
2492
  } else {
2379
- throw new Error("Expected error message is not a string or RegExp.");
2493
+ throw new Error('Expected error message is not a string or RegExp.');
2380
2494
  }
2381
2495
  }
2382
2496
  }
2383
2497
 
2384
2498
  function checkForAnErrorType(type) {
2385
- if (typeof type !== "function") {
2499
+ if (typeof type !== 'function') {
2386
2500
  return false;
2387
2501
  }
2388
2502
 
@@ -2398,5 +2512,5 @@ getJasmineRequireObj().toThrowError = function(j$) {
2398
2512
  };
2399
2513
 
2400
2514
  getJasmineRequireObj().version = function() {
2401
- return "2.0.0";
2515
+ return '2.0.1';
2402
2516
  };