32 lines
1.6 KiB
TypeScript
32 lines
1.6 KiB
TypeScript
import { test } from 'node:test'
|
|
import assert from 'node:assert/strict'
|
|
import { createSecondaryFormats, type SecondaryFormat } from '../src/facade/secondaryFormats'
|
|
|
|
const formats: SecondaryFormat[] = ['DXF', 'SVG', 'OBJ', 'PLY', 'STL', 'PDF', 'IFC', 'CSV']
|
|
|
|
test('secondary format adapters cover 2D, mesh, BIM and data with byte-exact proxy round-trips', () => {
|
|
const api = createSecondaryFormats()
|
|
for (const format of formats) {
|
|
const bytes = api.exportBytes(format, { label: 'Fixture' })
|
|
assert.equal(api.detect(format, bytes), true)
|
|
const record = api.importBytes({ id: format, format, bytes })
|
|
assert.equal(record.detected, true)
|
|
assert.equal(record.byteLength, bytes.byteLength)
|
|
assert.deepEqual(api.exportRecord(format), bytes)
|
|
}
|
|
assert.deepEqual(new Set(api.descriptors().map((entry) => entry.category)), new Set(['2d', 'mesh', 'bim', 'data']))
|
|
assert.equal(api.snapshot().records.length, formats.length)
|
|
assert.deepEqual(api.exportBytes('SVG'), api.exportBytes('SVG'))
|
|
})
|
|
|
|
test('every secondary format rejects an invalid signature and records remain isolated', () => {
|
|
const api = createSecondaryFormats()
|
|
const invalid = new TextEncoder().encode('invalid secondary payload')
|
|
for (const format of formats) assert.throws(() => api.importBytes({ id: `bad-${format}`, format, bytes: invalid }), new RegExp(`${format} payload signature`))
|
|
const bytes = api.exportBytes('PDF')
|
|
api.importBytes({ id: 'pdf', format: 'PDF', bytes })
|
|
assert.throws(() => api.importBytes({ id: 'pdf', format: 'PDF', bytes }), /already exists/)
|
|
api.remove('pdf')
|
|
assert.throws(() => api.exportRecord('pdf'), /does not exist/)
|
|
})
|