소스 검색

Tests: Unit Tests for Objects (#25378)

* Update Bone.tests.js

Bone.isBone should be true.

* Update Group.tests.js

Group.type should be Group.
Group.isGroup should be true.

* Update Bone.tests.js

Bone.type should be Bone

* Create InstancedMesh.tests.js

Add unit tests for InstancedMesh

* Update Line.tests.js

Line.type should be Line.
Line.isLine should be true.
Add missing member test stubs.

* Update LineLoop.tests.js

LineLoop.type should be LineLoop
LineLoop.isLineLoop should be true
Add missing member test stubs.

* Update LineSegments.tests.js

LineSegments.type should be LineSegments
LineSegments.isLineSegments should be true
Add missing member test stubs.

* Update LOD.tests.js

LOD.type should be LOD
Add missing member test stubs.

* Update Mesh.tests.js

Mesh.type should be Mesh.
Mesh.isMesh should be true.
Add missing member test stubs.
Clone is defined by parent class and not redefined here.

* Update Points.tests.js

Points.type should be Points.
Points.isPoints should be true.
Add missing member test stubs.
Clone is defined by parent class and not redefined here.

* Update Skeleton.tests.js

Add missing member test stubs.

* Update SkinnedMesh.tests.js

SkinnedMesh.type should be SkinnedMesh.
SkinnedMesh.bindMode should be attached.
SkinnedMesh.isSkinnedMesh should be true.
Add missing member test stubs.
Clone is defined by a  parent class and not redefined here.

* Update Sprite.tests.js

Sprite.type should be Sprite.
Sprite.isSprite should be true.
Add missing member test stubs.
Clone is defined by parent class and not redefined here.

* Update three.source.unit.js

Add InstancedMesh to list of unit tests.
Ed Preston 2 년 전
부모
커밋
45ce26de7d

+ 18 - 3
test/unit/src/objects/Bone.tests.js

@@ -23,10 +23,25 @@ export default QUnit.module( 'Objects', () => {
 
 
 		} );
 		} );
 
 
-		// PUBLIC STUFF
-		QUnit.todo( 'isBone', ( assert ) => {
+		// PROPERTIES
+		QUnit.test( 'type', ( assert ) => {
 
 
-			assert.ok( false, 'everything\'s gonna be alright' );
+			const object = new Bone();
+			assert.ok(
+				object.type === 'Bone',
+				'Bone.type should be Bone'
+			);
+
+		} );
+
+		// PUBLIC
+		QUnit.test( 'isBone', ( assert ) => {
+
+			const object = new Bone();
+			assert.ok(
+				object.isBone,
+				'Bone.isBone should be true'
+			);
 
 
 		} );
 		} );
 
 

+ 22 - 0
test/unit/src/objects/Group.tests.js

@@ -23,6 +23,28 @@ export default QUnit.module( 'Objects', () => {
 
 
 		} );
 		} );
 
 
+		// PROPERTIES
+		QUnit.test( 'type', ( assert ) => {
+
+			const object = new Group();
+			assert.ok(
+				object.type === 'Group',
+				'Group.type should be Group'
+			);
+
+		} );
+
+		// PUBLIC
+		QUnit.test( 'isGroup', ( assert ) => {
+
+			const object = new Group();
+			assert.ok(
+				object.isGroup,
+				'Group.isGroup should be true'
+			);
+
+		} );
+
 	} );
 	} );
 
 
 } );
 } );

+ 115 - 0
test/unit/src/objects/InstancedMesh.tests.js

@@ -0,0 +1,115 @@
+/* global QUnit */
+
+import { InstancedMesh } from '../../../../src/objects/InstancedMesh.js';
+
+import { Mesh } from '../../../../src/objects/Mesh.js';
+
+export default QUnit.module( 'Objects', () => {
+
+	QUnit.module( 'InstancedMesh', () => {
+
+		// INHERITANCE
+		QUnit.test( 'Extending', ( assert ) => {
+
+			var object = new InstancedMesh();
+
+			assert.strictEqual( object instanceof Mesh, true, 'InstancedMesh extends from Mesh' );
+
+		} );
+
+		// INSTANCING
+		QUnit.todo( 'Instancing', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		// PROPERTIES
+		QUnit.todo( 'instanceMatrix', ( assert ) => {
+
+			// InstancedBufferAttribute
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'instanceColor', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'count', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'frustumCulled', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		// PUBLIC STUFF
+		QUnit.test( 'isInstancedMesh', ( assert ) => {
+
+			const object = new InstancedMesh();
+			assert.ok(
+				object.isInstancedMesh,
+				'InstancedMesh.isInstancedMesh should be true'
+			);
+
+		} );
+
+		QUnit.todo( 'copy', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'getColorAt', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'getMatrixAt', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'raycast', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'setColorAt', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'setMatrixAt', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'updateMorphTargets', ( assert ) => {
+
+			// signature defined, no implementation
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'dispose', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+	} );
+
+} );

+ 25 - 3
test/unit/src/objects/LOD.tests.js

@@ -18,6 +18,16 @@ export default QUnit.module( 'Objects', () => {
 		} );
 		} );
 
 
 		// PROPERTIES
 		// PROPERTIES
+		QUnit.test( 'type', ( assert ) => {
+
+			const object = new LOD();
+			assert.ok(
+				object.type === 'LOD',
+				'LOD.type should be LOD'
+			);
+
+		} );
+
 		QUnit.test( 'levels', ( assert ) => {
 		QUnit.test( 'levels', ( assert ) => {
 
 
 			var lod = new LOD();
 			var lod = new LOD();
@@ -30,20 +40,21 @@ export default QUnit.module( 'Objects', () => {
 
 
 		QUnit.test( 'autoUpdate', ( assert ) => {
 		QUnit.test( 'autoUpdate', ( assert ) => {
 
 
-			var lod = new LOD();
+			const lod = new LOD();
 
 
 			assert.strictEqual( lod.autoUpdate, true, 'LOD.autoUpdate is of type boolean and true by default.' );
 			assert.strictEqual( lod.autoUpdate, true, 'LOD.autoUpdate is of type boolean and true by default.' );
 
 
 		} );
 		} );
 
 
-		// PUBLIC STUFF
+		// PUBLIC
 		QUnit.test( 'isLOD', ( assert ) => {
 		QUnit.test( 'isLOD', ( assert ) => {
 
 
-			var lod = new LOD();
+			const lod = new LOD();
 
 
 			assert.strictEqual( lod.isLOD, true, '.isLOD property is defined.' );
 			assert.strictEqual( lod.isLOD, true, '.isLOD property is defined.' );
 
 
 		} );
 		} );
+
 		QUnit.test( 'copy', ( assert ) => {
 		QUnit.test( 'copy', ( assert ) => {
 
 
 			var lod1 = new LOD();
 			var lod1 = new LOD();
@@ -65,6 +76,7 @@ export default QUnit.module( 'Objects', () => {
 			assert.strictEqual( lod2.levels.length, 3, 'LOD.levels has the correct length after the copy.' );
 			assert.strictEqual( lod2.levels.length, 3, 'LOD.levels has the correct length after the copy.' );
 
 
 		} );
 		} );
+
 		QUnit.test( 'addLevel', ( assert ) => {
 		QUnit.test( 'addLevel', ( assert ) => {
 
 
 			var lod = new LOD();
 			var lod = new LOD();
@@ -83,6 +95,13 @@ export default QUnit.module( 'Objects', () => {
 			assert.deepEqual( lod.levels[ 2 ], { distance: 50, object: low, hysteresis: 0.10 }, 'Third entry correct.' );
 			assert.deepEqual( lod.levels[ 2 ], { distance: 50, object: low, hysteresis: 0.10 }, 'Third entry correct.' );
 
 
 		} );
 		} );
+
+		QUnit.todo( 'getCurrentLevel', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
 		QUnit.test( 'getObjectForDistance', ( assert ) => {
 		QUnit.test( 'getObjectForDistance', ( assert ) => {
 
 
 			var lod = new LOD();
 			var lod = new LOD();
@@ -108,6 +127,7 @@ export default QUnit.module( 'Objects', () => {
 			assert.strictEqual( lod.getObjectForDistance( 60 ), low, 'Returns the low resolution object.' );
 			assert.strictEqual( lod.getObjectForDistance( 60 ), low, 'Returns the low resolution object.' );
 
 
 		} );
 		} );
+
 		QUnit.test( 'raycast', ( assert ) => {
 		QUnit.test( 'raycast', ( assert ) => {
 
 
 			var lod = new LOD();
 			var lod = new LOD();
@@ -119,11 +139,13 @@ export default QUnit.module( 'Objects', () => {
 			assert.strictEqual( intersections.length, 0, 'Does not fail if raycasting is used with a LOD object without levels.' );
 			assert.strictEqual( intersections.length, 0, 'Does not fail if raycasting is used with a LOD object without levels.' );
 
 
 		} );
 		} );
+
 		QUnit.todo( 'update', ( assert ) => {
 		QUnit.todo( 'update', ( assert ) => {
 
 
 			assert.ok( false, 'everything\'s gonna be alright' );
 			assert.ok( false, 'everything\'s gonna be alright' );
 
 
 		} );
 		} );
+
 		QUnit.todo( 'toJSON', ( assert ) => {
 		QUnit.todo( 'toJSON', ( assert ) => {
 
 
 			assert.ok( false, 'everything\'s gonna be alright' );
 			assert.ok( false, 'everything\'s gonna be alright' );

+ 48 - 3
test/unit/src/objects/Line.tests.js

@@ -23,8 +23,47 @@ export default QUnit.module( 'Objects', () => {
 
 
 		} );
 		} );
 
 
-		// PUBLIC STUFF
-		QUnit.todo( 'isLine', ( assert ) => {
+		// PROPERTIES
+		QUnit.test( 'type', ( assert ) => {
+
+			const object = new Line();
+			assert.ok(
+				object.type === 'Line',
+				'Line.type should be Line'
+			);
+
+		} );
+
+		QUnit.todo( 'geometry', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'material', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		// PUBLIC
+		QUnit.test( 'isLine', ( assert ) => {
+
+			const object = new Line();
+			assert.ok(
+				object.isLine,
+				'Line.isLine should be true'
+			);
+
+		} );
+
+		QUnit.todo( 'copy', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'computeLineDistances', ( assert ) => {
 
 
 			assert.ok( false, 'everything\'s gonna be alright' );
 			assert.ok( false, 'everything\'s gonna be alright' );
 
 
@@ -36,12 +75,18 @@ export default QUnit.module( 'Objects', () => {
 
 
 		} );
 		} );
 
 
-		QUnit.todo( 'clone', ( assert ) => {
+		QUnit.todo( 'updateMorphTargets', ( assert ) => {
 
 
 			assert.ok( false, 'everything\'s gonna be alright' );
 			assert.ok( false, 'everything\'s gonna be alright' );
 
 
 		} );
 		} );
 
 
+		QUnit.todo( 'clone', ( assert ) => {
+
+			// inherited from Object3D, test instance specific behaviour.
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
 
 
 	} );
 	} );
 
 

+ 17 - 3
test/unit/src/objects/LineLoop.tests.js

@@ -25,13 +25,27 @@ export default QUnit.module( 'Objects', () => {
 
 
 		} );
 		} );
 
 
-		// PUBLIC STUFF
-		QUnit.todo( 'isLineLoop', ( assert ) => {
+		// PROPERTIES
+		QUnit.test( 'type', ( assert ) => {
 
 
-			assert.ok( false, 'everything\'s gonna be alright' );
+			const object = new LineLoop();
+			assert.ok(
+				object.type === 'LineLoop',
+				'LineLoop.type should be LineLoop'
+			);
 
 
 		} );
 		} );
 
 
+		// PUBLIC
+		QUnit.test( 'isLineLoop', ( assert ) => {
+
+			const object = new LineLoop();
+			assert.ok(
+				object.isLineLoop,
+				'LineLoop.isLineLoop should be true'
+			);
+
+		} );
 
 
 	} );
 	} );
 
 

+ 23 - 3
test/unit/src/objects/LineSegments.tests.js

@@ -25,13 +25,33 @@ export default QUnit.module( 'Objects', () => {
 
 
 		} );
 		} );
 
 
-		// PUBLIC STUFF
-		QUnit.todo( 'isLineSegments', ( assert ) => {
+		// PROPERTIES
+		QUnit.test( 'type', ( assert ) => {
 
 
-			assert.ok( false, 'everything\'s gonna be alright' );
+			const object = new LineSegments();
+			assert.ok(
+				object.type === 'LineSegments',
+				'LineSegments.type should be LineSegments'
+			);
+
+		} );
+
+		// PUBLIC
+		QUnit.test( 'isLineSegments', ( assert ) => {
+
+			const object = new LineSegments();
+			assert.ok(
+				object.isLineSegments,
+				'LineSegments.isLineSegments should be true'
+			);
 
 
 		} );
 		} );
 
 
+		QUnit.todo( 'computeLineDistances', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
 
 
 	} );
 	} );
 
 

+ 38 - 8
test/unit/src/objects/Mesh.tests.js

@@ -28,22 +28,58 @@ export default QUnit.module( 'Objects', () => {
 
 
 		} );
 		} );
 
 
-		// PUBLIC STUFF
-		QUnit.todo( 'isMesh', ( assert ) => {
+		// PROPERTIES
+		QUnit.test( 'type', ( assert ) => {
+
+			const object = new Mesh();
+			assert.ok(
+				object.type === 'Mesh',
+				'Mesh.type should be Mesh'
+			);
+
+		} );
+
+		QUnit.todo( 'geometry', ( assert ) => {
 
 
 			assert.ok( false, 'everything\'s gonna be alright' );
 			assert.ok( false, 'everything\'s gonna be alright' );
 
 
 		} );
 		} );
+
+		QUnit.todo( 'material', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		// PUBLIC
+		QUnit.test( 'isMesh', ( assert ) => {
+
+			const object = new Mesh();
+			assert.ok(
+				object.isMesh,
+				'Mesh.isMesh should be true'
+			);
+
+		} );
+
 		QUnit.todo( 'copy', ( assert ) => {
 		QUnit.todo( 'copy', ( assert ) => {
 
 
 			assert.ok( false, 'everything\'s gonna be alright' );
 			assert.ok( false, 'everything\'s gonna be alright' );
 
 
 		} );
 		} );
+
 		QUnit.todo( 'updateMorphTargets', ( assert ) => {
 		QUnit.todo( 'updateMorphTargets', ( assert ) => {
 
 
 			assert.ok( false, 'everything\'s gonna be alright' );
 			assert.ok( false, 'everything\'s gonna be alright' );
 
 
 		} );
 		} );
+
+		QUnit.todo( 'getVertexPosition', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
 		QUnit.todo( 'raycast', ( assert ) => {
 		QUnit.todo( 'raycast', ( assert ) => {
 
 
 			const geometry = new PlaneGeometry();
 			const geometry = new PlaneGeometry();
@@ -69,12 +105,6 @@ export default QUnit.module( 'Objects', () => {
 			assert.deepEqual( intersection.uv, new Vector2( 0.75, 0.75 ), 'intersction uv' );
 			assert.deepEqual( intersection.uv, new Vector2( 0.75, 0.75 ), 'intersction uv' );
 
 
 		} );
 		} );
-		QUnit.todo( 'clone', ( assert ) => {
-
-			assert.ok( false, 'everything\'s gonna be alright' );
-
-		} );
-
 
 
 	} );
 	} );
 
 

+ 48 - 3
test/unit/src/objects/Points.tests.js

@@ -8,7 +8,7 @@ export default QUnit.module( 'Objects', () => {
 	QUnit.module( 'Points', () => {
 	QUnit.module( 'Points', () => {
 
 
 		// INHERITANCE
 		// INHERITANCE
-		QUnit.test( 'isPoints', ( assert ) => {
+		QUnit.test( 'Extending', ( assert ) => {
 
 
 			var points = new Points();
 			var points = new Points();
 
 
@@ -17,14 +17,59 @@ export default QUnit.module( 'Objects', () => {
 		} );
 		} );
 
 
 		// INSTANCING
 		// INSTANCING
+		QUnit.todo( 'Instancing', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		// PROPERTIES
+		QUnit.test( 'type', ( assert ) => {
+
+			const object = new Points();
+			assert.ok(
+				object.type === 'Points',
+				'Points.type should be Points'
+			);
+
+		} );
+
+		QUnit.todo( 'geometry', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'material', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		// PUBLIC
+		QUnit.test( 'isPoints', ( assert ) => {
+
+			const object = new Points();
+			assert.ok(
+				object.isPoints,
+				'Points.isPoints should be true'
+			);
+
+		} );
+
+		QUnit.todo( 'copy', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
 		QUnit.todo( 'raycast', ( assert ) => {
 		QUnit.todo( 'raycast', ( assert ) => {
 
 
 			assert.ok( false, 'everything\'s gonna be alright' );
 			assert.ok( false, 'everything\'s gonna be alright' );
 
 
 		} );
 		} );
 
 
-		// PUBLIC STUFF
-		QUnit.todo( 'clone', ( assert ) => {
+		QUnit.todo( 'updateMorphTargets', ( assert ) => {
 
 
 			assert.ok( false, 'everything\'s gonna be alright' );
 			assert.ok( false, 'everything\'s gonna be alright' );
 
 

+ 80 - 1
test/unit/src/objects/Skeleton.tests.js

@@ -13,7 +13,56 @@ export default QUnit.module( 'Objects', () => {
 
 
 		} );
 		} );
 
 
-		// PUBLIC STUFF
+		// PROPERTIES
+		QUnit.todo( 'uuid', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'bones', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'boneInverses', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'boneMatrices', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'boneTexture', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'boneTextureSize', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'frame', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		// PUBLIC
+		QUnit.todo( 'init', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
 		QUnit.todo( 'calculateInverses', ( assert ) => {
 		QUnit.todo( 'calculateInverses', ( assert ) => {
 
 
 			assert.ok( false, 'everything\'s gonna be alright' );
 			assert.ok( false, 'everything\'s gonna be alright' );
@@ -38,6 +87,36 @@ export default QUnit.module( 'Objects', () => {
 
 
 		} );
 		} );
 
 
+		QUnit.todo( 'computeBoneTexture', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'getBoneByName', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'dispose', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'fromJSON', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'toJSON', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
 	} );
 	} );
 
 
 } );
 } );

+ 47 - 4
test/unit/src/objects/SkinnedMesh.tests.js

@@ -25,38 +25,81 @@ export default QUnit.module( 'Objects', () => {
 
 
 		} );
 		} );
 
 
-		// PUBLIC STUFF
-		QUnit.todo( 'isSkinnedMesh', ( assert ) => {
+		// PROPERTIES
+		QUnit.test( 'type', ( assert ) => {
+
+			const object = new SkinnedMesh();
+			assert.ok(
+				object.type === 'SkinnedMesh',
+				'SkinnedMesh.type should be SkinnedMesh'
+			);
+
+		} );
+
+		QUnit.test( 'bindMode', ( assert ) => {
+
+			const object = new SkinnedMesh();
+			assert.ok(
+				object.bindMode === 'attached',
+				'SkinnedMesh.bindMode should be attached'
+			);
+
+		} );
+
+		QUnit.todo( 'bindMatrix', ( assert ) => {
 
 
 			assert.ok( false, 'everything\'s gonna be alright' );
 			assert.ok( false, 'everything\'s gonna be alright' );
 
 
 		} );
 		} );
-		QUnit.todo( 'initBones', ( assert ) => {
+
+		QUnit.todo( 'bindMatrixInverse', ( assert ) => {
 
 
 			assert.ok( false, 'everything\'s gonna be alright' );
 			assert.ok( false, 'everything\'s gonna be alright' );
 
 
 		} );
 		} );
+
+		// PUBLIC
+		QUnit.test( 'isSkinnedMesh', ( assert ) => {
+
+			const object = new SkinnedMesh();
+			assert.ok(
+				object.isSkinnedMesh,
+				'SkinnedMesh.isSkinnedMesh should be true'
+			);
+
+		} );
+
+		QUnit.todo( 'copy', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
 		QUnit.todo( 'bind', ( assert ) => {
 		QUnit.todo( 'bind', ( assert ) => {
 
 
 			assert.ok( false, 'everything\'s gonna be alright' );
 			assert.ok( false, 'everything\'s gonna be alright' );
 
 
 		} );
 		} );
+
 		QUnit.todo( 'pose', ( assert ) => {
 		QUnit.todo( 'pose', ( assert ) => {
 
 
 			assert.ok( false, 'everything\'s gonna be alright' );
 			assert.ok( false, 'everything\'s gonna be alright' );
 
 
 		} );
 		} );
+
 		QUnit.todo( 'normalizeSkinWeights', ( assert ) => {
 		QUnit.todo( 'normalizeSkinWeights', ( assert ) => {
 
 
 			assert.ok( false, 'everything\'s gonna be alright' );
 			assert.ok( false, 'everything\'s gonna be alright' );
 
 
 		} );
 		} );
+
 		QUnit.todo( 'updateMatrixWorld', ( assert ) => {
 		QUnit.todo( 'updateMatrixWorld', ( assert ) => {
 
 
 			assert.ok( false, 'everything\'s gonna be alright' );
 			assert.ok( false, 'everything\'s gonna be alright' );
 
 
 		} );
 		} );
-		QUnit.todo( 'clone', ( assert ) => {
+
+		QUnit.todo( 'boneTransform', ( assert ) => {
 
 
 			assert.ok( false, 'everything\'s gonna be alright' );
 			assert.ok( false, 'everything\'s gonna be alright' );
 
 

+ 36 - 3
test/unit/src/objects/Sprite.tests.js

@@ -23,20 +23,53 @@ export default QUnit.module( 'Objects', () => {
 
 
 		} );
 		} );
 
 
-		// PUBLIC STUFF
-		QUnit.todo( 'isSprite', ( assert ) => {
+		// PROPERTIES
+		QUnit.test( 'type', ( assert ) => {
+
+			const object = new Sprite();
+			assert.ok(
+				object.type === 'Sprite',
+				'Sprite.type should be Sprite'
+			);
+
+		} );
+
+		QUnit.todo( 'geometry', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'material', ( assert ) => {
 
 
 			assert.ok( false, 'everything\'s gonna be alright' );
 			assert.ok( false, 'everything\'s gonna be alright' );
 
 
 		} );
 		} );
 
 
+		QUnit.todo( 'center', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		// PUBLIC
+		QUnit.test( 'isSprite', ( assert ) => {
+
+			const object = new Sprite();
+			assert.ok(
+				object.isSprite,
+				'Sprite.isSprite should be true'
+			);
+
+		} );
+
 		QUnit.todo( 'raycast', ( assert ) => {
 		QUnit.todo( 'raycast', ( assert ) => {
 
 
 			assert.ok( false, 'everything\'s gonna be alright' );
 			assert.ok( false, 'everything\'s gonna be alright' );
 
 
 		} );
 		} );
 
 
-		QUnit.todo( 'clone', ( assert ) => {
+		QUnit.todo( 'copy', ( assert ) => {
 
 
 			assert.ok( false, 'everything\'s gonna be alright' );
 			assert.ok( false, 'everything\'s gonna be alright' );
 
 

+ 1 - 0
test/unit/three.source.unit.js

@@ -205,6 +205,7 @@ import './src/math/interpolants/QuaternionLinearInterpolant.tests.js';
 //src/objects
 //src/objects
 import './src/objects/Bone.tests.js';
 import './src/objects/Bone.tests.js';
 import './src/objects/Group.tests.js';
 import './src/objects/Group.tests.js';
+import './src/objects/InstancedMesh.tests.js';
 import './src/objects/Line.tests.js';
 import './src/objects/Line.tests.js';
 import './src/objects/LineLoop.tests.js';
 import './src/objects/LineLoop.tests.js';
 import './src/objects/LineSegments.tests.js';
 import './src/objects/LineSegments.tests.js';