Browse Source

AnimationClip: Add optimize and validate unit tests.

Don McCurdy 7 years ago
parent
commit
65deb93087
2 changed files with 38 additions and 4 deletions
  1. 6 2
      src/animation/AnimationClip.js
  2. 32 2
      test/unit/src/animation/AnimationClip.tests.js

+ 6 - 2
src/animation/AnimationClip.js

@@ -344,7 +344,7 @@ Object.assign( AnimationClip.prototype, {
 
 	validate: function () {
 
-		if (this.isValidated) return this;
+		if ( this.isValidated ) return this;
 
 		for ( var i = 0; i < this.tracks.length; i ++ ) {
 
@@ -352,13 +352,15 @@ Object.assign( AnimationClip.prototype, {
 
 		}
 
+		this.isValidated = true;
+
 		return this;
 
 	},
 
 	optimize: function () {
 
-		if (this.isOptimized) return this;
+		if ( this.isOptimized ) return this;
 
 		for ( var i = 0; i < this.tracks.length; i ++ ) {
 
@@ -366,6 +368,8 @@ Object.assign( AnimationClip.prototype, {
 
 		}
 
+		this.isOptimized = true;
+
 		return this;
 
 	}

+ 32 - 2
test/unit/src/animation/AnimationClip.tests.js

@@ -4,6 +4,7 @@
 /* global QUnit */
 
 import { AnimationClip } from '../../../../src/animation/AnimationClip';
+import { NumberKeyframeTrack } from '../../../../src/animation/tracks/NumberKeyframeTrack';
 
 export default QUnit.module( 'Animation', () => {
 
@@ -66,9 +67,38 @@ export default QUnit.module( 'Animation', () => {
 
 		} );
 
-		QUnit.todo( "optimize", ( assert ) => {
+		QUnit.test( 'optimize', ( assert ) => {
 
-			assert.ok( false, "everything's gonna be alright" );
+			var track = new NumberKeyframeTrack( '.material.opacity', [ 0, 1, 2, 3, 4 ], [ 0, 0, 0, 0, 1 ] );
+			var clip = new AnimationClip( 'fadeIn', 4, [ track ] );
+
+			assert.equal( clip.tracks[0].values.length, 5 );
+
+			clip.isOptimized = true;
+			clip.optimize();
+
+			assert.equal( clip.tracks[0].values.length, 5 );
+
+			clip.isOptimized = false;
+			clip.optimize();
+
+			assert.equal( clip.tracks[0].values.length, 3 );
+
+		} );
+
+		QUnit.test( 'validate', ( assert ) => {
+
+			var track = new NumberKeyframeTrack( '.material.opacity', [ 0, 1 ], [ 0, NaN ] );
+			var clip = new AnimationClip( 'fadeIn', 1, [ track ] );
+
+			track.validate = () => { throw new Error('Validation should not be called.') };
+			clip.isValidated = true;
+			clip.validate();
+
+			delete track.validate;
+			clip.isValidated = false;
+			clip.validate();
+			assert.ok( clip.isValidated );
 
 		} );