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..de3eb94 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;',