Files
portifolio-evandrodevbr/app/jogo/ambiente.test.ts
T
evandro 67b32fcab3
CI / audit (push) Successful in 10m48s
CI / verify (push) Successful in 19m2s
CI / deploy (push) Successful in 2m14s
CI / e2e (push) Failing after 36m15s
feat(jogo): expediente dos mortos, jogo de zumbis em primeira pessoa
Etapa 1 inteira (logica com 100% de cobertura, cena 3D, toque, sons, bancada de desempenho, e2e) e a base da etapa 2 (mapa novo no Tiled, texturas, imagens dos itens, sons conferidos, golpe recortado e medido). Pagina /jogo fora do menu e do sitemap ate a medicao no celular.
2026-11-10 19:37:10 -03:00

72 lines
1.7 KiB
TypeScript

import {
Light,
Line,
Mesh,
type Object3D,
PerspectiveCamera,
Points,
Scene,
Sprite,
} from "three";
import { lerMapa } from "@/lib/jogo/mapa";
import { ESCRITORIO } from "@/lib/jogo/valores";
import { criarAmbiente } from "./ambiente";
beforeEach(() => {
jest.spyOn(HTMLCanvasElement.prototype, "getContext").mockReturnValue(null);
});
afterEach(() => {
jest.restoreAllMocks();
});
function montar() {
const cena = new Scene();
const camera = new PerspectiveCamera();
cena.add(camera);
const ambiente = criarAmbiente(cena, lerMapa(ESCRITORIO), {
camera,
movimentoReduzido: false,
});
return { cena, camera, ambiente };
}
test("o escritório cabe em 12 objetos desenháveis", () => {
const { cena } = montar();
let n = 0;
cena.traverse((o) => {
if (
o instanceof Mesh ||
o instanceof Sprite ||
o instanceof Line ||
o instanceof Points
)
n++;
});
expect(n).toBeGreaterThan(0);
expect(n).toBeLessThanOrEqual(12);
});
test("a lanterna presa à câmera é a única luz com sombra e desliga com o regulador", () => {
const { cena, ambiente } = montar();
const comSombra = () => {
const luzes: Object3D[] = [];
cena.traverse((o) => {
if (o instanceof Light && o.castShadow) luzes.push(o);
});
return luzes;
};
expect(comSombra()).toHaveLength(1);
expect(comSombra()[0].parent).toBeInstanceOf(PerspectiveCamera);
ambiente.definirSombras(false);
expect(comSombra()).toHaveLength(0);
});
test("descartar esvazia a cena e a câmera", () => {
const { cena, camera, ambiente } = montar();
ambiente.descartar();
expect(cena.children).toEqual([camera]);
expect(camera.children).toHaveLength(0);
expect(cena.fog).toBeNull();
});