xrfragment/test/aframe/filter.js

95 lines
3.5 KiB
JavaScript

// test the XR Fragments parser-filters with THREEjs scns
THREE = AFRAME.THREE
createScene = (noadd) => {
let obj = {a:{},b:{},c:{},d:{},extembed:{}}
for ( let i in obj ){
obj[i] = new THREE.Object3D()
obj[i].name = i
obj[i].material = {visible:true, clone: () => ({visible:true}) }
}
let {a,b,c,d,extembed} = obj
let scene = xrf.scene = new THREE.Scene()
if( !noadd ){
a.add(b)
b.add(c)
scene.add(a)
extembed.add(d)
scene.add(extembed)
}
b.userData.score = 2
a.userData.tag = "VR"
b.userData.tag = "foo hide"
c.userData.tag = "flop flap VR"
a.userData.price = 1
b.userData.price = 5
c.userData.price = 10
b.isSRC = "local"
d.userData.tag = "VR"
extembed.isSRC = true
extembed.isSRCExternal = true
return {a,b,c,d,extembed,scene}
}
filterScene = (URI,opts) => {
opts = opts || {}
frag = xrf.URI.parse(URI).XRF
var {a,b,c,d,extembed,scene} = createScene()
xrf.filter.scene({...opts,scene,frag})
scene.visible = (objname, expected, checkMaterial) => {
let o = scene.getObjectByName(objname)
if( !o ) return false === expected
let is = checkMaterial ? o.material.visible : o.visible
if( is !== expected ) console.dir(o)
return is === expected
}
return scene
}
scn = filterScene("#b")
test = () => scn.visible("a",true,true) && scn.visible("b",true) && scn.visible("c",true)
console.assert( test(), {scn,reason:`objectname: #b `})
scn = filterScene("#-b")
test = () => scn.visible("a",true,true) && scn.visible("b",false,true) && scn.visible("c",true) && scn.visible("c",true,true)
console.assert( test(), {scn,reason:`objectname: #-b`})
scn = filterScene("#-b*")
test = () => scn.visible("a",true,true) && scn.visible("b",false,true) && scn.visible("c",false,true)
console.assert( test(), {scn,reason:`objectname: #b*`})
scn = filterScene("#b",{reparent:true})
test = () => scn.visible("a",false) && scn.visible("b",true) && scn.visible("c",true)
console.assert( test(), {scn,reason:`objectname: #b (reparent scene)`})
scn = filterScene("#-b&b*")
test = () => scn.visible("a",true) && scn.visible("b",true) && scn.visible("c",true)
console.assert( test(), {scn,reason:`objectname: #-b&b `})
scn = filterScene("#-a&score*")
test = () => scn.visible("a",false,true) && scn.visible("b",true,true) && scn.visible("c",true,true)
console.assert( test(), {scn,reason:`propertyfilter: #score `})
scn = filterScene("#-a&score*=2")
test = () => scn.visible("a",false,true) && scn.visible("b",true) && scn.visible("c",true)
console.assert( test(), {scn,reason:`propertyfilter: #score=2`})
scn = filterScene("#-price*&price=>5")
test = () => scn.visible("a",false,true) && scn.visible("b",true,true) && scn.visible("c",true,true)
console.assert( test(), {scn,reason:`tagfilter: #-price&price=>5"`})
scn = filterScene("#-hide*")
test = () => scn.visible("a",true,true) && scn.visible("b",false,true) && scn.visible("c",false,true)
console.assert( test(), {scn,reason:`tagfilter: #-hide*"`})
scn = filterScene("#-VR")
test = () => scn.visible("a",false,true) && scn.visible("b",true,true) && scn.visible("c",false,true) && scn.visible("extembed",true,true) && scn.visible("d",true,true)
console.assert( test(), {scn,reason:`tagfilter: #-VR"`})
scn = filterScene("#-VR*")
test = () => scn.visible("a",false,true) && scn.visible("b",false,true) && scn.visible("c",false,true) && scn.visible("extembed",true,true) && scn.visible("d",true,true)
console.assert( test(), {scn,reason:`tagfilter: #-VR*"`})