##// END OF EJS Templates
Added childContainer service to container services, ServiceContaier is destroyable, fixed browser Uuid version
Added childContainer service to container services, ServiceContaier is destroyable, fixed browser Uuid version

File last commit:

r115:691199f665e0 ioc ts support
r146:f3f5c56d3b3e v1.4.0-rc5 default
Show More
SafeTests.ts
95 lines | 2.8 KiB | video/mp2t | TypeScriptLexer
cin
migrating tests to the new project structure
r89 import { Cancellation } from "../Cancellation";
cin
corrected code to support ts strict mode...
r115 import { first, isPromise, firstWhere, delay, nowait, notImplemented } from "../safe";
cin
migrating tests to the new project structure
r89 import { test } from "./TestTraits";
test("await delay test", async t => {
// schedule delay
let resolved = false;
let res = delay(0).then(() => resolved = true);
t.false(resolved, "the delay should be async");
await res;
t.pass("await delay");
// create cancellation token
cin
corrected code to support ts strict mode...
r115 let cancel: (e?: any) => void = notImplemented;
cin
migrating tests to the new project structure
r89 const ct = new Cancellation(c => cancel = c);
// schedule delay
resolved = false;
res = delay(0, ct).then(() => resolved = true);
t.false(resolved, "created delay with ct");
// cancel
cancel();
try {
await res;
t.fail("the delay should fail when it is cancelled");
} catch {
t.pass("the delay is cancelled");
}
t.throws(() => {
// try schedule delay after the cancellation is requested
nowait(delay(0, ct));
}, "Should throw if cancelled before start");
});
test("sequemce test", async t => {
const sequence = ["a", "b", "c"];
cin
corrected code to support ts strict mode...
r115 const empty: string[] = [];
cin
migrating tests to the new project structure
r89
// synchronous tests
t.equals(first(sequence), "a", "Should return the first element");
t.equals(firstWhere(sequence, x => x === "b"), "b", "Should get the second element");
cin
corrected code to support ts strict mode...
r115 let v: string | undefined;
let e: Error | undefined;
cin
migrating tests to the new project structure
r89 first(sequence, x => v = x);
t.equal(v, "a", "The callback should be called for the first element");
firstWhere(sequence, x => x === "b", x => v = x);
t.equal(v, "b", "The callback should be called for the second element");
t.throws(() => {
first(empty);
}, "Should throw when the sequence is empty");
t.throws(() => {
firstWhere(empty, x => x === "b");
}, "Should throw when the sequence is empty");
t.throws(() => {
first(empty, x => v = x);
}, "Should throw when the sequence is empty");
t.throws(() => {
firstWhere(empty, x => x === "b", x => v = x);
}, "Should throw when the sequence is empty");
t.throws(() => {
firstWhere(sequence, x => x === "z");
}, "Should throw when the element isn't found");
t.throws(() => {
firstWhere(sequence, x => x === "z", x => v = x);
}, "Should throw when the element isn't found");
cin
corrected code to support ts strict mode...
r115 first(empty, undefined, x => e = x);
cin
migrating tests to the new project structure
r89 t.true(e, "The errorback should be called for the empty sequence");
// async tests
const asyncSequence = Promise.resolve(sequence);
const asyncEmptySequence = Promise.resolve(empty);
const promise = first(asyncSequence);
t.true(isPromise(promise), "Should return promise");
v = await promise;
t.equal(v, "a", "Should return the first element");
v = await new Promise(resolve => first(asyncSequence, resolve));
t.equal(v, "a", "The callback should be called for the first element");
});