From f5a8bf98cc071e86eafe0321a425689da0077895 Mon Sep 17 00:00:00 2001 From: jtabibito Date: Tue, 20 Aug 2024 07:37:16 +0800 Subject: [PATCH 1/2] test(meshrenderer): update unit test case of MeshRenderer --- tests/src/core/MeshRenderer.test.ts | 109 +++++++++++++++++++++++++++- 1 file changed, 107 insertions(+), 2 deletions(-) diff --git a/tests/src/core/MeshRenderer.test.ts b/tests/src/core/MeshRenderer.test.ts index 1843f3e443..df94945ee5 100644 --- a/tests/src/core/MeshRenderer.test.ts +++ b/tests/src/core/MeshRenderer.test.ts @@ -1,4 +1,13 @@ -import { BlinnPhongMaterial, MeshRenderer, PrimitiveMesh, Entity, Camera, ModelMesh } from "@galacean/engine-core"; +import { + BlinnPhongMaterial, + PBRMaterial, + UnlitMaterial, + MeshRenderer, + PrimitiveMesh, + Entity, + Camera, + ModelMesh +} from "@galacean/engine-core"; import { Vector3 } from "@galacean/engine-math"; import { WebGLEngine } from "@galacean/engine-rhi-webgl"; import { expect } from "chai"; @@ -9,7 +18,7 @@ describe("MeshRenderer", async function () { let cubeEntity: Entity; let cubeMesh: ModelMesh; - before(async function () { + before(async function () { engine = await WebGLEngine.create({ canvas: document.createElement("canvas") }); const scene = engine.sceneManager.activeScene; @@ -108,6 +117,102 @@ describe("MeshRenderer", async function () { cloneCube.destroy(); }); + it("receiveShadows", () => { + // Test that set and get receiveShadows work correctly. + const mr = cubeEntity.getComponent(MeshRenderer); + mr.receiveShadows = true; + expect(mr.receiveShadows).to.be.true; + + // Test that repeated assignment works correctly. + mr.receiveShadows = true; + expect(mr.receiveShadows).to.be.true; + + // Test that set false value works correctly. + mr.receiveShadows = false; + expect(mr.receiveShadows).to.be.false; + }); + + it("material", () => { + const mr = cubeEntity.getComponent(MeshRenderer); + + // Add BlinnPhong, Unlit and PBR materials. + mr.setMaterial(0, new BlinnPhongMaterial(engine)); + mr.setMaterial(0, new UnlitMaterial(engine)); + mr.setMaterial(1, new PBRMaterial(engine)); + + // Test that get material works correctly. + expect(mr.getMaterial()).to.be.instanceOf(UnlitMaterial); + expect(mr.getMaterial(1)).to.be.instanceOf(PBRMaterial); + + // Test that return null when index is out of range. + expect(mr.getMaterial(2)).to.be.null; + expect(mr.getMaterial(-1)).to.be.null; + }); + + it("materials", () => { + const mr = cubeEntity.getComponent(MeshRenderer); + + // Test that set materials works correctly. + mr.setMaterials([new UnlitMaterial(engine), new PBRMaterial(engine), null, new BlinnPhongMaterial(engine)]); + + // Test that get materials works correctly. + const materials = mr.getMaterials(); + expect(materials[0]).to.be.instanceOf(UnlitMaterial); + expect(materials[1]).to.be.instanceOf(PBRMaterial); + expect(materials[2]).to.be.null; + expect(materials[3]).to.be.instanceOf(BlinnPhongMaterial); + }); + + it("materialCount", () => { + // Test that get materialCount works correctly. + const mr = cubeEntity.getComponent(MeshRenderer); + expect(mr.materialCount).to.be.equal(4); + + // Test that set materialCount works correctly. + mr.materialCount = 2; + expect(mr.materialCount).to.be.equal(2); + + // Test that set materialCount with negative value works correctly. + mr.materialCount = 0; + expect(mr.materialCount).to.be.equal(0); + }); + + it("getInstanceMaterial", () => { + const mr = cubeEntity.getComponent(MeshRenderer); + const unlitMaterial = new UnlitMaterial(engine); + const pbrMaterial = new PBRMaterial(engine); + unlitMaterial.name = "Unlit"; + pbrMaterial.name = "PBR "; + mr.setMaterials([unlitMaterial, null, pbrMaterial]); + + // Test that getInstanceMaterial works correctly. + const material = mr.getInstanceMaterial(); + expect(material).to.be.instanceOf(UnlitMaterial); + expect(material.name).to.be.equal("undefined(Instance)"); + + const material1 = mr.getInstanceMaterial(2); + expect(material1).to.be.instanceOf(PBRMaterial); + expect(material1.name).to.be.equal("undefined (Instance)"); + + expect(mr.getInstanceMaterial(1)).to.be.null; + + // Test that return null when index is out of range. + expect(mr.getInstanceMaterial(3)).to.be.null; + expect(mr.getInstanceMaterial(-1)).to.be.null; + }); + + it("getInstanceMaterials", () => { + const mr = cubeEntity.getComponent(MeshRenderer); + mr.setMaterials([new UnlitMaterial(engine), new PBRMaterial(engine)]); + + // Test that getInstanceMaterials works correctly. + const materials = mr.getInstanceMaterials(); + expect(materials[0]).to.be.instanceOf(UnlitMaterial); + expect(materials[0].name).to.be.equal("undefined(Instance)"); + expect(materials[1]).to.be.instanceOf(PBRMaterial); + expect(materials[1].name).to.be.equal("undefined(Instance)"); + }); + it("destroy", () => { const mr = cubeEntity.getComponent(MeshRenderer); cubeEntity.destroy(); From 5e65189b3aa47960701d4de1e7f5f690cebb1c45 Mon Sep 17 00:00:00 2001 From: jtabibito Date: Tue, 20 Aug 2024 15:56:30 +0800 Subject: [PATCH 2/2] test: update unit test case of MeshRenderer --- tests/src/core/MeshRenderer.test.ts | 50 +++++++++++++++++++++++------ 1 file changed, 40 insertions(+), 10 deletions(-) diff --git a/tests/src/core/MeshRenderer.test.ts b/tests/src/core/MeshRenderer.test.ts index df94945ee5..2954d06d69 100644 --- a/tests/src/core/MeshRenderer.test.ts +++ b/tests/src/core/MeshRenderer.test.ts @@ -123,13 +123,13 @@ describe("MeshRenderer", async function () { mr.receiveShadows = true; expect(mr.receiveShadows).to.be.true; - // Test that repeated assignment works correctly. - mr.receiveShadows = true; - expect(mr.receiveShadows).to.be.true; - // Test that set false value works correctly. mr.receiveShadows = false; expect(mr.receiveShadows).to.be.false; + + // Test that repeated assignment works correctly. + mr.receiveShadows = true; + expect(mr.receiveShadows).to.be.true; }); it("material", () => { @@ -147,6 +147,10 @@ describe("MeshRenderer", async function () { // Test that return null when index is out of range. expect(mr.getMaterial(2)).to.be.null; expect(mr.getMaterial(-1)).to.be.null; + + mr.getInstanceMaterials(); + mr.setMaterial(1, new UnlitMaterial(engine)); + expect(mr.getMaterial(1)).to.be.instanceOf(UnlitMaterial); }); it("materials", () => { @@ -166,7 +170,9 @@ describe("MeshRenderer", async function () { it("materialCount", () => { // Test that get materialCount works correctly. const mr = cubeEntity.getComponent(MeshRenderer); - expect(mr.materialCount).to.be.equal(4); + mr.setMaterials([new UnlitMaterial(engine), new PBRMaterial(engine), new BlinnPhongMaterial(engine)]); + mr.getInstanceMaterials(); + expect(mr.materialCount).to.be.equal(3); // Test that set materialCount works correctly. mr.materialCount = 2; @@ -179,10 +185,12 @@ describe("MeshRenderer", async function () { it("getInstanceMaterial", () => { const mr = cubeEntity.getComponent(MeshRenderer); + + // Test that getInstanceMaterial works correctly. + expect(mr.getInstanceMaterial()).to.be.null; + const unlitMaterial = new UnlitMaterial(engine); const pbrMaterial = new PBRMaterial(engine); - unlitMaterial.name = "Unlit"; - pbrMaterial.name = "PBR "; mr.setMaterials([unlitMaterial, null, pbrMaterial]); // Test that getInstanceMaterial works correctly. @@ -190,9 +198,13 @@ describe("MeshRenderer", async function () { expect(material).to.be.instanceOf(UnlitMaterial); expect(material.name).to.be.equal("undefined(Instance)"); - const material1 = mr.getInstanceMaterial(2); - expect(material1).to.be.instanceOf(PBRMaterial); - expect(material1.name).to.be.equal("undefined (Instance)"); + // Test that material0 is same as material. + const material0 = mr.getInstanceMaterial(0); + expect(material0).to.be.eq(material); + + const material2 = mr.getInstanceMaterial(2); + expect(material2).to.be.instanceOf(PBRMaterial); + expect(material2.name).to.be.equal("undefined(Instance)"); expect(mr.getInstanceMaterial(1)).to.be.null; @@ -213,6 +225,24 @@ describe("MeshRenderer", async function () { expect(materials[1].name).to.be.equal("undefined(Instance)"); }); + it("priority", () => { + const mr = cubeEntity.getComponent(MeshRenderer); + + // Test that set and get priority works correctly. + expect(mr.priority).to.be.equal(0); + + mr.priority = 1; + expect(mr.priority).to.be.equal(1); + + // Test that repeated assignment works correctly. + mr.priority = 1; + expect(mr.priority).to.be.equal(1); + + // Test that set negative value works correctly. + mr.priority = -1; + expect(mr.priority).to.be.equal(-1); + }); + it("destroy", () => { const mr = cubeEntity.getComponent(MeshRenderer); cubeEntity.destroy();