swirly-diagram-testrunner
Version:
Testrunner that runs observables and prepares diagram generation for swirly
112 lines • 5.47 kB
JavaScript
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var __spreadArrays = (this && this.__spreadArrays) || function () {
for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
for (var r = Array(s), k = 0, i = 0; i < il; i++)
for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
r[k] = a[j];
return r;
};
import { TestScheduler } from "rxjs/testing";
import { createOperatorSpecification, createStreamSpecification } from "@swirly/parser";
import { styles as defaultStyles } from "@swirly/theme-default-light";
import { assert } from "chai";
import * as util from "util";
var DiagramTestScheduler = /** @class */ (function (_super) {
__extends(DiagramTestScheduler, _super);
function DiagramTestScheduler() {
var _this = _super.call(this, function (actual, expected) {
if (Array.isArray(actual) && Array.isArray(expected)) {
_this.outputStreams.push({ messages: actual.map(function (m) { return scaleTestMessageTime(m, 10); }), subscription: { start: 0, end: "100%" } });
var failureMessage = "\nExpected\n" + actual.map(function (a) { return "\t" + JSON.stringify(a); }).join("\n") + "\t\nto deep equal\n" + expected.map(function (e) { return "\t" + JSON.stringify(e); }).join("\n");
assert.deepEqual(deleteErrorNotificationStack(actual), deleteErrorNotificationStack(expected), failureMessage);
}
else {
assert.deepEqual(actual, expected);
}
}) || this;
_this.inputStreams = [];
_this.outputStreams = [];
return _this;
}
DiagramTestScheduler.prototype.runAsDiagram = function (operatorTitle, fn, styles) {
var _this = this;
if (styles === void 0) { styles = defaultStyles; }
return this.run(function (helpers) {
fn(helpers);
_this.inputStreams = _this.getHotTestStream().concat(_this.getColdTestStream());
_this.flush();
_this.inputStreams = updateInputStreamsPostFlush(_this.inputStreams);
var inputs = _this.inputStreams.map(function (s) { return createStreamSpecification(s.messages.map(stringifyTestMessage)); });
var operator = createOperatorSpecification(operatorTitle);
var outputs = _this.outputStreams.map(function (s) { return createStreamSpecification(s.messages.map(stringifyTestMessage)); });
return { content: __spreadArrays(inputs, [operator], outputs), styles: styles };
});
};
DiagramTestScheduler.prototype.getHotTestStream = function () {
return this.hotObservables.map(function (h) { return ({
messages: h.messages.map(function (m) { return scaleTestMessageTime(m, 10); }),
subscription: { start: 0, end: "100%" },
}); });
};
DiagramTestScheduler.prototype.getColdTestStream = function () {
return this.coldObservables.map(function (c) { return ({
messages: c.messages.map(function (m) { return scaleTestMessageTime(m, 10); }),
cold: c
}); });
};
return DiagramTestScheduler;
}(TestScheduler));
export { DiagramTestScheduler };
export function scaleTestMessageTime(testMessage, factor) {
return __assign(__assign({}, testMessage), { frame: testMessage.frame * factor });
}
export function updateInputStreamsPostFlush(inputStreams) {
return inputStreams.map(function (singleInputStream) {
if (singleInputStream.cold && singleInputStream.cold.subscriptions.length) {
singleInputStream.subscription = {
start: singleInputStream.cold.subscriptions[0].subscribedFrame,
end: singleInputStream.cold.subscriptions[0].unsubscribedFrame,
};
}
return singleInputStream;
});
}
export function deleteErrorNotificationStack(marble) {
var notification = marble.notification;
if (notification) {
var kind = notification.kind, error = notification.error;
if (kind === "E" && error instanceof Error) {
notification.error = { name: error.name, message: error.message };
}
}
return marble;
}
export function stringifyTestMessage(message) {
return message.isGhost || !message.notification.hasValue
? message
: __assign(__assign({}, message), { notification: __assign(__assign({}, message.notification), { value: util.inspect(message.notification.value) }) });
}
//# sourceMappingURL=diagram-test-scheduler.js.map