浏览代码

Tests: Unit Tests for Textures (#25365)

* Tests: stub textures/FramebufferTexture unit tests

Add unit test file for textures/FramebufferTexture

* Docs: update textures/FramebufferTexture.html

Add missing properties and describe how they differ from the base class, Texture.

* Docs: update textures/FramebufferTexture.html

Add example code, link to full example, add property that differs from base class.

* Update DepthTexture.tests.js

DepthTexture extends from Texture

* Update FramebufferTexture.tests.js

FramebufferTexture extends from Texture

* Update CanvasTexture.tests.js

CanvasTexture extends from Texture

* Update DepthTexture.tests.js

Add missing property test stubs.

* Update CompressedTexture.tests.js

CompressedTexture extends from Texture

* Update CompressedTexture.tests.js

Add missing property test stubs.

* Create CompressedArrayTexture.tests.js

Add missing unit test file, one complete test to show its working, stubs for members.

* Update CubeTexture.tests.js

CubeTexture extends from Texture

* Create Data3DTexture.tests.js

Add missing unit test file, one complete test to show its working, stubs for members.

* Create DataArrayTexture.tests.js

Add missing unit test file, one complete test to show its working, stubs for members.

* Update three.source.unit.js

Link to added unit tests.

* Update DataTexture.tests.js

DataTexture extends from Texture

* Update Texture.tests.js

Texture extends from EventDispatcher. Add missing property and method test stubs.

* Update VideoTexture.tests.js

VideoTexture extends from Texture.  Add missing properties and method test stubs.

* Update Texture.tests.js

Separate INHERITANCE and INSTANCING tests.
Ed Preston 2 年之前
父节点
当前提交
1f4311de44

+ 50 - 0
docs/api/en/textures/FramebufferTexture.html

@@ -15,7 +15,34 @@
 			This class can only be used in combination with [page:WebGLRenderer.copyFramebufferToTexture]().
 			This class can only be used in combination with [page:WebGLRenderer.copyFramebufferToTexture]().
 		</p>
 		</p>
 
 
+		<code>
+			const pixelRatio = window.devicePixelRatio;
+			const textureSize = 128 * pixelRatio;
+
+			// instantiate a framebuffer texture
+			const frameTexture = new FramebufferTexture( textureSize, textureSize, RGBAFormat );
+	
+			// calculate start position for copying part of the frame data
+			const vector = new Vector2();
+			vector.x = ( window.innerWidth * pixelRatio / 2 ) - ( textureSize / 2 );
+			vector.y = ( window.innerHeight * pixelRatio / 2 ) - ( textureSize / 2 );
+
+			// render the scene
+			renderer.clear();
+			renderer.render( scene, camera );
+
+			// copy part of the rendered frame into the framebuffer texture
+			renderer.copyFramebufferToTexture( vector, frameTexture );
+		</code>
+
+		<h2>Examples</h2>
+
+		<p>
+			[example:webgl_framebuffer_texture]
+		</p>
+
 		<h2>Constructor</h2>
 		<h2>Constructor</h2>
+
 		<h3>[name]( [param:Number width], [param:Number height], [param:Constant format] )</h3>
 		<h3>[name]( [param:Number width], [param:Number height], [param:Constant format] )</h3>
 		<p>
 		<p>
 		[page:Number width] -- The width of the texture.<br />
 		[page:Number width] -- The width of the texture.<br />
@@ -31,11 +58,34 @@
 
 
 		<p>See the base [page:Texture Texture] class for common properties.</p>
 		<p>See the base [page:Texture Texture] class for common properties.</p>
 
 
+		<h3>[property:Boolean generateMipmaps]</h3>
+		<p>
+			Whether to generate mipmaps for the [name]. Default value is `false`.
+		</p>
+
 		<h3>[property:Boolean isFramebufferTexture]</h3>
 		<h3>[property:Boolean isFramebufferTexture]</h3>
 		<p>
 		<p>
 			Read-only flag to check if a given object is of type [name].
 			Read-only flag to check if a given object is of type [name].
 		</p>
 		</p>
 
 
+		<h3>[property:number magFilter]</h3>
+		<p>
+			How the texture is sampled when a texel covers more than one pixel. The default is
+			[page:Textures THREE.NearestFilter], which uses the value of the closest texel.
+			<br /><br />
+			
+			See [page:Textures texture constants] for details.
+		</p>
+
+		<h3>[property:number minFilter]</h3>
+		<p>
+			How the texture is sampled when a texel covers less than one pixel. The default is
+			[page:Textures THREE.NearestFilter], which uses the value of the closest texel. 
+			<br /><br />
+
+			See [page:Textures texture constants] for details.
+		</p>
+
 		<h3>[property:Boolean needsUpdate]</h3>
 		<h3>[property:Boolean needsUpdate]</h3>
 
 
 		<p>
 		<p>

+ 15 - 4
test/unit/src/textures/CanvasTexture.tests.js

@@ -1,15 +1,19 @@
 /* global QUnit */
 /* global QUnit */
 
 
-// import { CanvasTexture } from '../../../../src/textures/CanvasTexture.js';
+import { CanvasTexture } from '../../../../src/textures/CanvasTexture.js';
+
+import { Texture } from '../../../../src/textures/Texture.js';
 
 
 export default QUnit.module( 'Textures', () => {
 export default QUnit.module( 'Textures', () => {
 
 
 	QUnit.module( 'CanvasTexture', () => {
 	QUnit.module( 'CanvasTexture', () => {
 
 
 		// INHERITANCE
 		// INHERITANCE
-		QUnit.todo( 'Extending', ( assert ) => {
+		QUnit.test( 'Extending', ( assert ) => {
 
 
-			assert.ok( false, 'everything\'s gonna be alright' );
+			var object = new CanvasTexture();
+
+			assert.strictEqual( object instanceof Texture, true, 'CanvasTexture extends from Texture' );
 
 
 		} );
 		} );
 
 
@@ -20,7 +24,14 @@ export default QUnit.module( 'Textures', () => {
 
 
 		} );
 		} );
 
 
-		// PUBLIC STUFF
+		// PROPERTIES
+		QUnit.todo( 'needsUpdate', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		// PUBLIC
 		QUnit.todo( 'isCanvasTexture', ( assert ) => {
 		QUnit.todo( 'isCanvasTexture', ( assert ) => {
 
 
 			assert.ok( false, 'everything\'s gonna be alright' );
 			assert.ok( false, 'everything\'s gonna be alright' );

+ 49 - 0
test/unit/src/textures/CompressedArrayTexture.tests.js

@@ -0,0 +1,49 @@
+/* global QUnit */
+
+import { CompressedArrayTexture } from '../../../../src/textures/CompressedArrayTexture.js';
+
+import { Texture } from '../../../../src/textures/Texture.js';
+
+export default QUnit.module( 'Textures', () => {
+
+	QUnit.module( 'CompressedArrayTexture', () => {
+
+		// INHERITANCE
+		QUnit.test( 'Extending', ( assert ) => {
+
+			var object = new CompressedArrayTexture();
+
+			assert.strictEqual( object instanceof Texture, true, 'CompressedArrayTexture extends from Texture' );
+
+		} );
+
+		// INSTANCING
+		QUnit.todo( 'Instancing', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		// PROPERTIES
+		QUnit.todo( 'image.depth', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'wrapR', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		// PUBLIC
+		QUnit.todo( 'isCompressedArrayTexture', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+	} );
+
+} );

+ 33 - 4
test/unit/src/textures/CompressedTexture.tests.js

@@ -1,15 +1,19 @@
 /* global QUnit */
 /* global QUnit */
 
 
-// import { CompressedTexture } from '../../../../src/textures/CompressedTexture.js';
+import { CompressedTexture } from '../../../../src/textures/CompressedTexture.js';
+
+import { Texture } from '../../../../src/textures/Texture.js';
 
 
 export default QUnit.module( 'Textures', () => {
 export default QUnit.module( 'Textures', () => {
 
 
 	QUnit.module( 'CompressedTexture', () => {
 	QUnit.module( 'CompressedTexture', () => {
 
 
 		// INHERITANCE
 		// INHERITANCE
-		QUnit.todo( 'Extending', ( assert ) => {
+		QUnit.test( 'Extending', ( assert ) => {
 
 
-			assert.ok( false, 'everything\'s gonna be alright' );
+			var object = new CompressedTexture();
+
+			assert.strictEqual( object instanceof Texture, true, 'CompressedTexture extends from Texture' );
 
 
 		} );
 		} );
 
 
@@ -20,7 +24,32 @@ export default QUnit.module( 'Textures', () => {
 
 
 		} );
 		} );
 
 
-		// PUBLIC STUFF
+		// PROPERTIES
+		QUnit.todo( 'image', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'mipmaps', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'flipY', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'generateMipmaps', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		// PUBLIC
 		QUnit.todo( 'isCompressedTexture', ( assert ) => {
 		QUnit.todo( 'isCompressedTexture', ( assert ) => {
 
 
 			assert.ok( false, 'everything\'s gonna be alright' );
 			assert.ok( false, 'everything\'s gonna be alright' );

+ 14 - 4
test/unit/src/textures/CubeTexture.tests.js

@@ -1,15 +1,19 @@
 /* global QUnit */
 /* global QUnit */
 
 
-// import { CubeTexture } from '../../../../src/textures/CubeTexture.js';
+import { CubeTexture } from '../../../../src/textures/CubeTexture.js';
+
+import { Texture } from '../../../../src/textures/Texture.js';
 
 
 export default QUnit.module( 'Textures', () => {
 export default QUnit.module( 'Textures', () => {
 
 
 	QUnit.module( 'CubeTexture', () => {
 	QUnit.module( 'CubeTexture', () => {
 
 
 		// INHERITANCE
 		// INHERITANCE
-		QUnit.todo( 'Extending', ( assert ) => {
+		QUnit.test( 'Extending', ( assert ) => {
 
 
-			assert.ok( false, 'everything\'s gonna be alright' );
+			var object = new CubeTexture();
+
+			assert.strictEqual( object instanceof Texture, true, 'CubeTexture extends from Texture' );
 
 
 		} );
 		} );
 
 
@@ -27,7 +31,13 @@ export default QUnit.module( 'Textures', () => {
 
 
 		} );
 		} );
 
 
-		// PUBLIC STUFF
+		QUnit.todo( 'flipY', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		// PUBLIC
 		QUnit.todo( 'isCubeTexture', ( assert ) => {
 		QUnit.todo( 'isCubeTexture', ( assert ) => {
 
 
 			assert.ok( false, 'everything\'s gonna be alright' );
 			assert.ok( false, 'everything\'s gonna be alright' );

+ 79 - 0
test/unit/src/textures/Data3DTexture.tests.js

@@ -0,0 +1,79 @@
+/* global QUnit */
+
+import { Data3DTexture } from '../../../../src/textures/Data3DTexture.js';
+
+import { Texture } from '../../../../src/textures/Texture.js';
+
+export default QUnit.module( 'Textures', () => {
+
+	QUnit.module( 'Data3DTexture', () => {
+
+		// INHERITANCE
+		QUnit.test( 'Extending', ( assert ) => {
+
+			var object = new Data3DTexture();
+
+			assert.strictEqual( object instanceof Texture, true, 'Data3DTexture extends from Texture' );
+
+		} );
+
+		// INSTANCING
+		QUnit.todo( 'Instancing', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		// PROPERTIES
+		QUnit.todo( 'image', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'magFilter', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'minFilter', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'wrapR', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'generateMipmaps', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'flipY', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'unpackAlignment', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		// PUBLIC
+		QUnit.todo( 'isData3DTexture', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+	} );
+
+} );

+ 79 - 0
test/unit/src/textures/DataArrayTexture.tests.js

@@ -0,0 +1,79 @@
+/* global QUnit */
+
+import { DataArrayTexture } from '../../../../src/textures/DataArrayTexture.js';
+
+import { Texture } from '../../../../src/textures/Texture.js';
+
+export default QUnit.module( 'Textures', () => {
+
+	QUnit.module( 'DataArrayTexture', () => {
+
+		// INHERITANCE
+		QUnit.test( 'Extending', ( assert ) => {
+
+			var object = new DataArrayTexture();
+
+			assert.strictEqual( object instanceof Texture, true, 'DataArrayTexture extends from Texture' );
+
+		} );
+
+		// INSTANCING
+		QUnit.todo( 'Instancing', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		// PROPERTIES
+		QUnit.todo( 'image', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'magFilter', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'minFilter', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'wrapR', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'generateMipmaps', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'flipY', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'unpackAlignment', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		// PUBLIC
+		QUnit.todo( 'isDataArrayTexture', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+	} );
+
+} );

+ 33 - 4
test/unit/src/textures/DataTexture.tests.js

@@ -1,15 +1,19 @@
 /* global QUnit */
 /* global QUnit */
 
 
-// import { DataTexture } from '../../../../src/textures/DataTexture.js';
+import { DataTexture } from '../../../../src/textures/DataTexture.js';
+
+import { Texture } from '../../../../src/textures/Texture.js';
 
 
 export default QUnit.module( 'Textures', () => {
 export default QUnit.module( 'Textures', () => {
 
 
 	QUnit.module( 'DataTexture', () => {
 	QUnit.module( 'DataTexture', () => {
 
 
 		// INHERITANCE
 		// INHERITANCE
-		QUnit.todo( 'Extending', ( assert ) => {
+		QUnit.test( 'Extending', ( assert ) => {
 
 
-			assert.ok( false, 'everything\'s gonna be alright' );
+			var object = new DataTexture();
+
+			assert.strictEqual( object instanceof Texture, true, 'DataTexture extends from Texture' );
 
 
 		} );
 		} );
 
 
@@ -20,7 +24,32 @@ export default QUnit.module( 'Textures', () => {
 
 
 		} );
 		} );
 
 
-		// PUBLIC STUFF
+		// PROPERTIES
+		QUnit.todo( 'image', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'generateMipmaps', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'flipY', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'unpackAlignment', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		// PUBLIC
 		QUnit.todo( 'isDataTexture', ( assert ) => {
 		QUnit.todo( 'isDataTexture', ( assert ) => {
 
 
 			assert.ok( false, 'everything\'s gonna be alright' );
 			assert.ok( false, 'everything\'s gonna be alright' );

+ 39 - 4
test/unit/src/textures/DepthTexture.tests.js

@@ -1,15 +1,19 @@
 /* global QUnit */
 /* global QUnit */
 
 
-// import { DepthTexture } from '../../../../src/textures/DepthTexture.js';
+import { DepthTexture } from '../../../../src/textures/DepthTexture.js';
+
+import { Texture } from '../../../../src/textures/Texture.js';
 
 
 export default QUnit.module( 'Textures', () => {
 export default QUnit.module( 'Textures', () => {
 
 
 	QUnit.module( 'DepthTexture', () => {
 	QUnit.module( 'DepthTexture', () => {
 
 
 		// INHERITANCE
 		// INHERITANCE
-		QUnit.todo( 'Extending', ( assert ) => {
+		QUnit.test( 'Extending', ( assert ) => {
 
 
-			assert.ok( false, 'everything\'s gonna be alright' );
+			var object = new DepthTexture();
+
+			assert.strictEqual( object instanceof Texture, true, 'DepthTexture extends from Texture' );
 
 
 		} );
 		} );
 
 
@@ -20,7 +24,38 @@ export default QUnit.module( 'Textures', () => {
 
 
 		} );
 		} );
 
 
-		// PUBLIC STUFF
+		// PROPERTIES
+		QUnit.todo( 'image', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'magFilter', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'minFilter', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'flipY', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'generateMipmaps', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		// PUBLIC
 		QUnit.todo( 'isDepthTexture', ( assert ) => {
 		QUnit.todo( 'isDepthTexture', ( assert ) => {
 
 
 			assert.ok( false, 'everything\'s gonna be alright' );
 			assert.ok( false, 'everything\'s gonna be alright' );

+ 67 - 0
test/unit/src/textures/FramebufferTexture.tests.js

@@ -0,0 +1,67 @@
+/* global QUnit */
+
+import { FramebufferTexture } from '../../../../src/textures/FramebufferTexture.js';
+
+import { Texture } from '../../../../src/textures/Texture.js';
+
+export default QUnit.module( 'Textures', () => {
+
+	QUnit.module( 'FramebufferTexture', () => {
+
+		// INHERITANCE
+		QUnit.test( 'Extending', ( assert ) => {
+
+			var object = new FramebufferTexture();
+
+			assert.strictEqual( object instanceof Texture, true, 'FramebufferTexture extends from Texture' );
+
+		} );
+
+		// INSTANCING
+		QUnit.todo( 'Instancing', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		// PROPERTIES
+		QUnit.todo( 'format', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'magFilter', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'minFilter', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'generateMipmaps', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'needsUpdate', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		// PUBLIC
+		QUnit.todo( 'isFramebufferTexture', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+	} );
+
+} );

+ 194 - 3
test/unit/src/textures/Texture.tests.js

@@ -1,11 +1,22 @@
 /* global QUnit */
 /* global QUnit */
 
 
-// import { Texture } from '../../../../src/textures/Texture.js';
+import { Texture } from '../../../../src/textures/Texture.js';
+
+import { EventDispatcher } from '../../../../src/core/EventDispatcher.js';
 
 
 export default QUnit.module( 'Textures', () => {
 export default QUnit.module( 'Textures', () => {
 
 
 	QUnit.module( 'Texture', () => {
 	QUnit.module( 'Texture', () => {
 
 
+		// INHERITANCE
+		QUnit.test( 'Instancing', ( assert ) => {
+
+			var object = new Texture();
+
+			assert.strictEqual( object instanceof EventDispatcher, true, 'Texture extends from EventDispatcher' );
+
+		} );
+
 		// INSTANCING
 		// INSTANCING
 		QUnit.todo( 'Instancing', ( assert ) => {
 		QUnit.todo( 'Instancing', ( assert ) => {
 
 
@@ -14,19 +25,199 @@ export default QUnit.module( 'Textures', () => {
 		} );
 		} );
 
 
 		// PROPERTIES
 		// PROPERTIES
-		QUnit.todo( 'needsUpdate', ( assert ) => {
+		QUnit.todo( 'image', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'id', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'uuid', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'name', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'source', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'mipmaps', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'mapping', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'wrapS', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'wrapT', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'magFilter', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'minFilter', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'anisotropy', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'format', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'internalFormat', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'type', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'offset', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'repeat', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'center', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'rotation', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'matrixAutoUpdate', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'matrix', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'generateMipmaps', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'premultiplyAlpha', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'flipY', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'unpackAlignment', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'encoding', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'userData', ( assert ) => {
 
 
 			assert.ok( false, 'everything\'s gonna be alright' );
 			assert.ok( false, 'everything\'s gonna be alright' );
 
 
 		} );
 		} );
 
 
-		// PUBLIC STUFF
+		QUnit.todo( 'version', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'onUpdate', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'needsPMREMUpdate', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		// PUBLIC
 		QUnit.todo( 'isTexture', ( assert ) => {
 		QUnit.todo( 'isTexture', ( assert ) => {
 
 
 			assert.ok( false, 'everything\'s gonna be alright' );
 			assert.ok( false, 'everything\'s gonna be alright' );
 
 
 		} );
 		} );
 
 
+		QUnit.todo( 'updateMatrix', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
 		QUnit.todo( 'clone', ( assert ) => {
 		QUnit.todo( 'clone', ( assert ) => {
 
 
 			assert.ok( false, 'everything\'s gonna be alright' );
 			assert.ok( false, 'everything\'s gonna be alright' );

+ 40 - 3
test/unit/src/textures/VideoTexture.tests.js

@@ -1,15 +1,21 @@
 /* global QUnit */
 /* global QUnit */
 
 
-// import { VideoTexture } from '../../../../src/textures/VideoTexture.js';
+import { VideoTexture } from '../../../../src/textures/VideoTexture.js';
+
+import { Texture } from '../../../../src/textures/Texture.js';
 
 
 export default QUnit.module( 'Textures', () => {
 export default QUnit.module( 'Textures', () => {
 
 
 	QUnit.module( 'VideoTexture', () => {
 	QUnit.module( 'VideoTexture', () => {
 
 
 		// INHERITANCE
 		// INHERITANCE
-		QUnit.todo( 'Extending', ( assert ) => {
+		QUnit.test( 'Extending', ( assert ) => {
 
 
-			assert.ok( false, 'everything\'s gonna be alright' );
+			const videoDocumentElement = {};
+
+			const object = new VideoTexture( videoDocumentElement );
+
+			assert.strictEqual( object instanceof Texture, true, 'VideoTexture extends from Texture' );
 
 
 		} );
 		} );
 
 
@@ -20,6 +26,25 @@ export default QUnit.module( 'Textures', () => {
 
 
 		} );
 		} );
 
 
+		// PROPERTIES
+		QUnit.todo( 'minFilter', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'magFilter', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'generateMipmaps', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
 		// PUBLIC STUFF
 		// PUBLIC STUFF
 		QUnit.todo( 'isVideoTexture', ( assert ) => {
 		QUnit.todo( 'isVideoTexture', ( assert ) => {
 
 
@@ -27,6 +52,18 @@ export default QUnit.module( 'Textures', () => {
 
 
 		} );
 		} );
 
 
+		QUnit.todo( 'clone', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
+		QUnit.todo( 'update', ( assert ) => {
+
+			assert.ok( false, 'everything\'s gonna be alright' );
+
+		} );
+
 	} );
 	} );
 
 
 } );
 } );

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

@@ -259,10 +259,14 @@ import './src/scenes/Scene.tests.js';
 
 
 //src/textures
 //src/textures
 import './src/textures/CanvasTexture.tests.js';
 import './src/textures/CanvasTexture.tests.js';
+import './src/textures/CompressedArrayTexture.tests.js';
 import './src/textures/CompressedTexture.tests.js';
 import './src/textures/CompressedTexture.tests.js';
 import './src/textures/CubeTexture.tests.js';
 import './src/textures/CubeTexture.tests.js';
+import './src/textures/Data3DTexture.tests.js';
+import './src/textures/DataArrayTexture.tests.js';
 import './src/textures/DataTexture.tests.js';
 import './src/textures/DataTexture.tests.js';
 import './src/textures/DepthTexture.tests.js';
 import './src/textures/DepthTexture.tests.js';
+import './src/textures/FramebufferTexture.tests.js';
 import './src/textures/Source.tests.js';
 import './src/textures/Source.tests.js';
 import './src/textures/Texture.tests.js';
 import './src/textures/Texture.tests.js';
 import './src/textures/VideoTexture.tests.js';
 import './src/textures/VideoTexture.tests.js';