scandit-sdk
Version:
Scandit Barcode Scanner SDK for the Web
159 lines (153 loc) • 4.47 kB
text/typescript
/* tslint:disable:no-implicit-dependencies no-any */
/**
* BrowserHelper tests
*/
import test from "ava";
import { BrowserHelper } from "..";
Object.defineProperty(navigator, "platform", {
value: "iPhone"
});
// tslint:disable-next-line:max-func-body-length
test("checkBrowserCompatibility", t => {
Object.defineProperty(window, "Blob", {
value: null
});
t.deepEqual(BrowserHelper.checkBrowserCompatibility(), {
fullSupport: false,
missingFeatures: ["mediaDevices", "webWorkers", "webAssembly", "blob", "urlObject", "offscreenCanvas", "webgl"],
scannerSupport: false
});
Object.defineProperty(navigator, "mediaDevices", {
value: {
getUserMedia: () => {
return;
}
},
configurable: true
});
t.deepEqual(BrowserHelper.checkBrowserCompatibility(), {
fullSupport: false,
missingFeatures: ["webWorkers", "webAssembly", "blob", "urlObject", "offscreenCanvas", "webgl"],
scannerSupport: false
});
window.Worker = () => {
return;
};
t.deepEqual(BrowserHelper.checkBrowserCompatibility(), {
fullSupport: false,
missingFeatures: ["webAssembly", "blob", "urlObject", "offscreenCanvas", "webgl"],
scannerSupport: false
});
window.WebAssembly = {};
t.deepEqual(BrowserHelper.checkBrowserCompatibility(), {
fullSupport: false,
missingFeatures: ["blob", "urlObject", "offscreenCanvas", "webgl"],
scannerSupport: false
});
window.Blob = <Window["Blob"]>(<unknown>(() => {
return;
}));
t.deepEqual(BrowserHelper.checkBrowserCompatibility(), {
fullSupport: false,
missingFeatures: ["urlObject", "offscreenCanvas", "webgl"],
scannerSupport: false
});
window.URL = <Window["URL"]>(<unknown>{
createObjectURL: () => {
return;
}
});
t.deepEqual(BrowserHelper.checkBrowserCompatibility(), {
fullSupport: true,
missingFeatures: ["offscreenCanvas", "webgl"],
scannerSupport: true
});
window.OffscreenCanvas = () => {
return;
};
t.deepEqual(BrowserHelper.checkBrowserCompatibility(), {
fullSupport: true,
missingFeatures: ["webgl"],
scannerSupport: true
});
window.WebGLRenderingContext = () => {
return;
};
Object.defineProperty(BrowserHelper, "canvas", {
value: {
getContext: () => {
return null;
}
}
});
t.deepEqual(BrowserHelper.checkBrowserCompatibility(), {
fullSupport: true,
missingFeatures: ["webgl"],
scannerSupport: true
});
Object.defineProperty(BrowserHelper, "canvas", {
value: {
getContext: () => {
return true;
}
}
});
t.deepEqual(BrowserHelper.checkBrowserCompatibility(), {
fullSupport: true,
missingFeatures: [],
scannerSupport: true
});
BrowserHelper.userAgentInfo.setUA(
"Mozilla/5.0 (iPhone; CPU iPhone OS 11_2_5 like Mac OS X) " +
"AppleWebKit/604.5.6 (KHTML, like Gecko) Version/11.0 Mobile/15D60 Safari/604.1"
);
t.deepEqual(BrowserHelper.checkBrowserCompatibility(), {
fullSupport: false,
missingFeatures: ["webAssemblyErrorFree"],
scannerSupport: false
});
BrowserHelper.userAgentInfo.setUA(
"Mozilla/5.0 (iPhone; CPU iPhone OS 11_3 like Mac OS X) " +
"AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.0 Mobile/15E148 Safari/604.1"
);
t.deepEqual(BrowserHelper.checkBrowserCompatibility(), {
fullSupport: true,
missingFeatures: [],
scannerSupport: true
});
Object.defineProperty(navigator, "mediaDevices", {
value: undefined,
configurable: true
});
t.deepEqual(BrowserHelper.checkBrowserCompatibility(), {
fullSupport: false,
missingFeatures: ["mediaDevices"],
scannerSupport: true
});
navigator.enumerateDevices = () => {
return Promise.resolve([]);
};
t.deepEqual(BrowserHelper.checkBrowserCompatibility(), {
fullSupport: true,
missingFeatures: [],
scannerSupport: true
});
navigator.enumerateDevices = undefined;
window.MediaStreamTrack = {
getSources: () => {
return;
}
};
t.deepEqual(BrowserHelper.checkBrowserCompatibility(), {
fullSupport: true,
missingFeatures: [],
scannerSupport: true
});
});
test("getDeviceId", t => {
const currentDeviceId: string = BrowserHelper.getDeviceId();
t.regex(currentDeviceId, /[0-9a-f]{40}/);
t.deepEqual(BrowserHelper.getDeviceId(), currentDeviceId);
document.cookie = "scandit-device-id=";
t.notDeepEqual(BrowserHelper.getDeviceId(), currentDeviceId);
});