2
0
Эх сурвалжийг харах

Tests: Unit Tests for Loaders (#25391)

* Add ImageBitmapLoader unit tests.

Add ImageBitmapLoader unit tests.

* Update Loader.tests.js

Loader defines a default manager if not supplied in constructor.
Loader defines crossOrigin.
Loader defines withCredentials.
Loader defines path.
Loader defines resourcePath.
Loader defines requestHeader.
Stub missing member tests.

* Update AnimationLoader.tests.js

AnimationLoader extends from Loader.

* Update AudioLoader.tests.js

AudioLoader extends from Loader.

* Update BufferGeometryLoader.tests.js

BufferGeometryLoader extends from Loader.

* Update Cache.tests.js

Cache defines enabled.
Cache defines files.

* Update CompressedTextureLoader.tests.js

CompressedTextureLoader extends from Loader.
Remove test for base class method which is not redfined in this class.

* Update CubeTextureLoader.tests.js

CubeTextureLoader extends from Loader.
Remove test for base class method which is not redfined in this class.

* Update DataTextureLoader.tests.js

DataTextureLoader extends from Loader.

* Update FileLoader.tests.js

FileLoader extends from Loader.
Remove tests for base class methods which are not redfined in this class.

* Update ImageLoader.tests.js

ImageLoader extends from Loader.
Remove tests for base class methods which are not redfined in this class.

* Update LoaderUtils.tests.js

Stub missing member test.

* Update LoadingManager.tests.js

Stub missing member tests.

* Update MaterialLoader.tests.js

MaterialLoader extends from Loader.
MaterialLoader defines textures.
Stub missing member test.

* Update ObjectLoader.tests.js

ObjectLoader extends from Loader.
Stub missing member tests.
Remove tests for base class methods which are not redfined in this class.

* Update TextureLoader.tests.js

TextureLoader extends from Loader.
Remove tests for base class methods which are not redfined in this class.
Ed Preston 2 жил өмнө
parent
commit
34640a519a

+ 16 - 2
test/unit/src/loaders/AnimationLoader.tests.js

@@ -1,11 +1,24 @@
 /* global QUnit */
 
-// import { AnimationLoader } from '../../../../src/loaders/AnimationLoader.js';
+import { AnimationLoader } from '../../../../src/loaders/AnimationLoader.js';
+
+import { Loader } from '../../../../src/loaders/Loader.js';
 
 export default QUnit.module( 'Loaders', () => {
 
 	QUnit.module( 'AnimationLoader', () => {
 
+		// INHERITANCE
+		QUnit.test( 'Extending', ( assert ) => {
+
+			const object = new AnimationLoader();
+			assert.strictEqual(
+				object instanceof Loader, true,
+				'AnimationLoader extends from Loader'
+			);
+
+		} );
+
 		// INSTANCING
 		QUnit.todo( 'Instancing', ( assert ) => {
 
@@ -13,7 +26,7 @@ export default QUnit.module( 'Loaders', () => {
 
 		} );
 
-		// PUBLIC STUFF
+		// PUBLIC
 		QUnit.todo( 'load', ( assert ) => {
 
 			assert.ok( false, 'everything\'s gonna be alright' );
@@ -22,6 +35,7 @@ export default QUnit.module( 'Loaders', () => {
 
 		QUnit.todo( 'parse', ( assert ) => {
 
+			// parse( json )
 			assert.ok( false, 'everything\'s gonna be alright' );
 
 		} );

+ 15 - 2
test/unit/src/loaders/AudioLoader.tests.js

@@ -1,11 +1,24 @@
 /* global QUnit */
 
-// import { AudioLoader } from '../../../../src/loaders/AudioLoader.js';
+import { AudioLoader } from '../../../../src/loaders/AudioLoader.js';
+
+import { Loader } from '../../../../src/loaders/Loader.js';
 
 export default QUnit.module( 'Loaders', () => {
 
 	QUnit.module( 'AudioLoader', () => {
 
+		// INHERITANCE
+		QUnit.test( 'Extending', ( assert ) => {
+
+			const object = new AudioLoader();
+			assert.strictEqual(
+				object instanceof Loader, true,
+				'AudioLoader extends from Loader'
+			);
+
+		} );
+
 		// INSTANCING
 		QUnit.todo( 'Instancing', ( assert ) => {
 
@@ -13,7 +26,7 @@ export default QUnit.module( 'Loaders', () => {
 
 		} );
 
-		// PUBLIC STUFF
+		// PUBLIC
 		QUnit.todo( 'load', ( assert ) => {
 
 			assert.ok( false, 'everything\'s gonna be alright' );

+ 16 - 2
test/unit/src/loaders/BufferGeometryLoader.tests.js

@@ -1,14 +1,27 @@
 /* global QUnit */
 
+import { BufferGeometryLoader } from '../../../../src/loaders/BufferGeometryLoader.js';
+
 import { BufferAttribute } from '../../../../src/core/BufferAttribute.js';
 import { BufferGeometry } from '../../../../src/core/BufferGeometry.js';
-import { BufferGeometryLoader } from '../../../../src/loaders/BufferGeometryLoader.js';
 import { DynamicDrawUsage } from '../../../../src/constants.js';
+import { Loader } from '../../../../src/loaders/Loader.js';
 
 export default QUnit.module( 'Loaders', () => {
 
 	QUnit.module( 'BufferGeometryLoader', () => {
 
+		// INHERITANCE
+		QUnit.test( 'Extending', ( assert ) => {
+
+			const object = new BufferGeometryLoader();
+			assert.strictEqual(
+				object instanceof Loader, true,
+				'BufferGeometryLoader extends from Loader'
+			);
+
+		} );
+
 		// INSTANCING
 		QUnit.todo( 'Instancing', ( assert ) => {
 
@@ -16,7 +29,7 @@ export default QUnit.module( 'Loaders', () => {
 
 		} );
 
-		// PUBLIC STUFF
+		// PUBLIC
 		QUnit.todo( 'load', ( assert ) => {
 
 			assert.ok( false, 'everything\'s gonna be alright' );
@@ -29,6 +42,7 @@ export default QUnit.module( 'Loaders', () => {
 
 		} );
 
+		// OTHERS
 		QUnit.test( 'parser - attributes - circlable', ( assert ) => {
 
 			const loader = new BufferGeometryLoader();

+ 22 - 2
test/unit/src/loaders/Cache.tests.js

@@ -1,26 +1,46 @@
 /* global QUnit */
 
-// import { Cache } from '../../../../src/loaders/Cache.js';
+import { Cache } from '../../../../src/loaders/Cache.js';
 
 export default QUnit.module( 'Loaders', () => {
 
 	QUnit.module( 'Cache', () => {
 
-		// PUBLIC STUFF
+		// PROPERTIES
+		QUnit.test( 'enabled', ( assert ) => {
+
+			const actual = Cache.enabled;
+			const expected = false;
+			assert.strictEqual( actual, expected, 'Cache defines enabled.' );
+
+		} );
+
+		QUnit.test( 'files', ( assert ) => {
+
+			const actual = Cache.files;
+			const expected = {};
+			assert.deepEqual( actual, expected, 'Cache defines files.' );
+
+		} );
+
+		// PUBLIC
 		QUnit.todo( 'add', ( assert ) => {
 
+			// function ( key, file )
 			assert.ok( false, 'everything\'s gonna be alright' );
 
 		} );
 
 		QUnit.todo( 'get', ( assert ) => {
 
+			// function ( key )
 			assert.ok( false, 'everything\'s gonna be alright' );
 
 		} );
 
 		QUnit.todo( 'remove', ( assert ) => {
 
+			// function ( key )
 			assert.ok( false, 'everything\'s gonna be alright' );
 
 		} );

+ 14 - 7
test/unit/src/loaders/CompressedTextureLoader.tests.js

@@ -1,26 +1,33 @@
 /* global QUnit */
 
-// import { CompressedTextureLoader } from '../../../../src/loaders/CompressedTextureLoader.js';
+import { CompressedTextureLoader } from '../../../../src/loaders/CompressedTextureLoader.js';
+
+import { Loader } from '../../../../src/loaders/Loader.js';
 
 export default QUnit.module( 'Loaders', () => {
 
 	QUnit.module( 'CompressedTextureLoader', () => {
 
-		// INSTANCING
-		QUnit.todo( 'Instancing', ( assert ) => {
+		// INHERITANCE
+		QUnit.test( 'Extending', ( assert ) => {
 
-			assert.ok( false, 'everything\'s gonna be alright' );
+			const object = new CompressedTextureLoader();
+			assert.strictEqual(
+				object instanceof Loader, true,
+				'CompressedTextureLoader extends from Loader'
+			);
 
 		} );
 
-		// PUBLIC STUFF
-		QUnit.todo( 'load', ( assert ) => {
+		// INSTANCING
+		QUnit.todo( 'Instancing', ( assert ) => {
 
 			assert.ok( false, 'everything\'s gonna be alright' );
 
 		} );
 
-		QUnit.todo( 'setPath', ( assert ) => {
+		// PUBLIC
+		QUnit.todo( 'load', ( assert ) => {
 
 			assert.ok( false, 'everything\'s gonna be alright' );
 

+ 14 - 13
test/unit/src/loaders/CubeTextureLoader.tests.js

@@ -1,32 +1,33 @@
 /* global QUnit */
 
-// import { CubeTextureLoader } from '../../../../src/loaders/CubeTextureLoader.js';
+import { CubeTextureLoader } from '../../../../src/loaders/CubeTextureLoader.js';
+
+import { Loader } from '../../../../src/loaders/Loader.js';
 
 export default QUnit.module( 'Loaders', () => {
 
 	QUnit.module( 'CubeTextureLoader', () => {
 
-		// INSTANCING
-		QUnit.todo( 'Instancing', ( assert ) => {
+		// INHERITANCE
+		QUnit.test( 'Extending', ( assert ) => {
 
-			assert.ok( false, 'everything\'s gonna be alright' );
+			const object = new CubeTextureLoader();
+			assert.strictEqual(
+				object instanceof Loader, true,
+				'CubeTextureLoader extends from Loader'
+			);
 
 		} );
 
-		// PUBLIC STUFF
-		QUnit.todo( 'load', ( assert ) => {
-
-			assert.ok( false, 'everything\'s gonna be alright' );
-
-		} );
-
-		QUnit.todo( 'setCrossOrigin', ( assert ) => {
+		// INSTANCING
+		QUnit.todo( 'Instancing', ( assert ) => {
 
 			assert.ok( false, 'everything\'s gonna be alright' );
 
 		} );
 
-		QUnit.todo( 'setPath', ( assert ) => {
+		// PUBLIC
+		QUnit.todo( 'load', ( assert ) => {
 
 			assert.ok( false, 'everything\'s gonna be alright' );
 

+ 15 - 2
test/unit/src/loaders/DataTextureLoader.tests.js

@@ -1,11 +1,24 @@
 /* global QUnit */
 
-// import { DataTextureLoader } from '../../../../src/loaders/DataTextureLoader.js';
+import { DataTextureLoader } from '../../../../src/loaders/DataTextureLoader.js';
+
+import { Loader } from '../../../../src/loaders/Loader.js';
 
 export default QUnit.module( 'Loaders', () => {
 
 	QUnit.module( 'DataTextureLoader', () => {
 
+		// INHERITANCE
+		QUnit.test( 'Extending', ( assert ) => {
+
+			const object = new DataTextureLoader();
+			assert.strictEqual(
+				object instanceof Loader, true,
+				'DataTextureLoader extends from Loader'
+			);
+
+		} );
+
 		// INSTANCING
 		QUnit.todo( 'Instancing', ( assert ) => {
 
@@ -13,7 +26,7 @@ export default QUnit.module( 'Loaders', () => {
 
 		} );
 
-		// PUBLIC STUFF
+		// PUBLIC
 		QUnit.todo( 'load', ( assert ) => {
 
 			assert.ok( false, 'everything\'s gonna be alright' );

+ 14 - 19
test/unit/src/loaders/FileLoader.tests.js

@@ -1,26 +1,33 @@
 /* global QUnit */
 
-// import { FileLoader } from '../../../../src/loaders/FileLoader.js';
+import { FileLoader } from '../../../../src/loaders/FileLoader.js';
+
+import { Loader } from '../../../../src/loaders/Loader.js';
 
 export default QUnit.module( 'Loaders', () => {
 
 	QUnit.module( 'FileLoader', () => {
 
-		// INSTANCING
-		QUnit.todo( 'Instancing', ( assert ) => {
+		// INHERITANCE
+		QUnit.test( 'Extending', ( assert ) => {
 
-			assert.ok( false, 'everything\'s gonna be alright' );
+			const object = new FileLoader();
+			assert.strictEqual(
+				object instanceof Loader, true,
+				'FileLoader extends from Loader'
+			);
 
 		} );
 
-		// PUBLIC STUFF
-		QUnit.todo( 'load', ( assert ) => {
+		// INSTANCING
+		QUnit.todo( 'Instancing', ( assert ) => {
 
 			assert.ok( false, 'everything\'s gonna be alright' );
 
 		} );
 
-		QUnit.todo( 'setPath', ( assert ) => {
+		// PUBLIC
+		QUnit.todo( 'load', ( assert ) => {
 
 			assert.ok( false, 'everything\'s gonna be alright' );
 
@@ -32,24 +39,12 @@ export default QUnit.module( 'Loaders', () => {
 
 		} );
 
-		QUnit.todo( 'setWithCredentials', ( assert ) => {
-
-			assert.ok( false, 'everything\'s gonna be alright' );
-
-		} );
-
 		QUnit.todo( 'setMimeType', ( assert ) => {
 
 			assert.ok( false, 'everything\'s gonna be alright' );
 
 		} );
 
-		QUnit.todo( 'setRequestHeader', ( assert ) => {
-
-			assert.ok( false, 'everything\'s gonna be alright' );
-
-		} );
-
 	} );
 
 } );

+ 65 - 0
test/unit/src/loaders/ImageBitmapLoader.tests.js

@@ -0,0 +1,65 @@
+/* global QUnit */
+
+import { ImageBitmapLoader } from '../../../../src/loaders/ImageBitmapLoader.js';
+
+import { Loader } from '../../../../src/loaders/Loader.js';
+
+export default QUnit.module( 'Loaders', () => {
+
+	QUnit.module( 'ImageBitmapLoader', () => {
+
+		// INHERITANCE
+		QUnit.test( 'Extending', ( assert ) => {
+
+			const object = new ImageBitmapLoader();
+			assert.strictEqual(
+				object instanceof Loader, true,
+				'ImageBitmapLoader extends from Loader'
+			);
+
+		} );
+
+		// INSTANCING
+		QUnit.todo( 'Instancing', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		// PROPERTIES
+		QUnit.test( 'options', ( assert ) => {
+
+			const actual = new ImageBitmapLoader().options;
+			const expected = { premultiplyAlpha: 'none' };
+			assert.deepEqual( actual, expected, 'ImageBitmapLoader defines options.' );
+
+		} );
+
+		// PUBLIC
+		QUnit.test( 'isImageBitmapLoader', ( assert ) => {
+
+			const object = new ImageBitmapLoader();
+			assert.ok(
+				object.isImageBitmapLoader,
+				'ImageBitmapLoader.isImageBitmapLoader should be true'
+			);
+
+		} );
+
+		QUnit.todo( 'setOptions', ( assert ) => {
+
+			// setOptions( options )
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'load', ( assert ) => {
+
+			// load( url, onLoad, onProgress, onError )
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+	} );
+
+} );

+ 14 - 13
test/unit/src/loaders/ImageLoader.tests.js

@@ -1,32 +1,33 @@
 /* global QUnit */
 
-// import { ImageLoader } from '../../../../src/loaders/ImageLoader.js';
+import { ImageLoader } from '../../../../src/loaders/ImageLoader.js';
+
+import { Loader } from '../../../../src/loaders/Loader.js';
 
 export default QUnit.module( 'Loaders', () => {
 
 	QUnit.module( 'ImageLoader', () => {
 
-		// INSTANCING
-		QUnit.todo( 'Instancing', ( assert ) => {
+		// INHERITANCE
+		QUnit.test( 'Extending', ( assert ) => {
 
-			assert.ok( false, 'everything\'s gonna be alright' );
+			const object = new ImageLoader();
+			assert.strictEqual(
+				object instanceof Loader, true,
+				'ImageLoader extends from Loader'
+			);
 
 		} );
 
-		// PUBLIC STUFF
-		QUnit.todo( 'load', ( assert ) => {
-
-			assert.ok( false, 'everything\'s gonna be alright' );
-
-		} );
-
-		QUnit.todo( 'setCrossOrigin', ( assert ) => {
+		// INSTANCING
+		QUnit.todo( 'Instancing', ( assert ) => {
 
 			assert.ok( false, 'everything\'s gonna be alright' );
 
 		} );
 
-		QUnit.todo( 'setPath', ( assert ) => {
+		// PUBLIC
+		QUnit.todo( 'load', ( assert ) => {
 
 			assert.ok( false, 'everything\'s gonna be alright' );
 

+ 105 - 0
test/unit/src/loaders/Loader.tests.js

@@ -1,5 +1,9 @@
 /* global QUnit */
 
+import { Loader } from '../../../../src/loaders/Loader.js';
+
+import { LoadingManager } from '../../../../src/loaders/LoadingManager.js';
+
 export default QUnit.module( 'Loaders', () => {
 
 	QUnit.module( 'Loader', () => {
@@ -11,6 +15,107 @@ export default QUnit.module( 'Loaders', () => {
 
 		} );
 
+		// PROPERTIES
+		QUnit.test( 'manager', ( assert ) => {
+
+			// uses default LoadingManager if not supplied in constructor
+			const object = new Loader().manager;
+			assert.strictEqual(
+				object instanceof LoadingManager, true,
+				'Loader defines a default manager if not supplied in constructor.'
+			);
+
+		} );
+
+		QUnit.test( 'crossOrigin', ( assert ) => {
+
+			const actual = new Loader().crossOrigin;
+			const expected = 'anonymous';
+			assert.strictEqual( actual, expected, 'Loader defines crossOrigin.' );
+
+		} );
+
+		QUnit.test( 'withCredentials', ( assert ) => {
+
+			const actual = new Loader().withCredentials;
+			const expected = false;
+			assert.strictEqual( actual, expected, 'Loader defines withCredentials.' );
+
+		} );
+
+		QUnit.test( 'path', ( assert ) => {
+
+			const actual = new Loader().path;
+			const expected = '';
+			assert.strictEqual( actual, expected, 'Loader defines path.' );
+
+		} );
+
+		QUnit.test( 'resourcePath', ( assert ) => {
+
+			const actual = new Loader().resourcePath;
+			const expected = '';
+			assert.strictEqual( actual, expected, 'Loader defines resourcePath.' );
+
+		} );
+
+		QUnit.test( 'requestHeader', ( assert ) => {
+
+			const actual = new Loader().requestHeader;
+			const expected = {};
+			assert.deepEqual( actual, expected, 'Loader defines requestHeader.' );
+
+		} );
+
+		// PUBLIC
+		QUnit.todo( 'load', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'loadAsync', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'parse', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'setCrossOrigin', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'setWithCredentials', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'setPath', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'setResourcePath', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'setRequestHeader', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
 	} );
 
 } );

+ 8 - 1
test/unit/src/loaders/LoaderUtils.tests.js

@@ -6,7 +6,7 @@ export default QUnit.module( 'Loaders', () => {
 
 	QUnit.module( 'LoaderUtils', () => {
 
-		// INSTANCING
+		// STATIC
 		QUnit.test( 'decodeText', ( assert ) => {
 
 			var jsonArray = new Uint8Array( [ 123, 34, 106, 115, 111, 110, 34, 58, 32, 116, 114, 117, 101, 125 ] );
@@ -25,6 +25,13 @@ export default QUnit.module( 'Loaders', () => {
 
 		} );
 
+		QUnit.todo( 'resolveURL', ( assert ) => {
+
+			// static resolveURL( url, path )
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
 	} );
 
 } );

+ 41 - 2
test/unit/src/loaders/LoadingManager.tests.js

@@ -1,6 +1,7 @@
 /* global QUnit */
 
 import { LoadingManager } from '../../../../src/loaders/LoadingManager.js';
+
 import { Loader } from '../../../../src/loaders/Loader.js';
 
 export default QUnit.module( 'Loaders', () => {
@@ -10,13 +11,16 @@ export default QUnit.module( 'Loaders', () => {
 		// INSTANCING
 		QUnit.todo( 'Instancing', ( assert ) => {
 
+			// constructor( onLoad, onProgress, onError )
 			assert.ok( false, 'everything\'s gonna be alright' );
 
 		} );
 
-		// PUBLIC STUFF
+		// PUBLIC
 		QUnit.todo( 'onStart', ( assert ) => {
 
+			// Refer to #5689 for the reason why we don't set .onStart
+			// in the constructor
 			assert.ok( false, 'everything\'s gonna be alright' );
 
 		} );
@@ -57,7 +61,42 @@ export default QUnit.module( 'Loaders', () => {
 
 		} );
 
-		QUnit.test( 'getHandler', ( assert ) => {
+		QUnit.todo( 'resolveURL', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'setURLModifier', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'addHandler', ( assert ) => {
+
+			// addHandler( regex, loader )
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'removeHandler', ( assert ) => {
+
+			// removeHandler( regex )
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+
+		QUnit.todo( 'getHandler', ( assert ) => {
+
+			// getHandler( file )
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		// OTHERS
+		QUnit.test( 'addHandler/getHandler/removeHandler', ( assert ) => {
 
 			const loadingManager = new LoadingManager();
 			const loader = new Loader();

+ 33 - 3
test/unit/src/loaders/MaterialLoader.tests.js

@@ -1,11 +1,33 @@
 /* global QUnit */
 
-// import { MaterialLoader } from '../../../../src/loaders/MaterialLoader.js';
+import { MaterialLoader } from '../../../../src/loaders/MaterialLoader.js';
+
+import { Loader } from '../../../../src/loaders/Loader.js';
 
 export default QUnit.module( 'Loaders', () => {
 
 	QUnit.module( 'MaterialLoader', () => {
 
+		// INHERITANCE
+		QUnit.test( 'Extending', ( assert ) => {
+
+			const object = new MaterialLoader();
+			assert.strictEqual(
+				object instanceof Loader, true,
+				'MaterialLoader extends from Loader'
+			);
+
+		} );
+
+		// PROPERTIES
+		QUnit.test( 'textures', ( assert ) => {
+
+			const actual = new MaterialLoader().textures;
+			const expected = {};
+			assert.deepEqual( actual, expected, 'MaterialLoader defines textures.' );
+
+		} );
+
 		// INSTANCING
 		QUnit.todo( 'Instancing', ( assert ) => {
 
@@ -13,21 +35,29 @@ export default QUnit.module( 'Loaders', () => {
 
 		} );
 
-		// PUBLIC STUFF
+		// PUBLIC
 		QUnit.todo( 'load', ( assert ) => {
 
 			assert.ok( false, 'everything\'s gonna be alright' );
 
 		} );
 
+		QUnit.todo( 'parse', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
 		QUnit.todo( 'setTextures', ( assert ) => {
 
 			assert.ok( false, 'everything\'s gonna be alright' );
 
 		} );
 
-		QUnit.todo( 'parse', ( assert ) => {
+		// STATIC
+		QUnit.todo( 'createMaterialFromType', ( assert ) => {
 
+			// static createMaterialFromType( type )
 			assert.ok( false, 'everything\'s gonna be alright' );
 
 		} );

+ 48 - 5
test/unit/src/loaders/ObjectLoader.tests.js

@@ -1,11 +1,24 @@
 /* global QUnit */
 
-// import { ObjectLoader } from '../../../../src/loaders/ObjectLoader.js';
+import { ObjectLoader } from '../../../../src/loaders/ObjectLoader.js';
+
+import { Loader } from '../../../../src/loaders/Loader.js';
 
 export default QUnit.module( 'Loaders', () => {
 
 	QUnit.module( 'ObjectLoader', () => {
 
+		// INHERITANCE
+		QUnit.test( 'Extending', ( assert ) => {
+
+			const object = new ObjectLoader();
+			assert.strictEqual(
+				object instanceof Loader, true,
+				'ObjectLoader extends from Loader'
+			);
+
+		} );
+
 		// INSTANCING
 		QUnit.todo( 'Instancing', ( assert ) => {
 
@@ -13,27 +26,43 @@ export default QUnit.module( 'Loaders', () => {
 
 		} );
 
-		// PUBLIC STUFF
+		// PUBLIC
 		QUnit.todo( 'load', ( assert ) => {
 
 			assert.ok( false, 'everything\'s gonna be alright' );
 
 		} );
 
-		QUnit.todo( 'setTexturePath', ( assert ) => {
+		QUnit.todo( 'loadAsync', ( assert ) => {
 
+			// async loadAsync( url, onProgress )
 			assert.ok( false, 'everything\'s gonna be alright' );
 
 		} );
 
-		QUnit.todo( 'setCrossOrigin', ( assert ) => {
+		QUnit.todo( 'parse', ( assert ) => {
 
 			assert.ok( false, 'everything\'s gonna be alright' );
 
 		} );
 
-		QUnit.todo( 'parse', ( assert ) => {
+		QUnit.todo( 'parseAsync', ( assert ) => {
 
+			// async parseAsync( json )
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'parseShapes', ( assert ) => {
+
+			// parseShapes( json )
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'parseSkeletons', ( assert ) => {
+
+			// parseSkeletons( json, object )
 			assert.ok( false, 'everything\'s gonna be alright' );
 
 		} );
@@ -62,6 +91,13 @@ export default QUnit.module( 'Loaders', () => {
 
 		} );
 
+		QUnit.todo( 'parseImagesAsync', ( assert ) => {
+
+			// async parseImagesAsync( json )
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
 		QUnit.todo( 'parseTextures', ( assert ) => {
 
 			assert.ok( false, 'everything\'s gonna be alright' );
@@ -74,6 +110,13 @@ export default QUnit.module( 'Loaders', () => {
 
 		} );
 
+		QUnit.todo( 'bindSkeletons', ( assert ) => {
+
+			// bindSkeletons( object, skeletons )
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
 	} );
 
 } );

+ 14 - 13
test/unit/src/loaders/TextureLoader.tests.js

@@ -1,32 +1,33 @@
 /* global QUnit */
 
-// import { TextureLoader } from '../../../../src/loaders/TextureLoader.js';
+import { TextureLoader } from '../../../../src/loaders/TextureLoader.js';
+
+import { Loader } from '../../../../src/loaders/Loader.js';
 
 export default QUnit.module( 'Loaders', () => {
 
 	QUnit.module( 'TextureLoader', () => {
 
-		// INSTANCING
-		QUnit.todo( 'Instancing', ( assert ) => {
+		// INHERITANCE
+		QUnit.test( 'Extending', ( assert ) => {
 
-			assert.ok( false, 'everything\'s gonna be alright' );
+			const object = new TextureLoader();
+			assert.strictEqual(
+				object instanceof Loader, true,
+				'TextureLoader extends from Loader'
+			);
 
 		} );
 
-		// PUBLIC STUFF
-		QUnit.todo( 'load', ( assert ) => {
-
-			assert.ok( false, 'everything\'s gonna be alright' );
-
-		} );
-
-		QUnit.todo( 'setCrossOrigin', ( assert ) => {
+		// INSTANCING
+		QUnit.todo( 'Instancing', ( assert ) => {
 
 			assert.ok( false, 'everything\'s gonna be alright' );
 
 		} );
 
-		QUnit.todo( 'setPath', ( assert ) => {
+		// PUBLIC
+		QUnit.todo( 'load', ( assert ) => {
 
 			assert.ok( false, 'everything\'s gonna be alright' );
 

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

@@ -144,6 +144,7 @@ import './src/loaders/CompressedTextureLoader.tests.js';
 import './src/loaders/CubeTextureLoader.tests.js';
 import './src/loaders/DataTextureLoader.tests.js';
 import './src/loaders/FileLoader.tests.js';
+import './src/loaders/ImageBitmapLoader.tests.js';
 import './src/loaders/ImageLoader.tests.js';
 import './src/loaders/Loader.tests.js';
 import './src/loaders/LoaderUtils.tests.js';