jasmine-core 2.0.0 → 2.0.1

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 (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
  };