verify-material-closure.test.mjs 1.3 KB

123456789101112131415161718192021
  1. import assert from 'node:assert/strict'
  2. import { verifyMaterialClosure } from './verify-material-closure.mjs'
  3. const valid = { meshes: [{ primitives: [{ material: 0 }] }], materials: [{ pbrMetallicRoughness: { baseColorTexture: { index: 0 } } }],
  4. textures: [{ source: 0, sampler: 0 }], images: [{}], samplers: [{}] }
  5. verifyMaterialClosure(valid)
  6. for (const mutate of [
  7. j => { j.meshes[0].primitives[0].material = 9 },
  8. j => { j.materials[0].pbrMetallicRoughness.baseColorTexture.index = 9 },
  9. j => { j.materials[0].pbrMetallicRoughness.baseColorTexture.index = -1 },
  10. j => { j.textures[0].source = 9 },
  11. j => { j.textures[0].sampler = 9 },
  12. j => { j.materials.push({}) }, j => { j.textures.push({ source: 0 }) },
  13. j => { j.images.push({}) }, j => { j.samplers.push({}) },
  14. ]) {
  15. const broken = structuredClone(valid); mutate(broken)
  16. assert.throws(() => verifyMaterialClosure(broken))
  17. }
  18. const defaultSampler = structuredClone(valid); delete defaultSampler.textures[0].sampler; delete defaultSampler.samplers
  19. verifyMaterialClosure(defaultSampler)
  20. verifyMaterialClosure({ meshes: [{ primitives: [{ material: 0 }] }], materials: [{}] })
  21. console.log(JSON.stringify({ passed: true, scope: 'material/texture/image/sampler range and dependency closure rejection' }))