80 lines
2.3 KiB
TypeScript
80 lines
2.3 KiB
TypeScript
|
|
jest.mock('../src/utils/opencvAdapter', () => ({
|
||
|
|
__esModule: true,
|
||
|
|
default: {},
|
||
|
|
}));
|
||
|
|
|
||
|
|
import {
|
||
|
|
buildPaintColorMapImage,
|
||
|
|
} from '../src/utils/paintColorMapTexture';
|
||
|
|
import {
|
||
|
|
bgrBufferToRgbaBuffer,
|
||
|
|
bgrToLabL,
|
||
|
|
prepareFreqLayersFromBgrBuffer,
|
||
|
|
} from '../src/utils/freqLayerPrep';
|
||
|
|
import { getRegionPaintEffect } from '../src/utils/paintShaderRuntime';
|
||
|
|
|
||
|
|
jest.mock('@shopify/react-native-skia', () => {
|
||
|
|
const makeImage = jest.fn(() => ({
|
||
|
|
dispose: jest.fn(),
|
||
|
|
width: () => 2,
|
||
|
|
height: () => 2,
|
||
|
|
}));
|
||
|
|
return {
|
||
|
|
Skia: {
|
||
|
|
Data: { fromBytes: jest.fn(() => ({})) },
|
||
|
|
Image: { MakeImage: makeImage },
|
||
|
|
RuntimeEffect: {
|
||
|
|
Make: jest.fn(() => ({
|
||
|
|
getUniformCount: () => 4,
|
||
|
|
getUniformName: (i: number) =>
|
||
|
|
['colorBaseOpacity', 'lLightOpacity', 'textureOpacity', 'showOrigin'][
|
||
|
|
i
|
||
|
|
],
|
||
|
|
})),
|
||
|
|
},
|
||
|
|
},
|
||
|
|
AlphaType: { Opaque: 1, Unpremul: 3 },
|
||
|
|
ColorType: { RGBA_8888: 4 },
|
||
|
|
TileMode: { Clamp: 0 },
|
||
|
|
ImageFormat: { PNG: 4 },
|
||
|
|
Canvas: 'Canvas',
|
||
|
|
Fill: 'Fill',
|
||
|
|
Shader: 'Shader',
|
||
|
|
ImageShader: 'ImageShader',
|
||
|
|
Group: 'Group',
|
||
|
|
drawAsImage: jest.fn(),
|
||
|
|
};
|
||
|
|
});
|
||
|
|
|
||
|
|
test('bgrToLabL returns clamped 0-255', () => {
|
||
|
|
expect(bgrToLabL(0, 0, 0)).toBeGreaterThanOrEqual(0);
|
||
|
|
expect(bgrToLabL(255, 255, 255)).toBeLessThanOrEqual(255);
|
||
|
|
expect(bgrToLabL(128, 128, 128)).toBeGreaterThan(0);
|
||
|
|
});
|
||
|
|
|
||
|
|
test('bgrBufferToRgbaBuffer swaps BGR to RGBA', () => {
|
||
|
|
const bgr = new Uint8Array([10, 20, 30]);
|
||
|
|
const rgba = bgrBufferToRgbaBuffer(bgr, 1, 1);
|
||
|
|
expect(Array.from(rgba)).toEqual([30, 20, 10, 255]);
|
||
|
|
});
|
||
|
|
|
||
|
|
test('buildPaintColorMapImage marks painted pixels', () => {
|
||
|
|
const pick = new Uint8Array([0, 1, 2]);
|
||
|
|
const painted = new Map([
|
||
|
|
[0, { b: 1, g: 2, r: 3 }],
|
||
|
|
[1, { b: 4, g: 5, r: 6 }],
|
||
|
|
]);
|
||
|
|
const image = buildPaintColorMapImage(pick, 3, 1, painted);
|
||
|
|
expect(image).toBeTruthy();
|
||
|
|
expect(require('@shopify/react-native-skia').Skia.Image.MakeImage).toHaveBeenCalled();
|
||
|
|
});
|
||
|
|
|
||
|
|
test('prepareFreqLayersFromBgrBuffer rejects invalid buffer size', async () => {
|
||
|
|
await expect(prepareFreqLayersFromBgrBuffer(new Uint8Array(2), 1, 1)).resolves.toBeNull();
|
||
|
|
});
|
||
|
|
|
||
|
|
test('regionPaint SkSL compiles via RuntimeEffect', () => {
|
||
|
|
const effect = getRegionPaintEffect();
|
||
|
|
expect(effect.getUniformCount()).toBe(4);
|
||
|
|
});
|