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.
This commit is contained in:
1 parent
c7d09d63d4
commit
67b32fcab3
118 files changed
+16730
No files matched your search
@@ -0,0 +1,87 @@
|
||||
import { existsSync, readdirSync, readFileSync, statSync } from "node:fs";
|
||||
import { join } from "node:path";
|
||||
import { type Credito, validarCreditos } from "./creditos";
|
||||
|
||||
const ok: Credito = {
|
||||
arquivo: "som/tiro.ogg",
|
||||
origem: "https://exemplo.org/tiro",
|
||||
autor: "Fulano",
|
||||
licenca: "CC0-1.0",
|
||||
};
|
||||
|
||||
describe("validarCreditos", () => {
|
||||
it("não devolve erro quando está tudo certo", () => {
|
||||
const propria: Credito = {
|
||||
arquivo: "a.png",
|
||||
origem: "interna",
|
||||
autor: "Evandro",
|
||||
licenca: "propria",
|
||||
};
|
||||
expect(validarCreditos(["som/tiro.ogg", "a.png"], [ok, propria])).toEqual(
|
||||
[],
|
||||
);
|
||||
});
|
||||
|
||||
it("aponta arquivo sem crédito", () => {
|
||||
expect(validarCreditos(["som/tiro.ogg", "b.png"], [ok])).toEqual([
|
||||
"b.png: arquivo sem crédito.",
|
||||
]);
|
||||
});
|
||||
|
||||
it("aponta crédito de arquivo que não existe", () => {
|
||||
expect(validarCreditos([], [ok])).toEqual([
|
||||
"som/tiro.ogg: crédito de arquivo que não existe.",
|
||||
]);
|
||||
});
|
||||
|
||||
it("aponta licença não aceita", () => {
|
||||
const erros = validarCreditos(
|
||||
["som/tiro.ogg"],
|
||||
[{ ...ok, licenca: "CC-BY-4.0" }],
|
||||
);
|
||||
expect(erros).toEqual(["som/tiro.ogg: licença não aceita (CC-BY-4.0)."]);
|
||||
});
|
||||
|
||||
it("exige origem https:// para CC0-1.0", () => {
|
||||
const erros = validarCreditos(
|
||||
["som/tiro.ogg"],
|
||||
[{ ...ok, origem: "http://exemplo.org" }],
|
||||
);
|
||||
expect(erros).toEqual([
|
||||
"som/tiro.ogg: a origem de CC0-1.0 deve começar com https://.",
|
||||
]);
|
||||
});
|
||||
|
||||
it("aponta autor vazio", () => {
|
||||
expect(validarCreditos(["som/tiro.ogg"], [{ ...ok, autor: " " }])).toEqual(
|
||||
["som/tiro.ogg: autor vazio."],
|
||||
);
|
||||
});
|
||||
|
||||
it("aponta arquivo creditado duas vezes", () => {
|
||||
expect(validarCreditos(["som/tiro.ogg"], [ok, ok])).toEqual([
|
||||
"som/tiro.ogg: creditado mais de uma vez.",
|
||||
]);
|
||||
});
|
||||
});
|
||||
|
||||
function listar(pasta: string, base = ""): string[] {
|
||||
if (!existsSync(pasta)) return [];
|
||||
return readdirSync(pasta).flatMap((nome) => {
|
||||
const caminho = join(pasta, nome);
|
||||
const rel = base ? `${base}/${nome}` : nome;
|
||||
if (statSync(caminho).isDirectory()) return listar(caminho, rel);
|
||||
return rel === "CREDITOS.json" ? [] : [rel];
|
||||
});
|
||||
}
|
||||
|
||||
describe("public/jogo", () => {
|
||||
it("tem crédito válido para cada arquivo", () => {
|
||||
const pasta = join(process.cwd(), "public", "jogo");
|
||||
const json = join(pasta, "CREDITOS.json");
|
||||
const creditos: Credito[] = existsSync(json)
|
||||
? JSON.parse(readFileSync(json, "utf8"))
|
||||
: [];
|
||||
expect(validarCreditos(listar(pasta), creditos)).toEqual([]);
|
||||
});
|
||||
});
|
||||
Reference in new issue
Block a user