swirly-diagram-testrunner
Version:
Testrunner that runs observables and prepares diagram generation for swirly
148 lines • 7.61 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 __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
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;
};
(function (factory) {
if (typeof module === "object" && typeof module.exports === "object") {
var v = factory(require, exports);
if (v !== undefined) module.exports = v;
}
else if (typeof define === "function" && define.amd) {
define(["require", "exports", "rxjs/testing", "@swirly/parser", "@swirly/theme-default-light", "chai", "util"], factory);
}
})(function (require, exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.stringifyTestMessage = exports.deleteErrorNotificationStack = exports.updateInputStreamsPostFlush = exports.scaleTestMessageTime = exports.DiagramTestScheduler = void 0;
var testing_1 = require("rxjs/testing");
var parser_1 = require("@swirly/parser");
var theme_default_light_1 = require("@swirly/theme-default-light");
var chai_1 = require("chai");
var util = __importStar(require("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");
chai_1.assert.deepEqual(deleteErrorNotificationStack(actual), deleteErrorNotificationStack(expected), failureMessage);
}
else {
chai_1.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 = theme_default_light_1.styles; }
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 parser_1.createStreamSpecification(s.messages.map(stringifyTestMessage)); });
var operator = parser_1.createOperatorSpecification(operatorTitle);
var outputs = _this.outputStreams.map(function (s) { return parser_1.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;
}(testing_1.TestScheduler));
exports.DiagramTestScheduler = DiagramTestScheduler;
function scaleTestMessageTime(testMessage, factor) {
return __assign(__assign({}, testMessage), { frame: testMessage.frame * factor });
}
exports.scaleTestMessageTime = scaleTestMessageTime;
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;
});
}
exports.updateInputStreamsPostFlush = updateInputStreamsPostFlush;
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;
}
exports.deleteErrorNotificationStack = deleteErrorNotificationStack;
function stringifyTestMessage(message) {
return message.isGhost || !message.notification.hasValue
? message
: __assign(__assign({}, message), { notification: __assign(__assign({}, message.notification), { value: util.inspect(message.notification.value) }) });
}
exports.stringifyTestMessage = stringifyTestMessage;
});
//# sourceMappingURL=diagram-test-scheduler.js.map