jasmine-core 2.0.0.rc3 → 2.0.0.rc5
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/console/console.js +160 -0
- data/lib/jasmine-core/boot.js +84 -8
- data/lib/jasmine-core/boot/boot.js +84 -8
- data/lib/jasmine-core/jasmine-html.js +6 -3
- data/lib/jasmine-core/jasmine.js +236 -260
- data/lib/jasmine-core/spec/core/AnySpec.js +1 -1
- data/lib/jasmine-core/spec/core/ClockSpec.js +0 -20
- data/lib/jasmine-core/spec/core/CustomMatchersSpec.js +149 -96
- data/lib/jasmine-core/spec/core/EnvSpec.js +7 -39
- data/lib/jasmine-core/spec/core/ExceptionsSpec.js +13 -19
- data/lib/jasmine-core/spec/core/ExpectationSpec.js +74 -1
- data/lib/jasmine-core/spec/core/JsApiReporterSpec.js +0 -1
- data/lib/jasmine-core/spec/core/ObjectContainingSpec.js +1 -1
- data/lib/jasmine-core/spec/core/QueueRunnerSpec.js +28 -20
- data/lib/jasmine-core/spec/core/ReportDispatcherSpec.js +1 -1
- data/lib/jasmine-core/spec/core/SpecRunningSpec.js +0 -1
- data/lib/jasmine-core/spec/core/SpecSpec.js +2 -11
- data/lib/jasmine-core/spec/core/SuiteSpec.js +2 -50
- data/lib/jasmine-core/spec/core/matchers/matchersUtilSpec.js +13 -1
- data/lib/jasmine-core/spec/core/matchers/toThrowErrorSpec.js +4 -4
- data/lib/jasmine-core/spec/core/matchers/toThrowSpec.js +3 -2
- data/lib/jasmine-core/spec/html/HtmlSpecFilterSpec.js +1 -1
- data/lib/jasmine-core/spec/html/MatchersHtmlSpec.js +0 -1
- data/lib/jasmine-core/spec/html/QueryStringSpec.js +1 -1
- data/lib/jasmine-core/spec/html/ResultsNodeSpec.js +1 -1
- data/lib/jasmine-core/spec/node_suite.js +13 -11
- data/lib/jasmine-core/spec/support/dev_boot.js +17 -6
- data/lib/jasmine-core/version.rb +1 -1
- metadata +41 -13
- checksums.yaml +0 -7
@@ -26,11 +26,12 @@ jasmineRequire.html = function(j$) {
|
|
26
26
|
j$.QueryString = jasmineRequire.QueryString();
|
27
27
|
j$.HtmlSpecFilter = jasmineRequire.HtmlSpecFilter();
|
28
28
|
};
|
29
|
+
|
29
30
|
jasmineRequire.HtmlReporter = function(j$) {
|
30
31
|
|
31
32
|
var noopTimer = {
|
32
|
-
start: function(){},
|
33
|
-
elapsed: function(){ return 0; }
|
33
|
+
start: function() {},
|
34
|
+
elapsed: function() { return 0; }
|
34
35
|
};
|
35
36
|
|
36
37
|
function HtmlReporter(options) {
|
@@ -101,7 +102,8 @@ jasmineRequire.HtmlReporter = function(j$) {
|
|
101
102
|
symbols.appendChild(createDom("li", {
|
102
103
|
className: result.status,
|
103
104
|
id: "spec_" + result.id,
|
104
|
-
title: result.fullName
|
105
|
+
title: result.fullName
|
106
|
+
}
|
105
107
|
));
|
106
108
|
|
107
109
|
if (result.status == "failed") {
|
@@ -307,6 +309,7 @@ jasmineRequire.ResultsNode = function() {
|
|
307
309
|
|
308
310
|
return ResultsNode;
|
309
311
|
};
|
312
|
+
|
310
313
|
jasmineRequire.QueryString = function() {
|
311
314
|
function QueryString(options) {
|
312
315
|
|
data/lib/jasmine-core/jasmine.js
CHANGED
@@ -142,18 +142,18 @@ getJasmineRequireObj().base = function(j$) {
|
|
142
142
|
j$.createSpy = function(name, originalFn) {
|
143
143
|
|
144
144
|
var spyStrategy = new j$.SpyStrategy({
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
145
|
+
name: name,
|
146
|
+
fn: originalFn,
|
147
|
+
getSpy: function() { return spy; }
|
148
|
+
}),
|
149
|
+
callTracker = new j$.CallTracker(),
|
150
|
+
spy = function() {
|
151
|
+
callTracker.track({
|
152
|
+
object: this,
|
153
|
+
args: Array.prototype.slice.apply(arguments)
|
154
|
+
});
|
155
|
+
return spyStrategy.exec.apply(this, arguments);
|
156
|
+
};
|
157
157
|
|
158
158
|
for (var prop in originalFn) {
|
159
159
|
if (prop === 'and' || prop === 'calls') {
|
@@ -174,7 +174,7 @@ getJasmineRequireObj().base = function(j$) {
|
|
174
174
|
return false;
|
175
175
|
}
|
176
176
|
return putativeSpy.and instanceof j$.SpyStrategy &&
|
177
|
-
|
177
|
+
putativeSpy.calls instanceof j$.CallTracker;
|
178
178
|
};
|
179
179
|
|
180
180
|
j$.createSpyObj = function(baseName, methodNames) {
|
@@ -194,14 +194,16 @@ getJasmineRequireObj().util = function() {
|
|
194
194
|
var util = {};
|
195
195
|
|
196
196
|
util.inherit = function(childClass, parentClass) {
|
197
|
-
var
|
197
|
+
var Subclass = function() {
|
198
198
|
};
|
199
|
-
|
200
|
-
childClass.prototype = new
|
199
|
+
Subclass.prototype = parentClass.prototype;
|
200
|
+
childClass.prototype = new Subclass();
|
201
201
|
};
|
202
202
|
|
203
203
|
util.htmlEscape = function(str) {
|
204
|
-
if (!str)
|
204
|
+
if (!str) {
|
205
|
+
return str;
|
206
|
+
}
|
205
207
|
return str.replace(/&/g, '&')
|
206
208
|
.replace(/</g, '<')
|
207
209
|
.replace(/>/g, '>');
|
@@ -209,7 +211,9 @@ getJasmineRequireObj().util = function() {
|
|
209
211
|
|
210
212
|
util.argsToArray = function(args) {
|
211
213
|
var arrayOfArgs = [];
|
212
|
-
for (var i = 0; i < args.length; i++)
|
214
|
+
for (var i = 0; i < args.length; i++) {
|
215
|
+
arrayOfArgs.push(args[i]);
|
216
|
+
}
|
213
217
|
return arrayOfArgs;
|
214
218
|
};
|
215
219
|
|
@@ -222,7 +226,6 @@ getJasmineRequireObj().util = function() {
|
|
222
226
|
|
223
227
|
getJasmineRequireObj().Spec = function(j$) {
|
224
228
|
function Spec(attrs) {
|
225
|
-
this.encounteredExpectations = false;
|
226
229
|
this.expectationFactory = attrs.expectationFactory;
|
227
230
|
this.resultCallback = attrs.resultCallback || function() {};
|
228
231
|
this.id = attrs.id;
|
@@ -248,13 +251,11 @@ getJasmineRequireObj().Spec = function(j$) {
|
|
248
251
|
id: this.id,
|
249
252
|
description: this.description,
|
250
253
|
fullName: this.getFullName(),
|
251
|
-
status: this.status(),
|
252
254
|
failedExpectations: []
|
253
255
|
};
|
254
256
|
}
|
255
257
|
|
256
258
|
Spec.prototype.addExpectationResult = function(passed, data) {
|
257
|
-
this.encounteredExpectations = true;
|
258
259
|
if (passed) {
|
259
260
|
return;
|
260
261
|
}
|
@@ -278,7 +279,7 @@ getJasmineRequireObj().Spec = function(j$) {
|
|
278
279
|
function timeoutable(fn) {
|
279
280
|
return function(done) {
|
280
281
|
var timeout = Function.prototype.apply.apply(self.timer.setTimeout, [j$.getGlobal(), [function() {
|
281
|
-
onException(new Error('timeout'));
|
282
|
+
onException(new Error('Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.'));
|
282
283
|
done();
|
283
284
|
}, j$.DEFAULT_TIMEOUT_INTERVAL]]);
|
284
285
|
|
@@ -292,8 +293,8 @@ getJasmineRequireObj().Spec = function(j$) {
|
|
292
293
|
}
|
293
294
|
|
294
295
|
var befores = this.beforeFns() || [],
|
295
|
-
|
296
|
-
|
296
|
+
afters = this.afterFns() || [],
|
297
|
+
thisOne = (this.fn.length) ? timeoutable(this.fn) : this.fn;
|
297
298
|
var allFns = befores.concat(thisOne).concat(afters);
|
298
299
|
|
299
300
|
this.queueRunner({
|
@@ -303,18 +304,18 @@ getJasmineRequireObj().Spec = function(j$) {
|
|
303
304
|
});
|
304
305
|
|
305
306
|
function onException(e) {
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
307
|
+
if (Spec.isPendingSpecException(e)) {
|
308
|
+
self.pend();
|
309
|
+
return;
|
310
|
+
}
|
310
311
|
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
|
312
|
+
self.addExpectationResult(false, {
|
313
|
+
matcherName: "",
|
314
|
+
passed: false,
|
315
|
+
expected: "",
|
316
|
+
actual: "",
|
317
|
+
error: e
|
318
|
+
});
|
318
319
|
}
|
319
320
|
|
320
321
|
function complete() {
|
@@ -340,7 +341,7 @@ getJasmineRequireObj().Spec = function(j$) {
|
|
340
341
|
return 'disabled';
|
341
342
|
}
|
342
343
|
|
343
|
-
if (this.markedPending
|
344
|
+
if (this.markedPending) {
|
344
345
|
return 'pending';
|
345
346
|
}
|
346
347
|
|
@@ -375,6 +376,8 @@ getJasmineRequireObj().Env = function(j$) {
|
|
375
376
|
var self = this;
|
376
377
|
var global = options.global || j$.getGlobal();
|
377
378
|
|
379
|
+
var totalSpecsDefined = 0;
|
380
|
+
|
378
381
|
var catchExceptions = true;
|
379
382
|
|
380
383
|
var realSetTimeout = j$.getGlobal().setTimeout;
|
@@ -385,9 +388,10 @@ getJasmineRequireObj().Env = function(j$) {
|
|
385
388
|
|
386
389
|
var spies = [];
|
387
390
|
|
388
|
-
|
391
|
+
var currentSpec = null;
|
392
|
+
var currentSuite = null;
|
389
393
|
|
390
|
-
|
394
|
+
var reporter = new j$.ReportDispatcher([
|
391
395
|
"jasmineStarted",
|
392
396
|
"jasmineDone",
|
393
397
|
"suiteStarted",
|
@@ -396,14 +400,11 @@ getJasmineRequireObj().Env = function(j$) {
|
|
396
400
|
"specDone"
|
397
401
|
]);
|
398
402
|
|
399
|
-
this.lastUpdate = 0;
|
400
403
|
this.specFilter = function() {
|
401
404
|
return true;
|
402
405
|
};
|
403
406
|
|
404
|
-
|
405
|
-
this.nextSuiteId_ = 0;
|
406
|
-
this.equalityTesters_ = [];
|
407
|
+
var equalityTesters = [];
|
407
408
|
|
408
409
|
var customEqualityTesters = [];
|
409
410
|
this.addCustomEqualityTester = function(tester) {
|
@@ -412,6 +413,16 @@ getJasmineRequireObj().Env = function(j$) {
|
|
412
413
|
|
413
414
|
j$.Expectation.addCoreMatchers(j$.matchers);
|
414
415
|
|
416
|
+
var nextSpecId = 0;
|
417
|
+
var getNextSpecId = function() {
|
418
|
+
return 'spec' + nextSpecId++;
|
419
|
+
};
|
420
|
+
|
421
|
+
var nextSuiteId = 0;
|
422
|
+
var getNextSuiteId = function() {
|
423
|
+
return 'suite' + nextSuiteId++;
|
424
|
+
};
|
425
|
+
|
415
426
|
var expectationFactory = function(actual, spec) {
|
416
427
|
return j$.Expectation.Factory({
|
417
428
|
util: j$.matchersUtil,
|
@@ -426,32 +437,34 @@ getJasmineRequireObj().Env = function(j$) {
|
|
426
437
|
};
|
427
438
|
|
428
439
|
var specStarted = function(spec) {
|
429
|
-
|
430
|
-
|
440
|
+
currentSpec = spec;
|
441
|
+
reporter.specStarted(spec.result);
|
431
442
|
};
|
432
443
|
|
433
|
-
var beforeFns = function(
|
444
|
+
var beforeFns = function(suite) {
|
434
445
|
return function() {
|
435
446
|
var befores = [];
|
436
|
-
|
447
|
+
while(suite) {
|
437
448
|
befores = befores.concat(suite.beforeFns);
|
449
|
+
suite = suite.parentSuite;
|
438
450
|
}
|
439
451
|
return befores.reverse();
|
440
452
|
};
|
441
453
|
};
|
442
454
|
|
443
|
-
var afterFns = function(
|
455
|
+
var afterFns = function(suite) {
|
444
456
|
return function() {
|
445
457
|
var afters = [];
|
446
|
-
|
458
|
+
while(suite) {
|
447
459
|
afters = afters.concat(suite.afterFns);
|
460
|
+
suite = suite.parentSuite;
|
448
461
|
}
|
449
462
|
return afters;
|
450
463
|
};
|
451
464
|
};
|
452
465
|
|
453
|
-
var getSpecName = function(spec,
|
454
|
-
return
|
466
|
+
var getSpecName = function(spec, suite) {
|
467
|
+
return suite.getFullName() + ' ' + spec.description;
|
455
468
|
};
|
456
469
|
|
457
470
|
// TODO: we may just be able to pass in the fn instead of wrapping here
|
@@ -474,10 +487,6 @@ getJasmineRequireObj().Env = function(j$) {
|
|
474
487
|
return catchExceptions;
|
475
488
|
};
|
476
489
|
|
477
|
-
this.catchException = function(e) {
|
478
|
-
return j$.Spec.isPendingSpecException(e) || catchExceptions;
|
479
|
-
};
|
480
|
-
|
481
490
|
var maximumSpecCallbackDepth = 20;
|
482
491
|
var currentSpecCallbackDepth = 0;
|
483
492
|
|
@@ -491,97 +500,33 @@ getJasmineRequireObj().Env = function(j$) {
|
|
491
500
|
}
|
492
501
|
}
|
493
502
|
|
494
|
-
var
|
495
|
-
|
496
|
-
options.clearStack = options.clearStack || clearStack;
|
497
|
-
|
498
|
-
new j$.QueueRunner(options).run(options.fns, 0);
|
503
|
+
var catchException = function(e) {
|
504
|
+
return j$.Spec.isPendingSpecException(e) || catchExceptions;
|
499
505
|
};
|
500
506
|
|
501
|
-
var
|
502
|
-
|
503
|
-
|
504
|
-
|
505
|
-
var spec = new j$.Spec({
|
506
|
-
id: self.nextSpecId(),
|
507
|
-
beforeFns: beforeFns(suite),
|
508
|
-
afterFns: afterFns(suite),
|
509
|
-
expectationFactory: expectationFactory,
|
510
|
-
exceptionFormatter: exceptionFormatter,
|
511
|
-
resultCallback: specResultCallback,
|
512
|
-
getSpecName: function(spec) {
|
513
|
-
return getSpecName(spec, suite);
|
514
|
-
},
|
515
|
-
onStart: specStarted,
|
516
|
-
description: description,
|
517
|
-
expectationResultFactory: expectationResultFactory,
|
518
|
-
queueRunner: queueRunnerFactory,
|
519
|
-
fn: fn,
|
520
|
-
timer: {setTimeout: realSetTimeout, clearTimeout: realClearTimeout}
|
521
|
-
});
|
522
|
-
|
523
|
-
runnableLookupTable[spec.id] = spec;
|
524
|
-
|
525
|
-
if (!self.specFilter(spec)) {
|
526
|
-
spec.disable();
|
527
|
-
}
|
528
|
-
|
529
|
-
return spec;
|
530
|
-
|
531
|
-
function removeAllSpies() {
|
532
|
-
for (var i = 0; i < spies.length; i++) {
|
533
|
-
var spyEntry = spies[i];
|
534
|
-
spyEntry.baseObj[spyEntry.methodName] = spyEntry.originalValue;
|
535
|
-
}
|
536
|
-
spies = [];
|
537
|
-
}
|
538
|
-
|
539
|
-
function specResultCallback(result) {
|
540
|
-
removeAllSpies();
|
541
|
-
j$.Expectation.resetMatchers();
|
542
|
-
customEqualityTesters.length = 0;
|
543
|
-
self.clock.uninstall();
|
544
|
-
self.currentSpec = null;
|
545
|
-
self.reporter.specDone(result);
|
546
|
-
}
|
547
|
-
};
|
507
|
+
var queueRunnerFactory = function(options) {
|
508
|
+
options.catchException = catchException;
|
509
|
+
options.clearStack = options.clearStack || clearStack;
|
548
510
|
|
549
|
-
|
550
|
-
self.reporter.suiteStarted(suite.result);
|
511
|
+
new j$.QueueRunner(options).execute();
|
551
512
|
};
|
552
513
|
|
553
|
-
var
|
554
|
-
|
555
|
-
this.topSuite = new j$.Suite({
|
514
|
+
var topSuite = new j$.Suite({
|
556
515
|
env: this,
|
557
|
-
id:
|
516
|
+
id: getNextSuiteId(),
|
558
517
|
description: 'Jasmine__TopLevel__Suite',
|
559
518
|
queueRunner: queueRunnerFactory,
|
560
|
-
completeCallback: function() {}, // TODO - hook this up
|
561
519
|
resultCallback: function() {} // TODO - hook this up
|
562
520
|
});
|
563
|
-
runnableLookupTable[
|
564
|
-
|
521
|
+
runnableLookupTable[topSuite.id] = topSuite;
|
522
|
+
currentSuite = topSuite;
|
565
523
|
|
566
|
-
this.
|
567
|
-
|
568
|
-
env: self,
|
569
|
-
id: self.nextSuiteId(),
|
570
|
-
description: description,
|
571
|
-
parentSuite: self.currentSuite,
|
572
|
-
queueRunner: queueRunnerFactory,
|
573
|
-
onStart: suiteStarted,
|
574
|
-
resultCallback: function(attrs) {
|
575
|
-
self.reporter.suiteDone(attrs);
|
576
|
-
}
|
577
|
-
});
|
578
|
-
|
579
|
-
runnableLookupTable[suite.id] = suite;
|
580
|
-
return suite;
|
524
|
+
this.topSuite = function() {
|
525
|
+
return topSuite;
|
581
526
|
};
|
582
527
|
|
583
528
|
this.execute = function(runnablesToRun) {
|
584
|
-
runnablesToRun = runnablesToRun || [
|
529
|
+
runnablesToRun = runnablesToRun || [topSuite.id];
|
585
530
|
|
586
531
|
var allFns = [];
|
587
532
|
for(var i = 0; i < runnablesToRun.length; i++) {
|
@@ -589,11 +534,19 @@ getJasmineRequireObj().Env = function(j$) {
|
|
589
534
|
allFns.push((function(runnable) { return function(done) { runnable.execute(done); }; })(runnable));
|
590
535
|
}
|
591
536
|
|
592
|
-
|
537
|
+
reporter.jasmineStarted({
|
593
538
|
totalSpecsDefined: totalSpecsDefined
|
594
539
|
});
|
595
540
|
|
596
|
-
queueRunnerFactory({fns: allFns, onComplete:
|
541
|
+
queueRunnerFactory({fns: allFns, onComplete: reporter.jasmineDone});
|
542
|
+
};
|
543
|
+
|
544
|
+
this.addReporter = function(reporterToAdd) {
|
545
|
+
reporter.addReporter(reporterToAdd);
|
546
|
+
};
|
547
|
+
|
548
|
+
this.addMatchers = function(matchersToAdd) {
|
549
|
+
j$.Expectation.addMatchers(matchersToAdd);
|
597
550
|
};
|
598
551
|
|
599
552
|
this.spyOn = function(obj, methodName) {
|
@@ -623,108 +576,133 @@ getJasmineRequireObj().Env = function(j$) {
|
|
623
576
|
|
624
577
|
return spy;
|
625
578
|
};
|
626
|
-
}
|
627
579
|
|
628
|
-
|
629
|
-
|
630
|
-
|
631
|
-
|
632
|
-
|
633
|
-
|
634
|
-
|
580
|
+
var suiteFactory = function(description) {
|
581
|
+
var suite = new j$.Suite({
|
582
|
+
env: self,
|
583
|
+
id: getNextSuiteId(),
|
584
|
+
description: description,
|
585
|
+
parentSuite: currentSuite,
|
586
|
+
queueRunner: queueRunnerFactory,
|
587
|
+
onStart: suiteStarted,
|
588
|
+
resultCallback: function(attrs) {
|
589
|
+
reporter.suiteDone(attrs);
|
590
|
+
}
|
591
|
+
});
|
635
592
|
|
636
|
-
|
637
|
-
|
638
|
-
|
593
|
+
runnableLookupTable[suite.id] = suite;
|
594
|
+
return suite;
|
595
|
+
};
|
639
596
|
|
597
|
+
this.describe = function(description, specDefinitions) {
|
598
|
+
var suite = suiteFactory(description);
|
640
599
|
|
641
|
-
|
642
|
-
|
643
|
-
|
644
|
-
return j$.version;
|
645
|
-
};
|
600
|
+
var parentSuite = currentSuite;
|
601
|
+
parentSuite.addChild(suite);
|
602
|
+
currentSuite = suite;
|
646
603
|
|
647
|
-
|
648
|
-
|
649
|
-
|
650
|
-
|
604
|
+
var declarationError = null;
|
605
|
+
try {
|
606
|
+
specDefinitions.call(suite);
|
607
|
+
} catch (e) {
|
608
|
+
declarationError = e;
|
609
|
+
}
|
651
610
|
|
652
|
-
|
653
|
-
|
654
|
-
|
655
|
-
|
611
|
+
if (declarationError) {
|
612
|
+
this.it("encountered a declaration exception", function() {
|
613
|
+
throw declarationError;
|
614
|
+
});
|
615
|
+
}
|
656
616
|
|
657
|
-
|
658
|
-
Env.prototype.addReporter = function(reporter) {
|
659
|
-
this.reporter.addReporter(reporter);
|
660
|
-
};
|
617
|
+
currentSuite = parentSuite;
|
661
618
|
|
662
|
-
|
663
|
-
|
664
|
-
var suite = this.suiteFactory(description);
|
619
|
+
return suite;
|
620
|
+
};
|
665
621
|
|
666
|
-
|
667
|
-
|
668
|
-
|
622
|
+
this.xdescribe = function(description, specDefinitions) {
|
623
|
+
var suite = this.describe(description, specDefinitions);
|
624
|
+
suite.disable();
|
625
|
+
return suite;
|
626
|
+
};
|
669
627
|
|
670
|
-
var
|
671
|
-
|
672
|
-
specDefinitions.call(suite);
|
673
|
-
} catch (e) {
|
674
|
-
declarationError = e;
|
675
|
-
}
|
628
|
+
var specFactory = function(description, fn, suite) {
|
629
|
+
totalSpecsDefined++;
|
676
630
|
|
677
|
-
|
678
|
-
|
679
|
-
|
631
|
+
var spec = new j$.Spec({
|
632
|
+
id: getNextSpecId(),
|
633
|
+
beforeFns: beforeFns(suite),
|
634
|
+
afterFns: afterFns(suite),
|
635
|
+
expectationFactory: expectationFactory,
|
636
|
+
exceptionFormatter: exceptionFormatter,
|
637
|
+
resultCallback: specResultCallback,
|
638
|
+
getSpecName: function(spec) {
|
639
|
+
return getSpecName(spec, suite);
|
640
|
+
},
|
641
|
+
onStart: specStarted,
|
642
|
+
description: description,
|
643
|
+
expectationResultFactory: expectationResultFactory,
|
644
|
+
queueRunner: queueRunnerFactory,
|
645
|
+
fn: fn,
|
646
|
+
timer: {setTimeout: realSetTimeout, clearTimeout: realClearTimeout}
|
680
647
|
});
|
681
|
-
}
|
682
648
|
|
683
|
-
|
649
|
+
runnableLookupTable[spec.id] = spec;
|
684
650
|
|
685
|
-
|
686
|
-
|
651
|
+
if (!self.specFilter(spec)) {
|
652
|
+
spec.disable();
|
653
|
+
}
|
687
654
|
|
688
|
-
|
689
|
-
Env.prototype.xdescribe = function(description, specDefinitions) {
|
690
|
-
var suite = this.describe(description, specDefinitions);
|
691
|
-
suite.disable();
|
692
|
-
return suite;
|
693
|
-
};
|
655
|
+
return spec;
|
694
656
|
|
695
|
-
|
696
|
-
|
697
|
-
|
698
|
-
|
699
|
-
|
700
|
-
|
657
|
+
function removeAllSpies() {
|
658
|
+
for (var i = 0; i < spies.length; i++) {
|
659
|
+
var spyEntry = spies[i];
|
660
|
+
spyEntry.baseObj[spyEntry.methodName] = spyEntry.originalValue;
|
661
|
+
}
|
662
|
+
spies = [];
|
663
|
+
}
|
701
664
|
|
702
|
-
|
703
|
-
|
704
|
-
|
705
|
-
|
706
|
-
|
707
|
-
|
665
|
+
function specResultCallback(result) {
|
666
|
+
removeAllSpies();
|
667
|
+
j$.Expectation.resetMatchers();
|
668
|
+
customEqualityTesters = [];
|
669
|
+
currentSpec = null;
|
670
|
+
reporter.specDone(result);
|
671
|
+
}
|
672
|
+
};
|
708
673
|
|
709
|
-
|
710
|
-
|
711
|
-
|
712
|
-
};
|
674
|
+
var suiteStarted = function(suite) {
|
675
|
+
reporter.suiteStarted(suite.result);
|
676
|
+
};
|
713
677
|
|
714
|
-
|
715
|
-
|
716
|
-
|
717
|
-
|
678
|
+
this.it = function(description, fn) {
|
679
|
+
var spec = specFactory(description, fn, currentSuite);
|
680
|
+
currentSuite.addChild(spec);
|
681
|
+
return spec;
|
682
|
+
};
|
718
683
|
|
719
|
-
|
720
|
-
|
721
|
-
|
722
|
-
|
684
|
+
this.xit = function(description, fn) {
|
685
|
+
var spec = this.it(description, fn);
|
686
|
+
spec.pend();
|
687
|
+
return spec;
|
688
|
+
};
|
723
689
|
|
724
|
-
|
725
|
-
|
726
|
-
|
727
|
-
|
690
|
+
this.expect = function(actual) {
|
691
|
+
return currentSpec.expect(actual);
|
692
|
+
};
|
693
|
+
|
694
|
+
this.beforeEach = function(beforeEachFunction) {
|
695
|
+
currentSuite.beforeEach(beforeEachFunction);
|
696
|
+
};
|
697
|
+
|
698
|
+
this.afterEach = function(afterEachFunction) {
|
699
|
+
currentSuite.afterEach(afterEachFunction);
|
700
|
+
};
|
701
|
+
|
702
|
+
this.pending = function() {
|
703
|
+
throw j$.Spec.pendingSpecExceptionMessage;
|
704
|
+
};
|
705
|
+
}
|
728
706
|
|
729
707
|
return Env;
|
730
708
|
};
|
@@ -839,6 +817,7 @@ getJasmineRequireObj().Any = function() {
|
|
839
817
|
|
840
818
|
return Any;
|
841
819
|
};
|
820
|
+
|
842
821
|
getJasmineRequireObj().CallTracker = function() {
|
843
822
|
|
844
823
|
function CallTracker() {
|
@@ -905,7 +884,8 @@ getJasmineRequireObj().Clock = function() {
|
|
905
884
|
setInterval: setInterval,
|
906
885
|
clearInterval: clearInterval
|
907
886
|
},
|
908
|
-
installed = false
|
887
|
+
installed = false,
|
888
|
+
timer;
|
909
889
|
|
910
890
|
self.install = function() {
|
911
891
|
replace(global, fakeTimingFunctions);
|
@@ -952,7 +932,7 @@ getJasmineRequireObj().Clock = function() {
|
|
952
932
|
if (installed) {
|
953
933
|
delayedFunctionScheduler.tick(millis);
|
954
934
|
} else {
|
955
|
-
throw new Error("Mock clock is not installed, use jasmine.
|
935
|
+
throw new Error("Mock clock is not installed, use jasmine.clock().install()");
|
956
936
|
}
|
957
937
|
};
|
958
938
|
|
@@ -960,8 +940,6 @@ getJasmineRequireObj().Clock = function() {
|
|
960
940
|
|
961
941
|
function legacyIE() {
|
962
942
|
//if these methods are polyfilled, apply will be present
|
963
|
-
//TODO: it may be difficult to load the polyfill before jasmine loads
|
964
|
-
//(env should be new-ed inside of onload)
|
965
943
|
return !(realTimingFunctions.setTimeout || realTimingFunctions.setInterval).apply;
|
966
944
|
}
|
967
945
|
|
@@ -1163,12 +1141,21 @@ getJasmineRequireObj().Expectation = function() {
|
|
1163
1141
|
|
1164
1142
|
args.unshift(this.actual);
|
1165
1143
|
|
1166
|
-
var
|
1144
|
+
var matcher = matcherFactory(this.util, this.customEqualityTesters),
|
1145
|
+
matcherCompare = matcher.compare;
|
1167
1146
|
|
1168
|
-
|
1147
|
+
function defaultNegativeCompare() {
|
1148
|
+
var result = matcher.compare.apply(null, args);
|
1169
1149
|
result.pass = !result.pass;
|
1150
|
+
return result;
|
1151
|
+
}
|
1152
|
+
|
1153
|
+
if (this.isNot) {
|
1154
|
+
matcherCompare = matcher.negativeCompare || defaultNegativeCompare;
|
1170
1155
|
}
|
1171
1156
|
|
1157
|
+
var result = matcherCompare.apply(null, args);
|
1158
|
+
|
1172
1159
|
if (!result.pass) {
|
1173
1160
|
if (!result.message) {
|
1174
1161
|
args.unshift(this.isNot);
|
@@ -1364,8 +1351,8 @@ getJasmineRequireObj().pp = function(j$) {
|
|
1364
1351
|
|
1365
1352
|
PrettyPrinter.prototype.iterateObject = function(obj, fn) {
|
1366
1353
|
for (var property in obj) {
|
1367
|
-
if (!obj.hasOwnProperty(property)) continue;
|
1368
|
-
if (property == '__Jasmine_been_here_before__') continue;
|
1354
|
+
if (!obj.hasOwnProperty(property)) { continue; }
|
1355
|
+
if (property == '__Jasmine_been_here_before__') { continue; }
|
1369
1356
|
fn(property, obj.__lookupGetter__ ? (!j$.util.isUndefined(obj.__lookupGetter__(property)) &&
|
1370
1357
|
obj.__lookupGetter__(property) !== null) : false);
|
1371
1358
|
}
|
@@ -1522,11 +1509,11 @@ getJasmineRequireObj().ReportDispatcher = function() {
|
|
1522
1509
|
|
1523
1510
|
for (var i = 0; i < dispatchedMethods.length; i++) {
|
1524
1511
|
var method = dispatchedMethods[i];
|
1525
|
-
this[method] = function(m) {
|
1512
|
+
this[method] = (function(m) {
|
1526
1513
|
return function() {
|
1527
1514
|
dispatch(m, arguments);
|
1528
1515
|
};
|
1529
|
-
}(method);
|
1516
|
+
}(method));
|
1530
1517
|
}
|
1531
1518
|
|
1532
1519
|
var reporters = [];
|
@@ -1610,7 +1597,6 @@ getJasmineRequireObj().Suite = function() {
|
|
1610
1597
|
this.parentSuite = attrs.parentSuite;
|
1611
1598
|
this.description = attrs.description;
|
1612
1599
|
this.onStart = attrs.onStart || function() {};
|
1613
|
-
this.completeCallback = attrs.completeCallback || function() {}; // TODO: this is unused
|
1614
1600
|
this.resultCallback = attrs.resultCallback || function() {};
|
1615
1601
|
this.clearStack = attrs.clearStack || function(fn) {fn();};
|
1616
1602
|
|
@@ -1619,9 +1605,7 @@ getJasmineRequireObj().Suite = function() {
|
|
1619
1605
|
this.queueRunner = attrs.queueRunner || function() {};
|
1620
1606
|
this.disabled = false;
|
1621
1607
|
|
1622
|
-
this.
|
1623
|
-
this.suites = []; // TODO: needed?
|
1624
|
-
this.specs = []; // TODO: needed?
|
1608
|
+
this.children = [];
|
1625
1609
|
|
1626
1610
|
this.result = {
|
1627
1611
|
id: this.id,
|
@@ -1653,19 +1637,8 @@ getJasmineRequireObj().Suite = function() {
|
|
1653
1637
|
this.afterFns.unshift(fn);
|
1654
1638
|
};
|
1655
1639
|
|
1656
|
-
Suite.prototype.
|
1657
|
-
this.
|
1658
|
-
this.specs.push(spec); // TODO: needed?
|
1659
|
-
};
|
1660
|
-
|
1661
|
-
Suite.prototype.addSuite = function(suite) {
|
1662
|
-
suite.parentSuite = this;
|
1663
|
-
this.children_.push(suite);
|
1664
|
-
this.suites.push(suite); // TODO: needed?
|
1665
|
-
};
|
1666
|
-
|
1667
|
-
Suite.prototype.children = function() {
|
1668
|
-
return this.children_;
|
1640
|
+
Suite.prototype.addChild = function(child) {
|
1641
|
+
this.children.push(child);
|
1669
1642
|
};
|
1670
1643
|
|
1671
1644
|
Suite.prototype.execute = function(onComplete) {
|
@@ -1675,11 +1648,10 @@ getJasmineRequireObj().Suite = function() {
|
|
1675
1648
|
return;
|
1676
1649
|
}
|
1677
1650
|
|
1678
|
-
var allFns = []
|
1679
|
-
children = this.children_;
|
1651
|
+
var allFns = [];
|
1680
1652
|
|
1681
|
-
for (var i = 0; i < children.length; i++) {
|
1682
|
-
allFns.push(wrapChildAsAsync(children[i]));
|
1653
|
+
for (var i = 0; i < this.children.length; i++) {
|
1654
|
+
allFns.push(wrapChildAsAsync(this.children[i]));
|
1683
1655
|
}
|
1684
1656
|
|
1685
1657
|
this.onStart(this);
|
@@ -1701,7 +1673,7 @@ getJasmineRequireObj().Suite = function() {
|
|
1701
1673
|
return function(done) { child.execute(done); };
|
1702
1674
|
}
|
1703
1675
|
};
|
1704
|
-
|
1676
|
+
|
1705
1677
|
return Suite;
|
1706
1678
|
};
|
1707
1679
|
|
@@ -1727,6 +1699,7 @@ getJasmineRequireObj().Timer = function() {
|
|
1727
1699
|
|
1728
1700
|
return Timer;
|
1729
1701
|
};
|
1702
|
+
|
1730
1703
|
getJasmineRequireObj().matchersUtil = function(j$) {
|
1731
1704
|
// TODO: what to do about jasmine.pp not being inject? move to JSON.stringify? gut PrettyPrinter?
|
1732
1705
|
|
@@ -1766,7 +1739,9 @@ getJasmineRequireObj().matchersUtil = function(j$) {
|
|
1766
1739
|
|
1767
1740
|
if (expected.length > 0) {
|
1768
1741
|
for (var i = 0; i < expected.length; i++) {
|
1769
|
-
if (i > 0)
|
1742
|
+
if (i > 0) {
|
1743
|
+
message += ",";
|
1744
|
+
}
|
1770
1745
|
message += " " + j$.pp(expected[i]);
|
1771
1746
|
}
|
1772
1747
|
}
|
@@ -1781,9 +1756,9 @@ getJasmineRequireObj().matchersUtil = function(j$) {
|
|
1781
1756
|
var result = true;
|
1782
1757
|
|
1783
1758
|
for (var i = 0; i < customTesters.length; i++) {
|
1784
|
-
|
1785
|
-
if (
|
1786
|
-
return
|
1759
|
+
var customTesterResult = customTesters[i](a, b);
|
1760
|
+
if (!j$.util.isUndefined(customTesterResult)) {
|
1761
|
+
return customTesterResult;
|
1787
1762
|
}
|
1788
1763
|
}
|
1789
1764
|
|
@@ -1814,11 +1789,11 @@ getJasmineRequireObj().matchersUtil = function(j$) {
|
|
1814
1789
|
|
1815
1790
|
// Identical objects are equal. `0 === -0`, but they aren't identical.
|
1816
1791
|
// See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal).
|
1817
|
-
if (a === b) return a !== 0 || 1 / a == 1 / b;
|
1792
|
+
if (a === b) { return a !== 0 || 1 / a == 1 / b; }
|
1818
1793
|
// A strict comparison is necessary because `null == undefined`.
|
1819
|
-
if (a === null || b === null) return a === b;
|
1794
|
+
if (a === null || b === null) { return a === b; }
|
1820
1795
|
var className = Object.prototype.toString.call(a);
|
1821
|
-
if (className != Object.prototype.toString.call(b)) return false;
|
1796
|
+
if (className != Object.prototype.toString.call(b)) { return false; }
|
1822
1797
|
switch (className) {
|
1823
1798
|
// Strings, numbers, dates, and booleans are compared by value.
|
1824
1799
|
case '[object String]':
|
@@ -1842,14 +1817,14 @@ getJasmineRequireObj().matchersUtil = function(j$) {
|
|
1842
1817
|
a.multiline == b.multiline &&
|
1843
1818
|
a.ignoreCase == b.ignoreCase;
|
1844
1819
|
}
|
1845
|
-
if (typeof a != 'object' || typeof b != 'object') return false;
|
1820
|
+
if (typeof a != 'object' || typeof b != 'object') { return false; }
|
1846
1821
|
// Assume equality for cyclic structures. The algorithm for detecting cyclic
|
1847
1822
|
// structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.
|
1848
1823
|
var length = aStack.length;
|
1849
1824
|
while (length--) {
|
1850
1825
|
// Linear search. Performance is inversely proportional to the number of
|
1851
1826
|
// unique nested structures.
|
1852
|
-
if (aStack[length] == a) return bStack[length] == b;
|
1827
|
+
if (aStack[length] == a) { return bStack[length] == b; }
|
1853
1828
|
}
|
1854
1829
|
// Add the first object to the stack of traversed objects.
|
1855
1830
|
aStack.push(a);
|
@@ -1863,7 +1838,7 @@ getJasmineRequireObj().matchersUtil = function(j$) {
|
|
1863
1838
|
if (result) {
|
1864
1839
|
// Deep compare the contents, ignoring non-numeric properties.
|
1865
1840
|
while (size--) {
|
1866
|
-
if (!(result = eq(a[size], b[size], aStack, bStack, customTesters))) break;
|
1841
|
+
if (!(result = eq(a[size], b[size], aStack, bStack, customTesters))) { break; }
|
1867
1842
|
}
|
1868
1843
|
}
|
1869
1844
|
} else {
|
@@ -1880,13 +1855,13 @@ getJasmineRequireObj().matchersUtil = function(j$) {
|
|
1880
1855
|
// Count the expected number of properties.
|
1881
1856
|
size++;
|
1882
1857
|
// Deep compare each member.
|
1883
|
-
if (!(result = has(b, key) && eq(a[key], b[key], aStack, bStack, customTesters))) break;
|
1858
|
+
if (!(result = has(b, key) && eq(a[key], b[key], aStack, bStack, customTesters))) { break; }
|
1884
1859
|
}
|
1885
1860
|
}
|
1886
1861
|
// Ensure that both objects contain the same number of properties.
|
1887
1862
|
if (result) {
|
1888
1863
|
for (key in b) {
|
1889
|
-
if (has(b, key) && !(size--)) break;
|
1864
|
+
if (has(b, key) && !(size--)) { break; }
|
1890
1865
|
}
|
1891
1866
|
result = !size;
|
1892
1867
|
}
|
@@ -1906,6 +1881,7 @@ getJasmineRequireObj().matchersUtil = function(j$) {
|
|
1906
1881
|
}
|
1907
1882
|
}
|
1908
1883
|
};
|
1884
|
+
|
1909
1885
|
getJasmineRequireObj().toBe = function() {
|
1910
1886
|
function toBe() {
|
1911
1887
|
return {
|
@@ -2387,5 +2363,5 @@ getJasmineRequireObj().toThrowError = function(j$) {
|
|
2387
2363
|
};
|
2388
2364
|
|
2389
2365
|
getJasmineRequireObj().version = function() {
|
2390
|
-
return "2.0.0-
|
2391
|
-
};
|
2366
|
+
return "2.0.0-rc5";
|
2367
|
+
};
|