PropertyBinding.tests.js 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377
  1. /**
  2. * @author TristanVALCKE / https://github.com/Itee
  3. * @author Anonymous
  4. */
  5. /* global QUnit */
  6. import { PropertyBinding } from '../../../../src/animation/PropertyBinding';
  7. import { BoxGeometry } from '../../../../src/geometries/BoxGeometry';
  8. import { Mesh } from '../../../../src/objects/Mesh';
  9. import { MeshBasicMaterial } from '../../../../src/materials/MeshBasicMaterial';
  10. export default QUnit.module( 'Animation', () => {
  11. QUnit.module( 'PropertyBinding', () => {
  12. // INSTANCING
  13. QUnit.todo( "Instancing", ( assert ) => {
  14. assert.ok( false, "everything's gonna be alright" );
  15. } );
  16. // STATIC STUFF
  17. QUnit.todo( "Composite", ( assert ) => {
  18. assert.ok( false, "everything's gonna be alright" );
  19. } );
  20. QUnit.todo( "create", ( assert ) => {
  21. assert.ok( false, "everything's gonna be alright" );
  22. } );
  23. QUnit.test( 'sanitizeNodeName', ( assert ) => {
  24. assert.equal(
  25. PropertyBinding.sanitizeNodeName( 'valid-name-123_' ),
  26. 'valid-name-123_',
  27. 'Leaves valid name intact.'
  28. );
  29. assert.equal(
  30. PropertyBinding.sanitizeNodeName( '急須' ),
  31. '急須',
  32. 'Leaves non-latin unicode characters intact.'
  33. );
  34. assert.equal(
  35. PropertyBinding.sanitizeNodeName( 'space separated name 123_ -' ),
  36. 'space_separated_name_123__-',
  37. 'Replaces spaces with underscores.'
  38. );
  39. assert.equal(
  40. PropertyBinding.sanitizeNodeName( '"Mátyás" %_* 😇' ),
  41. '"Mátyás"_%_*_😇',
  42. 'Allows various punctuation and symbols.'
  43. );
  44. assert.equal(
  45. PropertyBinding.sanitizeNodeName( '/invalid: name ^123.[_]' ),
  46. 'invalid_name_^123_',
  47. 'Strips reserved characters.'
  48. );
  49. } );
  50. QUnit.test( 'parseTrackName', ( assert ) => {
  51. var paths = [
  52. [
  53. '.property',
  54. {
  55. nodeName: undefined,
  56. objectName: undefined,
  57. objectIndex: undefined,
  58. propertyName: 'property',
  59. propertyIndex: undefined
  60. }
  61. ],
  62. [
  63. 'nodeName.property',
  64. {
  65. nodeName: 'nodeName',
  66. objectName: undefined,
  67. objectIndex: undefined,
  68. propertyName: 'property',
  69. propertyIndex: undefined
  70. }
  71. ],
  72. [
  73. 'a.property',
  74. {
  75. nodeName: 'a',
  76. objectName: undefined,
  77. objectIndex: undefined,
  78. propertyName: 'property',
  79. propertyIndex: undefined
  80. }
  81. ],
  82. [
  83. 'no.de.Name.property',
  84. {
  85. nodeName: 'no.de.Name',
  86. objectName: undefined,
  87. objectIndex: undefined,
  88. propertyName: 'property',
  89. propertyIndex: undefined
  90. }
  91. ],
  92. [
  93. 'no.d-e.Name.property',
  94. {
  95. nodeName: 'no.d-e.Name',
  96. objectName: undefined,
  97. objectIndex: undefined,
  98. propertyName: 'property',
  99. propertyIndex: undefined
  100. }
  101. ],
  102. [
  103. 'nodeName.property[accessor]',
  104. {
  105. nodeName: 'nodeName',
  106. objectName: undefined,
  107. objectIndex: undefined,
  108. propertyName: 'property',
  109. propertyIndex: 'accessor'
  110. }
  111. ],
  112. [
  113. 'nodeName.material.property[accessor]',
  114. {
  115. nodeName: 'nodeName',
  116. objectName: 'material',
  117. objectIndex: undefined,
  118. propertyName: 'property',
  119. propertyIndex: 'accessor'
  120. }
  121. ],
  122. [
  123. 'no.de.Name.material.property',
  124. {
  125. nodeName: 'no.de.Name',
  126. objectName: 'material',
  127. objectIndex: undefined,
  128. propertyName: 'property',
  129. propertyIndex: undefined
  130. }
  131. ],
  132. [
  133. 'no.de.Name.material[materialIndex].property',
  134. {
  135. nodeName: 'no.de.Name',
  136. objectName: 'material',
  137. objectIndex: 'materialIndex',
  138. propertyName: 'property',
  139. propertyIndex: undefined
  140. }
  141. ],
  142. [
  143. 'uuid.property[accessor]',
  144. {
  145. nodeName: 'uuid',
  146. objectName: undefined,
  147. objectIndex: undefined,
  148. propertyName: 'property',
  149. propertyIndex: 'accessor'
  150. }
  151. ],
  152. [
  153. 'uuid.objectName[objectIndex].propertyName[propertyIndex]',
  154. {
  155. nodeName: 'uuid',
  156. objectName: 'objectName',
  157. objectIndex: 'objectIndex',
  158. propertyName: 'propertyName',
  159. propertyIndex: 'propertyIndex'
  160. }
  161. ],
  162. [
  163. 'parentName/nodeName.property',
  164. {
  165. // directoryName is currently unused.
  166. nodeName: 'nodeName',
  167. objectName: undefined,
  168. objectIndex: undefined,
  169. propertyName: 'property',
  170. propertyIndex: undefined
  171. }
  172. ],
  173. [
  174. 'parentName/no.de.Name.property',
  175. {
  176. // directoryName is currently unused.
  177. nodeName: 'no.de.Name',
  178. objectName: undefined,
  179. objectIndex: undefined,
  180. propertyName: 'property',
  181. propertyIndex: undefined
  182. }
  183. ],
  184. [
  185. 'parentName/parentName/nodeName.property[index]',
  186. {
  187. // directoryName is currently unused.
  188. nodeName: 'nodeName',
  189. objectName: undefined,
  190. objectIndex: undefined,
  191. propertyName: 'property',
  192. propertyIndex: 'index'
  193. }
  194. ],
  195. [
  196. '.bone[Armature.DEF_cog].position',
  197. {
  198. nodeName: undefined,
  199. objectName: 'bone',
  200. objectIndex: 'Armature.DEF_cog',
  201. propertyName: 'position',
  202. propertyIndex: undefined
  203. }
  204. ],
  205. [
  206. 'scene:helium_balloon_model:helium_balloon_model.position',
  207. {
  208. nodeName: 'helium_balloon_model',
  209. objectName: undefined,
  210. objectIndex: undefined,
  211. propertyName: 'position',
  212. propertyIndex: undefined
  213. }
  214. ],
  215. [
  216. '急須.材料[零]',
  217. {
  218. nodeName: '急須',
  219. objectName: undefined,
  220. objectIndex: undefined,
  221. propertyName: '材料',
  222. propertyIndex: '零'
  223. }
  224. ],
  225. [
  226. '📦.🎨[🔴]',
  227. {
  228. nodeName: '📦',
  229. objectName: undefined,
  230. objectIndex: undefined,
  231. propertyName: '🎨',
  232. propertyIndex: '🔴'
  233. }
  234. ]
  235. ];
  236. paths.forEach( function ( path ) {
  237. assert.smartEqual(
  238. PropertyBinding.parseTrackName( path[ 0 ] ),
  239. path[ 1 ],
  240. 'Parses track name: ' + path[ 0 ]
  241. );
  242. } );
  243. } );
  244. QUnit.todo( "findNode", ( assert ) => {
  245. assert.ok( false, "everything's gonna be alright" );
  246. } );
  247. // PUBLIC STUFF
  248. QUnit.todo( "BindingType", ( assert ) => {
  249. assert.ok( false, "everything's gonna be alright" );
  250. } );
  251. QUnit.todo( "Versioning", ( assert ) => {
  252. assert.ok( false, "everything's gonna be alright" );
  253. } );
  254. QUnit.todo( "GetterByBindingType", ( assert ) => {
  255. assert.ok( false, "everything's gonna be alright" );
  256. } );
  257. QUnit.todo( "SetterByBindingTypeAndVersioning", ( assert ) => {
  258. assert.ok( false, "everything's gonna be alright" );
  259. } );
  260. QUnit.todo( "getValue", ( assert ) => {
  261. assert.ok( false, "everything's gonna be alright" );
  262. } );
  263. QUnit.test( 'setValue', ( assert ) => {
  264. var paths = [
  265. '.material.opacity',
  266. '.material[opacity]'
  267. ];
  268. paths.forEach( function ( path ) {
  269. var originalValue = 0;
  270. var expectedValue = 1;
  271. var geometry = new BoxGeometry();
  272. var material = new MeshBasicMaterial();
  273. material.opacity = originalValue;
  274. var mesh = new Mesh( geometry, material );
  275. var binding = new PropertyBinding( mesh, path, null );
  276. binding.bind();
  277. assert.equal(
  278. material.opacity,
  279. originalValue,
  280. 'Sets property of material with "' + path + '" (pre-setValue)'
  281. );
  282. binding.setValue( [ expectedValue ], 0 );
  283. assert.equal(
  284. material.opacity,
  285. expectedValue,
  286. 'Sets property of material with "' + path + '" (post-setValue)'
  287. );
  288. } );
  289. } );
  290. QUnit.todo( "bind", ( assert ) => {
  291. assert.ok( false, "everything's gonna be alright" );
  292. } );
  293. QUnit.todo( "unbind", ( assert ) => {
  294. assert.ok( false, "everything's gonna be alright" );
  295. } );
  296. } );
  297. } );
粤ICP备19079148号