jasmine-core 3.0.0 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (93) hide show
  1. checksums.yaml +4 -4
  2. data/lib/jasmine-core/boot/node_boot.js +1 -1
  3. data/lib/jasmine-core/jasmine-html.js +0 -35
  4. data/lib/jasmine-core/jasmine.css +0 -6
  5. data/lib/jasmine-core/jasmine.js +246 -36
  6. data/lib/jasmine-core/node_boot.js +1 -1
  7. data/lib/jasmine-core/version.rb +1 -1
  8. metadata +3 -88
  9. data/lib/jasmine-core/spec/core/CallTrackerSpec.js +0 -130
  10. data/lib/jasmine-core/spec/core/ClearStackSpec.js +0 -137
  11. data/lib/jasmine-core/spec/core/ClockSpec.js +0 -710
  12. data/lib/jasmine-core/spec/core/DelayedFunctionSchedulerSpec.js +0 -286
  13. data/lib/jasmine-core/spec/core/EnvSpec.js +0 -200
  14. data/lib/jasmine-core/spec/core/ExceptionFormatterSpec.js +0 -120
  15. data/lib/jasmine-core/spec/core/ExceptionsSpec.js +0 -46
  16. data/lib/jasmine-core/spec/core/ExpectationResultSpec.js +0 -61
  17. data/lib/jasmine-core/spec/core/ExpectationSpec.js +0 -434
  18. data/lib/jasmine-core/spec/core/GlobalErrorsSpec.js +0 -110
  19. data/lib/jasmine-core/spec/core/JsApiReporterSpec.js +0 -259
  20. data/lib/jasmine-core/spec/core/MockDateSpec.js +0 -200
  21. data/lib/jasmine-core/spec/core/PrettyPrintSpec.js +0 -332
  22. data/lib/jasmine-core/spec/core/QueueRunnerSpec.js +0 -670
  23. data/lib/jasmine-core/spec/core/ReportDispatcherSpec.js +0 -140
  24. data/lib/jasmine-core/spec/core/SpecSpec.js +0 -407
  25. data/lib/jasmine-core/spec/core/SpyRegistrySpec.js +0 -364
  26. data/lib/jasmine-core/spec/core/SpySpec.js +0 -177
  27. data/lib/jasmine-core/spec/core/SpyStrategySpec.js +0 -202
  28. data/lib/jasmine-core/spec/core/StackTraceSpec.js +0 -166
  29. data/lib/jasmine-core/spec/core/SuiteSpec.js +0 -123
  30. data/lib/jasmine-core/spec/core/TimerSpec.js +0 -31
  31. data/lib/jasmine-core/spec/core/TreeProcessorSpec.js +0 -794
  32. data/lib/jasmine-core/spec/core/UserContextSpec.js +0 -54
  33. data/lib/jasmine-core/spec/core/UtilSpec.js +0 -105
  34. data/lib/jasmine-core/spec/core/asymmetric_equality/AnySpec.js +0 -91
  35. data/lib/jasmine-core/spec/core/asymmetric_equality/AnythingSpec.js +0 -76
  36. data/lib/jasmine-core/spec/core/asymmetric_equality/ArrayContainingSpec.js +0 -52
  37. data/lib/jasmine-core/spec/core/asymmetric_equality/ArrayWithExactContentsSpec.js +0 -47
  38. data/lib/jasmine-core/spec/core/asymmetric_equality/ObjectContainingSpec.js +0 -99
  39. data/lib/jasmine-core/spec/core/asymmetric_equality/StringMatchingSpec.js +0 -27
  40. data/lib/jasmine-core/spec/core/formatErrorMsgSpec.js +0 -13
  41. data/lib/jasmine-core/spec/core/integration/CustomMatchersSpec.js +0 -200
  42. data/lib/jasmine-core/spec/core/integration/CustomSpyStrategiesSpec.js +0 -138
  43. data/lib/jasmine-core/spec/core/integration/EnvSpec.js +0 -2344
  44. data/lib/jasmine-core/spec/core/integration/SpecRunningSpec.js +0 -976
  45. data/lib/jasmine-core/spec/core/matchers/DiffBuilderSpec.js +0 -47
  46. data/lib/jasmine-core/spec/core/matchers/NullDiffBuilderSpec.js +0 -13
  47. data/lib/jasmine-core/spec/core/matchers/ObjectPathSpec.js +0 -43
  48. data/lib/jasmine-core/spec/core/matchers/matchersUtilSpec.js +0 -645
  49. data/lib/jasmine-core/spec/core/matchers/nothingSpec.js +0 -8
  50. data/lib/jasmine-core/spec/core/matchers/toBeCloseToSpec.js +0 -93
  51. data/lib/jasmine-core/spec/core/matchers/toBeDefinedSpec.js +0 -18
  52. data/lib/jasmine-core/spec/core/matchers/toBeFalsySpec.js +0 -38
  53. data/lib/jasmine-core/spec/core/matchers/toBeGreaterThanOrEqualSpec.js +0 -29
  54. data/lib/jasmine-core/spec/core/matchers/toBeGreaterThanSpec.js +0 -20
  55. data/lib/jasmine-core/spec/core/matchers/toBeLessThanOrEqualSpec.js +0 -29
  56. data/lib/jasmine-core/spec/core/matchers/toBeLessThanSpec.js +0 -20
  57. data/lib/jasmine-core/spec/core/matchers/toBeNaNSpec.js +0 -37
  58. data/lib/jasmine-core/spec/core/matchers/toBeNegativeInfinitySpec.js +0 -31
  59. data/lib/jasmine-core/spec/core/matchers/toBeNullSpec.js +0 -17
  60. data/lib/jasmine-core/spec/core/matchers/toBePositiveInfinitySpec.js +0 -31
  61. data/lib/jasmine-core/spec/core/matchers/toBeSpec.js +0 -17
  62. data/lib/jasmine-core/spec/core/matchers/toBeTruthySpec.js +0 -38
  63. data/lib/jasmine-core/spec/core/matchers/toBeUndefinedSpec.js +0 -18
  64. data/lib/jasmine-core/spec/core/matchers/toContainSpec.js +0 -26
  65. data/lib/jasmine-core/spec/core/matchers/toEqualSpec.js +0 -785
  66. data/lib/jasmine-core/spec/core/matchers/toHaveBeenCalledBeforeSpec.js +0 -99
  67. data/lib/jasmine-core/spec/core/matchers/toHaveBeenCalledSpec.js +0 -47
  68. data/lib/jasmine-core/spec/core/matchers/toHaveBeenCalledTimesSpec.js +0 -86
  69. data/lib/jasmine-core/spec/core/matchers/toHaveBeenCalledWithSpec.js +0 -67
  70. data/lib/jasmine-core/spec/core/matchers/toMatchSpec.js +0 -43
  71. data/lib/jasmine-core/spec/core/matchers/toThrowErrorSpec.js +0 -315
  72. data/lib/jasmine-core/spec/core/matchers/toThrowMatchingSpec.js +0 -73
  73. data/lib/jasmine-core/spec/core/matchers/toThrowSpec.js +0 -100
  74. data/lib/jasmine-core/spec/helpers/BrowserFlags.js +0 -15
  75. data/lib/jasmine-core/spec/helpers/asyncAwait.js +0 -27
  76. data/lib/jasmine-core/spec/helpers/checkForMap.js +0 -37
  77. data/lib/jasmine-core/spec/helpers/checkForSet.js +0 -41
  78. data/lib/jasmine-core/spec/helpers/checkForSymbol.js +0 -28
  79. data/lib/jasmine-core/spec/helpers/checkForTypedArrays.js +0 -20
  80. data/lib/jasmine-core/spec/helpers/defineJasmineUnderTest.js +0 -6
  81. data/lib/jasmine-core/spec/helpers/integrationMatchers.js +0 -43
  82. data/lib/jasmine-core/spec/helpers/nodeDefineJasmineUnderTest.js +0 -30
  83. data/lib/jasmine-core/spec/html/HtmlReporterSpec.js +0 -1261
  84. data/lib/jasmine-core/spec/html/HtmlSpecFilterSpec.js +0 -18
  85. data/lib/jasmine-core/spec/html/MatchersHtmlSpec.js +0 -37
  86. data/lib/jasmine-core/spec/html/PrettyPrintHtmlSpec.js +0 -27
  87. data/lib/jasmine-core/spec/html/QueryStringSpec.js +0 -72
  88. data/lib/jasmine-core/spec/html/ResultsNodeSpec.js +0 -62
  89. data/lib/jasmine-core/spec/html/SpyRegistryHtmlSpec.js +0 -39
  90. data/lib/jasmine-core/spec/html/matchers/toHaveClassSpec.js +0 -48
  91. data/lib/jasmine-core/spec/npmPackage/npmPackageSpec.js +0 -101
  92. data/lib/jasmine-core/spec/performance/large_object_test.js +0 -36
  93. data/lib/jasmine-core/spec/performance/performance_test.js +0 -10
@@ -23,7 +23,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23
23
  module.exports = function(jasmineRequire) {
24
24
  var jasmine = jasmineRequire.core(jasmineRequire);
25
25
 
26
- var env = jasmine.getEnv();
26
+ var env = jasmine.getEnv({suppressLoadErrors: true});
27
27
 
28
28
  var jasmineInterface = jasmineRequire.interface(jasmine, env);
29
29
 
@@ -4,6 +4,6 @@
4
4
  #
5
5
  module Jasmine
6
6
  module Core
7
- VERSION = "3.0.0"
7
+ VERSION = "3.1.0"
8
8
  end
9
9
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jasmine-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.0
4
+ version: 3.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gregg Van Hove
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-02-06 00:00:00.000000000 Z
11
+ date: 2018-02-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -93,91 +93,6 @@ files:
93
93
  - "./lib/jasmine-core/jasmine.js"
94
94
  - "./lib/jasmine-core/json2.js"
95
95
  - "./lib/jasmine-core/node_boot.js"
96
- - "./lib/jasmine-core/spec/core/CallTrackerSpec.js"
97
- - "./lib/jasmine-core/spec/core/ClearStackSpec.js"
98
- - "./lib/jasmine-core/spec/core/ClockSpec.js"
99
- - "./lib/jasmine-core/spec/core/DelayedFunctionSchedulerSpec.js"
100
- - "./lib/jasmine-core/spec/core/EnvSpec.js"
101
- - "./lib/jasmine-core/spec/core/ExceptionFormatterSpec.js"
102
- - "./lib/jasmine-core/spec/core/ExceptionsSpec.js"
103
- - "./lib/jasmine-core/spec/core/ExpectationResultSpec.js"
104
- - "./lib/jasmine-core/spec/core/ExpectationSpec.js"
105
- - "./lib/jasmine-core/spec/core/GlobalErrorsSpec.js"
106
- - "./lib/jasmine-core/spec/core/JsApiReporterSpec.js"
107
- - "./lib/jasmine-core/spec/core/MockDateSpec.js"
108
- - "./lib/jasmine-core/spec/core/PrettyPrintSpec.js"
109
- - "./lib/jasmine-core/spec/core/QueueRunnerSpec.js"
110
- - "./lib/jasmine-core/spec/core/ReportDispatcherSpec.js"
111
- - "./lib/jasmine-core/spec/core/SpecSpec.js"
112
- - "./lib/jasmine-core/spec/core/SpyRegistrySpec.js"
113
- - "./lib/jasmine-core/spec/core/SpySpec.js"
114
- - "./lib/jasmine-core/spec/core/SpyStrategySpec.js"
115
- - "./lib/jasmine-core/spec/core/StackTraceSpec.js"
116
- - "./lib/jasmine-core/spec/core/SuiteSpec.js"
117
- - "./lib/jasmine-core/spec/core/TimerSpec.js"
118
- - "./lib/jasmine-core/spec/core/TreeProcessorSpec.js"
119
- - "./lib/jasmine-core/spec/core/UserContextSpec.js"
120
- - "./lib/jasmine-core/spec/core/UtilSpec.js"
121
- - "./lib/jasmine-core/spec/core/asymmetric_equality/AnySpec.js"
122
- - "./lib/jasmine-core/spec/core/asymmetric_equality/AnythingSpec.js"
123
- - "./lib/jasmine-core/spec/core/asymmetric_equality/ArrayContainingSpec.js"
124
- - "./lib/jasmine-core/spec/core/asymmetric_equality/ArrayWithExactContentsSpec.js"
125
- - "./lib/jasmine-core/spec/core/asymmetric_equality/ObjectContainingSpec.js"
126
- - "./lib/jasmine-core/spec/core/asymmetric_equality/StringMatchingSpec.js"
127
- - "./lib/jasmine-core/spec/core/formatErrorMsgSpec.js"
128
- - "./lib/jasmine-core/spec/core/integration/CustomMatchersSpec.js"
129
- - "./lib/jasmine-core/spec/core/integration/CustomSpyStrategiesSpec.js"
130
- - "./lib/jasmine-core/spec/core/integration/EnvSpec.js"
131
- - "./lib/jasmine-core/spec/core/integration/SpecRunningSpec.js"
132
- - "./lib/jasmine-core/spec/core/matchers/DiffBuilderSpec.js"
133
- - "./lib/jasmine-core/spec/core/matchers/NullDiffBuilderSpec.js"
134
- - "./lib/jasmine-core/spec/core/matchers/ObjectPathSpec.js"
135
- - "./lib/jasmine-core/spec/core/matchers/matchersUtilSpec.js"
136
- - "./lib/jasmine-core/spec/core/matchers/nothingSpec.js"
137
- - "./lib/jasmine-core/spec/core/matchers/toBeCloseToSpec.js"
138
- - "./lib/jasmine-core/spec/core/matchers/toBeDefinedSpec.js"
139
- - "./lib/jasmine-core/spec/core/matchers/toBeFalsySpec.js"
140
- - "./lib/jasmine-core/spec/core/matchers/toBeGreaterThanOrEqualSpec.js"
141
- - "./lib/jasmine-core/spec/core/matchers/toBeGreaterThanSpec.js"
142
- - "./lib/jasmine-core/spec/core/matchers/toBeLessThanOrEqualSpec.js"
143
- - "./lib/jasmine-core/spec/core/matchers/toBeLessThanSpec.js"
144
- - "./lib/jasmine-core/spec/core/matchers/toBeNaNSpec.js"
145
- - "./lib/jasmine-core/spec/core/matchers/toBeNegativeInfinitySpec.js"
146
- - "./lib/jasmine-core/spec/core/matchers/toBeNullSpec.js"
147
- - "./lib/jasmine-core/spec/core/matchers/toBePositiveInfinitySpec.js"
148
- - "./lib/jasmine-core/spec/core/matchers/toBeSpec.js"
149
- - "./lib/jasmine-core/spec/core/matchers/toBeTruthySpec.js"
150
- - "./lib/jasmine-core/spec/core/matchers/toBeUndefinedSpec.js"
151
- - "./lib/jasmine-core/spec/core/matchers/toContainSpec.js"
152
- - "./lib/jasmine-core/spec/core/matchers/toEqualSpec.js"
153
- - "./lib/jasmine-core/spec/core/matchers/toHaveBeenCalledBeforeSpec.js"
154
- - "./lib/jasmine-core/spec/core/matchers/toHaveBeenCalledSpec.js"
155
- - "./lib/jasmine-core/spec/core/matchers/toHaveBeenCalledTimesSpec.js"
156
- - "./lib/jasmine-core/spec/core/matchers/toHaveBeenCalledWithSpec.js"
157
- - "./lib/jasmine-core/spec/core/matchers/toMatchSpec.js"
158
- - "./lib/jasmine-core/spec/core/matchers/toThrowErrorSpec.js"
159
- - "./lib/jasmine-core/spec/core/matchers/toThrowMatchingSpec.js"
160
- - "./lib/jasmine-core/spec/core/matchers/toThrowSpec.js"
161
- - "./lib/jasmine-core/spec/helpers/BrowserFlags.js"
162
- - "./lib/jasmine-core/spec/helpers/asyncAwait.js"
163
- - "./lib/jasmine-core/spec/helpers/checkForMap.js"
164
- - "./lib/jasmine-core/spec/helpers/checkForSet.js"
165
- - "./lib/jasmine-core/spec/helpers/checkForSymbol.js"
166
- - "./lib/jasmine-core/spec/helpers/checkForTypedArrays.js"
167
- - "./lib/jasmine-core/spec/helpers/defineJasmineUnderTest.js"
168
- - "./lib/jasmine-core/spec/helpers/integrationMatchers.js"
169
- - "./lib/jasmine-core/spec/helpers/nodeDefineJasmineUnderTest.js"
170
- - "./lib/jasmine-core/spec/html/HtmlReporterSpec.js"
171
- - "./lib/jasmine-core/spec/html/HtmlSpecFilterSpec.js"
172
- - "./lib/jasmine-core/spec/html/MatchersHtmlSpec.js"
173
- - "./lib/jasmine-core/spec/html/PrettyPrintHtmlSpec.js"
174
- - "./lib/jasmine-core/spec/html/QueryStringSpec.js"
175
- - "./lib/jasmine-core/spec/html/ResultsNodeSpec.js"
176
- - "./lib/jasmine-core/spec/html/SpyRegistryHtmlSpec.js"
177
- - "./lib/jasmine-core/spec/html/matchers/toHaveClassSpec.js"
178
- - "./lib/jasmine-core/spec/npmPackage/npmPackageSpec.js"
179
- - "./lib/jasmine-core/spec/performance/large_object_test.js"
180
- - "./lib/jasmine-core/spec/performance/performance_test.js"
181
96
  - "./lib/jasmine-core/version.rb"
182
97
  homepage: http://jasmine.github.io
183
98
  licenses:
@@ -199,7 +114,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
199
114
  version: '0'
200
115
  requirements: []
201
116
  rubyforge_project: jasmine-core
202
- rubygems_version: 2.4.5.1
117
+ rubygems_version: 2.6.11
203
118
  signing_key:
204
119
  specification_version: 4
205
120
  summary: JavaScript BDD framework
@@ -1,130 +0,0 @@
1
- describe("CallTracker", function() {
2
- it("tracks that it was called when executed", function() {
3
- var callTracker = new jasmineUnderTest.CallTracker();
4
-
5
- expect(callTracker.any()).toBe(false);
6
-
7
- callTracker.track();
8
-
9
- expect(callTracker.any()).toBe(true);
10
- });
11
-
12
- it("tracks that number of times that it is executed", function() {
13
- var callTracker = new jasmineUnderTest.CallTracker();
14
-
15
- expect(callTracker.count()).toEqual(0);
16
-
17
- callTracker.track();
18
-
19
- expect(callTracker.count()).toEqual(1);
20
- });
21
-
22
- it("tracks the params from each execution", function() {
23
- var callTracker = new jasmineUnderTest.CallTracker();
24
-
25
- callTracker.track({object: void 0, args: []});
26
- callTracker.track({object: {}, args: [0, "foo"]});
27
-
28
- expect(callTracker.argsFor(0)).toEqual([]);
29
-
30
- expect(callTracker.argsFor(1)).toEqual([0, "foo"]);
31
- });
32
-
33
- it("returns any empty array when there was no call", function() {
34
- var callTracker = new jasmineUnderTest.CallTracker();
35
-
36
- expect(callTracker.argsFor(0)).toEqual([]);
37
- });
38
-
39
- it("allows access for the arguments for all calls", function() {
40
- var callTracker = new jasmineUnderTest.CallTracker();
41
-
42
- callTracker.track({object: {}, args: []});
43
- callTracker.track({object: {}, args: [0, "foo"]});
44
-
45
- expect(callTracker.allArgs()).toEqual([[], [0, "foo"]]);
46
- });
47
-
48
- it("tracks the context and arguments for each call", function() {
49
- var callTracker = new jasmineUnderTest.CallTracker();
50
-
51
- callTracker.track({object: {}, args: []});
52
- callTracker.track({object: {}, args: [0, "foo"]});
53
-
54
- expect(callTracker.all()[0]).toEqual({object: {}, args: []});
55
-
56
- expect(callTracker.all()[1]).toEqual({object: {}, args: [0, "foo"]});
57
- });
58
-
59
- it("simplifies access to the arguments for the last (most recent) call", function() {
60
- var callTracker = new jasmineUnderTest.CallTracker();
61
-
62
- callTracker.track();
63
- callTracker.track({object: {}, args: [0, "foo"]});
64
-
65
- expect(callTracker.mostRecent()).toEqual({
66
- object: {},
67
- args: [0, "foo"]
68
- });
69
- });
70
-
71
- it("returns a useful falsy value when there isn't a last (most recent) call", function() {
72
- var callTracker = new jasmineUnderTest.CallTracker();
73
-
74
- expect(callTracker.mostRecent()).toBeFalsy();
75
- });
76
-
77
- it("simplifies access to the arguments for the first (oldest) call", function() {
78
- var callTracker = new jasmineUnderTest.CallTracker();
79
-
80
- callTracker.track({object: {}, args: [0, "foo"]});
81
-
82
- expect(callTracker.first()).toEqual({object: {}, args: [0, "foo"]})
83
- });
84
-
85
- it("returns a useful falsy value when there isn't a first (oldest) call", function() {
86
- var callTracker = new jasmineUnderTest.CallTracker();
87
-
88
- expect(callTracker.first()).toBeFalsy();
89
- });
90
-
91
-
92
- it("allows the tracking to be reset", function() {
93
- var callTracker = new jasmineUnderTest.CallTracker();
94
-
95
- callTracker.track();
96
- callTracker.track({object: {}, args: [0, "foo"]});
97
- callTracker.reset();
98
-
99
- expect(callTracker.any()).toBe(false);
100
- expect(callTracker.count()).toEqual(0);
101
- expect(callTracker.argsFor(0)).toEqual([]);
102
- expect(callTracker.all()).toEqual([]);
103
- expect(callTracker.mostRecent()).toBeFalsy();
104
- });
105
-
106
- it("allows object arguments to be shallow cloned", function() {
107
- var callTracker = new jasmineUnderTest.CallTracker();
108
- callTracker.saveArgumentsByValue();
109
-
110
- var objectArg = {"foo": "bar"},
111
- arrayArg = ["foo", "bar"];
112
-
113
- callTracker.track({object: {}, args: [objectArg, arrayArg, false, undefined, null, NaN, "", 0, 1.0]});
114
-
115
- expect(callTracker.mostRecent().args[0]).not.toBe(objectArg);
116
- expect(callTracker.mostRecent().args[0]).toEqual(objectArg);
117
- expect(callTracker.mostRecent().args[1]).not.toBe(arrayArg);
118
- expect(callTracker.mostRecent().args[1]).toEqual(arrayArg);
119
- });
120
-
121
- it('saves primitive arguments by value', function() {
122
- var callTracker = new jasmineUnderTest.CallTracker(),
123
- args = [undefined, null, false, '', /\s/, 0, 1.2, NaN];
124
-
125
- callTracker.saveArgumentsByValue();
126
- callTracker.track({ object: {}, args: args });
127
-
128
- expect(callTracker.mostRecent().args).toEqual(args);
129
- });
130
- });
@@ -1,137 +0,0 @@
1
- describe("ClearStack", function() {
2
- it("works in an integrationy way", function(done) {
3
- var clearStack = jasmineUnderTest.getClearStack(jasmineUnderTest.getGlobal());
4
-
5
- clearStack(function() {
6
- done();
7
- });
8
- });
9
-
10
- it("uses setImmediate when available", function() {
11
- var setImmediate = jasmine.createSpy('setImmediate').and.callFake(function(fn) { fn() }),
12
- global = { setImmediate: setImmediate },
13
- clearStack = jasmineUnderTest.getClearStack(global),
14
- called = false;
15
-
16
- clearStack(function() {
17
- called = true;
18
- });
19
-
20
- expect(called).toBe(true);
21
- expect(setImmediate).toHaveBeenCalled();
22
- });
23
-
24
- it("uses setTimeout instead of setImmediate every 10 calls to make sure we release the CPU", function() {
25
- var setImmediate = jasmine.createSpy('setImmediate'),
26
- setTimeout = jasmine.createSpy('setTimeout'),
27
- global = { setImmediate: setImmediate, setTimeout: setTimeout },
28
- clearStack = jasmineUnderTest.getClearStack(global);
29
-
30
- clearStack(function() { });
31
- clearStack(function() { });
32
- clearStack(function() { });
33
- clearStack(function() { });
34
- clearStack(function() { });
35
- clearStack(function() { });
36
- clearStack(function() { });
37
- clearStack(function() { });
38
- clearStack(function() { });
39
-
40
- expect(setImmediate).toHaveBeenCalled();
41
- expect(setTimeout).not.toHaveBeenCalled();
42
-
43
- clearStack(function() { });
44
- expect(setImmediate.calls.count()).toEqual(9);
45
- expect(setTimeout.calls.count()).toEqual(1);
46
-
47
- clearStack(function() { });
48
- expect(setImmediate.calls.count()).toEqual(10);
49
- expect(setTimeout.calls.count()).toEqual(1);
50
- });
51
-
52
- it("uses MessageChannels when available", function() {
53
- var fakeChannel = {
54
- port1: {},
55
- port2: { postMessage: function() { fakeChannel.port1.onmessage(); } }
56
- },
57
- global = { MessageChannel: function() { return fakeChannel; } },
58
- clearStack = jasmineUnderTest.getClearStack(global),
59
- called = false;
60
-
61
- clearStack(function() {
62
- called = true;
63
- });
64
-
65
- expect(called).toBe(true);
66
- });
67
-
68
- it("uses setTimeout instead of MessageChannel every 10 calls to make sure we release the CPU", function() {
69
- var fakeChannel = {
70
- port1: {},
71
- port2: {
72
- postMessage: jasmine.createSpy('postMessage').and.callFake(function() {
73
- fakeChannel.port1.onmessage();
74
- })
75
- }
76
- },
77
- setTimeout = jasmine.createSpy('setTimeout'),
78
- global = { MessageChannel: function() { return fakeChannel; }, setTimeout: setTimeout },
79
- clearStack = jasmineUnderTest.getClearStack(global);
80
-
81
- clearStack(function() { });
82
- clearStack(function() { });
83
- clearStack(function() { });
84
- clearStack(function() { });
85
- clearStack(function() { });
86
- clearStack(function() { });
87
- clearStack(function() { });
88
- clearStack(function() { });
89
- clearStack(function() { });
90
-
91
- expect(fakeChannel.port2.postMessage).toHaveBeenCalled();
92
- expect(setTimeout).not.toHaveBeenCalled();
93
-
94
- clearStack(function() { });
95
- expect(fakeChannel.port2.postMessage.calls.count()).toEqual(9);
96
- expect(setTimeout.calls.count()).toEqual(1);
97
-
98
- clearStack(function() { });
99
- expect(fakeChannel.port2.postMessage.calls.count()).toEqual(10);
100
- expect(setTimeout.calls.count()).toEqual(1);
101
- });
102
-
103
- it("calls setTimeout when onmessage is called recursively", function() {
104
- var fakeChannel = {
105
- port1: {},
106
- port2: { postMessage: function() { fakeChannel.port1.onmessage(); } }
107
- },
108
- setTimeout = jasmine.createSpy('setTimeout'),
109
- global = {
110
- MessageChannel: function() { return fakeChannel; },
111
- setTimeout: setTimeout,
112
- },
113
- clearStack = jasmineUnderTest.getClearStack(global),
114
- fn = jasmine.createSpy("second clearStack function");
115
-
116
- clearStack(function() {
117
- clearStack(fn);
118
- });
119
-
120
- expect(fn).not.toHaveBeenCalled();
121
- expect(setTimeout).toHaveBeenCalledWith(fn, 0);
122
- });
123
-
124
- it("falls back to setTimeout", function() {
125
- var setTimeout = jasmine.createSpy('setTimeout').and.callFake(function(fn) { fn() }),
126
- global = { setTimeout: setTimeout },
127
- clearStack = jasmineUnderTest.getClearStack(global),
128
- called = false;
129
-
130
- clearStack(function() {
131
- called = true;
132
- });
133
-
134
- expect(called).toBe(true);
135
- expect(setTimeout).toHaveBeenCalledWith(jasmine.any(Function), 0);
136
- });
137
- });
@@ -1,710 +0,0 @@
1
- describe("Clock", function() {
2
-
3
- var NODE_JS = typeof process !== 'undefined' && process.versions && typeof process.versions.node === 'string';
4
-
5
- it("does not replace setTimeout until it is installed", function() {
6
- var fakeSetTimeout = jasmine.createSpy("global setTimeout"),
7
- fakeGlobal = { setTimeout: fakeSetTimeout },
8
- delayedFunctionScheduler = jasmine.createSpyObj("delayedFunctionScheduler", ["scheduleFunction"]),
9
- delayedFn = jasmine.createSpy("delayedFn"),
10
- mockDate = { install: function() {}, tick: function() {}, uninstall: function() {} },
11
- clock = new jasmineUnderTest.Clock(fakeGlobal, function () { return delayedFunctionScheduler; }, mockDate);
12
-
13
- fakeGlobal.setTimeout(delayedFn, 0);
14
-
15
- expect(fakeSetTimeout).toHaveBeenCalledWith(delayedFn, 0);
16
- expect(delayedFunctionScheduler.scheduleFunction).not.toHaveBeenCalled();
17
-
18
- fakeSetTimeout.calls.reset();
19
-
20
- clock.install();
21
- fakeGlobal.setTimeout(delayedFn, 0);
22
-
23
- expect(delayedFunctionScheduler.scheduleFunction).toHaveBeenCalled();
24
- expect(fakeSetTimeout).not.toHaveBeenCalled();
25
- });
26
-
27
- it("does not replace clearTimeout until it is installed", function() {
28
- var fakeClearTimeout = jasmine.createSpy("global cleartimeout"),
29
- fakeGlobal = { clearTimeout: fakeClearTimeout },
30
- delayedFunctionScheduler = jasmine.createSpyObj("delayedFunctionScheduler", ["removeFunctionWithId"]),
31
- delayedFn = jasmine.createSpy("delayedFn"),
32
- mockDate = { install: function() {}, tick: function() {}, uninstall: function() {} },
33
- clock = new jasmineUnderTest.Clock(fakeGlobal, function () { return delayedFunctionScheduler; }, mockDate);
34
-
35
- fakeGlobal.clearTimeout("foo");
36
-
37
- expect(fakeClearTimeout).toHaveBeenCalledWith("foo");
38
- expect(delayedFunctionScheduler.removeFunctionWithId).not.toHaveBeenCalled();
39
-
40
- fakeClearTimeout.calls.reset();
41
-
42
- clock.install();
43
- fakeGlobal.clearTimeout("foo");
44
-
45
- expect(delayedFunctionScheduler.removeFunctionWithId).toHaveBeenCalled();
46
- expect(fakeClearTimeout).not.toHaveBeenCalled();
47
- });
48
-
49
- it("does not replace setInterval until it is installed", function() {
50
- var fakeSetInterval = jasmine.createSpy("global setInterval"),
51
- fakeGlobal = { setInterval: fakeSetInterval },
52
- delayedFunctionScheduler = jasmine.createSpyObj("delayedFunctionScheduler", ["scheduleFunction"]),
53
- delayedFn = jasmine.createSpy("delayedFn"),
54
- mockDate = { install: function() {}, tick: function() {}, uninstall: function() {} },
55
- clock = new jasmineUnderTest.Clock(fakeGlobal, function () { return delayedFunctionScheduler; }, mockDate);
56
-
57
- fakeGlobal.setInterval(delayedFn, 0);
58
-
59
- expect(fakeSetInterval).toHaveBeenCalledWith(delayedFn, 0);
60
- expect(delayedFunctionScheduler.scheduleFunction).not.toHaveBeenCalled();
61
-
62
- fakeSetInterval.calls.reset();
63
-
64
- clock.install();
65
- fakeGlobal.setInterval(delayedFn, 0);
66
-
67
- expect(delayedFunctionScheduler.scheduleFunction).toHaveBeenCalled();
68
- expect(fakeSetInterval).not.toHaveBeenCalled();
69
- });
70
-
71
- it("does not replace clearInterval until it is installed", function() {
72
- var fakeClearInterval = jasmine.createSpy("global clearinterval"),
73
- fakeGlobal = { clearInterval: fakeClearInterval },
74
- delayedFunctionScheduler = jasmine.createSpyObj("delayedFunctionScheduler", ["removeFunctionWithId"]),
75
- delayedFn = jasmine.createSpy("delayedFn"),
76
- mockDate = { install: function() {}, tick: function() {}, uninstall: function() {} },
77
- clock = new jasmineUnderTest.Clock(fakeGlobal, function () { return delayedFunctionScheduler; }, mockDate);
78
-
79
- fakeGlobal.clearInterval("foo");
80
-
81
- expect(fakeClearInterval).toHaveBeenCalledWith("foo");
82
- expect(delayedFunctionScheduler.removeFunctionWithId).not.toHaveBeenCalled();
83
-
84
- fakeClearInterval.calls.reset();
85
-
86
- clock.install();
87
- fakeGlobal.clearInterval("foo");
88
-
89
- expect(delayedFunctionScheduler.removeFunctionWithId).toHaveBeenCalled();
90
- expect(fakeClearInterval).not.toHaveBeenCalled();
91
- });
92
-
93
- it("does not install if the current setTimeout is not the original function on the global", function() {
94
- var originalFakeSetTimeout = function() {},
95
- replacedSetTimeout = function() {},
96
- fakeGlobal = { setTimeout: originalFakeSetTimeout },
97
- delayedFunctionSchedulerFactory = jasmine.createSpy('delayedFunctionSchedulerFactory'),
98
- mockDate = {},
99
- clock = new jasmineUnderTest.Clock(fakeGlobal, delayedFunctionSchedulerFactory, mockDate);
100
-
101
- fakeGlobal.setTimeout = replacedSetTimeout;
102
-
103
- expect(function() {
104
- clock.install();
105
- }).toThrowError(/unable to install/);
106
-
107
- expect(delayedFunctionSchedulerFactory).not.toHaveBeenCalled();
108
- expect(fakeGlobal.setTimeout).toBe(replacedSetTimeout);
109
- });
110
-
111
- it("does not install if the current clearTimeout is not the original function on the global", function() {
112
- var originalFakeClearTimeout = function() {},
113
- replacedClearTimeout = function() {},
114
- fakeGlobal = { clearTimeout: originalFakeClearTimeout },
115
- delayedFunctionSchedulerFactory = jasmine.createSpy('delayedFunctionSchedulerFactory'),
116
- mockDate = {},
117
- clock = new jasmineUnderTest.Clock(fakeGlobal, delayedFunctionSchedulerFactory, mockDate);
118
-
119
- fakeGlobal.clearTimeout = replacedClearTimeout;
120
-
121
- expect(function() {
122
- clock.install();
123
- }).toThrowError(/unable to install/);
124
-
125
- expect(delayedFunctionSchedulerFactory).not.toHaveBeenCalled();
126
- expect(fakeGlobal.clearTimeout).toBe(replacedClearTimeout);
127
- });
128
-
129
- it("does not install if the current setInterval is not the original function on the global", function() {
130
- var originalFakeSetInterval = function() {},
131
- replacedSetInterval = function() {},
132
- fakeGlobal = { setInterval: originalFakeSetInterval },
133
- delayedFunctionSchedulerFactory = jasmine.createSpy('delayedFunctionSchedulerFactory'),
134
- mockDate = {},
135
- clock = new jasmineUnderTest.Clock(fakeGlobal, delayedFunctionSchedulerFactory, mockDate);
136
-
137
- fakeGlobal.setInterval = replacedSetInterval;
138
-
139
- expect(function() {
140
- clock.install();
141
- }).toThrowError(/unable to install/);
142
-
143
- expect(delayedFunctionSchedulerFactory).not.toHaveBeenCalled();
144
- expect(fakeGlobal.setInterval).toBe(replacedSetInterval);
145
- });
146
-
147
- it("does not install if the current clearInterval is not the original function on the global", function() {
148
- var originalFakeClearInterval = function() {},
149
- replacedClearInterval = function() {},
150
- fakeGlobal = { clearInterval: originalFakeClearInterval },
151
- delayedFunctionSchedulerFactory = jasmine.createSpy('delayedFunctionSchedulerFactory'),
152
- mockDate = {},
153
- clock = new jasmineUnderTest.Clock(fakeGlobal, delayedFunctionSchedulerFactory, mockDate);
154
-
155
- fakeGlobal.clearInterval = replacedClearInterval;
156
-
157
- expect(function() {
158
- clock.install();
159
- }).toThrowError(/unable to install/);
160
-
161
- expect(delayedFunctionSchedulerFactory).not.toHaveBeenCalled();
162
- expect(fakeGlobal.clearInterval).toBe(replacedClearInterval);
163
- });
164
-
165
- it("replaces the global timer functions on uninstall", function() {
166
- var fakeSetTimeout = jasmine.createSpy("global setTimeout"),
167
- fakeClearTimeout = jasmine.createSpy("global clearTimeout"),
168
- fakeSetInterval = jasmine.createSpy("global setInterval"),
169
- fakeClearInterval = jasmine.createSpy("global clearInterval"),
170
- fakeGlobal = {
171
- setTimeout: fakeSetTimeout,
172
- clearTimeout: fakeClearTimeout,
173
- setInterval: fakeSetInterval,
174
- clearInterval: fakeClearInterval
175
- },
176
- delayedFunctionScheduler = jasmine.createSpyObj("delayedFunctionScheduler", ["scheduleFunction", "reset"]),
177
- delayedFn = jasmine.createSpy("delayedFn"),
178
- mockDate = { install: function() {}, tick: function() {}, uninstall: function() {} },
179
- clock = new jasmineUnderTest.Clock(fakeGlobal, function () { return delayedFunctionScheduler; }, mockDate);
180
-
181
- clock.install();
182
- clock.uninstall();
183
- fakeGlobal.setTimeout(delayedFn, 0);
184
- fakeGlobal.clearTimeout("foo");
185
- fakeGlobal.setInterval(delayedFn, 10);
186
- fakeGlobal.clearInterval("bar");
187
-
188
- expect(fakeSetTimeout).toHaveBeenCalledWith(delayedFn, 0);
189
- expect(fakeClearTimeout).toHaveBeenCalledWith("foo");
190
- expect(fakeSetInterval).toHaveBeenCalledWith(delayedFn, 10);
191
- expect(fakeClearInterval).toHaveBeenCalledWith("bar");
192
- expect(delayedFunctionScheduler.scheduleFunction).not.toHaveBeenCalled();
193
- });
194
-
195
- it("can be installed for the duration of a passed in function and uninstalled when done", function() {
196
- var fakeSetTimeout = jasmine.createSpy("global setTimeout"),
197
- fakeClearTimeout = jasmine.createSpy("global clearTimeout"),
198
- fakeSetInterval = jasmine.createSpy("global setInterval"),
199
- fakeClearInterval = jasmine.createSpy("global clearInterval"),
200
- fakeGlobal = {
201
- setTimeout: fakeSetTimeout,
202
- clearTimeout: fakeClearTimeout,
203
- setInterval: fakeSetInterval,
204
- clearInterval: fakeClearInterval
205
- },
206
- delayedFunctionScheduler = jasmine.createSpyObj("delayedFunctionScheduler", ["scheduleFunction", "reset", "removeFunctionWithId"]),
207
- delayedFn = jasmine.createSpy("delayedFn"),
208
- mockDate = { install: function() {}, tick: function() {}, uninstall: function() {} },
209
- clock = new jasmineUnderTest.Clock(fakeGlobal, function () { return delayedFunctionScheduler; }, mockDate),
210
- passedFunctionCalled = false;
211
-
212
- clock.withMock(function() {
213
- fakeGlobal.setTimeout(delayedFn, 0);
214
- fakeGlobal.clearTimeout("foo");
215
- fakeGlobal.setInterval(delayedFn, 10);
216
- fakeGlobal.clearInterval("bar");
217
- passedFunctionCalled = true;
218
- });
219
-
220
- expect(passedFunctionCalled).toBe(true);
221
-
222
- expect(fakeSetTimeout).not.toHaveBeenCalled();
223
- expect(fakeClearTimeout).not.toHaveBeenCalled();
224
- expect(fakeSetInterval).not.toHaveBeenCalled();
225
- expect(fakeClearInterval).not.toHaveBeenCalled();
226
- expect(delayedFunctionScheduler.scheduleFunction).toHaveBeenCalled();
227
-
228
- delayedFunctionScheduler.scheduleFunction.calls.reset();
229
-
230
- fakeGlobal.setTimeout(delayedFn, 0);
231
- fakeGlobal.clearTimeout("foo");
232
- fakeGlobal.setInterval(delayedFn, 10);
233
- fakeGlobal.clearInterval("bar");
234
-
235
- expect(fakeSetTimeout).toHaveBeenCalledWith(delayedFn, 0);
236
- expect(fakeClearTimeout).toHaveBeenCalledWith("foo");
237
- expect(fakeSetInterval).toHaveBeenCalledWith(delayedFn, 10);
238
- expect(fakeClearInterval).toHaveBeenCalledWith("bar");
239
- expect(delayedFunctionScheduler.scheduleFunction).not.toHaveBeenCalled();
240
- });
241
-
242
- it("can be installed for the duration of a passed in function and uninstalled if an error is thrown", function() {
243
- var fakeSetTimeout = jasmine.createSpy("global setTimeout"),
244
- fakeClearTimeout = jasmine.createSpy("global clearTimeout"),
245
- fakeSetInterval = jasmine.createSpy("global setInterval"),
246
- fakeClearInterval = jasmine.createSpy("global clearInterval"),
247
- fakeGlobal = {
248
- setTimeout: fakeSetTimeout,
249
- clearTimeout: fakeClearTimeout,
250
- setInterval: fakeSetInterval,
251
- clearInterval: fakeClearInterval
252
- },
253
- delayedFunctionScheduler = jasmine.createSpyObj("delayedFunctionScheduler", ["scheduleFunction", "reset", "removeFunctionWithId"]),
254
- delayedFn = jasmine.createSpy("delayedFn"),
255
- mockDate = { install: function() {}, tick: function() {}, uninstall: function() {} },
256
- clock = new jasmineUnderTest.Clock(fakeGlobal, function () { return delayedFunctionScheduler; }, mockDate),
257
- passedFunctionCalled = false;
258
-
259
- expect(function() {
260
- clock.withMock(function() {
261
- fakeGlobal.setTimeout(delayedFn, 0);
262
- fakeGlobal.clearTimeout("foo");
263
- fakeGlobal.setInterval(delayedFn, 10);
264
- fakeGlobal.clearInterval("bar");
265
- passedFunctionCalled = true;
266
- throw 'oops';
267
- });
268
- }).toThrow('oops');
269
-
270
- expect(passedFunctionCalled).toBe(true);
271
-
272
- expect(fakeSetTimeout).not.toHaveBeenCalled();
273
- expect(fakeClearTimeout).not.toHaveBeenCalled();
274
- expect(fakeSetInterval).not.toHaveBeenCalled();
275
- expect(fakeClearInterval).not.toHaveBeenCalled();
276
- expect(delayedFunctionScheduler.scheduleFunction).toHaveBeenCalled();
277
-
278
- delayedFunctionScheduler.scheduleFunction.calls.reset();
279
-
280
- fakeGlobal.setTimeout(delayedFn, 0);
281
- fakeGlobal.clearTimeout("foo");
282
- fakeGlobal.setInterval(delayedFn, 10);
283
- fakeGlobal.clearInterval("bar");
284
-
285
- expect(fakeSetTimeout).toHaveBeenCalledWith(delayedFn, 0);
286
- expect(fakeClearTimeout).toHaveBeenCalledWith("foo");
287
- expect(fakeSetInterval).toHaveBeenCalledWith(delayedFn, 10);
288
- expect(fakeClearInterval).toHaveBeenCalledWith("bar");
289
- expect(delayedFunctionScheduler.scheduleFunction).not.toHaveBeenCalled();
290
- });
291
-
292
- it("schedules the delayed function (via setTimeout) with the fake timer", function() {
293
- var fakeSetTimeout = jasmine.createSpy('setTimeout'),
294
- scheduleFunction = jasmine.createSpy('scheduleFunction'),
295
- delayedFunctionScheduler = { scheduleFunction: scheduleFunction },
296
- fakeGlobal = { setTimeout: fakeSetTimeout },
297
- delayedFn = jasmine.createSpy('delayedFn'),
298
- mockDate = { install: function() {}, tick: function() {}, uninstall: function() {} },
299
- clock = new jasmineUnderTest.Clock(fakeGlobal, function () { return delayedFunctionScheduler; }, mockDate),
300
- timeout = new clock.FakeTimeout();
301
-
302
- clock.install();
303
- clock.setTimeout(delayedFn, 0, 'a', 'b');
304
-
305
- expect(fakeSetTimeout).not.toHaveBeenCalled();
306
-
307
- if (!NODE_JS) {
308
- expect(delayedFunctionScheduler.scheduleFunction).toHaveBeenCalledWith(delayedFn, 0, ['a', 'b']);
309
- } else {
310
- expect(delayedFunctionScheduler.scheduleFunction).toHaveBeenCalledWith(delayedFn, 0, ['a', 'b'], false, timeout);
311
- }
312
- });
313
-
314
- it("returns an id for the delayed function", function() {
315
- var fakeSetTimeout = jasmine.createSpy('setTimeout'),
316
- scheduleId = 123,
317
- scheduleFunction = jasmine.createSpy('scheduleFunction').and.returnValue(scheduleId),
318
- delayedFunctionScheduler = {scheduleFunction: scheduleFunction},
319
- fakeGlobal = { setTimeout: fakeSetTimeout },
320
- delayedFn = jasmine.createSpy('delayedFn'),
321
- mockDate = { install: function() {}, tick: function() {}, uninstall: function() {} },
322
- clock = new jasmineUnderTest.Clock(fakeGlobal, function () { return delayedFunctionScheduler; }, mockDate),
323
- timeout;
324
-
325
- clock.install();
326
- timeout = clock.setTimeout(delayedFn, 0);
327
-
328
- if (!NODE_JS) {
329
- expect(timeout).toEqual(123);
330
- } else {
331
- expect(timeout.constructor.name).toEqual('FakeTimeout');
332
- }
333
- });
334
-
335
- it("clears the scheduled function with the scheduler", function() {
336
- var fakeClearTimeout = jasmine.createSpy('clearTimeout'),
337
- delayedFunctionScheduler = jasmine.createSpyObj('delayedFunctionScheduler', ['removeFunctionWithId']),
338
- fakeGlobal = { setTimeout: fakeClearTimeout },
339
- delayedFn = jasmine.createSpy('delayedFn'),
340
- mockDate = { install: function() {}, tick: function() {}, uninstall: function() {} },
341
- clock = new jasmineUnderTest.Clock(fakeGlobal, function () { return delayedFunctionScheduler; }, mockDate);
342
-
343
- clock.install();
344
- clock.clearTimeout(123);
345
-
346
- expect(fakeClearTimeout).not.toHaveBeenCalled();
347
- expect(delayedFunctionScheduler.removeFunctionWithId).toHaveBeenCalledWith(123);
348
- });
349
-
350
- it("schedules the delayed function with the fake timer", function() {
351
- var fakeSetInterval = jasmine.createSpy('setInterval'),
352
- scheduleFunction = jasmine.createSpy('scheduleFunction'),
353
- delayedFunctionScheduler = {scheduleFunction: scheduleFunction},
354
- fakeGlobal = { setInterval: fakeSetInterval },
355
- delayedFn = jasmine.createSpy('delayedFn'),
356
- mockDate = { install: function() {}, tick: function() {}, uninstall: function() {} },
357
- clock = new jasmineUnderTest.Clock(fakeGlobal, function () { return delayedFunctionScheduler; }, mockDate),
358
- timeout = new clock.FakeTimeout;
359
-
360
- clock.install();
361
- clock.setInterval(delayedFn, 0, 'a', 'b');
362
-
363
- expect(fakeSetInterval).not.toHaveBeenCalled();
364
-
365
- if (!NODE_JS) {
366
- expect(delayedFunctionScheduler.scheduleFunction).toHaveBeenCalledWith(delayedFn, 0, ['a', 'b'], true);
367
- } else {
368
- expect(delayedFunctionScheduler.scheduleFunction).toHaveBeenCalledWith(delayedFn, 0, ['a', 'b'], true, timeout);
369
- }
370
- });
371
-
372
- it("returns an id for the delayed function", function() {
373
- var fakeSetInterval = jasmine.createSpy('setInterval'),
374
- scheduleId = 123,
375
- scheduleFunction = jasmine.createSpy('scheduleFunction').and.returnValue(scheduleId),
376
- delayedFunctionScheduler = {scheduleFunction: scheduleFunction},
377
- fakeGlobal = { setInterval: fakeSetInterval },
378
- delayedFn = jasmine.createSpy('delayedFn'),
379
- mockDate = { install: function() {}, tick: function() {}, uninstall: function() {} },
380
- clock = new jasmineUnderTest.Clock(fakeGlobal, function () { return delayedFunctionScheduler; }, mockDate),
381
- interval;
382
-
383
- clock.install();
384
- interval = clock.setInterval(delayedFn, 0);
385
-
386
- if (!NODE_JS) {
387
- expect(interval).toEqual(123);
388
- } else {
389
- expect(interval.constructor.name).toEqual('FakeTimeout');
390
- }
391
- });
392
-
393
- it("clears the scheduled function with the scheduler", function() {
394
- var clearInterval = jasmine.createSpy('clearInterval'),
395
- delayedFunctionScheduler = jasmine.createSpyObj('delayedFunctionScheduler', ['removeFunctionWithId']),
396
- fakeGlobal = { setInterval: clearInterval },
397
- delayedFn = jasmine.createSpy('delayedFn'),
398
- mockDate = { install: function() {}, tick: function() {}, uninstall: function() {} },
399
- clock = new jasmineUnderTest.Clock(fakeGlobal, function () { return delayedFunctionScheduler; }, mockDate);
400
-
401
- clock.install();
402
- clock.clearInterval(123);
403
-
404
- expect(clearInterval).not.toHaveBeenCalled();
405
- expect(delayedFunctionScheduler.removeFunctionWithId).toHaveBeenCalledWith(123);
406
- });
407
-
408
- it("gives you a friendly reminder if the Clock is not installed and you tick", function() {
409
- var clock = new jasmineUnderTest.Clock({}, jasmine.createSpyObj('delayedFunctionScheduler', ['tick']));
410
- expect(function() {
411
- clock.tick(50);
412
- }).toThrow();
413
- });
414
- });
415
-
416
- describe("Clock (acceptance)", function() {
417
- it("can run setTimeouts/setIntervals synchronously", function() {
418
- var delayedFn1 = jasmine.createSpy('delayedFn1'),
419
- delayedFn2 = jasmine.createSpy('delayedFn2'),
420
- delayedFn3 = jasmine.createSpy('delayedFn3'),
421
- recurring1 = jasmine.createSpy('recurring1'),
422
- delayedFunctionScheduler = new jasmineUnderTest.DelayedFunctionScheduler(),
423
- mockDate = { install: function() {}, tick: function() {}, uninstall: function() {} },
424
- clock = new jasmineUnderTest.Clock({setTimeout: setTimeout}, function () { return delayedFunctionScheduler; }, mockDate);
425
-
426
- clock.install();
427
-
428
- clock.setTimeout(delayedFn1, 0);
429
- var intervalId = clock.setInterval(recurring1, 50);
430
- clock.setTimeout(delayedFn2, 100);
431
- clock.setTimeout(delayedFn3, 200);
432
-
433
- expect(delayedFn1).not.toHaveBeenCalled();
434
- expect(delayedFn2).not.toHaveBeenCalled();
435
- expect(delayedFn3).not.toHaveBeenCalled();
436
-
437
- clock.tick(0);
438
-
439
- expect(delayedFn1).toHaveBeenCalled();
440
- expect(delayedFn2).not.toHaveBeenCalled();
441
- expect(delayedFn3).not.toHaveBeenCalled();
442
-
443
- clock.tick(50);
444
-
445
- expect(recurring1).toHaveBeenCalled();
446
- expect(recurring1.calls.count()).toBe(1);
447
- expect(delayedFn2).not.toHaveBeenCalled();
448
- expect(delayedFn3).not.toHaveBeenCalled();
449
-
450
- clock.tick(50);
451
-
452
- expect(recurring1.calls.count()).toBe(2);
453
- expect(delayedFn2).toHaveBeenCalled();
454
- expect(delayedFn3).not.toHaveBeenCalled();
455
-
456
- clock.tick(100);
457
-
458
- expect(recurring1.calls.count()).toBe(4);
459
- expect(delayedFn3).toHaveBeenCalled();
460
-
461
- clock.clearInterval(intervalId);
462
- clock.tick(50);
463
-
464
- expect(recurring1.calls.count()).toBe(4);
465
- });
466
-
467
- it("can clear a previously set timeout", function() {
468
- var clearedFn = jasmine.createSpy('clearedFn'),
469
- delayedFunctionScheduler = new jasmineUnderTest.DelayedFunctionScheduler(),
470
- mockDate = { install: function() {}, tick: function() {}, uninstall: function() {} },
471
- clock = new jasmineUnderTest.Clock({setTimeout: function() {}}, function () { return delayedFunctionScheduler; }, mockDate),
472
- timeoutId;
473
-
474
- clock.install();
475
-
476
- timeoutId = clock.setTimeout(clearedFn, 100);
477
- expect(clearedFn).not.toHaveBeenCalled();
478
-
479
- clock.clearTimeout(timeoutId);
480
- clock.tick(100);
481
-
482
- expect(clearedFn).not.toHaveBeenCalled();
483
- });
484
-
485
- it("can clear a previously set interval using that interval's handler", function() {
486
- var spy = jasmine.createSpy('spy'),
487
- delayedFunctionScheduler = new jasmineUnderTest.DelayedFunctionScheduler(),
488
- mockDate = { install: function() {}, tick: function() {}, uninstall: function() {} },
489
- clock = new jasmineUnderTest.Clock({setInterval: function() {}}, function () { return delayedFunctionScheduler; }, mockDate),
490
- intervalId;
491
-
492
- clock.install();
493
-
494
- intervalId = clock.setInterval(function() {
495
- spy();
496
- clock.clearInterval(intervalId);
497
- }, 100);
498
- clock.tick(200);
499
-
500
- expect(spy.calls.count()).toEqual(1);
501
- });
502
-
503
- it("correctly schedules functions after the Clock has advanced", function() {
504
- var delayedFn1 = jasmine.createSpy('delayedFn1'),
505
- delayedFunctionScheduler = new jasmineUnderTest.DelayedFunctionScheduler(),
506
- mockDate = { install: function() {}, tick: function() {}, uninstall: function() {} },
507
- clock = new jasmineUnderTest.Clock({setTimeout: function() {}}, function () { return delayedFunctionScheduler; }, mockDate);
508
-
509
- clock.install();
510
-
511
- clock.tick(100);
512
- clock.setTimeout(delayedFn1, 10, ['some', 'arg']);
513
- clock.tick(5);
514
- expect(delayedFn1).not.toHaveBeenCalled();
515
- clock.tick(5);
516
- expect(delayedFn1).toHaveBeenCalled();
517
- });
518
-
519
- it("correctly schedules functions while the Clock is advancing", function() {
520
- var delayedFn1 = jasmine.createSpy('delayedFn1'),
521
- delayedFn2 = jasmine.createSpy('delayedFn2'),
522
- delayedFunctionScheduler = new jasmineUnderTest.DelayedFunctionScheduler(),
523
- mockDate = { install: function() {}, tick: function() {}, uninstall: function() {} },
524
- clock = new jasmineUnderTest.Clock({setTimeout: function() {}}, function () { return delayedFunctionScheduler; }, mockDate);
525
-
526
- delayedFn1.and.callFake(function() { clock.setTimeout(delayedFn2, 0); });
527
- clock.install();
528
- clock.setTimeout(delayedFn1, 5);
529
-
530
- clock.tick(5);
531
- expect(delayedFn1).toHaveBeenCalled();
532
- expect(delayedFn2).not.toHaveBeenCalled();
533
-
534
- clock.tick();
535
- expect(delayedFn2).toHaveBeenCalled();
536
- });
537
-
538
- it("correctly calls functions scheduled while the Clock is advancing", function() {
539
- var delayedFn1 = jasmine.createSpy('delayedFn1'),
540
- delayedFn2 = jasmine.createSpy('delayedFn2'),
541
- delayedFunctionScheduler = new jasmineUnderTest.DelayedFunctionScheduler(),
542
- mockDate = { install: function() {}, tick: function() {}, uninstall: function() {} },
543
- clock = new jasmineUnderTest.Clock({setTimeout: function() {}}, function () { return delayedFunctionScheduler; }, mockDate);
544
-
545
- delayedFn1.and.callFake(function() { clock.setTimeout(delayedFn2, 1); });
546
- clock.install();
547
- clock.setTimeout(delayedFn1, 5);
548
-
549
- clock.tick(6);
550
- expect(delayedFn1).toHaveBeenCalled();
551
- expect(delayedFn2).toHaveBeenCalled();
552
- });
553
-
554
- it("correctly schedules functions scheduled while the Clock is advancing but after the Clock is uninstalled", function() {
555
- var delayedFn1 = jasmine.createSpy('delayedFn1'),
556
- delayedFn2 = jasmine.createSpy('delayedFn2'),
557
- delayedFunctionScheduler = new jasmineUnderTest.DelayedFunctionScheduler(),
558
- mockDate = { install: function() {}, tick: function() {}, uninstall: function() {} },
559
- clock = new jasmineUnderTest.Clock({setTimeout: function() {}}, function () { return delayedFunctionScheduler; }, mockDate);
560
-
561
- delayedFn1.and.callFake(function() {
562
- clock.uninstall();
563
- clock.install();
564
- clock.setTimeout(delayedFn2, 0);
565
- });
566
-
567
- clock.install();
568
- clock.setTimeout(delayedFn1, 1);
569
-
570
- clock.tick(1);
571
- expect(delayedFn1).toHaveBeenCalled();
572
- expect(delayedFn2).not.toHaveBeenCalled();
573
-
574
- clock.tick(1);
575
- expect(delayedFn2).toHaveBeenCalled();
576
- });
577
-
578
- it("does not mock the Date object by default", function() {
579
- var delayedFunctionScheduler = new jasmineUnderTest.DelayedFunctionScheduler(),
580
- global = {Date: Date},
581
- mockDate = new jasmineUnderTest.MockDate(global),
582
- clock = new jasmineUnderTest.Clock({setTimeout: setTimeout}, function () { return delayedFunctionScheduler; }, mockDate);
583
-
584
- clock.install();
585
-
586
- expect(global.Date).toEqual(Date);
587
-
588
- var now = new global.Date().getTime();
589
-
590
- clock.tick(50);
591
-
592
- expect(new global.Date().getTime() - now).not.toEqual(50);
593
- });
594
-
595
- it("mocks the Date object and sets it to current time", function() {
596
- var delayedFunctionScheduler = new jasmineUnderTest.DelayedFunctionScheduler(),
597
- global = {Date: Date},
598
- mockDate = new jasmineUnderTest.MockDate(global),
599
- clock = new jasmineUnderTest.Clock({setTimeout: setTimeout}, function () { return delayedFunctionScheduler; }, mockDate);
600
-
601
- clock.install().mockDate();
602
-
603
- var now = new global.Date().getTime();
604
-
605
- clock.tick(50);
606
-
607
- expect(new global.Date().getTime() - now).toEqual(50);
608
-
609
- var timeoutDate = 0;
610
- clock.setTimeout(function() {
611
- timeoutDate = new global.Date().getTime();
612
- }, 100);
613
-
614
- clock.tick(100);
615
-
616
- expect(timeoutDate - now).toEqual(150);
617
- });
618
-
619
- it("mocks the Date object and sets it to a given time", function() {
620
- var delayedFunctionScheduler = new jasmineUnderTest.DelayedFunctionScheduler(),
621
- global = {Date: Date},
622
- mockDate = new jasmineUnderTest.MockDate(global),
623
- clock = new jasmineUnderTest.Clock({setTimeout: setTimeout}, function () { return delayedFunctionScheduler; }, mockDate),
624
- baseTime = new Date(2013, 9, 23);
625
-
626
-
627
- clock.install().mockDate(baseTime);
628
-
629
- var now = new global.Date().getTime();
630
-
631
- expect(now).toEqual(baseTime.getTime());
632
-
633
- clock.tick(50);
634
-
635
- expect(new global.Date().getTime()).toEqual(baseTime.getTime() + 50);
636
-
637
- var timeoutDate = 0;
638
- clock.setTimeout(function() {
639
- timeoutDate = new global.Date().getTime();
640
- }, 100);
641
-
642
- clock.tick(100);
643
-
644
- expect(timeoutDate).toEqual(baseTime.getTime() + 150);
645
- });
646
-
647
- it("mocks the Date object and updates the date per delayed function", function () {
648
- var delayedFunctionScheduler = new jasmineUnderTest.DelayedFunctionScheduler(),
649
- global = {Date: Date},
650
- mockDate = new jasmineUnderTest.MockDate(global),
651
- clock = new jasmineUnderTest.Clock({setTimeout: setTimeout}, function () { return delayedFunctionScheduler; }, mockDate),
652
- baseTime = new Date();
653
-
654
- clock.install().mockDate(baseTime);
655
-
656
- var actualTimes = [];
657
- var pushCurrentTime = function() { actualTimes.push(global.Date().getTime()); };
658
- delayedFunctionScheduler.scheduleFunction(pushCurrentTime);
659
- delayedFunctionScheduler.scheduleFunction(pushCurrentTime, 1);
660
- delayedFunctionScheduler.scheduleFunction(pushCurrentTime, 3);
661
-
662
- clock.tick(1);
663
- expect(global.Date().getTime()).toEqual(baseTime.getTime() + 1);
664
-
665
- clock.tick(3);
666
- expect(global.Date().getTime()).toEqual(baseTime.getTime() + 4);
667
-
668
- clock.tick(1);
669
- expect(global.Date().getTime()).toEqual(baseTime.getTime() + 5);
670
-
671
- expect(actualTimes).toEqual([baseTime.getTime(), baseTime.getTime() + 1, baseTime.getTime() + 3]);
672
- })
673
-
674
- it('correctly clears a scheduled timeout while the Clock is advancing', function () {
675
- var delayedFunctionScheduler = new jasmineUnderTest.DelayedFunctionScheduler(),
676
- global = {Date: Date, setTimeout: undefined},
677
- mockDate = new jasmineUnderTest.MockDate(global),
678
- clock = new jasmineUnderTest.Clock(global, function () { return delayedFunctionScheduler; }, mockDate);
679
-
680
- clock.install();
681
-
682
- var timerId2;
683
-
684
- global.setTimeout(function () {
685
- global.clearTimeout(timerId2);
686
- }, 100);
687
-
688
- timerId2 = global.setTimeout(fail, 100);
689
-
690
- clock.tick(100);
691
- });
692
-
693
- it('correctly clears a scheduled interval while the Clock is advancing', function () {
694
- var delayedFunctionScheduler = new jasmineUnderTest.DelayedFunctionScheduler(),
695
- global = {Date: Date, setTimeout: undefined},
696
- mockDate = new jasmineUnderTest.MockDate(global),
697
- clock = new jasmineUnderTest.Clock(global, function () { return delayedFunctionScheduler; }, mockDate);
698
-
699
- clock.install();
700
-
701
- var timerId2;
702
- var timerId1 = global.setInterval(function () {
703
- global.clearInterval(timerId2);
704
- }, 100);
705
-
706
- timerId2 = global.setInterval(fail, 100);
707
-
708
- clock.tick(400);
709
- });
710
- });