| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332 |
- import { PropertyBinding } from '../../../../src/animation/PropertyBinding.js';
- import { BoxGeometry } from '../../../../src/geometries/BoxGeometry.js';
- import { Mesh } from '../../../../src/objects/Mesh.js';
- import { MeshBasicMaterial } from '../../../../src/materials/MeshBasicMaterial.js';
- export default QUnit.module( 'Animation', () => {
- QUnit.module( 'PropertyBinding', () => {
- // INSTANCING
- QUnit.test( 'Instancing', ( assert ) => {
- const geometry = new BoxGeometry();
- const material = new MeshBasicMaterial();
- const mesh = new Mesh( geometry, material );
- const path = '.material.opacity';
- const parsedPath = {
- nodeName: '',
- objectName: 'material',
- objectIndex: undefined,
- propertyName: 'opacity',
- propertyIndex: undefined
- };
- // mesh, path
- const object = new PropertyBinding( mesh, path );
- assert.ok( object, 'Can instantiate a PropertyBinding.' );
- // mesh, path, parsedPath
- const object_all = new PropertyBinding( mesh, path, parsedPath );
- assert.ok( object_all, 'Can instantiate a PropertyBinding with mesh, path, and parsedPath.' );
- } );
- // STATIC
- QUnit.test( 'sanitizeNodeName', ( assert ) => {
- assert.equal(
- PropertyBinding.sanitizeNodeName( 'valid-name-123_' ),
- 'valid-name-123_',
- 'Leaves valid name intact.'
- );
- assert.equal(
- PropertyBinding.sanitizeNodeName( '急須' ),
- '急須',
- 'Leaves non-latin unicode characters intact.'
- );
- assert.equal(
- PropertyBinding.sanitizeNodeName( 'space separated name 123_ -' ),
- 'space_separated_name_123__-',
- 'Replaces spaces with underscores.'
- );
- assert.equal(
- PropertyBinding.sanitizeNodeName( '"Mátyás" %_* 😇' ),
- '"Mátyás"_%_*_😇',
- 'Allows various punctuation and symbols.'
- );
- assert.equal(
- PropertyBinding.sanitizeNodeName( '/invalid: name ^123.[_]' ),
- 'invalid_name_^123_',
- 'Strips reserved characters.'
- );
- } );
- QUnit.test( 'parseTrackName', ( assert ) => {
- const paths = [
- [
- '.property',
- {
- nodeName: undefined,
- objectName: undefined,
- objectIndex: undefined,
- propertyName: 'property',
- propertyIndex: undefined
- }
- ],
- [
- 'nodeName.property',
- {
- nodeName: 'nodeName',
- objectName: undefined,
- objectIndex: undefined,
- propertyName: 'property',
- propertyIndex: undefined
- }
- ],
- [
- 'a.property',
- {
- nodeName: 'a',
- objectName: undefined,
- objectIndex: undefined,
- propertyName: 'property',
- propertyIndex: undefined
- }
- ],
- [
- 'no.de.Name.property',
- {
- nodeName: 'no.de.Name',
- objectName: undefined,
- objectIndex: undefined,
- propertyName: 'property',
- propertyIndex: undefined
- }
- ],
- [
- 'no.d-e.Name.property',
- {
- nodeName: 'no.d-e.Name',
- objectName: undefined,
- objectIndex: undefined,
- propertyName: 'property',
- propertyIndex: undefined
- }
- ],
- [
- 'nodeName.property[accessor]',
- {
- nodeName: 'nodeName',
- objectName: undefined,
- objectIndex: undefined,
- propertyName: 'property',
- propertyIndex: 'accessor'
- }
- ],
- [
- 'nodeName.material.property[accessor]',
- {
- nodeName: 'nodeName',
- objectName: 'material',
- objectIndex: undefined,
- propertyName: 'property',
- propertyIndex: 'accessor'
- }
- ],
- [
- 'no.de.Name.material.property',
- {
- nodeName: 'no.de.Name',
- objectName: 'material',
- objectIndex: undefined,
- propertyName: 'property',
- propertyIndex: undefined
- }
- ],
- [
- 'no.de.Name.material[materialIndex].property',
- {
- nodeName: 'no.de.Name',
- objectName: 'material',
- objectIndex: 'materialIndex',
- propertyName: 'property',
- propertyIndex: undefined
- }
- ],
- [
- 'uuid.property[accessor]',
- {
- nodeName: 'uuid',
- objectName: undefined,
- objectIndex: undefined,
- propertyName: 'property',
- propertyIndex: 'accessor'
- }
- ],
- [
- 'uuid.objectName[objectIndex].propertyName[propertyIndex]',
- {
- nodeName: 'uuid',
- objectName: 'objectName',
- objectIndex: 'objectIndex',
- propertyName: 'propertyName',
- propertyIndex: 'propertyIndex'
- }
- ],
- [
- 'parentName/nodeName.property',
- {
- // directoryName is currently unused.
- nodeName: 'nodeName',
- objectName: undefined,
- objectIndex: undefined,
- propertyName: 'property',
- propertyIndex: undefined
- }
- ],
- [
- 'parentName/no.de.Name.property',
- {
- // directoryName is currently unused.
- nodeName: 'no.de.Name',
- objectName: undefined,
- objectIndex: undefined,
- propertyName: 'property',
- propertyIndex: undefined
- }
- ],
- [
- 'parentName/parentName/nodeName.property[index]',
- {
- // directoryName is currently unused.
- nodeName: 'nodeName',
- objectName: undefined,
- objectIndex: undefined,
- propertyName: 'property',
- propertyIndex: 'index'
- }
- ],
- [
- '.bone[Armature.DEF_cog].position',
- {
- nodeName: undefined,
- objectName: 'bone',
- objectIndex: 'Armature.DEF_cog',
- propertyName: 'position',
- propertyIndex: undefined
- }
- ],
- [
- 'scene:helium_balloon_model:helium_balloon_model.position',
- {
- nodeName: 'helium_balloon_model',
- objectName: undefined,
- objectIndex: undefined,
- propertyName: 'position',
- propertyIndex: undefined
- }
- ],
- [
- '急須.材料[零]',
- {
- nodeName: '急須',
- objectName: undefined,
- objectIndex: undefined,
- propertyName: '材料',
- propertyIndex: '零'
- }
- ],
- [
- '📦.🎨[🔴]',
- {
- nodeName: '📦',
- objectName: undefined,
- objectIndex: undefined,
- propertyName: '🎨',
- propertyIndex: '🔴'
- }
- ]
- ];
- paths.forEach( function ( path ) {
- assert.smartEqual(
- PropertyBinding.parseTrackName( path[ 0 ] ),
- path[ 1 ],
- 'Parses track name: ' + path[ 0 ]
- );
- } );
- } );
- // PUBLIC STUFF
- QUnit.test( 'setValue', ( assert ) => {
- const paths = [
- '.material.opacity',
- '.material[opacity]'
- ];
- paths.forEach( function ( path ) {
- const originalValue = 0;
- const expectedValue = 1;
- const geometry = new BoxGeometry();
- const material = new MeshBasicMaterial();
- material.opacity = originalValue;
- const mesh = new Mesh( geometry, material );
- const binding = new PropertyBinding( mesh, path, null );
- binding.bind();
- assert.equal(
- material.opacity,
- originalValue,
- 'Sets property of material with "' + path + '" (pre-setValue)'
- );
- binding.setValue( [ expectedValue ], 0 );
- assert.equal(
- material.opacity,
- expectedValue,
- 'Sets property of material with "' + path + '" (post-setValue)'
- );
- } );
- } );
- } );
- } );
|