vitest-marbles
Version:
Marble testing helpers library for RxJs and Jest
61 lines • 2.6 kB
JavaScript
import { MarblesGlossary } from './marbles-glossary';
import { NotificationEvent } from './notification-event';
import { NotificationKindChars, ValueLiteral } from './notification-kind';
var frameStep = 10;
var Marblizer = /** @class */ (function () {
function Marblizer() {
}
Marblizer.marblize = function (messages) {
var emissions = Marblizer.getNotificationEvents(messages);
var marbles = '';
for (var i = 0, prevEndFrame = 0; i < emissions.length; prevEndFrame = emissions[i].end, i++) {
marbles = "".concat(marbles).concat(MarblesGlossary.TimeFrame.repeat(emissions[i].start - prevEndFrame) +
emissions[i].marbles);
}
return marbles;
};
Marblizer.marblizeSubscriptions = function (logs) {
var _this = this;
return logs.map(function (log) {
return _this.marblizeLogEntry(log.subscribedFrame / frameStep, MarblesGlossary.Subscription) +
_this.marblizeLogEntry((log.unsubscribedFrame - log.subscribedFrame) / frameStep - 1, MarblesGlossary.Unsubscription);
});
};
Marblizer.marblizeLogEntry = function (logPoint, symbol) {
if (logPoint !== Infinity) {
return MarblesGlossary.TimeFrame.repeat(logPoint) + symbol;
}
else {
return '';
}
};
Marblizer.getNotificationEvents = function (messages) {
var framesToEmissions = messages.reduce(function (result, message) {
if (!result[message.frame]) {
result[message.frame] = new NotificationEvent(message.frame / frameStep);
}
var event = result[message.frame];
event.marbles += Marblizer.extractMarble(message);
return result;
}, {});
var events = Object.keys(framesToEmissions).map(function (frame) { return framesToEmissions[frame]; });
Marblizer.encloseGroupEvents(events);
return events;
};
Marblizer.extractMarble = function (message) {
var marble = NotificationKindChars[message.notification.kind];
if (marble === ValueLiteral)
marble = message.notification.value;
return marble;
};
Marblizer.encloseGroupEvents = function (events) {
events.forEach(function (event) {
if (event.marbles.length > 1) {
event.marbles = "".concat(MarblesGlossary.GroupStart).concat(event.marbles).concat(MarblesGlossary.GroupEnd);
}
});
};
return Marblizer;
}());
export { Marblizer };
//# sourceMappingURL=marblizer.js.map