1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 | 1 6 852 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 852 852 852 852 852 1 593 593 593 593 1 683 683 683 683 683 1 138 138 138 251 35 96 138 1 773 773 773 773 773 773 773 773 1644 1644 138 1644 239 373 773 45 45 773 773 771 771 1 192 192 192 190 190 190 211 1 856 856 683 856 852 965 852 961 961 1 1007 728 279 279 279 279 279 7163 7163 7163 6642 20 20 20 20 224 224 224 257 257 257 279 279 1 2085 2085 2085 2085 2085 2085 2085 3826 1506 138 1368 2085 2085 35567 35567 35567 35567 27540 307 307 308 308 1289 1289 302 489 489 5332 5332 35567 35567 7110 2085 1 1 | 'use strict'; exports.__esModule = true; function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } function _classCallCheck(instance, Constructor) { Iif (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } function _inherits(subClass, superClass) { Iif (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); Eif (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } var _Observable = require('../Observable'); var _Observable2 = _interopRequireDefault(_Observable); var _schedulersVirtualTimeScheduler = require('../schedulers/VirtualTimeScheduler'); var _schedulersVirtualTimeScheduler2 = _interopRequireDefault(_schedulersVirtualTimeScheduler); var _Notification = require('../Notification'); var _Notification2 = _interopRequireDefault(_Notification); var _ColdObservable = require('./ColdObservable'); var _ColdObservable2 = _interopRequireDefault(_ColdObservable); var _HotObservable = require('./HotObservable'); var _HotObservable2 = _interopRequireDefault(_HotObservable); var _SubscriptionLog = require('./SubscriptionLog'); var _SubscriptionLog2 = _interopRequireDefault(_SubscriptionLog); var TestScheduler = (function (_VirtualTimeScheduler) { _inherits(TestScheduler, _VirtualTimeScheduler); function TestScheduler(assertDeepEqual) { _classCallCheck(this, TestScheduler); _VirtualTimeScheduler.call(this); this.assertDeepEqual = assertDeepEqual; this.hotObservables = []; this.flushTests = []; } //# sourceMappingURL=TestScheduler.js.map TestScheduler.prototype.createColdObservable = function createColdObservable(marbles, values, error) { Iif (marbles.indexOf('^') !== -1) { throw new Error('Cold observable cannot have subscription offset "^"'); } Iif (marbles.indexOf('!') !== -1) { throw new Error('Cold observable cannot have unsubscription marker "!"'); } var messages = TestScheduler.parseMarbles(marbles, values, error); return new _ColdObservable2['default'](messages, this); }; TestScheduler.prototype.createHotObservable = function createHotObservable(marbles, values, error) { Iif (marbles.indexOf('!') !== -1) { throw new Error('Hot observable cannot have unsubscription marker "!"'); } var messages = TestScheduler.parseMarbles(marbles, values, error); var subject = new _HotObservable2['default'](messages, this); this.hotObservables.push(subject); return subject; }; TestScheduler.prototype.materializeInnerObservable = function materializeInnerObservable(observable, outerFrame) { var _this = this; var messages = []; observable.subscribe(function (value) { messages.push({ frame: _this.frame - outerFrame, notification: _Notification2['default'].createNext(value) }); }, function (err) { messages.push({ frame: _this.frame - outerFrame, notification: _Notification2['default'].createError(err) }); }, function () { messages.push({ frame: _this.frame - outerFrame, notification: _Notification2['default'].createComplete() }); }); return messages; }; TestScheduler.prototype.expectObservable = function expectObservable(observable) { var _this2 = this; var unsubscriptionMarbles = arguments.length <= 1 || arguments[1] === undefined ? null : arguments[1]; var actual = []; var flushTest = { actual: actual, ready: false }; var unsubscriptionFrame = TestScheduler.parseMarblesAsSubscriptions(unsubscriptionMarbles).unsubscribedFrame; var subscription = undefined; this.schedule(function () { subscription = observable.subscribe(function (x) { var value = x; // Support Observable-of-Observables if (x instanceof _Observable2['default']) { value = _this2.materializeInnerObservable(value, _this2.frame); } actual.push({ frame: _this2.frame, notification: _Notification2['default'].createNext(value) }); }, function (err) { actual.push({ frame: _this2.frame, notification: _Notification2['default'].createError(err) }); }, function () { actual.push({ frame: _this2.frame, notification: _Notification2['default'].createComplete() }); }); }, 0); if (unsubscriptionFrame !== Number.POSITIVE_INFINITY) { this.schedule(function () { return subscription.unsubscribe(); }, unsubscriptionFrame); } this.flushTests.push(flushTest); return { toBe: function toBe(marbles, values, errorValue) { flushTest.ready = true; flushTest.expected = TestScheduler.parseMarbles(marbles, values, errorValue, true); } }; }; TestScheduler.prototype.expectSubscriptions = function expectSubscriptions(actualSubscriptionLogs) { var flushTest = { actual: actualSubscriptionLogs, ready: false }; this.flushTests.push(flushTest); return { toBe: function toBe(marbles) { var marblesArray = typeof marbles === 'string' ? [marbles] : marbles; flushTest.ready = true; flushTest.expected = marblesArray.map(function (marbles) { return TestScheduler.parseMarblesAsSubscriptions(marbles); }); } }; }; TestScheduler.prototype.flush = function flush() { var hotObservables = this.hotObservables; while (hotObservables.length > 0) { hotObservables.shift().setup(); } _VirtualTimeScheduler.prototype.flush.call(this); var readyFlushTests = this.flushTests.filter(function (test) { return test.ready; }); while (readyFlushTests.length > 0) { var test = readyFlushTests.shift(); this.assertDeepEqual(test.actual, test.expected); } }; TestScheduler.parseMarblesAsSubscriptions = function parseMarblesAsSubscriptions(marbles) { if (typeof marbles !== 'string') { return new _SubscriptionLog2['default'](Number.POSITIVE_INFINITY); } var len = marbles.length; var groupStart = -1; var subscriptionFrame = Number.POSITIVE_INFINITY; var unsubscriptionFrame = Number.POSITIVE_INFINITY; for (var i = 0; i < len; i++) { var frame = i * this.frameTimeFactor; var c = marbles[i]; switch (c) { case '-': case ' ': break; case '(': groupStart = frame; break; case ')': groupStart = -1; break; case '^': Iif (subscriptionFrame !== Number.POSITIVE_INFINITY) { throw new Error('Found a second subscription point \'^\' in a ' + 'subscription marble diagram. There can only be one.'); } subscriptionFrame = groupStart > -1 ? groupStart : frame; break; case '!': Iif (unsubscriptionFrame !== Number.POSITIVE_INFINITY) { throw new Error('Found a second subscription point \'^\' in a ' + 'subscription marble diagram. There can only be one.'); } unsubscriptionFrame = groupStart > -1 ? groupStart : frame; break; default: throw new Error('There can only be \'^\' and \'!\' markers in a ' + 'subscription marble diagram. Found instead \'' + c + '\'.'); } } Iif (unsubscriptionFrame < 0) { return new _SubscriptionLog2['default'](subscriptionFrame); } else { return new _SubscriptionLog2['default'](subscriptionFrame, unsubscriptionFrame); } }; TestScheduler.parseMarbles = function parseMarbles(marbles, values, errorValue) { var materializeInnerObservables = arguments.length <= 3 || arguments[3] === undefined ? false : arguments[3]; Iif (marbles.indexOf('!') !== -1) { throw new Error('Conventional marble diagrams cannot have the ' + 'unsubscription marker "!"'); } var len = marbles.length; var testMessages = []; var subIndex = marbles.indexOf('^'); var frameOffset = subIndex === -1 ? 0 : subIndex * -this.frameTimeFactor; var getValue = typeof values !== 'object' ? function (x) { return x; } : function (x) { // Support Observable-of-Observables if (materializeInnerObservables && values[x] instanceof _ColdObservable2['default']) { return values[x].messages; } return values[x]; }; var groupStart = -1; for (var i = 0; i < len; i++) { var frame = i * this.frameTimeFactor; var notification = undefined; var c = marbles[i]; switch (c) { case '-': case ' ': break; case '(': groupStart = frame; break; case ')': groupStart = -1; break; case '|': notification = _Notification2['default'].createComplete(); break; case '^': break; case '#': notification = _Notification2['default'].createError(errorValue || 'error'); break; default: notification = _Notification2['default'].createNext(getValue(c)); break; } frame += frameOffset; if (notification) { testMessages.push({ frame: groupStart > -1 ? groupStart : frame, notification: notification }); } } return testMessages; }; return TestScheduler; })(_schedulersVirtualTimeScheduler2['default']); exports.TestScheduler = TestScheduler; //# sourceMappingURL=TestScheduler.js.map |