Browse Source

Add "finish" test

Garrett Johnson 5 years ago
parent
commit
921cfea20a

+ 1 - 0
src/renderers/webgl/WebGLRenderLists.js

@@ -159,6 +159,7 @@ function WebGLRenderList() {
 	}
 	}
 
 
 	return {
 	return {
+		renderItems: renderItems,
 		opaque: opaque,
 		opaque: opaque,
 		transparent: transparent,
 		transparent: transparent,
 
 

+ 62 - 2
test/unit/src/renderers/webgl/WebGLRenderLists.tests.js

@@ -297,9 +297,69 @@ export default QUnit.module( 'Renderers', () => {
 
 
 			} );
 			} );
 
 
-			QUnit.todo( 'finish', ( assert ) => {
+			QUnit.test( 'finish', ( assert ) => {
+
+				var list = new WebGLRenderList();
+				var obj = { id: 'A', renderOrder: 0 };
+				var mat = { transparent: false, program: { id: 0 } };
+				var geom = {};
+
+				assert.ok( list.renderItems.length === 0, 'Render items length defaults to 0.' );
+
+				list.push( obj, geom, mat, 0, 0, {} );
+				list.push( obj, geom, mat, 0, 0, {} );
+				list.push( obj, geom, mat, 0, 0, {} );
+				assert.ok( list.renderItems.length === 3, 'Render items length expands as items are added.' );
+
+				list.finish();
+				assert.deepEqual(
+					list.renderItems.map( item => item.object ),
+					[ obj, obj, obj ],
+					'Render items are not cleaned if they are being used.'
+				);
+				assert.deepEqual(
+					list.renderItems[ 1 ],
+					{
+						id: 'A',
+						object: obj,
+						geometry: geom,
+						material: mat,
+						program: mat.program,
+						groupOrder: 0,
+						renderOrder: 0,
+						z: 0,
+						group: {}
+					},
+					'Unused render item is structured correctly before clearing.'
+				);
+
+				list.init();
+				list.push( obj, geom, mat, 0, 0, {} );
+				assert.ok( list.renderItems.length === 3, 'Render items length does not shrink.' );
+
+				list.finish();
+				assert.deepEqual(
+					list.renderItems.map( item => item.object ),
+					[ obj, null, null ],
+					'Render items are cleaned if they are not being used.'
+				);
+
+				assert.deepEqual(
+					list.renderItems[ 1 ],
+					{
+						id: null,
+						object: null,
+						geometry: null,
+						material: null,
+						program: null,
+						groupOrder: 0,
+						renderOrder: 0,
+						z: 0,
+						group: null
+					},
+					'Unused render item is structured correctly before clearing.'
+				);
 
 
-				assert.ok( false, "everything's gonna be alright" );
 
 
 			} );
 			} );