Added scanning barcodes with a camera
This commit is contained in:
90
quagga2/quagga2-1.12.1/test/integration/reader-order.spec.ts
Normal file
90
quagga2/quagga2-1.12.1/test/integration/reader-order.spec.ts
Normal file
@@ -0,0 +1,90 @@
|
||||
/**
|
||||
* Tests to verify that barcode readers are processed in the order specified
|
||||
* in the configuration. This is important for predictable decoding behavior.
|
||||
*
|
||||
* Key findings about reader order:
|
||||
* 1. Internal readers (code_128_reader, ean_reader, etc.) are processed in the
|
||||
* order they appear in the `readers` config array
|
||||
* 2. External readers must be registered via `Quagga.registerReader()` BEFORE
|
||||
* they can be used in the `readers` array
|
||||
* 3. The position of a reader in the `readers` array determines when it attempts
|
||||
* to decode (earlier = higher priority)
|
||||
* 4. The first reader to successfully decode the barcode wins
|
||||
*/
|
||||
|
||||
import Quagga from '../../src/quagga';
|
||||
import { expect } from 'chai';
|
||||
|
||||
/**
|
||||
* Helper function to construct fixture paths consistently across browser and Node environments
|
||||
*/
|
||||
function getFixturePath(folder: string, filename: string): string {
|
||||
const prefix = typeof window !== 'undefined' ? '/' : '';
|
||||
return `${prefix}test/fixtures/${folder}/${filename}`;
|
||||
}
|
||||
|
||||
describe('Priority Behavior with Multiple Readers', () => {
|
||||
it('should decode EAN-8 as ean_8 when ean_8_reader is prioritized over ean_reader', async function() {
|
||||
this.timeout(20000);
|
||||
|
||||
// This test uses an EAN-8 barcode image (8 digits)
|
||||
// When ean_8_reader is listed first, it should decode as ean_8
|
||||
const config = {
|
||||
inputStream: {
|
||||
size: 640,
|
||||
},
|
||||
locator: {
|
||||
patchSize: 'large',
|
||||
halfSample: true,
|
||||
},
|
||||
numOfWorkers: 0,
|
||||
decoder: {
|
||||
// EAN-8 reader first - should decode EAN-8 barcodes as ean_8
|
||||
readers: ['ean_8_reader', 'ean_reader'],
|
||||
},
|
||||
locate: true,
|
||||
src: getFixturePath('ean_8', 'image-001.jpg'),
|
||||
};
|
||||
|
||||
const result = await Quagga.decodeSingle(config);
|
||||
|
||||
expect(result).to.be.an('object');
|
||||
expect(result.codeResult).to.be.an('object');
|
||||
expect(result.codeResult.code).to.equal('42191605');
|
||||
expect(result.codeResult.format).to.equal('ean_8');
|
||||
});
|
||||
|
||||
it('should fallback to ean_8_reader when ean_reader cannot decode EAN-8 barcode', async function() {
|
||||
this.timeout(20000);
|
||||
|
||||
// EAN-8 and EAN-13 are different barcode formats with different structures.
|
||||
// The EAN-13 reader will not successfully decode an EAN-8 barcode,
|
||||
// so it will return null and the decoder will try the next reader.
|
||||
// This test demonstrates that reader order affects fallback behavior.
|
||||
const config = {
|
||||
inputStream: {
|
||||
size: 640,
|
||||
},
|
||||
locator: {
|
||||
patchSize: 'large',
|
||||
halfSample: true,
|
||||
},
|
||||
numOfWorkers: 0,
|
||||
decoder: {
|
||||
// EAN-13 reader first, EAN-8 as fallback
|
||||
readers: ['ean_reader', 'ean_8_reader'],
|
||||
},
|
||||
locate: true,
|
||||
src: getFixturePath('ean_8', 'image-001.jpg'),
|
||||
};
|
||||
|
||||
const result = await Quagga.decodeSingle(config);
|
||||
|
||||
// EAN-13 reader cannot decode EAN-8, so EAN-8 reader succeeds as fallback
|
||||
expect(result).to.be.an('object');
|
||||
expect(result.codeResult).to.be.an('object');
|
||||
expect(result.codeResult.code).to.equal('42191605');
|
||||
// Since EAN-13 reader fails, the EAN-8 reader handles it
|
||||
expect(result.codeResult.format).to.equal('ean_8');
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user