inventoresed
Version:
Z-Wave driver written entirely in JavaScript/TypeScript
110 lines (95 loc) • 2.85 kB
text/typescript
import { deserializeCacheValue, serializeCacheValue } from "./Cache";
import { Duration } from "./Duration";
describe("lib/values/Cache", () => {
describe("serializeCacheValue()", () => {
it("leaves numbers untouched", () => {
const tests = [1, 2, 6, 7, -1, 0.15];
for (const val of tests) {
expect(serializeCacheValue(val)).toBe(val);
}
});
it("leaves strings untouched", () => {
const tests = ["1", "2", "6", "7", "-1", "0.15"];
for (const val of tests) {
expect(serializeCacheValue(val)).toBe(val);
}
});
it("leaves booleans untouched", () => {
expect(serializeCacheValue(true)).toBeTrue();
});
it("leaves arrays untouched", () => {
const tests = [[], [1, 2, "3"], [false]];
for (const val of tests) {
expect(serializeCacheValue(val)).toBe(val);
}
});
it("leaves objects untouched", () => {
const tests = [{}, { foo: "bar", baz: "inga" }, { 0: 1 }];
for (const val of tests) {
expect(serializeCacheValue(val)).toEqual(val);
}
});
it("converts Maps into objects", () => {
const input = new Map<any, any>([
["foo", "bar"],
[0, 1],
]);
const expected = { foo: "bar", 0: 1, $$type$$: "map" };
expect(serializeCacheValue(input)).toEqual(expected);
});
it("converts Durations into objects", () => {
const input = new Duration(2, "minutes");
const expected = {
unit: "minutes",
value: 2,
$$type$$: "duration",
};
expect(serializeCacheValue(input)).toEqual(expected);
});
});
describe("deserializeCacheValue()", () => {
it("leaves numbers untouched", () => {
const tests = [1, 2, 6, 7, -1, 0.15];
for (const val of tests) {
expect(deserializeCacheValue(val)).toBe(val);
}
});
it("leaves strings untouched", () => {
const tests = ["1", "2", "6", "7", "-1", "0.15"];
for (const val of tests) {
expect(deserializeCacheValue(val)).toBe(val);
}
});
it("leaves booleans untouched", () => {
expect(deserializeCacheValue(true)).toBeTrue();
});
it("leaves arrays untouched", () => {
const tests = [[], [1, 2, "3"], [false]];
for (const val of tests) {
expect(deserializeCacheValue(val)).toBe(val);
}
});
it("leaves objects untouched", () => {
const tests = [{}, { foo: "bar", baz: "inga" }, { 0: 1 }];
for (const val of tests) {
expect(deserializeCacheValue(val)).toEqual(val);
}
});
it("Restores Maps", () => {
const input = { foo: "bar", 0: 1, $$type$$: "map" };
const expected = new Map<any, any>([
["foo", "bar"],
[0, 1],
]);
expect(deserializeCacheValue(input)).toEqual(expected);
});
it("restores Durations", () => {
const expected = new Duration(1, "default");
const input = {
unit: "default",
$$type$$: "duration",
};
expect(deserializeCacheValue(input)).toEqual(expected);
});
});
});