1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | exports.setupEnvironment = exports.addMatchers = exports.time = exports.cold = exports.hot = exports.resetTestScheduler = exports.initTestScheduler = exports.getTestScheduler = void 0;
|
4 | var rxjs_1 = require("rxjs");
|
5 | var testing_1 = require("rxjs/testing");
|
6 | var lodash_1 = require("lodash");
|
7 | var scheduler_1 = require("./src/scheduler");
|
8 | var test_observables_1 = require("./src/test-observables");
|
9 | var marble_unparser_1 = require("./src/marble-unparser");
|
10 | var map_symbols_to_notifications_1 = require("./src/map-symbols-to-notifications");
|
11 | var scheduler_2 = require("./src/scheduler");
|
12 | Object.defineProperty(exports, "getTestScheduler", { enumerable: true, get: function () { return scheduler_2.getTestScheduler; } });
|
13 | Object.defineProperty(exports, "initTestScheduler", { enumerable: true, get: function () { return scheduler_2.initTestScheduler; } });
|
14 | Object.defineProperty(exports, "resetTestScheduler", { enumerable: true, get: function () { return scheduler_2.resetTestScheduler; } });
|
15 | function hot(marbles, values, error) {
|
16 | return new test_observables_1.TestHotObservable(marbles.trim(), values, error);
|
17 | }
|
18 | exports.hot = hot;
|
19 | function cold(marbles, values, error) {
|
20 | return new test_observables_1.TestColdObservable(marbles.trim(), values, error);
|
21 | }
|
22 | exports.cold = cold;
|
23 | function time(marbles) {
|
24 | return scheduler_1.getTestScheduler().createTime(marbles.trim());
|
25 | }
|
26 | exports.time = time;
|
27 |
|
28 |
|
29 |
|
30 |
|
31 |
|
32 | function 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 | }
|
53 | var 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 | };
|
61 | var 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 |
|
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 | };
|
101 | function 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 | }
|
119 | exports.addMatchers = addMatchers;
|
120 | function 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 | }
|
129 | function 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 | }
|
132 | function 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 | }
|
140 | exports.setupEnvironment = setupEnvironment;
|
141 | setupEnvironment();
|
142 |
|
\ | No newline at end of file |