Skip to content

Commit

Permalink
feat: add tests for the state parameter
Browse files Browse the repository at this point in the history
  • Loading branch information
arianrhodsandlot committed Mar 4, 2024
1 parent db8c926 commit cef0c66
Show file tree
Hide file tree
Showing 10 changed files with 53 additions and 2 deletions.
9 changes: 9 additions & 0 deletions demo/demo.ts
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,14 @@ async function launchCustomRom() {
})
}

async function launchState() {
const stateDataUrl =
'data:application/octet-stream;base64,I1JaSVB2ASMAAAIAuDUAAAAAAABBBAAAeJztmt9rHEUcwL+7cxe3PZqNtUnR1usd1DaxFfYuOSw2kuztj9wl92Ozu3fXi7VULPEn5MUfsc1DJEEsTUKgYJGIlEBfqmgrItXH/gUB9clnqW8W8uKDMn5ndjc9o01LYwzF+ZC5+cyPnf3uzh07s8TVPV/3LalslVOf5gBsw6MLmNcOAUcqKACOASBjYd+MzqowOSdCgWYkXih/OKEcNvOB/O7qZQA2DkxLwbCTyyrLemAxWYJk3wc/fD1/BctT3bDG44NHe2A3dKAO7mcVZ67z+m4cSOqELUS5wbNbV4D8uwNfC7IB0O5fHpjJZYpD4N/0avy2BN/DMxpI2o8Aq3EtAbdgb9CKaNJ9DplO9R9Nq0f60+qzXWn16eOgdnaA2p3CdAzUwz3r+988f/P88uSv7wPEn/pu9sjlLyQY/5zIpz6TpZe/jJHTX8XlF1Nt0lR3lzRFWbLJSTpEztACeZMWyVt0mEzRETJLS2SONrE8huUXsHwSy8/JU/S4PEv75Tk6Lp+jr8gz9FX5An1Nvkhfl5foG/LHtI71Dax/h5yj75IZOkku0PfIRXqWLFGMhWIsFGOhGAvFWCjGvJVpvp0sqGS+kyx0kQ+/pXT+QJAlyVyapCi9TFd+Of0AU/0XbmySzZ5fIBAI1rOnOynbmA/r5TJ/4BRHS/kYE1xaFI2Jl5izBvS3mV+jlPpe3sPnPfx8Sm1jXcsTEw5fW5BLOwAqvu6ydYVge0lIMonF29S75YqyY2dC2dWOufJPeceju7s2So/t6dy7Udq3/8knNkrJh5zUPdju+DbLvb5ftXVcDdkZ8l98xwV3R/z+txbx+9/49++4ejkFf9+fDuD+dAD3p5iODeD+1MOObInxf9+HOk7NZSusxeQgjFSrI3w5Zlq6ycXxnBKXE1XbZiLV/aGgxtVNk70Iiit+ZFDP13ivpDNkVZgsxg7g53DTzbMOCgxXm14snMmS53t8pPhBAmAXjAprWVkiYBsVn5/M8Yb4Sx9NCdI0rMZvgyRZFaPAOqjFUTtYQFZca4idYvl53y3yKgnF4G2W5jmBZCLJRqKVq0yIlYkkG4lmZvg4ViaSbCSaWWeiYFM9PCqQRMmqaOwy2HMIPdPi2RbvjdxrWJbMb4fh2pno1qBnI/cahs96SJJXdEfZSQZzumGw5iaWcvkiv1fxHM5CdEzOK47d8QKfE8jVzXIo4dXnvLFgLvHYUOyyH8xuw9SDV3m6wcM6lPiJoPOwPvJXZNcwef0jrLNhZqMVO951PsO7mIdxJs9egkron7S3g5E37lxq3si2eG+L97V4bu12VPy1b5DvVe3IG6VwTIV7tsV7o9jQ+6J6G6+LbxfGv+G7CSxnWVn6jXJ8o1pjfVljQ69b07D9dCgpDIa9QcWcCgQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgeOgBsCpmiv1bwJ+v4hVL'
const response = await fetch(stateDataUrl)
const state = await response.blob()
nostalgist = await Nostalgist.nes({ rom: 'flappybird.nes', state })
}

async function saveState() {
state = await nostalgist.saveState()
}
Expand Down Expand Up @@ -114,6 +122,7 @@ document.body.addEventListener('click', async function listener({ target }) {
launchFceummWithCoreConfig,
launchFceummWithRaLegacy,
launchCustomRom,
launchState,
saveState,
loadState,
pause,
Expand Down
1 change: 1 addition & 0 deletions demo/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ <h3>static methods</h3>
<button type="button">launchFceummWithCoreConfig</button>
<button type="button">launchFceummWithRaLegacy</button>
<button type="button">launchCustomRom</button>
<button type="button">launchState</button>
<h3>instance methods</h3>
<button type="button">saveState</button>
<button type="button">loadState</button>
Expand Down
14 changes: 12 additions & 2 deletions docs/src/content/docs/apis/launch.md
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,14 @@ const nostalgist = await Nostalgist.launch({

Basically it's the same as the `rom` option. Files passed here will be written to RetroArch's `system` directory.

+ #### `state`

**type:** `Blob`

**since:** `0.9.0`

The initial state to be loaded after launching.

+ #### `shader`

**type:** `string`
Expand All @@ -154,12 +162,14 @@ const nostalgist = await Nostalgist.launch({

The name of a shader. By default, shader files will be loaded from [libretro/glsl-shaders](https://github.com/libretro/glsl-shaders) via jsDelivr with a loose matching logic.

For example, if `shader` is `'crt/crt-easymode'`, then these two files will be loaded:
For example, if `shader` is `'crt/crt-easymode'`, then these two files will be loaded from jsDelivr:

+ [crt/crt-easymode.glslp](https://github.com/libretro/glsl-shaders/blob/master/crt/crt-easymode.glslp)
+ [crt/shaders/crt-easymode.glsl](https://github.com/libretro/glsl-shaders/blob/master/crt/shaders/crt-easymode.glsl)

If you want to load a shader which does not match this simple pattern, you might need to customize it by implementing the `resolveShader` function.
If you want to load a shader which does not match this pattern, you might need to customize it by implementing the `resolveShader` function.

This parameter is used for simple shaders only. For some complicated cases, you might need to use the [`beforeLaunch`](#beforelaunch) parameter to write the shader files into the file system.

+ #### `retroarchConfig`
**type:** `Object`
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
10 changes: 10 additions & 0 deletions tests/e2e/static-ra-esm.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -76,4 +76,14 @@ test.describe('static methods with retroarch esm', () => {
const event2 = await page.waitForEvent('console')
expect(event2.text()).toBe('object onLaunch')
})

test('launch with an initial state', async ({ page }) => {
const canvas = page.locator('#canvas')
await expect(canvas).not.toBeAttached()

await page.getByText('launchState', { exact: true }).click()
await page.waitForLoadState('networkidle')
await page.waitForTimeout(500)
await expect(canvas).toHaveScreenshot('launch-state.png')
})
})
10 changes: 10 additions & 0 deletions tests/e2e/static-ra-legacy.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -76,4 +76,14 @@ test.describe('static methods with retroarch legacy', () => {
const event2 = await page.waitForEvent('console')
expect(event2.text()).toBe('object onLaunch')
})

test('launch with an initial state', async ({ page }) => {
const canvas = page.locator('#canvas')
await expect(canvas).not.toBeAttached()

await page.getByText('launchState', { exact: true }).click()
await page.waitForLoadState('networkidle')
await page.waitForTimeout(500)
await expect(canvas).toHaveScreenshot('launch-state.png')
})
})
1 change: 1 addition & 0 deletions tests/e2e/test-page/esm.html
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ <h3>static methods</h3>
<button type="button">launchShader</button>
<button type="button">launchAndCancel</button>
<button type="button">launchWithHooks</button>
<button type="button">launchState</button>
<h3>instance methods</h3>
<button type="button">saveState</button>
<button type="button">loadState</button>
Expand Down
1 change: 1 addition & 0 deletions tests/e2e/test-page/legacy.html
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ <h3>static methods</h3>
<button type="button">launchShader</button>
<button type="button">launchAndCancel</button>
<button type="button">launchWithHooks</button>
<button type="button">launchState</button>
<h3>instance methods</h3>
<button type="button">saveState</button>
<button type="button">loadState</button>
Expand Down
9 changes: 9 additions & 0 deletions tests/e2e/test-page/test-page.js
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,14 @@ async function launchWithHooks() {
})
}

async function launchState() {
const stateDataUrl =
'data:application/octet-stream;base64,I1JaSVB2ASMAAAIAuDUAAAAAAABBBAAAeJztmt9rHEUcwL+7cxe3PZqNtUnR1usd1DaxFfYuOSw2kuztj9wl92Ozu3fXi7VULPEn5MUfsc1DJEEsTUKgYJGIlEBfqmgrItXH/gUB9clnqW8W8uKDMn5ndjc9o01LYwzF+ZC5+cyPnf3uzh07s8TVPV/3LalslVOf5gBsw6MLmNcOAUcqKACOASBjYd+MzqowOSdCgWYkXih/OKEcNvOB/O7qZQA2DkxLwbCTyyrLemAxWYJk3wc/fD1/BctT3bDG44NHe2A3dKAO7mcVZ67z+m4cSOqELUS5wbNbV4D8uwNfC7IB0O5fHpjJZYpD4N/0avy2BN/DMxpI2o8Aq3EtAbdgb9CKaNJ9DplO9R9Nq0f60+qzXWn16eOgdnaA2p3CdAzUwz3r+988f/P88uSv7wPEn/pu9sjlLyQY/5zIpz6TpZe/jJHTX8XlF1Nt0lR3lzRFWbLJSTpEztACeZMWyVt0mEzRETJLS2SONrE8huUXsHwSy8/JU/S4PEv75Tk6Lp+jr8gz9FX5An1Nvkhfl5foG/LHtI71Dax/h5yj75IZOkku0PfIRXqWLFGMhWIsFGOhGAvFWCjGvJVpvp0sqGS+kyx0kQ+/pXT+QJAlyVyapCi9TFd+Of0AU/0XbmySzZ5fIBAI1rOnOynbmA/r5TJ/4BRHS/kYE1xaFI2Jl5izBvS3mV+jlPpe3sPnPfx8Sm1jXcsTEw5fW5BLOwAqvu6ydYVge0lIMonF29S75YqyY2dC2dWOufJPeceju7s2So/t6dy7Udq3/8knNkrJh5zUPdju+DbLvb5ftXVcDdkZ8l98xwV3R/z+txbx+9/49++4ejkFf9+fDuD+dAD3p5iODeD+1MOObInxf9+HOk7NZSusxeQgjFSrI3w5Zlq6ycXxnBKXE1XbZiLV/aGgxtVNk70Iiit+ZFDP13ivpDNkVZgsxg7g53DTzbMOCgxXm14snMmS53t8pPhBAmAXjAprWVkiYBsVn5/M8Yb4Sx9NCdI0rMZvgyRZFaPAOqjFUTtYQFZca4idYvl53y3yKgnF4G2W5jmBZCLJRqKVq0yIlYkkG4lmZvg4ViaSbCSaWWeiYFM9PCqQRMmqaOwy2HMIPdPi2RbvjdxrWJbMb4fh2pno1qBnI/cahs96SJJXdEfZSQZzumGw5iaWcvkiv1fxHM5CdEzOK47d8QKfE8jVzXIo4dXnvLFgLvHYUOyyH8xuw9SDV3m6wcM6lPiJoPOwPvJXZNcwef0jrLNhZqMVO951PsO7mIdxJs9egkron7S3g5E37lxq3si2eG+L97V4bu12VPy1b5DvVe3IG6VwTIV7tsV7o9jQ+6J6G6+LbxfGv+G7CSxnWVn6jXJ8o1pjfVljQ69b07D9dCgpDIa9QcWcCgQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgeOgBsCpmiv1bwJ+v4hVL'
const response = await fetch(stateDataUrl)
const state = await response.blob()
nostalgist = await Nostalgist.nes({ rom: 'flappybird.nes', state })
}

async function saveState() {
state = await nostalgist.saveState()
console.info(state)
Expand Down Expand Up @@ -109,6 +117,7 @@ document.body.addEventListener('click', async function listener({ target }) {
launchShader,
launchAndCancel,
launchWithHooks,
launchState,
saveState,
loadState,
pause,
Expand Down

0 comments on commit cef0c66

Please sign in to comment.