diff --git a/tests/diagnose-project5.tmp.test.ts b/tests/diagnose-project5.tmp.test.ts new file mode 100644 index 00000000..40851d8f --- /dev/null +++ b/tests/diagnose-project5.tmp.test.ts @@ -0,0 +1,74 @@ +import { readFileSync } from "node:fs"; +import { strFromU8, unzipSync } from "fflate"; +import { describe, it } from "vitest"; + +import { + formatSceneDiagnostic, + validateProjectDocument, + validateProjectSchedulingResources, + validateSceneDocument, + validateSceneDocumentLocalBuildContent +} from "../src/document/scene-document-validation"; +import { createSceneDocumentFromProject } from "../src/document/scene-document"; +import { parseProjectDocumentJson } from "../src/serialization/scene-document-json"; + +describe("diagnose project 5", () => { + it("prints validation diagnostics", () => { + const entries = unzipSync( + readFileSync("/Users/giers/webeditor3d/untitled-project-5.we3d") + ); + const sceneJson = entries["scene.json"]; + + if (sceneJson === undefined) { + throw new Error("Missing scene.json"); + } + + const project = parseProjectDocumentJson(strFromU8(sceneJson)); + const activeScene = createSceneDocumentFromProject( + project, + project.activeSceneId + ); + const projectValidation = validateProjectDocument(project, { + terrainSampleValues: "skip" + }); + const schedulingValidation = validateProjectSchedulingResources(project); + const activeSceneFullValidation = validateSceneDocument(activeScene, { + terrainSampleValues: "skip" + }); + const activeSceneLocalValidation = validateSceneDocumentLocalBuildContent( + activeScene, + { + terrainSampleValues: "skip" + } + ); + + const summarize = ( + name: string, + diagnostics: Array<{ message: string; path?: string }> + ) => { + console.log(`\n${name}: ${diagnostics.length}`); + for (const diagnostic of diagnostics) { + console.log(formatSceneDiagnostic(diagnostic as never)); + } + }; + + console.log( + JSON.stringify( + { + projectName: project.name, + activeSceneId: project.activeSceneId, + activeSceneName: project.scenes[project.activeSceneId]?.name, + sceneCount: Object.keys(project.scenes).length, + sequenceIds: Object.keys(project.sequences.sequences), + schedulerRoutineIds: Object.keys(project.scheduler.routines) + }, + null, + 2 + ) + ); + summarize("project errors", projectValidation.errors); + summarize("scheduling errors", schedulingValidation.errors); + summarize("active scene full errors", activeSceneFullValidation.errors); + summarize("active scene local build errors", activeSceneLocalValidation.errors); + }); +});