scandit-sdk
Version:
Scandit Barcode Scanner SDK for the Web
127 lines (118 loc) • 4.06 kB
text/typescript
/* tslint:disable:no-implicit-dependencies no-any */
/**
* Parser tests
*/
import test from "ava";
import * as sinon from "sinon";
import { BrowserHelper, configure, Parser, ParserResult, Scanner } from "..";
declare const global: any;
global.Worker = sinon.stub().returns({
postMessage: sinon.stub(),
terminate: sinon.stub()
});
URL.createObjectURL = sinon.stub();
async function prepareBrowserAndLibrary(): Promise<void> {
BrowserHelper.checkBrowserCompatibility = () => {
return {
fullSupport: true,
scannerSupport: true,
missingFeatures: []
};
};
await configure("#".repeat(64));
}
test("constructor", async t => {
await prepareBrowserAndLibrary();
const s: Scanner = new Scanner();
const p: Parser = new Parser(s, Parser.DataFormat.DLID);
t.is((<any>p).scanner, s);
t.is((<any>p).dataFormat, Parser.DataFormat.DLID);
t.is((<any>p).options, undefined);
});
test("setOptions", async t => {
await prepareBrowserAndLibrary();
const s: Scanner = new Scanner();
const p: Parser = new Parser(s, Parser.DataFormat.DLID);
t.is((<any>p).options, undefined);
p.setOptions({});
t.deepEqual((<any>p).options, {});
p.setOptions({
option1: true
});
t.deepEqual((<any>p).options, {
option1: true
});
});
test("parseString", async t => {
await prepareBrowserAndLibrary();
const s: Scanner = new Scanner();
const p: Parser = new Parser(s, Parser.DataFormat.DLID);
const parseStringSpy: sinon.SinonSpy<[Parser.DataFormat, string, any?], Promise<ParserResult>> = sinon.spy(
s,
"parseString"
);
// tslint:disable-next-line: no-floating-promises
p.parseString("");
t.is(parseStringSpy.callCount, 1);
t.deepEqual(parseStringSpy.getCall(0).args, [Parser.DataFormat.DLID, "", undefined]);
// tslint:disable-next-line: no-floating-promises
p.parseString("abcd");
t.is(parseStringSpy.callCount, 2);
t.deepEqual(parseStringSpy.getCall(1).args, [Parser.DataFormat.DLID, "abcd", undefined]);
p.setOptions({
option1: true
});
// tslint:disable-next-line: no-floating-promises
p.parseString("abcd");
t.is(parseStringSpy.callCount, 3);
t.deepEqual(parseStringSpy.getCall(2).args, [
Parser.DataFormat.DLID,
"abcd",
{
option1: true
}
]);
});
test("parseRawData", async t => {
await prepareBrowserAndLibrary();
const s: Scanner = new Scanner();
const p: Parser = new Parser(s, Parser.DataFormat.DLID);
const parseStringSpy: sinon.SinonSpy<[Parser.DataFormat, string, any?], Promise<ParserResult>> = sinon.spy(
s,
"parseString"
);
// tslint:disable-next-line: no-floating-promises
p.parseRawData(new Uint8Array([]));
t.is(parseStringSpy.callCount, 1);
t.deepEqual(parseStringSpy.getCall(0).args, [Parser.DataFormat.DLID, "", undefined]);
// tslint:disable-next-line: no-floating-promises
p.parseRawData(new Uint8Array([97, 98, 99, 100]));
t.is(parseStringSpy.callCount, 2);
t.deepEqual(parseStringSpy.getCall(1).args, [Parser.DataFormat.DLID, "abcd", undefined]);
p.setOptions({
option1: true
});
// tslint:disable-next-line: no-floating-promises
p.parseRawData(new Uint8Array([97, 98, 99, 100]));
t.is(parseStringSpy.callCount, 3);
t.deepEqual(parseStringSpy.getCall(2).args, [
Parser.DataFormat.DLID,
"abcd",
{
option1: true
}
]);
p.setOptions();
// tslint:disable-next-line: no-floating-promises
p.parseRawData(new Uint8Array([255]));
t.is(parseStringSpy.callCount, 4);
t.deepEqual(parseStringSpy.getCall(3).args, [Parser.DataFormat.DLID, "", undefined]);
// tslint:disable-next-line: no-floating-promises
p.parseRawData(new Uint8Array([97, 98, 99, 100, 128]));
t.is(parseStringSpy.callCount, 5);
t.deepEqual(parseStringSpy.getCall(4).args, [Parser.DataFormat.DLID, "", undefined]);
// tslint:disable-next-line: no-floating-promises
p.parseRawData(new Uint8Array([1, 2, 9, 32, 13, 10]));
t.is(parseStringSpy.callCount, 6);
t.deepEqual(parseStringSpy.getCall(5).args, [Parser.DataFormat.DLID, "\u{1}\u{2}\t \r\n", undefined]);
});