@jeetiss/callbag-marble-tester
Advanced tools
Comparing version 0.0.4 to 0.1.0
@@ -1,4 +0,2 @@ | ||
var toMarble = function toMarble(values) { | ||
return values.join('-'); | ||
}; | ||
var FRAME_SIZE = 10; | ||
@@ -13,23 +11,137 @@ var isDefined = function isDefined(value) { | ||
var DIFFERENT = 0; | ||
var NOT_COMPLITE = 1; | ||
var EQUAL = 2; | ||
function _extends() { | ||
_extends = Object.assign || function (target) { | ||
for (var i = 1; i < arguments.length; i++) { | ||
var source = arguments[i]; | ||
var compare = function compare(expected, received, complete) { | ||
if (complete && expected.length !== received.length) return DIFFERENT; | ||
var length = received.length; | ||
for (var key in source) { | ||
if (Object.prototype.hasOwnProperty.call(source, key)) { | ||
target[key] = source[key]; | ||
} | ||
} | ||
} | ||
for (var i = 0; i < length; i++) { | ||
if (expected[i] !== received[i]) { | ||
return DIFFERENT; | ||
return target; | ||
}; | ||
return _extends.apply(this, arguments); | ||
} | ||
var defaultCreators = { | ||
end: function end() { | ||
return function (sink) { | ||
return sink(2); | ||
}; | ||
}, | ||
error: function error(_error) { | ||
return function (sink) { | ||
return sink(2, isDefined(_error) ? _error : 'error'); | ||
}; | ||
}, | ||
next: function next(value) { | ||
return function (sink) { | ||
return sink(1, value); | ||
}; | ||
} | ||
}; | ||
var parse = function parse(marbles, values, error, userCreators) { | ||
if (values === void 0) { | ||
values = {}; | ||
} | ||
var creators = _extends({}, defaultCreators, userCreators); | ||
var fragments = marbles.trim().split(''); | ||
var frameIndex = 0; | ||
var frames = new Map(); | ||
var inGroop = false; | ||
var groopBuffer = []; | ||
var nextFrame = function nextFrame() { | ||
return frameIndex += 1; | ||
}; | ||
var set = function set(value) { | ||
frames.set(frameIndex, value); | ||
nextFrame(); | ||
}; | ||
while (fragments.length !== 0) { | ||
var _fragments = fragments, | ||
head = _fragments[0], | ||
teil = _fragments.slice(1); | ||
fragments = teil; | ||
switch (head) { | ||
case '-': | ||
nextFrame(); | ||
continue; | ||
case '|': | ||
inGroop ? groopBuffer.push(creators.end()) : set([creators.end()]); | ||
continue; | ||
case 'x': | ||
inGroop ? groopBuffer.push(creators.error(error)) : set([creators.error(error)]); | ||
continue; | ||
case '(': | ||
inGroop = true; | ||
continue; | ||
case ')': | ||
set(groopBuffer); | ||
inGroop = false; | ||
groopBuffer = []; | ||
continue; | ||
default: | ||
inGroop ? groopBuffer.push(creators.next(pick(values, head))) : set([creators.next(pick(values, head))]); | ||
} | ||
} | ||
return expected.length === received.length ? EQUAL : NOT_COMPLITE; | ||
return { | ||
frames: frames, | ||
size: frameIndex | ||
}; | ||
}; | ||
var eventNames = 'abcdefghijklmnopqrstuvwyzABCDEFGHIJKLMNOPQRSTUVWYZ'; | ||
var create = function create(_ref) { | ||
var frames = _ref.frames, | ||
size = _ref.size; | ||
var marbles = ''; | ||
var events = new Map(); | ||
var next = 0; | ||
compare.DIFFERENT = DIFFERENT; | ||
compare.NOT_COMPLITE = NOT_COMPLITE; | ||
compare.EQUAL = EQUAL; | ||
var getName = function getName(value) { | ||
if (events.has(value)) { | ||
return events.get(value); | ||
} else { | ||
var event = eventNames[next++]; | ||
events.set(value, event); | ||
return event; | ||
} | ||
}; | ||
var sink = function sink(t, d) { | ||
if (t === 1) return getName(d); | ||
if (t === 2 && !d) return '|'; | ||
if (t === 2 && d) return 'x'; | ||
}; | ||
for (var i = 0; i < size; ++i) { | ||
if (frames.has(i)) { | ||
var frame = frames.get(i).map(function (creator) { | ||
return creator(sink); | ||
}).join(''); | ||
marbles += frame.length > 1 ? "(" + frame + ")" : frame; | ||
} else { | ||
marbles += '-'; | ||
} | ||
} | ||
return marbles; | ||
}; | ||
var listenable = function listenable(marble, values) { | ||
@@ -42,23 +154,18 @@ if (values === void 0) { | ||
if (start !== 0) return; | ||
var breakpoints = marble.split('-'); | ||
var unsubscribed = false; | ||
var id = null; | ||
var emitFirst = function emitFirst(breakpoints) { | ||
if (unsubscribed) return; | ||
var head = breakpoints[0], | ||
teil = breakpoints.slice(1); | ||
var _parse = parse(marble, values), | ||
frames = _parse.frames, | ||
size = _parse.size; | ||
if (head === '|') { | ||
sink(2); | ||
} else if (head === 'x') { | ||
sink(2, { | ||
error: 'error!' | ||
var timeoutId = null; | ||
var emit = function emit(frame) { | ||
if (frames.has(frame)) { | ||
frames.get(frame).forEach(function (emitter) { | ||
return emitter(sink); | ||
}); | ||
} else if (head !== '') { | ||
sink(1, pick(values, head)); | ||
} | ||
if (teil.length > 0) { | ||
id = setTimeout(emitFirst, 1, teil); | ||
if (frame < size) { | ||
timeoutId = setTimeout(emit, FRAME_SIZE, frame + 1); | ||
} | ||
@@ -69,7 +176,6 @@ }; | ||
if (t === 2) { | ||
unsubscribed = true; | ||
id !== null && clearTimeout(id); | ||
timeoutId !== null && clearTimeout(timeoutId); | ||
} | ||
}); | ||
emitFirst(breakpoints); | ||
emit(0); | ||
}; | ||
@@ -85,24 +191,12 @@ }; | ||
if (start !== 0) return; | ||
var breakpoints = marble.split('-').filter(Boolean); | ||
var _parse = parse(marble, values), | ||
frames = _parse.frames, | ||
size = _parse.size; | ||
if (size > 1) throw new Error("pullable source can't be async"); | ||
var emitters = frames.get(0); | ||
var index = 0; | ||
var completed = false; | ||
sink(0, function (t, d) { | ||
if (completed) return; | ||
if (t === 1) { | ||
var next = breakpoints[index++]; | ||
if (next === '|') { | ||
sink(2); | ||
completed = true; | ||
} else if (next === 'x') { | ||
sink(2, { | ||
error: 'error' | ||
}); | ||
} else { | ||
sink(1, pick(values, next)); | ||
} | ||
} else if (t === 2) { | ||
completed = true; | ||
} | ||
if (t === 1) emitters[index++](sink); | ||
}); | ||
@@ -113,3 +207,3 @@ }; | ||
var message = function message(expected, received) { | ||
return "\nexpected: " + toMarble(expected) + "\nreceived: " + toMarble(received) + "\n\n"; | ||
return "\nexpected: " + expected + "\nreceived: " + received + "\n\n"; | ||
}; | ||
@@ -123,7 +217,21 @@ | ||
return function (source) { | ||
var breakpoints = marble.split('-'); | ||
var expected = breakpoints.filter(Boolean).map(pick.bind(null, values)); | ||
var received = []; | ||
var talkback; | ||
return new Promise(function (resolve, reject) { | ||
var receivedFrames = new Map(); | ||
var frame = 0; | ||
var set = function set(creator) { | ||
if (receivedFrames.has(frame)) { | ||
var _creators = receivedFrames.get(frame); | ||
_creators.push(creator); | ||
receivedFrames.set(frame, _creators); | ||
} else { | ||
receivedFrames.set(frame, [creator]); | ||
} | ||
}; | ||
var talkback; | ||
var ended = false; | ||
var id; | ||
source(0, function (t, d) { | ||
@@ -133,11 +241,33 @@ if (t === 0) { | ||
talkback(1); | ||
if (!id && !ended) { | ||
id = setInterval(function () { | ||
return frame += 1; | ||
}, FRAME_SIZE); | ||
} | ||
return; | ||
} | ||
received.push(t === 1 ? d : '|'); | ||
var test = compare(expected, received, t === 2); | ||
if (test === compare.EQUAL || test === compare.DIFFERENT) talkback(2); | ||
if (test === compare.EQUAL) resolve(); | ||
if (test === compare.DIFFERENT) reject(message(expected, received)); | ||
if (t === 1) talkback(1); | ||
if (t === 1) { | ||
set(defaultCreators.next(pick(values, d))); | ||
talkback(1); | ||
} | ||
if (t === 2) { | ||
ended = true; | ||
id && clearInterval(id); | ||
d ? set(defaultCreators.error(d)) : set(defaultCreators.end()); | ||
talkback(2); | ||
var received = create({ | ||
frames: receivedFrames, | ||
size: frame + 1 | ||
}); | ||
if (received === marble.trim()) { | ||
resolve(); | ||
} else { | ||
reject(message(marble.trim(), received)); | ||
} | ||
} | ||
}); | ||
@@ -144,0 +274,0 @@ }); |
@@ -5,5 +5,3 @@ 'use strict'; | ||
var toMarble = function toMarble(values) { | ||
return values.join('-'); | ||
}; | ||
var FRAME_SIZE = 10; | ||
@@ -18,23 +16,137 @@ var isDefined = function isDefined(value) { | ||
var DIFFERENT = 0; | ||
var NOT_COMPLITE = 1; | ||
var EQUAL = 2; | ||
function _extends() { | ||
_extends = Object.assign || function (target) { | ||
for (var i = 1; i < arguments.length; i++) { | ||
var source = arguments[i]; | ||
var compare = function compare(expected, received, complete) { | ||
if (complete && expected.length !== received.length) return DIFFERENT; | ||
var length = received.length; | ||
for (var key in source) { | ||
if (Object.prototype.hasOwnProperty.call(source, key)) { | ||
target[key] = source[key]; | ||
} | ||
} | ||
} | ||
for (var i = 0; i < length; i++) { | ||
if (expected[i] !== received[i]) { | ||
return DIFFERENT; | ||
return target; | ||
}; | ||
return _extends.apply(this, arguments); | ||
} | ||
var defaultCreators = { | ||
end: function end() { | ||
return function (sink) { | ||
return sink(2); | ||
}; | ||
}, | ||
error: function error(_error) { | ||
return function (sink) { | ||
return sink(2, isDefined(_error) ? _error : 'error'); | ||
}; | ||
}, | ||
next: function next(value) { | ||
return function (sink) { | ||
return sink(1, value); | ||
}; | ||
} | ||
}; | ||
var parse = function parse(marbles, values, error, userCreators) { | ||
if (values === void 0) { | ||
values = {}; | ||
} | ||
var creators = _extends({}, defaultCreators, userCreators); | ||
var fragments = marbles.trim().split(''); | ||
var frameIndex = 0; | ||
var frames = new Map(); | ||
var inGroop = false; | ||
var groopBuffer = []; | ||
var nextFrame = function nextFrame() { | ||
return frameIndex += 1; | ||
}; | ||
var set = function set(value) { | ||
frames.set(frameIndex, value); | ||
nextFrame(); | ||
}; | ||
while (fragments.length !== 0) { | ||
var _fragments = fragments, | ||
head = _fragments[0], | ||
teil = _fragments.slice(1); | ||
fragments = teil; | ||
switch (head) { | ||
case '-': | ||
nextFrame(); | ||
continue; | ||
case '|': | ||
inGroop ? groopBuffer.push(creators.end()) : set([creators.end()]); | ||
continue; | ||
case 'x': | ||
inGroop ? groopBuffer.push(creators.error(error)) : set([creators.error(error)]); | ||
continue; | ||
case '(': | ||
inGroop = true; | ||
continue; | ||
case ')': | ||
set(groopBuffer); | ||
inGroop = false; | ||
groopBuffer = []; | ||
continue; | ||
default: | ||
inGroop ? groopBuffer.push(creators.next(pick(values, head))) : set([creators.next(pick(values, head))]); | ||
} | ||
} | ||
return expected.length === received.length ? EQUAL : NOT_COMPLITE; | ||
return { | ||
frames: frames, | ||
size: frameIndex | ||
}; | ||
}; | ||
var eventNames = 'abcdefghijklmnopqrstuvwyzABCDEFGHIJKLMNOPQRSTUVWYZ'; | ||
var create = function create(_ref) { | ||
var frames = _ref.frames, | ||
size = _ref.size; | ||
var marbles = ''; | ||
var events = new Map(); | ||
var next = 0; | ||
compare.DIFFERENT = DIFFERENT; | ||
compare.NOT_COMPLITE = NOT_COMPLITE; | ||
compare.EQUAL = EQUAL; | ||
var getName = function getName(value) { | ||
if (events.has(value)) { | ||
return events.get(value); | ||
} else { | ||
var event = eventNames[next++]; | ||
events.set(value, event); | ||
return event; | ||
} | ||
}; | ||
var sink = function sink(t, d) { | ||
if (t === 1) return getName(d); | ||
if (t === 2 && !d) return '|'; | ||
if (t === 2 && d) return 'x'; | ||
}; | ||
for (var i = 0; i < size; ++i) { | ||
if (frames.has(i)) { | ||
var frame = frames.get(i).map(function (creator) { | ||
return creator(sink); | ||
}).join(''); | ||
marbles += frame.length > 1 ? "(" + frame + ")" : frame; | ||
} else { | ||
marbles += '-'; | ||
} | ||
} | ||
return marbles; | ||
}; | ||
var listenable = function listenable(marble, values) { | ||
@@ -47,23 +159,18 @@ if (values === void 0) { | ||
if (start !== 0) return; | ||
var breakpoints = marble.split('-'); | ||
var unsubscribed = false; | ||
var id = null; | ||
var emitFirst = function emitFirst(breakpoints) { | ||
if (unsubscribed) return; | ||
var head = breakpoints[0], | ||
teil = breakpoints.slice(1); | ||
var _parse = parse(marble, values), | ||
frames = _parse.frames, | ||
size = _parse.size; | ||
if (head === '|') { | ||
sink(2); | ||
} else if (head === 'x') { | ||
sink(2, { | ||
error: 'error!' | ||
var timeoutId = null; | ||
var emit = function emit(frame) { | ||
if (frames.has(frame)) { | ||
frames.get(frame).forEach(function (emitter) { | ||
return emitter(sink); | ||
}); | ||
} else if (head !== '') { | ||
sink(1, pick(values, head)); | ||
} | ||
if (teil.length > 0) { | ||
id = setTimeout(emitFirst, 1, teil); | ||
if (frame < size) { | ||
timeoutId = setTimeout(emit, FRAME_SIZE, frame + 1); | ||
} | ||
@@ -74,7 +181,6 @@ }; | ||
if (t === 2) { | ||
unsubscribed = true; | ||
id !== null && clearTimeout(id); | ||
timeoutId !== null && clearTimeout(timeoutId); | ||
} | ||
}); | ||
emitFirst(breakpoints); | ||
emit(0); | ||
}; | ||
@@ -90,24 +196,12 @@ }; | ||
if (start !== 0) return; | ||
var breakpoints = marble.split('-').filter(Boolean); | ||
var _parse = parse(marble, values), | ||
frames = _parse.frames, | ||
size = _parse.size; | ||
if (size > 1) throw new Error("pullable source can't be async"); | ||
var emitters = frames.get(0); | ||
var index = 0; | ||
var completed = false; | ||
sink(0, function (t, d) { | ||
if (completed) return; | ||
if (t === 1) { | ||
var next = breakpoints[index++]; | ||
if (next === '|') { | ||
sink(2); | ||
completed = true; | ||
} else if (next === 'x') { | ||
sink(2, { | ||
error: 'error' | ||
}); | ||
} else { | ||
sink(1, pick(values, next)); | ||
} | ||
} else if (t === 2) { | ||
completed = true; | ||
} | ||
if (t === 1) emitters[index++](sink); | ||
}); | ||
@@ -118,3 +212,3 @@ }; | ||
var message = function message(expected, received) { | ||
return "\nexpected: " + toMarble(expected) + "\nreceived: " + toMarble(received) + "\n\n"; | ||
return "\nexpected: " + expected + "\nreceived: " + received + "\n\n"; | ||
}; | ||
@@ -128,7 +222,21 @@ | ||
return function (source) { | ||
var breakpoints = marble.split('-'); | ||
var expected = breakpoints.filter(Boolean).map(pick.bind(null, values)); | ||
var received = []; | ||
var talkback; | ||
return new Promise(function (resolve, reject) { | ||
var receivedFrames = new Map(); | ||
var frame = 0; | ||
var set = function set(creator) { | ||
if (receivedFrames.has(frame)) { | ||
var _creators = receivedFrames.get(frame); | ||
_creators.push(creator); | ||
receivedFrames.set(frame, _creators); | ||
} else { | ||
receivedFrames.set(frame, [creator]); | ||
} | ||
}; | ||
var talkback; | ||
var ended = false; | ||
var id; | ||
source(0, function (t, d) { | ||
@@ -138,11 +246,33 @@ if (t === 0) { | ||
talkback(1); | ||
if (!id && !ended) { | ||
id = setInterval(function () { | ||
return frame += 1; | ||
}, FRAME_SIZE); | ||
} | ||
return; | ||
} | ||
received.push(t === 1 ? d : '|'); | ||
var test = compare(expected, received, t === 2); | ||
if (test === compare.EQUAL || test === compare.DIFFERENT) talkback(2); | ||
if (test === compare.EQUAL) resolve(); | ||
if (test === compare.DIFFERENT) reject(message(expected, received)); | ||
if (t === 1) talkback(1); | ||
if (t === 1) { | ||
set(defaultCreators.next(pick(values, d))); | ||
talkback(1); | ||
} | ||
if (t === 2) { | ||
ended = true; | ||
id && clearInterval(id); | ||
d ? set(defaultCreators.error(d)) : set(defaultCreators.end()); | ||
talkback(2); | ||
var received = create({ | ||
frames: receivedFrames, | ||
size: frame + 1 | ||
}); | ||
if (received === marble.trim()) { | ||
resolve(); | ||
} else { | ||
reject(message(marble.trim(), received)); | ||
} | ||
} | ||
}); | ||
@@ -149,0 +279,0 @@ }); |
{ | ||
"name": "@jeetiss/callbag-marble-tester", | ||
"version": "0.0.4", | ||
"version": "0.1.0", | ||
"description": "👜 Callbag operators for the best tests.", | ||
@@ -38,5 +38,6 @@ "main": "dist/callbag-marble-tester.js", | ||
"babel-jest": "^23.6.0", | ||
"callbag-filter": "^1.0.1", | ||
"callbag-map": "^1.0.1", | ||
"callbag-merge": "^3.1.0", | ||
"callbag-pipe": "^1.1.1", | ||
"callbag-filter": "^1.0.1", | ||
"callbag-subscribe": "^1.4.1", | ||
@@ -43,0 +44,0 @@ "husky": "^0.14.3", |
# callbag-marble-tester | ||
Callbag utils for testing deferent operators. | ||
Callbag utils for testing different operators. | ||
@@ -5,0 +5,0 @@ ## install |
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
13886
450
16
1