UNPKG

6.13 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3exports.setupEnvironment = exports.addMatchers = exports.time = exports.cold = exports.hot = exports.resetTestScheduler = exports.initTestScheduler = exports.getTestScheduler = void 0;
4var rxjs_1 = require("rxjs");
5var testing_1 = require("rxjs/testing");
6var lodash_1 = require("lodash");
7var scheduler_1 = require("./src/scheduler");
8var test_observables_1 = require("./src/test-observables");
9var marble_unparser_1 = require("./src/marble-unparser");
10var map_symbols_to_notifications_1 = require("./src/map-symbols-to-notifications");
11var scheduler_2 = require("./src/scheduler");
12Object.defineProperty(exports, "getTestScheduler", { enumerable: true, get: function () { return scheduler_2.getTestScheduler; } });
13Object.defineProperty(exports, "initTestScheduler", { enumerable: true, get: function () { return scheduler_2.initTestScheduler; } });
14Object.defineProperty(exports, "resetTestScheduler", { enumerable: true, get: function () { return scheduler_2.resetTestScheduler; } });
15function hot(marbles, values, error) {
16 return new test_observables_1.TestHotObservable(marbles.trim(), values, error);
17}
18exports.hot = hot;
19function cold(marbles, values, error) {
20 return new test_observables_1.TestColdObservable(marbles.trim(), values, error);
21}
22exports.cold = cold;
23function time(marbles) {
24 return scheduler_1.getTestScheduler().createTime(marbles.trim());
25}
26exports.time = time;
27/*
28 * Based on source code found in rxjs library
29 * https://github.com/ReactiveX/rxjs/blob/master/src/testing/TestScheduler.ts
30 *
31 */
32function materializeInnerObservable(observable, outerFrame) {
33 var messages = [];
34 var scheduler = scheduler_1.getTestScheduler();
35 observable.subscribe(function (value) {
36 messages.push({
37 frame: scheduler.frame - outerFrame,
38 notification: rxjs_1.Notification.createNext(value),
39 });
40 }, function (err) {
41 messages.push({
42 frame: scheduler.frame - outerFrame,
43 notification: rxjs_1.Notification.createError(err),
44 });
45 }, function () {
46 messages.push({
47 frame: scheduler.frame - outerFrame,
48 notification: rxjs_1.Notification.createComplete(),
49 });
50 });
51 return messages;
52}
53var toHaveSubscriptionsComparer = function (actual, marbles) {
54 var marblesArray = typeof marbles === 'string' ? [marbles] : marbles;
55 var results = marblesArray.map(function (marbles) {
56 return testing_1.TestScheduler.parseMarblesAsSubscriptions(marbles);
57 });
58 expect(results).toEqual(actual.getSubscriptions());
59 return { pass: true, message: function () { return ''; } };
60};
61var toBeObservableComparer = function (actual, fixture) {
62 var results = [];
63 var subscription;
64 var scheduler = scheduler_1.getTestScheduler();
65 scheduler.schedule(function () {
66 subscription = actual.subscribe(function (x) {
67 var value = x;
68 // Support Observable-of-Observables
69 if (x instanceof rxjs_1.Observable) {
70 value = materializeInnerObservable(value, scheduler.frame);
71 }
72 results.push({
73 frame: scheduler.frame,
74 notification: rxjs_1.Notification.createNext(value),
75 });
76 }, function (err) {
77 results.push({
78 frame: scheduler.frame,
79 notification: rxjs_1.Notification.createError(err),
80 });
81 }, function () {
82 results.push({
83 frame: scheduler.frame,
84 notification: rxjs_1.Notification.createComplete(),
85 });
86 });
87 });
88 scheduler.flush();
89 var expected = testing_1.TestScheduler.parseMarbles(fixture.marbles, fixture.values, fixture.error, true, true);
90 try {
91 expect(results).toEqual(expected);
92 return { pass: true, message: function () { return ''; } };
93 }
94 catch (e) {
95 var mapNotificationToSymbol = buildNotificationToSymbolMapper(fixture.marbles, expected, lodash_1.isEqual);
96 var receivedMarble = marble_unparser_1.unparseMarble(results, mapNotificationToSymbol);
97 var message_1 = formatMessage(fixture.marbles, expected, receivedMarble, results);
98 return { pass: false, message: function () { return message_1; } };
99 }
100};
101function addMatchers() {
102 if (!expect.extend) {
103 jasmine.addMatchers({
104 toHaveSubscriptions: function () { return ({
105 compare: toHaveSubscriptionsComparer,
106 }); },
107 toBeObservable: function (utils, equalityTester) { return ({
108 compare: toBeObservableComparer,
109 }); },
110 });
111 }
112 else {
113 expect.extend({
114 toHaveSubscriptions: toHaveSubscriptionsComparer,
115 toBeObservable: toBeObservableComparer,
116 });
117 }
118}
119exports.addMatchers = addMatchers;
120function buildNotificationToSymbolMapper(expectedMarbles, expectedMessages, equalityFn) {
121 var symbolsToNotificationsMap = map_symbols_to_notifications_1.mapSymbolsToNotifications(expectedMarbles, expectedMessages);
122 return function (notification) {
123 var mapped = Object.keys(symbolsToNotificationsMap).find(function (key) {
124 return equalityFn(symbolsToNotificationsMap[key], notification);
125 });
126 return mapped || '?';
127 };
128}
129function formatMessage(expectedMarbles, expectedMessages, receivedMarbles, receivedMessages) {
130 return "\n Expected: " + expectedMarbles + ",\n Received: " + receivedMarbles + ",\n \n Expected:\n " + JSON.stringify(expectedMessages) + "\n \n Received:\n " + JSON.stringify(receivedMessages) + ",\n ";
131}
132function setupEnvironment() {
133 beforeAll(function () { return addMatchers(); });
134 beforeEach(function () { return scheduler_1.initTestScheduler(); });
135 afterEach(function () {
136 scheduler_1.getTestScheduler().flush();
137 scheduler_1.resetTestScheduler();
138 });
139}
140exports.setupEnvironment = setupEnvironment;
141setupEnvironment();
142//# sourceMappingURL=index.js.map
\No newline at end of file