Files
gta6/tests/hud.test.js
T
knsoandClaude Opus 5 f76e97b69d feat(world): HDRI-Himmel „Nowhere Road" mit Umgebungslicht und scharfen Kaskaden-Schatten
- Himmel: 4k-HDRI von Poly Haven (CC0, tools/assets/hdri.mjs) statt Sky-Shader. Kuppel zeigt das Foto
  ab 12°, darunter weiches Band und Dunst in Nebelfarbe; Umgebungslicht und Spiegelungen per PMREM;
  Sonne aus dem Bild gekappt und als Licht übernommen (77°, Stärke 2,5)
- Schatten: CSM mit vier Stufen (25/100/350/1000 m, je 2048²), Schutznetz für beleuchtete Materialien,
  Normal-Bias 1,5 Texel je Stufe gegen Streifen auf doppelseitigen Materialien (Figur, Autos)
- Startfigur wirft Schatten, Palmen und Laternen empfangen Schatten, Wasser als ruhige See
- Debug-Panel: Sonne, Himmelslicht, Himmelshelligkeit; Namensnennung um das HDRI ergänzt

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-13 15:38:44 +02:00

44 lines
2.1 KiB
JavaScript

import { describe, expect, it } from "vitest";
import { buildAttribution } from "../src/ui/hud.js";
// Die Namensnennung ist Pflicht (CC BY, s. task-11-brief.md), keine Kosmetik — deshalb wird
// die Textzusammensetzung hier ohne Browser geprüft statt nur im laufenden HUD betrachtet.
describe("buildAttribution", () => {
const manifest = {
attribution: "Kartenkacheln: GTA VI Map (CC BY 4.0) — https://map.gtadb.org, YANIS v15. " +
"Wahrzeichen: rolux/gtamaplib-vc (Unlicense).",
};
it("behält den Manifest-Text wörtlich bei", () => {
expect(buildAttribution(manifest)).toContain(manifest.attribution);
});
it("ergänzt alle vier Modellquellen mit ihrer jeweiligen Lizenz", () => {
const text = buildAttribution(manifest);
expect(text).toContain("Boris731");
expect(text).toContain("Poly Haven");
expect(text).toContain("Nobiax");
expect(text).toContain("Quaternius");
expect(text).toMatch(/Boris731[^.]*CC BY/);
expect(text).toMatch(/Poly Haven[^.]*CC0/);
expect(text).toMatch(/Nobiax[^.]*CC0/);
expect(text).toMatch(/Quaternius[^.]*CC0/);
});
// Himmel und Umgebungslicht kommen aus dem HDRI "Nowhere Road" (src/world/sky.js) — eine Quelle
// mehr, die wie die Texturen mit Herkunft und Lizenz im selben Satz stehen soll.
it("nennt das HDRI mit Poly Haven und CC0", () => {
expect(buildAttribution(manifest)).toMatch(/HDRI[^.]*Poly Haven[^.]*CC0/);
});
// Ruling (task-11-brief.md): keine Lizenz kürzen, keine zwei Lizenzen in einer Zeile
// vermischen, kein CC0 für etwas behaupten, das CC BY ist — der SUV-Satz muss darum
// isoliert bleiben und darf nicht in denselben Satz wie ein CC0-Eintrag rutschen.
it("vermischt die SUV-Lizenz (CC BY) nicht mit einer CC0-Angabe im selben Satz", () => {
const text = buildAttribution(manifest);
const suvSentence = text.split(".").find((s) => s.includes("Boris731"));
expect(suvSentence).toBeTruthy();
expect(suvSentence).not.toContain("CC0");
});
});