diff --git a/spec/helpers/marble-testing.js b/spec/helpers/marble-testing.js index 38f2b25fd9..513af63d0f 100644 --- a/spec/helpers/marble-testing.js +++ b/spec/helpers/marble-testing.js @@ -12,6 +12,13 @@ function cold() { return global.rxTestScheduler.createColdObservable.apply(global.rxTestScheduler, arguments); } +function time() { + if (!global.rxTestScheduler) { + throw 'tried to use time() in async test'; + } + return global.rxTestScheduler.createTime.apply(global.rxTestScheduler, arguments); +} + function expectObservable() { if (!global.rxTestScheduler) { throw 'tried to use expectObservable() in async test'; @@ -33,6 +40,7 @@ function assertDeepEqual(actual, expected) { module.exports = { hot: hot, cold: cold, + time: time, expectObservable: expectObservable, expectSubscriptions: expectSubscriptions, assertDeepEqual: assertDeepEqual diff --git a/spec/helpers/test-helper.js b/spec/helpers/test-helper.js index 881a713e45..c90cf28378 100644 --- a/spec/helpers/test-helper.js +++ b/spec/helpers/test-helper.js @@ -11,6 +11,7 @@ var marbleHelpers = require('./marble-testing'); global.rxTestScheduler = null; global.cold = marbleHelpers.cold; global.hot = marbleHelpers.hot; +global.time = marbleHelpers.time; global.expectObservable = marbleHelpers.expectObservable; global.expectSubscriptions = marbleHelpers.expectSubscriptions; diff --git a/spec/helpers/tests2png/diagram-test-runner.js b/spec/helpers/tests2png/diagram-test-runner.js index f48ffef152..3e70bc6fba 100644 --- a/spec/helpers/tests2png/diagram-test-runner.js +++ b/spec/helpers/tests2png/diagram-test-runner.js @@ -8,6 +8,7 @@ var painter = require('./painter'); global.rxTestScheduler = null; global.cold = marbleHelpers.cold; global.hot = marbleHelpers.hot; +global.time = marbleHelpers.time; global.expectObservable = marbleHelpers.expectObservable; global.expectSubscriptions = marbleHelpers.expectSubscriptions; diff --git a/spec/schedulers/TestScheduler-spec.js b/spec/schedulers/TestScheduler-spec.js index ce2baf396a..fe19ca7dc3 100644 --- a/spec/schedulers/TestScheduler-spec.js +++ b/spec/schedulers/TestScheduler-spec.js @@ -85,6 +85,21 @@ describe('TestScheduler', function () { }); }); + describe('createTime()', function () { + it('should parse a simple time marble string to a number', function () { + var scheduler = new TestScheduler(); + var time = scheduler.createTime('-----|'); + expect(time).toBe(50); + }); + + it('should throw if not given good marble input', function () { + var scheduler = new TestScheduler(); + expect(function () { + var time = scheduler.createTime('-a-b-#'); + }).toThrow(); + }); + }); + describe('createColdObservable()', function () { it('should create a cold observable', function () { var expected = ['A', 'B']; @@ -151,6 +166,17 @@ describe('TestScheduler', function () { }); }); + describe('time()', function () { + it('should exist', function () { + expect(time).toBeDefined(); + expect(typeof time).toBe('function'); + }); + + it('should parse a simple time marble string to a number', function () { + expect(time('-----|')).toBe(50); + }); + }); + describe('expectObservable()', function () { it('should exist', function () { expect(expectObservable).toBeDefined(); diff --git a/src/testing/TestScheduler.ts b/src/testing/TestScheduler.ts index 5441f6191d..542467424d 100644 --- a/src/testing/TestScheduler.ts +++ b/src/testing/TestScheduler.ts @@ -25,6 +25,14 @@ export class TestScheduler extends VirtualTimeScheduler { super(); } + createTime(marbles: string): number { + const indexOf: number = marbles.indexOf('|'); + if (indexOf === -1) { + throw new Error('Marble diagram for time should have a completion marker "|"'); + } + return indexOf * TestScheduler.frameTimeFactor; + } + createColdObservable(marbles: string, values?: any, error?: any): Observable { if (marbles.indexOf('^') !== -1) { throw new Error('Cold observable cannot have subscription offset "^"');