From e9277f47395898653d4ce1f45532b550c2db93e3 Mon Sep 17 00:00:00 2001 From: ochafik Date: Wed, 25 Dec 2024 13:58:44 +0000 Subject: [PATCH] Test loading demo by path --- src/state/fragment-state.ts | 4 ++++ src/state/initial-state.ts | 6 +++--- tests/e2e.test.js | 12 +++++++++++- 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/state/fragment-state.ts b/src/state/fragment-state.ts index 03227c2..9e87631 100644 --- a/src/state/fragment-state.ts +++ b/src/state/fragment-state.ts @@ -57,6 +57,10 @@ export async function readStateFromFragment(): Promise { // For testing const src = decodeURIComponent(serialized.substring('src:'.length)); return createInitialState(null, src); + } else if (serialized.startsWith('testpath:')) { + // For testing + const path = decodeURIComponent(serialized.substring('testpath:'.length)); + return createInitialState(null, '...', path); } let obj; try { diff --git a/src/state/initial-state.ts b/src/state/initial-state.ts index 66d7170..26cd638 100644 --- a/src/state/initial-state.ts +++ b/src/state/initial-state.ts @@ -6,7 +6,7 @@ import { State } from './app-state'; export const defaultSourcePath = '/playground.scad'; export const defaultModelColor = '#f9d72c'; -export function createInitialState(state: State | null, content: string = defaultScad): State { +export function createInitialState(state: State | null, content = defaultScad, activePath = defaultSourcePath): State { type Mode = State['view']['layout']['mode']; const mode: Mode = window.matchMedia("(min-width: 768px)").matches @@ -14,8 +14,8 @@ export function createInitialState(state: State | null, content: string = defaul const initialState: State = { params: { - activePath: defaultSourcePath, - sources: [{path: defaultSourcePath, content}], + activePath: activePath, + sources: [{path: activePath, content}], features: [], exportFormat2D: 'svg', exportFormat3D: 'glb', diff --git a/tests/e2e.test.js b/tests/e2e.test.js index 8f7ea65..887df32 100644 --- a/tests/e2e.test.js +++ b/tests/e2e.test.js @@ -21,7 +21,8 @@ beforeEach(async () => { afterEach(async () => { // console.log('Messages:', JSON.stringify(messages, null, 2)); - console.log('Messages:', JSON.stringify(messages.map(({text}) => text), null, 2)); + const testName = expect.getState().currentTestName; + console.log(`[${testName}] Messages:', JSON.stringify(messages.map(({text}) => text), null, 2)); const errors = messages.filter(msg => msg.type === 'error' && @@ -34,6 +35,9 @@ afterEach(async () => { function loadSrc(src) { return page.goto(url + '#src:' + encodeURIComponent(src)); } +function loadPath(path) { + return page.goto(url + '#testpath:' + encodeURIComponent(path)); +} async function waitForViewer() { await page.waitForSelector('model-viewer'); await page.waitForFunction(() => { @@ -102,6 +106,12 @@ describe('e2e', () => { expect3DManifold(); }, longTimeout); + test('load a demo by path', async () => { + await loadPath('/libraries/closepoints/demo_3D_art.scad'); + await waitForViewer(); + expect3DPolySet(); + }, longTimeout); + test('customizer & windows line endings work', async () => { await loadSrc([ 'myVar = 10;',