jasmine-core 2.4.1 → 2.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (71) hide show
  1. checksums.yaml +4 -4
  2. data/lib/console/console.js +1 -1
  3. data/lib/jasmine-core/boot.js +1 -1
  4. data/lib/jasmine-core/jasmine-html.js +15 -7
  5. data/lib/jasmine-core/jasmine.js +261 -82
  6. data/lib/jasmine-core/node_boot.js +1 -1
  7. data/lib/jasmine-core/spec/console/ConsoleReporterSpec.js +16 -16
  8. data/lib/jasmine-core/spec/core/CallTrackerSpec.js +26 -11
  9. data/lib/jasmine-core/spec/core/ClockSpec.js +61 -42
  10. data/lib/jasmine-core/spec/core/DelayedFunctionSchedulerSpec.js +28 -15
  11. data/lib/jasmine-core/spec/core/EnvSpec.js +8 -8
  12. data/lib/jasmine-core/spec/core/ExceptionFormatterSpec.js +6 -6
  13. data/lib/jasmine-core/spec/core/ExceptionsSpec.js +1 -1
  14. data/lib/jasmine-core/spec/core/ExpectationResultSpec.js +8 -8
  15. data/lib/jasmine-core/spec/core/ExpectationSpec.js +17 -17
  16. data/lib/jasmine-core/spec/core/JsApiReporterSpec.js +14 -14
  17. data/lib/jasmine-core/spec/core/MockDateSpec.js +14 -14
  18. data/lib/jasmine-core/spec/core/PrettyPrintSpec.js +65 -56
  19. data/lib/jasmine-core/spec/core/QueueRunnerSpec.js +32 -18
  20. data/lib/jasmine-core/spec/core/ReportDispatcherSpec.js +27 -3
  21. data/lib/jasmine-core/spec/core/SpecSpec.js +37 -37
  22. data/lib/jasmine-core/spec/core/SpyRegistrySpec.js +46 -7
  23. data/lib/jasmine-core/spec/core/SpySpec.js +11 -11
  24. data/lib/jasmine-core/spec/core/SpyStrategySpec.js +25 -13
  25. data/lib/jasmine-core/spec/core/SuiteSpec.js +25 -25
  26. data/lib/jasmine-core/spec/core/TimerSpec.js +2 -2
  27. data/lib/jasmine-core/spec/core/TreeProcessorSpec.js +26 -26
  28. data/lib/jasmine-core/spec/core/UtilSpec.js +12 -12
  29. data/lib/jasmine-core/spec/core/asymmetric_equality/AnySpec.js +8 -8
  30. data/lib/jasmine-core/spec/core/asymmetric_equality/AnythingSpec.js +7 -7
  31. data/lib/jasmine-core/spec/core/asymmetric_equality/ArrayContainingSpec.js +6 -6
  32. data/lib/jasmine-core/spec/core/asymmetric_equality/ObjectContainingSpec.js +11 -11
  33. data/lib/jasmine-core/spec/core/asymmetric_equality/StringMatchingSpec.js +4 -4
  34. data/lib/jasmine-core/spec/core/formatErrorMsgSpec.js +13 -0
  35. data/lib/jasmine-core/spec/core/integration/CustomMatchersSpec.js +2 -2
  36. data/lib/jasmine-core/spec/core/integration/EnvSpec.js +195 -76
  37. data/lib/jasmine-core/spec/core/integration/SpecRunningSpec.js +20 -21
  38. data/lib/jasmine-core/spec/core/matchers/matchersUtilSpec.js +164 -114
  39. data/lib/jasmine-core/spec/core/matchers/toBeCloseToSpec.js +4 -4
  40. data/lib/jasmine-core/spec/core/matchers/toBeDefinedSpec.js +2 -2
  41. data/lib/jasmine-core/spec/core/matchers/toBeFalsySpec.js +2 -2
  42. data/lib/jasmine-core/spec/core/matchers/toBeGreaterThanOrEqualSpec.js +29 -0
  43. data/lib/jasmine-core/spec/core/matchers/toBeGreaterThanSpec.js +2 -2
  44. data/lib/jasmine-core/spec/core/matchers/toBeLessThanOrEqualSpec.js +29 -0
  45. data/lib/jasmine-core/spec/core/matchers/toBeLessThanSpec.js +2 -2
  46. data/lib/jasmine-core/spec/core/matchers/toBeNaNSpec.js +3 -3
  47. data/lib/jasmine-core/spec/core/matchers/toBeNullSpec.js +2 -2
  48. data/lib/jasmine-core/spec/core/matchers/toBeSpec.js +2 -2
  49. data/lib/jasmine-core/spec/core/matchers/toBeTruthySpec.js +2 -2
  50. data/lib/jasmine-core/spec/core/matchers/toBeUndefinedSpec.js +2 -2
  51. data/lib/jasmine-core/spec/core/matchers/toContainSpec.js +4 -4
  52. data/lib/jasmine-core/spec/core/matchers/toEqualSpec.js +2 -2
  53. data/lib/jasmine-core/spec/core/matchers/toHaveBeenCalledSpec.js +11 -11
  54. data/lib/jasmine-core/spec/core/matchers/toHaveBeenCalledTimesSpec.js +22 -17
  55. data/lib/jasmine-core/spec/core/matchers/toHaveBeenCalledWithSpec.js +11 -10
  56. data/lib/jasmine-core/spec/core/matchers/toMatchSpec.js +7 -6
  57. data/lib/jasmine-core/spec/core/matchers/toThrowErrorSpec.js +24 -24
  58. data/lib/jasmine-core/spec/core/matchers/toThrowSpec.js +9 -8
  59. data/lib/jasmine-core/spec/helpers/defineJasmineUnderTest.js +3 -3
  60. data/lib/jasmine-core/spec/helpers/nodeDefineJasmineUnderTest.js +5 -5
  61. data/lib/jasmine-core/spec/html/HtmlReporterSpec.js +95 -59
  62. data/lib/jasmine-core/spec/html/HtmlSpecFilterSpec.js +3 -3
  63. data/lib/jasmine-core/spec/html/MatchersHtmlSpec.js +1 -1
  64. data/lib/jasmine-core/spec/html/PrettyPrintHtmlSpec.js +4 -4
  65. data/lib/jasmine-core/spec/html/QueryStringSpec.js +5 -5
  66. data/lib/jasmine-core/spec/html/ResultsNodeSpec.js +4 -4
  67. data/lib/jasmine-core/spec/npmPackage/npmPackageSpec.js +2 -2
  68. data/lib/jasmine-core/spec/performance/large_object_test.js +1 -1
  69. data/lib/jasmine-core/version.rb +1 -1
  70. metadata +5 -3
  71. data/lib/jasmine-core/spec/node_suite.js +0 -195
@@ -1,7 +1,7 @@
1
1
  describe("ReportDispatcher", function() {
2
2
 
3
3
  it("builds an interface of requested methods", function() {
4
- var dispatcher = new j$.ReportDispatcher(['foo', 'bar', 'baz']);
4
+ var dispatcher = new jasmineUnderTest.ReportDispatcher(['foo', 'bar', 'baz']);
5
5
 
6
6
  expect(dispatcher.foo).toBeDefined();
7
7
  expect(dispatcher.bar).toBeDefined();
@@ -9,7 +9,7 @@ describe("ReportDispatcher", function() {
9
9
  });
10
10
 
11
11
  it("dispatches requested methods to added reporters", function() {
12
- var dispatcher = new j$.ReportDispatcher(['foo', 'bar']),
12
+ var dispatcher = new jasmineUnderTest.ReportDispatcher(['foo', 'bar']),
13
13
  reporter = jasmine.createSpyObj('reporter', ['foo', 'bar']),
14
14
  anotherReporter = jasmine.createSpyObj('reporter', ['foo', 'bar']);
15
15
 
@@ -28,7 +28,7 @@ describe("ReportDispatcher", function() {
28
28
  });
29
29
 
30
30
  it("does not dispatch to a reporter if the reporter doesn't accept the method", function() {
31
- var dispatcher = new j$.ReportDispatcher(['foo']),
31
+ var dispatcher = new jasmineUnderTest.ReportDispatcher(['foo']),
32
32
  reporter = jasmine.createSpyObj('reporter', ['baz']);
33
33
 
34
34
  dispatcher.addReporter(reporter);
@@ -37,4 +37,28 @@ describe("ReportDispatcher", function() {
37
37
  dispatcher.foo(123, 456);
38
38
  }).not.toThrow();
39
39
  });
40
+
41
+ it("allows providing a fallback reporter in case there's no other report", function() {
42
+ var dispatcher = new jasmineUnderTest.ReportDispatcher(['foo', 'bar']),
43
+ reporter = jasmine.createSpyObj('reporter', ['foo', 'bar']);
44
+
45
+ dispatcher.provideFallbackReporter(reporter);
46
+ dispatcher.foo(123, 456);
47
+ expect(reporter.foo).toHaveBeenCalledWith(123, 456);
48
+
49
+ });
50
+
51
+ it("does not call fallback reporting methods when another report is provided", function() {
52
+ var dispatcher = new jasmineUnderTest.ReportDispatcher(['foo', 'bar']),
53
+ reporter = jasmine.createSpyObj('reporter', ['foo', 'bar']),
54
+ fallbackReporter = jasmine.createSpyObj('otherReporter', ['foo', 'bar']);
55
+
56
+ dispatcher.provideFallbackReporter(fallbackReporter);
57
+ dispatcher.addReporter(reporter);
58
+ dispatcher.foo(123, 456);
59
+
60
+ expect(reporter.foo).toHaveBeenCalledWith(123, 456);
61
+ expect(fallbackReporter.foo).not.toHaveBeenCalledWith(123, 456);
62
+
63
+ });
40
64
  });
@@ -1,36 +1,36 @@
1
1
  describe("Spec", function() {
2
2
 
3
3
  it("#isPendingSpecException returns true for a pending spec exception", function() {
4
- var e = new Error(j$.Spec.pendingSpecExceptionMessage);
4
+ var e = new Error(jasmineUnderTest.Spec.pendingSpecExceptionMessage);
5
5
 
6
- expect(j$.Spec.isPendingSpecException(e)).toBe(true);
6
+ expect(jasmineUnderTest.Spec.isPendingSpecException(e)).toBe(true);
7
7
  });
8
8
 
9
9
  it("#isPendingSpecException returns true for a pending spec exception (even when FF bug is present)", function() {
10
10
  var fakeError = {
11
- toString: function() { return "Error: " + j$.Spec.pendingSpecExceptionMessage; }
11
+ toString: function() { return "Error: " + jasmineUnderTest.Spec.pendingSpecExceptionMessage; }
12
12
  };
13
13
 
14
- expect(j$.Spec.isPendingSpecException(fakeError)).toBe(true);
14
+ expect(jasmineUnderTest.Spec.isPendingSpecException(fakeError)).toBe(true);
15
15
  });
16
16
 
17
17
  it("#isPendingSpecException returns true for a pending spec exception with a custom message", function() {
18
- expect(j$.Spec.isPendingSpecException(j$.Spec.pendingSpecExceptionMessage + 'foo')).toBe(true);
18
+ expect(jasmineUnderTest.Spec.isPendingSpecException(jasmineUnderTest.Spec.pendingSpecExceptionMessage + 'foo')).toBe(true);
19
19
  });
20
20
 
21
21
  it("#isPendingSpecException returns false for not a pending spec exception", function() {
22
22
  var e = new Error("foo");
23
23
 
24
- expect(j$.Spec.isPendingSpecException(e)).toBe(false);
24
+ expect(jasmineUnderTest.Spec.isPendingSpecException(e)).toBe(false);
25
25
  });
26
26
 
27
27
  it("#isPendingSpecException returns false for thrown values that don't have toString", function() {
28
- expect(j$.Spec.isPendingSpecException(void 0)).toBe(false);
28
+ expect(jasmineUnderTest.Spec.isPendingSpecException(void 0)).toBe(false);
29
29
  });
30
30
 
31
31
  it("delegates execution to a QueueRunner", function() {
32
32
  var fakeQueueRunner = jasmine.createSpy('fakeQueueRunner'),
33
- spec = new j$.Spec({
33
+ spec = new jasmineUnderTest.Spec({
34
34
  description: 'my test',
35
35
  id: 'some-id',
36
36
  queueableFn: { fn: function() {} },
@@ -45,7 +45,7 @@ describe("Spec", function() {
45
45
  it("should call the start callback on execution", function() {
46
46
  var fakeQueueRunner = jasmine.createSpy('fakeQueueRunner'),
47
47
  startCallback = jasmine.createSpy('startCallback'),
48
- spec = new j$.Spec({
48
+ spec = new jasmineUnderTest.Spec({
49
49
  id: 123,
50
50
  description: 'foo bar',
51
51
  queueableFn: { fn: function() {} },
@@ -69,7 +69,7 @@ describe("Spec", function() {
69
69
  startCallback = jasmine.createSpy('start-callback').and.callFake(function() {
70
70
  expect(beforesWereCalled).toBe(false);
71
71
  }),
72
- spec = new j$.Spec({
72
+ spec = new jasmineUnderTest.Spec({
73
73
  queueableFn: { fn: function() {} },
74
74
  beforeFns: function() {
75
75
  return [function() {
@@ -93,7 +93,7 @@ describe("Spec", function() {
93
93
  expect(before).toHaveBeenCalled();
94
94
  expect(after).not.toHaveBeenCalled();
95
95
  }) },
96
- spec = new j$.Spec({
96
+ spec = new jasmineUnderTest.Spec({
97
97
  queueableFn: queueableFn,
98
98
  beforeAndAfterFns: function() {
99
99
  return {befores: [before], afters: [after]}
@@ -112,7 +112,7 @@ describe("Spec", function() {
112
112
 
113
113
  startCallback = jasmine.createSpy('startCallback'),
114
114
  resultCallback = jasmine.createSpy('resultCallback'),
115
- spec = new j$.Spec({
115
+ spec = new jasmineUnderTest.Spec({
116
116
  onStart: startCallback,
117
117
  queueableFn: { fn: null },
118
118
  resultCallback: resultCallback,
@@ -127,7 +127,7 @@ describe("Spec", function() {
127
127
  startCallback = jasmine.createSpy('startCallback'),
128
128
  specBody = jasmine.createSpy('specBody'),
129
129
  resultCallback = jasmine.createSpy('resultCallback'),
130
- spec = new j$.Spec({
130
+ spec = new jasmineUnderTest.Spec({
131
131
  onStart:startCallback,
132
132
  queueableFn: { fn: specBody },
133
133
  resultCallback: resultCallback,
@@ -152,7 +152,7 @@ describe("Spec", function() {
152
152
  startCallback = jasmine.createSpy('startCallback'),
153
153
  specBody = jasmine.createSpy('specBody'),
154
154
  resultCallback = jasmine.createSpy('resultCallback'),
155
- spec = new j$.Spec({
155
+ spec = new jasmineUnderTest.Spec({
156
156
  onStart:startCallback,
157
157
  queueableFn: { fn: specBody },
158
158
  resultCallback: resultCallback,
@@ -174,7 +174,7 @@ describe("Spec", function() {
174
174
  var fakeQueueRunner = jasmine.createSpy('fakeQueueRunner'),
175
175
  startCallback = jasmine.createSpy('startCallback'),
176
176
  resultCallback = jasmine.createSpy('resultCallback'),
177
- spec = new j$.Spec({
177
+ spec = new jasmineUnderTest.Spec({
178
178
  onStart: startCallback,
179
179
  resultCallback: resultCallback,
180
180
  description: "with a spec",
@@ -207,7 +207,7 @@ describe("Spec", function() {
207
207
 
208
208
  it("should call the done callback on execution complete", function() {
209
209
  var done = jasmine.createSpy('done callback'),
210
- spec = new j$.Spec({
210
+ spec = new jasmineUnderTest.Spec({
211
211
  queueableFn: { fn: function() {} },
212
212
  catchExceptions: function() { return false; },
213
213
  resultCallback: function() {},
@@ -220,18 +220,18 @@ describe("Spec", function() {
220
220
  });
221
221
 
222
222
  it("#status returns passing by default", function() {
223
- var spec = new j$.Spec({queueableFn: { fn: jasmine.createSpy("spec body")} });
223
+ var spec = new jasmineUnderTest.Spec({queueableFn: { fn: jasmine.createSpy("spec body")} });
224
224
  expect(spec.status()).toBe('passed');
225
225
  });
226
226
 
227
227
  it("#status returns passed if all expectations in the spec have passed", function() {
228
- var spec = new j$.Spec({queueableFn: { fn: jasmine.createSpy("spec body")} });
228
+ var spec = new jasmineUnderTest.Spec({queueableFn: { fn: jasmine.createSpy("spec body")} });
229
229
  spec.addExpectationResult(true);
230
230
  expect(spec.status()).toBe('passed');
231
231
  });
232
232
 
233
233
  it("#status returns failed if any expectations in the spec have failed", function() {
234
- var spec = new j$.Spec({queueableFn: { fn: jasmine.createSpy("spec body") } });
234
+ var spec = new jasmineUnderTest.Spec({queueableFn: { fn: jasmine.createSpy("spec body") } });
235
235
  spec.addExpectationResult(true);
236
236
  spec.addExpectationResult(false);
237
237
  expect(spec.status()).toBe('failed');
@@ -239,7 +239,7 @@ describe("Spec", function() {
239
239
 
240
240
  it("keeps track of passed and failed expectations", function() {
241
241
  var resultCallback = jasmine.createSpy('resultCallback'),
242
- spec = new j$.Spec({
242
+ spec = new jasmineUnderTest.Spec({
243
243
  queueableFn: { fn: jasmine.createSpy("spec body") },
244
244
  expectationResultFactory: function (data) { return data; },
245
245
  queueRunnerFactory: function(attrs) { attrs.onComplete(); },
@@ -256,7 +256,7 @@ describe("Spec", function() {
256
256
 
257
257
  it("throws an ExpectationFailed error upon receiving a failed expectation when 'throwOnExpectationFailure' is set", function() {
258
258
  var resultCallback = jasmine.createSpy('resultCallback'),
259
- spec = new j$.Spec({
259
+ spec = new jasmineUnderTest.Spec({
260
260
  queueableFn: { fn: function() {} },
261
261
  expectationResultFactory: function(data) { return data; },
262
262
  queueRunnerFactory: function(attrs) { attrs.onComplete(); },
@@ -267,7 +267,7 @@ describe("Spec", function() {
267
267
  spec.addExpectationResult(true, 'passed');
268
268
  expect(function() {
269
269
  spec.addExpectationResult(false, 'failed')
270
- }).toThrowError(j$.errors.ExpectationFailed);
270
+ }).toThrowError(jasmineUnderTest.errors.ExpectationFailed);
271
271
 
272
272
  spec.execute();
273
273
 
@@ -277,7 +277,7 @@ describe("Spec", function() {
277
277
 
278
278
  it("does not throw an ExpectationFailed error when handling an error", function() {
279
279
  var resultCallback = jasmine.createSpy('resultCallback'),
280
- spec = new j$.Spec({
280
+ spec = new jasmineUnderTest.Spec({
281
281
  queueableFn: { fn: function() {} },
282
282
  expectationResultFactory: function(data) { return data; },
283
283
  queueRunnerFactory: function(attrs) { attrs.onComplete(); },
@@ -291,7 +291,7 @@ describe("Spec", function() {
291
291
  it("can return its full name", function() {
292
292
  var specNameSpy = jasmine.createSpy('specNameSpy').and.returnValue('expected val');
293
293
 
294
- var spec = new j$.Spec({
294
+ var spec = new jasmineUnderTest.Spec({
295
295
  getSpecName: specNameSpy,
296
296
  queueableFn: { fn: null }
297
297
  });
@@ -303,9 +303,9 @@ describe("Spec", function() {
303
303
  describe("when a spec is marked pending during execution", function() {
304
304
  it("should mark the spec as pending", function() {
305
305
  var fakeQueueRunner = function(opts) {
306
- opts.onException(new Error(j$.Spec.pendingSpecExceptionMessage));
306
+ opts.onException(new Error(jasmineUnderTest.Spec.pendingSpecExceptionMessage));
307
307
  },
308
- spec = new j$.Spec({
308
+ spec = new jasmineUnderTest.Spec({
309
309
  description: 'my test',
310
310
  id: 'some-id',
311
311
  queueableFn: { fn: function() { } },
@@ -320,9 +320,9 @@ describe("Spec", function() {
320
320
 
321
321
  it("should set the pendingReason", function() {
322
322
  var fakeQueueRunner = function(opts) {
323
- opts.onException(new Error(j$.Spec.pendingSpecExceptionMessage + 'custom message'));
323
+ opts.onException(new Error(jasmineUnderTest.Spec.pendingSpecExceptionMessage + 'custom message'));
324
324
  },
325
- spec = new j$.Spec({
325
+ spec = new jasmineUnderTest.Spec({
326
326
  description: 'my test',
327
327
  id: 'some-id',
328
328
  queueableFn: { fn: function() { } },
@@ -338,7 +338,7 @@ describe("Spec", function() {
338
338
 
339
339
  it("should log a failure when handling an exception", function() {
340
340
  var resultCallback = jasmine.createSpy('resultCallback'),
341
- spec = new j$.Spec({
341
+ spec = new jasmineUnderTest.Spec({
342
342
  queueableFn: { fn: function() {} },
343
343
  expectationResultFactory: function(data) { return data; },
344
344
  queueRunnerFactory: function(attrs) { attrs.onComplete(); },
@@ -359,41 +359,41 @@ describe("Spec", function() {
359
359
 
360
360
  it("should not log an additional failure when handling an ExpectationFailed error", function() {
361
361
  var resultCallback = jasmine.createSpy('resultCallback'),
362
- spec = new j$.Spec({
362
+ spec = new jasmineUnderTest.Spec({
363
363
  queueableFn: { fn: function() {} },
364
364
  expectationResultFactory: function(data) { return data; },
365
365
  queueRunnerFactory: function(attrs) { attrs.onComplete(); },
366
366
  resultCallback: resultCallback
367
367
  });
368
368
 
369
- spec.onException(new j$.errors.ExpectationFailed());
369
+ spec.onException(new jasmineUnderTest.errors.ExpectationFailed());
370
370
  spec.execute();
371
371
 
372
372
  expect(resultCallback.calls.first().args[0].failedExpectations).toEqual([]);
373
373
  });
374
374
 
375
375
  it("retrieves a result with updated status", function() {
376
- var spec = new j$.Spec({ queueableFn: { fn: function() {} } });
376
+ var spec = new jasmineUnderTest.Spec({ queueableFn: { fn: function() {} } });
377
377
 
378
378
  expect(spec.getResult().status).toBe('passed');
379
379
  });
380
380
 
381
381
  it("retrives a result with disabled status", function() {
382
- var spec = new j$.Spec({ queueableFn: { fn: function() {} } });
382
+ var spec = new jasmineUnderTest.Spec({ queueableFn: { fn: function() {} } });
383
383
  spec.disable();
384
384
 
385
385
  expect(spec.getResult().status).toBe('disabled');
386
386
  });
387
387
 
388
388
  it("retrives a result with pending status", function() {
389
- var spec = new j$.Spec({ queueableFn: { fn: function() {} } });
389
+ var spec = new jasmineUnderTest.Spec({ queueableFn: { fn: function() {} } });
390
390
  spec.pend();
391
391
 
392
392
  expect(spec.getResult().status).toBe('pending');
393
393
  });
394
394
 
395
395
  it("should not be executable when disabled", function() {
396
- var spec = new j$.Spec({
396
+ var spec = new jasmineUnderTest.Spec({
397
397
  queueableFn: { fn: function() {} }
398
398
  });
399
399
  spec.disable();
@@ -402,7 +402,7 @@ describe("Spec", function() {
402
402
  });
403
403
 
404
404
  it("should be executable when pending", function() {
405
- var spec = new j$.Spec({
405
+ var spec = new jasmineUnderTest.Spec({
406
406
  queueableFn: { fn: function() {} }
407
407
  });
408
408
  spec.pend();
@@ -411,7 +411,7 @@ describe("Spec", function() {
411
411
  });
412
412
 
413
413
  it("should be executable when not disabled or pending", function() {
414
- var spec = new j$.Spec({
414
+ var spec = new jasmineUnderTest.Spec({
415
415
  queueableFn: { fn: function() {} }
416
416
  });
417
417
 
@@ -1,14 +1,14 @@
1
1
  describe("SpyRegistry", function() {
2
2
  describe("#spyOn", function() {
3
3
  it("checks for the existence of the object", function() {
4
- var spyRegistry = new j$.SpyRegistry();
4
+ var spyRegistry = new jasmineUnderTest.SpyRegistry();
5
5
  expect(function() {
6
6
  spyRegistry.spyOn(void 0, 'pants');
7
7
  }).toThrowError(/could not find an object/);
8
8
  });
9
9
 
10
10
  it("checks that a method name was passed", function() {
11
- var spyRegistry = new j$.SpyRegistry(),
11
+ var spyRegistry = new jasmineUnderTest.SpyRegistry(),
12
12
  subject = {};
13
13
 
14
14
  expect(function() {
@@ -17,7 +17,7 @@ describe("SpyRegistry", function() {
17
17
  });
18
18
 
19
19
  it("checks for the existence of the method", function() {
20
- var spyRegistry = new j$.SpyRegistry(),
20
+ var spyRegistry = new jasmineUnderTest.SpyRegistry(),
21
21
  subject = {};
22
22
 
23
23
  expect(function() {
@@ -27,7 +27,7 @@ describe("SpyRegistry", function() {
27
27
 
28
28
  it("checks if it has already been spied upon", function() {
29
29
  var spies = [],
30
- spyRegistry = new j$.SpyRegistry({currentSpies: function() { return spies; }}),
30
+ spyRegistry = new jasmineUnderTest.SpyRegistry({currentSpies: function() { return spies; }}),
31
31
  subject = { spiedFunc: function() {} };
32
32
 
33
33
  spyRegistry.spyOn(subject, 'spiedFunc');
@@ -54,7 +54,7 @@ describe("SpyRegistry", function() {
54
54
  });
55
55
 
56
56
  var spies = [],
57
- spyRegistry = new j$.SpyRegistry({currentSpies: function() { return spies; }}),
57
+ spyRegistry = new jasmineUnderTest.SpyRegistry({currentSpies: function() { return spies; }}),
58
58
  subject = { spiedFunc: scope.myFunc };
59
59
 
60
60
  expect(function() {
@@ -68,7 +68,7 @@ describe("SpyRegistry", function() {
68
68
 
69
69
  it("overrides the method on the object and returns the spy", function() {
70
70
  var originalFunctionWasCalled = false,
71
- spyRegistry = new j$.SpyRegistry(),
71
+ spyRegistry = new jasmineUnderTest.SpyRegistry(),
72
72
  subject = { spiedFunc: function() { originalFunctionWasCalled = true; } };
73
73
 
74
74
  var spy = spyRegistry.spyOn(subject, 'spiedFunc');
@@ -80,7 +80,7 @@ describe("SpyRegistry", function() {
80
80
  describe("#clearSpies", function() {
81
81
  it("restores the original functions on the spied-upon objects", function() {
82
82
  var spies = [],
83
- spyRegistry = new j$.SpyRegistry({currentSpies: function() { return spies; }}),
83
+ spyRegistry = new jasmineUnderTest.SpyRegistry({currentSpies: function() { return spies; }}),
84
84
  originalFunction = function() {},
85
85
  subject = { spiedFunc: originalFunction };
86
86
 
@@ -89,5 +89,44 @@ describe("SpyRegistry", function() {
89
89
 
90
90
  expect(subject.spiedFunc).toBe(originalFunction);
91
91
  });
92
+
93
+ it("restores the original functions, even when that spy has been replace and re-spied upon", function() {
94
+ var spies = [],
95
+ spyRegistry = new jasmineUnderTest.SpyRegistry({currentSpies: function() { return spies; }}),
96
+ originalFunction = function() {},
97
+ subject = { spiedFunc: originalFunction };
98
+
99
+ spyRegistry.spyOn(subject, 'spiedFunc');
100
+
101
+ // replace the original spy with some other function
102
+ subject.spiedFunc = function() {};
103
+
104
+ // spy on the function in that location again
105
+ spyRegistry.spyOn(subject, 'spiedFunc');
106
+
107
+ spyRegistry.clearSpies();
108
+
109
+ expect(subject.spiedFunc).toBe(originalFunction);
110
+ });
111
+
112
+ it("does not add a property that the spied-upon object didn't originally have", function() {
113
+ // IE 8 doesn't support `Object.create`
114
+ if (jasmine.getEnv().ieVersion < 9) { return; }
115
+
116
+ var spies = [],
117
+ spyRegistry = new jasmineUnderTest.SpyRegistry({currentSpies: function() { return spies; }}),
118
+ originalFunction = function() {},
119
+ subjectParent = {spiedFunc: originalFunction};
120
+
121
+ var subject = Object.create(subjectParent);
122
+
123
+ expect(subject.hasOwnProperty('spiedFunc')).toBe(false);
124
+
125
+ spyRegistry.spyOn(subject, 'spiedFunc');
126
+ spyRegistry.clearSpies();
127
+
128
+ expect(subject.hasOwnProperty('spiedFunc')).toBe(false);
129
+ expect(subject.spiedFunc).toBe(originalFunction);
130
+ })
92
131
  });
93
132
  });
@@ -9,7 +9,7 @@ describe('Spies', function () {
9
9
  });
10
10
 
11
11
  it("preserves the properties of the spied function", function() {
12
- var spy = j$.createSpy(TestClass.prototype, TestClass.prototype.someFunction);
12
+ var spy = jasmineUnderTest.createSpy(TestClass.prototype, TestClass.prototype.someFunction);
13
13
 
14
14
  expect(spy.bob).toEqual("test");
15
15
  });
@@ -18,19 +18,19 @@ describe('Spies', function () {
18
18
  TestClass.prototype.someFunction.and = "turkey";
19
19
 
20
20
  expect(function() {
21
- j$.createSpy(TestClass.prototype, TestClass.prototype.someFunction);
21
+ jasmineUnderTest.createSpy(TestClass.prototype, TestClass.prototype.someFunction);
22
22
  }).toThrowError("Jasmine spies would overwrite the 'and' and 'calls' properties on the object being spied upon");
23
23
  });
24
24
 
25
25
  it("adds a spyStrategy and callTracker to the spy", function() {
26
- var spy = j$.createSpy(TestClass.prototype, TestClass.prototype.someFunction);
26
+ var spy = jasmineUnderTest.createSpy(TestClass.prototype, TestClass.prototype.someFunction);
27
27
 
28
- expect(spy.and).toEqual(jasmine.any(j$.SpyStrategy));
29
- expect(spy.calls).toEqual(jasmine.any(j$.CallTracker));
28
+ expect(spy.and).toEqual(jasmine.any(jasmineUnderTest.SpyStrategy));
29
+ expect(spy.calls).toEqual(jasmine.any(jasmineUnderTest.CallTracker));
30
30
  });
31
31
 
32
32
  it("tracks the argument of calls", function () {
33
- var spy = j$.createSpy(TestClass.prototype, TestClass.prototype.someFunction);
33
+ var spy = jasmineUnderTest.createSpy(TestClass.prototype, TestClass.prototype.someFunction);
34
34
  var trackSpy = spyOn(spy.calls, "track");
35
35
 
36
36
  spy("arg");
@@ -39,7 +39,7 @@ describe('Spies', function () {
39
39
  });
40
40
 
41
41
  it("tracks the context of calls", function () {
42
- var spy = j$.createSpy(TestClass.prototype, TestClass.prototype.someFunction);
42
+ var spy = jasmineUnderTest.createSpy(TestClass.prototype, TestClass.prototype.someFunction);
43
43
  var trackSpy = spyOn(spy.calls, "track");
44
44
 
45
45
  var contextObject = { spyMethod: spy };
@@ -49,7 +49,7 @@ describe('Spies', function () {
49
49
  });
50
50
 
51
51
  it("tracks the return value of calls", function () {
52
- var spy = j$.createSpy(TestClass.prototype, TestClass.prototype.someFunction);
52
+ var spy = jasmineUnderTest.createSpy(TestClass.prototype, TestClass.prototype.someFunction);
53
53
  var trackSpy = spyOn(spy.calls, "track");
54
54
 
55
55
  spy.and.returnValue("return value");
@@ -61,7 +61,7 @@ describe('Spies', function () {
61
61
 
62
62
  describe("createSpyObj", function() {
63
63
  it("should create an object with a bunch of spy methods when you call jasmine.createSpyObj()", function() {
64
- var spyObj = j$.createSpyObj('BaseName', ['method1', 'method2']);
64
+ var spyObj = jasmineUnderTest.createSpyObj('BaseName', ['method1', 'method2']);
65
65
 
66
66
  expect(spyObj).toEqual({ method1: jasmine.any(Function), method2: jasmine.any(Function)});
67
67
  expect(spyObj.method1.and.identity()).toEqual('BaseName.method1');
@@ -69,7 +69,7 @@ describe('Spies', function () {
69
69
  });
70
70
 
71
71
  it("should allow you to omit the baseName", function() {
72
- var spyObj = j$.createSpyObj(['method1', 'method2']);
72
+ var spyObj = jasmineUnderTest.createSpyObj(['method1', 'method2']);
73
73
 
74
74
  expect(spyObj).toEqual({ method1: jasmine.any(Function), method2: jasmine.any(Function)});
75
75
  expect(spyObj.method1.and.identity()).toEqual('unknown.method1');
@@ -78,7 +78,7 @@ describe('Spies', function () {
78
78
 
79
79
  it("should throw if you do not pass an array argument", function() {
80
80
  expect(function() {
81
- j$.createSpyObj('BaseName');
81
+ jasmineUnderTest.createSpyObj('BaseName');
82
82
  }).toThrow("createSpyObj requires a non-empty array of method names to create spies for");
83
83
  });
84
84
  });