2d12c8a553
Run ID: 131
119 lines
2.5 KiB
Plaintext
119 lines
2.5 KiB
Plaintext
"use strict";
|
|
|
|
var test = require("tap").test;
|
|
var breakable = require("../");
|
|
|
|
test("normal-return", function(t) {
|
|
t.equal(breakable(function(brk) {
|
|
return 1;
|
|
}), 1);
|
|
t.end();
|
|
});
|
|
|
|
test("break-return", function(t) {
|
|
t.equal(breakable(function(brk) {
|
|
brk(2);
|
|
return 1;
|
|
}), 2);
|
|
t.end();
|
|
});
|
|
|
|
test("recurse", function(t) {
|
|
t.equal(breakable(function(brk) {
|
|
function traverse(n) {
|
|
if (n < 100) {
|
|
traverse(n + 1);
|
|
}
|
|
brk(n);
|
|
}
|
|
traverse(0);
|
|
}), 100);
|
|
t.end();
|
|
});
|
|
|
|
test("simple-throws", function(t) {
|
|
t.throws(breakable.bind(null, function(brk) {
|
|
throw 1;
|
|
}));
|
|
t.doesNotThrow(breakable.bind(null, function(brk) {
|
|
brk(1);
|
|
throw 2;
|
|
}));
|
|
t.end();
|
|
});
|
|
|
|
test("prop-recurse-break", function(t) {
|
|
var tstObj = {a: 1, b: {c: 2, d: {e: 3, f: "gold", g: null}}, h: {i: 6}};
|
|
|
|
var found = breakable(function(brk) {
|
|
function traverse(obj) {
|
|
var props = Object.keys(obj);
|
|
props.forEach(function(prop) {
|
|
var val = obj[prop];
|
|
if (val === "gold") {
|
|
brk(prop);
|
|
} else if (val === null) {
|
|
throw new Error("break did not work");
|
|
} else if (val && typeof val === "object") {
|
|
traverse(val);
|
|
}
|
|
});
|
|
}
|
|
traverse(tstObj);
|
|
});
|
|
t.equal(found, "f");
|
|
t.end();
|
|
});
|
|
|
|
test("forEach-break", function(t) {
|
|
var cnt = 0;
|
|
breakable(function(brk) {
|
|
[1,2,3].forEach(function(v) {
|
|
++cnt;
|
|
if (v === 2) {
|
|
brk();
|
|
}
|
|
});
|
|
});
|
|
t.equal(cnt, 2);
|
|
t.end();
|
|
});
|
|
|
|
test("nested-forEach-break", function(t) {
|
|
var cnt = 0;
|
|
breakable(function(brk) {
|
|
[1,2,3].forEach(function(v) {
|
|
[4,5,6].forEach(function(v1) {
|
|
++cnt;
|
|
if (v === 2 && v1 === 5) {
|
|
brk();
|
|
}
|
|
});
|
|
});
|
|
});
|
|
t.equal(cnt, 5);
|
|
t.end();
|
|
});
|
|
|
|
test("nested-breakables-1", function(t) {
|
|
var res = breakable(function(brk1) {
|
|
breakable(function(brk2) {
|
|
brk1(13);
|
|
});
|
|
});
|
|
t.equal(res, 13);
|
|
t.end();
|
|
});
|
|
|
|
test("nested-breakables-2", function(t) {
|
|
t.plan(2);
|
|
var res1 = breakable(function(brk1) {
|
|
var res2 = breakable(function(brk2) {
|
|
brk2(13);
|
|
});
|
|
t.equal(res2, 13);
|
|
});
|
|
t.equal(res1, undefined);
|
|
t.end();
|
|
});
|