feat: establish reproducible FreeCAD web compatibility baseline
This commit is contained in:
31
tests/secondaryFormats.test.ts
Normal file
31
tests/secondaryFormats.test.ts
Normal file
@@ -0,0 +1,31 @@
|
||||
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/)
|
||||
})
|
||||
Reference in New Issue
Block a user