Added scanning barcodes with a camera

This commit is contained in:
2026-03-08 16:59:33 +00:00
parent b4f8489834
commit 5a37e5dd5f
404 changed files with 224181 additions and 0 deletions

View 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');
});
});