import {BarcodeDetectionReceiver, BarcodeFormat} from '/gen/services/shape_detection/public/mojom/barcodedetection.mojom.m.js'; import {BarcodeDetectionProvider, BarcodeDetectionProviderReceiver} from '/gen/services/shape_detection/public/mojom/barcodedetection_provider.mojom.m.js'; self.BarcodeDetectionTest = (() => { // Class that mocks BarcodeDetectionProvider interface defined in // https://cs.chromium.org/chromium/src/services/shape_detection/public/mojom/barcodedetection_provider.mojom class MockBarcodeDetectionProvider { constructor() { this.receiver_ = new BarcodeDetectionProviderReceiver(this); this.interceptor_ = new MojoInterfaceInterceptor( BarcodeDetectionProvider.$interfaceName); this.interceptor_.oninterfacerequest = e => { if (this.should_close_pipe_on_request_) e.handle.close(); else this.receiver_.$.bindHandle(e.handle); } this.interceptor_.start(); this.should_close_pipe_on_request_ = false; } createBarcodeDetection(request, options) { this.mockService_ = new MockBarcodeDetection(request, options); } enumerateSupportedFormats() { return { supportedFormats: [ BarcodeFormat.AZTEC, BarcodeFormat.DATA_MATRIX, BarcodeFormat.QR_CODE, ] }; } getFrameData() { return this.mockService_.bufferData_; } getFormats() { return this.mockService_.options_.formats; } reset() { this.mockService_ = null; this.should_close_pipe_on_request_ = false; this.receiver_.$.close(); this.interceptor_.stop(); } // simulate a 'no implementation available' case simulateNoImplementation() { this.should_close_pipe_on_request_ = true; } } // Class that mocks BarcodeDetection interface defined in // https://cs.chromium.org/chromium/src/services/shape_detection/public/mojom/barcodedetection.mojom class MockBarcodeDetection { constructor(request, options) { this.options_ = options; this.receiver_ = new BarcodeDetectionReceiver(this); this.receiver_.$.bindHandle(request.handle); } detect(bitmapData) { this.bufferData_ = new Uint32Array(getArrayBufferFromBigBuffer(bitmapData.pixelData)); return { results: [ { rawValue : "cats", boundingBox: { x: 1.0, y: 1.0, width: 100.0, height: 100.0 }, format: BarcodeFormat.QR_CODE, cornerPoints: [ { x: 1.0, y: 1.0 }, { x: 101.0, y: 1.0 }, { x: 101.0, y: 101.0 }, { x: 1.0, y: 101.0 } ], }, { rawValue : "dogs", boundingBox: { x: 2.0, y: 2.0, width: 50.0, height: 50.0 }, format: BarcodeFormat.CODE_128, cornerPoints: [ { x: 2.0, y: 2.0 }, { x: 52.0, y: 2.0 }, { x: 52.0, y: 52.0 }, { x: 2.0, y: 52.0 } ], }, ], }; } } let testInternal = { initialized: false, MockBarcodeDetectionProvider: null } class BarcodeDetectionTestChromium { constructor() { Object.freeze(this); // Make it immutable. } initialize() { if (testInternal.initialized) throw new Error('Call reset() before initialize().'); testInternal.MockBarcodeDetectionProvider = new MockBarcodeDetectionProvider; testInternal.initialized = true; } // Resets state of barcode detection mocks between test runs. async reset() { if (!testInternal.initialized) throw new Error('Call initialize() before reset().'); testInternal.MockBarcodeDetectionProvider.reset(); testInternal.MockBarcodeDetectionProvider = null; testInternal.initialized = false; await new Promise(resolve => setTimeout(resolve, 0)); } MockBarcodeDetectionProvider() { return testInternal.MockBarcodeDetectionProvider; } } return BarcodeDetectionTestChromium; })(); self.BarcodeFormat = BarcodeFormat;