diff --git a/.changeset/README.md b/.changeset/README.md new file mode 100644 index 0000000000..e5b6d8d6a6 --- /dev/null +++ b/.changeset/README.md @@ -0,0 +1,8 @@ +# Changesets + +Hello and welcome! This folder has been automatically generated by `@changesets/cli`, a build tool that works +with multi-package repos, or single-package repos to help you version and publish your code. You can +find the full documentation for it [in our repository](https://github.com/changesets/changesets) + +We have a quick list of common questions to get you started engaging with this project in +[our documentation](https://github.com/changesets/changesets/blob/main/docs/common-questions.md) diff --git a/.changeset/config.json b/.changeset/config.json new file mode 100644 index 0000000000..8402de2313 --- /dev/null +++ b/.changeset/config.json @@ -0,0 +1,11 @@ +{ + "$schema": "https://unpkg.com/@changesets/config@2.3.0/schema.json", + "changelog": ["@svitejs/changesets-changelog-github-compact", { "repo": "sveltejs/svelte" }], + "commit": false, + "fixed": [], + "linked": [], + "access": "public", + "baseBranch": "master", + "bumpVersionsWithWorkspaceProtocolOnly": true, + "ignore": ["!(@sveltejs/*|svelte)"] +} diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index a093de610b..0000000000 --- a/.eslintrc.js +++ /dev/null @@ -1,14 +0,0 @@ -module.exports = { - root: true, - extends: '@sveltejs', - settings: { - 'import/core-modules': [ - 'svelte', - 'svelte/internal', - 'svelte/store', - 'svelte/easing', - 'estree' - ], - 'svelte3/compiler': require('./compiler') - } -}; diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md index 7daff3f1ab..220af11834 100644 --- a/.github/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE.md @@ -1,7 +1,7 @@ ------- +--- Before filing an issue we'd appreciate it if you could take a moment to ensure there isn't already an open issue or pull-request. ------ +--- If there's an existing issue, please add a :+1: reaction to the description of the issue. One way we prioritize issues is by the number of :+1: reactions on @@ -23,7 +23,6 @@ as you can including the following. - Svelte version (Please check you can reproduce the issue with the latest release!) - Whether your project uses Webpack or Rollup -- *Repeatable steps to reproduce the issue* +- _Repeatable steps to reproduce the issue_ -Thanks for being part of Svelte! -------- +## Thanks for being part of Svelte! diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 38a971864b..2e484e5ca2 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -1,6 +1,6 @@ name: "\U0001F41E Bug report" description: Report an issue with Svelte -labels: ["triage: bug"] +labels: ['triage: bug'] body: - type: markdown attributes: @@ -26,7 +26,7 @@ body: id: logs attributes: label: Logs - description: "Please include browser console and server logs around the time this bug occurred. Optional if provided reproduction. Please try not to insert an image but copy paste the log text." + description: 'Please include browser console and server logs around the time this bug occurred. Optional if provided reproduction. Please try not to insert an image but copy paste the log text.' render: shell - type: textarea id: system-info diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml index 2174f851a0..08aa9adcb9 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.yml +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -1,4 +1,4 @@ -name: "Feature Request" +name: 'Feature Request' description: Request a new Svelte feature labels: [enhancement] body: diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 28234b69df..83e0b253b3 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,12 +1,11 @@ -# HEADS UP: BIG RESTRUCTURING UNDERWAY - -The Svelte repo is currently in the process of heavy restructuring for Svelte 4. After that, work on Svelte 5 will likely change a lot on the compiler aswell. For that reason, please don't open PRs that are large in scope, touch more than a couple of files etc. In other words, bug fixes are fine, but feature PRs will likely not be merged. ### Before submitting the PR, please make sure you do the following + - [ ] It's really useful if your PR references an issue where it is discussed ahead of time. In many cases, features are absent for a reason. For large changes, please create an RFC: https://github.com/sveltejs/rfcs - [ ] Prefix your PR title with `feat:`, `fix:`, `chore:`, or `docs:`. - [ ] This message body should clearly illustrate what problems it solves. - [ ] Ideally, include a test that fails without this PR but passes with it. -### Tests -- [ ] Run the tests with `npm test` and lint the project with `npm run lint` +### Tests and linting + +- [ ] Run the tests with `pnpm test` and lint the project with `pnpm lint` diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1e0ce53864..b8e948b3a4 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,78 +1,42 @@ name: CI on: push: - branches: [ master ] + branches: [master] pull_request: permissions: contents: read # to fetch code (actions/checkout) + +env: + # We only install Chromium manually + PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: '1' + jobs: - Setup: - runs-on: ${{ matrix.os }} - strategy: - matrix: - os: [ubuntu-latest, windows-latest, macOS-latest] - steps: - - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 - with: - node-version: 18 - cache: npm - - run: npm install - env: - SKIP_PREPARE: true - - run: npm run build - env: - PUBLISH: true - - name: Upload build assets - id: upload-artifact - uses: actions/upload-artifact@v3 - with: - name: build-assets - path: | - index.* - compiler.* - ssr.* - action/ - animate/ - easing/ - internal/ - motion/ - store/ - transition/ - types/ Tests: - needs: Setup runs-on: ${{ matrix.os }} timeout-minutes: 15 strategy: matrix: - node-version: [8, 10, 12, 14, 16, 18] - os: [ubuntu-latest, windows-latest, macOS-latest] + include: + - node-version: 16 + os: ubuntu-latest + - node-version: 16 + os: windows-latest + - node-version: 16 + os: macOS-latest + - node-version: 18 + os: ubuntu-latest + - node-version: 20 + os: ubuntu-latest steps: - uses: actions/checkout@v3 + - uses: pnpm/action-setup@v2.2.4 - uses: actions/setup-node@v3 with: node-version: ${{ matrix.node-version }} - cache: npm - - name: Download build assets - uses: actions/download-artifact@v3 - id: download-artifact - with: - name: build-assets - - name: Get Node version ${{ runner.os }} - run: echo "NODE_VERSION=`node --version`" >> $GITHUB_ENV - if: runner.os != 'Windows' - - name: Get Node version ${{ runner.os }} - run: | - chcp 65001 - echo ("NODE_VERSION=$(node --version)") >> $env:GITHUB_ENV - if: runner.os == 'Windows' - - run: npm install --save-dev puppeteer@13 - if: ${{ runner.os == 'Linux' && (!startsWith(env.NODE_VERSION, 'v8.') && !startsWith(env.NODE_VERSION, 'v10.')) }} - - run: npm install - env: - SKIP_PREPARE: true - - run: npm run test:integration + cache: pnpm + - run: pnpm install --frozen-lockfile + - run: pnpm playwright install chromium + - run: pnpm test env: CI: true Lint: @@ -80,22 +44,9 @@ jobs: timeout-minutes: 5 steps: - uses: actions/checkout@v3 + - uses: pnpm/action-setup@v2.2.4 - uses: actions/setup-node@v3 with: - cache: npm - - run: 'npm i && npm run lint' - Unit: - runs-on: ${{ matrix.os }} - timeout-minutes: 10 - strategy: - matrix: - os: [ubuntu-latest, windows-latest, macOS-latest] - steps: - - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 - with: - cache: npm - - run: npm install - env: - SKIP_PREPARE: true - - run: npm run test:unit + node-version: 16 + cache: pnpm + - run: 'pnpm i && pnpm check && pnpm lint' diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml deleted file mode 100644 index 763fb72577..0000000000 --- a/.github/workflows/docs.yml +++ /dev/null @@ -1,30 +0,0 @@ -name: Docs - -on: - push: - branches: - - master - paths: - - site/content/** - -permissions: {} - -jobs: - release: - name: Deploy docs - runs-on: ubuntu-latest - steps: - - name: my-app-install token - id: github-app - uses: getsentry/action-github-app-token@v1 - with: - app_id: ${{ secrets.GH_APP_ID }} - private_key: ${{ secrets.GH_APP_PRIVATE_KEY }} - - - name: run deploy docs workflow - uses: 'sveltejs/action-deploy-docs/dispatch@main' - with: - repo: 'svelte' - branch: 'master' - docs_path: 'site/content' - token: ${{ steps.github-app.outputs.token }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000000..bd590aff5f --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,41 @@ +name: Release + +on: + push: + branches: + - master + +permissions: {} +jobs: + release: + # prevents this action from running on forks + if: github.repository == 'sveltejs/svelte' + permissions: + contents: write # to create release (changesets/action) + pull-requests: write # to create pull request (changesets/action) + name: Release + runs-on: ubuntu-latest + steps: + - name: Checkout Repo + uses: actions/checkout@v3 + with: + # This makes Actions fetch all Git history so that Changesets can generate changelogs with the correct commits + fetch-depth: 0 + - uses: pnpm/action-setup@v2.2.4 + - name: Setup Node.js + uses: actions/setup-node@v3 + with: + node-version: 18.x + cache: pnpm + + - run: pnpm install --frozen-lockfile + + - name: Create Release Pull Request or Publish to npm + id: changesets + uses: changesets/action@v1 + with: + version: pnpm changeset:version + publish: pnpm changeset:publish + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + NPM_TOKEN: ${{ secrets.NPM_TOKEN }} diff --git a/.gitignore b/.gitignore index e70d995994..cc2e05ea5f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,24 +1,6 @@ .idea .DS_Store -.vscode +.vscode/* +!.vscode/launch.json node_modules -*.map -/src/compiler/compile/internal_exports.ts -/compiler.d.ts -/compiler.*js -/index.*js -/ssr.*js -/action -/internal -/store -/easing -/motion -/transition -/animate -/scratch/ -/test/*/samples/_ -/yarn-error.log -_actual*.* -_output -/types .eslintcache diff --git a/.mocharc.js b/.mocharc.js deleted file mode 100644 index 449f81ecd6..0000000000 --- a/.mocharc.js +++ /dev/null @@ -1,14 +0,0 @@ -const is_unit_test = process.env.UNIT_TEST; - -module.exports = { - file: is_unit_test ? [] : ['test/test.ts'], - require: [ - 'sucrase/register' - ] -}; - -// add coverage options when running 'npx c8 mocha' -if (process.env.NODE_V8_COVERAGE) { - module.exports.fullTrace = true; - module.exports.require.push('source-map-support/register'); -} diff --git a/.mocharc.unit.js b/.mocharc.unit.js deleted file mode 100644 index 387d70e7e0..0000000000 --- a/.mocharc.unit.js +++ /dev/null @@ -1,15 +0,0 @@ -module.exports = { - spec: [ - 'src/**/__test__.ts', - ], - require: [ - 'sucrase/register' - ], - recursive: true, -}; - -// add coverage options when running 'npx c8 mocha' -if (process.env.NODE_V8_COVERAGE) { - module.exports.fullTrace = true; - module.exports.require.push('source-map-support/register'); -} diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000000..33484750d0 --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +playwright_skip_browser_download=1 \ No newline at end of file diff --git a/.pnpm-debug.log b/.pnpm-debug.log new file mode 100644 index 0000000000..bf4ed5f049 --- /dev/null +++ b/.pnpm-debug.log @@ -0,0 +1,47 @@ +{ + "0 debug pnpm:scope": { + "selected": 2, + "total": 4, + "workspacePrefix": "/Users/mathiaspicker/Documents/2023/svelte" + }, + "1 debug pnpm:lifecycle": { + "depPath": "/Users/mathiaspicker/Documents/2023/svelte/packages/svelte", + "optional": false, + "script": "vitest run && echo \"manually check that there are no type errors in test/types by opening the files in there\"", + "stage": "test", + "wd": "/Users/mathiaspicker/Documents/2023/svelte/packages/svelte" + }, + "2 debug pnpm:lifecycle": { + "depPath": "/Users/mathiaspicker/Documents/2023/svelte/packages/svelte", + "line": "sh: vitest: command not found", + "stage": "test", + "stdio": "stderr", + "wd": "/Users/mathiaspicker/Documents/2023/svelte/packages/svelte" + }, + "3 info pnpm": { + "err": { + "name": "Error", + "message": "svelte@4.2.0 test: `vitest run && echo \"manually check that there are no type errors in test/types by opening the files in there\"`\nspawn ENOENT", + "code": "ELIFECYCLE", + "stack": "Error: svelte@4.2.0 test: `vitest run && echo \"manually check that there are no type errors in test/types by opening the files in there\"`\nspawn ENOENT\n at ChildProcess. (/Users/mathiaspicker/pnpm-global/5/node_modules/.pnpm/pnpm@7.3.0/node_modules/pnpm/dist/pnpm.cjs:94974:22)\n at ChildProcess.emit (node:events:513:28)\n at maybeClose (node:internal/child_process:1091:16)\n at Socket. (node:internal/child_process:449:11)\n at Socket.emit (node:events:513:28)\n at Pipe. (node:net:313:12)" + } + }, + "4 error pnpm": { + "code": "ERR_PNPM_RECURSIVE_RUN_FIRST_FAIL", + "errno": "ENOENT", + "syscall": "spawn", + "file": "sh", + "pkgid": "svelte@4.2.0", + "stage": "test", + "script": "vitest run && echo \"manually check that there are no type errors in test/types by opening the files in there\"", + "pkgname": "svelte", + "prefix": "/Users/mathiaspicker/Documents/2023/svelte/packages/svelte", + "err": { + "name": "pnpm", + "message": "svelte@4.2.0 test: `vitest run && echo \"manually check that there are no type errors in test/types by opening the files in there\"`\nspawn ENOENT", + "code": "ERR_PNPM_RECURSIVE_RUN_FIRST_FAIL", + "stack": "Error: svelte@4.2.0 test: `vitest run && echo \"manually check that there are no type errors in test/types by opening the files in there\"`\nspawn ENOENT\n at ChildProcess. (/Users/mathiaspicker/pnpm-global/5/node_modules/.pnpm/pnpm@7.3.0/node_modules/pnpm/dist/pnpm.cjs:94974:22)\n at ChildProcess.emit (node:events:513:28)\n at maybeClose (node:internal/child_process:1091:16)\n at Socket. (node:internal/child_process:449:11)\n at Socket.emit (node:events:513:28)\n at Pipe. (node:net:313:12)" + } + }, + "5 warn pnpm:global": " Local package.json exists, but node_modules missing, did you mean to install?" +} \ No newline at end of file diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000000..0ea7a0b1e9 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,23 @@ +{ + "useTabs": true, + "singleQuote": true, + "trailingComma": "none", + "printWidth": 100, + "plugins": ["prettier-plugin-svelte"], + "overrides": [ + { + "files": ["*.svelte"], + "options": { + "bracketSameLine": false + } + }, + { + "files": ["README.md", "packages/*/README.md", "**/package.json"], + "options": { + "useTabs": false, + "tabWidth": 2 + } + } + ], + "pluginSearchDirs": ["."] +} diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000000..2e22a5ab9b --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,27 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "type": "chrome", + "request": "launch", + "name": "Playground: Browser", + "url": "http://localhost:10001" + }, + { + "type": "node", + "request": "launch", + "runtimeArgs": ["--watch"], + "name": "Playground: Server", + "outputCapture": "std", + "program": "start.js", + "cwd": "${workspaceFolder}/packages/playground", + "cascadeTerminateToConfigurations": ["Playground: Browser"] + } + ], + "compounds": [ + { + "name": "Playground: Full", + "configurations": ["Playground: Server", "Playground: Browser"] + } + ] +} diff --git a/CHANGELOG.md b/CHANGELOG.md deleted file mode 100644 index f256d32448..0000000000 --- a/CHANGELOG.md +++ /dev/null @@ -1,2624 +0,0 @@ -# Svelte changelog - -## 3.59.1 - -* Handle dynamic values in `a11y-autocomplete-valid` ([#8567](https://github.com/sveltejs/svelte/pull/8567)) - -## 3.59.0 - -* Add `ResizeObserver` bindings `contentRect`/`contentBoxSize`/`borderBoxSize`/`devicePixelContentBoxSize` ([#8022](https://github.com/sveltejs/svelte/pull/8022)) -* Add `devicePixelRatio` binding for `` ([#8285](https://github.com/sveltejs/svelte/issues/8285)) -* Add `fullscreenElement` and `visibilityState` bindings for `` ([#8507](https://github.com/sveltejs/svelte/pull/8507)) -* Add `a11y-autocomplete-valid` warning ([#8520](https://github.com/sveltejs/svelte/pull/8520)) -* Fix handling of `width`/`height` attributes when spreading ([#6752](https://github.com/sveltejs/svelte/issues/6752)) -* Fix updating of interpolated `style:` directive when using spread ([#8438](https://github.com/sveltejs/svelte/issues/8438)) -* Remove `style:` directive property when value is `undefined` ([#8462](https://github.com/sveltejs/svelte/issues/8462)) -* Fix type of `VERSION` compiler export ([#8498](https://github.com/sveltejs/svelte/issues/8498)) -* Relax `a11y-no-redundant-roles` warning ([#8536](https://github.com/sveltejs/svelte/pull/8536)) -* Handle nested array rest destructuring ([#8552](https://github.com/sveltejs/svelte/issues/8552), [#8554](https://github.com/sveltejs/svelte/issues/8554)) - -## 3.58.0 - -* Add `bind:innerText` for `contenteditable` elements ([#3311](https://github.com/sveltejs/svelte/issues/3311)) -* Add support for CSS `@container` queries ([#6969](https://github.com/sveltejs/svelte/issues/6969)) -* Respect `preserveComments` in DOM output ([#7182](https://github.com/sveltejs/svelte/pull/7182)) -* Allow use of `document` for `target` in typings ([#7554](https://github.com/sveltejs/svelte/pull/7554)) -* Add `a11y-interactive-supports-focus` warning ([#8392](https://github.com/sveltejs/svelte/pull/8392)) -* Fix equality check when updating dynamic text ([#5931](https://github.com/sveltejs/svelte/issues/5931)) -* Relax `a11y-no-noninteractive-element-to-interactive-role` warning ([#8402](https://github.com/sveltejs/svelte/pull/8402)) -* Properly handle microdata attributes ([#8413](https://github.com/sveltejs/svelte/issues/8413)) -* Prevent name collision when using computed destructuring variables ([#8417](https://github.com/sveltejs/svelte/issues/8417)) -* Fix escaping `', + test({ assert, target }) { + const textarea = target.querySelector('textarea'); + assert.ok(textarea.readOnly); + } +}; diff --git a/test/runtime/samples/attribute-static-boolean/main.svelte b/packages/svelte/test/runtime/samples/attribute-static-boolean/main.svelte similarity index 100% rename from test/runtime/samples/attribute-static-boolean/main.svelte rename to packages/svelte/test/runtime/samples/attribute-static-boolean/main.svelte diff --git a/test/runtime/samples/attribute-static-quotemarks/_config.js b/packages/svelte/test/runtime/samples/attribute-static-quotemarks/_config.js similarity index 100% rename from test/runtime/samples/attribute-static-quotemarks/_config.js rename to packages/svelte/test/runtime/samples/attribute-static-quotemarks/_config.js diff --git a/test/runtime/samples/attribute-static-quotemarks/main.svelte b/packages/svelte/test/runtime/samples/attribute-static-quotemarks/main.svelte similarity index 100% rename from test/runtime/samples/attribute-static-quotemarks/main.svelte rename to packages/svelte/test/runtime/samples/attribute-static-quotemarks/main.svelte diff --git a/test/runtime/samples/attribute-static/_config.js b/packages/svelte/test/runtime/samples/attribute-static/_config.js similarity index 100% rename from test/runtime/samples/attribute-static/_config.js rename to packages/svelte/test/runtime/samples/attribute-static/_config.js diff --git a/test/runtime/samples/attribute-static/main.svelte b/packages/svelte/test/runtime/samples/attribute-static/main.svelte similarity index 100% rename from test/runtime/samples/attribute-static/main.svelte rename to packages/svelte/test/runtime/samples/attribute-static/main.svelte diff --git a/test/runtime/samples/attribute-undefined/_config.js b/packages/svelte/test/runtime/samples/attribute-undefined/_config.js similarity index 100% rename from test/runtime/samples/attribute-undefined/_config.js rename to packages/svelte/test/runtime/samples/attribute-undefined/_config.js diff --git a/test/runtime/samples/attribute-undefined/main.svelte b/packages/svelte/test/runtime/samples/attribute-undefined/main.svelte similarity index 100% rename from test/runtime/samples/attribute-undefined/main.svelte rename to packages/svelte/test/runtime/samples/attribute-undefined/main.svelte diff --git a/test/runtime/samples/attribute-unknown-without-value/_config.js b/packages/svelte/test/runtime/samples/attribute-unknown-without-value/_config.js similarity index 100% rename from test/runtime/samples/attribute-unknown-without-value/_config.js rename to packages/svelte/test/runtime/samples/attribute-unknown-without-value/_config.js diff --git a/test/runtime/samples/attribute-unknown-without-value/main.svelte b/packages/svelte/test/runtime/samples/attribute-unknown-without-value/main.svelte similarity index 100% rename from test/runtime/samples/attribute-unknown-without-value/main.svelte rename to packages/svelte/test/runtime/samples/attribute-unknown-without-value/main.svelte diff --git a/packages/svelte/test/runtime/samples/attribute-url/_config.js b/packages/svelte/test/runtime/samples/attribute-url/_config.js new file mode 100644 index 0000000000..48227d0106 --- /dev/null +++ b/packages/svelte/test/runtime/samples/attribute-url/_config.js @@ -0,0 +1,8 @@ +export default { + test({ assert, target }) { + const div = target.querySelector('div'); + + assert.equal(div.style.backgroundImage, 'url(https://example.com/foo.jpg)'); + assert.equal(div.style.color, 'red'); + } +}; diff --git a/test/runtime/samples/attribute-url/main.svelte b/packages/svelte/test/runtime/samples/attribute-url/main.svelte similarity index 100% rename from test/runtime/samples/attribute-url/main.svelte rename to packages/svelte/test/runtime/samples/attribute-url/main.svelte diff --git a/packages/svelte/test/runtime/samples/autofocus/_config.js b/packages/svelte/test/runtime/samples/autofocus/_config.js new file mode 100644 index 0000000000..f9873b5b66 --- /dev/null +++ b/packages/svelte/test/runtime/samples/autofocus/_config.js @@ -0,0 +1,36 @@ +export default { + html: '', + + test({ assert, component, target, window }) { + component.active = 'default'; + assert.equal(target.querySelector('input[title="default"]'), window.document.activeElement); + + component.active = 'dynamic-false'; + assert.notEqual( + target.querySelector('input[title="dynamic-false"]'), + window.document.activeElement + ); + + // when dynamically set autofocus to true, don't autofocus + component.autofocusFalse = true; + assert.notEqual( + target.querySelector('input[title="dynamic-false"]'), + window.document.activeElement + ); + + component.active = 'dynamic-true'; + assert.equal( + target.querySelector('input[title="dynamic-true"]'), + window.document.activeElement + ); + + component.active = 'spread'; + assert.equal(target.querySelector('input[title="spread"]'), window.document.activeElement); + + component.active = 'spread-override'; + assert.notEqual( + target.querySelector('input[title="spread-override"]'), + window.document.activeElement + ); + } +}; diff --git a/test/runtime/samples/autofocus/main.svelte b/packages/svelte/test/runtime/samples/autofocus/main.svelte similarity index 100% rename from test/runtime/samples/autofocus/main.svelte rename to packages/svelte/test/runtime/samples/autofocus/main.svelte diff --git a/packages/svelte/test/runtime/samples/await-block-func-function/_config.js b/packages/svelte/test/runtime/samples/await-block-func-function/_config.js new file mode 100644 index 0000000000..e62b15fa9b --- /dev/null +++ b/packages/svelte/test/runtime/samples/await-block-func-function/_config.js @@ -0,0 +1,25 @@ +export default { + get props() { + return { + thePromise: new Promise((_) => {}) + }; + }, + + html: ` + Waiting... + `, + + async test({ assert, component, target }) { + await (component.thePromise = Promise.resolve({ func: 12345 })); + + assert.htmlEqual(target.innerHTML, '12345'); + + try { + await (component.thePromise = Promise.reject({ func: 67890 })); + } catch (e) { + // do nothing + } + + assert.htmlEqual(target.innerHTML, '67890'); + } +}; diff --git a/packages/svelte/test/runtime/samples/await-block-func-function/main.svelte b/packages/svelte/test/runtime/samples/await-block-func-function/main.svelte new file mode 100644 index 0000000000..6d36038d6f --- /dev/null +++ b/packages/svelte/test/runtime/samples/await-block-func-function/main.svelte @@ -0,0 +1,11 @@ + + +{#await thePromise} + Waiting... +{:then { func }} + {(() => func)()} +{:catch { func: func_1 }} + {(() => func_1)()} +{/await} diff --git a/packages/svelte/test/runtime/samples/await-catch-no-expression/_config.js b/packages/svelte/test/runtime/samples/await-catch-no-expression/_config.js new file mode 100644 index 0000000000..65580f926e --- /dev/null +++ b/packages/svelte/test/runtime/samples/await-catch-no-expression/_config.js @@ -0,0 +1,46 @@ +import { create_deferred } from '../../../helpers.js'; + +let deferred; + +export default { + before_test() { + deferred = create_deferred(); + }, + + get props() { + return { thePromise: deferred.promise }; + }, + + html: ` +
+

the promise is pending

+ `, + + async test({ assert, component, target }) { + deferred.resolve(42); + + await deferred.promise; + + assert.htmlEqual(target.innerHTML, '
'); + + deferred = create_deferred(); + component.thePromise = deferred.promise; + + assert.htmlEqual(target.innerHTML, '

the promise is pending

'); + + const rejection = deferred.promise + .catch(() => {}) + .finally(() => { + assert.htmlEqual( + target.innerHTML, + `

oh no! Something broke!

+
+

oh no! Something broke!

` + ); + }); + + deferred.reject(new Error()); + + await rejection; + } +}; diff --git a/test/runtime/samples/await-catch-no-expression/main.svelte b/packages/svelte/test/runtime/samples/await-catch-no-expression/main.svelte similarity index 100% rename from test/runtime/samples/await-catch-no-expression/main.svelte rename to packages/svelte/test/runtime/samples/await-catch-no-expression/main.svelte diff --git a/packages/svelte/test/runtime/samples/await-catch-shorthand/_config.js b/packages/svelte/test/runtime/samples/await-catch-shorthand/_config.js new file mode 100644 index 0000000000..ccf1533f0e --- /dev/null +++ b/packages/svelte/test/runtime/samples/await-catch-shorthand/_config.js @@ -0,0 +1,37 @@ +import { create_deferred } from '../../../helpers.js'; + +let deferred; + +export default { + before_test() { + deferred = create_deferred(); + }, + + get props() { + return { thePromise: deferred.promise }; + }, + + html: '', + + test({ assert, component, target }) { + deferred.resolve(42); + + return deferred.promise + .then(() => { + assert.htmlEqual(target.innerHTML, ''); + + deferred = create_deferred(); + + component.thePromise = deferred.promise; + + assert.htmlEqual(target.innerHTML, ''); + + deferred.reject(new Error('something broke')); + + return deferred.promise.catch(() => {}); + }) + .then(() => { + assert.htmlEqual(target.innerHTML, '

oh no! something broke

'); + }); + } +}; diff --git a/test/runtime/samples/await-catch-shorthand/main.svelte b/packages/svelte/test/runtime/samples/await-catch-shorthand/main.svelte similarity index 100% rename from test/runtime/samples/await-catch-shorthand/main.svelte rename to packages/svelte/test/runtime/samples/await-catch-shorthand/main.svelte diff --git a/test/runtime/samples/await-component-oncreate/Foo.svelte b/packages/svelte/test/runtime/samples/await-component-oncreate/Foo.svelte similarity index 100% rename from test/runtime/samples/await-component-oncreate/Foo.svelte rename to packages/svelte/test/runtime/samples/await-component-oncreate/Foo.svelte diff --git a/packages/svelte/test/runtime/samples/await-component-oncreate/_config.js b/packages/svelte/test/runtime/samples/await-component-oncreate/_config.js new file mode 100644 index 0000000000..a8fc21c75d --- /dev/null +++ b/packages/svelte/test/runtime/samples/await-component-oncreate/_config.js @@ -0,0 +1,19 @@ +const promise = Promise.resolve(42); + +export default { + get props() { + return { promise }; + }, + + test({ assert, target }) { + return promise.then(() => { + assert.htmlEqual( + target.innerHTML, + ` +

42

+

true

+ ` + ); + }); + } +}; diff --git a/test/runtime/samples/await-component-oncreate/main.svelte b/packages/svelte/test/runtime/samples/await-component-oncreate/main.svelte similarity index 100% rename from test/runtime/samples/await-component-oncreate/main.svelte rename to packages/svelte/test/runtime/samples/await-component-oncreate/main.svelte diff --git a/packages/svelte/test/runtime/samples/await-conservative-update/_config.js b/packages/svelte/test/runtime/samples/await-conservative-update/_config.js new file mode 100644 index 0000000000..eed0493997 --- /dev/null +++ b/packages/svelte/test/runtime/samples/await-conservative-update/_config.js @@ -0,0 +1,19 @@ +import { sleep } from './sleep.js'; + +export default { + html: ` +

loading...

+ `, + + test({ assert, target }) { + return sleep(50).then(() => { + assert.htmlEqual( + target.innerHTML, + ` +

the answer is 42

+

count: 1

+ ` + ); + }); + } +}; diff --git a/test/runtime/samples/await-conservative-update/main.svelte b/packages/svelte/test/runtime/samples/await-conservative-update/main.svelte similarity index 100% rename from test/runtime/samples/await-conservative-update/main.svelte rename to packages/svelte/test/runtime/samples/await-conservative-update/main.svelte diff --git a/packages/svelte/test/runtime/samples/await-conservative-update/sleep.js b/packages/svelte/test/runtime/samples/await-conservative-update/sleep.js new file mode 100644 index 0000000000..e69d86817a --- /dev/null +++ b/packages/svelte/test/runtime/samples/await-conservative-update/sleep.js @@ -0,0 +1,12 @@ +export let stopped = false; + +export const stop = () => (stopped = true); + +export const sleep = (ms) => + new Promise((f) => { + if (stopped) return; + setTimeout(() => { + if (stopped) return; + f(); + }, ms); + }); diff --git a/packages/svelte/test/runtime/samples/await-containing-if/_config.js b/packages/svelte/test/runtime/samples/await-containing-if/_config.js new file mode 100644 index 0000000000..13570c2192 --- /dev/null +++ b/packages/svelte/test/runtime/samples/await-containing-if/_config.js @@ -0,0 +1,41 @@ +import { create_deferred } from '../../../helpers.js'; + +let deferred; + +export default { + before_test() { + deferred = create_deferred(); + }, + + get props() { + return { thePromise: deferred.promise, show: true }; + }, + + html: ` +

loading...

+ `, + + test({ assert, component, target }) { + deferred.resolve(42); + + return deferred.promise.then(() => { + assert.htmlEqual( + target.innerHTML, + ` +

the value is 42

+ ` + ); + + component.show = false; + assert.htmlEqual(target.innerHTML, '
'); + + component.show = true; + assert.htmlEqual( + target.innerHTML, + ` +

the value is 42

+ ` + ); + }); + } +}; diff --git a/test/runtime/samples/await-containing-if/main.svelte b/packages/svelte/test/runtime/samples/await-containing-if/main.svelte similarity index 100% rename from test/runtime/samples/await-containing-if/main.svelte rename to packages/svelte/test/runtime/samples/await-containing-if/main.svelte diff --git a/packages/svelte/test/runtime/samples/await-function-promise/_config.js b/packages/svelte/test/runtime/samples/await-function-promise/_config.js new file mode 100644 index 0000000000..01fe60cd0b --- /dev/null +++ b/packages/svelte/test/runtime/samples/await-function-promise/_config.js @@ -0,0 +1,22 @@ +const realPromise = Promise.resolve(42); + +const promise = () => {}; +promise.then = realPromise.then.bind(realPromise); +promise.catch = realPromise.catch.bind(realPromise); + +export default { + get props() { + return { promise }; + }, + + test({ assert, target }) { + return promise.then(() => { + assert.htmlEqual( + target.innerHTML, + ` +

42

+ ` + ); + }); + } +}; diff --git a/test/runtime/samples/await-function-promise/main.svelte b/packages/svelte/test/runtime/samples/await-function-promise/main.svelte similarity index 100% rename from test/runtime/samples/await-function-promise/main.svelte rename to packages/svelte/test/runtime/samples/await-function-promise/main.svelte diff --git a/test/runtime/samples/await-in-dynamic-component/Widget.svelte b/packages/svelte/test/runtime/samples/await-in-dynamic-component/Widget.svelte similarity index 100% rename from test/runtime/samples/await-in-dynamic-component/Widget.svelte rename to packages/svelte/test/runtime/samples/await-in-dynamic-component/Widget.svelte diff --git a/test/runtime/samples/await-in-dynamic-component/_config.js b/packages/svelte/test/runtime/samples/await-in-dynamic-component/_config.js similarity index 100% rename from test/runtime/samples/await-in-dynamic-component/_config.js rename to packages/svelte/test/runtime/samples/await-in-dynamic-component/_config.js diff --git a/test/runtime/samples/await-in-dynamic-component/main.svelte b/packages/svelte/test/runtime/samples/await-in-dynamic-component/main.svelte similarity index 100% rename from test/runtime/samples/await-in-dynamic-component/main.svelte rename to packages/svelte/test/runtime/samples/await-in-dynamic-component/main.svelte diff --git a/packages/svelte/test/runtime/samples/await-in-each/_config.js b/packages/svelte/test/runtime/samples/await-in-each/_config.js new file mode 100644 index 0000000000..0e4109ea49 --- /dev/null +++ b/packages/svelte/test/runtime/samples/await-in-each/_config.js @@ -0,0 +1,35 @@ +let fulfil; + +const thePromise = new Promise((f) => { + fulfil = f; +}); + +const items = [ + { + title: 'a title', + data: thePromise + } +]; + +export default { + get props() { + return { items }; + }, + + html: ` +

a title: loading...

+ `, + + test({ assert, target }) { + fulfil(42); + + return thePromise.then(() => { + assert.htmlEqual( + target.innerHTML, + ` +

a title: 42

+ ` + ); + }); + } +}; diff --git a/test/runtime/samples/await-in-each/main.svelte b/packages/svelte/test/runtime/samples/await-in-each/main.svelte similarity index 100% rename from test/runtime/samples/await-in-each/main.svelte rename to packages/svelte/test/runtime/samples/await-in-each/main.svelte diff --git a/packages/svelte/test/runtime/samples/await-in-removed-if/_config.js b/packages/svelte/test/runtime/samples/await-in-removed-if/_config.js new file mode 100644 index 0000000000..1030db991f --- /dev/null +++ b/packages/svelte/test/runtime/samples/await-in-removed-if/_config.js @@ -0,0 +1,22 @@ +let fulfil; + +const promise = new Promise((f) => { + fulfil = f; +}); + +export default { + get props() { + return { promise }; + }, + + html: '', + + async test({ assert, component, target }) { + component.condition = false; + + fulfil(); + await new Promise((f) => setTimeout(f, 0)); + + assert.htmlEqual(target.innerHTML, ''); + } +}; diff --git a/test/runtime/samples/await-in-removed-if/main.svelte b/packages/svelte/test/runtime/samples/await-in-removed-if/main.svelte similarity index 100% rename from test/runtime/samples/await-in-removed-if/main.svelte rename to packages/svelte/test/runtime/samples/await-in-removed-if/main.svelte diff --git a/test/runtime/samples/await-mount-and-unmount-immediately/Component.svelte b/packages/svelte/test/runtime/samples/await-mount-and-unmount-immediately/Component.svelte similarity index 100% rename from test/runtime/samples/await-mount-and-unmount-immediately/Component.svelte rename to packages/svelte/test/runtime/samples/await-mount-and-unmount-immediately/Component.svelte diff --git a/test/runtime/samples/await-mount-and-unmount-immediately/_config.js b/packages/svelte/test/runtime/samples/await-mount-and-unmount-immediately/_config.js similarity index 100% rename from test/runtime/samples/await-mount-and-unmount-immediately/_config.js rename to packages/svelte/test/runtime/samples/await-mount-and-unmount-immediately/_config.js diff --git a/test/runtime/samples/await-mount-and-unmount-immediately/main.svelte b/packages/svelte/test/runtime/samples/await-mount-and-unmount-immediately/main.svelte similarity index 100% rename from test/runtime/samples/await-mount-and-unmount-immediately/main.svelte rename to packages/svelte/test/runtime/samples/await-mount-and-unmount-immediately/main.svelte diff --git a/packages/svelte/test/runtime/samples/await-set-simultaneous-reactive/_config.js b/packages/svelte/test/runtime/samples/await-set-simultaneous-reactive/_config.js new file mode 100644 index 0000000000..1f1ccacffc --- /dev/null +++ b/packages/svelte/test/runtime/samples/await-set-simultaneous-reactive/_config.js @@ -0,0 +1,14 @@ +export default { + html: '

wait for it...

', + test({ assert, component, target }) { + return component.promise.then(() => { + assert.htmlEqual( + target.innerHTML, + ` +

the answer is 42!

+

the answer100 is 4200!

+ ` + ); + }); + } +}; diff --git a/test/runtime/samples/await-set-simultaneous-reactive/main.svelte b/packages/svelte/test/runtime/samples/await-set-simultaneous-reactive/main.svelte similarity index 100% rename from test/runtime/samples/await-set-simultaneous-reactive/main.svelte rename to packages/svelte/test/runtime/samples/await-set-simultaneous-reactive/main.svelte diff --git a/packages/svelte/test/runtime/samples/await-set-simultaneous/_config.js b/packages/svelte/test/runtime/samples/await-set-simultaneous/_config.js new file mode 100644 index 0000000000..88feed7c13 --- /dev/null +++ b/packages/svelte/test/runtime/samples/await-set-simultaneous/_config.js @@ -0,0 +1,20 @@ +export default { + test({ assert, component, target }) { + const promise = Promise.resolve().then(() => { + component.answer = 42; + }); + + component.promise = promise; + + assert.htmlEqual(target.innerHTML, '

wait for it...

'); + + return promise.then(() => { + assert.htmlEqual( + target.innerHTML, + ` +

the answer is 42!

+ ` + ); + }); + } +}; diff --git a/test/runtime/samples/await-set-simultaneous/main.svelte b/packages/svelte/test/runtime/samples/await-set-simultaneous/main.svelte similarity index 100% rename from test/runtime/samples/await-set-simultaneous/main.svelte rename to packages/svelte/test/runtime/samples/await-set-simultaneous/main.svelte diff --git a/test/runtime/samples/await-then-blowback-reactive/Widget.svelte b/packages/svelte/test/runtime/samples/await-then-blowback-reactive/Widget.svelte similarity index 100% rename from test/runtime/samples/await-then-blowback-reactive/Widget.svelte rename to packages/svelte/test/runtime/samples/await-then-blowback-reactive/Widget.svelte diff --git a/test/runtime/samples/await-then-blowback-reactive/_config.js b/packages/svelte/test/runtime/samples/await-then-blowback-reactive/_config.js similarity index 100% rename from test/runtime/samples/await-then-blowback-reactive/_config.js rename to packages/svelte/test/runtime/samples/await-then-blowback-reactive/_config.js diff --git a/test/runtime/samples/await-then-blowback-reactive/main.svelte b/packages/svelte/test/runtime/samples/await-then-blowback-reactive/main.svelte similarity index 100% rename from test/runtime/samples/await-then-blowback-reactive/main.svelte rename to packages/svelte/test/runtime/samples/await-then-blowback-reactive/main.svelte diff --git a/packages/svelte/test/runtime/samples/await-then-catch-anchor/_config.js b/packages/svelte/test/runtime/samples/await-then-catch-anchor/_config.js new file mode 100644 index 0000000000..1f41e87f35 --- /dev/null +++ b/packages/svelte/test/runtime/samples/await-then-catch-anchor/_config.js @@ -0,0 +1,44 @@ +import { create_deferred } from '../../../helpers.js'; + +let deferred; + +export default { + before_test() { + deferred = create_deferred(); + }, + + get props() { + return { thePromise: deferred.promise }; + }, + + html: ` +

loading...

+ `, + + test({ assert, component, target }) { + deferred.resolve(42); + + return deferred.promise + .then(() => { + assert.htmlEqual( + target.innerHTML, + ` +

the value is 42

+ ` + ); + + deferred = create_deferred(); + + component.thePromise = deferred.promise; + + assert.htmlEqual(target.innerHTML, '

loading...

'); + + deferred.reject(new Error('something broke')); + + return deferred.promise.catch(() => {}); + }) + .then(() => { + assert.htmlEqual(target.innerHTML, '

oh no! something broke

'); + }); + } +}; diff --git a/test/runtime/samples/await-then-catch-anchor/main.svelte b/packages/svelte/test/runtime/samples/await-then-catch-anchor/main.svelte similarity index 100% rename from test/runtime/samples/await-then-catch-anchor/main.svelte rename to packages/svelte/test/runtime/samples/await-then-catch-anchor/main.svelte diff --git a/packages/svelte/test/runtime/samples/await-then-catch-event/_config.js b/packages/svelte/test/runtime/samples/await-then-catch-event/_config.js new file mode 100644 index 0000000000..2705eb7e17 --- /dev/null +++ b/packages/svelte/test/runtime/samples/await-then-catch-event/_config.js @@ -0,0 +1,45 @@ +import { create_deferred } from '../../../helpers.js'; + +let deferred; + +export default { + before_test() { + deferred = create_deferred(); + }, + get props() { + return { thePromise: deferred.promise }; + }, + + html: ` +

loading...

+ `, + + test({ assert, component, target, window }) { + deferred.resolve(42); + + return deferred.promise + .then(async () => { + assert.htmlEqual(target.innerHTML, ''); + + const { button } = component; + + const click = new window.MouseEvent('click'); + button.dispatchEvent(click); + + assert.equal(component.clicked, 42); + + const thePromise = Promise.resolve(43); + component.thePromise = thePromise; + + return thePromise; + }) + .then(() => { + const { button } = component; + + const click = new window.MouseEvent('click'); + button.dispatchEvent(click); + + assert.equal(component.clicked, 43); + }); + } +}; diff --git a/test/runtime/samples/await-then-catch-event/main.svelte b/packages/svelte/test/runtime/samples/await-then-catch-event/main.svelte similarity index 100% rename from test/runtime/samples/await-then-catch-event/main.svelte rename to packages/svelte/test/runtime/samples/await-then-catch-event/main.svelte diff --git a/packages/svelte/test/runtime/samples/await-then-catch-if-already-resolved/_config.js b/packages/svelte/test/runtime/samples/await-then-catch-if-already-resolved/_config.js new file mode 100644 index 0000000000..8b96926bcb --- /dev/null +++ b/packages/svelte/test/runtime/samples/await-then-catch-if-already-resolved/_config.js @@ -0,0 +1,34 @@ +const thePromise = Promise.resolve(42); + +export default { + props: { + show: true, + thePromise + }, + + // if svelte has never seen the promise before then the await block is rendered the first time + html: ` +

loading...

+ `, + + test({ assert, component, target }) { + return thePromise + .then(() => { + assert.htmlEqual(target.innerHTML, ` +

the value is 42

+ `); + + component.show = false; + + assert.htmlEqual(target.innerHTML, ` +

Else

+ `); + + component.show = true; + + return assert.htmlEqual(target.innerHTML, ` +

the value is 42

+ `); + }); + } +}; diff --git a/test/runtime/samples/await-then-catch-if/main.svelte b/packages/svelte/test/runtime/samples/await-then-catch-if-already-resolved/main.svelte similarity index 100% rename from test/runtime/samples/await-then-catch-if/main.svelte rename to packages/svelte/test/runtime/samples/await-then-catch-if-already-resolved/main.svelte diff --git a/packages/svelte/test/runtime/samples/await-then-catch-if-catch/_config.js b/packages/svelte/test/runtime/samples/await-then-catch-if-catch/_config.js new file mode 100644 index 0000000000..78494e80f4 --- /dev/null +++ b/packages/svelte/test/runtime/samples/await-then-catch-if-catch/_config.js @@ -0,0 +1,39 @@ +let reject; + +const thePromise = new Promise((f, r) => { + reject = r; +}); + +export default { + props: { + show: true, + thePromise + }, + + html: ` +

loading...

+ `, + + test({ assert, component, target }) { + reject(new Error('something broke')); + + return thePromise + .catch(() => { + assert.htmlEqual(target.innerHTML, ` +

oh no! something broke

+ `); + + component.show = false; + + assert.htmlEqual(target.innerHTML, ` +

Else

+ `); + + component.show = true; + + return assert.htmlEqual(target.innerHTML, ` +

oh no! something broke

+ `); + }); + } +}; \ No newline at end of file diff --git a/packages/svelte/test/runtime/samples/await-then-catch-if-catch/main.svelte b/packages/svelte/test/runtime/samples/await-then-catch-if-catch/main.svelte new file mode 100644 index 0000000000..0759a083d5 --- /dev/null +++ b/packages/svelte/test/runtime/samples/await-then-catch-if-catch/main.svelte @@ -0,0 +1,16 @@ + + +{#if show} + {#await thePromise} +

loading...

+ {:then theValue} +

the value is {theValue}

+ {:catch theError} +

oh no! {theError.message}

+ {/await} +{:else} +

Else

+{/if} \ No newline at end of file diff --git a/test/runtime/samples/await-then-catch-if/_config.js b/packages/svelte/test/runtime/samples/await-then-catch-if/_config.js similarity index 100% rename from test/runtime/samples/await-then-catch-if/_config.js rename to packages/svelte/test/runtime/samples/await-then-catch-if/_config.js diff --git a/packages/svelte/test/runtime/samples/await-then-catch-if/main.svelte b/packages/svelte/test/runtime/samples/await-then-catch-if/main.svelte new file mode 100644 index 0000000000..0759a083d5 --- /dev/null +++ b/packages/svelte/test/runtime/samples/await-then-catch-if/main.svelte @@ -0,0 +1,16 @@ + + +{#if show} + {#await thePromise} +

loading...

+ {:then theValue} +

the value is {theValue}

+ {:catch theError} +

oh no! {theError.message}

+ {/await} +{:else} +

Else

+{/if} \ No newline at end of file diff --git a/test/runtime/samples/await-then-catch-in-slot/Foo.svelte b/packages/svelte/test/runtime/samples/await-then-catch-in-slot/Foo.svelte similarity index 100% rename from test/runtime/samples/await-then-catch-in-slot/Foo.svelte rename to packages/svelte/test/runtime/samples/await-then-catch-in-slot/Foo.svelte diff --git a/packages/svelte/test/runtime/samples/await-then-catch-in-slot/_config.js b/packages/svelte/test/runtime/samples/await-then-catch-in-slot/_config.js new file mode 100644 index 0000000000..781095a0ba --- /dev/null +++ b/packages/svelte/test/runtime/samples/await-then-catch-in-slot/_config.js @@ -0,0 +1,36 @@ +import { create_deferred } from '../../../helpers.js'; + +let deferred; + +export default { + before_test() { + deferred = create_deferred(); + }, + + get props() { + return { thePromise: deferred.promise }; + }, + + html: ` +

loading...

+ `, + + async test({ assert, component, target }) { + deferred.resolve(42); + + await deferred.promise; + assert.htmlEqual(target.innerHTML, '

the value is 42

'); + + deferred = create_deferred(); + component.thePromise = deferred.promise; + assert.htmlEqual(target.innerHTML, '

loading...

'); + + deferred.reject(new Error('something broke')); + + try { + await deferred.promise; + } catch {} + + assert.htmlEqual(target.innerHTML, '

oh no! something broke

'); + } +}; diff --git a/test/runtime/samples/await-then-catch-in-slot/main.svelte b/packages/svelte/test/runtime/samples/await-then-catch-in-slot/main.svelte similarity index 100% rename from test/runtime/samples/await-then-catch-in-slot/main.svelte rename to packages/svelte/test/runtime/samples/await-then-catch-in-slot/main.svelte diff --git a/packages/svelte/test/runtime/samples/await-then-catch-multiple/_config.js b/packages/svelte/test/runtime/samples/await-then-catch-multiple/_config.js new file mode 100644 index 0000000000..5199735105 --- /dev/null +++ b/packages/svelte/test/runtime/samples/await-then-catch-multiple/_config.js @@ -0,0 +1,58 @@ +import { create_deferred } from '../../../helpers.js'; + +let deferred; + +export default { + before_test() { + deferred = create_deferred(); + }, + + get props() { + return { thePromise: deferred.promise }; + }, + + html: ` +

loading...

+

loading...

+ `, + + test({ assert, component, target }) { + deferred.resolve(42); + + return deferred.promise + .then(() => { + assert.htmlEqual( + target.innerHTML, + ` +

the value is 42

+

the value is 42

+ ` + ); + + deferred = create_deferred(); + + component.thePromise = deferred.promise; + + assert.htmlEqual( + target.innerHTML, + ` +

loading...

+

loading...

+ ` + ); + + deferred.reject(new Error('something broke')); + + return deferred.promise.catch(() => {}); + }) + .then(() => { + assert.htmlEqual( + target.innerHTML, + ` +

oh no! something broke

+

oh no! something broke

+ ` + ); + }); + } +}; diff --git a/test/runtime/samples/await-then-catch-multiple/main.svelte b/packages/svelte/test/runtime/samples/await-then-catch-multiple/main.svelte similarity index 100% rename from test/runtime/samples/await-then-catch-multiple/main.svelte rename to packages/svelte/test/runtime/samples/await-then-catch-multiple/main.svelte diff --git a/packages/svelte/test/runtime/samples/await-then-catch-no-values/_config.js b/packages/svelte/test/runtime/samples/await-then-catch-no-values/_config.js new file mode 100644 index 0000000000..e7abc4359b --- /dev/null +++ b/packages/svelte/test/runtime/samples/await-then-catch-no-values/_config.js @@ -0,0 +1,37 @@ +import { create_deferred } from '../../../helpers.js'; + +let deferred; + +export default { + before_test() { + deferred = create_deferred(); + }, + + get props() { + return { thePromise: deferred.promise }; + }, + + html: 'waiting', + + test({ assert, component, target }) { + deferred.resolve(9000); + + return deferred.promise + .then(() => { + assert.htmlEqual(target.innerHTML, 'resolved'); + + deferred = create_deferred(); + + component.thePromise = deferred.promise; + + assert.htmlEqual(target.innerHTML, 'waiting'); + + deferred.reject(new Error('something broke')); + + return deferred.promise.catch(() => {}); + }) + .then(() => { + assert.htmlEqual(target.innerHTML, 'rejected'); + }); + } +}; diff --git a/test/runtime/samples/await-then-catch-no-values/main.svelte b/packages/svelte/test/runtime/samples/await-then-catch-no-values/main.svelte similarity index 100% rename from test/runtime/samples/await-then-catch-no-values/main.svelte rename to packages/svelte/test/runtime/samples/await-then-catch-no-values/main.svelte diff --git a/packages/svelte/test/runtime/samples/await-then-catch-non-promise/_config.js b/packages/svelte/test/runtime/samples/await-then-catch-non-promise/_config.js new file mode 100644 index 0000000000..14120a63d5 --- /dev/null +++ b/packages/svelte/test/runtime/samples/await-then-catch-non-promise/_config.js @@ -0,0 +1,20 @@ +export default { + get props() { + return { thePromise: 'not actually a promise' }; + }, + + html: ` +

the value is not actually a promise

+ `, + + test({ assert, component, target }) { + component.thePromise = 'still not a promise'; + + assert.htmlEqual( + target.innerHTML, + ` +

the value is still not a promise

+ ` + ); + } +}; diff --git a/test/runtime/samples/await-then-catch-non-promise/main.svelte b/packages/svelte/test/runtime/samples/await-then-catch-non-promise/main.svelte similarity index 100% rename from test/runtime/samples/await-then-catch-non-promise/main.svelte rename to packages/svelte/test/runtime/samples/await-then-catch-non-promise/main.svelte diff --git a/packages/svelte/test/runtime/samples/await-then-catch-order/_config.js b/packages/svelte/test/runtime/samples/await-then-catch-order/_config.js new file mode 100644 index 0000000000..275d250233 --- /dev/null +++ b/packages/svelte/test/runtime/samples/await-then-catch-order/_config.js @@ -0,0 +1,28 @@ +let fulfil; + +const thePromise = new Promise((f) => { + fulfil = f; +}); + +export default { + get props() { + return { thePromise }; + }, + + html: ` +

loading...

true!

+ `, + + test({ assert, target }) { + fulfil(42); + + return thePromise.then(() => { + assert.htmlEqual( + target.innerHTML, + ` +

the value is 42

true!

+ ` + ); + }); + } +}; diff --git a/test/runtime/samples/await-then-catch-order/main.svelte b/packages/svelte/test/runtime/samples/await-then-catch-order/main.svelte similarity index 100% rename from test/runtime/samples/await-then-catch-order/main.svelte rename to packages/svelte/test/runtime/samples/await-then-catch-order/main.svelte diff --git a/packages/svelte/test/runtime/samples/await-then-catch-static/_config.js b/packages/svelte/test/runtime/samples/await-then-catch-static/_config.js new file mode 100644 index 0000000000..3d3a7ce065 --- /dev/null +++ b/packages/svelte/test/runtime/samples/await-then-catch-static/_config.js @@ -0,0 +1,54 @@ +let fulfil; + +let promise = new Promise((f) => { + fulfil = f; +}); + +export default { + get props() { + return { promise }; + }, + + html: ` +

loading...

+ `, + + test({ assert, component, target }) { + fulfil(42); + + return promise + .then(() => { + assert.htmlEqual( + target.innerHTML, + ` +

loaded

+ ` + ); + + promise = new Promise((f, _) => { + fulfil = f; + }); + + component.promise = promise; + + assert.htmlEqual( + target.innerHTML, + ` +

loading...

+ ` + ); + + fulfil(43); + + return promise.then(() => {}); + }) + .then(() => { + assert.htmlEqual( + target.innerHTML, + ` +

loaded

+ ` + ); + }); + } +}; diff --git a/test/runtime/samples/await-then-catch-static/main.svelte b/packages/svelte/test/runtime/samples/await-then-catch-static/main.svelte similarity index 100% rename from test/runtime/samples/await-then-catch-static/main.svelte rename to packages/svelte/test/runtime/samples/await-then-catch-static/main.svelte diff --git a/packages/svelte/test/runtime/samples/await-then-catch/_config.js b/packages/svelte/test/runtime/samples/await-then-catch/_config.js new file mode 100644 index 0000000000..e6f0d1767a --- /dev/null +++ b/packages/svelte/test/runtime/samples/await-then-catch/_config.js @@ -0,0 +1,43 @@ +import { create_deferred } from '../../../helpers.js'; + +let deferred; +export default { + before_test() { + deferred = create_deferred(); + }, + + get props() { + return { thePromise: deferred.promise }; + }, + + html: ` +

loading...

+ `, + + test({ assert, component, target }) { + deferred.resolve(42); + + return deferred.promise + .then(() => { + assert.htmlEqual( + target.innerHTML, + ` +

the value is 42

+ ` + ); + + deferred = create_deferred(); + + component.thePromise = deferred.promise; + + assert.htmlEqual(target.innerHTML, '

loading...

'); + + deferred.reject(new Error('something broke')); + + return deferred.promise.catch(() => {}); + }) + .then(() => { + assert.htmlEqual(target.innerHTML, '

oh no! something broke

'); + }); + } +}; diff --git a/test/runtime/samples/await-then-catch/main.svelte b/packages/svelte/test/runtime/samples/await-then-catch/main.svelte similarity index 100% rename from test/runtime/samples/await-then-catch/main.svelte rename to packages/svelte/test/runtime/samples/await-then-catch/main.svelte diff --git a/packages/svelte/test/runtime/samples/await-then-destruct-array-nested-rest/_config.js b/packages/svelte/test/runtime/samples/await-then-destruct-array-nested-rest/_config.js new file mode 100644 index 0000000000..bf362f917d --- /dev/null +++ b/packages/svelte/test/runtime/samples/await-then-destruct-array-nested-rest/_config.js @@ -0,0 +1,71 @@ +export default { + get props() { + return { + thePromise: new Promise((_) => {}) + }; + }, + + html: ` + loading... + `, + + async test({ assert, component, target }) { + await (component.thePromise = Promise.resolve([1, 2, 3, 4, 5, 6, 7, 8])); + + assert.htmlEqual( + target.innerHTML, + ` +

a: 1

+

b: 2

+

c: 5

+

remaining length: 3

+ ` + ); + + await (component.thePromise = Promise.resolve([9, 10, 11, 12, 13, 14, 15])); + + assert.htmlEqual( + target.innerHTML, + ` +

a: 9

+

b: 10

+

c: 13

+

remaining length: 2

+ ` + ); + + try { + await (component.thePromise = Promise.reject([16, 17, 18, 19, 20, 21, 22])); + } catch (e) { + // do nothing + } + + assert.htmlEqual( + target.innerHTML, + ` +

c: 16

+

d: 17

+

e: 18

+

f: 19

+

g: 22

+ ` + ); + + try { + await (component.thePromise = Promise.reject([23, 24, 25, 26, 27, 28, 29, 30, 31])); + } catch (e) { + // do nothing + } + + assert.htmlEqual( + target.innerHTML, + ` +

c: 23

+

d: 24

+

e: 25

+

f: 26

+

g: 29

+ ` + ); + } +}; diff --git a/test/runtime/samples/await-then-destruct-array-nested-rest/main.svelte b/packages/svelte/test/runtime/samples/await-then-destruct-array-nested-rest/main.svelte similarity index 100% rename from test/runtime/samples/await-then-destruct-array-nested-rest/main.svelte rename to packages/svelte/test/runtime/samples/await-then-destruct-array-nested-rest/main.svelte diff --git a/packages/svelte/test/runtime/samples/await-then-destruct-array/_config.js b/packages/svelte/test/runtime/samples/await-then-destruct-array/_config.js new file mode 100644 index 0000000000..1df95385ba --- /dev/null +++ b/packages/svelte/test/runtime/samples/await-then-destruct-array/_config.js @@ -0,0 +1,63 @@ +export default { + get props() { + return { + thePromise: new Promise((_) => {}) + }; + }, + + html: ` + loading... + `, + + async test({ assert, component, target }) { + await (component.thePromise = Promise.resolve([1, 2])); + + assert.htmlEqual( + target.innerHTML, + ` +

a: 1

+

b: 2

+ ` + ); + + await (component.thePromise = Promise.resolve([4, 5])); + + assert.htmlEqual( + target.innerHTML, + ` +

a: 4

+

b: 5

+ ` + ); + + try { + await (component.thePromise = Promise.reject(['a', [6, 7]])); + } catch (e) { + // do nothing + } + + assert.htmlEqual( + target.innerHTML, + ` +

c: a

+

d: 6

+

e: 7

+ ` + ); + + try { + await (component.thePromise = Promise.reject(['b', [8, 9]])); + } catch (e) { + // do nothing + } + + assert.htmlEqual( + target.innerHTML, + ` +

c: b

+

d: 8

+

e: 9

+ ` + ); + } +}; diff --git a/test/runtime/samples/await-then-destruct-array/main.svelte b/packages/svelte/test/runtime/samples/await-then-destruct-array/main.svelte similarity index 100% rename from test/runtime/samples/await-then-destruct-array/main.svelte rename to packages/svelte/test/runtime/samples/await-then-destruct-array/main.svelte diff --git a/packages/svelte/test/runtime/samples/await-then-destruct-computed-props/_config.js b/packages/svelte/test/runtime/samples/await-then-destruct-computed-props/_config.js new file mode 100644 index 0000000000..587ae019c7 --- /dev/null +++ b/packages/svelte/test/runtime/samples/await-then-destruct-computed-props/_config.js @@ -0,0 +1,37 @@ +export default { + async test({ assert, component, target }) { + await Promise.resolve(); + + assert.htmlEqual( + target.innerHTML, + ` +

propA: 3

+

propB: 7

+

num: 3

+

rest: {"prop3":{"prop9":9,"prop10":10}}

+

propZ: 5

+

propY: 6

+

rest: {"propX":7,"propW":8}

+ ` + ); + + await (component.object = Promise.resolve({ + prop1: 'one', + prop2: 'two', + prop3: { prop7: 'seven' }, + prop4: { prop10: 'ten' } + })); + assert.htmlEqual( + target.innerHTML, + ` +

propA: seven

+

propB: ten

+

num: 5

+

rest: {"prop1":"one","prop2":"two"}

+

propZ: 5

+

propY: 6

+

rest: {"propX":7,"propW":8}

+ ` + ); + } +}; diff --git a/test/runtime/samples/await-then-destruct-computed-props/main.svelte b/packages/svelte/test/runtime/samples/await-then-destruct-computed-props/main.svelte similarity index 100% rename from test/runtime/samples/await-then-destruct-computed-props/main.svelte rename to packages/svelte/test/runtime/samples/await-then-destruct-computed-props/main.svelte diff --git a/test/runtime/samples/await-then-destruct-default/_config.js b/packages/svelte/test/runtime/samples/await-then-destruct-default/_config.js similarity index 100% rename from test/runtime/samples/await-then-destruct-default/_config.js rename to packages/svelte/test/runtime/samples/await-then-destruct-default/_config.js diff --git a/test/runtime/samples/await-then-destruct-default/main.svelte b/packages/svelte/test/runtime/samples/await-then-destruct-default/main.svelte similarity index 100% rename from test/runtime/samples/await-then-destruct-default/main.svelte rename to packages/svelte/test/runtime/samples/await-then-destruct-default/main.svelte diff --git a/packages/svelte/test/runtime/samples/await-then-destruct-number-props/_config.js b/packages/svelte/test/runtime/samples/await-then-destruct-number-props/_config.js new file mode 100644 index 0000000000..8b783c4329 --- /dev/null +++ b/packages/svelte/test/runtime/samples/await-then-destruct-number-props/_config.js @@ -0,0 +1,65 @@ +export default { + get props() { + return { + thePromise: new Promise((_) => {}) + }; + }, + + html: ` + loading... + `, + + async test({ assert, component, target }) { + await (component.thePromise = Promise.resolve([10, 11, 12, 13, 14, 15])); + + assert.htmlEqual( + target.innerHTML, + ` +

[1] 11

+

[3] 13

+

[4] 14

+ ` + ); + + await (component.thePromise = Promise.resolve({ 1: 21, 3: 23, 4: 24 })); + + assert.htmlEqual( + target.innerHTML, + ` +

[1] 21

+

[3] 23

+

[4] 24

+ ` + ); + + try { + await (component.thePromise = Promise.reject([30, 31, 32, 33, 34, 35])); + } catch (e) { + // do nothing + } + + assert.htmlEqual( + target.innerHTML, + ` +

[0] 30

+

[2] 32

+

[5] 35

+ ` + ); + + try { + await (component.thePromise = Promise.reject({ 0: 40, 2: 42, 5: 45 })); + } catch (e) { + // do nothing + } + + assert.htmlEqual( + target.innerHTML, + ` +

[0] 40

+

[2] 42

+

[5] 45

+ ` + ); + } +}; diff --git a/test/runtime/samples/await-then-destruct-number-props/main.svelte b/packages/svelte/test/runtime/samples/await-then-destruct-number-props/main.svelte similarity index 100% rename from test/runtime/samples/await-then-destruct-number-props/main.svelte rename to packages/svelte/test/runtime/samples/await-then-destruct-number-props/main.svelte diff --git a/packages/svelte/test/runtime/samples/await-then-destruct-object-if/_config.js b/packages/svelte/test/runtime/samples/await-then-destruct-object-if/_config.js new file mode 100644 index 0000000000..756da8772a --- /dev/null +++ b/packages/svelte/test/runtime/samples/await-then-destruct-object-if/_config.js @@ -0,0 +1,31 @@ +export default { + get props() { + return { + thePromise: Promise.resolve({ result: 1 }) + }; + }, + + html: '', + + async test({ assert, component, target }) { + await (component.thePromise = Promise.resolve({ result: 1 })); + + assert.htmlEqual( + target.innerHTML, + ` +

result: 1

+

count: 0

+ ` + ); + + await new Promise((resolve) => setTimeout(resolve, 1)); + + assert.htmlEqual( + target.innerHTML, + ` +

result: 1

+

count: 1

+ ` + ); + } +}; diff --git a/test/runtime/samples/await-then-destruct-object-if/main.svelte b/packages/svelte/test/runtime/samples/await-then-destruct-object-if/main.svelte similarity index 100% rename from test/runtime/samples/await-then-destruct-object-if/main.svelte rename to packages/svelte/test/runtime/samples/await-then-destruct-object-if/main.svelte diff --git a/packages/svelte/test/runtime/samples/await-then-destruct-object/_config.js b/packages/svelte/test/runtime/samples/await-then-destruct-object/_config.js new file mode 100644 index 0000000000..d6cbe4c93c --- /dev/null +++ b/packages/svelte/test/runtime/samples/await-then-destruct-object/_config.js @@ -0,0 +1,65 @@ +export default { + get props() { + return { + thePromise: new Promise((_) => {}) + }; + }, + + html: ` + loading... + `, + + async test({ assert, component, target }) { + await (component.thePromise = Promise.resolve({ error: 'error message' })); + + assert.htmlEqual( + target.innerHTML, + ` +

error: error message

+

result: undefined

+ ` + ); + + await (component.thePromise = Promise.resolve({ result: '42' })); + + assert.htmlEqual( + target.innerHTML, + ` +

error: undefined

+

result: 42

+ ` + ); + + try { + await (component.thePromise = Promise.reject({ + error: { message: 'oops', code: '123' } + })); + } catch (e) { + // do nothing + } + + assert.htmlEqual( + target.innerHTML, + ` +

message: oops

+

code: 123

+ ` + ); + + try { + await (component.thePromise = Promise.reject({ + error: { message: 'timeout', code: '456' } + })); + } catch (e) { + // do nothing + } + + assert.htmlEqual( + target.innerHTML, + ` +

message: timeout

+

code: 456

+ ` + ); + } +}; diff --git a/test/runtime/samples/await-then-destruct-object/main.svelte b/packages/svelte/test/runtime/samples/await-then-destruct-object/main.svelte similarity index 100% rename from test/runtime/samples/await-then-destruct-object/main.svelte rename to packages/svelte/test/runtime/samples/await-then-destruct-object/main.svelte diff --git a/test/runtime/samples/await-then-destruct-rest/_config.js b/packages/svelte/test/runtime/samples/await-then-destruct-rest/_config.js similarity index 100% rename from test/runtime/samples/await-then-destruct-rest/_config.js rename to packages/svelte/test/runtime/samples/await-then-destruct-rest/_config.js diff --git a/test/runtime/samples/await-then-destruct-rest/main.svelte b/packages/svelte/test/runtime/samples/await-then-destruct-rest/main.svelte similarity index 100% rename from test/runtime/samples/await-then-destruct-rest/main.svelte rename to packages/svelte/test/runtime/samples/await-then-destruct-rest/main.svelte diff --git a/test/runtime/samples/await-then-destruct-string-props/_config.js b/packages/svelte/test/runtime/samples/await-then-destruct-string-props/_config.js similarity index 100% rename from test/runtime/samples/await-then-destruct-string-props/_config.js rename to packages/svelte/test/runtime/samples/await-then-destruct-string-props/_config.js diff --git a/test/runtime/samples/await-then-destruct-string-props/main.svelte b/packages/svelte/test/runtime/samples/await-then-destruct-string-props/main.svelte similarity index 100% rename from test/runtime/samples/await-then-destruct-string-props/main.svelte rename to packages/svelte/test/runtime/samples/await-then-destruct-string-props/main.svelte diff --git a/packages/svelte/test/runtime/samples/await-then-if/_config.js b/packages/svelte/test/runtime/samples/await-then-if/_config.js new file mode 100644 index 0000000000..b32ba04715 --- /dev/null +++ b/packages/svelte/test/runtime/samples/await-then-if/_config.js @@ -0,0 +1,28 @@ +let fulfil; + +const thePromise = new Promise((f) => { + fulfil = f; +}); + +export default { + get props() { + return { thePromise }; + }, + + html: ` + loading... + `, + + async test({ assert, target }) { + fulfil([]); + + await thePromise; + + assert.htmlEqual( + target.innerHTML, + ` +

promise array is empty

+ ` + ); + } +}; diff --git a/test/runtime/samples/await-then-if/main.svelte b/packages/svelte/test/runtime/samples/await-then-if/main.svelte similarity index 100% rename from test/runtime/samples/await-then-if/main.svelte rename to packages/svelte/test/runtime/samples/await-then-if/main.svelte diff --git a/test/runtime/samples/await-then-no-context/main.svelte b/packages/svelte/test/runtime/samples/await-then-no-context/main.svelte similarity index 100% rename from test/runtime/samples/await-then-no-context/main.svelte rename to packages/svelte/test/runtime/samples/await-then-no-context/main.svelte diff --git a/packages/svelte/test/runtime/samples/await-then-no-expression/_config.js b/packages/svelte/test/runtime/samples/await-then-no-expression/_config.js new file mode 100644 index 0000000000..1832b31c86 --- /dev/null +++ b/packages/svelte/test/runtime/samples/await-then-no-expression/_config.js @@ -0,0 +1,63 @@ +import { create_deferred } from '../../../helpers.js'; + +let deferred; + +export default { + before_test() { + deferred = create_deferred(); + }, + + get props() { + return { thePromise: deferred.promise }; + }, + + html: ` +
+
+

the promise is pending

+ `, + + expect_unhandled_rejections: true, + async test({ assert, component, target }) { + deferred.resolve(); + + await deferred.promise; + + assert.htmlEqual( + target.innerHTML, + ` +

the promise is resolved

+
+

the promise is resolved

+
+

the promise is resolved

+ ` + ); + + const local = (deferred = create_deferred()); + + component.thePromise = local.promise; + + assert.htmlEqual( + target.innerHTML, + ` +
+
+

the promise is pending

+ ` + ); + + local.reject(new Error('something broke')); + + try { + await local.promise; + } catch {} + + assert.htmlEqual( + target.innerHTML, + `

oh no! something broke

+
+
` + ); + } +}; diff --git a/test/runtime/samples/await-then-no-expression/main.svelte b/packages/svelte/test/runtime/samples/await-then-no-expression/main.svelte similarity index 100% rename from test/runtime/samples/await-then-no-expression/main.svelte rename to packages/svelte/test/runtime/samples/await-then-no-expression/main.svelte diff --git a/packages/svelte/test/runtime/samples/await-then-shorthand/_config.js b/packages/svelte/test/runtime/samples/await-then-shorthand/_config.js new file mode 100644 index 0000000000..2f35a38560 --- /dev/null +++ b/packages/svelte/test/runtime/samples/await-then-shorthand/_config.js @@ -0,0 +1,47 @@ +import { create_deferred } from '../../../helpers.js'; + +let deferred; + +export default { + before_test() { + deferred = create_deferred(); + }, + + get props() { + return { thePromise: deferred.promise }; + }, + + html: '', + + test({ assert, component, target }) { + deferred.resolve(42); + + return deferred.promise + .then(() => { + assert.htmlEqual( + target.innerHTML, + ` +

the value is 42

+ ` + ); + + deferred = create_deferred(); + + component.thePromise = deferred.promise; + + assert.htmlEqual(target.innerHTML, ''); + + deferred.reject(new Error('something broke')); + + return deferred.promise.catch(() => {}); + }) + .then(() => { + assert.htmlEqual( + target.innerHTML, + ` +

oh no! something broke

+ ` + ); + }); + } +}; diff --git a/test/runtime/samples/await-then-shorthand/main.svelte b/packages/svelte/test/runtime/samples/await-then-shorthand/main.svelte similarity index 100% rename from test/runtime/samples/await-then-shorthand/main.svelte rename to packages/svelte/test/runtime/samples/await-then-shorthand/main.svelte diff --git a/test/runtime/samples/await-with-components/Widget.svelte b/packages/svelte/test/runtime/samples/await-with-components/Widget.svelte similarity index 100% rename from test/runtime/samples/await-with-components/Widget.svelte rename to packages/svelte/test/runtime/samples/await-with-components/Widget.svelte diff --git a/packages/svelte/test/runtime/samples/await-with-components/_config.js b/packages/svelte/test/runtime/samples/await-with-components/_config.js new file mode 100644 index 0000000000..4ddbf73e46 --- /dev/null +++ b/packages/svelte/test/runtime/samples/await-with-components/_config.js @@ -0,0 +1,30 @@ +export default { + async test({ assert, component, target }) { + let resolve; + let reject; + let promise = new Promise((ok) => (resolve = ok)); + + component.promise = promise; + assert.htmlEqual(target.innerHTML, 'Loading...'); + + resolve(42); + await promise; + assert.htmlEqual(target.innerHTML, '42'); + + promise = new Promise((ok, fail) => (reject = fail)); + component.promise = promise; + assert.htmlEqual(target.innerHTML, 'Loading...'); + + reject(99); + await promise.then(null, () => {}); + assert.htmlEqual(target.innerHTML, '99'); + + promise = new Promise((ok) => (resolve = ok)); + component.promise = promise; + assert.htmlEqual(target.innerHTML, 'Loading...'); + + resolve(1); + await promise; + assert.htmlEqual(target.innerHTML, '1'); + } +}; diff --git a/test/runtime/samples/await-with-components/main.svelte b/packages/svelte/test/runtime/samples/await-with-components/main.svelte similarity index 100% rename from test/runtime/samples/await-with-components/main.svelte rename to packages/svelte/test/runtime/samples/await-with-components/main.svelte diff --git a/test/runtime/samples/await-with-update-2/Component.svelte b/packages/svelte/test/runtime/samples/await-with-update-2/Component.svelte similarity index 100% rename from test/runtime/samples/await-with-update-2/Component.svelte rename to packages/svelte/test/runtime/samples/await-with-update-2/Component.svelte diff --git a/packages/svelte/test/runtime/samples/await-with-update-2/_config.js b/packages/svelte/test/runtime/samples/await-with-update-2/_config.js new file mode 100644 index 0000000000..44fe266b61 --- /dev/null +++ b/packages/svelte/test/runtime/samples/await-with-update-2/_config.js @@ -0,0 +1,72 @@ +export default { + get props() { + return { + thePromise: new Promise((_) => {}), + count: 0 + }; + }, + + html: ` +

loading...

+ `, + + async test({ assert, component, target }) { + await (component.thePromise = Promise.resolve({ + value: 'success', + Component: component.Component + })); + + assert.htmlEqual( + target.innerHTML, + ` +
Resolved: +
count: 0
+
value: success
+
+ ` + ); + + component.count = 5; + + assert.htmlEqual( + target.innerHTML, + ` +
Resolved: +
count: 5
+
value: success
+
+ ` + ); + + try { + await (component.thePromise = Promise.reject({ + value: 'failure', + Component: component.Component + })); + } catch (error) { + // ignore + } + + assert.htmlEqual( + target.innerHTML, + ` +
Rejected: +
count: 5
+
value: failure
+
+ ` + ); + + component.count = 10; + + assert.htmlEqual( + target.innerHTML, + ` +
Rejected: +
count: 10
+
value: failure
+
+ ` + ); + } +}; diff --git a/test/runtime/samples/await-with-update-2/main.svelte b/packages/svelte/test/runtime/samples/await-with-update-2/main.svelte similarity index 100% rename from test/runtime/samples/await-with-update-2/main.svelte rename to packages/svelte/test/runtime/samples/await-with-update-2/main.svelte diff --git a/packages/svelte/test/runtime/samples/await-with-update-catch-scope/_config.js b/packages/svelte/test/runtime/samples/await-with-update-catch-scope/_config.js new file mode 100644 index 0000000000..94fb09b394 --- /dev/null +++ b/packages/svelte/test/runtime/samples/await-with-update-catch-scope/_config.js @@ -0,0 +1,53 @@ +export default { + get props() { + return { + thePromise: new Promise((_) => {}) + }; + }, + + html: ` +
error: undefined
+ `, + + async test({ assert, component, target }) { + await (component.thePromise = Promise.resolve('abc')); + + assert.htmlEqual( + target.innerHTML, + ` +
+ error: undefined + After Resolve: undefined +
+ ` + ); + + component.error = 'external error occurred'; + + assert.htmlEqual( + target.innerHTML, + ` +
+ error: ${component.error} + After Resolve: ${component.error} +
+ ` + ); + + try { + await (component.thePromise = Promise.reject('failure')); + } catch (error) { + // ignore + } + + assert.htmlEqual( + target.innerHTML, + ` +
+ error: ${component.error} + Rejected: failure +
+ ` + ); + } +}; diff --git a/test/runtime/samples/await-with-update-catch-scope/main.svelte b/packages/svelte/test/runtime/samples/await-with-update-catch-scope/main.svelte similarity index 100% rename from test/runtime/samples/await-with-update-catch-scope/main.svelte rename to packages/svelte/test/runtime/samples/await-with-update-catch-scope/main.svelte diff --git a/test/runtime/samples/await-with-update/Component.svelte b/packages/svelte/test/runtime/samples/await-with-update/Component.svelte similarity index 100% rename from test/runtime/samples/await-with-update/Component.svelte rename to packages/svelte/test/runtime/samples/await-with-update/Component.svelte diff --git a/packages/svelte/test/runtime/samples/await-with-update/_config.js b/packages/svelte/test/runtime/samples/await-with-update/_config.js new file mode 100644 index 0000000000..b6df57e1c4 --- /dev/null +++ b/packages/svelte/test/runtime/samples/await-with-update/_config.js @@ -0,0 +1,62 @@ +export default { + get props() { + return { + thePromise: new Promise((_) => {}), + count: 0 + }; + }, + + html: ` +

loading...

+ `, + + async test({ assert, component, target }) { + await (component.thePromise = Promise.resolve(component.Component)); + + assert.htmlEqual( + target.innerHTML, + ` +
Resolved: +
count: 0
+
+ ` + ); + + component.count = 5; + + assert.htmlEqual( + target.innerHTML, + ` +
Resolved: +
count: 5
+
+ ` + ); + + try { + await (component.thePromise = Promise.reject(component.Component)); + } catch (error) { + // ignore + } + + assert.htmlEqual( + target.innerHTML, + ` +
Rejected: +
count: 5
+
+ ` + ); + + component.count = 10; + + assert.htmlEqual( + target.innerHTML, + ` +
Rejected: +
count: 10
+
+ ` + ); + } +}; diff --git a/test/runtime/samples/await-with-update/main.svelte b/packages/svelte/test/runtime/samples/await-with-update/main.svelte similarity index 100% rename from test/runtime/samples/await-with-update/main.svelte rename to packages/svelte/test/runtime/samples/await-with-update/main.svelte diff --git a/packages/svelte/test/runtime/samples/await-without-catch/_config.js b/packages/svelte/test/runtime/samples/await-without-catch/_config.js new file mode 100644 index 0000000000..be11e92f0c --- /dev/null +++ b/packages/svelte/test/runtime/samples/await-without-catch/_config.js @@ -0,0 +1,41 @@ +import { create_deferred } from '../../../helpers.js'; + +let deferred; + +export default { + before_test() { + deferred = create_deferred(); + }, + + get props() { + return { promise: deferred.promise }; + }, + + html: ` +

loading...

+ `, + + expect_unhandled_rejections: true, + test({ assert, component, target }) { + deferred.resolve(42); + + return deferred.promise + .then(() => { + assert.htmlEqual(target.innerHTML, '

loaded

'); + + deferred = create_deferred(); + + component.promise = deferred.promise; + + assert.htmlEqual(target.innerHTML, '

loading...

'); + + deferred.reject(new Error('this error should be thrown')); + + return deferred.promise; + }) + .catch((err) => { + assert.equal(err.message, 'this error should be thrown'); + assert.htmlEqual(target.innerHTML, ''); + }); + } +}; diff --git a/test/runtime/samples/await-without-catch/main.svelte b/packages/svelte/test/runtime/samples/await-without-catch/main.svelte similarity index 100% rename from test/runtime/samples/await-without-catch/main.svelte rename to packages/svelte/test/runtime/samples/await-without-catch/main.svelte diff --git a/test/runtime/samples/before-render-chain/Item.svelte b/packages/svelte/test/runtime/samples/before-render-chain/Item.svelte similarity index 100% rename from test/runtime/samples/before-render-chain/Item.svelte rename to packages/svelte/test/runtime/samples/before-render-chain/Item.svelte diff --git a/test/runtime/samples/before-render-chain/List.svelte b/packages/svelte/test/runtime/samples/before-render-chain/List.svelte similarity index 100% rename from test/runtime/samples/before-render-chain/List.svelte rename to packages/svelte/test/runtime/samples/before-render-chain/List.svelte diff --git a/packages/svelte/test/runtime/samples/before-render-chain/_config.js b/packages/svelte/test/runtime/samples/before-render-chain/_config.js new file mode 100644 index 0000000000..d50543115d --- /dev/null +++ b/packages/svelte/test/runtime/samples/before-render-chain/_config.js @@ -0,0 +1,24 @@ +export default { + skip_if_ssr: true, + + html: ` + 3 + 2 + 1 + `, + + async test({ assert, component, target }) { + await component.list.update(); + + assert.htmlEqual( + target.innerHTML, + ` + 1 + 2 + 3 + 4 + 5 + ` + ); + } +}; diff --git a/test/runtime/samples/before-render-chain/main.svelte b/packages/svelte/test/runtime/samples/before-render-chain/main.svelte similarity index 100% rename from test/runtime/samples/before-render-chain/main.svelte rename to packages/svelte/test/runtime/samples/before-render-chain/main.svelte diff --git a/packages/svelte/test/runtime/samples/before-render-prevents-loop/_config.js b/packages/svelte/test/runtime/samples/before-render-prevents-loop/_config.js new file mode 100644 index 0000000000..86bde0c534 --- /dev/null +++ b/packages/svelte/test/runtime/samples/before-render-prevents-loop/_config.js @@ -0,0 +1,23 @@ +export default { + skip_if_ssr: true, + + get props() { + return { value: 'hello!' }; + }, + + html: ` +

hello!

+

hello!

+ `, + + test({ assert, component, target }) { + component.value = 'goodbye!'; + assert.htmlEqual( + target.innerHTML, + ` +

goodbye!

+

goodbye!

+ ` + ); + } +}; diff --git a/test/runtime/samples/before-render-prevents-loop/main.svelte b/packages/svelte/test/runtime/samples/before-render-prevents-loop/main.svelte similarity index 100% rename from test/runtime/samples/before-render-prevents-loop/main.svelte rename to packages/svelte/test/runtime/samples/before-render-prevents-loop/main.svelte diff --git a/test/runtime/samples/binding-audio-currenttime-duration-volume/_config.js b/packages/svelte/test/runtime/samples/binding-audio-currenttime-duration-volume/_config.js similarity index 100% rename from test/runtime/samples/binding-audio-currenttime-duration-volume/_config.js rename to packages/svelte/test/runtime/samples/binding-audio-currenttime-duration-volume/_config.js diff --git a/test/runtime/samples/binding-audio-currenttime-duration-volume/main.svelte b/packages/svelte/test/runtime/samples/binding-audio-currenttime-duration-volume/main.svelte similarity index 100% rename from test/runtime/samples/binding-audio-currenttime-duration-volume/main.svelte rename to packages/svelte/test/runtime/samples/binding-audio-currenttime-duration-volume/main.svelte diff --git a/test/runtime/samples/binding-circular/_config.js b/packages/svelte/test/runtime/samples/binding-circular/_config.js similarity index 100% rename from test/runtime/samples/binding-circular/_config.js rename to packages/svelte/test/runtime/samples/binding-circular/_config.js diff --git a/test/runtime/samples/binding-circular/main.svelte b/packages/svelte/test/runtime/samples/binding-circular/main.svelte similarity index 100% rename from test/runtime/samples/binding-circular/main.svelte rename to packages/svelte/test/runtime/samples/binding-circular/main.svelte diff --git a/packages/svelte/test/runtime/samples/binding-contenteditable-html-initial/_config.js b/packages/svelte/test/runtime/samples/binding-contenteditable-html-initial/_config.js new file mode 100644 index 0000000000..973e21c10f --- /dev/null +++ b/packages/svelte/test/runtime/samples/binding-contenteditable-html-initial/_config.js @@ -0,0 +1,49 @@ +export default { + html: ` + world +

hello world

+ `, + + ssrHtml: ` + world +

hello undefined

+ `, + + async test({ assert, component, target, window }) { + assert.equal(component.name, 'world'); + + const el = target.querySelector('editor'); + + el.innerHTML = 'everybody'; + + // No updates to data yet + assert.htmlEqual( + target.innerHTML, + ` + everybody +

hello world

+ ` + ); + + // Handle user input + const event = new window.Event('input'); + await el.dispatchEvent(event); + assert.htmlEqual( + target.innerHTML, + ` + everybody +

hello everybody

+ ` + ); + + component.name = 'goodbye'; + assert.equal(el.innerHTML, 'goodbye'); + assert.htmlEqual( + target.innerHTML, + ` + goodbye +

hello goodbye

+ ` + ); + } +}; diff --git a/test/runtime/samples/binding-contenteditable-html-initial/main.svelte b/packages/svelte/test/runtime/samples/binding-contenteditable-html-initial/main.svelte similarity index 100% rename from test/runtime/samples/binding-contenteditable-html-initial/main.svelte rename to packages/svelte/test/runtime/samples/binding-contenteditable-html-initial/main.svelte diff --git a/packages/svelte/test/runtime/samples/binding-contenteditable-html/_config.js b/packages/svelte/test/runtime/samples/binding-contenteditable-html/_config.js new file mode 100644 index 0000000000..681cbc6e53 --- /dev/null +++ b/packages/svelte/test/runtime/samples/binding-contenteditable-html/_config.js @@ -0,0 +1,47 @@ +export default { + get props() { + return { name: 'world' }; + }, + + html: ` + world +

hello world

+ `, + + async test({ assert, component, target, window }) { + const el = target.querySelector('editor'); + assert.equal(el.innerHTML, 'world'); + + el.innerHTML = 'everybody'; + + // No updates to data yet + assert.htmlEqual( + target.innerHTML, + ` + everybody +

hello world

+ ` + ); + + // Handle user input + const event = new window.Event('input'); + await el.dispatchEvent(event); + assert.htmlEqual( + target.innerHTML, + ` + everybody +

hello everybody

+ ` + ); + + component.name = 'goodbye'; + assert.equal(el.innerHTML, 'goodbye'); + assert.htmlEqual( + target.innerHTML, + ` + goodbye +

hello goodbye

+ ` + ); + } +}; diff --git a/test/runtime/samples/binding-contenteditable-html/main.svelte b/packages/svelte/test/runtime/samples/binding-contenteditable-html/main.svelte similarity index 100% rename from test/runtime/samples/binding-contenteditable-html/main.svelte rename to packages/svelte/test/runtime/samples/binding-contenteditable-html/main.svelte diff --git a/packages/svelte/test/runtime/samples/binding-contenteditable-innertext/_config.js b/packages/svelte/test/runtime/samples/binding-contenteditable-innertext/_config.js new file mode 100644 index 0000000000..d451eda098 --- /dev/null +++ b/packages/svelte/test/runtime/samples/binding-contenteditable-innertext/_config.js @@ -0,0 +1,25 @@ +export default { + get props() { + return { name: 'world' }; + }, + + ssrHtml: ` + world +

hello world

+ `, + + async test({ assert, component, target, window }) { + // JSDom doesn't support innerText yet, so the test is not ideal + // https://github.com/jsdom/jsdom/issues/1245 + const el = target.querySelector('editor'); + assert.equal(el.innerText, 'world'); + + const event = new window.Event('input'); + el.innerText = 'everybody'; + await el.dispatchEvent(event); + assert.equal(component.name, 'everybody'); + + component.name = 'goodbye'; + assert.equal(el.innerText, 'goodbye'); + } +}; diff --git a/test/runtime/samples/binding-contenteditable-innertext/main.svelte b/packages/svelte/test/runtime/samples/binding-contenteditable-innertext/main.svelte similarity index 100% rename from test/runtime/samples/binding-contenteditable-innertext/main.svelte rename to packages/svelte/test/runtime/samples/binding-contenteditable-innertext/main.svelte diff --git a/packages/svelte/test/runtime/samples/binding-contenteditable-text-initial/_config.js b/packages/svelte/test/runtime/samples/binding-contenteditable-text-initial/_config.js new file mode 100644 index 0000000000..8c4a4de2bf --- /dev/null +++ b/packages/svelte/test/runtime/samples/binding-contenteditable-text-initial/_config.js @@ -0,0 +1,40 @@ +export default { + html: ` + world +

hello world

+ `, + + ssrHtml: ` + world +

hello undefined

+ `, + + async test({ assert, component, target, window }) { + assert.equal(component.name, 'world'); + + const el = target.querySelector('editor'); + + const event = new window.Event('input'); + + el.textContent = 'everybody'; + await el.dispatchEvent(event); + + assert.htmlEqual( + target.innerHTML, + ` + everybody +

hello everybody

+ ` + ); + + component.name = 'goodbye'; + assert.equal(el.textContent, 'goodbye'); + assert.htmlEqual( + target.innerHTML, + ` + goodbye +

hello goodbye

+ ` + ); + } +}; diff --git a/test/runtime/samples/binding-contenteditable-text-initial/main.svelte b/packages/svelte/test/runtime/samples/binding-contenteditable-text-initial/main.svelte similarity index 100% rename from test/runtime/samples/binding-contenteditable-text-initial/main.svelte rename to packages/svelte/test/runtime/samples/binding-contenteditable-text-initial/main.svelte diff --git a/packages/svelte/test/runtime/samples/binding-contenteditable-text/_config.js b/packages/svelte/test/runtime/samples/binding-contenteditable-text/_config.js new file mode 100644 index 0000000000..9b1528fff4 --- /dev/null +++ b/packages/svelte/test/runtime/samples/binding-contenteditable-text/_config.js @@ -0,0 +1,38 @@ +export default { + get props() { + return { name: 'world' }; + }, + + html: ` + world +

hello world

+ `, + + async test({ assert, component, target, window }) { + const el = target.querySelector('editor'); + assert.equal(el.textContent, 'world'); + + const event = new window.Event('input'); + + el.textContent = 'everybody'; + await el.dispatchEvent(event); + + assert.htmlEqual( + target.innerHTML, + ` + everybody +

hello everybody

+ ` + ); + + component.name = 'goodbye'; + assert.equal(el.textContent, 'goodbye'); + assert.htmlEqual( + target.innerHTML, + ` + goodbye +

hello goodbye

+ ` + ); + } +}; diff --git a/test/runtime/samples/binding-contenteditable-text/main.svelte b/packages/svelte/test/runtime/samples/binding-contenteditable-text/main.svelte similarity index 100% rename from test/runtime/samples/binding-contenteditable-text/main.svelte rename to packages/svelte/test/runtime/samples/binding-contenteditable-text/main.svelte diff --git a/packages/svelte/test/runtime/samples/binding-details-open/_config.js b/packages/svelte/test/runtime/samples/binding-details-open/_config.js new file mode 100644 index 0000000000..b603a4693b --- /dev/null +++ b/packages/svelte/test/runtime/samples/binding-details-open/_config.js @@ -0,0 +1,31 @@ +export default { + html: ` +
toggle
+ `, + + async test({ assert, component, target, window }) { + const details = target.querySelector('details'); + const event = new window.Event('toggle'); + + details.open = true; + await details.dispatchEvent(event); + assert.equal(component.visible, true); + assert.htmlEqual( + target.innerHTML, + ` +
toggle
+

hello!

+ ` + ); + + details.open = false; + await details.dispatchEvent(event); + assert.equal(component.visible, false); + assert.htmlEqual( + target.innerHTML, + ` +
toggle
+ ` + ); + } +}; diff --git a/test/runtime/samples/binding-details-open/main.svelte b/packages/svelte/test/runtime/samples/binding-details-open/main.svelte similarity index 100% rename from test/runtime/samples/binding-details-open/main.svelte rename to packages/svelte/test/runtime/samples/binding-details-open/main.svelte diff --git a/packages/svelte/test/runtime/samples/binding-indirect-computed/_config.js b/packages/svelte/test/runtime/samples/binding-indirect-computed/_config.js new file mode 100644 index 0000000000..587c797ccc --- /dev/null +++ b/packages/svelte/test/runtime/samples/binding-indirect-computed/_config.js @@ -0,0 +1,37 @@ +export default { + compileOptions: { + dev: true + }, + + html: ` + + `, + + async test({ assert, component, target, window }) { + const select = target.querySelector('select'); + const options = target.querySelectorAll('option'); + + const change = new window.Event('change'); + + options[1].selected = true; + await select.dispatchEvent(change); + + assert.equal(component.selected.letter, 'B'); + assert.htmlEqual( + target.innerHTML, + ` + + + B + ` + ); + } +}; diff --git a/test/runtime/samples/binding-indirect-computed/main.svelte b/packages/svelte/test/runtime/samples/binding-indirect-computed/main.svelte similarity index 100% rename from test/runtime/samples/binding-indirect-computed/main.svelte rename to packages/svelte/test/runtime/samples/binding-indirect-computed/main.svelte diff --git a/test/runtime/samples/binding-indirect-spread/_config.js b/packages/svelte/test/runtime/samples/binding-indirect-spread/_config.js similarity index 100% rename from test/runtime/samples/binding-indirect-spread/_config.js rename to packages/svelte/test/runtime/samples/binding-indirect-spread/_config.js diff --git a/test/runtime/samples/binding-indirect-spread/main.svelte b/packages/svelte/test/runtime/samples/binding-indirect-spread/main.svelte similarity index 100% rename from test/runtime/samples/binding-indirect-spread/main.svelte rename to packages/svelte/test/runtime/samples/binding-indirect-spread/main.svelte diff --git a/test/runtime/samples/binding-indirect-value/Component.svelte b/packages/svelte/test/runtime/samples/binding-indirect-value/Component.svelte similarity index 100% rename from test/runtime/samples/binding-indirect-value/Component.svelte rename to packages/svelte/test/runtime/samples/binding-indirect-value/Component.svelte diff --git a/packages/svelte/test/runtime/samples/binding-indirect-value/_config.js b/packages/svelte/test/runtime/samples/binding-indirect-value/_config.js new file mode 100644 index 0000000000..d64a070aa2 --- /dev/null +++ b/packages/svelte/test/runtime/samples/binding-indirect-value/_config.js @@ -0,0 +1,11 @@ +export default { + async test({ assert, target }) { + assert.htmlEqual( + target.innerHTML, + ` + Parent component "bar"
+ Child component "bar"
+ ` + ); + } +}; diff --git a/test/runtime/samples/binding-indirect-value/main.svelte b/packages/svelte/test/runtime/samples/binding-indirect-value/main.svelte similarity index 100% rename from test/runtime/samples/binding-indirect-value/main.svelte rename to packages/svelte/test/runtime/samples/binding-indirect-value/main.svelte diff --git a/packages/svelte/test/runtime/samples/binding-indirect/_config.js b/packages/svelte/test/runtime/samples/binding-indirect/_config.js new file mode 100644 index 0000000000..43d54c66ad --- /dev/null +++ b/packages/svelte/test/runtime/samples/binding-indirect/_config.js @@ -0,0 +1,96 @@ +let tasks = []; + +export default { + skip_if_ssr: true, + + get props() { + tasks = [ + { description: 'put your left leg in', done: false }, + { description: 'your left leg out', done: false }, + { description: 'in, out, in, out', done: false }, + { description: 'shake it all about', done: false } + ]; + return { tasks, selected: tasks[0] }; + }, + + html: ` + + + + +

Pending tasks

+

put your left leg in

+

your left leg out

+

in, out, in, out

+

shake it all about

+ `, + + async test({ assert, component, target, window }) { + const input = target.querySelector('input'); + const select = target.querySelector('select'); + const options = target.querySelectorAll('option'); + + const change = new window.Event('change'); + + input.checked = true; + await input.dispatchEvent(change); + + assert.ok(component.tasks[0].done); + assert.htmlEqual( + target.innerHTML, + ` + + + + +

Pending tasks

+

your left leg out

+

in, out, in, out

+

shake it all about

+ ` + ); + + options[1].selected = true; + await select.dispatchEvent(change); + assert.equal(component.selected, tasks[1]); + assert.ok(!input.checked); + + input.checked = true; + await input.dispatchEvent(change); + + assert.ok(component.tasks[1].done); + assert.htmlEqual( + target.innerHTML, + ` + + + + +

Pending tasks

+

in, out, in, out

+

shake it all about

+ ` + ); + } +}; diff --git a/test/runtime/samples/binding-indirect/main.svelte b/packages/svelte/test/runtime/samples/binding-indirect/main.svelte similarity index 100% rename from test/runtime/samples/binding-indirect/main.svelte rename to packages/svelte/test/runtime/samples/binding-indirect/main.svelte diff --git a/packages/svelte/test/runtime/samples/binding-input-checkbox-deep-contextual-b/_config.js b/packages/svelte/test/runtime/samples/binding-input-checkbox-deep-contextual-b/_config.js new file mode 100644 index 0000000000..006b9f9e88 --- /dev/null +++ b/packages/svelte/test/runtime/samples/binding-input-checkbox-deep-contextual-b/_config.js @@ -0,0 +1,56 @@ +export default { + html: ` +
+

one

+
+
+

two

+
+
+

three

+
+ `, + + ssrHtml: ` +
+

one

+
+
+

two

+
+
+

three

+
+ `, + + async test({ assert, component, target, window }) { + const inputs = [...target.querySelectorAll('input')]; + + const event = new window.Event('change'); + + inputs[1].checked = true; + await inputs[1].dispatchEvent(event); + + await component.clear(); + + assert.htmlEqual( + target.innerHTML, + ` +

one

+

three

+ ` + ); + + inputs[1].checked = true; + await inputs[1].dispatchEvent(event); + + await component.clear(); + + assert.htmlEqual( + target.innerHTML, + ` +

one

+ ` + ); + } +}; diff --git a/test/runtime/samples/binding-input-checkbox-deep-contextual-b/main.svelte b/packages/svelte/test/runtime/samples/binding-input-checkbox-deep-contextual-b/main.svelte similarity index 100% rename from test/runtime/samples/binding-input-checkbox-deep-contextual-b/main.svelte rename to packages/svelte/test/runtime/samples/binding-input-checkbox-deep-contextual-b/main.svelte diff --git a/packages/svelte/test/runtime/samples/binding-input-checkbox-deep-contextual/_config.js b/packages/svelte/test/runtime/samples/binding-input-checkbox-deep-contextual/_config.js new file mode 100644 index 0000000000..f21e08fd8e --- /dev/null +++ b/packages/svelte/test/runtime/samples/binding-input-checkbox-deep-contextual/_config.js @@ -0,0 +1,72 @@ +export default { + get props() { + return { + items: [ + { description: 'one', completed: true }, + { description: 'two', completed: false }, + { description: 'three', completed: false } + ] + }; + }, + + html: ` +
+

one

+
+
+

two

+
+
+

three

+
+

1 completed

+ `, + + ssrHtml: ` +
+

one

+
+
+

two

+
+
+

three

+
+

1 completed

+ `, + + async test({ assert, component, target, window }) { + const inputs = [...target.querySelectorAll('input')]; + + assert.ok(inputs[0].checked); + assert.ok(!inputs[1].checked); + assert.ok(!inputs[2].checked); + + const event = new window.Event('change'); + + inputs[1].checked = true; + await inputs[1].dispatchEvent(event); + + assert.equal(component.numCompleted, 2); + assert.htmlEqual( + target.innerHTML, + ` +

one

two

three

+

2 completed

+ ` + ); + + const items = component.items; + items[2].completed = true; + + component.items = items; + assert.ok(inputs[2].checked); + assert.htmlEqual( + target.innerHTML, + ` +

one

two

three

+

3 completed

+ ` + ); + } +}; diff --git a/test/runtime/samples/binding-input-checkbox-deep-contextual/main.svelte b/packages/svelte/test/runtime/samples/binding-input-checkbox-deep-contextual/main.svelte similarity index 100% rename from test/runtime/samples/binding-input-checkbox-deep-contextual/main.svelte rename to packages/svelte/test/runtime/samples/binding-input-checkbox-deep-contextual/main.svelte diff --git a/packages/svelte/test/runtime/samples/binding-input-checkbox-group-outside-each/_config.js b/packages/svelte/test/runtime/samples/binding-input-checkbox-group-outside-each/_config.js new file mode 100644 index 0000000000..c59d8ec1fe --- /dev/null +++ b/packages/svelte/test/runtime/samples/binding-input-checkbox-group-outside-each/_config.js @@ -0,0 +1,92 @@ +const values = [{ name: 'Alpha' }, { name: 'Beta' }, { name: 'Gamma' }]; + +export default { + get props() { + return { values, selected: [values[1]] }; + }, + + html: ` + + + + + + +

Beta

`, + + ssrHtml: ` + + + + + + +

Beta

`, + + async test({ assert, component, target, window }) { + const inputs = target.querySelectorAll('input'); + assert.equal(inputs[0].checked, false); + assert.equal(inputs[1].checked, true); + assert.equal(inputs[2].checked, false); + + const event = new window.Event('change'); + + inputs[0].checked = true; + await inputs[0].dispatchEvent(event); + + assert.htmlEqual( + target.innerHTML, + ` + + + + + + +

Alpha, Beta

+ ` + ); + + component.selected = [values[1], values[2]]; + assert.equal(inputs[0].checked, false); + assert.equal(inputs[1].checked, true); + assert.equal(inputs[2].checked, true); + + assert.htmlEqual( + target.innerHTML, + ` + + + + + + +

Beta, Gamma

+ ` + ); + } +}; diff --git a/test/runtime/samples/binding-input-checkbox-group-outside-each/main.svelte b/packages/svelte/test/runtime/samples/binding-input-checkbox-group-outside-each/main.svelte similarity index 100% rename from test/runtime/samples/binding-input-checkbox-group-outside-each/main.svelte rename to packages/svelte/test/runtime/samples/binding-input-checkbox-group-outside-each/main.svelte diff --git a/packages/svelte/test/runtime/samples/binding-input-checkbox-group/_config.js b/packages/svelte/test/runtime/samples/binding-input-checkbox-group/_config.js new file mode 100644 index 0000000000..c59d8ec1fe --- /dev/null +++ b/packages/svelte/test/runtime/samples/binding-input-checkbox-group/_config.js @@ -0,0 +1,92 @@ +const values = [{ name: 'Alpha' }, { name: 'Beta' }, { name: 'Gamma' }]; + +export default { + get props() { + return { values, selected: [values[1]] }; + }, + + html: ` + + + + + + +

Beta

`, + + ssrHtml: ` + + + + + + +

Beta

`, + + async test({ assert, component, target, window }) { + const inputs = target.querySelectorAll('input'); + assert.equal(inputs[0].checked, false); + assert.equal(inputs[1].checked, true); + assert.equal(inputs[2].checked, false); + + const event = new window.Event('change'); + + inputs[0].checked = true; + await inputs[0].dispatchEvent(event); + + assert.htmlEqual( + target.innerHTML, + ` + + + + + + +

Alpha, Beta

+ ` + ); + + component.selected = [values[1], values[2]]; + assert.equal(inputs[0].checked, false); + assert.equal(inputs[1].checked, true); + assert.equal(inputs[2].checked, true); + + assert.htmlEqual( + target.innerHTML, + ` + + + + + + +

Beta, Gamma

+ ` + ); + } +}; diff --git a/test/runtime/samples/binding-input-checkbox-group/main.svelte b/packages/svelte/test/runtime/samples/binding-input-checkbox-group/main.svelte similarity index 100% rename from test/runtime/samples/binding-input-checkbox-group/main.svelte rename to packages/svelte/test/runtime/samples/binding-input-checkbox-group/main.svelte diff --git a/packages/svelte/test/runtime/samples/binding-input-checkbox-indeterminate/_config.js b/packages/svelte/test/runtime/samples/binding-input-checkbox-indeterminate/_config.js new file mode 100644 index 0000000000..5a6f644bf1 --- /dev/null +++ b/packages/svelte/test/runtime/samples/binding-input-checkbox-indeterminate/_config.js @@ -0,0 +1,48 @@ +export default { + skip_if_ssr: true, + + get props() { + return { indeterminate: true }; + }, + + html: ` + +

checked? false

+

indeterminate? true

+ `, + + async test({ assert, component, target, window }) { + const input = target.querySelector('input'); + assert.equal(input.checked, false); + assert.equal(input.indeterminate, true); + + const event = new window.Event('change'); + + input.checked = true; + input.indeterminate = false; + await input.dispatchEvent(event); + + assert.equal(component.indeterminate, false); + assert.equal(component.checked, true); + assert.htmlEqual( + target.innerHTML, + ` + +

checked? true

+

indeterminate? false

+ ` + ); + + component.indeterminate = true; + assert.equal(input.indeterminate, true); + assert.equal(input.checked, true); + assert.htmlEqual( + target.innerHTML, + ` + +

checked? true

+

indeterminate? true

+ ` + ); + } +}; diff --git a/test/runtime/samples/binding-input-checkbox-indeterminate/main.svelte b/packages/svelte/test/runtime/samples/binding-input-checkbox-indeterminate/main.svelte similarity index 100% rename from test/runtime/samples/binding-input-checkbox-indeterminate/main.svelte rename to packages/svelte/test/runtime/samples/binding-input-checkbox-indeterminate/main.svelte diff --git a/packages/svelte/test/runtime/samples/binding-input-checkbox-with-event-in-each/_config.js b/packages/svelte/test/runtime/samples/binding-input-checkbox-with-event-in-each/_config.js new file mode 100644 index 0000000000..85e78d35dc --- /dev/null +++ b/packages/svelte/test/runtime/samples/binding-input-checkbox-with-event-in-each/_config.js @@ -0,0 +1,35 @@ +export default { + get props() { + return { + cats: [ + { name: 'cat 0', checked: false }, + { name: 'cat 1', checked: false } + ] + }; + }, + + html: ` + + + `, + + test({ assert, component, target, window }) { + const { cats } = component; + const newCats = cats.slice(); + newCats.push({ + name: 'cat ' + cats.length, + checked: false + }); + component.cats = newCats; + + let inputs = target.querySelectorAll('input'); + assert.equal(inputs.length, 3); + + const event = new window.Event('change'); + inputs[0].checked = true; + inputs[0].dispatchEvent(event); + + inputs = target.querySelectorAll('input'); + assert.equal(inputs.length, 3); + } +}; diff --git a/test/runtime/samples/binding-input-checkbox-with-event-in-each/main.svelte b/packages/svelte/test/runtime/samples/binding-input-checkbox-with-event-in-each/main.svelte similarity index 100% rename from test/runtime/samples/binding-input-checkbox-with-event-in-each/main.svelte rename to packages/svelte/test/runtime/samples/binding-input-checkbox-with-event-in-each/main.svelte diff --git a/packages/svelte/test/runtime/samples/binding-input-checkbox/_config.js b/packages/svelte/test/runtime/samples/binding-input-checkbox/_config.js new file mode 100644 index 0000000000..bbee9d391d --- /dev/null +++ b/packages/svelte/test/runtime/samples/binding-input-checkbox/_config.js @@ -0,0 +1,43 @@ +export default { + get props() { + return { foo: true }; + }, + + html: ` + +

true

+ `, + + ssrHtml: ` + +

true

+ `, + + async test({ assert, component, target, window }) { + const input = target.querySelector('input'); + assert.equal(input.checked, true); + + const event = new window.Event('change'); + + input.checked = false; + await input.dispatchEvent(event); + + assert.htmlEqual( + target.innerHTML, + ` + +

false

+ ` + ); + + component.foo = true; + assert.equal(input.checked, true); + assert.htmlEqual( + target.innerHTML, + ` + +

true

+ ` + ); + } +}; diff --git a/test/runtime/samples/binding-input-checkbox/main.svelte b/packages/svelte/test/runtime/samples/binding-input-checkbox/main.svelte similarity index 100% rename from test/runtime/samples/binding-input-checkbox/main.svelte rename to packages/svelte/test/runtime/samples/binding-input-checkbox/main.svelte diff --git a/test/runtime/samples/binding-input-group-duplicate-value/_config.js b/packages/svelte/test/runtime/samples/binding-input-group-duplicate-value/_config.js similarity index 100% rename from test/runtime/samples/binding-input-group-duplicate-value/_config.js rename to packages/svelte/test/runtime/samples/binding-input-group-duplicate-value/_config.js diff --git a/test/runtime/samples/binding-input-group-duplicate-value/main.svelte b/packages/svelte/test/runtime/samples/binding-input-group-duplicate-value/main.svelte similarity index 100% rename from test/runtime/samples/binding-input-group-duplicate-value/main.svelte rename to packages/svelte/test/runtime/samples/binding-input-group-duplicate-value/main.svelte diff --git a/packages/svelte/test/runtime/samples/binding-input-group-each-1/_config.js b/packages/svelte/test/runtime/samples/binding-input-group-each-1/_config.js new file mode 100644 index 0000000000..8ea469a3c0 --- /dev/null +++ b/packages/svelte/test/runtime/samples/binding-input-group-each-1/_config.js @@ -0,0 +1,330 @@ +let values = []; +let selected_array = []; + +export default { + before_test() { + values = [{ name: 'Alpha' }, { name: 'Beta' }, { name: 'Gamma' }]; + selected_array = [[values[1]], [], [values[2]]]; + }, + + get props() { + return { values, selected_array }; + }, + + html: ` +
+ + + + + + +

Beta

+
+
+ + + + + + +

+
+
+ + + + + + +

Gamma

+
+ `, + + ssrHtml: ` +
+ + + + + + +

Beta

+
+
+ + + + + + +

+
+
+ + + + + + +

Gamma

+
+ `, + + async test({ assert, component, target, window }) { + const inputs = target.querySelectorAll('input'); + assert.equal(inputs[0].checked, false); + assert.equal(inputs[1].checked, true); + assert.equal(inputs[2].checked, false); + assert.equal(inputs[3].checked, false); + assert.equal(inputs[4].checked, false); + assert.equal(inputs[5].checked, false); + assert.equal(inputs[6].checked, false); + assert.equal(inputs[7].checked, false); + assert.equal(inputs[8].checked, true); + + const event = new window.Event('change'); + + inputs[0].checked = true; + await inputs[0].dispatchEvent(event); + + assert.htmlEqual( + target.innerHTML, + ` +
+ + + + + + +

Alpha, Beta

+
+
+ + + + + + +

+
+
+ + + + + + +

Gamma

+
+ ` + ); + inputs[3].checked = true; + await inputs[3].dispatchEvent(event); + + assert.htmlEqual( + target.innerHTML, + ` +
+ + + + + + +

Alpha, Beta

+
+
+ + + + + + +

Alpha

+
+
+ + + + + + +

Gamma

+
+ ` + ); + + inputs[8].checked = false; + await inputs[8].dispatchEvent(event); + + assert.htmlEqual( + target.innerHTML, + ` +
+ + + + + + +

Alpha, Beta

+
+
+ + + + + + +

Alpha

+
+
+ + + + + + +

+
+ ` + ); + + component.selected_array = [[values[1], values[2]], [values[2]]]; + + assert.equal(inputs[0].checked, false); + assert.equal(inputs[1].checked, true); + assert.equal(inputs[2].checked, true); + assert.equal(inputs[3].checked, false); + assert.equal(inputs[4].checked, false); + assert.equal(inputs[5].checked, true); + + assert.htmlEqual( + target.innerHTML, + ` +
+ + + + + + +

Beta, Gamma

+
+
+ + + + + + +

Gamma

+
+ ` + ); + } +}; diff --git a/test/runtime/samples/binding-input-group-each-1/main.svelte b/packages/svelte/test/runtime/samples/binding-input-group-each-1/main.svelte similarity index 100% rename from test/runtime/samples/binding-input-group-each-1/main.svelte rename to packages/svelte/test/runtime/samples/binding-input-group-each-1/main.svelte diff --git a/packages/svelte/test/runtime/samples/binding-input-group-each-10/_config.js b/packages/svelte/test/runtime/samples/binding-input-group-each-10/_config.js new file mode 100644 index 0000000000..2a0b29428e --- /dev/null +++ b/packages/svelte/test/runtime/samples/binding-input-group-each-10/_config.js @@ -0,0 +1,52 @@ +// https://github.com/sveltejs/svelte/issues/7633 +export default { + async test({ assert, target, component }) { + let inputs = target.querySelectorAll('input'); + + assert.equal(inputs[0].checked, true); + assert.equal(inputs[1].checked, false); + assert.equal(inputs[2].checked, false); + + component.moveDown(0); + component.moveDown(1); + await Promise.resolve(); + + assert.htmlEqual( + target.innerHTML, + ` +
+ b +
+
+ c +
+
+ a +
+ ` + ); + + // after shifting order, should still keep the correct radio checked + inputs = target.querySelectorAll('input'); + assert.equal(inputs[0].checked, false); + assert.equal(inputs[1].checked, false); + assert.equal(inputs[2].checked, true); + + component.current = 'b'; + await Promise.resolve(); + + inputs = target.querySelectorAll('input'); + assert.equal(inputs[0].checked, true); + assert.equal(inputs[1].checked, false); + assert.equal(inputs[2].checked, false); + + component.moveDown(1); + await Promise.resolve(); + + // after shifting order, should still keep the correct radio checked + inputs = target.querySelectorAll('input'); + assert.equal(inputs[0].checked, true); + assert.equal(inputs[1].checked, false); + assert.equal(inputs[2].checked, false); + } +}; diff --git a/test/runtime/samples/binding-input-group-each-10/main.svelte b/packages/svelte/test/runtime/samples/binding-input-group-each-10/main.svelte similarity index 100% rename from test/runtime/samples/binding-input-group-each-10/main.svelte rename to packages/svelte/test/runtime/samples/binding-input-group-each-10/main.svelte diff --git a/packages/svelte/test/runtime/samples/binding-input-group-each-11/_config.js b/packages/svelte/test/runtime/samples/binding-input-group-each-11/_config.js new file mode 100644 index 0000000000..5e0dc07b00 --- /dev/null +++ b/packages/svelte/test/runtime/samples/binding-input-group-each-11/_config.js @@ -0,0 +1,88 @@ +// https://github.com/sveltejs/svelte/issues/6112 +export default { + async test({ assert, target, component, window }) { + let inputs = target.querySelectorAll('input'); + + const check = (set) => { + for (let i = 0; i < inputs.length; i++) { + assert.equal(inputs[i].checked, set.has(i)); + } + }; + + assert.htmlEqual( + target.innerHTML, + ` +
1
+
2 +
+ + +
+
+ + +
+
+
3 +
+ + +
+
+ + +
+
+ ` + ); + + check(new Set([0, 2, 5, 6])); + + const event = new window.Event('change'); + + // dom to value + inputs[3].checked = true; + await inputs[3].dispatchEvent(event); + + check(new Set([0, 3, 5, 6])); + assert.equal(component.pipelineOperations[1].operation.args[1].value, 'd'); + + // remove item + component.pipelineOperations = component.pipelineOperations.slice(1); + await Promise.resolve(); + + assert.htmlEqual( + target.innerHTML, + ` +
2 +
+ + +
+
+ + +
+
+
3 +
+ + +
+
+ + +
+
+ ` + ); + + inputs = target.querySelectorAll('input'); + check(new Set([0, 3, 5, 6])); + + inputs[2].checked = true; + await inputs[2].dispatchEvent(event); + + check(new Set([0, 2, 5, 6])); + } +}; diff --git a/test/runtime/samples/binding-input-group-each-11/main.svelte b/packages/svelte/test/runtime/samples/binding-input-group-each-11/main.svelte similarity index 100% rename from test/runtime/samples/binding-input-group-each-11/main.svelte rename to packages/svelte/test/runtime/samples/binding-input-group-each-11/main.svelte diff --git a/packages/svelte/test/runtime/samples/binding-input-group-each-12/_config.js b/packages/svelte/test/runtime/samples/binding-input-group-each-12/_config.js new file mode 100644 index 0000000000..a256d48b4a --- /dev/null +++ b/packages/svelte/test/runtime/samples/binding-input-group-each-12/_config.js @@ -0,0 +1,89 @@ +// https://github.com/sveltejs/svelte/issues/6112 +export default { + async test({ assert, target, component, window }) { + let inputs = target.querySelectorAll('input'); + + const check = (set) => { + for (let i = 0; i < inputs.length; i++) { + assert.equal(inputs[i].checked, set.has(i)); + } + }; + + assert.htmlEqual( + target.innerHTML, + ` +
1
+
2 +
+ + +
+
+ + +
+
+
3 +
+ + +
+
+ + +
+
+ ` + ); + + check(new Set([0, 2])); + + const event = new window.Event('change'); + + // dom to value + inputs[3].checked = true; + await inputs[3].dispatchEvent(event); + + check(new Set([0, 2, 3])); + assert.deepEqual(component.pipelineOperations[1].operation.args[1].value, ['c', 'd']); + + // remove item + component.pipelineOperations = component.pipelineOperations.slice(1); + await Promise.resolve(); + + assert.htmlEqual( + target.innerHTML, + ` +
2 +
+ + +
+
+ + +
+
+
3 +
+ + +
+
+ + +
+
+ ` + ); + + inputs = target.querySelectorAll('input'); + check(new Set([0, 2, 3])); + + inputs[5].checked = true; + await inputs[5].dispatchEvent(event); + + check(new Set([0, 2, 3, 5])); + assert.deepEqual(component.pipelineOperations[1].operation.args[0].value, ['b']); + } +}; diff --git a/test/runtime/samples/binding-input-group-each-12/main.svelte b/packages/svelte/test/runtime/samples/binding-input-group-each-12/main.svelte similarity index 100% rename from test/runtime/samples/binding-input-group-each-12/main.svelte rename to packages/svelte/test/runtime/samples/binding-input-group-each-12/main.svelte diff --git a/packages/svelte/test/runtime/samples/binding-input-group-each-13/_config.js b/packages/svelte/test/runtime/samples/binding-input-group-each-13/_config.js new file mode 100644 index 0000000000..47bc183e09 --- /dev/null +++ b/packages/svelte/test/runtime/samples/binding-input-group-each-13/_config.js @@ -0,0 +1,30 @@ +export default { + async test({ assert, target, window }) { + const [input1, input2] = target.querySelectorAll('input[type=text]'); + const radio = target.querySelector('input[type=radio]'); + + assert.equal(radio.checked, false); + + const event = new window.Event('input'); + + input1.value = 'world'; + await input1.dispatchEvent(event); + assert.equal(radio.checked, true); + + input2.value = 'foo'; + await input2.dispatchEvent(event); + assert.equal(radio.checked, false); + + input1.value = 'foo'; + await input1.dispatchEvent(event); + assert.equal(radio.checked, true); + + input1.value = 'bar'; + await input1.dispatchEvent(event); + assert.equal(radio.checked, false); + + input2.value = 'bar'; + await input2.dispatchEvent(event); + assert.equal(radio.checked, true); + } +}; diff --git a/test/runtime/samples/binding-input-group-each-13/main.svelte b/packages/svelte/test/runtime/samples/binding-input-group-each-13/main.svelte similarity index 100% rename from test/runtime/samples/binding-input-group-each-13/main.svelte rename to packages/svelte/test/runtime/samples/binding-input-group-each-13/main.svelte diff --git a/packages/svelte/test/runtime/samples/binding-input-group-each-2/_config.js b/packages/svelte/test/runtime/samples/binding-input-group-each-2/_config.js new file mode 100644 index 0000000000..af4376dbaf --- /dev/null +++ b/packages/svelte/test/runtime/samples/binding-input-group-each-2/_config.js @@ -0,0 +1,78 @@ +export default { + html: ` + + + + +

1, 2, 3

`, + + ssrHtml: ` + + + + +

1, 2, 3

`, + + async test({ assert, component, target, window }) { + const inputs = target.querySelectorAll('input'); + assert.equal(inputs[0].checked, true); + assert.equal(inputs[1].checked, true); + assert.equal(inputs[2].checked, true); + + const event = new window.Event('change'); + + inputs[0].checked = false; + await inputs[0].dispatchEvent(event); + + assert.htmlEqual( + target.innerHTML, + ` + + + + +

2, 3

+ ` + ); + + component.selected = [[1, 3]]; + assert.equal(inputs[0].checked, true); + assert.equal(inputs[1].checked, false); + assert.equal(inputs[2].checked, true); + + assert.htmlEqual( + target.innerHTML, + ` + + + + +

1, 3

+ ` + ); + } +}; diff --git a/test/runtime/samples/binding-input-group-each-2/main.svelte b/packages/svelte/test/runtime/samples/binding-input-group-each-2/main.svelte similarity index 100% rename from test/runtime/samples/binding-input-group-each-2/main.svelte rename to packages/svelte/test/runtime/samples/binding-input-group-each-2/main.svelte diff --git a/packages/svelte/test/runtime/samples/binding-input-group-each-3/_config.js b/packages/svelte/test/runtime/samples/binding-input-group-each-3/_config.js new file mode 100644 index 0000000000..24ab3e2560 --- /dev/null +++ b/packages/svelte/test/runtime/samples/binding-input-group-each-3/_config.js @@ -0,0 +1,329 @@ +let values = []; + +let selected_array = []; + +export default { + before_test() { + values = [{ name: 'Alpha' }, { name: 'Beta' }, { name: 'Gamma' }]; + selected_array = [[values[1]], [], [values[2]]]; + }, + + get props() { + return { values, selected_array }; + }, + + html: ` +
+ + + + + + +

Beta

+
+
+ + + + + + +

+
+
+ + + + + + +

Gamma

+
+ `, + ssrHtml: ` +
+ + + + + + +

Beta

+
+
+ + + + + + +

+
+
+ + + + + + +

Gamma

+
+ `, + async test({ assert, component, target, window }) { + const inputs = target.querySelectorAll('input'); + assert.equal(inputs[0].checked, false); + assert.equal(inputs[1].checked, true); + assert.equal(inputs[2].checked, false); + assert.equal(inputs[3].checked, false); + assert.equal(inputs[4].checked, false); + assert.equal(inputs[5].checked, false); + assert.equal(inputs[6].checked, false); + assert.equal(inputs[7].checked, false); + assert.equal(inputs[8].checked, true); + + const event = new window.Event('change'); + + inputs[0].checked = true; + await inputs[0].dispatchEvent(event); + + assert.htmlEqual( + target.innerHTML, + ` +
+ + + + + + +

Alpha, Beta

+
+
+ + + + + + +

+
+
+ + + + + + +

Gamma

+
+ ` + ); + inputs[3].checked = true; + await inputs[3].dispatchEvent(event); + + assert.htmlEqual( + target.innerHTML, + ` +
+ + + + + + +

Alpha, Beta

+
+
+ + + + + + +

Alpha

+
+
+ + + + + + +

Gamma

+
+ ` + ); + + inputs[8].checked = false; + await inputs[8].dispatchEvent(event); + + assert.htmlEqual( + target.innerHTML, + ` +
+ + + + + + +

Alpha, Beta

+
+
+ + + + + + +

Alpha

+
+
+ + + + + + +

+
+ ` + ); + + component.selected_array = [[values[1], values[2]], [values[2]]]; + + assert.equal(inputs[0].checked, false); + assert.equal(inputs[1].checked, true); + assert.equal(inputs[2].checked, true); + assert.equal(inputs[3].checked, false); + assert.equal(inputs[4].checked, false); + assert.equal(inputs[5].checked, true); + + assert.htmlEqual( + target.innerHTML, + ` +
+ + + + + + +

Beta, Gamma

+
+
+ + + + + + +

Gamma

+
+ ` + ); + } +}; diff --git a/test/runtime/samples/binding-input-group-each-3/main.svelte b/packages/svelte/test/runtime/samples/binding-input-group-each-3/main.svelte similarity index 100% rename from test/runtime/samples/binding-input-group-each-3/main.svelte rename to packages/svelte/test/runtime/samples/binding-input-group-each-3/main.svelte diff --git a/packages/svelte/test/runtime/samples/binding-input-group-each-4/_config.js b/packages/svelte/test/runtime/samples/binding-input-group-each-4/_config.js new file mode 100644 index 0000000000..e29b3ea2f6 --- /dev/null +++ b/packages/svelte/test/runtime/samples/binding-input-group-each-4/_config.js @@ -0,0 +1,182 @@ +export default { + html: ` + + + +

1

+ + + +

2

+ + + +

+ + + +

3

+ `, + ssrHtml: ` + + + +

1

+ + + +

2

+ + + +

+ + + +

3

+ `, + async test({ assert, component, target, window }) { + const inputs = target.querySelectorAll('input'); + assert.equal(inputs[0].checked, true); + assert.equal(inputs[1].checked, false); + assert.equal(inputs[2].checked, false); + + assert.equal(inputs[3].checked, false); + assert.equal(inputs[4].checked, true); + assert.equal(inputs[5].checked, false); + + assert.equal(inputs[6].checked, false); + assert.equal(inputs[7].checked, false); + assert.equal(inputs[8].checked, false); + + assert.equal(inputs[9].checked, false); + assert.equal(inputs[10].checked, false); + assert.equal(inputs[11].checked, true); + + const event = new window.Event('change'); + + inputs[2].checked = true; + await inputs[2].dispatchEvent(event); + + assert.htmlEqual( + target.innerHTML, + ` + + + +

1, 3

+ + + +

2

+ + + +

+ + + +

3

+ ` + ); + + inputs[9].checked = true; + await inputs[9].dispatchEvent(event); + + assert.htmlEqual( + target.innerHTML, + ` + + + +

1, 3

+ + + +

2

+ + + +

+ + + +

1, 3

+ ` + ); + + inputs[4].checked = false; + await inputs[4].dispatchEvent(event); + inputs[5].checked = true; + await inputs[5].dispatchEvent(event); + inputs[6].checked = true; + await inputs[6].dispatchEvent(event); + inputs[7].checked = true; + await inputs[7].dispatchEvent(event); + inputs[11].checked = false; + await inputs[11].dispatchEvent(event); + + assert.htmlEqual( + target.innerHTML, + ` + + + +

1, 3

+ + + +

3

+ + + +

1, 2

+ + + +

1

+ ` + ); + + component.selected_array_1 = [[3], [1]]; + component.selected_array_2 = [[], [2]]; + + assert.equal(inputs[0].checked, false); + assert.equal(inputs[1].checked, false); + assert.equal(inputs[2].checked, true); + + assert.equal(inputs[3].checked, true); + assert.equal(inputs[4].checked, false); + assert.equal(inputs[5].checked, false); + + assert.equal(inputs[6].checked, false); + assert.equal(inputs[7].checked, false); + assert.equal(inputs[8].checked, false); + + assert.equal(inputs[9].checked, false); + assert.equal(inputs[10].checked, true); + assert.equal(inputs[11].checked, false); + + assert.htmlEqual( + target.innerHTML, + ` + + + +

3

+ + + +

1

+ + + +

+ + + +

2

+ ` + ); + } +}; diff --git a/test/runtime/samples/binding-input-group-each-4/main.svelte b/packages/svelte/test/runtime/samples/binding-input-group-each-4/main.svelte similarity index 100% rename from test/runtime/samples/binding-input-group-each-4/main.svelte rename to packages/svelte/test/runtime/samples/binding-input-group-each-4/main.svelte diff --git a/packages/svelte/test/runtime/samples/binding-input-group-each-5/_config.js b/packages/svelte/test/runtime/samples/binding-input-group-each-5/_config.js new file mode 100644 index 0000000000..f95c303119 --- /dev/null +++ b/packages/svelte/test/runtime/samples/binding-input-group-each-5/_config.js @@ -0,0 +1,189 @@ +export default { + html: ` + + + +

1

+ + + +

1, 2, 3

+ + + +

2

+ + + +

1

+ `, + ssrHtml: ` + + + +

1

+ + + +

1, 2, 3

+ + + +

2

+ + + +

1

+ `, + async test({ assert, component, target, window }) { + const inputs = target.querySelectorAll('input'); + assert.equal(inputs[0].checked, true); + assert.equal(inputs[1].checked, false); + assert.equal(inputs[2].checked, false); + + assert.equal(inputs[3].checked, true); + assert.equal(inputs[4].checked, true); + assert.equal(inputs[5].checked, true); + + assert.equal(inputs[6].checked, false); + assert.equal(inputs[7].checked, true); + assert.equal(inputs[8].checked, false); + + assert.equal(inputs[9].checked, true); + assert.equal(inputs[10].checked, false); + assert.equal(inputs[11].checked, false); + + const event = new window.Event('change'); + + inputs[2].checked = true; + await inputs[2].dispatchEvent(event); + + assert.htmlEqual( + target.innerHTML, + ` + + + +

1, 3

+ + + +

1, 2, 3

+ + + +

2

+ + + +

1

+ ` + ); + + inputs[8].checked = true; + await inputs[8].dispatchEvent(event); + + assert.htmlEqual( + target.innerHTML, + ` + + + +

1, 3

+ + + +

1, 2, 3

+ + + +

2, 3

+ + + +

1

+ ` + ); + + component.selected_index = [1, 1]; + + assert.htmlEqual( + target.innerHTML, + ` + + + +

1, 2, 3

+ + + +

1, 2, 3

+ + + +

1

+ + + +

1

+ ` + ); + + assert.equal(inputs[0].checked, true); + assert.equal(inputs[1].checked, true); + assert.equal(inputs[2].checked, true); + + assert.equal(inputs[3].checked, true); + assert.equal(inputs[4].checked, true); + assert.equal(inputs[5].checked, true); + + assert.equal(inputs[6].checked, true); + assert.equal(inputs[7].checked, false); + assert.equal(inputs[8].checked, false); + + assert.equal(inputs[9].checked, true); + assert.equal(inputs[10].checked, false); + assert.equal(inputs[11].checked, false); + + inputs[5].checked = false; + await inputs[5].dispatchEvent(event); + + assert.htmlEqual( + target.innerHTML, + ` + + + +

1, 2

+ + + +

1, 2

+ + + +

1

+ + + +

1

+ ` + ); + + assert.equal(inputs[0].checked, true); + assert.equal(inputs[1].checked, true); + assert.equal(inputs[2].checked, false); + + assert.equal(inputs[3].checked, true); + assert.equal(inputs[4].checked, true); + assert.equal(inputs[5].checked, false); + + assert.equal(inputs[6].checked, true); + assert.equal(inputs[7].checked, false); + assert.equal(inputs[8].checked, false); + + assert.equal(inputs[9].checked, true); + assert.equal(inputs[10].checked, false); + assert.equal(inputs[11].checked, false); + } +}; diff --git a/test/runtime/samples/binding-input-group-each-5/main.svelte b/packages/svelte/test/runtime/samples/binding-input-group-each-5/main.svelte similarity index 100% rename from test/runtime/samples/binding-input-group-each-5/main.svelte rename to packages/svelte/test/runtime/samples/binding-input-group-each-5/main.svelte diff --git a/packages/svelte/test/runtime/samples/binding-input-group-each-6/_config.js b/packages/svelte/test/runtime/samples/binding-input-group-each-6/_config.js new file mode 100644 index 0000000000..5eac49a2a8 --- /dev/null +++ b/packages/svelte/test/runtime/samples/binding-input-group-each-6/_config.js @@ -0,0 +1,95 @@ +export default { + html: ` + + + +

+ + + +

+ + + +

+ `, + async test({ assert, target, window }) { + const inputs = target.querySelectorAll('input'); + assert.equal(inputs[0].checked, false); + assert.equal(inputs[1].checked, false); + assert.equal(inputs[2].checked, false); + + assert.equal(inputs[3].checked, false); + assert.equal(inputs[4].checked, false); + assert.equal(inputs[5].checked, false); + + assert.equal(inputs[6].checked, false); + assert.equal(inputs[7].checked, false); + assert.equal(inputs[8].checked, false); + + const event = new window.Event('change'); + + inputs[2].checked = true; + await inputs[2].dispatchEvent(event); + + assert.htmlEqual( + target.innerHTML, + ` + + + +

z

+ + + +

+ + + +

+ ` + ); + + inputs[4].checked = true; + await inputs[4].dispatchEvent(event); + + assert.htmlEqual( + target.innerHTML, + ` + + + +

z

+ + + +

y

+ + + +

+ ` + ); + + inputs[5].checked = true; + await inputs[5].dispatchEvent(event); + + assert.htmlEqual( + target.innerHTML, + ` + + + +

z

+ + + +

y, z

+ + + +

+ ` + ); + } +}; diff --git a/test/runtime/samples/binding-input-group-each-6/main.svelte b/packages/svelte/test/runtime/samples/binding-input-group-each-6/main.svelte similarity index 100% rename from test/runtime/samples/binding-input-group-each-6/main.svelte rename to packages/svelte/test/runtime/samples/binding-input-group-each-6/main.svelte diff --git a/test/runtime/samples/binding-input-group-each-7/_config.js b/packages/svelte/test/runtime/samples/binding-input-group-each-7/_config.js similarity index 100% rename from test/runtime/samples/binding-input-group-each-7/_config.js rename to packages/svelte/test/runtime/samples/binding-input-group-each-7/_config.js diff --git a/test/runtime/samples/binding-input-group-each-7/main.svelte b/packages/svelte/test/runtime/samples/binding-input-group-each-7/main.svelte similarity index 100% rename from test/runtime/samples/binding-input-group-each-7/main.svelte rename to packages/svelte/test/runtime/samples/binding-input-group-each-7/main.svelte diff --git a/packages/svelte/test/runtime/samples/binding-input-group-each-8/_config.js b/packages/svelte/test/runtime/samples/binding-input-group-each-8/_config.js new file mode 100644 index 0000000000..ea76e4713b --- /dev/null +++ b/packages/svelte/test/runtime/samples/binding-input-group-each-8/_config.js @@ -0,0 +1,88 @@ +// https://github.com/sveltejs/svelte/issues/7884 +export default { + async test({ assert, target, component, window }) { + let inputs = target.querySelectorAll('input'); + + assert.htmlEqual( + target.innerHTML, + ` +

{"foo":[],"bar":[]}

+

foo

+
    +
  • +
  • +
  • +
+

bar

+
    +
  • +
  • +
  • +
+ ` + ); + + const event = new window.Event('change'); + + inputs[0].checked = true; + await inputs[0].dispatchEvent(event); + inputs[2].checked = true; + await inputs[2].dispatchEvent(event); + inputs[3].checked = true; + await inputs[3].dispatchEvent(event); + + assert.htmlEqual( + target.innerHTML, + ` +

{"foo":[1,3],"bar":[1]}

+

foo

+
    +
  • +
  • +
  • +
+

bar

+
    +
  • +
  • +
  • +
+ ` + ); + + await component.update(); + + assert.htmlEqual( + target.innerHTML, + ` +

{"foo":[1,3],"bar":[1],"qux":[]}

+

qux

+
    +
  • +
  • +
  • +
+ ` + ); + + inputs = target.querySelectorAll('input'); + inputs[0].checked = true; + await inputs[0].dispatchEvent(event); + + assert.htmlEqual( + target.innerHTML, + ` +

{"foo":[1,3],"bar":[1],"qux":[4]}

+

qux

+
    +
  • +
  • +
  • +
+ ` + ); + assert.equal(inputs[0].checked, true); + assert.equal(inputs[1].checked, false); + assert.equal(inputs[2].checked, false); + } +}; diff --git a/test/runtime/samples/binding-input-group-each-8/main.svelte b/packages/svelte/test/runtime/samples/binding-input-group-each-8/main.svelte similarity index 100% rename from test/runtime/samples/binding-input-group-each-8/main.svelte rename to packages/svelte/test/runtime/samples/binding-input-group-each-8/main.svelte diff --git a/packages/svelte/test/runtime/samples/binding-input-group-each-9/_config.js b/packages/svelte/test/runtime/samples/binding-input-group-each-9/_config.js new file mode 100644 index 0000000000..c3ebc6cc53 --- /dev/null +++ b/packages/svelte/test/runtime/samples/binding-input-group-each-9/_config.js @@ -0,0 +1,49 @@ +// https://github.com/sveltejs/svelte/issues/7633 +export default { + async test({ assert, target, component }) { + let inputs = target.querySelectorAll('input'); + + assert.equal(inputs[0].checked, true); + assert.equal(inputs[1].checked, false); + assert.equal(inputs[2].checked, false); + + await component.moveDown(0); + await component.moveDown(1); + + assert.htmlEqual( + target.innerHTML, + ` +
+ b +
+
+ c +
+
+ a +
+ ` + ); + + // after shifting order, should still keep the correct radio checked + inputs = target.querySelectorAll('input'); + assert.equal(inputs[0].checked, false); + assert.equal(inputs[1].checked, false); + assert.equal(inputs[2].checked, true); + + await (component.current = 'b'); + + inputs = target.querySelectorAll('input'); + assert.equal(inputs[0].checked, true); + assert.equal(inputs[1].checked, false); + assert.equal(inputs[2].checked, false); + + await component.moveDown(1); + + // after shifting order, should still keep the correct radio checked + inputs = target.querySelectorAll('input'); + assert.equal(inputs[0].checked, true); + assert.equal(inputs[1].checked, false); + assert.equal(inputs[2].checked, false); + } +}; diff --git a/test/runtime/samples/binding-input-group-each-9/main.svelte b/packages/svelte/test/runtime/samples/binding-input-group-each-9/main.svelte similarity index 100% rename from test/runtime/samples/binding-input-group-each-9/main.svelte rename to packages/svelte/test/runtime/samples/binding-input-group-each-9/main.svelte diff --git a/test/runtime/samples/binding-input-group-if-gh-8372-1/_config.js b/packages/svelte/test/runtime/samples/binding-input-group-if-gh-8372-1/_config.js similarity index 100% rename from test/runtime/samples/binding-input-group-if-gh-8372-1/_config.js rename to packages/svelte/test/runtime/samples/binding-input-group-if-gh-8372-1/_config.js diff --git a/test/runtime/samples/binding-input-group-if-gh-8372-1/main.svelte b/packages/svelte/test/runtime/samples/binding-input-group-if-gh-8372-1/main.svelte similarity index 100% rename from test/runtime/samples/binding-input-group-if-gh-8372-1/main.svelte rename to packages/svelte/test/runtime/samples/binding-input-group-if-gh-8372-1/main.svelte diff --git a/test/runtime/samples/binding-input-group-if-gh-8372-2/_config.js b/packages/svelte/test/runtime/samples/binding-input-group-if-gh-8372-2/_config.js similarity index 100% rename from test/runtime/samples/binding-input-group-if-gh-8372-2/_config.js rename to packages/svelte/test/runtime/samples/binding-input-group-if-gh-8372-2/_config.js diff --git a/test/runtime/samples/binding-input-group-if-gh-8372-2/main.svelte b/packages/svelte/test/runtime/samples/binding-input-group-if-gh-8372-2/main.svelte similarity index 100% rename from test/runtime/samples/binding-input-group-if-gh-8372-2/main.svelte rename to packages/svelte/test/runtime/samples/binding-input-group-if-gh-8372-2/main.svelte diff --git a/packages/svelte/test/runtime/samples/binding-input-group-undefined/_config.js b/packages/svelte/test/runtime/samples/binding-input-group-undefined/_config.js new file mode 100644 index 0000000000..d788cc0e7b --- /dev/null +++ b/packages/svelte/test/runtime/samples/binding-input-group-undefined/_config.js @@ -0,0 +1,24 @@ +export default { + async test({ assert, target, component, window }) { + const [input1, input2, input3] = target.querySelectorAll('input'); + const event = new window.Event('change'); + + function validate_inputs(v1, v2, v3) { + assert.equal(input1.checked, v1); + assert.equal(input2.checked, v2); + assert.equal(input3.checked, v3); + } + + assert.deepEqual(component.values.inner, []); + validate_inputs(false, false, false); + + component.values = { inner: undefined }; + assert.deepEqual(component.values.inner, undefined); + validate_inputs(false, false, false); + + input1.checked = true; + await input1.dispatchEvent(event); + assert.deepEqual(component.values.inner, ['first']); + validate_inputs(true, false, false); + } +}; diff --git a/test/runtime/samples/binding-input-group-undefined/main.svelte b/packages/svelte/test/runtime/samples/binding-input-group-undefined/main.svelte similarity index 100% rename from test/runtime/samples/binding-input-group-undefined/main.svelte rename to packages/svelte/test/runtime/samples/binding-input-group-undefined/main.svelte diff --git a/packages/svelte/test/runtime/samples/binding-input-member-expression-update/_config.js b/packages/svelte/test/runtime/samples/binding-input-member-expression-update/_config.js new file mode 100644 index 0000000000..1d4e964143 --- /dev/null +++ b/packages/svelte/test/runtime/samples/binding-input-member-expression-update/_config.js @@ -0,0 +1,18 @@ +// binding member expression shouldn't invalidate the property name +export default { + async test({ assert, component, target, window }) { + const input = target.querySelector('input'); + assert.deepEqual(component.logs.length, 1); + assert.equal(input.value, 'abc'); + + input.value = 'hij'; + await input.dispatchEvent(new window.Event('input')); + + assert.deepEqual(component.values.a, 'hij'); + assert.deepEqual(component.logs.length, 1); + + component.paths = ['b']; + assert.deepEqual(component.logs.length, 2); + assert.equal(input.value, 'def'); + } +}; diff --git a/test/runtime/samples/binding-input-member-expression-update/main.svelte b/packages/svelte/test/runtime/samples/binding-input-member-expression-update/main.svelte similarity index 100% rename from test/runtime/samples/binding-input-member-expression-update/main.svelte rename to packages/svelte/test/runtime/samples/binding-input-member-expression-update/main.svelte diff --git a/test/runtime/samples/binding-input-number-2/_config.js b/packages/svelte/test/runtime/samples/binding-input-number-2/_config.js similarity index 100% rename from test/runtime/samples/binding-input-number-2/_config.js rename to packages/svelte/test/runtime/samples/binding-input-number-2/_config.js diff --git a/test/runtime/samples/binding-input-number-2/main.svelte b/packages/svelte/test/runtime/samples/binding-input-number-2/main.svelte similarity index 100% rename from test/runtime/samples/binding-input-number-2/main.svelte rename to packages/svelte/test/runtime/samples/binding-input-number-2/main.svelte diff --git a/packages/svelte/test/runtime/samples/binding-input-number/_config.js b/packages/svelte/test/runtime/samples/binding-input-number/_config.js new file mode 100644 index 0000000000..ebd82ce24d --- /dev/null +++ b/packages/svelte/test/runtime/samples/binding-input-number/_config.js @@ -0,0 +1,57 @@ +export default { + get props() { + return { count: 42 }; + }, + + html: ` + +

number 42

+ `, + + ssrHtml: ` + +

number 42

+ `, + + async test({ assert, component, target, window }) { + const input = target.querySelector('input'); + assert.equal(input.value, '42'); + + const event = new window.Event('input'); + + input.value = '43'; + await input.dispatchEvent(event); + + assert.equal(component.count, 43); + assert.htmlEqual( + target.innerHTML, + ` + +

number 43

+ ` + ); + + component.count = 44; + assert.equal(input.value, '44'); + assert.htmlEqual( + target.innerHTML, + ` + +

number 44

+ ` + ); + + // empty string should be treated as null + input.value = ''; + await input.dispatchEvent(event); + + assert.equal(component.count, null); + assert.htmlEqual( + target.innerHTML, + ` + +

object null

+ ` + ); + } +}; diff --git a/test/runtime/samples/binding-input-number/main.svelte b/packages/svelte/test/runtime/samples/binding-input-number/main.svelte similarity index 100% rename from test/runtime/samples/binding-input-number/main.svelte rename to packages/svelte/test/runtime/samples/binding-input-number/main.svelte diff --git a/packages/svelte/test/runtime/samples/binding-input-radio-group/_config.js b/packages/svelte/test/runtime/samples/binding-input-radio-group/_config.js new file mode 100644 index 0000000000..14cf1d386a --- /dev/null +++ b/packages/svelte/test/runtime/samples/binding-input-radio-group/_config.js @@ -0,0 +1,96 @@ +const values = [{ name: 'Alpha' }, { name: 'Beta' }, { name: 'Gamma' }]; + +export default { + get props() { + return { values, selected: values[1] }; + }, + + html: ` + + + + + + +

Beta

`, + + ssrHtml: ` + + + + + + +

Beta

`, + + async test({ assert, component, target, window }) { + const inputs = target.querySelectorAll('input'); + assert.equal(inputs[0].checked, false); + assert.equal(inputs[1].checked, true); + assert.equal(inputs[2].checked, false); + + const event = new window.Event('change'); + + inputs[0].checked = true; + await inputs[0].dispatchEvent(event); + + assert.htmlEqual( + target.innerHTML, + ` + + + + + + +

Alpha

+ ` + ); + + assert.equal(inputs[0].checked, true); + assert.equal(inputs[1].checked, false); + assert.equal(inputs[2].checked, false); + + component.selected = values[2]; + assert.equal(inputs[0].checked, false); + assert.equal(inputs[1].checked, false); + assert.equal(inputs[2].checked, true); + + assert.htmlEqual( + target.innerHTML, + ` + + + + + + +

Gamma

+ ` + ); + } +}; diff --git a/test/runtime/samples/binding-input-radio-group/main.svelte b/packages/svelte/test/runtime/samples/binding-input-radio-group/main.svelte similarity index 100% rename from test/runtime/samples/binding-input-radio-group/main.svelte rename to packages/svelte/test/runtime/samples/binding-input-radio-group/main.svelte diff --git a/packages/svelte/test/runtime/samples/binding-input-range-change-with-max/_config.js b/packages/svelte/test/runtime/samples/binding-input-range-change-with-max/_config.js new file mode 100644 index 0000000000..b4c3ca5a5f --- /dev/null +++ b/packages/svelte/test/runtime/samples/binding-input-range-change-with-max/_config.js @@ -0,0 +1,36 @@ +export default { + html: ` + + +

10 of 10

+ `, + + ssrHtml: ` + + +

10 of 10

+ `, + + async test({ assert, target, window }) { + const input = target.querySelector('input'); + assert.equal(input.value, '10'); + + // should not change because max is 10, input range behaviour + // seems there is bug in jsdom (HTMLInputElement-impl) which behaviour is different from real browsers + // input.value = '20'; + // assert.equal(input.value, '10'); + + const button = target.querySelector('button'); + await button.dispatchEvent(new window.Event('click')); + + assert.equal(input.value, '20'); + assert.htmlEqual( + target.innerHTML, + ` + + +

20 of 20

+ ` + ); + } +}; diff --git a/test/runtime/samples/binding-input-range-change-with-max/main.svelte b/packages/svelte/test/runtime/samples/binding-input-range-change-with-max/main.svelte similarity index 100% rename from test/runtime/samples/binding-input-range-change-with-max/main.svelte rename to packages/svelte/test/runtime/samples/binding-input-range-change-with-max/main.svelte diff --git a/packages/svelte/test/runtime/samples/binding-input-range-change/_config.js b/packages/svelte/test/runtime/samples/binding-input-range-change/_config.js new file mode 100644 index 0000000000..ff54d289cd --- /dev/null +++ b/packages/svelte/test/runtime/samples/binding-input-range-change/_config.js @@ -0,0 +1,44 @@ +export default { + get props() { + return { count: 42 }; + }, + + html: ` + +

number 42

+ `, + + ssrHtml: ` + +

number 42

+ `, + + async test({ assert, component, target, window }) { + const input = target.querySelector('input'); + assert.equal(input.value, '42'); + + const event = new window.Event('change'); + + input.value = '43'; + await input.dispatchEvent(event); + + assert.equal(component.count, 43); + assert.htmlEqual( + target.innerHTML, + ` + +

number 43

+ ` + ); + + component.count = 44; + assert.equal(input.value, '44'); + assert.htmlEqual( + target.innerHTML, + ` + +

number 44

+ ` + ); + } +}; diff --git a/test/runtime/samples/binding-input-range-change/main.svelte b/packages/svelte/test/runtime/samples/binding-input-range-change/main.svelte similarity index 100% rename from test/runtime/samples/binding-input-range-change/main.svelte rename to packages/svelte/test/runtime/samples/binding-input-range-change/main.svelte diff --git a/packages/svelte/test/runtime/samples/binding-input-range/_config.js b/packages/svelte/test/runtime/samples/binding-input-range/_config.js new file mode 100644 index 0000000000..455d0d2ffe --- /dev/null +++ b/packages/svelte/test/runtime/samples/binding-input-range/_config.js @@ -0,0 +1,44 @@ +export default { + get props() { + return { count: 42 }; + }, + + html: ` + +

number 42

+ `, + + ssrHtml: ` + +

number 42

+ `, + + async test({ assert, component, target, window }) { + const input = target.querySelector('input'); + assert.equal(input.value, '42'); + + const event = new window.Event('input'); + + input.value = '43'; + await input.dispatchEvent(event); + + assert.equal(component.count, 43); + assert.htmlEqual( + target.innerHTML, + ` + +

number 43

+ ` + ); + + component.count = 44; + assert.equal(input.value, '44'); + assert.htmlEqual( + target.innerHTML, + ` + +

number 44

+ ` + ); + } +}; diff --git a/test/runtime/samples/binding-input-range/main.svelte b/packages/svelte/test/runtime/samples/binding-input-range/main.svelte similarity index 100% rename from test/runtime/samples/binding-input-range/main.svelte rename to packages/svelte/test/runtime/samples/binding-input-range/main.svelte diff --git a/packages/svelte/test/runtime/samples/binding-input-text-contextual-deconflicted/_config.js b/packages/svelte/test/runtime/samples/binding-input-text-contextual-deconflicted/_config.js new file mode 100644 index 0000000000..11bba1a646 --- /dev/null +++ b/packages/svelte/test/runtime/samples/binding-input-text-contextual-deconflicted/_config.js @@ -0,0 +1,38 @@ +export default { + get props() { + return { foo: 'a', items: ['x'] }; + }, + + html: ` +

a

+

x

+ `, + + ssrHtml: ` +

a

+

x

+ `, + + async test({ assert, component, target, window }) { + const inputs = [...target.querySelectorAll('input')]; + const event = new window.Event('input'); + + assert.equal(inputs[0].value, 'a'); + + inputs[0].value = 'b'; + inputs[1].value = 'y'; + await inputs[0].dispatchEvent(event); + await inputs[1].dispatchEvent(event); + + assert.equal(component.foo, 'b'); + assert.equal(component.items[0], 'y'); + + assert.htmlEqual( + target.innerHTML, + ` +

b

+

y

+ ` + ); + } +}; diff --git a/test/runtime/samples/binding-input-text-contextual-deconflicted/main.svelte b/packages/svelte/test/runtime/samples/binding-input-text-contextual-deconflicted/main.svelte similarity index 100% rename from test/runtime/samples/binding-input-text-contextual-deconflicted/main.svelte rename to packages/svelte/test/runtime/samples/binding-input-text-contextual-deconflicted/main.svelte diff --git a/packages/svelte/test/runtime/samples/binding-input-text-contextual-reactive/_config.js b/packages/svelte/test/runtime/samples/binding-input-text-contextual-reactive/_config.js new file mode 100644 index 0000000000..27973cc7c4 --- /dev/null +++ b/packages/svelte/test/runtime/samples/binding-input-text-contextual-reactive/_config.js @@ -0,0 +1,139 @@ +export default { + get props() { + return { + items: [ + { done: false, text: 'one' }, + { done: true, text: 'two' }, + { done: false, text: 'three' } + ] + }; + }, + + html: ` +
+ +

one

+
+
+ +

two

+
+
+ +

three

+
+ +

remaining:one / done:two / remaining:three

+ `, + + ssrHtml: ` +
+ +

one

+
+
+ +

two

+
+
+ +

three

+
+ +

remaining:one / done:two / remaining:three

+ `, + + async test({ assert, component, target, window }) { + function set_text(i, text) { + const input = target.querySelectorAll('input[type="text"]')[i]; + input.value = text; + input.dispatchEvent(new window.Event('input')); + } + + function set_done(i, done) { + const input = target.querySelectorAll('input[type="checkbox"]')[i]; + input.checked = done; + input.dispatchEvent(new window.Event('change')); + } + + component.filter = 'remaining'; + + assert.htmlEqual( + target.innerHTML, + ` +
+ +

one

+
+
+ +

three

+
+ +

remaining:one / done:two / remaining:three

+ ` + ); + + await set_text(1, 'four'); + + assert.htmlEqual( + target.innerHTML, + ` +
+ +

one

+
+
+ +

four

+
+ +

remaining:one / done:two / remaining:four

+ ` + ); + + assert.deepEqual(component.items, [ + { done: false, text: 'one' }, + { done: true, text: 'two' }, + { done: false, text: 'four' } + ]); + + await set_done(0, true); + + assert.htmlEqual( + target.innerHTML, + ` +
+ +

four

+
+ +

done:one / done:two / remaining:four

+ ` + ); + + assert.deepEqual(component.items, [ + { done: true, text: 'one' }, + { done: true, text: 'two' }, + { done: false, text: 'four' } + ]); + + component.filter = 'done'; + + assert.htmlEqual( + target.innerHTML, + ` +
+ +

one

+
+
+ +

two

+
+ +

done:one / done:two / remaining:four

+ ` + ); + } +}; diff --git a/test/runtime/samples/binding-input-text-contextual-reactive/main.svelte b/packages/svelte/test/runtime/samples/binding-input-text-contextual-reactive/main.svelte similarity index 100% rename from test/runtime/samples/binding-input-text-contextual-reactive/main.svelte rename to packages/svelte/test/runtime/samples/binding-input-text-contextual-reactive/main.svelte diff --git a/packages/svelte/test/runtime/samples/binding-input-text-contextual/_config.js b/packages/svelte/test/runtime/samples/binding-input-text-contextual/_config.js new file mode 100644 index 0000000000..d1b00d75c3 --- /dev/null +++ b/packages/svelte/test/runtime/samples/binding-input-text-contextual/_config.js @@ -0,0 +1,75 @@ +export default { + get props() { + return { items: ['one', 'two', 'three'] }; + }, + + html: ` +
+

one

+
+
+

two

+
+
+

three

+
+ `, + + ssrHtml: ` +
+

one

+
+
+

two

+
+
+

three

+
+ `, + + async test({ assert, component, target, window }) { + const inputs = [...target.querySelectorAll('input')]; + const items = component.items; + const event = new window.Event('input'); + + assert.equal(inputs[0].value, 'one'); + + inputs[1].value = 'four'; + await inputs[1].dispatchEvent(event); + + assert.equal(items[1], 'four'); + assert.htmlEqual( + target.innerHTML, + ` +
+

one

+
+
+

four

+
+
+

three

+
+ ` + ); + + items[2] = 'five'; + + component.items = items; + assert.equal(inputs[2].value, 'five'); + assert.htmlEqual( + target.innerHTML, + ` +
+

one

+
+
+

four

+
+
+

five

+
+ ` + ); + } +}; diff --git a/test/runtime/samples/binding-input-text-contextual/main.svelte b/packages/svelte/test/runtime/samples/binding-input-text-contextual/main.svelte similarity index 100% rename from test/runtime/samples/binding-input-text-contextual/main.svelte rename to packages/svelte/test/runtime/samples/binding-input-text-contextual/main.svelte diff --git a/packages/svelte/test/runtime/samples/binding-input-text-deconflicted/_config.js b/packages/svelte/test/runtime/samples/binding-input-text-deconflicted/_config.js new file mode 100644 index 0000000000..970a0f57bf --- /dev/null +++ b/packages/svelte/test/runtime/samples/binding-input-text-deconflicted/_config.js @@ -0,0 +1,44 @@ +export default { + get props() { + return { component: { name: 'world' } }; + }, + + html: ` +

Hello world!

+ + `, + + ssrHtml: ` +

Hello world!

+ + `, + + async test({ assert, component, target, window }) { + const input = target.querySelector('input'); + assert.equal(input.value, 'world'); + + const event = new window.Event('input'); + + input.value = 'everybody'; + await input.dispatchEvent(event); + + assert.equal(input.value, 'everybody'); + assert.htmlEqual( + target.innerHTML, + ` +

Hello everybody!

+ + ` + ); + + component.component = { name: 'goodbye' }; + assert.equal(input.value, 'goodbye'); + assert.htmlEqual( + target.innerHTML, + ` +

Hello goodbye!

+ + ` + ); + } +}; diff --git a/test/runtime/samples/binding-input-text-deconflicted/main.svelte b/packages/svelte/test/runtime/samples/binding-input-text-deconflicted/main.svelte similarity index 100% rename from test/runtime/samples/binding-input-text-deconflicted/main.svelte rename to packages/svelte/test/runtime/samples/binding-input-text-deconflicted/main.svelte diff --git a/packages/svelte/test/runtime/samples/binding-input-text-deep-computed-dynamic/_config.js b/packages/svelte/test/runtime/samples/binding-input-text-deep-computed-dynamic/_config.js new file mode 100644 index 0000000000..d42804a2e1 --- /dev/null +++ b/packages/svelte/test/runtime/samples/binding-input-text-deep-computed-dynamic/_config.js @@ -0,0 +1,67 @@ +export default { + get props() { + return { + prop: 'bar', + obj: { foo: 'a', bar: 'b', baz: 'c' } + }; + }, + + html: ` + +
{"foo":"a","bar":"b","baz":"c"}
+ `, + + ssrHtml: ` + +
{"foo":"a","bar":"b","baz":"c"}
+ `, + + async test({ assert, component, target, window }) { + const input = target.querySelector('input'); + const event = new window.Event('input'); + + assert.equal(input.value, 'b'); + + // edit bar + input.value = 'e'; + await input.dispatchEvent(event); + + assert.htmlEqual( + target.innerHTML, + ` + +
{"foo":"a","bar":"e","baz":"c"}
+ ` + ); + + // edit baz + component.prop = 'baz'; + assert.equal(input.value, 'c'); + + input.value = 'f'; + await input.dispatchEvent(event); + + assert.htmlEqual( + target.innerHTML, + ` + +
{"foo":"a","bar":"e","baz":"f"}
+ ` + ); + + // edit foo + component.prop = 'foo'; + assert.equal(input.value, 'a'); + + input.value = 'd'; + await input.dispatchEvent(event); + + assert.htmlEqual( + target.innerHTML, + ` + +
{"foo":"d","bar":"e","baz":"f"}
+ ` + ); + } +}; diff --git a/test/runtime/samples/binding-input-text-deep-computed-dynamic/main.svelte b/packages/svelte/test/runtime/samples/binding-input-text-deep-computed-dynamic/main.svelte similarity index 100% rename from test/runtime/samples/binding-input-text-deep-computed-dynamic/main.svelte rename to packages/svelte/test/runtime/samples/binding-input-text-deep-computed-dynamic/main.svelte diff --git a/packages/svelte/test/runtime/samples/binding-input-text-deep-computed/_config.js b/packages/svelte/test/runtime/samples/binding-input-text-deep-computed/_config.js new file mode 100644 index 0000000000..b8f2b7e8b1 --- /dev/null +++ b/packages/svelte/test/runtime/samples/binding-input-text-deep-computed/_config.js @@ -0,0 +1,47 @@ +export default { + get props() { + return { prop: 'name', user: { name: 'alice' } }; + }, + + html: ` + +

hello alice

+ `, + + ssrHtml: ` + +

hello alice

+ `, + + async test({ assert, component, target, window }) { + const input = target.querySelector('input'); + + assert.equal(input.value, 'alice'); + + const event = new window.Event('input'); + + input.value = 'bob'; + await input.dispatchEvent(event); + + assert.htmlEqual( + target.innerHTML, + ` + +

hello bob

+ ` + ); + + const user = component.user; + user.name = 'carol'; + + component.user = user; + assert.equal(input.value, 'carol'); + assert.htmlEqual( + target.innerHTML, + ` + +

hello carol

+ ` + ); + } +}; diff --git a/test/runtime/samples/binding-input-text-deep-computed/main.svelte b/packages/svelte/test/runtime/samples/binding-input-text-deep-computed/main.svelte similarity index 100% rename from test/runtime/samples/binding-input-text-deep-computed/main.svelte rename to packages/svelte/test/runtime/samples/binding-input-text-deep-computed/main.svelte diff --git a/packages/svelte/test/runtime/samples/binding-input-text-deep-contextual-computed-dynamic/_config.js b/packages/svelte/test/runtime/samples/binding-input-text-deep-contextual-computed-dynamic/_config.js new file mode 100644 index 0000000000..b2344431db --- /dev/null +++ b/packages/svelte/test/runtime/samples/binding-input-text-deep-contextual-computed-dynamic/_config.js @@ -0,0 +1,67 @@ +export default { + get props() { + return { + prop: 'bar', + objects: [{ foo: 'a', bar: 'b', baz: 'c' }] + }; + }, + + html: ` + +
{"foo":"a","bar":"b","baz":"c"}
+ `, + + ssrHtml: ` + +
{"foo":"a","bar":"b","baz":"c"}
+ `, + + async test({ assert, component, target, window }) { + const input = target.querySelector('input'); + const event = new window.Event('input'); + + assert.equal(input.value, 'b'); + + // edit bar + input.value = 'e'; + await input.dispatchEvent(event); + + assert.htmlEqual( + target.innerHTML, + ` + +
{"foo":"a","bar":"e","baz":"c"}
+ ` + ); + + // edit baz + component.prop = 'baz'; + assert.equal(input.value, 'c'); + + input.value = 'f'; + await input.dispatchEvent(event); + + assert.htmlEqual( + target.innerHTML, + ` + +
{"foo":"a","bar":"e","baz":"f"}
+ ` + ); + + // edit foo + component.prop = 'foo'; + assert.equal(input.value, 'a'); + + input.value = 'd'; + await input.dispatchEvent(event); + + assert.htmlEqual( + target.innerHTML, + ` + +
{"foo":"d","bar":"e","baz":"f"}
+ ` + ); + } +}; diff --git a/test/runtime/samples/binding-input-text-deep-contextual-computed-dynamic/main.svelte b/packages/svelte/test/runtime/samples/binding-input-text-deep-contextual-computed-dynamic/main.svelte similarity index 100% rename from test/runtime/samples/binding-input-text-deep-contextual-computed-dynamic/main.svelte rename to packages/svelte/test/runtime/samples/binding-input-text-deep-contextual-computed-dynamic/main.svelte diff --git a/packages/svelte/test/runtime/samples/binding-input-text-deep-contextual/_config.js b/packages/svelte/test/runtime/samples/binding-input-text-deep-contextual/_config.js new file mode 100644 index 0000000000..f37cc23b19 --- /dev/null +++ b/packages/svelte/test/runtime/samples/binding-input-text-deep-contextual/_config.js @@ -0,0 +1,53 @@ +export default { + get props() { + return { + items: [{ description: 'one' }, { description: 'two' }, { description: 'three' }] + }; + }, + + html: ` +

one

+

two

+

three

+ `, + + ssrHtml: ` +

one

+

two

+

three

+ `, + + async test({ assert, component, target, window }) { + const inputs = [...target.querySelectorAll('input')]; + + assert.equal(inputs[0].value, 'one'); + + const event = new window.Event('input'); + + inputs[1].value = 'four'; + await inputs[1].dispatchEvent(event); + + assert.htmlEqual( + target.innerHTML, + ` +

one

+

four

+

three

+ ` + ); + + const items = component.items; + items[2].description = 'five'; + + component.items = items; + assert.equal(inputs[2].value, 'five'); + assert.htmlEqual( + target.innerHTML, + ` +

one

+

four

+

five

+ ` + ); + } +}; diff --git a/test/runtime/samples/binding-input-text-deep-contextual/main.svelte b/packages/svelte/test/runtime/samples/binding-input-text-deep-contextual/main.svelte similarity index 100% rename from test/runtime/samples/binding-input-text-deep-contextual/main.svelte rename to packages/svelte/test/runtime/samples/binding-input-text-deep-contextual/main.svelte diff --git a/packages/svelte/test/runtime/samples/binding-input-text-deep/_config.js b/packages/svelte/test/runtime/samples/binding-input-text-deep/_config.js new file mode 100644 index 0000000000..5c7c57202b --- /dev/null +++ b/packages/svelte/test/runtime/samples/binding-input-text-deep/_config.js @@ -0,0 +1,47 @@ +export default { + get props() { + return { user: { name: 'alice' } }; + }, + + html: ` + +

hello alice

+ `, + + ssrHtml: ` + +

hello alice

+ `, + + async test({ assert, component, target, window }) { + const input = target.querySelector('input'); + + assert.equal(input.value, 'alice'); + + const event = new window.Event('input'); + + input.value = 'bob'; + await input.dispatchEvent(event); + + assert.htmlEqual( + target.innerHTML, + ` + +

hello bob

+ ` + ); + + const user = component.user; + user.name = 'carol'; + + component.user = user; + assert.equal(input.value, 'carol'); + assert.htmlEqual( + target.innerHTML, + ` + +

hello carol

+ ` + ); + } +}; diff --git a/test/runtime/samples/binding-input-text-deep/main.svelte b/packages/svelte/test/runtime/samples/binding-input-text-deep/main.svelte similarity index 100% rename from test/runtime/samples/binding-input-text-deep/main.svelte rename to packages/svelte/test/runtime/samples/binding-input-text-deep/main.svelte diff --git a/test/runtime/samples/binding-input-text-undefined/_config.js b/packages/svelte/test/runtime/samples/binding-input-text-undefined/_config.js similarity index 100% rename from test/runtime/samples/binding-input-text-undefined/_config.js rename to packages/svelte/test/runtime/samples/binding-input-text-undefined/_config.js diff --git a/test/runtime/samples/binding-input-text-undefined/main.svelte b/packages/svelte/test/runtime/samples/binding-input-text-undefined/main.svelte similarity index 100% rename from test/runtime/samples/binding-input-text-undefined/main.svelte rename to packages/svelte/test/runtime/samples/binding-input-text-undefined/main.svelte diff --git a/packages/svelte/test/runtime/samples/binding-input-text/_config.js b/packages/svelte/test/runtime/samples/binding-input-text/_config.js new file mode 100644 index 0000000000..230013018f --- /dev/null +++ b/packages/svelte/test/runtime/samples/binding-input-text/_config.js @@ -0,0 +1,43 @@ +export default { + get props() { + return { name: 'world' }; + }, + + html: ` + +

hello world

+ `, + + ssrHtml: ` + +

hello world

+ `, + + async test({ assert, component, target, window }) { + const input = target.querySelector('input'); + assert.equal(input.value, 'world'); + + const event = new window.Event('input'); + + input.value = 'everybody'; + await input.dispatchEvent(event); + + assert.htmlEqual( + target.innerHTML, + ` + +

hello everybody

+ ` + ); + + component.name = 'goodbye'; + assert.equal(input.value, 'goodbye'); + assert.htmlEqual( + target.innerHTML, + ` + +

hello goodbye

+ ` + ); + } +}; diff --git a/test/runtime/samples/binding-input-text/main.svelte b/packages/svelte/test/runtime/samples/binding-input-text/main.svelte similarity index 100% rename from test/runtime/samples/binding-input-text/main.svelte rename to packages/svelte/test/runtime/samples/binding-input-text/main.svelte diff --git a/packages/svelte/test/runtime/samples/binding-input-with-event/_config.js b/packages/svelte/test/runtime/samples/binding-input-with-event/_config.js new file mode 100644 index 0000000000..4b9d7aac0c --- /dev/null +++ b/packages/svelte/test/runtime/samples/binding-input-with-event/_config.js @@ -0,0 +1,18 @@ +export default { + get props() { + return { a: 42 }; + }, + + test({ assert, component, target, window }) { + const input = target.querySelector('input'); + assert.equal(input.value, '42'); + + const event = new window.Event('input'); + + input.value = 43; + input.dispatchEvent(event); + + assert.equal(input.value, '43'); + assert.equal(component.a, 43); + } +}; diff --git a/test/runtime/samples/binding-input-with-event/main.svelte b/packages/svelte/test/runtime/samples/binding-input-with-event/main.svelte similarity index 100% rename from test/runtime/samples/binding-input-with-event/main.svelte rename to packages/svelte/test/runtime/samples/binding-input-with-event/main.svelte diff --git a/test/runtime/samples/binding-no-unnecessary-invalidation.skip/Tab.svelte b/packages/svelte/test/runtime/samples/binding-no-unnecessary-invalidation.skip/Tab.svelte similarity index 100% rename from test/runtime/samples/binding-no-unnecessary-invalidation.skip/Tab.svelte rename to packages/svelte/test/runtime/samples/binding-no-unnecessary-invalidation.skip/Tab.svelte diff --git a/packages/svelte/test/runtime/samples/binding-no-unnecessary-invalidation.skip/_config.js b/packages/svelte/test/runtime/samples/binding-no-unnecessary-invalidation.skip/_config.js new file mode 100644 index 0000000000..8cf108ab76 --- /dev/null +++ b/packages/svelte/test/runtime/samples/binding-no-unnecessary-invalidation.skip/_config.js @@ -0,0 +1,13 @@ +// this test currently fails because the fix that made it pass broke other tests, +// see https://github.com/sveltejs/svelte/pull/8114 for more context. +export default { + skip: true, + async test({ assert, target }) { + assert.htmlEqual( + target.innerHTML, + ` +

0

+ ` + ); + } +}; diff --git a/test/runtime/samples/binding-no-unnecessary-invalidation.skip/main.svelte b/packages/svelte/test/runtime/samples/binding-no-unnecessary-invalidation.skip/main.svelte similarity index 100% rename from test/runtime/samples/binding-no-unnecessary-invalidation.skip/main.svelte rename to packages/svelte/test/runtime/samples/binding-no-unnecessary-invalidation.skip/main.svelte diff --git a/packages/svelte/test/runtime/samples/binding-select-from-let-2/Parent.svelte b/packages/svelte/test/runtime/samples/binding-select-from-let-2/Parent.svelte new file mode 100644 index 0000000000..565c3bc6b7 --- /dev/null +++ b/packages/svelte/test/runtime/samples/binding-select-from-let-2/Parent.svelte @@ -0,0 +1,6 @@ + + + + diff --git a/packages/svelte/test/runtime/samples/binding-select-from-let-2/_config.js b/packages/svelte/test/runtime/samples/binding-select-from-let-2/_config.js new file mode 100644 index 0000000000..125455819a --- /dev/null +++ b/packages/svelte/test/runtime/samples/binding-select-from-let-2/_config.js @@ -0,0 +1,25 @@ +export default { + html: ` + +

1

+ `, + + async test({ assert, component, target, window }) { + const select = target.querySelector('select'); + const options = target.querySelectorAll('option'); + + assert.equal(component.tasks_touched, 1); + + const change = new window.Event('change'); + options[1].selected = true; + await select.dispatchEvent(change); + + assert.equal(component.selected, options[1].value); + assert.equal(component.tasks_touched, 1); + } +}; diff --git a/packages/svelte/test/runtime/samples/binding-select-from-let-2/main.svelte b/packages/svelte/test/runtime/samples/binding-select-from-let-2/main.svelte new file mode 100644 index 0000000000..3c21eba829 --- /dev/null +++ b/packages/svelte/test/runtime/samples/binding-select-from-let-2/main.svelte @@ -0,0 +1,19 @@ + + + + + +

{tasks_touched}

diff --git a/packages/svelte/test/runtime/samples/binding-select-from-let/Parent.svelte b/packages/svelte/test/runtime/samples/binding-select-from-let/Parent.svelte new file mode 100644 index 0000000000..565c3bc6b7 --- /dev/null +++ b/packages/svelte/test/runtime/samples/binding-select-from-let/Parent.svelte @@ -0,0 +1,6 @@ + + + + diff --git a/packages/svelte/test/runtime/samples/binding-select-from-let/_config.js b/packages/svelte/test/runtime/samples/binding-select-from-let/_config.js new file mode 100644 index 0000000000..30f42a2251 --- /dev/null +++ b/packages/svelte/test/runtime/samples/binding-select-from-let/_config.js @@ -0,0 +1,21 @@ +export default { + html: ` + + `, + + async test({ assert, component, target, window }) { + const select = target.querySelector('select'); + const options = target.querySelectorAll('option'); + + const change = new window.Event('change'); + options[1].selected = true; + await select.dispatchEvent(change); + + assert.equal(component.selected, options[1].value); + } +}; diff --git a/packages/svelte/test/runtime/samples/binding-select-from-let/main.svelte b/packages/svelte/test/runtime/samples/binding-select-from-let/main.svelte new file mode 100644 index 0000000000..494653bb4c --- /dev/null +++ b/packages/svelte/test/runtime/samples/binding-select-from-let/main.svelte @@ -0,0 +1,12 @@ + + + + + diff --git a/packages/svelte/test/runtime/samples/binding-select-implicit-option-value/_config.js b/packages/svelte/test/runtime/samples/binding-select-implicit-option-value/_config.js new file mode 100644 index 0000000000..634db46ff7 --- /dev/null +++ b/packages/svelte/test/runtime/samples/binding-select-implicit-option-value/_config.js @@ -0,0 +1,42 @@ +export default { + get props() { + return { values: [1, 2, 3], foo: 2 }; + }, + + html: ` + + +

foo: 2

+ `, + + async test({ assert, component, target, window }) { + const select = target.querySelector('select'); + const options = [...target.querySelectorAll('option')]; + + assert.ok(options[1].selected); + assert.equal(component.foo, 2); + + const change = new window.Event('change'); + + options[2].selected = true; + await select.dispatchEvent(change); + + assert.equal(component.foo, 3); + assert.htmlEqual( + target.innerHTML, + ` + + +

foo: 3

+ ` + ); + } +}; diff --git a/test/runtime/samples/binding-select-implicit-option-value/main.svelte b/packages/svelte/test/runtime/samples/binding-select-implicit-option-value/main.svelte similarity index 100% rename from test/runtime/samples/binding-select-implicit-option-value/main.svelte rename to packages/svelte/test/runtime/samples/binding-select-implicit-option-value/main.svelte diff --git a/packages/svelte/test/runtime/samples/binding-select-in-each-block/_config.js b/packages/svelte/test/runtime/samples/binding-select-in-each-block/_config.js new file mode 100644 index 0000000000..2c6621db52 --- /dev/null +++ b/packages/svelte/test/runtime/samples/binding-select-in-each-block/_config.js @@ -0,0 +1,30 @@ +export default { + html: ` + + + + `, + + get props() { + return { + items: [{ value: 'hullo' }, { value: 'world' }] + }; + }, + + test({ assert, component, target, window }) { + const selects = [...target.querySelectorAll('select')]; + + const change = new window.Event('change'); + + selects[1].options[0].selected = true; + selects[1].dispatchEvent(change); + + assert.deepEqual(component.items, [{ value: 'hullo' }, { value: 'hullo' }]); + } +}; diff --git a/test/runtime/samples/binding-select-in-each-block/main.svelte b/packages/svelte/test/runtime/samples/binding-select-in-each-block/main.svelte similarity index 100% rename from test/runtime/samples/binding-select-in-each-block/main.svelte rename to packages/svelte/test/runtime/samples/binding-select-in-each-block/main.svelte diff --git a/test/runtime/samples/binding-select-in-yield/Modal.svelte b/packages/svelte/test/runtime/samples/binding-select-in-yield/Modal.svelte similarity index 100% rename from test/runtime/samples/binding-select-in-yield/Modal.svelte rename to packages/svelte/test/runtime/samples/binding-select-in-yield/Modal.svelte diff --git a/packages/svelte/test/runtime/samples/binding-select-in-yield/_config.js b/packages/svelte/test/runtime/samples/binding-select-in-yield/_config.js new file mode 100644 index 0000000000..25c26100dc --- /dev/null +++ b/packages/svelte/test/runtime/samples/binding-select-in-yield/_config.js @@ -0,0 +1,72 @@ +export default { + html: '', + + get props() { + return { letter: 'b' }; + }, + + async test({ assert, component, target, window }) { + await component.modal.toggle(); + + assert.htmlEqual( + target.innerHTML, + ` + b + + + ` + ); + + let select = target.querySelector('select'); + const change = new window.MouseEvent('change'); + + select.options[2].selected = true; + await select.dispatchEvent(change); + assert.equal(component.letter, 'c'); + + assert.deepEqual( + Array.from(select.options).map((o) => o.selected), + [false, false, true] + ); + + assert.htmlEqual( + target.innerHTML, + ` + c + + + ` + ); + + await component.modal.toggle(); + await component.modal.toggle(); + + select = target.querySelector('select'); + + assert.deepEqual( + Array.from(select.options).map((o) => o.selected), + [false, false, true] + ); + + assert.htmlEqual( + target.innerHTML, + ` + c + + + ` + ); + } +}; diff --git a/test/runtime/samples/binding-select-in-yield/main.svelte b/packages/svelte/test/runtime/samples/binding-select-in-yield/main.svelte similarity index 100% rename from test/runtime/samples/binding-select-in-yield/main.svelte rename to packages/svelte/test/runtime/samples/binding-select-in-yield/main.svelte diff --git a/test/runtime/samples/binding-select-initial-value-undefined-2/_config.js b/packages/svelte/test/runtime/samples/binding-select-initial-value-undefined-2/_config.js similarity index 100% rename from test/runtime/samples/binding-select-initial-value-undefined-2/_config.js rename to packages/svelte/test/runtime/samples/binding-select-initial-value-undefined-2/_config.js diff --git a/test/runtime/samples/binding-select-initial-value-undefined-2/main.svelte b/packages/svelte/test/runtime/samples/binding-select-initial-value-undefined-2/main.svelte similarity index 100% rename from test/runtime/samples/binding-select-initial-value-undefined-2/main.svelte rename to packages/svelte/test/runtime/samples/binding-select-initial-value-undefined-2/main.svelte diff --git a/test/runtime/samples/binding-select-initial-value-undefined/_config.js b/packages/svelte/test/runtime/samples/binding-select-initial-value-undefined/_config.js similarity index 100% rename from test/runtime/samples/binding-select-initial-value-undefined/_config.js rename to packages/svelte/test/runtime/samples/binding-select-initial-value-undefined/_config.js diff --git a/test/runtime/samples/binding-select-initial-value-undefined/main.svelte b/packages/svelte/test/runtime/samples/binding-select-initial-value-undefined/main.svelte similarity index 100% rename from test/runtime/samples/binding-select-initial-value-undefined/main.svelte rename to packages/svelte/test/runtime/samples/binding-select-initial-value-undefined/main.svelte diff --git a/packages/svelte/test/runtime/samples/binding-select-initial-value/_config.js b/packages/svelte/test/runtime/samples/binding-select-initial-value/_config.js new file mode 100644 index 0000000000..d536a61587 --- /dev/null +++ b/packages/svelte/test/runtime/samples/binding-select-initial-value/_config.js @@ -0,0 +1,25 @@ +export default { + html: ` +

selected: b

+ + + +

selected: b

+ `, + + get props() { + return { selected: 'b' }; + }, + + test({ assert, target }) { + const select = target.querySelector('select'); + const options = [...target.querySelectorAll('option')]; + + assert.equal(select.value, 'b'); + assert.ok(options[1].selected); + } +}; diff --git a/test/runtime/samples/binding-select-initial-value/main.svelte b/packages/svelte/test/runtime/samples/binding-select-initial-value/main.svelte similarity index 100% rename from test/runtime/samples/binding-select-initial-value/main.svelte rename to packages/svelte/test/runtime/samples/binding-select-initial-value/main.svelte diff --git a/packages/svelte/test/runtime/samples/binding-select-late-2/_config.js b/packages/svelte/test/runtime/samples/binding-select-late-2/_config.js new file mode 100644 index 0000000000..b4e8f56c52 --- /dev/null +++ b/packages/svelte/test/runtime/samples/binding-select-late-2/_config.js @@ -0,0 +1,31 @@ +export default { + get props() { + return { items: [], selected: 'two' }; + }, + + html: ` + +

selected: two

+ `, + + test({ assert, component, target }) { + component.items = ['one', 'two', 'three']; + + const options = target.querySelectorAll('option'); + assert.ok(!options[0].selected); + assert.ok(options[1].selected); + assert.ok(!options[2].selected); + + assert.htmlEqual( + target.innerHTML, + ` + +

selected: two

+ ` + ); + } +}; diff --git a/test/runtime/samples/binding-select-late-2/main.svelte b/packages/svelte/test/runtime/samples/binding-select-late-2/main.svelte similarity index 100% rename from test/runtime/samples/binding-select-late-2/main.svelte rename to packages/svelte/test/runtime/samples/binding-select-late-2/main.svelte diff --git a/packages/svelte/test/runtime/samples/binding-select-late-3/_config.js b/packages/svelte/test/runtime/samples/binding-select-late-3/_config.js new file mode 100644 index 0000000000..26b328220a --- /dev/null +++ b/packages/svelte/test/runtime/samples/binding-select-late-3/_config.js @@ -0,0 +1,36 @@ +export default { + get props() { + return { items: [], selected: 'two' }; + }, + + html: ` + +

selected: two

+ `, + + ssrHtml: ` + +

selected: two

+ `, + + test({ assert, component, target }) { + component.items = ['one', 'two', 'three']; + + const options = target.querySelectorAll('option'); + assert.ok(!options[0].selected); + assert.ok(options[1].selected); + assert.ok(!options[2].selected); + + assert.htmlEqual( + target.innerHTML, + ` + +

selected: two

+ ` + ); + } +}; diff --git a/test/runtime/samples/binding-select-late-3/main.svelte b/packages/svelte/test/runtime/samples/binding-select-late-3/main.svelte similarity index 100% rename from test/runtime/samples/binding-select-late-3/main.svelte rename to packages/svelte/test/runtime/samples/binding-select-late-3/main.svelte diff --git a/packages/svelte/test/runtime/samples/binding-select-late/_config.js b/packages/svelte/test/runtime/samples/binding-select-late/_config.js new file mode 100644 index 0000000000..8cea3ddd22 --- /dev/null +++ b/packages/svelte/test/runtime/samples/binding-select-late/_config.js @@ -0,0 +1,32 @@ +export default { + get props() { + return { items: [], selected: null }; + }, + + html: ` + +

selected: nothing

+ `, + + test({ assert, component, target }) { + component.items = ['one', 'two', 'three']; + component.selected = 'two'; + + const options = target.querySelectorAll('option'); + assert.ok(!options[0].selected); + assert.ok(options[1].selected); + assert.ok(!options[2].selected); + + assert.htmlEqual( + target.innerHTML, + ` + +

selected: two

+ ` + ); + } +}; diff --git a/test/runtime/samples/binding-select-late/main.svelte b/packages/svelte/test/runtime/samples/binding-select-late/main.svelte similarity index 100% rename from test/runtime/samples/binding-select-late/main.svelte rename to packages/svelte/test/runtime/samples/binding-select-late/main.svelte diff --git a/packages/svelte/test/runtime/samples/binding-select-multiple/_config.js b/packages/svelte/test/runtime/samples/binding-select-multiple/_config.js new file mode 100644 index 0000000000..d092549b19 --- /dev/null +++ b/packages/svelte/test/runtime/samples/binding-select-multiple/_config.js @@ -0,0 +1,75 @@ +export default { + get props() { + return { selected: ['two', 'three'] }; + }, + + html: ` + + +

selected: two, three

+ `, + + async test({ assert, component, target, window }) { + const select = target.querySelector('select'); + const options = [...target.querySelectorAll('option')]; + + const change = new window.Event('change'); + + options[1].selected = false; + await select.dispatchEvent(change); + + assert.deepEqual(component.selected, ['three']); + assert.htmlEqual( + target.innerHTML, + ` + + +

selected: three

+ ` + ); + + options[0].selected = true; + await select.dispatchEvent(change); + + assert.deepEqual(component.selected, ['one', 'three']); + assert.htmlEqual( + target.innerHTML, + ` + + +

selected: one, three

+ ` + ); + + component.selected = ['one', 'two']; + + assert.ok(options[0].selected); + assert.ok(options[1].selected); + assert.ok(!options[2].selected); + + assert.htmlEqual( + target.innerHTML, + ` + + +

selected: one, two

+ ` + ); + } +}; diff --git a/test/runtime/samples/binding-select-multiple/main.svelte b/packages/svelte/test/runtime/samples/binding-select-multiple/main.svelte similarity index 100% rename from test/runtime/samples/binding-select-multiple/main.svelte rename to packages/svelte/test/runtime/samples/binding-select-multiple/main.svelte diff --git a/packages/svelte/test/runtime/samples/binding-select-null-placeholder/_config.js b/packages/svelte/test/runtime/samples/binding-select-null-placeholder/_config.js new file mode 100644 index 0000000000..9b5b605198 --- /dev/null +++ b/packages/svelte/test/runtime/samples/binding-select-null-placeholder/_config.js @@ -0,0 +1,27 @@ +const items = [{ id: 'a' }, { id: 'b' }]; + +export default { + get props() { + return { foo: null, items }; + }, + + test({ assert, component, target }) { + const select = target.querySelector('select'); + const options = target.querySelectorAll('option'); + + assert.equal(options[0].selected, true); + assert.equal(options[0].disabled, true); + assert.equal(options[1].selected, false); + assert.equal(options[1].disabled, false); + + // placeholder option value must be blank string for native required field validation + assert.equal(options[0].value, ''); + assert.equal(select.checkValidity(), false); + + component.foo = items[0]; + + assert.equal(options[0].selected, false); + assert.equal(options[1].selected, true); + assert.equal(select.checkValidity(), true); + } +}; diff --git a/packages/svelte/test/runtime/samples/binding-select-null-placeholder/main.svelte b/packages/svelte/test/runtime/samples/binding-select-null-placeholder/main.svelte new file mode 100644 index 0000000000..65cab99495 --- /dev/null +++ b/packages/svelte/test/runtime/samples/binding-select-null-placeholder/main.svelte @@ -0,0 +1,11 @@ + + + diff --git a/packages/svelte/test/runtime/samples/binding-select-optgroup/_config.js b/packages/svelte/test/runtime/samples/binding-select-optgroup/_config.js new file mode 100644 index 0000000000..b35ba3c740 --- /dev/null +++ b/packages/svelte/test/runtime/samples/binding-select-optgroup/_config.js @@ -0,0 +1,51 @@ +export default { + ssrHtml: ` +

Hello undefined!

+ + + `, + + html: ` +

Hello Harry!

+ + + `, + + async test({ assert, component, target, window }) { + const select = target.querySelector('select'); + const options = [...target.querySelectorAll('option')]; + + assert.deepEqual(options, [...select.options]); + assert.equal(component.name, 'Harry'); + + const change = new window.Event('change'); + + options[1].selected = true; + await select.dispatchEvent(change); + + assert.equal(component.name, 'World'); + assert.htmlEqual( + target.innerHTML, + ` +

Hello World!

+ + + ` + ); + } +}; diff --git a/test/runtime/samples/binding-select-optgroup/main.svelte b/packages/svelte/test/runtime/samples/binding-select-optgroup/main.svelte similarity index 100% rename from test/runtime/samples/binding-select-optgroup/main.svelte rename to packages/svelte/test/runtime/samples/binding-select-optgroup/main.svelte diff --git a/packages/svelte/test/runtime/samples/binding-select-unmatched/_config.js b/packages/svelte/test/runtime/samples/binding-select-unmatched/_config.js new file mode 100644 index 0000000000..8febc6588e --- /dev/null +++ b/packages/svelte/test/runtime/samples/binding-select-unmatched/_config.js @@ -0,0 +1,107 @@ +export default { + html: ` +

selected: null

+ + + +

selected: null

+ `, + + async test({ assert, component, target }) { + const select = target.querySelector('select'); + const options = [...target.querySelectorAll('option')]; + + assert.equal(component.selected, null); + + // no option should be selected since none of the options matches the bound value + assert.equal(select.value, ''); + assert.equal(select.selectedIndex, -1); + assert.ok(!options[0].selected); + + component.selected = 'a'; // first option should now be selected + assert.equal(select.value, 'a'); + assert.ok(options[0].selected); + + assert.htmlEqual( + target.innerHTML, + ` +

selected: a

+ + + +

selected: a

+ ` + ); + + component.selected = 'd'; // doesn't match an option + + // now no option should be selected again + assert.equal(select.value, ''); + assert.equal(select.selectedIndex, -1); + assert.ok(!options[0].selected); + + assert.htmlEqual( + target.innerHTML, + ` +

selected: d

+ + + +

selected: d

+ ` + ); + + component.selected = 'b'; // second option should now be selected + assert.equal(select.value, 'b'); + assert.ok(options[1].selected); + + assert.htmlEqual( + target.innerHTML, + ` +

selected: b

+ + + +

selected: b

+ ` + ); + + component.selected = undefined; // also doesn't match an option + + // now no option should be selected again + assert.equal(select.value, ''); + assert.equal(select.selectedIndex, -1); + assert.ok(!options[0].selected); + + assert.htmlEqual( + target.innerHTML, + ` +

selected: undefined

+ + + +

selected: undefined

+ ` + ); + } +}; diff --git a/test/runtime/samples/binding-select-unmatched/main.svelte b/packages/svelte/test/runtime/samples/binding-select-unmatched/main.svelte similarity index 100% rename from test/runtime/samples/binding-select-unmatched/main.svelte rename to packages/svelte/test/runtime/samples/binding-select-unmatched/main.svelte diff --git a/packages/svelte/test/runtime/samples/binding-select/_config.js b/packages/svelte/test/runtime/samples/binding-select/_config.js new file mode 100644 index 0000000000..92606177e1 --- /dev/null +++ b/packages/svelte/test/runtime/samples/binding-select/_config.js @@ -0,0 +1,48 @@ +export default { + html: ` +

selected: one

+ + + +

selected: one

+ `, + + get props() { + return { selected: 'one' }; + }, + + async test({ assert, component, target, window }) { + const select = target.querySelector('select'); + const options = [...target.querySelectorAll('option')]; + + assert.deepEqual(options, [...select.options]); + assert.equal(component.selected, 'one'); + + const change = new window.Event('change'); + + options[1].selected = true; + await select.dispatchEvent(change); + + assert.equal(component.selected, 'two'); + assert.htmlEqual( + target.innerHTML, + ` +

selected: two

+ + + +

selected: two

+ ` + ); + + component.selected = 'three'; + } +}; diff --git a/test/runtime/samples/binding-select/main.svelte b/packages/svelte/test/runtime/samples/binding-select/main.svelte similarity index 100% rename from test/runtime/samples/binding-select/main.svelte rename to packages/svelte/test/runtime/samples/binding-select/main.svelte diff --git a/packages/svelte/test/runtime/samples/binding-store-deep/_config.js b/packages/svelte/test/runtime/samples/binding-store-deep/_config.js new file mode 100644 index 0000000000..e6d3c79f16 --- /dev/null +++ b/packages/svelte/test/runtime/samples/binding-store-deep/_config.js @@ -0,0 +1,47 @@ +export default { + html: ` + +

hello world

+ `, + + ssrHtml: ` + +

hello world

+ `, + + async test({ assert, component, target, window }) { + const input = target.querySelector('input'); + assert.equal(input.value, 'world'); + + const event = new window.Event('input'); + + const names = []; + const unsubscribe = component.user.subscribe((user) => { + names.push(user.name); + }); + + input.value = 'everybody'; + await input.dispatchEvent(event); + + assert.htmlEqual( + target.innerHTML, + ` + +

hello everybody

+ ` + ); + + await component.user.set({ name: 'goodbye' }); + assert.equal(input.value, 'goodbye'); + assert.htmlEqual( + target.innerHTML, + ` + +

hello goodbye

+ ` + ); + + assert.deepEqual(names, ['world', 'everybody', 'goodbye']); + unsubscribe(); + } +}; diff --git a/test/runtime/samples/binding-store-deep/main.svelte b/packages/svelte/test/runtime/samples/binding-store-deep/main.svelte similarity index 100% rename from test/runtime/samples/binding-store-deep/main.svelte rename to packages/svelte/test/runtime/samples/binding-store-deep/main.svelte diff --git a/packages/svelte/test/runtime/samples/binding-store/_config.js b/packages/svelte/test/runtime/samples/binding-store/_config.js new file mode 100644 index 0000000000..8c90f073b0 --- /dev/null +++ b/packages/svelte/test/runtime/samples/binding-store/_config.js @@ -0,0 +1,47 @@ +export default { + html: ` + +

hello world

+ `, + + ssrHtml: ` + +

hello world

+ `, + + async test({ assert, component, target, window }) { + const input = target.querySelector('input'); + assert.equal(input.value, 'world'); + + const event = new window.Event('input'); + + const names = []; + const unsubscribe = component.name.subscribe((name) => { + names.push(name); + }); + + input.value = 'everybody'; + await input.dispatchEvent(event); + + assert.htmlEqual( + target.innerHTML, + ` + +

hello everybody

+ ` + ); + + await component.name.set('goodbye'); + assert.equal(input.value, 'goodbye'); + assert.htmlEqual( + target.innerHTML, + ` + +

hello goodbye

+ ` + ); + + assert.deepEqual(names, ['world', 'everybody', 'goodbye']); + unsubscribe(); + } +}; diff --git a/test/runtime/samples/binding-store/main.svelte b/packages/svelte/test/runtime/samples/binding-store/main.svelte similarity index 100% rename from test/runtime/samples/binding-store/main.svelte rename to packages/svelte/test/runtime/samples/binding-store/main.svelte diff --git a/packages/svelte/test/runtime/samples/binding-textarea/_config.js b/packages/svelte/test/runtime/samples/binding-textarea/_config.js new file mode 100644 index 0000000000..d9f10cdf6f --- /dev/null +++ b/packages/svelte/test/runtime/samples/binding-textarea/_config.js @@ -0,0 +1,43 @@ +export default { + get props() { + return { value: 'some text' }; + }, + + html: ` + +

some text

+ `, + + ssrHtml: ` + +

some text

+ `, + + async test({ assert, component, target, window }) { + const textarea = target.querySelector('textarea'); + assert.equal(textarea.value, 'some text'); + + const event = new window.Event('input'); + + textarea.value = 'hello'; + await textarea.dispatchEvent(event); + + assert.htmlEqual( + target.innerHTML, + ` + +

hello

+ ` + ); + + component.value = 'goodbye'; + assert.equal(textarea.value, 'goodbye'); + assert.htmlEqual( + target.innerHTML, + ` + +

goodbye

+ ` + ); + } +}; diff --git a/test/runtime/samples/binding-textarea/main.svelte b/packages/svelte/test/runtime/samples/binding-textarea/main.svelte similarity index 100% rename from test/runtime/samples/binding-textarea/main.svelte rename to packages/svelte/test/runtime/samples/binding-textarea/main.svelte diff --git a/packages/svelte/test/runtime/samples/binding-this-and-value/_config.js b/packages/svelte/test/runtime/samples/binding-this-and-value/_config.js new file mode 100644 index 0000000000..6fb8bb1e68 --- /dev/null +++ b/packages/svelte/test/runtime/samples/binding-this-and-value/_config.js @@ -0,0 +1,27 @@ +export default { + html: ` + +

value: initial

+ `, + + ssrHtml: ` + +

value: initial

+ `, + + async test({ assert, target, window }) { + const input = target.querySelector('input'); + const event = new window.Event('input'); + + input.value = 'changed'; + await input.dispatchEvent(event); + + assert.htmlEqual( + target.innerHTML, + ` + +

value: changed

+ ` + ); + } +}; diff --git a/test/runtime/samples/binding-this-and-value/main.svelte b/packages/svelte/test/runtime/samples/binding-this-and-value/main.svelte similarity index 100% rename from test/runtime/samples/binding-this-and-value/main.svelte rename to packages/svelte/test/runtime/samples/binding-this-and-value/main.svelte diff --git a/test/runtime/samples/binding-this-component-computed-key/Foo.svelte b/packages/svelte/test/runtime/samples/binding-this-component-computed-key/Foo.svelte similarity index 100% rename from test/runtime/samples/binding-this-component-computed-key/Foo.svelte rename to packages/svelte/test/runtime/samples/binding-this-component-computed-key/Foo.svelte diff --git a/test/runtime/samples/binding-this-component-computed-key/_config.js b/packages/svelte/test/runtime/samples/binding-this-component-computed-key/_config.js similarity index 100% rename from test/runtime/samples/binding-this-component-computed-key/_config.js rename to packages/svelte/test/runtime/samples/binding-this-component-computed-key/_config.js diff --git a/test/runtime/samples/binding-this-component-computed-key/main.svelte b/packages/svelte/test/runtime/samples/binding-this-component-computed-key/main.svelte similarity index 100% rename from test/runtime/samples/binding-this-component-computed-key/main.svelte rename to packages/svelte/test/runtime/samples/binding-this-component-computed-key/main.svelte diff --git a/test/runtime/samples/binding-this-component-each-block-value/Foo.svelte b/packages/svelte/test/runtime/samples/binding-this-component-each-block-value/Foo.svelte similarity index 100% rename from test/runtime/samples/binding-this-component-each-block-value/Foo.svelte rename to packages/svelte/test/runtime/samples/binding-this-component-each-block-value/Foo.svelte diff --git a/test/runtime/samples/binding-this-component-each-block-value/_config.js b/packages/svelte/test/runtime/samples/binding-this-component-each-block-value/_config.js similarity index 100% rename from test/runtime/samples/binding-this-component-each-block-value/_config.js rename to packages/svelte/test/runtime/samples/binding-this-component-each-block-value/_config.js diff --git a/test/runtime/samples/binding-this-component-each-block-value/main.svelte b/packages/svelte/test/runtime/samples/binding-this-component-each-block-value/main.svelte similarity index 100% rename from test/runtime/samples/binding-this-component-each-block-value/main.svelte rename to packages/svelte/test/runtime/samples/binding-this-component-each-block-value/main.svelte diff --git a/test/runtime/samples/binding-this-component-each-block/Foo.svelte b/packages/svelte/test/runtime/samples/binding-this-component-each-block/Foo.svelte similarity index 100% rename from test/runtime/samples/binding-this-component-each-block/Foo.svelte rename to packages/svelte/test/runtime/samples/binding-this-component-each-block/Foo.svelte diff --git a/test/runtime/samples/binding-this-component-each-block/_config.js b/packages/svelte/test/runtime/samples/binding-this-component-each-block/_config.js similarity index 100% rename from test/runtime/samples/binding-this-component-each-block/_config.js rename to packages/svelte/test/runtime/samples/binding-this-component-each-block/_config.js diff --git a/test/runtime/samples/binding-this-component-each-block/main.svelte b/packages/svelte/test/runtime/samples/binding-this-component-each-block/main.svelte similarity index 100% rename from test/runtime/samples/binding-this-component-each-block/main.svelte rename to packages/svelte/test/runtime/samples/binding-this-component-each-block/main.svelte diff --git a/test/runtime/samples/binding-this-component-reactive/Foo.svelte b/packages/svelte/test/runtime/samples/binding-this-component-reactive/Foo.svelte similarity index 100% rename from test/runtime/samples/binding-this-component-reactive/Foo.svelte rename to packages/svelte/test/runtime/samples/binding-this-component-reactive/Foo.svelte diff --git a/test/runtime/samples/binding-this-component-reactive/_config.js b/packages/svelte/test/runtime/samples/binding-this-component-reactive/_config.js similarity index 100% rename from test/runtime/samples/binding-this-component-reactive/_config.js rename to packages/svelte/test/runtime/samples/binding-this-component-reactive/_config.js diff --git a/test/runtime/samples/binding-this-component-reactive/main.svelte b/packages/svelte/test/runtime/samples/binding-this-component-reactive/main.svelte similarity index 100% rename from test/runtime/samples/binding-this-component-reactive/main.svelte rename to packages/svelte/test/runtime/samples/binding-this-component-reactive/main.svelte diff --git a/packages/svelte/test/runtime/samples/binding-this-each-block-property-2/_config.js b/packages/svelte/test/runtime/samples/binding-this-each-block-property-2/_config.js new file mode 100644 index 0000000000..45d58eb9ca --- /dev/null +++ b/packages/svelte/test/runtime/samples/binding-this-each-block-property-2/_config.js @@ -0,0 +1,53 @@ +let calls = []; +function callback(refs) { + calls.push(refs.map(({ ref }) => ({ ref }))); +} +export default { + html: '', + get props() { + return { callback }; + }, + before_test() { + calls = []; + }, + async test({ assert, component, target }) { + assert.equal(calls.length, 1); + assert.equal(calls[0].length, 0); + + await component.addItem(); + + let divs = target.querySelectorAll('div'); + + assert.equal(calls.length, 3); + assert.equal(calls[1].length, 1); + assert.equal(calls[1][0].ref, null); + assert.equal(calls[2].length, 1); + assert.equal(calls[2][0].ref, divs[0]); + + await component.addItem(); + + divs = target.querySelectorAll('div'); + + assert.equal(calls.length, 5); + assert.equal(calls[3].length, 2); + assert.equal(calls[3][0].ref, divs[0]); + assert.equal(calls[3][1].ref, null); + assert.equal(calls[4].length, 2); + assert.equal(calls[4][0].ref, divs[0]); + assert.equal(calls[4][1].ref, divs[1]); + + await component.addItem(); + + divs = target.querySelectorAll('div'); + + assert.equal(calls.length, 7); + assert.equal(calls[5].length, 3); + assert.equal(calls[5][0].ref, divs[0]); + assert.equal(calls[5][1].ref, divs[1]); + assert.equal(calls[5][2].ref, null); + assert.equal(calls[6].length, 3); + assert.equal(calls[6][0].ref, divs[0]); + assert.equal(calls[6][1].ref, divs[1]); + assert.equal(calls[6][2].ref, divs[2]); + } +}; diff --git a/test/runtime/samples/binding-this-each-block-property-2/main.svelte b/packages/svelte/test/runtime/samples/binding-this-each-block-property-2/main.svelte similarity index 100% rename from test/runtime/samples/binding-this-each-block-property-2/main.svelte rename to packages/svelte/test/runtime/samples/binding-this-each-block-property-2/main.svelte diff --git a/test/runtime/samples/binding-this-each-block-property-component/Foo.svelte b/packages/svelte/test/runtime/samples/binding-this-each-block-property-component/Foo.svelte similarity index 100% rename from test/runtime/samples/binding-this-each-block-property-component/Foo.svelte rename to packages/svelte/test/runtime/samples/binding-this-each-block-property-component/Foo.svelte diff --git a/packages/svelte/test/runtime/samples/binding-this-each-block-property-component/_config.js b/packages/svelte/test/runtime/samples/binding-this-each-block-property-component/_config.js new file mode 100644 index 0000000000..0cc433432f --- /dev/null +++ b/packages/svelte/test/runtime/samples/binding-this-each-block-property-component/_config.js @@ -0,0 +1,15 @@ +export default { + html: '', + + async test({ assert, component, target }) { + component.visible = true; + assert.htmlEqual( + target.innerHTML, + ` +

a

+ ` + ); + + assert.ok(component.items[0].ref.isFoo()); + } +}; diff --git a/test/runtime/samples/binding-this-each-block-property-component/main.svelte b/packages/svelte/test/runtime/samples/binding-this-each-block-property-component/main.svelte similarity index 100% rename from test/runtime/samples/binding-this-each-block-property-component/main.svelte rename to packages/svelte/test/runtime/samples/binding-this-each-block-property-component/main.svelte diff --git a/packages/svelte/test/runtime/samples/binding-this-each-block-property/_config.js b/packages/svelte/test/runtime/samples/binding-this-each-block-property/_config.js new file mode 100644 index 0000000000..abfdb419e9 --- /dev/null +++ b/packages/svelte/test/runtime/samples/binding-this-each-block-property/_config.js @@ -0,0 +1,15 @@ +export default { + html: '', + + async test({ assert, component, target }) { + component.visible = true; + assert.htmlEqual( + target.innerHTML, + ` +
a
+ ` + ); + + assert.equal(component.items[0].ref, target.querySelector('div')); + } +}; diff --git a/test/runtime/samples/binding-this-each-block-property/main.svelte b/packages/svelte/test/runtime/samples/binding-this-each-block-property/main.svelte similarity index 100% rename from test/runtime/samples/binding-this-each-block-property/main.svelte rename to packages/svelte/test/runtime/samples/binding-this-each-block-property/main.svelte diff --git a/test/runtime/samples/binding-this-each-key/_config.js b/packages/svelte/test/runtime/samples/binding-this-each-key/_config.js similarity index 100% rename from test/runtime/samples/binding-this-each-key/_config.js rename to packages/svelte/test/runtime/samples/binding-this-each-key/_config.js diff --git a/test/runtime/samples/binding-this-each-key/main.svelte b/packages/svelte/test/runtime/samples/binding-this-each-key/main.svelte similarity index 100% rename from test/runtime/samples/binding-this-each-key/main.svelte rename to packages/svelte/test/runtime/samples/binding-this-each-key/main.svelte diff --git a/packages/svelte/test/runtime/samples/binding-this-each-object-props/_config.js b/packages/svelte/test/runtime/samples/binding-this-each-object-props/_config.js new file mode 100644 index 0000000000..24c1f4a990 --- /dev/null +++ b/packages/svelte/test/runtime/samples/binding-this-each-object-props/_config.js @@ -0,0 +1,17 @@ +export default { + html: '', + + async test({ assert, component, target }) { + component.visible = true; + assert.htmlEqual( + target.innerHTML, + ` +
b
b
c
c
+ ` + ); + assert.equal(component.items1[1], target.querySelector('div')); + assert.equal(component.items2[1], target.querySelector('div:nth-child(2)')); + assert.equal(component.items1[2], target.querySelector('div:nth-child(3)')); + assert.equal(component.items2[2], target.querySelector('div:last-child')); + } +}; diff --git a/test/runtime/samples/binding-this-each-object-props/main.svelte b/packages/svelte/test/runtime/samples/binding-this-each-object-props/main.svelte similarity index 100% rename from test/runtime/samples/binding-this-each-object-props/main.svelte rename to packages/svelte/test/runtime/samples/binding-this-each-object-props/main.svelte diff --git a/packages/svelte/test/runtime/samples/binding-this-each-object-spread/_config.js b/packages/svelte/test/runtime/samples/binding-this-each-object-spread/_config.js new file mode 100644 index 0000000000..ae6c55e0c2 --- /dev/null +++ b/packages/svelte/test/runtime/samples/binding-this-each-object-spread/_config.js @@ -0,0 +1,17 @@ +export default { + html: '', + + async test({ assert, component, target }) { + component.visible = true; + assert.htmlEqual( + target.innerHTML, + ` +
a
a
b
b
+ ` + ); + assert.equal(component.items1[1], target.querySelector('div')); + assert.equal(component.items2[1], target.querySelector('div:nth-child(2)')); + assert.equal(component.items1[2], target.querySelector('div:nth-child(3)')); + assert.equal(component.items2[2], target.querySelector('div:last-child')); + } +}; diff --git a/test/runtime/samples/binding-this-each-object-spread/main.svelte b/packages/svelte/test/runtime/samples/binding-this-each-object-spread/main.svelte similarity index 100% rename from test/runtime/samples/binding-this-each-object-spread/main.svelte rename to packages/svelte/test/runtime/samples/binding-this-each-object-spread/main.svelte diff --git a/packages/svelte/test/runtime/samples/binding-this-element-reactive-b/_config.js b/packages/svelte/test/runtime/samples/binding-this-element-reactive-b/_config.js new file mode 100644 index 0000000000..e5c42c3734 --- /dev/null +++ b/packages/svelte/test/runtime/samples/binding-this-element-reactive-b/_config.js @@ -0,0 +1,27 @@ +export default { + skip_if_ssr: true, + + html: ` +
The text is hello
+

hello

+ `, + + test({ assert, component, target }) { + component.visible = false; + assert.htmlEqual( + target.innerHTML, + ` +
The text is missing
+ ` + ); + + component.visible = true; + assert.htmlEqual( + target.innerHTML, + ` +
The text is hello
+

hello

+ ` + ); + } +}; diff --git a/test/runtime/samples/binding-this-element-reactive-b/main.svelte b/packages/svelte/test/runtime/samples/binding-this-element-reactive-b/main.svelte similarity index 100% rename from test/runtime/samples/binding-this-element-reactive-b/main.svelte rename to packages/svelte/test/runtime/samples/binding-this-element-reactive-b/main.svelte diff --git a/test/runtime/samples/binding-this-element-reactive/_config.js b/packages/svelte/test/runtime/samples/binding-this-element-reactive/_config.js similarity index 100% rename from test/runtime/samples/binding-this-element-reactive/_config.js rename to packages/svelte/test/runtime/samples/binding-this-element-reactive/_config.js diff --git a/test/runtime/samples/binding-this-element-reactive/main.svelte b/packages/svelte/test/runtime/samples/binding-this-element-reactive/main.svelte similarity index 100% rename from test/runtime/samples/binding-this-element-reactive/main.svelte rename to packages/svelte/test/runtime/samples/binding-this-element-reactive/main.svelte diff --git a/test/runtime/samples/binding-this-member-expression-update/_config.js b/packages/svelte/test/runtime/samples/binding-this-member-expression-update/_config.js similarity index 100% rename from test/runtime/samples/binding-this-member-expression-update/_config.js rename to packages/svelte/test/runtime/samples/binding-this-member-expression-update/_config.js diff --git a/test/runtime/samples/binding-this-member-expression-update/main.svelte b/packages/svelte/test/runtime/samples/binding-this-member-expression-update/main.svelte similarity index 100% rename from test/runtime/samples/binding-this-member-expression-update/main.svelte rename to packages/svelte/test/runtime/samples/binding-this-member-expression-update/main.svelte diff --git a/test/runtime/samples/binding-this-no-innerhtml/_config.js b/packages/svelte/test/runtime/samples/binding-this-no-innerhtml/_config.js similarity index 100% rename from test/runtime/samples/binding-this-no-innerhtml/_config.js rename to packages/svelte/test/runtime/samples/binding-this-no-innerhtml/_config.js diff --git a/test/runtime/samples/binding-this-no-innerhtml/main.svelte b/packages/svelte/test/runtime/samples/binding-this-no-innerhtml/main.svelte similarity index 100% rename from test/runtime/samples/binding-this-no-innerhtml/main.svelte rename to packages/svelte/test/runtime/samples/binding-this-no-innerhtml/main.svelte diff --git a/test/runtime/samples/binding-this-store/_config.js b/packages/svelte/test/runtime/samples/binding-this-store/_config.js similarity index 100% rename from test/runtime/samples/binding-this-store/_config.js rename to packages/svelte/test/runtime/samples/binding-this-store/_config.js diff --git a/test/runtime/samples/binding-this-store/main.svelte b/packages/svelte/test/runtime/samples/binding-this-store/main.svelte similarity index 100% rename from test/runtime/samples/binding-this-store/main.svelte rename to packages/svelte/test/runtime/samples/binding-this-store/main.svelte diff --git a/packages/svelte/test/runtime/samples/binding-this-unset/_config.js b/packages/svelte/test/runtime/samples/binding-this-unset/_config.js new file mode 100644 index 0000000000..32b22c85e5 --- /dev/null +++ b/packages/svelte/test/runtime/samples/binding-this-unset/_config.js @@ -0,0 +1,23 @@ +export default { + get props() { + return { x: true }; + }, + + html: '', + + test({ assert, component, target }) { + let canvas = target.querySelector('canvas'); + assert.equal(canvas, component.foo); + assert.equal(canvas.getAttribute('data-x'), 'true'); + + component.x = false; + canvas = target.querySelector('canvas'); + assert.equal(canvas, component.foo); + assert.equal(canvas.getAttribute('data-x'), 'false'); + + component.x = true; + canvas = target.querySelector('canvas'); + assert.equal(canvas, component.foo); + assert.equal(canvas.getAttribute('data-x'), 'true'); + } +}; diff --git a/test/runtime/samples/binding-this-unset/main.svelte b/packages/svelte/test/runtime/samples/binding-this-unset/main.svelte similarity index 100% rename from test/runtime/samples/binding-this-unset/main.svelte rename to packages/svelte/test/runtime/samples/binding-this-unset/main.svelte diff --git a/packages/svelte/test/runtime/samples/binding-this-with-context/_config.js b/packages/svelte/test/runtime/samples/binding-this-with-context/_config.js new file mode 100644 index 0000000000..2162d7d184 --- /dev/null +++ b/packages/svelte/test/runtime/samples/binding-this-with-context/_config.js @@ -0,0 +1,67 @@ +export default { + html: `
foo
bar
baz
+ foobarbaz +
  • foo

  • bar

  • baz

+



`, + + test({ assert, component, target }) { + let elems = target.querySelectorAll('div'); + assert.equal(component.divs.length, 3, 'three divs are registered (unkeyed array)'); + component.divs.forEach((e, i) => { + assert.equal(e, elems[i], `div ${i} is correct (unkeyed array)`); + }); + + elems = target.querySelectorAll('span'); + assert.equal( + Object.keys(component.spans).length, + 3, + 'three spans are registered (unkeyed object)' + ); + component.items.forEach((e, i) => { + assert.equal( + component.spans[`-${e}${i}`], + elems[i], + `span -${e}${i} is correct (unkeyed object)` + ); + }); + + elems = target.querySelectorAll('p'); + assert.equal(component.ps.length, 3, 'three ps are registered (keyed array)'); + component.ps.forEach((e, i) => { + assert.equal(e, elems[i], `p ${i} is correct (keyed array)`); + }); + + elems = target.querySelectorAll('hr'); + assert.equal(Object.keys(component.hrs).length, 3, 'three hrs are registered (keyed object)'); + component.items.forEach((e, i) => { + assert.equal(component.hrs[e], elems[i], `hr ${e} is correct (keyed object)`); + }); + + component.items = ['foo', 'baz']; + assert.equal(component.divs.length, 3, 'the divs array is still 3 long'); + assert.equal(component.divs[2], null, 'the last div is unregistered'); + assert.equal(component.ps[2], null, 'the last p is unregistered'); + assert.equal(component.spans['-bar1'], null, 'the bar span is unregistered'); + assert.equal(component.hrs.bar, null, 'the bar hr is unregistered'); + + elems = target.querySelectorAll('div'); + component.divs.forEach((e, i) => { + assert.equal(e, elems[i], `div ${i} is still correct`); + }); + + elems = target.querySelectorAll('span'); + component.items.forEach((e, i) => { + assert.equal(component.spans[`-${e}${i}`], elems[i], `span -${e}${i} is still correct`); + }); + + elems = target.querySelectorAll('p'); + component.ps.forEach((e, i) => { + assert.equal(e, elems[i], `p ${i} is still correct`); + }); + + elems = target.querySelectorAll('hr'); + component.items.forEach((e, i) => { + assert.equal(component.hrs[e], elems[i], `hr ${e} is still correct`); + }); + } +}; diff --git a/test/runtime/samples/binding-this-with-context/main.svelte b/packages/svelte/test/runtime/samples/binding-this-with-context/main.svelte similarity index 100% rename from test/runtime/samples/binding-this-with-context/main.svelte rename to packages/svelte/test/runtime/samples/binding-this-with-context/main.svelte diff --git a/test/runtime/samples/binding-this/_config.js b/packages/svelte/test/runtime/samples/binding-this/_config.js similarity index 100% rename from test/runtime/samples/binding-this/_config.js rename to packages/svelte/test/runtime/samples/binding-this/_config.js diff --git a/test/runtime/samples/binding-this/main.svelte b/packages/svelte/test/runtime/samples/binding-this/main.svelte similarity index 100% rename from test/runtime/samples/binding-this/main.svelte rename to packages/svelte/test/runtime/samples/binding-this/main.svelte diff --git a/test/runtime/samples/binding-using-props/TextInput.svelte b/packages/svelte/test/runtime/samples/binding-using-props/TextInput.svelte similarity index 100% rename from test/runtime/samples/binding-using-props/TextInput.svelte rename to packages/svelte/test/runtime/samples/binding-using-props/TextInput.svelte diff --git a/packages/svelte/test/runtime/samples/binding-using-props/_config.js b/packages/svelte/test/runtime/samples/binding-using-props/_config.js new file mode 100644 index 0000000000..b3de6fad7d --- /dev/null +++ b/packages/svelte/test/runtime/samples/binding-using-props/_config.js @@ -0,0 +1,17 @@ +export default { + async test({ assert, target, window }) { + const input = target.querySelector('input'); + + const event = new window.Event('input'); + input.value = 'changed'; + await input.dispatchEvent(event); + + assert.htmlEqual( + target.innerHTML, + ` + +

changed

+ ` + ); + } +}; diff --git a/test/runtime/samples/binding-using-props/main.svelte b/packages/svelte/test/runtime/samples/binding-using-props/main.svelte similarity index 100% rename from test/runtime/samples/binding-using-props/main.svelte rename to packages/svelte/test/runtime/samples/binding-using-props/main.svelte diff --git a/test/runtime/samples/binding-width-height-a11y/_config.js b/packages/svelte/test/runtime/samples/binding-width-height-a11y/_config.js similarity index 100% rename from test/runtime/samples/binding-width-height-a11y/_config.js rename to packages/svelte/test/runtime/samples/binding-width-height-a11y/_config.js diff --git a/test/runtime/samples/binding-width-height-a11y/main.svelte b/packages/svelte/test/runtime/samples/binding-width-height-a11y/main.svelte similarity index 100% rename from test/runtime/samples/binding-width-height-a11y/main.svelte rename to packages/svelte/test/runtime/samples/binding-width-height-a11y/main.svelte diff --git a/test/runtime/samples/binding-width-height-z-index/_config.js b/packages/svelte/test/runtime/samples/binding-width-height-z-index/_config.js similarity index 100% rename from test/runtime/samples/binding-width-height-z-index/_config.js rename to packages/svelte/test/runtime/samples/binding-width-height-z-index/_config.js diff --git a/test/runtime/samples/binding-width-height-z-index/main.svelte b/packages/svelte/test/runtime/samples/binding-width-height-z-index/main.svelte similarity index 100% rename from test/runtime/samples/binding-width-height-z-index/main.svelte rename to packages/svelte/test/runtime/samples/binding-width-height-z-index/main.svelte diff --git a/test/runtime/samples/bindings-before-onmount/One.svelte b/packages/svelte/test/runtime/samples/bindings-before-onmount/One.svelte similarity index 100% rename from test/runtime/samples/bindings-before-onmount/One.svelte rename to packages/svelte/test/runtime/samples/bindings-before-onmount/One.svelte diff --git a/test/runtime/samples/bindings-before-onmount/Two.svelte b/packages/svelte/test/runtime/samples/bindings-before-onmount/Two.svelte similarity index 100% rename from test/runtime/samples/bindings-before-onmount/Two.svelte rename to packages/svelte/test/runtime/samples/bindings-before-onmount/Two.svelte diff --git a/test/runtime/samples/bindings-before-onmount/_config.js b/packages/svelte/test/runtime/samples/bindings-before-onmount/_config.js similarity index 100% rename from test/runtime/samples/bindings-before-onmount/_config.js rename to packages/svelte/test/runtime/samples/bindings-before-onmount/_config.js diff --git a/test/runtime/samples/bindings-before-onmount/main.svelte b/packages/svelte/test/runtime/samples/bindings-before-onmount/main.svelte similarity index 100% rename from test/runtime/samples/bindings-before-onmount/main.svelte rename to packages/svelte/test/runtime/samples/bindings-before-onmount/main.svelte diff --git a/test/runtime/samples/bindings-coalesced/Foo.svelte b/packages/svelte/test/runtime/samples/bindings-coalesced/Foo.svelte similarity index 100% rename from test/runtime/samples/bindings-coalesced/Foo.svelte rename to packages/svelte/test/runtime/samples/bindings-coalesced/Foo.svelte diff --git a/test/runtime/samples/bindings-coalesced/_config.js b/packages/svelte/test/runtime/samples/bindings-coalesced/_config.js similarity index 100% rename from test/runtime/samples/bindings-coalesced/_config.js rename to packages/svelte/test/runtime/samples/bindings-coalesced/_config.js diff --git a/test/runtime/samples/bindings-coalesced/main.svelte b/packages/svelte/test/runtime/samples/bindings-coalesced/main.svelte similarity index 100% rename from test/runtime/samples/bindings-coalesced/main.svelte rename to packages/svelte/test/runtime/samples/bindings-coalesced/main.svelte diff --git a/test/runtime/samples/bindings-global-dependency/_config.js b/packages/svelte/test/runtime/samples/bindings-global-dependency/_config.js similarity index 100% rename from test/runtime/samples/bindings-global-dependency/_config.js rename to packages/svelte/test/runtime/samples/bindings-global-dependency/_config.js diff --git a/test/runtime/samples/bindings-global-dependency/main.svelte b/packages/svelte/test/runtime/samples/bindings-global-dependency/main.svelte similarity index 100% rename from test/runtime/samples/bindings-global-dependency/main.svelte rename to packages/svelte/test/runtime/samples/bindings-global-dependency/main.svelte diff --git a/test/runtime/samples/bitmask-overflow-2/_config.js b/packages/svelte/test/runtime/samples/bitmask-overflow-2/_config.js similarity index 100% rename from test/runtime/samples/bitmask-overflow-2/_config.js rename to packages/svelte/test/runtime/samples/bitmask-overflow-2/_config.js diff --git a/test/runtime/samples/bitmask-overflow-2/main.svelte b/packages/svelte/test/runtime/samples/bitmask-overflow-2/main.svelte similarity index 100% rename from test/runtime/samples/bitmask-overflow-2/main.svelte rename to packages/svelte/test/runtime/samples/bitmask-overflow-2/main.svelte diff --git a/test/runtime/samples/bitmask-overflow-3/_config.js b/packages/svelte/test/runtime/samples/bitmask-overflow-3/_config.js similarity index 100% rename from test/runtime/samples/bitmask-overflow-3/_config.js rename to packages/svelte/test/runtime/samples/bitmask-overflow-3/_config.js diff --git a/test/runtime/samples/bitmask-overflow-3/main.svelte b/packages/svelte/test/runtime/samples/bitmask-overflow-3/main.svelte similarity index 100% rename from test/runtime/samples/bitmask-overflow-3/main.svelte rename to packages/svelte/test/runtime/samples/bitmask-overflow-3/main.svelte diff --git a/test/runtime/samples/bitmask-overflow-if-2/_config.js b/packages/svelte/test/runtime/samples/bitmask-overflow-if-2/_config.js similarity index 100% rename from test/runtime/samples/bitmask-overflow-if-2/_config.js rename to packages/svelte/test/runtime/samples/bitmask-overflow-if-2/_config.js diff --git a/test/runtime/samples/bitmask-overflow-if-2/main.svelte b/packages/svelte/test/runtime/samples/bitmask-overflow-if-2/main.svelte similarity index 100% rename from test/runtime/samples/bitmask-overflow-if-2/main.svelte rename to packages/svelte/test/runtime/samples/bitmask-overflow-if-2/main.svelte diff --git a/test/runtime/samples/bitmask-overflow-if/_config.js b/packages/svelte/test/runtime/samples/bitmask-overflow-if/_config.js similarity index 100% rename from test/runtime/samples/bitmask-overflow-if/_config.js rename to packages/svelte/test/runtime/samples/bitmask-overflow-if/_config.js diff --git a/test/runtime/samples/bitmask-overflow-if/main.svelte b/packages/svelte/test/runtime/samples/bitmask-overflow-if/main.svelte similarity index 100% rename from test/runtime/samples/bitmask-overflow-if/main.svelte rename to packages/svelte/test/runtime/samples/bitmask-overflow-if/main.svelte diff --git a/test/runtime/samples/bitmask-overflow-slot-2/Echo.svelte b/packages/svelte/test/runtime/samples/bitmask-overflow-slot-2/Echo.svelte similarity index 100% rename from test/runtime/samples/bitmask-overflow-slot-2/Echo.svelte rename to packages/svelte/test/runtime/samples/bitmask-overflow-slot-2/Echo.svelte diff --git a/packages/svelte/test/runtime/samples/bitmask-overflow-slot-2/_config.js b/packages/svelte/test/runtime/samples/bitmask-overflow-slot-2/_config.js new file mode 100644 index 0000000000..a0167e8ab9 --- /dev/null +++ b/packages/svelte/test/runtime/samples/bitmask-overflow-slot-2/_config.js @@ -0,0 +1,99 @@ +export default { + html: ` +

d1

+

d2

+

d3

+

d4

+

d5

+

d6

+

d7

+

d8

+

d9

+

d10

+

d11

+

d12

+

d13

+

d14

+

d15

+

d16

+

d17

+

d18

+

d19

+

d20

+

d21

+

d22

+

d23

+

d24

+

d25

+

d26

+

d27

+

d28

+

d29

+

d30

+

d31

+

2

+

1

+

0:1

+

2:1

+

0

+

1

+

2

+ `, + + test({ assert, component, target }) { + component.reads = {}; + + component._0 = 'a'; + component._1 = 'b'; + component._2 = 'c'; + + assert.htmlEqual( + target.innerHTML, + ` +

d1

+

d2

+

d3

+

d4

+

d5

+

d6

+

d7

+

d8

+

d9

+

d10

+

d11

+

d12

+

d13

+

d14

+

d15

+

d16

+

d17

+

d18

+

d19

+

d20

+

d21

+

d22

+

d23

+

d24

+

d25

+

d26

+

d27

+

d28

+

d29

+

d30

+

d31

+

c

+

b

+

a:b

+

c:b

+

a

+

b

+

c

+ ` + ); + + assert.deepEqual(component.reads, { + _0: 2, + _1: 2 + }); + } +}; diff --git a/test/runtime/samples/bitmask-overflow-slot-2/main.svelte b/packages/svelte/test/runtime/samples/bitmask-overflow-slot-2/main.svelte similarity index 100% rename from test/runtime/samples/bitmask-overflow-slot-2/main.svelte rename to packages/svelte/test/runtime/samples/bitmask-overflow-slot-2/main.svelte diff --git a/test/runtime/samples/bitmask-overflow-slot-3/Echo.svelte b/packages/svelte/test/runtime/samples/bitmask-overflow-slot-3/Echo.svelte similarity index 100% rename from test/runtime/samples/bitmask-overflow-slot-3/Echo.svelte rename to packages/svelte/test/runtime/samples/bitmask-overflow-slot-3/Echo.svelte diff --git a/packages/svelte/test/runtime/samples/bitmask-overflow-slot-3/_config.js b/packages/svelte/test/runtime/samples/bitmask-overflow-slot-3/_config.js new file mode 100644 index 0000000000..91789300ec --- /dev/null +++ b/packages/svelte/test/runtime/samples/bitmask-overflow-slot-3/_config.js @@ -0,0 +1,35 @@ +export default { + html: ` +

_0_1_2_3_4_5_6_7_8_9_10_11_12_13_14_15_16_17_18_19_20_21_22_23_24_25_26_27_28_29_30_31_32_33_34_35_36_37_38_39_40

+

0

+ + `, + + async test({ assert, component, target, window }) { + // change from inside + const button = target.querySelector('button'); + await button.dispatchEvent(new window.MouseEvent('click')); + + assert.htmlEqual( + target.innerHTML, + ` +

_0_1_2_3_4_5_6_7_8_9_10_11_12_13_14_15_16_17_18_19_20_21_22_23_24_25_26_27_28_29_30_31_32_33_34_35_36_37_38_39_40

+

1

+ + ` + ); + + // change from outside + component._0 = 'a'; + component._40 = 'b'; + + assert.htmlEqual( + target.innerHTML, + ` +

a_1_2_3_4_5_6_7_8_9_10_11_12_13_14_15_16_17_18_19_20_21_22_23_24_25_26_27_28_29_30_31_32_33_34_35_36_37_38_39b

+

1

+ + ` + ); + } +}; diff --git a/test/runtime/samples/bitmask-overflow-slot-3/main.svelte b/packages/svelte/test/runtime/samples/bitmask-overflow-slot-3/main.svelte similarity index 100% rename from test/runtime/samples/bitmask-overflow-slot-3/main.svelte rename to packages/svelte/test/runtime/samples/bitmask-overflow-slot-3/main.svelte diff --git a/test/runtime/samples/bitmask-overflow-slot-4/Echo.svelte b/packages/svelte/test/runtime/samples/bitmask-overflow-slot-4/Echo.svelte similarity index 100% rename from test/runtime/samples/bitmask-overflow-slot-4/Echo.svelte rename to packages/svelte/test/runtime/samples/bitmask-overflow-slot-4/Echo.svelte diff --git a/packages/svelte/test/runtime/samples/bitmask-overflow-slot-4/_config.js b/packages/svelte/test/runtime/samples/bitmask-overflow-slot-4/_config.js new file mode 100644 index 0000000000..8e97a97282 --- /dev/null +++ b/packages/svelte/test/runtime/samples/bitmask-overflow-slot-4/_config.js @@ -0,0 +1,50 @@ +export default { + html: ` +

_0_1_2_3_4_5_6_7_8_9_10_11_12_13_14_15_16_17_18_19_20_21_22_23_24_25_26_27_28_29_30_31_32_33_34_35_36_37_38_39_40

+

0

+

0

+ + `, + + async test({ assert, component, target, window }) { + // change from inside + const button = target.querySelector('button'); + await button.dispatchEvent(new window.MouseEvent('click')); + + assert.htmlEqual( + target.innerHTML, + ` +

_0_1_2_3_4_5_6_7_8_9_10_11_12_13_14_15_16_17_18_19_20_21_22_23_24_25_26_27_28_29_30_31_32_33_34_35_36_37_38_39_40

+

0

+

1

+ + ` + ); + + // change from outside + component._0 = 'a'; + + assert.htmlEqual( + target.innerHTML, + ` +

_0_1_2_3_4_5_6_7_8_9_10_11_12_13_14_15_16_17_18_19_20_21_22_23_24_25_26_27_28_29_30_31_32_33_34_35_36_37_38_39_40

+

a

+

1

+ + ` + ); + + // change from outside through props + component._40 = 'b'; + + assert.htmlEqual( + target.innerHTML, + ` +

_0_1_2_3_4_5_6_7_8_9_10_11_12_13_14_15_16_17_18_19_20_21_22_23_24_25_26_27_28_29_30_31_32_33_34_35_36_37_38_39b

+

a

+

1

+ + ` + ); + } +}; diff --git a/test/runtime/samples/bitmask-overflow-slot-4/main.svelte b/packages/svelte/test/runtime/samples/bitmask-overflow-slot-4/main.svelte similarity index 100% rename from test/runtime/samples/bitmask-overflow-slot-4/main.svelte rename to packages/svelte/test/runtime/samples/bitmask-overflow-slot-4/main.svelte diff --git a/test/runtime/samples/bitmask-overflow-slot-5/Echo.svelte b/packages/svelte/test/runtime/samples/bitmask-overflow-slot-5/Echo.svelte similarity index 100% rename from test/runtime/samples/bitmask-overflow-slot-5/Echo.svelte rename to packages/svelte/test/runtime/samples/bitmask-overflow-slot-5/Echo.svelte diff --git a/packages/svelte/test/runtime/samples/bitmask-overflow-slot-5/_config.js b/packages/svelte/test/runtime/samples/bitmask-overflow-slot-5/_config.js new file mode 100644 index 0000000000..0c18abd9f5 --- /dev/null +++ b/packages/svelte/test/runtime/samples/bitmask-overflow-slot-5/_config.js @@ -0,0 +1,58 @@ +export default { + html: ` +

_0_1_2_3_4_5_6_7_8_9_10_11_12_13_14_15_16_17_18_19_20_21_22_23_24_25_26_27_28_29_30_31_32_33_34_35_36_37_38_39_40

+

b

+

-0-1-2-3-4-5-6-7-8-9-10-11-12-13-14-15-16-17-18-19-20-21-22-23-24-25-26-27-28-29-30-31-32-33-34-35-36-37-38-39-40

+

0

+

0

+ + `, + + async test({ assert, component, target, window }) { + // change from inside + const button = target.querySelector('button'); + await button.dispatchEvent(new window.MouseEvent('click')); + + assert.htmlEqual( + target.innerHTML, + ` +

_0_1_2_3_4_5_6_7_8_9_10_11_12_13_14_15_16_17_18_19_20_21_22_23_24_25_26_27_28_29_30_31_32_33_34_35_36_37_38_39_40

+

b

+

-0-1-2-3-4-5-6-7-8-9-10-11-12-13-14-15-16-17-18-19-20-21-22-23-24-25-26-27-28-29-30-31-32-33-34-35-36-37-38-39-40

+

0

+

1

+ + ` + ); + + // change from outside + component.a = 'AA'; + + assert.htmlEqual( + target.innerHTML, + ` +

_0_1_2_3_4_5_6_7_8_9_10_11_12_13_14_15_16_17_18_19_20_21_22_23_24_25_26_27_28_29_30_31_32_33_34_35_36_37_38_39_40

+

b

+

-0-1-2-3-4-5-6-7-8-9-10-11-12-13-14-15-16-17-18-19-20-21-22-23-24-25-26-27-28-29-30-31-32-33-34-35-36-37-38-39-40

+

AA

+

1

+ + ` + ); + + // change from outside through props + component.b = 'BB'; + + assert.htmlEqual( + target.innerHTML, + ` +

_0_1_2_3_4_5_6_7_8_9_10_11_12_13_14_15_16_17_18_19_20_21_22_23_24_25_26_27_28_29_30_31_32_33_34_35_36_37_38_39_40

+

BB

+

-0-1-2-3-4-5-6-7-8-9-10-11-12-13-14-15-16-17-18-19-20-21-22-23-24-25-26-27-28-29-30-31-32-33-34-35-36-37-38-39-40

+

AA

+

1

+ + ` + ); + } +}; diff --git a/test/runtime/samples/bitmask-overflow-slot-5/main.svelte b/packages/svelte/test/runtime/samples/bitmask-overflow-slot-5/main.svelte similarity index 100% rename from test/runtime/samples/bitmask-overflow-slot-5/main.svelte rename to packages/svelte/test/runtime/samples/bitmask-overflow-slot-5/main.svelte diff --git a/test/runtime/samples/bitmask-overflow-slot-6/Slotted.svelte b/packages/svelte/test/runtime/samples/bitmask-overflow-slot-6/Slotted.svelte similarity index 100% rename from test/runtime/samples/bitmask-overflow-slot-6/Slotted.svelte rename to packages/svelte/test/runtime/samples/bitmask-overflow-slot-6/Slotted.svelte diff --git a/packages/svelte/test/runtime/samples/bitmask-overflow-slot-6/_config.js b/packages/svelte/test/runtime/samples/bitmask-overflow-slot-6/_config.js new file mode 100644 index 0000000000..50e4b21dc1 --- /dev/null +++ b/packages/svelte/test/runtime/samples/bitmask-overflow-slot-6/_config.js @@ -0,0 +1,38 @@ +// overflow bitmask + slot missing `let:` +export default { + html: ` +
+ +
+ + `, + + async test({ assert, target, window }) { + const button = target.querySelectorAll('button')[1]; + const div = target.querySelector('div'); + await div.dispatchEvent(new window.MouseEvent('click')); + + assert.htmlEqual( + target.innerHTML, + ` +
+ +
Open
+
+ + ` + ); + + await button.dispatchEvent(new window.MouseEvent('click')); + assert.htmlEqual( + target.innerHTML, + ` +
+ +
Open
+
+ + ` + ); + } +}; diff --git a/test/runtime/samples/bitmask-overflow-slot-6/main.svelte b/packages/svelte/test/runtime/samples/bitmask-overflow-slot-6/main.svelte similarity index 100% rename from test/runtime/samples/bitmask-overflow-slot-6/main.svelte rename to packages/svelte/test/runtime/samples/bitmask-overflow-slot-6/main.svelte diff --git a/test/runtime/samples/bitmask-overflow-slot/Echo.svelte b/packages/svelte/test/runtime/samples/bitmask-overflow-slot/Echo.svelte similarity index 100% rename from test/runtime/samples/bitmask-overflow-slot/Echo.svelte rename to packages/svelte/test/runtime/samples/bitmask-overflow-slot/Echo.svelte diff --git a/packages/svelte/test/runtime/samples/bitmask-overflow-slot/_config.js b/packages/svelte/test/runtime/samples/bitmask-overflow-slot/_config.js new file mode 100644 index 0000000000..ec9e08b9ed --- /dev/null +++ b/packages/svelte/test/runtime/samples/bitmask-overflow-slot/_config.js @@ -0,0 +1,127 @@ +export default { + html: ` +

0

+

1

+

2

+

3

+

4

+

5

+

6

+

7

+

8

+

9

+

10

+

11

+

12

+

13

+

14

+

15

+

16

+

17

+

18

+

19

+

20

+

21

+

22

+

23

+

24

+

25

+

26

+

27

+

28

+

29

+

30

+

31

+

32

+

33

+

34

+

35

+

36

+

37

+

38

+

39

+

40

+

5:36

+

6:37

+

38

+

0

+ `, + + test({ assert, component, target }) { + component.reads = {}; + + component._0 = 'a'; + component._30 = 'b'; + component._31 = 'c'; + component._32 = 'd'; + component._40 = 'e'; + + component._5 = 'f'; + component._6 = 'g'; + component._36 = 'h'; + component._37 = 'i'; + + assert.htmlEqual( + target.innerHTML, + ` +

a

+

1

+

2

+

3

+

4

+

f

+

g

+

7

+

8

+

9

+

10

+

11

+

12

+

13

+

14

+

15

+

16

+

17

+

18

+

19

+

20

+

21

+

22

+

23

+

24

+

25

+

26

+

27

+

28

+

29

+

b

+

c

+

d

+

33

+

34

+

35

+

h

+

i

+

38

+

39

+

e

+

f:h

+

g:i

+

38

+

a

+ ` + ); + + assert.deepEqual(component.reads, { + _0: 1, + _5: 3, + _6: 3, + _30: 1, + _31: 1, + _32: 1, + _36: 3, + _37: 3, + _40: 1 + }); + } +}; diff --git a/test/runtime/samples/bitmask-overflow-slot/main.svelte b/packages/svelte/test/runtime/samples/bitmask-overflow-slot/main.svelte similarity index 100% rename from test/runtime/samples/bitmask-overflow-slot/main.svelte rename to packages/svelte/test/runtime/samples/bitmask-overflow-slot/main.svelte diff --git a/packages/svelte/test/runtime/samples/bitmask-overflow/_config.js b/packages/svelte/test/runtime/samples/bitmask-overflow/_config.js new file mode 100644 index 0000000000..08d280db63 --- /dev/null +++ b/packages/svelte/test/runtime/samples/bitmask-overflow/_config.js @@ -0,0 +1,125 @@ +export default { + html: ` +

0

+

1

+

2

+

3

+

4

+

5

+

6

+

7

+

8

+

9

+

10

+

11

+

12

+

13

+

14

+

15

+

16

+

17

+

18

+

19

+

20

+

21

+

22

+

23

+

24

+

25

+

26

+

27

+

28

+

29

+

30

+

31

+

32

+

33

+

34

+

35

+

36

+

37

+

38

+

39

+

40

+

5:36

+

6:37

+

38

+ `, + + test({ assert, component, target }) { + component.reads = {}; + + component._0 = 'a'; + component._30 = 'b'; + component._31 = 'c'; + component._32 = 'd'; + component._40 = 'e'; + + component._5 = 'f'; + component._6 = 'g'; + component._36 = 'h'; + component._37 = 'i'; + + assert.htmlEqual( + target.innerHTML, + ` +

a

+

1

+

2

+

3

+

4

+

f

+

g

+

7

+

8

+

9

+

10

+

11

+

12

+

13

+

14

+

15

+

16

+

17

+

18

+

19

+

20

+

21

+

22

+

23

+

24

+

25

+

26

+

27

+

28

+

29

+

b

+

c

+

d

+

33

+

34

+

35

+

h

+

i

+

38

+

39

+

e

+

f:h

+

g:i

+

38

+ ` + ); + + assert.deepEqual(component.reads, { + _0: 1, + _5: 3, + _6: 3, + _30: 1, + _31: 1, + _32: 1, + _36: 3, + _37: 3, + _40: 1 + }); + } +}; diff --git a/test/runtime/samples/bitmask-overflow/main.svelte b/packages/svelte/test/runtime/samples/bitmask-overflow/main.svelte similarity index 100% rename from test/runtime/samples/bitmask-overflow/main.svelte rename to packages/svelte/test/runtime/samples/bitmask-overflow/main.svelte diff --git a/test/runtime/samples/class-boolean/_config.js b/packages/svelte/test/runtime/samples/class-boolean/_config.js similarity index 100% rename from test/runtime/samples/class-boolean/_config.js rename to packages/svelte/test/runtime/samples/class-boolean/_config.js diff --git a/test/runtime/samples/class-boolean/main.svelte b/packages/svelte/test/runtime/samples/class-boolean/main.svelte similarity index 100% rename from test/runtime/samples/class-boolean/main.svelte rename to packages/svelte/test/runtime/samples/class-boolean/main.svelte diff --git a/packages/svelte/test/runtime/samples/class-helper/_config.js b/packages/svelte/test/runtime/samples/class-helper/_config.js new file mode 100644 index 0000000000..3d3076c5b9 --- /dev/null +++ b/packages/svelte/test/runtime/samples/class-helper/_config.js @@ -0,0 +1,18 @@ +export default { + get props() { + return { user: { active: true } }; + }, + + html: '
', + + test({ assert, component, target }) { + component.user = { active: false }; + + assert.htmlEqual( + target.innerHTML, + ` +
+ ` + ); + } +}; diff --git a/test/runtime/samples/class-helper/main.svelte b/packages/svelte/test/runtime/samples/class-helper/main.svelte similarity index 100% rename from test/runtime/samples/class-helper/main.svelte rename to packages/svelte/test/runtime/samples/class-helper/main.svelte diff --git a/packages/svelte/test/runtime/samples/class-in-each/_config.js b/packages/svelte/test/runtime/samples/class-in-each/_config.js new file mode 100644 index 0000000000..5014a136fc --- /dev/null +++ b/packages/svelte/test/runtime/samples/class-in-each/_config.js @@ -0,0 +1,26 @@ +export default { + get props() { + return { + things: ['one', 'two', 'three'], + selected: 'two' + }; + }, + + html: ` +
+
+
+ `, + + test({ assert, component, target }) { + component.selected = 'three'; + assert.htmlEqual( + target.innerHTML, + ` +
+
+
+ ` + ); + } +}; diff --git a/test/runtime/samples/class-in-each/main.svelte b/packages/svelte/test/runtime/samples/class-in-each/main.svelte similarity index 100% rename from test/runtime/samples/class-in-each/main.svelte rename to packages/svelte/test/runtime/samples/class-in-each/main.svelte diff --git a/packages/svelte/test/runtime/samples/class-shortcut-with-class/_config.js b/packages/svelte/test/runtime/samples/class-shortcut-with-class/_config.js new file mode 100644 index 0000000000..9b7d28e90f --- /dev/null +++ b/packages/svelte/test/runtime/samples/class-shortcut-with-class/_config.js @@ -0,0 +1,18 @@ +export default { + get props() { + return { foo: true, bar: true, myClass: 'one two' }; + }, + + html: '
', + + test({ assert, component, target }) { + component.foo = false; + + assert.htmlEqual( + target.innerHTML, + ` +
+ ` + ); + } +}; diff --git a/test/runtime/samples/class-shortcut-with-class/main.svelte b/packages/svelte/test/runtime/samples/class-shortcut-with-class/main.svelte similarity index 100% rename from test/runtime/samples/class-shortcut-with-class/main.svelte rename to packages/svelte/test/runtime/samples/class-shortcut-with-class/main.svelte diff --git a/packages/svelte/test/runtime/samples/class-shortcut-with-transition/_config.js b/packages/svelte/test/runtime/samples/class-shortcut-with-transition/_config.js new file mode 100644 index 0000000000..7c35a801f6 --- /dev/null +++ b/packages/svelte/test/runtime/samples/class-shortcut-with-transition/_config.js @@ -0,0 +1,29 @@ +export default { + get props() { + return { open: false, border: true }; + }, + html: '

foo

', + + test({ assert, component, target, raf }) { + component.open = true; + raf.tick(100); + assert.htmlEqual( + target.innerHTML, + '

foo

bar

' + ); + + component.open = false; + raf.tick(150); + assert.htmlEqual( + target.innerHTML, + '

foo

bar

' + ); + + component.open = true; + raf.tick(250); + assert.htmlEqual( + target.innerHTML, + '

foo

bar

' + ); + } +}; diff --git a/test/runtime/samples/class-shortcut-with-transition/main.svelte b/packages/svelte/test/runtime/samples/class-shortcut-with-transition/main.svelte similarity index 100% rename from test/runtime/samples/class-shortcut-with-transition/main.svelte rename to packages/svelte/test/runtime/samples/class-shortcut-with-transition/main.svelte diff --git a/packages/svelte/test/runtime/samples/class-shortcut/_config.js b/packages/svelte/test/runtime/samples/class-shortcut/_config.js new file mode 100644 index 0000000000..582f4180c7 --- /dev/null +++ b/packages/svelte/test/runtime/samples/class-shortcut/_config.js @@ -0,0 +1,18 @@ +export default { + get props() { + return { foo: true, bar: true }; + }, + + html: '
', + + test({ assert, component, target }) { + component.foo = false; + + assert.htmlEqual( + target.innerHTML, + ` +
+ ` + ); + } +}; diff --git a/test/runtime/samples/class-shortcut/main.svelte b/packages/svelte/test/runtime/samples/class-shortcut/main.svelte similarity index 100% rename from test/runtime/samples/class-shortcut/main.svelte rename to packages/svelte/test/runtime/samples/class-shortcut/main.svelte diff --git a/test/runtime/samples/class-with-attribute/_config.js b/packages/svelte/test/runtime/samples/class-with-attribute/_config.js similarity index 100% rename from test/runtime/samples/class-with-attribute/_config.js rename to packages/svelte/test/runtime/samples/class-with-attribute/_config.js diff --git a/test/runtime/samples/class-with-attribute/main.svelte b/packages/svelte/test/runtime/samples/class-with-attribute/main.svelte similarity index 100% rename from test/runtime/samples/class-with-attribute/main.svelte rename to packages/svelte/test/runtime/samples/class-with-attribute/main.svelte diff --git a/packages/svelte/test/runtime/samples/class-with-dynamic-attribute-and-spread/_config.js b/packages/svelte/test/runtime/samples/class-with-dynamic-attribute-and-spread/_config.js new file mode 100644 index 0000000000..4b9601926c --- /dev/null +++ b/packages/svelte/test/runtime/samples/class-with-dynamic-attribute-and-spread/_config.js @@ -0,0 +1,24 @@ +export default { + get props() { + return { + myClass: 'one two', + attributes: { role: 'button' } + }; + }, + + html: '
', + + test({ assert, component, target }) { + component.myClass = 'one'; + component.attributes = { + 'aria-label': 'Test' + }; + + assert.htmlEqual( + target.innerHTML, + ` +
+ ` + ); + } +}; diff --git a/test/runtime/samples/class-with-dynamic-attribute-and-spread/main.svelte b/packages/svelte/test/runtime/samples/class-with-dynamic-attribute-and-spread/main.svelte similarity index 100% rename from test/runtime/samples/class-with-dynamic-attribute-and-spread/main.svelte rename to packages/svelte/test/runtime/samples/class-with-dynamic-attribute-and-spread/main.svelte diff --git a/packages/svelte/test/runtime/samples/class-with-dynamic-attribute/_config.js b/packages/svelte/test/runtime/samples/class-with-dynamic-attribute/_config.js new file mode 100644 index 0000000000..38b6ebe82a --- /dev/null +++ b/packages/svelte/test/runtime/samples/class-with-dynamic-attribute/_config.js @@ -0,0 +1,18 @@ +export default { + get props() { + return { myClass: 'one two' }; + }, + + html: '
', + + test({ assert, component, target }) { + component.myClass = 'one'; + + assert.htmlEqual( + target.innerHTML, + ` +
+ ` + ); + } +}; diff --git a/test/runtime/samples/class-with-dynamic-attribute/main.svelte b/packages/svelte/test/runtime/samples/class-with-dynamic-attribute/main.svelte similarity index 100% rename from test/runtime/samples/class-with-dynamic-attribute/main.svelte rename to packages/svelte/test/runtime/samples/class-with-dynamic-attribute/main.svelte diff --git a/packages/svelte/test/runtime/samples/class-with-spread-and-bind/_config.js b/packages/svelte/test/runtime/samples/class-with-spread-and-bind/_config.js new file mode 100644 index 0000000000..b4cf6c88e0 --- /dev/null +++ b/packages/svelte/test/runtime/samples/class-with-spread-and-bind/_config.js @@ -0,0 +1,18 @@ +export default { + get props() { + return { primary: true }; + }, + + html: '
', + + test({ assert, component, target }) { + component.primary = true; + + assert.htmlEqual( + target.innerHTML, + ` +
+ ` + ); + } +}; diff --git a/test/runtime/samples/class-with-spread-and-bind/main.svelte b/packages/svelte/test/runtime/samples/class-with-spread-and-bind/main.svelte similarity index 100% rename from test/runtime/samples/class-with-spread-and-bind/main.svelte rename to packages/svelte/test/runtime/samples/class-with-spread-and-bind/main.svelte diff --git a/packages/svelte/test/runtime/samples/class-with-spread/_config.js b/packages/svelte/test/runtime/samples/class-with-spread/_config.js new file mode 100644 index 0000000000..a4d21c2cd5 --- /dev/null +++ b/packages/svelte/test/runtime/samples/class-with-spread/_config.js @@ -0,0 +1,24 @@ +export default { + get props() { + return { + myClass: 'one two', + attributes: { role: 'button' } + }; + }, + + html: '
', + + test({ assert, component, target }) { + component.myClass = 'one'; + component.attributes = { + 'aria-label': 'Test' + }; + + assert.htmlEqual( + target.innerHTML, + ` +
+ ` + ); + } +}; diff --git a/test/runtime/samples/class-with-spread/main.svelte b/packages/svelte/test/runtime/samples/class-with-spread/main.svelte similarity index 100% rename from test/runtime/samples/class-with-spread/main.svelte rename to packages/svelte/test/runtime/samples/class-with-spread/main.svelte diff --git a/test/runtime/samples/component-binding-accessors/Nested.svelte b/packages/svelte/test/runtime/samples/component-binding-accessors/Nested.svelte similarity index 100% rename from test/runtime/samples/component-binding-accessors/Nested.svelte rename to packages/svelte/test/runtime/samples/component-binding-accessors/Nested.svelte diff --git a/test/runtime/samples/component-binding-accessors/_config.js b/packages/svelte/test/runtime/samples/component-binding-accessors/_config.js similarity index 100% rename from test/runtime/samples/component-binding-accessors/_config.js rename to packages/svelte/test/runtime/samples/component-binding-accessors/_config.js diff --git a/test/runtime/samples/component-binding-accessors/main.svelte b/packages/svelte/test/runtime/samples/component-binding-accessors/main.svelte similarity index 100% rename from test/runtime/samples/component-binding-accessors/main.svelte rename to packages/svelte/test/runtime/samples/component-binding-accessors/main.svelte diff --git a/test/runtime/samples/component-binding-aliased/Widget.svelte b/packages/svelte/test/runtime/samples/component-binding-aliased/Widget.svelte similarity index 100% rename from test/runtime/samples/component-binding-aliased/Widget.svelte rename to packages/svelte/test/runtime/samples/component-binding-aliased/Widget.svelte diff --git a/test/runtime/samples/component-binding-aliased/_config.js b/packages/svelte/test/runtime/samples/component-binding-aliased/_config.js similarity index 100% rename from test/runtime/samples/component-binding-aliased/_config.js rename to packages/svelte/test/runtime/samples/component-binding-aliased/_config.js diff --git a/test/runtime/samples/component-binding-aliased/main.svelte b/packages/svelte/test/runtime/samples/component-binding-aliased/main.svelte similarity index 100% rename from test/runtime/samples/component-binding-aliased/main.svelte rename to packages/svelte/test/runtime/samples/component-binding-aliased/main.svelte diff --git a/test/runtime/samples/component-binding-blowback-b/Nested.svelte b/packages/svelte/test/runtime/samples/component-binding-blowback-b/Nested.svelte similarity index 100% rename from test/runtime/samples/component-binding-blowback-b/Nested.svelte rename to packages/svelte/test/runtime/samples/component-binding-blowback-b/Nested.svelte diff --git a/packages/svelte/test/runtime/samples/component-binding-blowback-b/_config.js b/packages/svelte/test/runtime/samples/component-binding-blowback-b/_config.js new file mode 100644 index 0000000000..7ece16b040 --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-binding-blowback-b/_config.js @@ -0,0 +1,36 @@ +export default { + skip_if_ssr: true, + + get props() { + return { count: 3 }; + }, + + html: ` + +
    +
  1. id-0: value is zero
  2. +
  3. id-1: value is one
  4. +
  5. id-2: value is two
  6. +
+ `, + + async test({ assert, target, window }) { + const input = target.querySelector('input'); + + input.value = 4; + await input.dispatchEvent(new window.Event('input')); + + assert.htmlEqual( + target.innerHTML, + ` + +
    +
  1. id-0: value is zero
  2. +
  3. id-1: value is one
  4. +
  5. id-2: value is two
  6. +
  7. id-3: value is three
  8. +
+ ` + ); + } +}; diff --git a/test/runtime/samples/component-binding-blowback-b/main.svelte b/packages/svelte/test/runtime/samples/component-binding-blowback-b/main.svelte similarity index 100% rename from test/runtime/samples/component-binding-blowback-b/main.svelte rename to packages/svelte/test/runtime/samples/component-binding-blowback-b/main.svelte diff --git a/test/runtime/samples/component-binding-blowback-c/Nested.svelte b/packages/svelte/test/runtime/samples/component-binding-blowback-c/Nested.svelte similarity index 100% rename from test/runtime/samples/component-binding-blowback-c/Nested.svelte rename to packages/svelte/test/runtime/samples/component-binding-blowback-c/Nested.svelte diff --git a/packages/svelte/test/runtime/samples/component-binding-blowback-c/_config.js b/packages/svelte/test/runtime/samples/component-binding-blowback-c/_config.js new file mode 100644 index 0000000000..acebc91527 --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-binding-blowback-c/_config.js @@ -0,0 +1,36 @@ +export default { + skip_if_ssr: true, + + get props() { + return { count: 3 }; + }, + + html: ` + +
    +
  1. id-2: value is two
  2. +
  3. id-1: value is one
  4. +
  5. id-0: value is zero
  6. +
+ `, + + async test({ assert, target, window }) { + const input = target.querySelector('input'); + + input.value = 4; + await input.dispatchEvent(new window.Event('input')); + + assert.htmlEqual( + target.innerHTML, + ` + +
    +
  1. id-3: value is three
  2. +
  3. id-2: value is two
  4. +
  5. id-1: value is one
  6. +
  7. id-0: value is zero
  8. +
+ ` + ); + } +}; diff --git a/test/runtime/samples/component-binding-blowback-c/main.svelte b/packages/svelte/test/runtime/samples/component-binding-blowback-c/main.svelte similarity index 100% rename from test/runtime/samples/component-binding-blowback-c/main.svelte rename to packages/svelte/test/runtime/samples/component-binding-blowback-c/main.svelte diff --git a/test/runtime/samples/component-binding-blowback-d/One.svelte b/packages/svelte/test/runtime/samples/component-binding-blowback-d/One.svelte similarity index 100% rename from test/runtime/samples/component-binding-blowback-d/One.svelte rename to packages/svelte/test/runtime/samples/component-binding-blowback-d/One.svelte diff --git a/test/runtime/samples/component-binding-blowback-d/Two.svelte b/packages/svelte/test/runtime/samples/component-binding-blowback-d/Two.svelte similarity index 100% rename from test/runtime/samples/component-binding-blowback-d/Two.svelte rename to packages/svelte/test/runtime/samples/component-binding-blowback-d/Two.svelte diff --git a/packages/svelte/test/runtime/samples/component-binding-blowback-d/_config.js b/packages/svelte/test/runtime/samples/component-binding-blowback-d/_config.js new file mode 100644 index 0000000000..a58b56c617 --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-binding-blowback-d/_config.js @@ -0,0 +1,26 @@ +export default { + html: ` + + + +

{"value":"0:0"}

+

+ `, + + async test({ assert, target, window }) { + const button = target.querySelectorAll('button')[1]; + + await button.dispatchEvent(new window.Event('click')); + + assert.htmlEqual( + target.innerHTML, + ` + + + +

{"value":"0:0"}

+

{"value":"1:0"}

+ ` + ); + } +}; diff --git a/test/runtime/samples/component-binding-blowback-d/main.svelte b/packages/svelte/test/runtime/samples/component-binding-blowback-d/main.svelte similarity index 100% rename from test/runtime/samples/component-binding-blowback-d/main.svelte rename to packages/svelte/test/runtime/samples/component-binding-blowback-d/main.svelte diff --git a/test/runtime/samples/component-binding-blowback-e/One.svelte b/packages/svelte/test/runtime/samples/component-binding-blowback-e/One.svelte similarity index 100% rename from test/runtime/samples/component-binding-blowback-e/One.svelte rename to packages/svelte/test/runtime/samples/component-binding-blowback-e/One.svelte diff --git a/test/runtime/samples/component-binding-blowback-e/Two.svelte b/packages/svelte/test/runtime/samples/component-binding-blowback-e/Two.svelte similarity index 100% rename from test/runtime/samples/component-binding-blowback-e/Two.svelte rename to packages/svelte/test/runtime/samples/component-binding-blowback-e/Two.svelte diff --git a/packages/svelte/test/runtime/samples/component-binding-blowback-e/_config.js b/packages/svelte/test/runtime/samples/component-binding-blowback-e/_config.js new file mode 100644 index 0000000000..32469da55a --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-binding-blowback-e/_config.js @@ -0,0 +1,26 @@ +export default { + html: ` + + + +

{"value":{"i":0,"j":0}}

+

+ `, + + async test({ assert, target, window }) { + const button = target.querySelectorAll('button')[1]; + + await button.dispatchEvent(new window.Event('click')); + + assert.htmlEqual( + target.innerHTML, + ` + + + +

{"value":{"i":0,"j":0}}

+

{"value":{"i":1,"j":0}}

+ ` + ); + } +}; diff --git a/test/runtime/samples/component-binding-blowback-e/main.svelte b/packages/svelte/test/runtime/samples/component-binding-blowback-e/main.svelte similarity index 100% rename from test/runtime/samples/component-binding-blowback-e/main.svelte rename to packages/svelte/test/runtime/samples/component-binding-blowback-e/main.svelte diff --git a/test/runtime/samples/component-binding-blowback-f/One.svelte b/packages/svelte/test/runtime/samples/component-binding-blowback-f/One.svelte similarity index 100% rename from test/runtime/samples/component-binding-blowback-f/One.svelte rename to packages/svelte/test/runtime/samples/component-binding-blowback-f/One.svelte diff --git a/test/runtime/samples/component-binding-blowback-f/Two.svelte b/packages/svelte/test/runtime/samples/component-binding-blowback-f/Two.svelte similarity index 100% rename from test/runtime/samples/component-binding-blowback-f/Two.svelte rename to packages/svelte/test/runtime/samples/component-binding-blowback-f/Two.svelte diff --git a/packages/svelte/test/runtime/samples/component-binding-blowback-f/_config.js b/packages/svelte/test/runtime/samples/component-binding-blowback-f/_config.js new file mode 100644 index 0000000000..cb3b5559fa --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-binding-blowback-f/_config.js @@ -0,0 +1,34 @@ +export default { + html: ` + + + +

{"value":{"i":0,"j":0}}

+

+ `, + + ssrHtml: ` + + + +

{}

+

+ `, + + async test({ assert, target, window }) { + const button = target.querySelectorAll('button')[1]; + + await button.dispatchEvent(new window.Event('click')); + + assert.htmlEqual( + target.innerHTML, + ` + + + +

{"value":{"i":0,"j":0}}

+

{"value":{"i":1,"j":0}}

+ ` + ); + } +}; diff --git a/test/runtime/samples/component-binding-blowback-f/main.svelte b/packages/svelte/test/runtime/samples/component-binding-blowback-f/main.svelte similarity index 100% rename from test/runtime/samples/component-binding-blowback-f/main.svelte rename to packages/svelte/test/runtime/samples/component-binding-blowback-f/main.svelte diff --git a/test/runtime/samples/component-binding-blowback/Widget.svelte b/packages/svelte/test/runtime/samples/component-binding-blowback/Widget.svelte similarity index 100% rename from test/runtime/samples/component-binding-blowback/Widget.svelte rename to packages/svelte/test/runtime/samples/component-binding-blowback/Widget.svelte diff --git a/test/runtime/samples/component-binding-blowback/_config.js b/packages/svelte/test/runtime/samples/component-binding-blowback/_config.js similarity index 100% rename from test/runtime/samples/component-binding-blowback/_config.js rename to packages/svelte/test/runtime/samples/component-binding-blowback/_config.js diff --git a/test/runtime/samples/component-binding-blowback/main.svelte b/packages/svelte/test/runtime/samples/component-binding-blowback/main.svelte similarity index 100% rename from test/runtime/samples/component-binding-blowback/main.svelte rename to packages/svelte/test/runtime/samples/component-binding-blowback/main.svelte diff --git a/test/runtime/samples/component-binding-computed/Nested.svelte b/packages/svelte/test/runtime/samples/component-binding-computed/Nested.svelte similarity index 100% rename from test/runtime/samples/component-binding-computed/Nested.svelte rename to packages/svelte/test/runtime/samples/component-binding-computed/Nested.svelte diff --git a/test/runtime/samples/component-binding-computed/_config.js b/packages/svelte/test/runtime/samples/component-binding-computed/_config.js similarity index 100% rename from test/runtime/samples/component-binding-computed/_config.js rename to packages/svelte/test/runtime/samples/component-binding-computed/_config.js diff --git a/test/runtime/samples/component-binding-computed/main.svelte b/packages/svelte/test/runtime/samples/component-binding-computed/main.svelte similarity index 100% rename from test/runtime/samples/component-binding-computed/main.svelte rename to packages/svelte/test/runtime/samples/component-binding-computed/main.svelte diff --git a/test/runtime/samples/component-binding-conditional-b/Bar.svelte b/packages/svelte/test/runtime/samples/component-binding-conditional-b/Bar.svelte similarity index 100% rename from test/runtime/samples/component-binding-conditional-b/Bar.svelte rename to packages/svelte/test/runtime/samples/component-binding-conditional-b/Bar.svelte diff --git a/test/runtime/samples/component-binding-conditional-b/Baz.svelte b/packages/svelte/test/runtime/samples/component-binding-conditional-b/Baz.svelte similarity index 100% rename from test/runtime/samples/component-binding-conditional-b/Baz.svelte rename to packages/svelte/test/runtime/samples/component-binding-conditional-b/Baz.svelte diff --git a/test/runtime/samples/component-binding-conditional-b/Foo.svelte b/packages/svelte/test/runtime/samples/component-binding-conditional-b/Foo.svelte similarity index 100% rename from test/runtime/samples/component-binding-conditional-b/Foo.svelte rename to packages/svelte/test/runtime/samples/component-binding-conditional-b/Foo.svelte diff --git a/packages/svelte/test/runtime/samples/component-binding-conditional-b/_config.js b/packages/svelte/test/runtime/samples/component-binding-conditional-b/_config.js new file mode 100644 index 0000000000..4718057cad --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-binding-conditional-b/_config.js @@ -0,0 +1,27 @@ +export default { + skip_if_ssr: true, // TODO delete this line, once binding works + + // This test fails, because the Bar y binding is activated before the + // Baz x binding, meaning that by the time Foo is created, we already + // have a value for y which Foo won't override. Easily worked around, + // probably impossible to 'fix', so this test is left here for info + // purposes but will probably remain skipped indefinitely. + skip: true, + + html: ` +

y: foo

+

y: foo

+ `, + + test({ assert, component, target }) { + component.x = false; + + assert.htmlEqual( + target.innerHTML, + ` +

y: foo

+

y: foo

+ ` + ); + } +}; diff --git a/test/runtime/samples/component-binding-conditional-b/main.svelte b/packages/svelte/test/runtime/samples/component-binding-conditional-b/main.svelte similarity index 100% rename from test/runtime/samples/component-binding-conditional-b/main.svelte rename to packages/svelte/test/runtime/samples/component-binding-conditional-b/main.svelte diff --git a/test/runtime/samples/component-binding-conditional/Bar.svelte b/packages/svelte/test/runtime/samples/component-binding-conditional/Bar.svelte similarity index 100% rename from test/runtime/samples/component-binding-conditional/Bar.svelte rename to packages/svelte/test/runtime/samples/component-binding-conditional/Bar.svelte diff --git a/test/runtime/samples/component-binding-conditional/Baz.svelte b/packages/svelte/test/runtime/samples/component-binding-conditional/Baz.svelte similarity index 100% rename from test/runtime/samples/component-binding-conditional/Baz.svelte rename to packages/svelte/test/runtime/samples/component-binding-conditional/Baz.svelte diff --git a/test/runtime/samples/component-binding-conditional/Foo.svelte b/packages/svelte/test/runtime/samples/component-binding-conditional/Foo.svelte similarity index 100% rename from test/runtime/samples/component-binding-conditional/Foo.svelte rename to packages/svelte/test/runtime/samples/component-binding-conditional/Foo.svelte diff --git a/packages/svelte/test/runtime/samples/component-binding-conditional/_config.js b/packages/svelte/test/runtime/samples/component-binding-conditional/_config.js new file mode 100644 index 0000000000..5862ca7f22 --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-binding-conditional/_config.js @@ -0,0 +1,20 @@ +export default { + skip_if_ssr: true, // TODO delete this line, once binding works + + html: ` +

y: bar

+

y: bar

+ `, + + test({ assert, component, target }) { + component.x = false; + + assert.htmlEqual( + target.innerHTML, + ` +

y: bar

+

y: bar

+ ` + ); + } +}; diff --git a/test/runtime/samples/component-binding-conditional/main.svelte b/packages/svelte/test/runtime/samples/component-binding-conditional/main.svelte similarity index 100% rename from test/runtime/samples/component-binding-conditional/main.svelte rename to packages/svelte/test/runtime/samples/component-binding-conditional/main.svelte diff --git a/test/runtime/samples/component-binding-deep-b/ComponentSelector.svelte b/packages/svelte/test/runtime/samples/component-binding-deep-b/ComponentSelector.svelte similarity index 100% rename from test/runtime/samples/component-binding-deep-b/ComponentSelector.svelte rename to packages/svelte/test/runtime/samples/component-binding-deep-b/ComponentSelector.svelte diff --git a/test/runtime/samples/component-binding-deep-b/Editor.svelte b/packages/svelte/test/runtime/samples/component-binding-deep-b/Editor.svelte similarity index 100% rename from test/runtime/samples/component-binding-deep-b/Editor.svelte rename to packages/svelte/test/runtime/samples/component-binding-deep-b/Editor.svelte diff --git a/packages/svelte/test/runtime/samples/component-binding-deep-b/_config.js b/packages/svelte/test/runtime/samples/component-binding-deep-b/_config.js new file mode 100644 index 0000000000..1b0e09f735 --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-binding-deep-b/_config.js @@ -0,0 +1,87 @@ +const components = [ + { + name: 'One', + source: 'one source' + }, + { + name: 'Two', + source: 'two source' + } +]; + +const selectedComponent = components[0]; + +export default { + skip: true, // doesn't reflect real-world bug, maybe a JSDOM quirk + + get props() { + return { components, selectedComponent }; + }, + + html: ` + + + + +
ONE SOURCE\nTWO SOURCE
+ `, + + async test({ assert, component, target, window }) { + const event = new window.MouseEvent('input'); + const textarea = target.querySelector('textarea'); + + textarea.value = 'one source changed'; + await textarea.dispatchEvent(event); + + assert.equal(component.compiled, 'ONE SOURCE CHANGED\nTWO SOURCE'); + assert.htmlEqual( + target.innerHTML, + ` + + + + +
ONE SOURCE CHANGED\nTWO SOURCE
+ ` + ); + + // const select = target.querySelector('select'); + // console.log(`select.options[0].selected`, select.options[0].selected) + // console.log(`select.options[1].selected`, select.options[1].selected) + // console.log(`select.value`, select.value) + // console.log(`select.__value`, select.__value) + // select.options[1].selected = true; + // console.log(`select.options[0].selected`, select.options[0].selected) + // console.log(`select.options[1].selected`, select.options[1].selected) + // console.log(`select.value`, select.value) + // console.log(`select.__value`, select.__value) + // select.dispatchEvent(new window.Event('change')); + component.selectedComponent = components[1]; + + assert.equal(textarea.value, 'two source'); + + textarea.value = 'two source changed'; + await textarea.dispatchEvent(event); + + assert.equal(component.compiled, 'ONE SOURCE CHANGED\nTWO SOURCE CHANGED'); + assert.htmlEqual( + target.innerHTML, + ` + + + + +
ONE SOURCE CHANGED\nTWO SOURCE CHANGED
+ ` + ); + } +}; diff --git a/test/runtime/samples/component-binding-deep-b/main.svelte b/packages/svelte/test/runtime/samples/component-binding-deep-b/main.svelte similarity index 100% rename from test/runtime/samples/component-binding-deep-b/main.svelte rename to packages/svelte/test/runtime/samples/component-binding-deep-b/main.svelte diff --git a/test/runtime/samples/component-binding-deep/Widget.svelte b/packages/svelte/test/runtime/samples/component-binding-deep/Widget.svelte similarity index 100% rename from test/runtime/samples/component-binding-deep/Widget.svelte rename to packages/svelte/test/runtime/samples/component-binding-deep/Widget.svelte diff --git a/packages/svelte/test/runtime/samples/component-binding-deep/_config.js b/packages/svelte/test/runtime/samples/component-binding-deep/_config.js new file mode 100644 index 0000000000..8103bfa2b8 --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-binding-deep/_config.js @@ -0,0 +1,28 @@ +export default { + html: ` + +

foo

+ `, + + ssrHtml: ` + +

foo

+ `, + + async test({ assert, component, target, window }) { + const event = new window.MouseEvent('input'); + const input = target.querySelector('input'); + + input.value = 'blah'; + await input.dispatchEvent(event); + + assert.deepEqual(component.deep, { name: 'blah' }); + assert.htmlEqual( + target.innerHTML, + ` + +

blah

+ ` + ); + } +}; diff --git a/test/runtime/samples/component-binding-deep/main.svelte b/packages/svelte/test/runtime/samples/component-binding-deep/main.svelte similarity index 100% rename from test/runtime/samples/component-binding-deep/main.svelte rename to packages/svelte/test/runtime/samples/component-binding-deep/main.svelte diff --git a/test/runtime/samples/component-binding-each-nested/Widget.svelte b/packages/svelte/test/runtime/samples/component-binding-each-nested/Widget.svelte similarity index 100% rename from test/runtime/samples/component-binding-each-nested/Widget.svelte rename to packages/svelte/test/runtime/samples/component-binding-each-nested/Widget.svelte diff --git a/packages/svelte/test/runtime/samples/component-binding-each-nested/_config.js b/packages/svelte/test/runtime/samples/component-binding-each-nested/_config.js new file mode 100644 index 0000000000..a4d0d12011 --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-binding-each-nested/_config.js @@ -0,0 +1,30 @@ +export default { + html: ` + +

foo, bar, baz

+ `, + + ssrHtml: ` + + + +

foo, bar, baz

+ `, + + async test({ assert, component, target, window }) { + const event = new window.MouseEvent('input'); + const inputs = target.querySelectorAll('input'); + + inputs[0].value = 'blah'; + await inputs[0].dispatchEvent(event); + + assert.deepEqual(component.a, [{ name: 'blah' }, { name: 'bar' }, { name: 'baz' }]); + assert.htmlEqual( + target.innerHTML, + ` + +

blah, bar, baz

+ ` + ); + } +}; diff --git a/test/runtime/samples/component-binding-each-nested/main.svelte b/packages/svelte/test/runtime/samples/component-binding-each-nested/main.svelte similarity index 100% rename from test/runtime/samples/component-binding-each-nested/main.svelte rename to packages/svelte/test/runtime/samples/component-binding-each-nested/main.svelte diff --git a/test/runtime/samples/component-binding-each-object/Widget.svelte b/packages/svelte/test/runtime/samples/component-binding-each-object/Widget.svelte similarity index 100% rename from test/runtime/samples/component-binding-each-object/Widget.svelte rename to packages/svelte/test/runtime/samples/component-binding-each-object/Widget.svelte diff --git a/packages/svelte/test/runtime/samples/component-binding-each-object/_config.js b/packages/svelte/test/runtime/samples/component-binding-each-object/_config.js new file mode 100644 index 0000000000..b067cd9d50 --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-binding-each-object/_config.js @@ -0,0 +1,22 @@ +export default { + get props() { + return { + a: [{ id: 'foo' }, { id: 'bar' }, { id: 'baz' }] + }; + }, + + html: ` + foobarbaz + `, + + test({ assert, component, target }) { + component.a = [{ id: 'yep' }, { id: 'nope' }]; + + assert.htmlEqual( + target.innerHTML, + ` + yepnope + ` + ); + } +}; diff --git a/test/runtime/samples/component-binding-each-object/main.svelte b/packages/svelte/test/runtime/samples/component-binding-each-object/main.svelte similarity index 100% rename from test/runtime/samples/component-binding-each-object/main.svelte rename to packages/svelte/test/runtime/samples/component-binding-each-object/main.svelte diff --git a/test/runtime/samples/component-binding-each-remount-keyed/Child.svelte b/packages/svelte/test/runtime/samples/component-binding-each-remount-keyed/Child.svelte similarity index 100% rename from test/runtime/samples/component-binding-each-remount-keyed/Child.svelte rename to packages/svelte/test/runtime/samples/component-binding-each-remount-keyed/Child.svelte diff --git a/test/runtime/samples/component-binding-each-remount-keyed/InnerChild.svelte b/packages/svelte/test/runtime/samples/component-binding-each-remount-keyed/InnerChild.svelte similarity index 100% rename from test/runtime/samples/component-binding-each-remount-keyed/InnerChild.svelte rename to packages/svelte/test/runtime/samples/component-binding-each-remount-keyed/InnerChild.svelte diff --git a/packages/svelte/test/runtime/samples/component-binding-each-remount-keyed/_config.js b/packages/svelte/test/runtime/samples/component-binding-each-remount-keyed/_config.js new file mode 100644 index 0000000000..a0d2a60173 --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-binding-each-remount-keyed/_config.js @@ -0,0 +1,56 @@ +export default { + html: ` +
+ 0 + 1 +
+
+ 0 + 1 +
+
+ 0 + 1 +
+ `, + + ssrHtml: ` +
+ 0 + 1 + 2 +
+
+ 0 + 1 + 2 +
+
+ 0 + 1 + 2 +
+ `, + + async test({ assert, component, target }) { + await component.done; + assert.equal(component.getCounter(), 13); + assert.htmlEqual( + target.innerHTML, + ` +
+ 0 + 1 +
+
+ 0 + 1 +
+
+ 0 + 1 +
+ ` + ); + } +}; diff --git a/test/runtime/samples/component-binding-each-remount-keyed/main.svelte b/packages/svelte/test/runtime/samples/component-binding-each-remount-keyed/main.svelte similarity index 100% rename from test/runtime/samples/component-binding-each-remount-keyed/main.svelte rename to packages/svelte/test/runtime/samples/component-binding-each-remount-keyed/main.svelte diff --git a/test/runtime/samples/component-binding-each-remount-unkeyed/Child.svelte b/packages/svelte/test/runtime/samples/component-binding-each-remount-unkeyed/Child.svelte similarity index 100% rename from test/runtime/samples/component-binding-each-remount-unkeyed/Child.svelte rename to packages/svelte/test/runtime/samples/component-binding-each-remount-unkeyed/Child.svelte diff --git a/test/runtime/samples/component-binding-each-remount-unkeyed/InnerChild.svelte b/packages/svelte/test/runtime/samples/component-binding-each-remount-unkeyed/InnerChild.svelte similarity index 100% rename from test/runtime/samples/component-binding-each-remount-unkeyed/InnerChild.svelte rename to packages/svelte/test/runtime/samples/component-binding-each-remount-unkeyed/InnerChild.svelte diff --git a/packages/svelte/test/runtime/samples/component-binding-each-remount-unkeyed/_config.js b/packages/svelte/test/runtime/samples/component-binding-each-remount-unkeyed/_config.js new file mode 100644 index 0000000000..a0d2a60173 --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-binding-each-remount-unkeyed/_config.js @@ -0,0 +1,56 @@ +export default { + html: ` +
+ 0 + 1 +
+
+ 0 + 1 +
+
+ 0 + 1 +
+ `, + + ssrHtml: ` +
+ 0 + 1 + 2 +
+
+ 0 + 1 + 2 +
+
+ 0 + 1 + 2 +
+ `, + + async test({ assert, component, target }) { + await component.done; + assert.equal(component.getCounter(), 13); + assert.htmlEqual( + target.innerHTML, + ` +
+ 0 + 1 +
+
+ 0 + 1 +
+
+ 0 + 1 +
+ ` + ); + } +}; diff --git a/test/runtime/samples/component-binding-each-remount-unkeyed/main.svelte b/packages/svelte/test/runtime/samples/component-binding-each-remount-unkeyed/main.svelte similarity index 100% rename from test/runtime/samples/component-binding-each-remount-unkeyed/main.svelte rename to packages/svelte/test/runtime/samples/component-binding-each-remount-unkeyed/main.svelte diff --git a/test/runtime/samples/component-binding-each/Widget.svelte b/packages/svelte/test/runtime/samples/component-binding-each/Widget.svelte similarity index 100% rename from test/runtime/samples/component-binding-each/Widget.svelte rename to packages/svelte/test/runtime/samples/component-binding-each/Widget.svelte diff --git a/packages/svelte/test/runtime/samples/component-binding-each/_config.js b/packages/svelte/test/runtime/samples/component-binding-each/_config.js new file mode 100644 index 0000000000..51dfab3d93 --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-binding-each/_config.js @@ -0,0 +1,30 @@ +export default { + html: ` + +

foo, bar, baz

+ `, + + ssrHtml: ` + + + +

foo, bar, baz

+ `, + + async test({ assert, component, target, window }) { + const event = new window.MouseEvent('input'); + const inputs = target.querySelectorAll('input'); + + inputs[0].value = 'blah'; + await inputs[0].dispatchEvent(event); + + assert.deepEqual(component.a, ['blah', 'bar', 'baz']); + assert.htmlEqual( + target.innerHTML, + ` + +

blah, bar, baz

+ ` + ); + } +}; diff --git a/test/runtime/samples/component-binding-each/main.svelte b/packages/svelte/test/runtime/samples/component-binding-each/main.svelte similarity index 100% rename from test/runtime/samples/component-binding-each/main.svelte rename to packages/svelte/test/runtime/samples/component-binding-each/main.svelte diff --git a/test/runtime/samples/component-binding-infinite-loop/A.svelte b/packages/svelte/test/runtime/samples/component-binding-infinite-loop/A.svelte similarity index 100% rename from test/runtime/samples/component-binding-infinite-loop/A.svelte rename to packages/svelte/test/runtime/samples/component-binding-infinite-loop/A.svelte diff --git a/test/runtime/samples/component-binding-infinite-loop/B.svelte b/packages/svelte/test/runtime/samples/component-binding-infinite-loop/B.svelte similarity index 100% rename from test/runtime/samples/component-binding-infinite-loop/B.svelte rename to packages/svelte/test/runtime/samples/component-binding-infinite-loop/B.svelte diff --git a/test/runtime/samples/component-binding-infinite-loop/C.svelte b/packages/svelte/test/runtime/samples/component-binding-infinite-loop/C.svelte similarity index 100% rename from test/runtime/samples/component-binding-infinite-loop/C.svelte rename to packages/svelte/test/runtime/samples/component-binding-infinite-loop/C.svelte diff --git a/packages/svelte/test/runtime/samples/component-binding-infinite-loop/_config.js b/packages/svelte/test/runtime/samples/component-binding-infinite-loop/_config.js new file mode 100644 index 0000000000..71f9ccf1b9 --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-binding-infinite-loop/_config.js @@ -0,0 +1,96 @@ +export default { + html: ` +

1

+

2

+

3

+

2

+

1

+ +

1

+

2

+

3

+

2

+

1

+ +

1

+

2

+

3

+

2

+

1

+ +

1

+

2

+

3

+

2

+

1

+ `, + + async test({ assert, component, target, window }) { + const click = new window.MouseEvent('click'); + const spans = target.querySelectorAll('span'); + + await spans[0].dispatchEvent(click); + + assert.equal(component.currentIdentifier, 1); + assert.htmlEqual( + target.innerHTML, + ` +

1

+

2

+

3

+

2

+

1

+ +

1

+

2

+

3

+

2

+

1

+ +

1

+

2

+

3

+

2

+

1

+ +

1

+

2

+

3

+

2

+

1

+ ` + ); + + await spans[0].dispatchEvent(click); + + assert.equal(component.currentIdentifier, null); + assert.htmlEqual( + target.innerHTML, + ` +

1

+

2

+

3

+

2

+

1

+ +

1

+

2

+

3

+

2

+

1

+ +

1

+

2

+

3

+

2

+

1

+ +

1

+

2

+

3

+

2

+

1

+ ` + ); + } +}; diff --git a/test/runtime/samples/component-binding-infinite-loop/main.svelte b/packages/svelte/test/runtime/samples/component-binding-infinite-loop/main.svelte similarity index 100% rename from test/runtime/samples/component-binding-infinite-loop/main.svelte rename to packages/svelte/test/runtime/samples/component-binding-infinite-loop/main.svelte diff --git a/test/runtime/samples/component-binding-nested/Bar.svelte b/packages/svelte/test/runtime/samples/component-binding-nested/Bar.svelte similarity index 100% rename from test/runtime/samples/component-binding-nested/Bar.svelte rename to packages/svelte/test/runtime/samples/component-binding-nested/Bar.svelte diff --git a/test/runtime/samples/component-binding-nested/Baz.svelte b/packages/svelte/test/runtime/samples/component-binding-nested/Baz.svelte similarity index 100% rename from test/runtime/samples/component-binding-nested/Baz.svelte rename to packages/svelte/test/runtime/samples/component-binding-nested/Baz.svelte diff --git a/test/runtime/samples/component-binding-nested/Foo.svelte b/packages/svelte/test/runtime/samples/component-binding-nested/Foo.svelte similarity index 100% rename from test/runtime/samples/component-binding-nested/Foo.svelte rename to packages/svelte/test/runtime/samples/component-binding-nested/Foo.svelte diff --git a/packages/svelte/test/runtime/samples/component-binding-nested/_config.js b/packages/svelte/test/runtime/samples/component-binding-nested/_config.js new file mode 100644 index 0000000000..268fbb9437 --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-binding-nested/_config.js @@ -0,0 +1,70 @@ +export default { + skip_if_ssr: true, // TODO delete this line, once binding works + + get props() { + return { x: 'initial' }; + }, + + html: ` +

x: initial

+ +

foo x: initial

+ +

bar x: initial

+ +

baz x: initial

+ `, + + async test({ assert, component, target, window }) { + const click = new window.MouseEvent('click'); + const buttons = [...target.querySelectorAll('button')]; + + await buttons[0].dispatchEvent(click); + + assert.equal(component.x, 'p'); + assert.htmlEqual( + target.innerHTML, + ` +

x: p

+ +

foo x: p

+ +

bar x: p

+ +

baz x: p

+ ` + ); + + await buttons[1].dispatchEvent(click); + + assert.equal(component.x, 'q'); + assert.htmlEqual( + target.innerHTML, + ` +

x: q

+ +

foo x: q

+ +

bar x: q

+ +

baz x: q

+ ` + ); + + await buttons[2].dispatchEvent(click); + + assert.equal(component.x, 'r'); + assert.htmlEqual( + target.innerHTML, + ` +

x: r

+ +

foo x: r

+ +

bar x: r

+ +

baz x: r

+ ` + ); + } +}; diff --git a/test/runtime/samples/component-binding-nested/main.svelte b/packages/svelte/test/runtime/samples/component-binding-nested/main.svelte similarity index 100% rename from test/runtime/samples/component-binding-nested/main.svelte rename to packages/svelte/test/runtime/samples/component-binding-nested/main.svelte diff --git a/test/runtime/samples/component-binding-non-leaky/Counter.svelte b/packages/svelte/test/runtime/samples/component-binding-non-leaky/Counter.svelte similarity index 100% rename from test/runtime/samples/component-binding-non-leaky/Counter.svelte rename to packages/svelte/test/runtime/samples/component-binding-non-leaky/Counter.svelte diff --git a/packages/svelte/test/runtime/samples/component-binding-non-leaky/_config.js b/packages/svelte/test/runtime/samples/component-binding-non-leaky/_config.js new file mode 100644 index 0000000000..3fcf6bf34d --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-binding-non-leaky/_config.js @@ -0,0 +1,33 @@ +export default { + html: ` + +

count: undefined

+ `, + + async test({ assert, component, target, window }) { + const click = new window.MouseEvent('click'); + const button = target.querySelector('button'); + + await button.dispatchEvent(click); + + assert.equal(component.x, undefined); + assert.htmlEqual( + target.innerHTML, + ` + +

count: undefined

+ ` + ); + + await button.dispatchEvent(click); + + assert.equal(component.x, undefined); + assert.htmlEqual( + target.innerHTML, + ` + +

count: undefined

+ ` + ); + } +}; diff --git a/test/runtime/samples/component-binding-non-leaky/main.svelte b/packages/svelte/test/runtime/samples/component-binding-non-leaky/main.svelte similarity index 100% rename from test/runtime/samples/component-binding-non-leaky/main.svelte rename to packages/svelte/test/runtime/samples/component-binding-non-leaky/main.svelte diff --git a/test/runtime/samples/component-binding-onMount/Mount.svelte b/packages/svelte/test/runtime/samples/component-binding-onMount/Mount.svelte similarity index 100% rename from test/runtime/samples/component-binding-onMount/Mount.svelte rename to packages/svelte/test/runtime/samples/component-binding-onMount/Mount.svelte diff --git a/packages/svelte/test/runtime/samples/component-binding-onMount/_config.js b/packages/svelte/test/runtime/samples/component-binding-onMount/_config.js new file mode 100644 index 0000000000..e831e6e573 --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-binding-onMount/_config.js @@ -0,0 +1,14 @@ +export default { + async test({ assert, target }) { + assert.htmlEqual( + target.innerHTML, + ` +
+

+ Bound? true +

+
+ ` + ); + } +}; diff --git a/test/runtime/samples/component-binding-onMount/main.svelte b/packages/svelte/test/runtime/samples/component-binding-onMount/main.svelte similarity index 100% rename from test/runtime/samples/component-binding-onMount/main.svelte rename to packages/svelte/test/runtime/samples/component-binding-onMount/main.svelte diff --git a/test/runtime/samples/component-binding-parent-supercedes-child-b/Bar.svelte b/packages/svelte/test/runtime/samples/component-binding-parent-supercedes-child-b/Bar.svelte similarity index 100% rename from test/runtime/samples/component-binding-parent-supercedes-child-b/Bar.svelte rename to packages/svelte/test/runtime/samples/component-binding-parent-supercedes-child-b/Bar.svelte diff --git a/test/runtime/samples/component-binding-parent-supercedes-child-b/Foo.svelte b/packages/svelte/test/runtime/samples/component-binding-parent-supercedes-child-b/Foo.svelte similarity index 100% rename from test/runtime/samples/component-binding-parent-supercedes-child-b/Foo.svelte rename to packages/svelte/test/runtime/samples/component-binding-parent-supercedes-child-b/Foo.svelte diff --git a/packages/svelte/test/runtime/samples/component-binding-parent-supercedes-child-b/_config.js b/packages/svelte/test/runtime/samples/component-binding-parent-supercedes-child-b/_config.js new file mode 100644 index 0000000000..952b414ead --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-binding-parent-supercedes-child-b/_config.js @@ -0,0 +1,40 @@ +export default { + html: ` +

Foo: yes

+

x in parent: yes

+ `, + + async test({ assert, component, target }) { + component.a = false; + + assert.htmlEqual( + target.innerHTML, + ` +

Bar: yes

+

x in parent: yes

+ ` + ); + + component.a = true; + assert.equal(component.x, 'yes'); + component.x = undefined; + + assert.htmlEqual( + target.innerHTML, + ` +

Foo: undefined

+

x in parent: undefined

+ ` + ); + + component.a = false; + + assert.htmlEqual( + target.innerHTML, + ` +

Bar: no

+

x in parent: no

+ ` + ); + } +}; diff --git a/test/runtime/samples/component-binding-parent-supercedes-child-b/main.svelte b/packages/svelte/test/runtime/samples/component-binding-parent-supercedes-child-b/main.svelte similarity index 100% rename from test/runtime/samples/component-binding-parent-supercedes-child-b/main.svelte rename to packages/svelte/test/runtime/samples/component-binding-parent-supercedes-child-b/main.svelte diff --git a/test/runtime/samples/component-binding-parent-supercedes-child-c/Bar.svelte b/packages/svelte/test/runtime/samples/component-binding-parent-supercedes-child-c/Bar.svelte similarity index 100% rename from test/runtime/samples/component-binding-parent-supercedes-child-c/Bar.svelte rename to packages/svelte/test/runtime/samples/component-binding-parent-supercedes-child-c/Bar.svelte diff --git a/test/runtime/samples/component-binding-parent-supercedes-child-c/Foo.svelte b/packages/svelte/test/runtime/samples/component-binding-parent-supercedes-child-c/Foo.svelte similarity index 100% rename from test/runtime/samples/component-binding-parent-supercedes-child-c/Foo.svelte rename to packages/svelte/test/runtime/samples/component-binding-parent-supercedes-child-c/Foo.svelte diff --git a/packages/svelte/test/runtime/samples/component-binding-parent-supercedes-child-c/_config.js b/packages/svelte/test/runtime/samples/component-binding-parent-supercedes-child-c/_config.js new file mode 100644 index 0000000000..952b414ead --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-binding-parent-supercedes-child-c/_config.js @@ -0,0 +1,40 @@ +export default { + html: ` +

Foo: yes

+

x in parent: yes

+ `, + + async test({ assert, component, target }) { + component.a = false; + + assert.htmlEqual( + target.innerHTML, + ` +

Bar: yes

+

x in parent: yes

+ ` + ); + + component.a = true; + assert.equal(component.x, 'yes'); + component.x = undefined; + + assert.htmlEqual( + target.innerHTML, + ` +

Foo: undefined

+

x in parent: undefined

+ ` + ); + + component.a = false; + + assert.htmlEqual( + target.innerHTML, + ` +

Bar: no

+

x in parent: no

+ ` + ); + } +}; diff --git a/test/runtime/samples/component-binding-parent-supercedes-child-c/main.svelte b/packages/svelte/test/runtime/samples/component-binding-parent-supercedes-child-c/main.svelte similarity index 100% rename from test/runtime/samples/component-binding-parent-supercedes-child-c/main.svelte rename to packages/svelte/test/runtime/samples/component-binding-parent-supercedes-child-c/main.svelte diff --git a/test/runtime/samples/component-binding-parent-supercedes-child/Counter.svelte b/packages/svelte/test/runtime/samples/component-binding-parent-supercedes-child/Counter.svelte similarity index 100% rename from test/runtime/samples/component-binding-parent-supercedes-child/Counter.svelte rename to packages/svelte/test/runtime/samples/component-binding-parent-supercedes-child/Counter.svelte diff --git a/packages/svelte/test/runtime/samples/component-binding-parent-supercedes-child/_config.js b/packages/svelte/test/runtime/samples/component-binding-parent-supercedes-child/_config.js new file mode 100644 index 0000000000..e4dfd0664b --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-binding-parent-supercedes-child/_config.js @@ -0,0 +1,33 @@ +export default { + html: ` + +

count: 10

+ `, + + async test({ assert, component, target, window }) { + const click = new window.MouseEvent('click'); + const button = target.querySelector('button'); + + await button.dispatchEvent(click); + + assert.equal(component.x, 11); + assert.htmlEqual( + target.innerHTML, + ` + +

count: 11

+ ` + ); + + await button.dispatchEvent(click); + + assert.equal(component.x, 12); + assert.htmlEqual( + target.innerHTML, + ` + +

count: 12

+ ` + ); + } +}; diff --git a/test/runtime/samples/component-binding-parent-supercedes-child/main.svelte b/packages/svelte/test/runtime/samples/component-binding-parent-supercedes-child/main.svelte similarity index 100% rename from test/runtime/samples/component-binding-parent-supercedes-child/main.svelte rename to packages/svelte/test/runtime/samples/component-binding-parent-supercedes-child/main.svelte diff --git a/test/runtime/samples/component-binding-private-state/Bar.svelte b/packages/svelte/test/runtime/samples/component-binding-private-state/Bar.svelte similarity index 100% rename from test/runtime/samples/component-binding-private-state/Bar.svelte rename to packages/svelte/test/runtime/samples/component-binding-private-state/Bar.svelte diff --git a/test/runtime/samples/component-binding-private-state/Foo.svelte b/packages/svelte/test/runtime/samples/component-binding-private-state/Foo.svelte similarity index 100% rename from test/runtime/samples/component-binding-private-state/Foo.svelte rename to packages/svelte/test/runtime/samples/component-binding-private-state/Foo.svelte diff --git a/packages/svelte/test/runtime/samples/component-binding-private-state/_config.js b/packages/svelte/test/runtime/samples/component-binding-private-state/_config.js new file mode 100644 index 0000000000..b81952d8a0 --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-binding-private-state/_config.js @@ -0,0 +1,40 @@ +export default { + html: ` +

Foo: yes

+

x in parent: undefined

+ `, + + async test({ assert, component, target }) { + component.a = false; + + assert.htmlEqual( + target.innerHTML, + ` +

Bar: no

+

x in parent: undefined

+ ` + ); + + component.a = true; + assert.equal(component.x, undefined); + component.x = 'maybe'; + + assert.htmlEqual( + target.innerHTML, + ` +

Foo: yes

+

x in parent: maybe

+ ` + ); + + component.a = false; + + assert.htmlEqual( + target.innerHTML, + ` +

Bar: no

+

x in parent: maybe

+ ` + ); + } +}; diff --git a/test/runtime/samples/component-binding-private-state/main.svelte b/packages/svelte/test/runtime/samples/component-binding-private-state/main.svelte similarity index 100% rename from test/runtime/samples/component-binding-private-state/main.svelte rename to packages/svelte/test/runtime/samples/component-binding-private-state/main.svelte diff --git a/test/runtime/samples/component-binding-reactive-property-no-extra-call/Component.svelte b/packages/svelte/test/runtime/samples/component-binding-reactive-property-no-extra-call/Component.svelte similarity index 100% rename from test/runtime/samples/component-binding-reactive-property-no-extra-call/Component.svelte rename to packages/svelte/test/runtime/samples/component-binding-reactive-property-no-extra-call/Component.svelte diff --git a/test/runtime/samples/component-binding-reactive-property-no-extra-call/_config.js b/packages/svelte/test/runtime/samples/component-binding-reactive-property-no-extra-call/_config.js similarity index 100% rename from test/runtime/samples/component-binding-reactive-property-no-extra-call/_config.js rename to packages/svelte/test/runtime/samples/component-binding-reactive-property-no-extra-call/_config.js diff --git a/test/runtime/samples/component-binding-reactive-property-no-extra-call/main.svelte b/packages/svelte/test/runtime/samples/component-binding-reactive-property-no-extra-call/main.svelte similarity index 100% rename from test/runtime/samples/component-binding-reactive-property-no-extra-call/main.svelte rename to packages/svelte/test/runtime/samples/component-binding-reactive-property-no-extra-call/main.svelte diff --git a/test/runtime/samples/component-binding-reactive-statement/Button.svelte b/packages/svelte/test/runtime/samples/component-binding-reactive-statement/Button.svelte similarity index 100% rename from test/runtime/samples/component-binding-reactive-statement/Button.svelte rename to packages/svelte/test/runtime/samples/component-binding-reactive-statement/Button.svelte diff --git a/packages/svelte/test/runtime/samples/component-binding-reactive-statement/_config.js b/packages/svelte/test/runtime/samples/component-binding-reactive-statement/_config.js new file mode 100644 index 0000000000..a447eb4e2c --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-binding-reactive-statement/_config.js @@ -0,0 +1,50 @@ +export default { + html: ` + + + `, + + async test({ assert, target, window }) { + const event = new window.MouseEvent('click'); + + const buttons = target.querySelectorAll('button'); + + await buttons[0].dispatchEvent(event); + assert.htmlEqual( + target.innerHTML, + ` + + + ` + ); + + await buttons[1].dispatchEvent(event); + assert.htmlEqual( + target.innerHTML, + ` + + + ` + ); + + // reactive update, reset to 2 + await buttons[0].dispatchEvent(event); + assert.htmlEqual( + target.innerHTML, + ` + + + ` + ); + + // bound to main, reset to 2 + await buttons[1].dispatchEvent(event); + assert.htmlEqual( + target.innerHTML, + ` + + + ` + ); + } +}; diff --git a/test/runtime/samples/component-binding-reactive-statement/main.svelte b/packages/svelte/test/runtime/samples/component-binding-reactive-statement/main.svelte similarity index 100% rename from test/runtime/samples/component-binding-reactive-statement/main.svelte rename to packages/svelte/test/runtime/samples/component-binding-reactive-statement/main.svelte diff --git a/test/runtime/samples/component-binding-self-destroying/Nested.svelte b/packages/svelte/test/runtime/samples/component-binding-self-destroying/Nested.svelte similarity index 100% rename from test/runtime/samples/component-binding-self-destroying/Nested.svelte rename to packages/svelte/test/runtime/samples/component-binding-self-destroying/Nested.svelte diff --git a/packages/svelte/test/runtime/samples/component-binding-self-destroying/_config.js b/packages/svelte/test/runtime/samples/component-binding-self-destroying/_config.js new file mode 100644 index 0000000000..6d72cd5805 --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-binding-self-destroying/_config.js @@ -0,0 +1,33 @@ +export default { + get props() { + return { show: true }; + }, + + html: ` + + `, + + async test({ assert, component, target, window }) { + const click = new window.MouseEvent('click'); + + await target.querySelector('button').dispatchEvent(click); + + assert.equal(component.show, false); + assert.htmlEqual( + target.innerHTML, + ` + + ` + ); + + await target.querySelector('button').dispatchEvent(click); + + assert.equal(component.show, true); + assert.htmlEqual( + target.innerHTML, + ` + + ` + ); + } +}; diff --git a/test/runtime/samples/component-binding-self-destroying/main.svelte b/packages/svelte/test/runtime/samples/component-binding-self-destroying/main.svelte similarity index 100% rename from test/runtime/samples/component-binding-self-destroying/main.svelte rename to packages/svelte/test/runtime/samples/component-binding-self-destroying/main.svelte diff --git a/test/runtime/samples/component-binding-store/Input.svelte b/packages/svelte/test/runtime/samples/component-binding-store/Input.svelte similarity index 100% rename from test/runtime/samples/component-binding-store/Input.svelte rename to packages/svelte/test/runtime/samples/component-binding-store/Input.svelte diff --git a/test/runtime/samples/component-binding-store/_config.js b/packages/svelte/test/runtime/samples/component-binding-store/_config.js similarity index 100% rename from test/runtime/samples/component-binding-store/_config.js rename to packages/svelte/test/runtime/samples/component-binding-store/_config.js diff --git a/test/runtime/samples/component-binding-store/main.svelte b/packages/svelte/test/runtime/samples/component-binding-store/main.svelte similarity index 100% rename from test/runtime/samples/component-binding-store/main.svelte rename to packages/svelte/test/runtime/samples/component-binding-store/main.svelte diff --git a/test/runtime/samples/component-binding/Counter.svelte b/packages/svelte/test/runtime/samples/component-binding/Counter.svelte similarity index 100% rename from test/runtime/samples/component-binding/Counter.svelte rename to packages/svelte/test/runtime/samples/component-binding/Counter.svelte diff --git a/packages/svelte/test/runtime/samples/component-binding/_config.js b/packages/svelte/test/runtime/samples/component-binding/_config.js new file mode 100644 index 0000000000..711bb7a4b8 --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-binding/_config.js @@ -0,0 +1,35 @@ +export default { + skip_if_ssr: true, // TODO delete this line, once binding works + + html: ` + +

count: 0

+ `, + + async test({ assert, component, target, window }) { + const click = new window.MouseEvent('click'); + const button = target.querySelector('button'); + + await button.dispatchEvent(click); + + assert.equal(component.x, 1); + assert.htmlEqual( + target.innerHTML, + ` + +

count: 1

+ ` + ); + + await button.dispatchEvent(click); + + assert.equal(component.x, 2); + assert.htmlEqual( + target.innerHTML, + ` + +

count: 2

+ ` + ); + } +}; diff --git a/test/runtime/samples/component-binding/main.svelte b/packages/svelte/test/runtime/samples/component-binding/main.svelte similarity index 100% rename from test/runtime/samples/component-binding/main.svelte rename to packages/svelte/test/runtime/samples/component-binding/main.svelte diff --git a/test/runtime/samples/component-data-dynamic-late/Widget.svelte b/packages/svelte/test/runtime/samples/component-data-dynamic-late/Widget.svelte similarity index 100% rename from test/runtime/samples/component-data-dynamic-late/Widget.svelte rename to packages/svelte/test/runtime/samples/component-data-dynamic-late/Widget.svelte diff --git a/packages/svelte/test/runtime/samples/component-data-dynamic-late/_config.js b/packages/svelte/test/runtime/samples/component-data-dynamic-late/_config.js new file mode 100644 index 0000000000..865f8bf812 --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-data-dynamic-late/_config.js @@ -0,0 +1,13 @@ +export default { + test({ assert, component, target }) { + component.q = 42; + component.foo = true; + + assert.htmlEqual( + target.innerHTML, + ` +

42

+ ` + ); + } +}; diff --git a/test/runtime/samples/component-data-dynamic-late/main.svelte b/packages/svelte/test/runtime/samples/component-data-dynamic-late/main.svelte similarity index 100% rename from test/runtime/samples/component-data-dynamic-late/main.svelte rename to packages/svelte/test/runtime/samples/component-data-dynamic-late/main.svelte diff --git a/test/runtime/samples/component-data-dynamic-shorthand/Widget.svelte b/packages/svelte/test/runtime/samples/component-data-dynamic-shorthand/Widget.svelte similarity index 100% rename from test/runtime/samples/component-data-dynamic-shorthand/Widget.svelte rename to packages/svelte/test/runtime/samples/component-data-dynamic-shorthand/Widget.svelte diff --git a/packages/svelte/test/runtime/samples/component-data-dynamic-shorthand/_config.js b/packages/svelte/test/runtime/samples/component-data-dynamic-shorthand/_config.js new file mode 100644 index 0000000000..92d9ccb644 --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-data-dynamic-shorthand/_config.js @@ -0,0 +1,13 @@ +export default { + get props() { + return { foo: 42 }; + }, + + html: '

foo: 42

', + + test({ assert, component, target }) { + component.foo = 99; + + assert.equal(target.innerHTML, '

foo: 99

'); + } +}; diff --git a/test/runtime/samples/component-data-dynamic-shorthand/main.svelte b/packages/svelte/test/runtime/samples/component-data-dynamic-shorthand/main.svelte similarity index 100% rename from test/runtime/samples/component-data-dynamic-shorthand/main.svelte rename to packages/svelte/test/runtime/samples/component-data-dynamic-shorthand/main.svelte diff --git a/test/runtime/samples/component-data-dynamic/Widget.svelte b/packages/svelte/test/runtime/samples/component-data-dynamic/Widget.svelte similarity index 100% rename from test/runtime/samples/component-data-dynamic/Widget.svelte rename to packages/svelte/test/runtime/samples/component-data-dynamic/Widget.svelte diff --git a/packages/svelte/test/runtime/samples/component-data-dynamic/_config.js b/packages/svelte/test/runtime/samples/component-data-dynamic/_config.js new file mode 100644 index 0000000000..87671f34a9 --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-data-dynamic/_config.js @@ -0,0 +1,34 @@ +export default { + get props() { + return { + bar: 'lol', + x: 2, + compound: 'piece of', + go: { deeper: 'core' } + }; + }, + + html: ` +

foo: lol

+

baz: 42 (number)

+

qux: this is a piece of string

+

quux: core

+ `, + + test({ assert, component, target }) { + component.bar = 'wut'; + component.x = 3; + component.compound = 'rather boring'; + component.go = { deeper: 'heart' }; + + assert.htmlEqual( + target.innerHTML, + ` +

foo: wut

+

baz: 43 (number)

+

qux: this is a rather boring string

+

quux: heart

+ ` + ); + } +}; diff --git a/test/runtime/samples/component-data-dynamic/main.svelte b/packages/svelte/test/runtime/samples/component-data-dynamic/main.svelte similarity index 100% rename from test/runtime/samples/component-data-dynamic/main.svelte rename to packages/svelte/test/runtime/samples/component-data-dynamic/main.svelte diff --git a/test/runtime/samples/component-data-empty/Widget.svelte b/packages/svelte/test/runtime/samples/component-data-empty/Widget.svelte similarity index 100% rename from test/runtime/samples/component-data-empty/Widget.svelte rename to packages/svelte/test/runtime/samples/component-data-empty/Widget.svelte diff --git a/test/runtime/samples/component-data-empty/_config.js b/packages/svelte/test/runtime/samples/component-data-empty/_config.js similarity index 100% rename from test/runtime/samples/component-data-empty/_config.js rename to packages/svelte/test/runtime/samples/component-data-empty/_config.js diff --git a/test/runtime/samples/component-data-empty/main.svelte b/packages/svelte/test/runtime/samples/component-data-empty/main.svelte similarity index 100% rename from test/runtime/samples/component-data-empty/main.svelte rename to packages/svelte/test/runtime/samples/component-data-empty/main.svelte diff --git a/test/runtime/samples/component-data-static-boolean-regression/Link.svelte b/packages/svelte/test/runtime/samples/component-data-static-boolean-regression/Link.svelte similarity index 100% rename from test/runtime/samples/component-data-static-boolean-regression/Link.svelte rename to packages/svelte/test/runtime/samples/component-data-static-boolean-regression/Link.svelte diff --git a/test/runtime/samples/component-data-static-boolean-regression/_config.js b/packages/svelte/test/runtime/samples/component-data-static-boolean-regression/_config.js similarity index 100% rename from test/runtime/samples/component-data-static-boolean-regression/_config.js rename to packages/svelte/test/runtime/samples/component-data-static-boolean-regression/_config.js diff --git a/test/runtime/samples/component-data-static-boolean-regression/main.svelte b/packages/svelte/test/runtime/samples/component-data-static-boolean-regression/main.svelte similarity index 100% rename from test/runtime/samples/component-data-static-boolean-regression/main.svelte rename to packages/svelte/test/runtime/samples/component-data-static-boolean-regression/main.svelte diff --git a/test/runtime/samples/component-data-static-boolean/Foo.svelte b/packages/svelte/test/runtime/samples/component-data-static-boolean/Foo.svelte similarity index 100% rename from test/runtime/samples/component-data-static-boolean/Foo.svelte rename to packages/svelte/test/runtime/samples/component-data-static-boolean/Foo.svelte diff --git a/test/runtime/samples/component-data-static-boolean/_config.js b/packages/svelte/test/runtime/samples/component-data-static-boolean/_config.js similarity index 100% rename from test/runtime/samples/component-data-static-boolean/_config.js rename to packages/svelte/test/runtime/samples/component-data-static-boolean/_config.js diff --git a/test/runtime/samples/component-data-static-boolean/main.svelte b/packages/svelte/test/runtime/samples/component-data-static-boolean/main.svelte similarity index 100% rename from test/runtime/samples/component-data-static-boolean/main.svelte rename to packages/svelte/test/runtime/samples/component-data-static-boolean/main.svelte diff --git a/test/runtime/samples/component-data-static/Widget.svelte b/packages/svelte/test/runtime/samples/component-data-static/Widget.svelte similarity index 100% rename from test/runtime/samples/component-data-static/Widget.svelte rename to packages/svelte/test/runtime/samples/component-data-static/Widget.svelte diff --git a/test/runtime/samples/component-data-static/_config.js b/packages/svelte/test/runtime/samples/component-data-static/_config.js similarity index 100% rename from test/runtime/samples/component-data-static/_config.js rename to packages/svelte/test/runtime/samples/component-data-static/_config.js diff --git a/test/runtime/samples/component-data-static/main.svelte b/packages/svelte/test/runtime/samples/component-data-static/main.svelte similarity index 100% rename from test/runtime/samples/component-data-static/main.svelte rename to packages/svelte/test/runtime/samples/component-data-static/main.svelte diff --git a/test/runtime/samples/component-event-handler-dynamic/Button.svelte b/packages/svelte/test/runtime/samples/component-event-handler-dynamic/Button.svelte similarity index 100% rename from test/runtime/samples/component-event-handler-dynamic/Button.svelte rename to packages/svelte/test/runtime/samples/component-event-handler-dynamic/Button.svelte diff --git a/test/runtime/samples/component-event-handler-dynamic/_config.js b/packages/svelte/test/runtime/samples/component-event-handler-dynamic/_config.js similarity index 100% rename from test/runtime/samples/component-event-handler-dynamic/_config.js rename to packages/svelte/test/runtime/samples/component-event-handler-dynamic/_config.js diff --git a/test/runtime/samples/component-event-handler-dynamic/main.svelte b/packages/svelte/test/runtime/samples/component-event-handler-dynamic/main.svelte similarity index 100% rename from test/runtime/samples/component-event-handler-dynamic/main.svelte rename to packages/svelte/test/runtime/samples/component-event-handler-dynamic/main.svelte diff --git a/test/runtime/samples/component-event-handler-modifier-once-dynamic/Button.svelte b/packages/svelte/test/runtime/samples/component-event-handler-modifier-once-dynamic/Button.svelte similarity index 100% rename from test/runtime/samples/component-event-handler-modifier-once-dynamic/Button.svelte rename to packages/svelte/test/runtime/samples/component-event-handler-modifier-once-dynamic/Button.svelte diff --git a/test/runtime/samples/component-event-handler-modifier-once-dynamic/_config.js b/packages/svelte/test/runtime/samples/component-event-handler-modifier-once-dynamic/_config.js similarity index 100% rename from test/runtime/samples/component-event-handler-modifier-once-dynamic/_config.js rename to packages/svelte/test/runtime/samples/component-event-handler-modifier-once-dynamic/_config.js diff --git a/test/runtime/samples/component-event-handler-modifier-once-dynamic/main.svelte b/packages/svelte/test/runtime/samples/component-event-handler-modifier-once-dynamic/main.svelte similarity index 100% rename from test/runtime/samples/component-event-handler-modifier-once-dynamic/main.svelte rename to packages/svelte/test/runtime/samples/component-event-handler-modifier-once-dynamic/main.svelte diff --git a/test/runtime/samples/component-event-handler-modifier-once/Button.svelte b/packages/svelte/test/runtime/samples/component-event-handler-modifier-once/Button.svelte similarity index 100% rename from test/runtime/samples/component-event-handler-modifier-once/Button.svelte rename to packages/svelte/test/runtime/samples/component-event-handler-modifier-once/Button.svelte diff --git a/test/runtime/samples/component-event-handler-modifier-once/_config.js b/packages/svelte/test/runtime/samples/component-event-handler-modifier-once/_config.js similarity index 100% rename from test/runtime/samples/component-event-handler-modifier-once/_config.js rename to packages/svelte/test/runtime/samples/component-event-handler-modifier-once/_config.js diff --git a/test/runtime/samples/component-event-handler-modifier-once/main.svelte b/packages/svelte/test/runtime/samples/component-event-handler-modifier-once/main.svelte similarity index 100% rename from test/runtime/samples/component-event-handler-modifier-once/main.svelte rename to packages/svelte/test/runtime/samples/component-event-handler-modifier-once/main.svelte diff --git a/test/runtime/samples/component-event-not-stale/Button.svelte b/packages/svelte/test/runtime/samples/component-event-not-stale/Button.svelte similarity index 100% rename from test/runtime/samples/component-event-not-stale/Button.svelte rename to packages/svelte/test/runtime/samples/component-event-not-stale/Button.svelte diff --git a/packages/svelte/test/runtime/samples/component-event-not-stale/_config.js b/packages/svelte/test/runtime/samples/component-event-not-stale/_config.js new file mode 100644 index 0000000000..ae6db43bdf --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-event-not-stale/_config.js @@ -0,0 +1,25 @@ +export default { + get props() { + return { value: 1 }; + }, + + test({ assert, component, target, window }) { + const buttons = target.querySelectorAll('button'); + const click = new window.MouseEvent('click'); + + const events = []; + component.$on('value', (event) => { + events.push(event.detail); + }); + + buttons[0].dispatchEvent(click); + buttons[1].dispatchEvent(click); + + component.value = 2; + + buttons[0].dispatchEvent(click); + buttons[1].dispatchEvent(click); + + assert.deepEqual(events, [{ value: 1 }, { value: 1 }, { value: 2 }, { value: 2 }]); + } +}; diff --git a/test/runtime/samples/component-event-not-stale/main.svelte b/packages/svelte/test/runtime/samples/component-event-not-stale/main.svelte similarity index 100% rename from test/runtime/samples/component-event-not-stale/main.svelte rename to packages/svelte/test/runtime/samples/component-event-not-stale/main.svelte diff --git a/test/runtime/samples/component-events-console/Widget.svelte b/packages/svelte/test/runtime/samples/component-events-console/Widget.svelte similarity index 100% rename from test/runtime/samples/component-events-console/Widget.svelte rename to packages/svelte/test/runtime/samples/component-events-console/Widget.svelte diff --git a/packages/svelte/test/runtime/samples/component-events-console/_config.js b/packages/svelte/test/runtime/samples/component-events-console/_config.js new file mode 100644 index 0000000000..6772f2aa25 --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-events-console/_config.js @@ -0,0 +1,23 @@ +export default { + html: '', + + test({ assert, target }) { + const button = target.querySelector('button'); + const messages = []; + + const log = console.log; + console.log = (msg) => { + messages.push(msg); + }; + + try { + button.dispatchEvent(new window.MouseEvent('click')); + assert.deepEqual(messages, ['clicked']); + } catch (err) { + console.log = log; + throw err; + } + + console.log = log; + } +}; diff --git a/test/runtime/samples/component-events-console/main.svelte b/packages/svelte/test/runtime/samples/component-events-console/main.svelte similarity index 100% rename from test/runtime/samples/component-events-console/main.svelte rename to packages/svelte/test/runtime/samples/component-events-console/main.svelte diff --git a/test/runtime/samples/component-events-data/Widget.svelte b/packages/svelte/test/runtime/samples/component-events-data/Widget.svelte similarity index 100% rename from test/runtime/samples/component-events-data/Widget.svelte rename to packages/svelte/test/runtime/samples/component-events-data/Widget.svelte diff --git a/packages/svelte/test/runtime/samples/component-events-data/_config.js b/packages/svelte/test/runtime/samples/component-events-data/_config.js new file mode 100644 index 0000000000..633186fe19 --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-events-data/_config.js @@ -0,0 +1,19 @@ +export default { + test({ assert, component, target, window }) { + const buttons = target.querySelectorAll('button'); + const click = new window.MouseEvent('click'); + + const selected = []; + + component.$on('select', (event) => { + selected.push(event.detail); + }); + + buttons[1].dispatchEvent(click); + buttons[2].dispatchEvent(click); + buttons[1].dispatchEvent(click); + buttons[0].dispatchEvent(click); + + assert.deepEqual(selected, ['bar', 'baz', 'bar', 'foo']); + } +}; diff --git a/test/runtime/samples/component-events-data/main.svelte b/packages/svelte/test/runtime/samples/component-events-data/main.svelte similarity index 100% rename from test/runtime/samples/component-events-data/main.svelte rename to packages/svelte/test/runtime/samples/component-events-data/main.svelte diff --git a/test/runtime/samples/component-events-each/Widget.svelte b/packages/svelte/test/runtime/samples/component-events-each/Widget.svelte similarity index 100% rename from test/runtime/samples/component-events-each/Widget.svelte rename to packages/svelte/test/runtime/samples/component-events-each/Widget.svelte diff --git a/packages/svelte/test/runtime/samples/component-events-each/_config.js b/packages/svelte/test/runtime/samples/component-events-each/_config.js new file mode 100644 index 0000000000..3519ae8ba5 --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-events-each/_config.js @@ -0,0 +1,30 @@ +export default { + get props() { + return { items: ['a', 'b', 'c'] }; + }, + + html: ` +
+ + + +
+ `, + + test({ assert, component, target, window }) { + const buttons = target.querySelectorAll('button'); + + const clicks = []; + + component.$on('foo', (event) => { + clicks.push(event.detail); + }); + + const event = new window.MouseEvent('click'); + + buttons[0].dispatchEvent(event); + buttons[2].dispatchEvent(event); + + assert.deepEqual(clicks, ['a', 'c']); + } +}; diff --git a/test/runtime/samples/component-events-each/main.svelte b/packages/svelte/test/runtime/samples/component-events-each/main.svelte similarity index 100% rename from test/runtime/samples/component-events-each/main.svelte rename to packages/svelte/test/runtime/samples/component-events-each/main.svelte diff --git a/test/runtime/samples/component-events-nullish/Widget.svelte b/packages/svelte/test/runtime/samples/component-events-nullish/Widget.svelte similarity index 100% rename from test/runtime/samples/component-events-nullish/Widget.svelte rename to packages/svelte/test/runtime/samples/component-events-nullish/Widget.svelte diff --git a/packages/svelte/test/runtime/samples/component-events-nullish/_config.js b/packages/svelte/test/runtime/samples/component-events-nullish/_config.js new file mode 100644 index 0000000000..f03b527c14 --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-events-nullish/_config.js @@ -0,0 +1,9 @@ +export default { + async test({ assert, component, window, target }) { + const event = new window.MouseEvent('click'); + const button = target.querySelector('button'); + + await button.dispatchEvent(event); + assert.equal(component.logs.length, 0); + } +}; diff --git a/test/runtime/samples/component-events-nullish/main.svelte b/packages/svelte/test/runtime/samples/component-events-nullish/main.svelte similarity index 100% rename from test/runtime/samples/component-events-nullish/main.svelte rename to packages/svelte/test/runtime/samples/component-events-nullish/main.svelte diff --git a/test/runtime/samples/component-events-this/Inner.svelte b/packages/svelte/test/runtime/samples/component-events-this/Inner.svelte similarity index 100% rename from test/runtime/samples/component-events-this/Inner.svelte rename to packages/svelte/test/runtime/samples/component-events-this/Inner.svelte diff --git a/test/runtime/samples/component-events-this/Widget.svelte b/packages/svelte/test/runtime/samples/component-events-this/Widget.svelte similarity index 100% rename from test/runtime/samples/component-events-this/Widget.svelte rename to packages/svelte/test/runtime/samples/component-events-this/Widget.svelte diff --git a/test/runtime/samples/component-events-this/_config.js b/packages/svelte/test/runtime/samples/component-events-this/_config.js similarity index 100% rename from test/runtime/samples/component-events-this/_config.js rename to packages/svelte/test/runtime/samples/component-events-this/_config.js diff --git a/test/runtime/samples/component-events-this/main.svelte b/packages/svelte/test/runtime/samples/component-events-this/main.svelte similarity index 100% rename from test/runtime/samples/component-events-this/main.svelte rename to packages/svelte/test/runtime/samples/component-events-this/main.svelte diff --git a/test/runtime/samples/component-events/Widget.svelte b/packages/svelte/test/runtime/samples/component-events/Widget.svelte similarity index 100% rename from test/runtime/samples/component-events/Widget.svelte rename to packages/svelte/test/runtime/samples/component-events/Widget.svelte diff --git a/packages/svelte/test/runtime/samples/component-events/_config.js b/packages/svelte/test/runtime/samples/component-events/_config.js new file mode 100644 index 0000000000..e740dd36d6 --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-events/_config.js @@ -0,0 +1,23 @@ +export default { + get props() { + return { visible: true }; + }, + + html: '

i am a widget

', + + test({ assert, component }) { + let count = 0; + + component.$on('widgetTornDown', function () { + assert.equal(this, component); + count += 1; + }); + + component.visible = false; + assert.equal(count, 1); + + component.visible = true; + component.visible = false; + assert.equal(count, 2); + } +}; diff --git a/test/runtime/samples/component-events/main.svelte b/packages/svelte/test/runtime/samples/component-events/main.svelte similarity index 100% rename from test/runtime/samples/component-events/main.svelte rename to packages/svelte/test/runtime/samples/component-events/main.svelte diff --git a/test/runtime/samples/component-if-placement/Component.svelte b/packages/svelte/test/runtime/samples/component-if-placement/Component.svelte similarity index 100% rename from test/runtime/samples/component-if-placement/Component.svelte rename to packages/svelte/test/runtime/samples/component-if-placement/Component.svelte diff --git a/packages/svelte/test/runtime/samples/component-if-placement/_config.js b/packages/svelte/test/runtime/samples/component-if-placement/_config.js new file mode 100644 index 0000000000..cc3bc15512 --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-if-placement/_config.js @@ -0,0 +1,23 @@ +export default { + get props() { + return { flag: true }; + }, + + html: ` + Before + Component + After + `, + + test({ assert, component, target }) { + component.flag = false; + assert.htmlEqual( + target.innerHTML, + ` + Before + Component + After + ` + ); + } +}; diff --git a/test/runtime/samples/component-if-placement/main.svelte b/packages/svelte/test/runtime/samples/component-if-placement/main.svelte similarity index 100% rename from test/runtime/samples/component-if-placement/main.svelte rename to packages/svelte/test/runtime/samples/component-if-placement/main.svelte diff --git a/test/runtime/samples/component-name-deconflicted-globals/Countdown.svelte b/packages/svelte/test/runtime/samples/component-name-deconflicted-globals/Countdown.svelte similarity index 100% rename from test/runtime/samples/component-name-deconflicted-globals/Countdown.svelte rename to packages/svelte/test/runtime/samples/component-name-deconflicted-globals/Countdown.svelte diff --git a/test/runtime/samples/component-name-deconflicted-globals/_config.js b/packages/svelte/test/runtime/samples/component-name-deconflicted-globals/_config.js similarity index 100% rename from test/runtime/samples/component-name-deconflicted-globals/_config.js rename to packages/svelte/test/runtime/samples/component-name-deconflicted-globals/_config.js diff --git a/test/runtime/samples/component-name-deconflicted-globals/main.svelte b/packages/svelte/test/runtime/samples/component-name-deconflicted-globals/main.svelte similarity index 100% rename from test/runtime/samples/component-name-deconflicted-globals/main.svelte rename to packages/svelte/test/runtime/samples/component-name-deconflicted-globals/main.svelte diff --git a/test/runtime/samples/component-name-deconflicted/Nested.svelte b/packages/svelte/test/runtime/samples/component-name-deconflicted/Nested.svelte similarity index 100% rename from test/runtime/samples/component-name-deconflicted/Nested.svelte rename to packages/svelte/test/runtime/samples/component-name-deconflicted/Nested.svelte diff --git a/packages/svelte/test/runtime/samples/component-name-deconflicted/_config.js b/packages/svelte/test/runtime/samples/component-name-deconflicted/_config.js new file mode 100644 index 0000000000..8c97e2a1eb --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-name-deconflicted/_config.js @@ -0,0 +1,18 @@ +export default { + html: ` + 1 + 2 + `, + + test({ assert, component, target }) { + component.list = [3, 4]; + + assert.htmlEqual( + target.innerHTML, + ` + 3 + 4 + ` + ); + } +}; diff --git a/test/runtime/samples/component-name-deconflicted/main.svelte b/packages/svelte/test/runtime/samples/component-name-deconflicted/main.svelte similarity index 100% rename from test/runtime/samples/component-name-deconflicted/main.svelte rename to packages/svelte/test/runtime/samples/component-name-deconflicted/main.svelte diff --git a/test/runtime/samples/component-namespace/Tooltip.svelte b/packages/svelte/test/runtime/samples/component-namespace/Tooltip.svelte similarity index 100% rename from test/runtime/samples/component-namespace/Tooltip.svelte rename to packages/svelte/test/runtime/samples/component-namespace/Tooltip.svelte diff --git a/test/runtime/samples/component-namespace/Widget.svelte b/packages/svelte/test/runtime/samples/component-namespace/Widget.svelte similarity index 100% rename from test/runtime/samples/component-namespace/Widget.svelte rename to packages/svelte/test/runtime/samples/component-namespace/Widget.svelte diff --git a/test/runtime/samples/component-namespace/_config.js b/packages/svelte/test/runtime/samples/component-namespace/_config.js similarity index 100% rename from test/runtime/samples/component-namespace/_config.js rename to packages/svelte/test/runtime/samples/component-namespace/_config.js diff --git a/test/runtime/samples/component-namespace/main.svelte b/packages/svelte/test/runtime/samples/component-namespace/main.svelte similarity index 100% rename from test/runtime/samples/component-namespace/main.svelte rename to packages/svelte/test/runtime/samples/component-namespace/main.svelte diff --git a/test/runtime/samples/component-namespaced/Foo.svelte b/packages/svelte/test/runtime/samples/component-namespaced/Foo.svelte similarity index 100% rename from test/runtime/samples/component-namespaced/Foo.svelte rename to packages/svelte/test/runtime/samples/component-namespaced/Foo.svelte diff --git a/packages/svelte/test/runtime/samples/component-namespaced/_config.js b/packages/svelte/test/runtime/samples/component-namespaced/_config.js new file mode 100644 index 0000000000..47f990b282 --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-namespaced/_config.js @@ -0,0 +1,19 @@ +export default { + get props() { + return { a: 1 }; + }, + + html: ` +

foo 1

+ `, + + test({ assert, component, target }) { + component.a = 2; + assert.htmlEqual( + target.innerHTML, + ` +

foo 2

+ ` + ); + } +}; diff --git a/test/runtime/samples/component-namespaced/components.svelte b/packages/svelte/test/runtime/samples/component-namespaced/components.svelte similarity index 100% rename from test/runtime/samples/component-namespaced/components.svelte rename to packages/svelte/test/runtime/samples/component-namespaced/components.svelte diff --git a/test/runtime/samples/component-namespaced/main.svelte b/packages/svelte/test/runtime/samples/component-namespaced/main.svelte similarity index 100% rename from test/runtime/samples/component-namespaced/main.svelte rename to packages/svelte/test/runtime/samples/component-namespaced/main.svelte diff --git a/test/runtime/samples/component-nested-deep/Level1.svelte b/packages/svelte/test/runtime/samples/component-nested-deep/Level1.svelte similarity index 100% rename from test/runtime/samples/component-nested-deep/Level1.svelte rename to packages/svelte/test/runtime/samples/component-nested-deep/Level1.svelte diff --git a/test/runtime/samples/component-nested-deep/Level2.svelte b/packages/svelte/test/runtime/samples/component-nested-deep/Level2.svelte similarity index 100% rename from test/runtime/samples/component-nested-deep/Level2.svelte rename to packages/svelte/test/runtime/samples/component-nested-deep/Level2.svelte diff --git a/test/runtime/samples/component-nested-deep/Level3.svelte b/packages/svelte/test/runtime/samples/component-nested-deep/Level3.svelte similarity index 100% rename from test/runtime/samples/component-nested-deep/Level3.svelte rename to packages/svelte/test/runtime/samples/component-nested-deep/Level3.svelte diff --git a/test/runtime/samples/component-nested-deep/_config.js b/packages/svelte/test/runtime/samples/component-nested-deep/_config.js similarity index 100% rename from test/runtime/samples/component-nested-deep/_config.js rename to packages/svelte/test/runtime/samples/component-nested-deep/_config.js diff --git a/test/runtime/samples/component-nested-deep/main.svelte b/packages/svelte/test/runtime/samples/component-nested-deep/main.svelte similarity index 100% rename from test/runtime/samples/component-nested-deep/main.svelte rename to packages/svelte/test/runtime/samples/component-nested-deep/main.svelte diff --git a/test/runtime/samples/component-nested-deeper/Level1.svelte b/packages/svelte/test/runtime/samples/component-nested-deeper/Level1.svelte similarity index 100% rename from test/runtime/samples/component-nested-deeper/Level1.svelte rename to packages/svelte/test/runtime/samples/component-nested-deeper/Level1.svelte diff --git a/test/runtime/samples/component-nested-deeper/Level2.svelte b/packages/svelte/test/runtime/samples/component-nested-deeper/Level2.svelte similarity index 100% rename from test/runtime/samples/component-nested-deeper/Level2.svelte rename to packages/svelte/test/runtime/samples/component-nested-deeper/Level2.svelte diff --git a/test/runtime/samples/component-nested-deeper/Level3.svelte b/packages/svelte/test/runtime/samples/component-nested-deeper/Level3.svelte similarity index 100% rename from test/runtime/samples/component-nested-deeper/Level3.svelte rename to packages/svelte/test/runtime/samples/component-nested-deeper/Level3.svelte diff --git a/packages/svelte/test/runtime/samples/component-nested-deeper/_config.js b/packages/svelte/test/runtime/samples/component-nested-deeper/_config.js new file mode 100644 index 0000000000..c83c451528 --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-nested-deeper/_config.js @@ -0,0 +1,9 @@ +export default { + get props() { + return { values: [1, 2, 3, 4] }; + }, + + test({ component }) { + component.values = [2, 3]; + } +}; diff --git a/test/runtime/samples/component-nested-deeper/main.svelte b/packages/svelte/test/runtime/samples/component-nested-deeper/main.svelte similarity index 100% rename from test/runtime/samples/component-nested-deeper/main.svelte rename to packages/svelte/test/runtime/samples/component-nested-deeper/main.svelte diff --git a/test/runtime/samples/component-not-constructor-dev/_config.js b/packages/svelte/test/runtime/samples/component-not-constructor-dev/_config.js similarity index 100% rename from test/runtime/samples/component-not-constructor-dev/_config.js rename to packages/svelte/test/runtime/samples/component-not-constructor-dev/_config.js diff --git a/test/runtime/samples/component-not-constructor-dev/main.svelte b/packages/svelte/test/runtime/samples/component-not-constructor-dev/main.svelte similarity index 100% rename from test/runtime/samples/component-not-constructor-dev/main.svelte rename to packages/svelte/test/runtime/samples/component-not-constructor-dev/main.svelte diff --git a/test/runtime/samples/component-not-constructor/Sub.svelte b/packages/svelte/test/runtime/samples/component-not-constructor/Sub.svelte similarity index 100% rename from test/runtime/samples/component-not-constructor/Sub.svelte rename to packages/svelte/test/runtime/samples/component-not-constructor/Sub.svelte diff --git a/packages/svelte/test/runtime/samples/component-not-constructor/_config.js b/packages/svelte/test/runtime/samples/component-not-constructor/_config.js new file mode 100644 index 0000000000..788dd91f57 --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-not-constructor/_config.js @@ -0,0 +1,8 @@ +export default { + skip_if_ssr: true, + skip_if_hydrate_from_ssr: true, + get props() { + return { selected: false }; + }, + error: 'component is not a constructor' +}; diff --git a/test/runtime/samples/component-not-constructor/main.svelte b/packages/svelte/test/runtime/samples/component-not-constructor/main.svelte similarity index 100% rename from test/runtime/samples/component-not-constructor/main.svelte rename to packages/svelte/test/runtime/samples/component-not-constructor/main.svelte diff --git a/test/runtime/samples/component-not-constructor2-dev/Sub.svelte b/packages/svelte/test/runtime/samples/component-not-constructor2-dev/Sub.svelte similarity index 100% rename from test/runtime/samples/component-not-constructor2-dev/Sub.svelte rename to packages/svelte/test/runtime/samples/component-not-constructor2-dev/Sub.svelte diff --git a/packages/svelte/test/runtime/samples/component-not-constructor2-dev/_config.js b/packages/svelte/test/runtime/samples/component-not-constructor2-dev/_config.js new file mode 100644 index 0000000000..154637cd88 --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-not-constructor2-dev/_config.js @@ -0,0 +1,22 @@ +export default { + compileOptions: { + dev: true + }, + get props() { + return { componentName: 'Sub' }; + }, + html: '
Sub
', + test({ assert, component, target }) { + component.componentName = 'Proxy'; + assert.htmlEqual(target.innerHTML, '
Sub
'); + try { + component.componentName = 'banana'; + throw new Error('Expected an error'); + } catch (err) { + assert.equal( + err.message, + 'this={...} of should specify a Svelte component.' + ); + } + } +}; diff --git a/test/runtime/samples/component-not-constructor2-dev/main.svelte b/packages/svelte/test/runtime/samples/component-not-constructor2-dev/main.svelte similarity index 100% rename from test/runtime/samples/component-not-constructor2-dev/main.svelte rename to packages/svelte/test/runtime/samples/component-not-constructor2-dev/main.svelte diff --git a/test/runtime/samples/component-not-constructor2/Sub.svelte b/packages/svelte/test/runtime/samples/component-not-constructor2/Sub.svelte similarity index 100% rename from test/runtime/samples/component-not-constructor2/Sub.svelte rename to packages/svelte/test/runtime/samples/component-not-constructor2/Sub.svelte diff --git a/packages/svelte/test/runtime/samples/component-not-constructor2/_config.js b/packages/svelte/test/runtime/samples/component-not-constructor2/_config.js new file mode 100644 index 0000000000..e7f11e6966 --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-not-constructor2/_config.js @@ -0,0 +1,16 @@ +export default { + get props() { + return { componentName: 'Sub' }; + }, + html: '
Sub
', + test({ assert, component, target }) { + component.componentName = 'Proxy'; + assert.htmlEqual(target.innerHTML, '
Sub
'); + try { + component.componentName = 'banana'; + throw new Error('Expected an error'); + } catch (err) { + assert.equal(err.message, 'component is not a constructor'); + } + } +}; diff --git a/test/runtime/samples/component-not-constructor2/main.svelte b/packages/svelte/test/runtime/samples/component-not-constructor2/main.svelte similarity index 100% rename from test/runtime/samples/component-not-constructor2/main.svelte rename to packages/svelte/test/runtime/samples/component-not-constructor2/main.svelte diff --git a/test/runtime/samples/component-not-void/Link.svelte b/packages/svelte/test/runtime/samples/component-not-void/Link.svelte similarity index 100% rename from test/runtime/samples/component-not-void/Link.svelte rename to packages/svelte/test/runtime/samples/component-not-void/Link.svelte diff --git a/test/runtime/samples/component-not-void/_config.js b/packages/svelte/test/runtime/samples/component-not-void/_config.js similarity index 100% rename from test/runtime/samples/component-not-void/_config.js rename to packages/svelte/test/runtime/samples/component-not-void/_config.js diff --git a/test/runtime/samples/component-not-void/main.svelte b/packages/svelte/test/runtime/samples/component-not-void/main.svelte similarity index 100% rename from test/runtime/samples/component-not-void/main.svelte rename to packages/svelte/test/runtime/samples/component-not-void/main.svelte diff --git a/test/runtime/samples/component-ref/Widget.svelte b/packages/svelte/test/runtime/samples/component-ref/Widget.svelte similarity index 100% rename from test/runtime/samples/component-ref/Widget.svelte rename to packages/svelte/test/runtime/samples/component-ref/Widget.svelte diff --git a/test/runtime/samples/component-ref/_config.js b/packages/svelte/test/runtime/samples/component-ref/_config.js similarity index 100% rename from test/runtime/samples/component-ref/_config.js rename to packages/svelte/test/runtime/samples/component-ref/_config.js diff --git a/test/runtime/samples/component-ref/main.svelte b/packages/svelte/test/runtime/samples/component-ref/main.svelte similarity index 100% rename from test/runtime/samples/component-ref/main.svelte rename to packages/svelte/test/runtime/samples/component-ref/main.svelte diff --git a/test/runtime/samples/component-shorthand-import/Widget.svelte b/packages/svelte/test/runtime/samples/component-shorthand-import/Widget.svelte similarity index 100% rename from test/runtime/samples/component-shorthand-import/Widget.svelte rename to packages/svelte/test/runtime/samples/component-shorthand-import/Widget.svelte diff --git a/test/runtime/samples/component-shorthand-import/_config.js b/packages/svelte/test/runtime/samples/component-shorthand-import/_config.js similarity index 100% rename from test/runtime/samples/component-shorthand-import/_config.js rename to packages/svelte/test/runtime/samples/component-shorthand-import/_config.js diff --git a/test/runtime/samples/component-shorthand-import/main.svelte b/packages/svelte/test/runtime/samples/component-shorthand-import/main.svelte similarity index 100% rename from test/runtime/samples/component-shorthand-import/main.svelte rename to packages/svelte/test/runtime/samples/component-shorthand-import/main.svelte diff --git a/test/runtime/samples/component-slot-attribute-order/Component.svelte b/packages/svelte/test/runtime/samples/component-slot-attribute-order/Component.svelte similarity index 100% rename from test/runtime/samples/component-slot-attribute-order/Component.svelte rename to packages/svelte/test/runtime/samples/component-slot-attribute-order/Component.svelte diff --git a/test/runtime/samples/component-slot-attribute-order/_config.js b/packages/svelte/test/runtime/samples/component-slot-attribute-order/_config.js similarity index 100% rename from test/runtime/samples/component-slot-attribute-order/_config.js rename to packages/svelte/test/runtime/samples/component-slot-attribute-order/_config.js diff --git a/test/runtime/samples/component-slot-attribute-order/main.svelte b/packages/svelte/test/runtime/samples/component-slot-attribute-order/main.svelte similarity index 100% rename from test/runtime/samples/component-slot-attribute-order/main.svelte rename to packages/svelte/test/runtime/samples/component-slot-attribute-order/main.svelte diff --git a/test/runtime/samples/component-slot-binding-dimensions-destroys-cleanly/Nested.svelte b/packages/svelte/test/runtime/samples/component-slot-binding-dimensions-destroys-cleanly/Nested.svelte similarity index 100% rename from test/runtime/samples/component-slot-binding-dimensions-destroys-cleanly/Nested.svelte rename to packages/svelte/test/runtime/samples/component-slot-binding-dimensions-destroys-cleanly/Nested.svelte diff --git a/test/runtime/samples/set-prevents-loop/_config.js b/packages/svelte/test/runtime/samples/component-slot-binding-dimensions-destroys-cleanly/_config.js similarity index 100% rename from test/runtime/samples/set-prevents-loop/_config.js rename to packages/svelte/test/runtime/samples/component-slot-binding-dimensions-destroys-cleanly/_config.js diff --git a/test/runtime/samples/component-slot-binding-dimensions-destroys-cleanly/main.svelte b/packages/svelte/test/runtime/samples/component-slot-binding-dimensions-destroys-cleanly/main.svelte similarity index 100% rename from test/runtime/samples/component-slot-binding-dimensions-destroys-cleanly/main.svelte rename to packages/svelte/test/runtime/samples/component-slot-binding-dimensions-destroys-cleanly/main.svelte diff --git a/test/runtime/samples/component-slot-chained/Inner.svelte b/packages/svelte/test/runtime/samples/component-slot-chained/Inner.svelte similarity index 100% rename from test/runtime/samples/component-slot-chained/Inner.svelte rename to packages/svelte/test/runtime/samples/component-slot-chained/Inner.svelte diff --git a/test/runtime/samples/component-slot-chained/Outer.svelte b/packages/svelte/test/runtime/samples/component-slot-chained/Outer.svelte similarity index 100% rename from test/runtime/samples/component-slot-chained/Outer.svelte rename to packages/svelte/test/runtime/samples/component-slot-chained/Outer.svelte diff --git a/test/runtime/samples/component-slot-chained/_config.js b/packages/svelte/test/runtime/samples/component-slot-chained/_config.js similarity index 100% rename from test/runtime/samples/component-slot-chained/_config.js rename to packages/svelte/test/runtime/samples/component-slot-chained/_config.js diff --git a/test/runtime/samples/component-slot-chained/main.svelte b/packages/svelte/test/runtime/samples/component-slot-chained/main.svelte similarity index 100% rename from test/runtime/samples/component-slot-chained/main.svelte rename to packages/svelte/test/runtime/samples/component-slot-chained/main.svelte diff --git a/test/runtime/samples/component-slot-component-named-b/Hello.svelte b/packages/svelte/test/runtime/samples/component-slot-component-named-b/Hello.svelte similarity index 100% rename from test/runtime/samples/component-slot-component-named-b/Hello.svelte rename to packages/svelte/test/runtime/samples/component-slot-component-named-b/Hello.svelte diff --git a/test/runtime/samples/component-slot-component-named-b/Nested.svelte b/packages/svelte/test/runtime/samples/component-slot-component-named-b/Nested.svelte similarity index 100% rename from test/runtime/samples/component-slot-component-named-b/Nested.svelte rename to packages/svelte/test/runtime/samples/component-slot-component-named-b/Nested.svelte diff --git a/test/runtime/samples/component-slot-component-named-b/_config.js b/packages/svelte/test/runtime/samples/component-slot-component-named-b/_config.js similarity index 100% rename from test/runtime/samples/component-slot-component-named-b/_config.js rename to packages/svelte/test/runtime/samples/component-slot-component-named-b/_config.js diff --git a/test/runtime/samples/component-slot-component-named-b/main.svelte b/packages/svelte/test/runtime/samples/component-slot-component-named-b/main.svelte similarity index 100% rename from test/runtime/samples/component-slot-component-named-b/main.svelte rename to packages/svelte/test/runtime/samples/component-slot-component-named-b/main.svelte diff --git a/test/runtime/samples/component-slot-component-named-c/Hello.svelte b/packages/svelte/test/runtime/samples/component-slot-component-named-c/Hello.svelte similarity index 100% rename from test/runtime/samples/component-slot-component-named-c/Hello.svelte rename to packages/svelte/test/runtime/samples/component-slot-component-named-c/Hello.svelte diff --git a/test/runtime/samples/component-slot-component-named-c/Nested.svelte b/packages/svelte/test/runtime/samples/component-slot-component-named-c/Nested.svelte similarity index 100% rename from test/runtime/samples/component-slot-component-named-c/Nested.svelte rename to packages/svelte/test/runtime/samples/component-slot-component-named-c/Nested.svelte diff --git a/test/runtime/samples/component-slot-component-named-c/World.svelte b/packages/svelte/test/runtime/samples/component-slot-component-named-c/World.svelte similarity index 100% rename from test/runtime/samples/component-slot-component-named-c/World.svelte rename to packages/svelte/test/runtime/samples/component-slot-component-named-c/World.svelte diff --git a/test/runtime/samples/component-slot-component-named-c/_config.js b/packages/svelte/test/runtime/samples/component-slot-component-named-c/_config.js similarity index 100% rename from test/runtime/samples/component-slot-component-named-c/_config.js rename to packages/svelte/test/runtime/samples/component-slot-component-named-c/_config.js diff --git a/test/runtime/samples/component-slot-component-named-c/main.svelte b/packages/svelte/test/runtime/samples/component-slot-component-named-c/main.svelte similarity index 100% rename from test/runtime/samples/component-slot-component-named-c/main.svelte rename to packages/svelte/test/runtime/samples/component-slot-component-named-c/main.svelte diff --git a/test/runtime/samples/component-slot-component-named/Bar.svelte b/packages/svelte/test/runtime/samples/component-slot-component-named/Bar.svelte similarity index 100% rename from test/runtime/samples/component-slot-component-named/Bar.svelte rename to packages/svelte/test/runtime/samples/component-slot-component-named/Bar.svelte diff --git a/test/runtime/samples/component-slot-component-named/Foo.svelte b/packages/svelte/test/runtime/samples/component-slot-component-named/Foo.svelte similarity index 100% rename from test/runtime/samples/component-slot-component-named/Foo.svelte rename to packages/svelte/test/runtime/samples/component-slot-component-named/Foo.svelte diff --git a/test/runtime/samples/component-slot-component-named/Nested.svelte b/packages/svelte/test/runtime/samples/component-slot-component-named/Nested.svelte similarity index 100% rename from test/runtime/samples/component-slot-component-named/Nested.svelte rename to packages/svelte/test/runtime/samples/component-slot-component-named/Nested.svelte diff --git a/test/runtime/samples/component-slot-component-named/_config.js b/packages/svelte/test/runtime/samples/component-slot-component-named/_config.js similarity index 100% rename from test/runtime/samples/component-slot-component-named/_config.js rename to packages/svelte/test/runtime/samples/component-slot-component-named/_config.js diff --git a/test/runtime/samples/component-slot-component-named/main.svelte b/packages/svelte/test/runtime/samples/component-slot-component-named/main.svelte similarity index 100% rename from test/runtime/samples/component-slot-component-named/main.svelte rename to packages/svelte/test/runtime/samples/component-slot-component-named/main.svelte diff --git a/test/runtime/samples/component-slot-context-props-each-nested/Nested.svelte b/packages/svelte/test/runtime/samples/component-slot-context-props-each-nested/Nested.svelte similarity index 100% rename from test/runtime/samples/component-slot-context-props-each-nested/Nested.svelte rename to packages/svelte/test/runtime/samples/component-slot-context-props-each-nested/Nested.svelte diff --git a/packages/svelte/test/runtime/samples/component-slot-context-props-each-nested/_config.js b/packages/svelte/test/runtime/samples/component-slot-context-props-each-nested/_config.js new file mode 100644 index 0000000000..aa4df4200a --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-slot-context-props-each-nested/_config.js @@ -0,0 +1,33 @@ +export default { + html: ` + + + + + `, + async test({ assert, target, window, component }) { + const [btn1, btn2, btn3, btn4] = target.querySelectorAll('button'); + const click = new window.MouseEvent('click'); + + await btn1.dispatchEvent(click); + assert.deepEqual(component.log, ['setKey(a, value-a-c, c)']); + + await btn2.dispatchEvent(click); + assert.deepEqual(component.log, ['setKey(a, value-a-c, c)', 'setKey(b, value-b-c, c)']); + + await btn3.dispatchEvent(click); + assert.deepEqual(component.log, [ + 'setKey(a, value-a-c, c)', + 'setKey(b, value-b-c, c)', + 'setKey(a, value-a-d, d)' + ]); + + await btn4.dispatchEvent(click); + assert.deepEqual(component.log, [ + 'setKey(a, value-a-c, c)', + 'setKey(b, value-b-c, c)', + 'setKey(a, value-a-d, d)', + 'setKey(b, value-b-d, d)' + ]); + } +}; diff --git a/test/runtime/samples/component-slot-context-props-each-nested/main.svelte b/packages/svelte/test/runtime/samples/component-slot-context-props-each-nested/main.svelte similarity index 100% rename from test/runtime/samples/component-slot-context-props-each-nested/main.svelte rename to packages/svelte/test/runtime/samples/component-slot-context-props-each-nested/main.svelte diff --git a/test/runtime/samples/component-slot-context-props-each/Nested.svelte b/packages/svelte/test/runtime/samples/component-slot-context-props-each/Nested.svelte similarity index 100% rename from test/runtime/samples/component-slot-context-props-each/Nested.svelte rename to packages/svelte/test/runtime/samples/component-slot-context-props-each/Nested.svelte diff --git a/packages/svelte/test/runtime/samples/component-slot-context-props-each/_config.js b/packages/svelte/test/runtime/samples/component-slot-context-props-each/_config.js new file mode 100644 index 0000000000..c993cdfb39 --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-slot-context-props-each/_config.js @@ -0,0 +1,16 @@ +export default { + html: ` + + + `, + async test({ assert, target, window, component }) { + const [btn1, btn2] = target.querySelectorAll('button'); + const click = new window.MouseEvent('click'); + + await btn1.dispatchEvent(click); + assert.deepEqual(component.log, ['setKey(a, value-a)']); + + await btn2.dispatchEvent(click); + assert.deepEqual(component.log, ['setKey(a, value-a)', 'setKey(b, value-b)']); + } +}; diff --git a/test/runtime/samples/component-slot-context-props-each/main.svelte b/packages/svelte/test/runtime/samples/component-slot-context-props-each/main.svelte similarity index 100% rename from test/runtime/samples/component-slot-context-props-each/main.svelte rename to packages/svelte/test/runtime/samples/component-slot-context-props-each/main.svelte diff --git a/test/runtime/samples/component-slot-context-props-let/Inner.svelte b/packages/svelte/test/runtime/samples/component-slot-context-props-let/Inner.svelte similarity index 100% rename from test/runtime/samples/component-slot-context-props-let/Inner.svelte rename to packages/svelte/test/runtime/samples/component-slot-context-props-let/Inner.svelte diff --git a/test/runtime/samples/component-slot-context-props-let/Nested.svelte b/packages/svelte/test/runtime/samples/component-slot-context-props-let/Nested.svelte similarity index 100% rename from test/runtime/samples/component-slot-context-props-let/Nested.svelte rename to packages/svelte/test/runtime/samples/component-slot-context-props-let/Nested.svelte diff --git a/packages/svelte/test/runtime/samples/component-slot-context-props-let/_config.js b/packages/svelte/test/runtime/samples/component-slot-context-props-let/_config.js new file mode 100644 index 0000000000..c993cdfb39 --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-slot-context-props-let/_config.js @@ -0,0 +1,16 @@ +export default { + html: ` + + + `, + async test({ assert, target, window, component }) { + const [btn1, btn2] = target.querySelectorAll('button'); + const click = new window.MouseEvent('click'); + + await btn1.dispatchEvent(click); + assert.deepEqual(component.log, ['setKey(a, value-a)']); + + await btn2.dispatchEvent(click); + assert.deepEqual(component.log, ['setKey(a, value-a)', 'setKey(b, value-b)']); + } +}; diff --git a/test/runtime/samples/component-slot-context-props-let/main.svelte b/packages/svelte/test/runtime/samples/component-slot-context-props-let/main.svelte similarity index 100% rename from test/runtime/samples/component-slot-context-props-let/main.svelte rename to packages/svelte/test/runtime/samples/component-slot-context-props-let/main.svelte diff --git a/packages/svelte/test/runtime/samples/component-slot-default-in-each/Nested.svelte b/packages/svelte/test/runtime/samples/component-slot-default-in-each/Nested.svelte new file mode 100644 index 0000000000..d216843101 --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-slot-default-in-each/Nested.svelte @@ -0,0 +1,11 @@ + + +{#each {length: 3} as _, i} + +{/each} + +{#await promise then value} + +{/await} diff --git a/packages/svelte/test/runtime/samples/component-slot-default-in-each/_config.js b/packages/svelte/test/runtime/samples/component-slot-default-in-each/_config.js new file mode 100644 index 0000000000..5c0fd13871 --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-slot-default-in-each/_config.js @@ -0,0 +1,7 @@ +export default { + html: ` +
0 - undefined
+
1 - undefined
+
2 - undefined
+ ` +}; diff --git a/packages/svelte/test/runtime/samples/component-slot-default-in-each/main.svelte b/packages/svelte/test/runtime/samples/component-slot-default-in-each/main.svelte new file mode 100644 index 0000000000..2ff707e04d --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-slot-default-in-each/main.svelte @@ -0,0 +1,7 @@ + + + +
{item} - {value}
+
\ No newline at end of file diff --git a/test/runtime/samples/component-slot-default/Nested.svelte b/packages/svelte/test/runtime/samples/component-slot-default/Nested.svelte similarity index 100% rename from test/runtime/samples/component-slot-default/Nested.svelte rename to packages/svelte/test/runtime/samples/component-slot-default/Nested.svelte diff --git a/test/runtime/samples/component-slot-default/_config.js b/packages/svelte/test/runtime/samples/component-slot-default/_config.js similarity index 100% rename from test/runtime/samples/component-slot-default/_config.js rename to packages/svelte/test/runtime/samples/component-slot-default/_config.js diff --git a/test/runtime/samples/component-slot-default/main.svelte b/packages/svelte/test/runtime/samples/component-slot-default/main.svelte similarity index 100% rename from test/runtime/samples/component-slot-default/main.svelte rename to packages/svelte/test/runtime/samples/component-slot-default/main.svelte diff --git a/test/runtime/samples/component-slot-dynamic/Nested.svelte b/packages/svelte/test/runtime/samples/component-slot-dynamic/Nested.svelte similarity index 100% rename from test/runtime/samples/component-slot-dynamic/Nested.svelte rename to packages/svelte/test/runtime/samples/component-slot-dynamic/Nested.svelte diff --git a/test/runtime/samples/component-slot-dynamic/_config.js b/packages/svelte/test/runtime/samples/component-slot-dynamic/_config.js similarity index 100% rename from test/runtime/samples/component-slot-dynamic/_config.js rename to packages/svelte/test/runtime/samples/component-slot-dynamic/_config.js diff --git a/test/runtime/samples/component-slot-dynamic/main.svelte b/packages/svelte/test/runtime/samples/component-slot-dynamic/main.svelte similarity index 100% rename from test/runtime/samples/component-slot-dynamic/main.svelte rename to packages/svelte/test/runtime/samples/component-slot-dynamic/main.svelte diff --git a/test/runtime/samples/component-slot-each-block/Nested.svelte b/packages/svelte/test/runtime/samples/component-slot-each-block/Nested.svelte similarity index 100% rename from test/runtime/samples/component-slot-each-block/Nested.svelte rename to packages/svelte/test/runtime/samples/component-slot-each-block/Nested.svelte diff --git a/packages/svelte/test/runtime/samples/component-slot-each-block/_config.js b/packages/svelte/test/runtime/samples/component-slot-each-block/_config.js new file mode 100644 index 0000000000..62a2db4f8a --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-slot-each-block/_config.js @@ -0,0 +1,27 @@ +export default { + get props() { + return { things: [1, 2, 3] }; + }, + + html: ` +
+ 1 + 2 + 3 +
`, + + test({ assert, component, target }) { + component.things = [1, 2, 3, 4]; + assert.htmlEqual( + target.innerHTML, + ` +
+ 1 + 2 + 3 + 4 +
+ ` + ); + } +}; diff --git a/test/runtime/samples/component-slot-each-block/main.svelte b/packages/svelte/test/runtime/samples/component-slot-each-block/main.svelte similarity index 100% rename from test/runtime/samples/component-slot-each-block/main.svelte rename to packages/svelte/test/runtime/samples/component-slot-each-block/main.svelte diff --git a/test/runtime/samples/component-slot-empty-b/Nested.svelte b/packages/svelte/test/runtime/samples/component-slot-empty-b/Nested.svelte similarity index 100% rename from test/runtime/samples/component-slot-empty-b/Nested.svelte rename to packages/svelte/test/runtime/samples/component-slot-empty-b/Nested.svelte diff --git a/test/runtime/samples/component-slot-empty-b/_config.js b/packages/svelte/test/runtime/samples/component-slot-empty-b/_config.js similarity index 100% rename from test/runtime/samples/component-slot-empty-b/_config.js rename to packages/svelte/test/runtime/samples/component-slot-empty-b/_config.js diff --git a/test/runtime/samples/component-slot-empty-b/main.svelte b/packages/svelte/test/runtime/samples/component-slot-empty-b/main.svelte similarity index 100% rename from test/runtime/samples/component-slot-empty-b/main.svelte rename to packages/svelte/test/runtime/samples/component-slot-empty-b/main.svelte diff --git a/test/runtime/samples/component-slot-empty/Nested.svelte b/packages/svelte/test/runtime/samples/component-slot-empty/Nested.svelte similarity index 100% rename from test/runtime/samples/component-slot-empty/Nested.svelte rename to packages/svelte/test/runtime/samples/component-slot-empty/Nested.svelte diff --git a/test/runtime/samples/component-slot-empty/_config.js b/packages/svelte/test/runtime/samples/component-slot-empty/_config.js similarity index 100% rename from test/runtime/samples/component-slot-empty/_config.js rename to packages/svelte/test/runtime/samples/component-slot-empty/_config.js diff --git a/test/runtime/samples/component-slot-empty/main.svelte b/packages/svelte/test/runtime/samples/component-slot-empty/main.svelte similarity index 100% rename from test/runtime/samples/component-slot-empty/main.svelte rename to packages/svelte/test/runtime/samples/component-slot-empty/main.svelte diff --git a/test/runtime/samples/component-slot-fallback-2/Inner.svelte b/packages/svelte/test/runtime/samples/component-slot-fallback-2/Inner.svelte similarity index 100% rename from test/runtime/samples/component-slot-fallback-2/Inner.svelte rename to packages/svelte/test/runtime/samples/component-slot-fallback-2/Inner.svelte diff --git a/test/runtime/samples/component-slot-fallback-2/Outer.svelte b/packages/svelte/test/runtime/samples/component-slot-fallback-2/Outer.svelte similarity index 100% rename from test/runtime/samples/component-slot-fallback-2/Outer.svelte rename to packages/svelte/test/runtime/samples/component-slot-fallback-2/Outer.svelte diff --git a/test/runtime/samples/component-slot-fallback-2/_config.js b/packages/svelte/test/runtime/samples/component-slot-fallback-2/_config.js similarity index 100% rename from test/runtime/samples/component-slot-fallback-2/_config.js rename to packages/svelte/test/runtime/samples/component-slot-fallback-2/_config.js diff --git a/test/runtime/samples/component-slot-fallback-2/main.svelte b/packages/svelte/test/runtime/samples/component-slot-fallback-2/main.svelte similarity index 100% rename from test/runtime/samples/component-slot-fallback-2/main.svelte rename to packages/svelte/test/runtime/samples/component-slot-fallback-2/main.svelte diff --git a/test/runtime/samples/component-slot-fallback-2/store.svelte b/packages/svelte/test/runtime/samples/component-slot-fallback-2/store.svelte similarity index 100% rename from test/runtime/samples/component-slot-fallback-2/store.svelte rename to packages/svelte/test/runtime/samples/component-slot-fallback-2/store.svelte diff --git a/test/runtime/samples/component-slot-fallback-3/Inner.svelte b/packages/svelte/test/runtime/samples/component-slot-fallback-3/Inner.svelte similarity index 100% rename from test/runtime/samples/component-slot-fallback-3/Inner.svelte rename to packages/svelte/test/runtime/samples/component-slot-fallback-3/Inner.svelte diff --git a/test/runtime/samples/component-slot-fallback-3/_config.js b/packages/svelte/test/runtime/samples/component-slot-fallback-3/_config.js similarity index 100% rename from test/runtime/samples/component-slot-fallback-3/_config.js rename to packages/svelte/test/runtime/samples/component-slot-fallback-3/_config.js diff --git a/test/runtime/samples/component-slot-fallback-3/main.svelte b/packages/svelte/test/runtime/samples/component-slot-fallback-3/main.svelte similarity index 100% rename from test/runtime/samples/component-slot-fallback-3/main.svelte rename to packages/svelte/test/runtime/samples/component-slot-fallback-3/main.svelte diff --git a/test/runtime/samples/component-slot-fallback-4/Inner.svelte b/packages/svelte/test/runtime/samples/component-slot-fallback-4/Inner.svelte similarity index 100% rename from test/runtime/samples/component-slot-fallback-4/Inner.svelte rename to packages/svelte/test/runtime/samples/component-slot-fallback-4/Inner.svelte diff --git a/test/runtime/samples/component-slot-fallback-4/_config.js b/packages/svelte/test/runtime/samples/component-slot-fallback-4/_config.js similarity index 100% rename from test/runtime/samples/component-slot-fallback-4/_config.js rename to packages/svelte/test/runtime/samples/component-slot-fallback-4/_config.js diff --git a/test/runtime/samples/component-slot-fallback-4/main.svelte b/packages/svelte/test/runtime/samples/component-slot-fallback-4/main.svelte similarity index 100% rename from test/runtime/samples/component-slot-fallback-4/main.svelte rename to packages/svelte/test/runtime/samples/component-slot-fallback-4/main.svelte diff --git a/test/runtime/samples/component-slot-fallback-5/IconA.svelte b/packages/svelte/test/runtime/samples/component-slot-fallback-5/IconA.svelte similarity index 100% rename from test/runtime/samples/component-slot-fallback-5/IconA.svelte rename to packages/svelte/test/runtime/samples/component-slot-fallback-5/IconA.svelte diff --git a/test/runtime/samples/component-slot-fallback-5/IconB.svelte b/packages/svelte/test/runtime/samples/component-slot-fallback-5/IconB.svelte similarity index 100% rename from test/runtime/samples/component-slot-fallback-5/IconB.svelte rename to packages/svelte/test/runtime/samples/component-slot-fallback-5/IconB.svelte diff --git a/test/runtime/samples/component-slot-fallback-5/Inner.svelte b/packages/svelte/test/runtime/samples/component-slot-fallback-5/Inner.svelte similarity index 100% rename from test/runtime/samples/component-slot-fallback-5/Inner.svelte rename to packages/svelte/test/runtime/samples/component-slot-fallback-5/Inner.svelte diff --git a/test/runtime/samples/component-slot-fallback-5/_config.js b/packages/svelte/test/runtime/samples/component-slot-fallback-5/_config.js similarity index 100% rename from test/runtime/samples/component-slot-fallback-5/_config.js rename to packages/svelte/test/runtime/samples/component-slot-fallback-5/_config.js diff --git a/test/runtime/samples/component-slot-fallback-5/main.svelte b/packages/svelte/test/runtime/samples/component-slot-fallback-5/main.svelte similarity index 100% rename from test/runtime/samples/component-slot-fallback-5/main.svelte rename to packages/svelte/test/runtime/samples/component-slot-fallback-5/main.svelte diff --git a/test/runtime/samples/component-slot-fallback-6/Foo.svelte b/packages/svelte/test/runtime/samples/component-slot-fallback-6/Foo.svelte similarity index 100% rename from test/runtime/samples/component-slot-fallback-6/Foo.svelte rename to packages/svelte/test/runtime/samples/component-slot-fallback-6/Foo.svelte diff --git a/test/runtime/samples/component-slot-fallback-6/Inner.svelte b/packages/svelte/test/runtime/samples/component-slot-fallback-6/Inner.svelte similarity index 100% rename from test/runtime/samples/component-slot-fallback-6/Inner.svelte rename to packages/svelte/test/runtime/samples/component-slot-fallback-6/Inner.svelte diff --git a/packages/svelte/test/runtime/samples/component-slot-fallback-6/_config.js b/packages/svelte/test/runtime/samples/component-slot-fallback-6/_config.js new file mode 100644 index 0000000000..25f2a90119 --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-slot-fallback-6/_config.js @@ -0,0 +1,25 @@ +// $$props reactivity in slot fallback +export default { + html: ` + + {"value":""} + `, + ssrHtml: ` + + {"value":""} + `, + + async test({ assert, target, window }) { + const input = target.querySelector('input'); + input.value = 'abc'; + await input.dispatchEvent(new window.Event('input')); + + assert.htmlEqual( + target.innerHTML, + ` + + {"value":"abc"} + ` + ); + } +}; diff --git a/test/runtime/samples/component-slot-fallback-6/main.svelte b/packages/svelte/test/runtime/samples/component-slot-fallback-6/main.svelte similarity index 100% rename from test/runtime/samples/component-slot-fallback-6/main.svelte rename to packages/svelte/test/runtime/samples/component-slot-fallback-6/main.svelte diff --git a/test/runtime/samples/component-slot-fallback-empty/Nested.svelte b/packages/svelte/test/runtime/samples/component-slot-fallback-empty/Nested.svelte similarity index 100% rename from test/runtime/samples/component-slot-fallback-empty/Nested.svelte rename to packages/svelte/test/runtime/samples/component-slot-fallback-empty/Nested.svelte diff --git a/test/runtime/samples/component-slot-fallback-empty/_config.js b/packages/svelte/test/runtime/samples/component-slot-fallback-empty/_config.js similarity index 100% rename from test/runtime/samples/component-slot-fallback-empty/_config.js rename to packages/svelte/test/runtime/samples/component-slot-fallback-empty/_config.js diff --git a/test/runtime/samples/component-slot-fallback-empty/main.svelte b/packages/svelte/test/runtime/samples/component-slot-fallback-empty/main.svelte similarity index 100% rename from test/runtime/samples/component-slot-fallback-empty/main.svelte rename to packages/svelte/test/runtime/samples/component-slot-fallback-empty/main.svelte diff --git a/test/runtime/samples/component-slot-fallback/Nested.svelte b/packages/svelte/test/runtime/samples/component-slot-fallback/Nested.svelte similarity index 100% rename from test/runtime/samples/component-slot-fallback/Nested.svelte rename to packages/svelte/test/runtime/samples/component-slot-fallback/Nested.svelte diff --git a/test/runtime/samples/component-slot-fallback/_config.js b/packages/svelte/test/runtime/samples/component-slot-fallback/_config.js similarity index 100% rename from test/runtime/samples/component-slot-fallback/_config.js rename to packages/svelte/test/runtime/samples/component-slot-fallback/_config.js diff --git a/test/runtime/samples/component-slot-fallback/main.svelte b/packages/svelte/test/runtime/samples/component-slot-fallback/main.svelte similarity index 100% rename from test/runtime/samples/component-slot-fallback/main.svelte rename to packages/svelte/test/runtime/samples/component-slot-fallback/main.svelte diff --git a/test/runtime/samples/component-slot-if-block-before-node/Nested.svelte b/packages/svelte/test/runtime/samples/component-slot-if-block-before-node/Nested.svelte similarity index 100% rename from test/runtime/samples/component-slot-if-block-before-node/Nested.svelte rename to packages/svelte/test/runtime/samples/component-slot-if-block-before-node/Nested.svelte diff --git a/packages/svelte/test/runtime/samples/component-slot-if-block-before-node/_config.js b/packages/svelte/test/runtime/samples/component-slot-if-block-before-node/_config.js new file mode 100644 index 0000000000..fc8e62db35 --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-slot-if-block-before-node/_config.js @@ -0,0 +1,19 @@ +export default { + html: ` +
+

unconditional

+
`, + + test({ assert, component, target }) { + component.foo = true; + assert.htmlEqual( + target.innerHTML, + ` +
+

conditional

+

unconditional

+
+ ` + ); + } +}; diff --git a/test/runtime/samples/component-slot-if-block-before-node/main.svelte b/packages/svelte/test/runtime/samples/component-slot-if-block-before-node/main.svelte similarity index 100% rename from test/runtime/samples/component-slot-if-block-before-node/main.svelte rename to packages/svelte/test/runtime/samples/component-slot-if-block-before-node/main.svelte diff --git a/test/runtime/samples/component-slot-if-block/Nested.svelte b/packages/svelte/test/runtime/samples/component-slot-if-block/Nested.svelte similarity index 100% rename from test/runtime/samples/component-slot-if-block/Nested.svelte rename to packages/svelte/test/runtime/samples/component-slot-if-block/Nested.svelte diff --git a/packages/svelte/test/runtime/samples/component-slot-if-block/_config.js b/packages/svelte/test/runtime/samples/component-slot-if-block/_config.js new file mode 100644 index 0000000000..dcd57edd66 --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-slot-if-block/_config.js @@ -0,0 +1,19 @@ +export default { + html: ` +
+

unconditional

+
`, + + test({ assert, component, target }) { + component.foo = true; + assert.htmlEqual( + target.innerHTML, + ` +
+

unconditional

+

conditional

+
+ ` + ); + } +}; diff --git a/test/runtime/samples/component-slot-if-block/main.svelte b/packages/svelte/test/runtime/samples/component-slot-if-block/main.svelte similarity index 100% rename from test/runtime/samples/component-slot-if-block/main.svelte rename to packages/svelte/test/runtime/samples/component-slot-if-block/main.svelte diff --git a/test/runtime/samples/component-slot-if-else-block-before-node/Nested.svelte b/packages/svelte/test/runtime/samples/component-slot-if-else-block-before-node/Nested.svelte similarity index 100% rename from test/runtime/samples/component-slot-if-else-block-before-node/Nested.svelte rename to packages/svelte/test/runtime/samples/component-slot-if-else-block-before-node/Nested.svelte diff --git a/packages/svelte/test/runtime/samples/component-slot-if-else-block-before-node/_config.js b/packages/svelte/test/runtime/samples/component-slot-if-else-block-before-node/_config.js new file mode 100644 index 0000000000..6c2e000a6c --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-slot-if-else-block-before-node/_config.js @@ -0,0 +1,16 @@ +export default { + html: ` +

disabled

+

unconditional

`, + + test({ assert, component, target }) { + component.enabled = true; + assert.htmlEqual( + target.innerHTML, + ` +

enabled

+

unconditional

+ ` + ); + } +}; diff --git a/test/runtime/samples/component-slot-if-else-block-before-node/main.svelte b/packages/svelte/test/runtime/samples/component-slot-if-else-block-before-node/main.svelte similarity index 100% rename from test/runtime/samples/component-slot-if-else-block-before-node/main.svelte rename to packages/svelte/test/runtime/samples/component-slot-if-else-block-before-node/main.svelte diff --git a/test/runtime/samples/component-slot-let-aliased/Nested.svelte b/packages/svelte/test/runtime/samples/component-slot-let-aliased/Nested.svelte similarity index 100% rename from test/runtime/samples/component-slot-let-aliased/Nested.svelte rename to packages/svelte/test/runtime/samples/component-slot-let-aliased/Nested.svelte diff --git a/packages/svelte/test/runtime/samples/component-slot-let-aliased/_config.js b/packages/svelte/test/runtime/samples/component-slot-let-aliased/_config.js new file mode 100644 index 0000000000..62a2db4f8a --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-slot-let-aliased/_config.js @@ -0,0 +1,27 @@ +export default { + get props() { + return { things: [1, 2, 3] }; + }, + + html: ` +
+ 1 + 2 + 3 +
`, + + test({ assert, component, target }) { + component.things = [1, 2, 3, 4]; + assert.htmlEqual( + target.innerHTML, + ` +
+ 1 + 2 + 3 + 4 +
+ ` + ); + } +}; diff --git a/test/runtime/samples/component-slot-let-aliased/main.svelte b/packages/svelte/test/runtime/samples/component-slot-let-aliased/main.svelte similarity index 100% rename from test/runtime/samples/component-slot-let-aliased/main.svelte rename to packages/svelte/test/runtime/samples/component-slot-let-aliased/main.svelte diff --git a/test/runtime/samples/component-slot-let-b/Nested.svelte b/packages/svelte/test/runtime/samples/component-slot-let-b/Nested.svelte similarity index 100% rename from test/runtime/samples/component-slot-let-b/Nested.svelte rename to packages/svelte/test/runtime/samples/component-slot-let-b/Nested.svelte diff --git a/packages/svelte/test/runtime/samples/component-slot-let-b/_config.js b/packages/svelte/test/runtime/samples/component-slot-let-b/_config.js new file mode 100644 index 0000000000..74bb7132fd --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-slot-let-b/_config.js @@ -0,0 +1,21 @@ +export default { + html: ` + + 0 + `, + + async test({ assert, target, window }) { + const button = target.querySelector('button'); + const click = new window.MouseEvent('click'); + + await button.dispatchEvent(click); + + assert.htmlEqual( + target.innerHTML, + ` + + 1 + ` + ); + } +}; diff --git a/test/runtime/samples/component-slot-let-b/main.svelte b/packages/svelte/test/runtime/samples/component-slot-let-b/main.svelte similarity index 100% rename from test/runtime/samples/component-slot-let-b/main.svelte rename to packages/svelte/test/runtime/samples/component-slot-let-b/main.svelte diff --git a/test/runtime/samples/component-slot-let-c/Nested.svelte b/packages/svelte/test/runtime/samples/component-slot-let-c/Nested.svelte similarity index 100% rename from test/runtime/samples/component-slot-let-c/Nested.svelte rename to packages/svelte/test/runtime/samples/component-slot-let-c/Nested.svelte diff --git a/packages/svelte/test/runtime/samples/component-slot-let-c/_config.js b/packages/svelte/test/runtime/samples/component-slot-let-c/_config.js new file mode 100644 index 0000000000..002fd18e41 --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-slot-let-c/_config.js @@ -0,0 +1,21 @@ +export default { + html: ` + + 0 (undefined) + `, + + async test({ assert, target, window }) { + const button = target.querySelector('button'); + const click = new window.MouseEvent('click'); + + await button.dispatchEvent(click); + + assert.htmlEqual( + target.innerHTML, + ` + + 1 (undefined) + ` + ); + } +}; diff --git a/test/runtime/samples/component-slot-let-c/main.svelte b/packages/svelte/test/runtime/samples/component-slot-let-c/main.svelte similarity index 100% rename from test/runtime/samples/component-slot-let-c/main.svelte rename to packages/svelte/test/runtime/samples/component-slot-let-c/main.svelte diff --git a/test/runtime/samples/component-slot-let-d/Nested.svelte b/packages/svelte/test/runtime/samples/component-slot-let-d/Nested.svelte similarity index 100% rename from test/runtime/samples/component-slot-let-d/Nested.svelte rename to packages/svelte/test/runtime/samples/component-slot-let-d/Nested.svelte diff --git a/packages/svelte/test/runtime/samples/component-slot-let-d/_config.js b/packages/svelte/test/runtime/samples/component-slot-let-d/_config.js new file mode 100644 index 0000000000..64d4e57849 --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-slot-let-d/_config.js @@ -0,0 +1,23 @@ +export default { + html: ` +
+

a

+
+ `, + + async test({ assert, target, window }) { + const div = target.querySelector('div'); + const click = new window.MouseEvent('click'); + + await div.dispatchEvent(click); + + assert.htmlEqual( + target.innerHTML, + ` +
+

b

+
+ ` + ); + } +}; diff --git a/test/runtime/samples/component-slot-let-d/main.svelte b/packages/svelte/test/runtime/samples/component-slot-let-d/main.svelte similarity index 100% rename from test/runtime/samples/component-slot-let-d/main.svelte rename to packages/svelte/test/runtime/samples/component-slot-let-d/main.svelte diff --git a/test/runtime/samples/component-slot-let-destructured-2/Nested.svelte b/packages/svelte/test/runtime/samples/component-slot-let-destructured-2/Nested.svelte similarity index 100% rename from test/runtime/samples/component-slot-let-destructured-2/Nested.svelte rename to packages/svelte/test/runtime/samples/component-slot-let-destructured-2/Nested.svelte diff --git a/packages/svelte/test/runtime/samples/component-slot-let-destructured-2/_config.js b/packages/svelte/test/runtime/samples/component-slot-let-destructured-2/_config.js new file mode 100644 index 0000000000..95aaf168a3 --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-slot-let-destructured-2/_config.js @@ -0,0 +1,77 @@ +export default { + html: ` +
+ hello world 0 hello + +
+
+ hello world 0 hello + +
+
+ hello world 0 hello + +
+ `, + async test({ assert, target, window }) { + const [button1, button2, button3] = target.querySelectorAll('button'); + const event = new window.MouseEvent('click'); + + await button1.dispatchEvent(event); + assert.htmlEqual( + target.innerHTML, + ` +
+ hello world 1 hello + +
+
+ hello world 0 hello + +
+
+ hello world 0 hello + +
+ ` + ); + + await button2.dispatchEvent(event); + assert.htmlEqual( + target.innerHTML, + ` +
+ hello world 1 hello + +
+
+ hello world 1 hello + +
+
+ hello world 0 hello + +
+ ` + ); + + await button3.dispatchEvent(event); + assert.htmlEqual( + target.innerHTML, + ` +
+ hello world 1 hello + +
+
+ hello world 1 hello + +
+
+ hello world 1 hello + +
+ ` + ); + } +}; diff --git a/test/runtime/samples/component-slot-let-destructured-2/main.svelte b/packages/svelte/test/runtime/samples/component-slot-let-destructured-2/main.svelte similarity index 100% rename from test/runtime/samples/component-slot-let-destructured-2/main.svelte rename to packages/svelte/test/runtime/samples/component-slot-let-destructured-2/main.svelte diff --git a/test/runtime/samples/component-slot-let-destructured/Nested.svelte b/packages/svelte/test/runtime/samples/component-slot-let-destructured/Nested.svelte similarity index 100% rename from test/runtime/samples/component-slot-let-destructured/Nested.svelte rename to packages/svelte/test/runtime/samples/component-slot-let-destructured/Nested.svelte diff --git a/packages/svelte/test/runtime/samples/component-slot-let-destructured/_config.js b/packages/svelte/test/runtime/samples/component-slot-let-destructured/_config.js new file mode 100644 index 0000000000..b769ac0cf1 --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-slot-let-destructured/_config.js @@ -0,0 +1,30 @@ +export default { + get props() { + return { + things: [{ num: 1 }, { num: 2 }, { num: 3 }] + }; + }, + + html: ` +
+ 1 + 2 + 3 +
`, + + test({ assert, component, target }) { + component.things = [{ num: 1 }, { num: 2 }, { num: 3 }, { num: 4 }]; + + assert.htmlEqual( + target.innerHTML, + ` +
+ 1 + 2 + 3 + 4 +
+ ` + ); + } +}; diff --git a/test/runtime/samples/component-slot-let-destructured/main.svelte b/packages/svelte/test/runtime/samples/component-slot-let-destructured/main.svelte similarity index 100% rename from test/runtime/samples/component-slot-let-destructured/main.svelte rename to packages/svelte/test/runtime/samples/component-slot-let-destructured/main.svelte diff --git a/test/runtime/samples/component-slot-let-e/Nested.svelte b/packages/svelte/test/runtime/samples/component-slot-let-e/Nested.svelte similarity index 100% rename from test/runtime/samples/component-slot-let-e/Nested.svelte rename to packages/svelte/test/runtime/samples/component-slot-let-e/Nested.svelte diff --git a/packages/svelte/test/runtime/samples/component-slot-let-e/_config.js b/packages/svelte/test/runtime/samples/component-slot-let-e/_config.js new file mode 100644 index 0000000000..6c3cac4374 --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-slot-let-e/_config.js @@ -0,0 +1,23 @@ +export default { + html: ` +
+

foo

+
+ `, + + async test({ assert, target, window }) { + const div = target.querySelector('div'); + const click = new window.MouseEvent('click'); + + await div.dispatchEvent(click); + + assert.htmlEqual( + target.innerHTML, + ` +
+

foo

+
+ ` + ); + } +}; diff --git a/test/runtime/samples/component-slot-let-e/main.svelte b/packages/svelte/test/runtime/samples/component-slot-let-e/main.svelte similarity index 100% rename from test/runtime/samples/component-slot-let-e/main.svelte rename to packages/svelte/test/runtime/samples/component-slot-let-e/main.svelte diff --git a/test/runtime/samples/component-slot-let-f/A.svelte b/packages/svelte/test/runtime/samples/component-slot-let-f/A.svelte similarity index 100% rename from test/runtime/samples/component-slot-let-f/A.svelte rename to packages/svelte/test/runtime/samples/component-slot-let-f/A.svelte diff --git a/test/runtime/samples/component-slot-let-f/B.svelte b/packages/svelte/test/runtime/samples/component-slot-let-f/B.svelte similarity index 100% rename from test/runtime/samples/component-slot-let-f/B.svelte rename to packages/svelte/test/runtime/samples/component-slot-let-f/B.svelte diff --git a/packages/svelte/test/runtime/samples/component-slot-let-f/_config.js b/packages/svelte/test/runtime/samples/component-slot-let-f/_config.js new file mode 100644 index 0000000000..1ececbb3ef --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-slot-let-f/_config.js @@ -0,0 +1,18 @@ +export default { + html: ` + 1 + 1 + `, + + async test({ assert, target, component }) { + component.x = 2; + + assert.htmlEqual( + target.innerHTML, + ` + 2 + 2 + ` + ); + } +}; diff --git a/test/runtime/samples/component-slot-let-f/main.svelte b/packages/svelte/test/runtime/samples/component-slot-let-f/main.svelte similarity index 100% rename from test/runtime/samples/component-slot-let-f/main.svelte rename to packages/svelte/test/runtime/samples/component-slot-let-f/main.svelte diff --git a/test/runtime/samples/component-slot-let-g/A.svelte b/packages/svelte/test/runtime/samples/component-slot-let-g/A.svelte similarity index 100% rename from test/runtime/samples/component-slot-let-g/A.svelte rename to packages/svelte/test/runtime/samples/component-slot-let-g/A.svelte diff --git a/packages/svelte/test/runtime/samples/component-slot-let-g/_config.js b/packages/svelte/test/runtime/samples/component-slot-let-g/_config.js new file mode 100644 index 0000000000..a9489f62c5 --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-slot-let-g/_config.js @@ -0,0 +1,28 @@ +export default { + html: ` + 1 + 0 + `, + async test({ assert, target, component, window }) { + component.x = 2; + + assert.htmlEqual( + target.innerHTML, + ` + 2 + 0 + ` + ); + + const span = target.querySelector('span'); + await span.dispatchEvent(new window.MouseEvent('click')); + + assert.htmlEqual( + target.innerHTML, + ` + 2 + 2 + ` + ); + } +}; diff --git a/test/runtime/samples/component-slot-let-g/main.svelte b/packages/svelte/test/runtime/samples/component-slot-let-g/main.svelte similarity index 100% rename from test/runtime/samples/component-slot-let-g/main.svelte rename to packages/svelte/test/runtime/samples/component-slot-let-g/main.svelte diff --git a/test/runtime/samples/component-slot-let-in-binding/Nested.svelte b/packages/svelte/test/runtime/samples/component-slot-let-in-binding/Nested.svelte similarity index 100% rename from test/runtime/samples/component-slot-let-in-binding/Nested.svelte rename to packages/svelte/test/runtime/samples/component-slot-let-in-binding/Nested.svelte diff --git a/test/runtime/samples/component-slot-let-in-binding/_config.js b/packages/svelte/test/runtime/samples/component-slot-let-in-binding/_config.js similarity index 100% rename from test/runtime/samples/component-slot-let-in-binding/_config.js rename to packages/svelte/test/runtime/samples/component-slot-let-in-binding/_config.js diff --git a/test/runtime/samples/component-slot-let-in-binding/main.svelte b/packages/svelte/test/runtime/samples/component-slot-let-in-binding/main.svelte similarity index 100% rename from test/runtime/samples/component-slot-let-in-binding/main.svelte rename to packages/svelte/test/runtime/samples/component-slot-let-in-binding/main.svelte diff --git a/test/runtime/samples/component-slot-let-in-slot-2/Inner.svelte b/packages/svelte/test/runtime/samples/component-slot-let-in-slot-2/Inner.svelte similarity index 100% rename from test/runtime/samples/component-slot-let-in-slot-2/Inner.svelte rename to packages/svelte/test/runtime/samples/component-slot-let-in-slot-2/Inner.svelte diff --git a/test/runtime/samples/component-slot-let-in-slot-2/Outer.svelte b/packages/svelte/test/runtime/samples/component-slot-let-in-slot-2/Outer.svelte similarity index 100% rename from test/runtime/samples/component-slot-let-in-slot-2/Outer.svelte rename to packages/svelte/test/runtime/samples/component-slot-let-in-slot-2/Outer.svelte diff --git a/packages/svelte/test/runtime/samples/component-slot-let-in-slot-2/_config.js b/packages/svelte/test/runtime/samples/component-slot-let-in-slot-2/_config.js new file mode 100644 index 0000000000..121a31f9ee --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-slot-let-in-slot-2/_config.js @@ -0,0 +1,24 @@ +let logs; +function log(value) { + logs.push(value); +} + +export default { + get props() { + return { prop: 'a', log }; + }, + html: '', + before_test() { + logs = []; + }, + async test({ assert, component, target, window }) { + const button = target.querySelector('button'); + await button.dispatchEvent(new window.MouseEvent('click')); + + assert.deepEqual(logs, ['a']); + + component.prop = 'b'; + await button.dispatchEvent(new window.MouseEvent('click')); + assert.deepEqual(logs, ['a', 'b']); + } +}; diff --git a/test/runtime/samples/component-slot-let-in-slot-2/main.svelte b/packages/svelte/test/runtime/samples/component-slot-let-in-slot-2/main.svelte similarity index 100% rename from test/runtime/samples/component-slot-let-in-slot-2/main.svelte rename to packages/svelte/test/runtime/samples/component-slot-let-in-slot-2/main.svelte diff --git a/test/runtime/samples/component-slot-let-in-slot/Inner.svelte b/packages/svelte/test/runtime/samples/component-slot-let-in-slot/Inner.svelte similarity index 100% rename from test/runtime/samples/component-slot-let-in-slot/Inner.svelte rename to packages/svelte/test/runtime/samples/component-slot-let-in-slot/Inner.svelte diff --git a/test/runtime/samples/component-slot-let-in-slot/Outer.svelte b/packages/svelte/test/runtime/samples/component-slot-let-in-slot/Outer.svelte similarity index 100% rename from test/runtime/samples/component-slot-let-in-slot/Outer.svelte rename to packages/svelte/test/runtime/samples/component-slot-let-in-slot/Outer.svelte diff --git a/packages/svelte/test/runtime/samples/component-slot-let-in-slot/_config.js b/packages/svelte/test/runtime/samples/component-slot-let-in-slot/_config.js new file mode 100644 index 0000000000..45a521b1c2 --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-slot-let-in-slot/_config.js @@ -0,0 +1,12 @@ +export default { + get props() { + return { prop: 'a' }; + }, + + html: 'a', + + test({ assert, component, target }) { + component.prop = 'b'; + assert.htmlEqual(target.innerHTML, 'b'); + } +}; diff --git a/test/runtime/samples/component-slot-let-in-slot/main.svelte b/packages/svelte/test/runtime/samples/component-slot-let-in-slot/main.svelte similarity index 100% rename from test/runtime/samples/component-slot-let-in-slot/main.svelte rename to packages/svelte/test/runtime/samples/component-slot-let-in-slot/main.svelte diff --git a/test/runtime/samples/component-slot-let-inline-function/Inner.svelte b/packages/svelte/test/runtime/samples/component-slot-let-inline-function/Inner.svelte similarity index 100% rename from test/runtime/samples/component-slot-let-inline-function/Inner.svelte rename to packages/svelte/test/runtime/samples/component-slot-let-inline-function/Inner.svelte diff --git a/test/runtime/samples/component-slot-let-inline-function/Outer.svelte b/packages/svelte/test/runtime/samples/component-slot-let-inline-function/Outer.svelte similarity index 100% rename from test/runtime/samples/component-slot-let-inline-function/Outer.svelte rename to packages/svelte/test/runtime/samples/component-slot-let-inline-function/Outer.svelte diff --git a/packages/svelte/test/runtime/samples/component-slot-let-inline-function/_config.js b/packages/svelte/test/runtime/samples/component-slot-let-inline-function/_config.js new file mode 100644 index 0000000000..dbcfff473e --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-slot-let-inline-function/_config.js @@ -0,0 +1,25 @@ +let logs; +function log(value) { + logs.push(value); +} + +export default { + html: '', + get props() { + return { a: 'a', b: 'b', log }; + }, + before_test() { + logs = []; + }, + async test({ assert, component, target, window }) { + const button = target.querySelector('button'); + await button.dispatchEvent(new window.MouseEvent('click')); + + assert.deepEqual(logs, ['a: a, b: b']); + + component.a = '1'; + component.b = '2'; + await button.dispatchEvent(new window.MouseEvent('click')); + assert.deepEqual(logs, ['a: a, b: b', 'a: 1, b: 2']); + } +}; diff --git a/test/runtime/samples/component-slot-let-inline-function/main.svelte b/packages/svelte/test/runtime/samples/component-slot-let-inline-function/main.svelte similarity index 100% rename from test/runtime/samples/component-slot-let-inline-function/main.svelte rename to packages/svelte/test/runtime/samples/component-slot-let-inline-function/main.svelte diff --git a/test/runtime/samples/component-slot-let-missing-prop/Bar.svelte b/packages/svelte/test/runtime/samples/component-slot-let-missing-prop/Bar.svelte similarity index 100% rename from test/runtime/samples/component-slot-let-missing-prop/Bar.svelte rename to packages/svelte/test/runtime/samples/component-slot-let-missing-prop/Bar.svelte diff --git a/test/runtime/samples/component-slot-let-missing-prop/Foo.svelte b/packages/svelte/test/runtime/samples/component-slot-let-missing-prop/Foo.svelte similarity index 100% rename from test/runtime/samples/component-slot-let-missing-prop/Foo.svelte rename to packages/svelte/test/runtime/samples/component-slot-let-missing-prop/Foo.svelte diff --git a/test/runtime/samples/component-slot-let-missing-prop/_config.js b/packages/svelte/test/runtime/samples/component-slot-let-missing-prop/_config.js similarity index 100% rename from test/runtime/samples/component-slot-let-missing-prop/_config.js rename to packages/svelte/test/runtime/samples/component-slot-let-missing-prop/_config.js diff --git a/test/runtime/samples/component-slot-let-missing-prop/main.svelte b/packages/svelte/test/runtime/samples/component-slot-let-missing-prop/main.svelte similarity index 100% rename from test/runtime/samples/component-slot-let-missing-prop/main.svelte rename to packages/svelte/test/runtime/samples/component-slot-let-missing-prop/main.svelte diff --git a/test/runtime/samples/component-slot-let-named/Nested.svelte b/packages/svelte/test/runtime/samples/component-slot-let-named/Nested.svelte similarity index 100% rename from test/runtime/samples/component-slot-let-named/Nested.svelte rename to packages/svelte/test/runtime/samples/component-slot-let-named/Nested.svelte diff --git a/packages/svelte/test/runtime/samples/component-slot-let-named/_config.js b/packages/svelte/test/runtime/samples/component-slot-let-named/_config.js new file mode 100644 index 0000000000..75fd25f2c7 --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-slot-let-named/_config.js @@ -0,0 +1,27 @@ +export default { + get props() { + return { things: [1, 2, 3] }; + }, + + html: ` +
+
1
+
2
+
3
+
`, + + test({ assert, component, target }) { + component.things = [1, 2, 3, 4]; + assert.htmlEqual( + target.innerHTML, + ` +
+
1
+
2
+
3
+
4
+
+ ` + ); + } +}; diff --git a/test/runtime/samples/component-slot-let-named/main.svelte b/packages/svelte/test/runtime/samples/component-slot-let-named/main.svelte similarity index 100% rename from test/runtime/samples/component-slot-let-named/main.svelte rename to packages/svelte/test/runtime/samples/component-slot-let-named/main.svelte diff --git a/packages/svelte/test/runtime/samples/component-slot-let-scope-2/Nested.svelte b/packages/svelte/test/runtime/samples/component-slot-let-scope-2/Nested.svelte new file mode 100644 index 0000000000..e231bf1a7f --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-slot-let-scope-2/Nested.svelte @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/packages/svelte/test/runtime/samples/component-slot-let-scope-2/_config.js b/packages/svelte/test/runtime/samples/component-slot-let-scope-2/_config.js new file mode 100644 index 0000000000..6b2059f03d --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-slot-let-scope-2/_config.js @@ -0,0 +1,3 @@ +export default { + html: 'undefined2' +}; diff --git a/packages/svelte/test/runtime/samples/component-slot-let-scope-2/main.svelte b/packages/svelte/test/runtime/samples/component-slot-let-scope-2/main.svelte new file mode 100644 index 0000000000..8454c4acd1 --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-slot-let-scope-2/main.svelte @@ -0,0 +1,8 @@ + + + + {thing} + {thing} + \ No newline at end of file diff --git a/packages/svelte/test/runtime/samples/component-slot-let-scope-3/Nested.svelte b/packages/svelte/test/runtime/samples/component-slot-let-scope-3/Nested.svelte new file mode 100644 index 0000000000..cecce8db01 --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-slot-let-scope-3/Nested.svelte @@ -0,0 +1,15 @@ + + +
+ + + + + +
\ No newline at end of file diff --git a/packages/svelte/test/runtime/samples/component-slot-let-scope-3/_config.js b/packages/svelte/test/runtime/samples/component-slot-let-scope-3/_config.js new file mode 100644 index 0000000000..be22fd5d08 --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-slot-let-scope-3/_config.js @@ -0,0 +1,28 @@ +export default { + html: ` +
+

count in default slot: 0

+

count in foo slot: 0

+

count in bar slot: 42

+ +
+ `, + + async test({ assert, target, window }) { + const button = target.querySelector('button'); + + await button.dispatchEvent(new window.MouseEvent('click')); + + assert.htmlEqual( + target.innerHTML, + ` +
+

count in default slot: 1

+

count in foo slot: 1

+

count in bar slot: 42

+ +
+ ` + ); + } +}; diff --git a/packages/svelte/test/runtime/samples/component-slot-let-scope-3/main.svelte b/packages/svelte/test/runtime/samples/component-slot-let-scope-3/main.svelte new file mode 100644 index 0000000000..5e7d3def54 --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-slot-let-scope-3/main.svelte @@ -0,0 +1,18 @@ + + + +

+ count in default slot: {count} +

+ +

+ count in foo slot: {count} +

+ +

+ count in bar slot: {count} +

+
\ No newline at end of file diff --git a/packages/svelte/test/runtime/samples/component-slot-let-scope/Nested.svelte b/packages/svelte/test/runtime/samples/component-slot-let-scope/Nested.svelte new file mode 100644 index 0000000000..772955e06e --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-slot-let-scope/Nested.svelte @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/packages/svelte/test/runtime/samples/component-slot-let-scope/_config.js b/packages/svelte/test/runtime/samples/component-slot-let-scope/_config.js new file mode 100644 index 0000000000..c0f4d29305 --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-slot-let-scope/_config.js @@ -0,0 +1,3 @@ +export default { + error: 'thing is not defined' +}; diff --git a/packages/svelte/test/runtime/samples/component-slot-let-scope/main.svelte b/packages/svelte/test/runtime/samples/component-slot-let-scope/main.svelte new file mode 100644 index 0000000000..e10a9a8584 --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-slot-let-scope/main.svelte @@ -0,0 +1,8 @@ + + + + {thing} + \ No newline at end of file diff --git a/test/runtime/samples/component-slot-duplicate-error-2/Nested.svelte b/packages/svelte/test/runtime/samples/component-slot-let-static/Nested.svelte similarity index 100% rename from test/runtime/samples/component-slot-duplicate-error-2/Nested.svelte rename to packages/svelte/test/runtime/samples/component-slot-let-static/Nested.svelte diff --git a/test/runtime/samples/component-slot-let-static/_config.js b/packages/svelte/test/runtime/samples/component-slot-let-static/_config.js similarity index 100% rename from test/runtime/samples/component-slot-let-static/_config.js rename to packages/svelte/test/runtime/samples/component-slot-let-static/_config.js diff --git a/test/runtime/samples/component-slot-let-static/main.svelte b/packages/svelte/test/runtime/samples/component-slot-let-static/main.svelte similarity index 100% rename from test/runtime/samples/component-slot-let-static/main.svelte rename to packages/svelte/test/runtime/samples/component-slot-let-static/main.svelte diff --git a/test/runtime/samples/component-slot-let/Nested.svelte b/packages/svelte/test/runtime/samples/component-slot-let/Nested.svelte similarity index 100% rename from test/runtime/samples/component-slot-let/Nested.svelte rename to packages/svelte/test/runtime/samples/component-slot-let/Nested.svelte diff --git a/packages/svelte/test/runtime/samples/component-slot-let/_config.js b/packages/svelte/test/runtime/samples/component-slot-let/_config.js new file mode 100644 index 0000000000..62a2db4f8a --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-slot-let/_config.js @@ -0,0 +1,27 @@ +export default { + get props() { + return { things: [1, 2, 3] }; + }, + + html: ` +
+ 1 + 2 + 3 +
`, + + test({ assert, component, target }) { + component.things = [1, 2, 3, 4]; + assert.htmlEqual( + target.innerHTML, + ` +
+ 1 + 2 + 3 + 4 +
+ ` + ); + } +}; diff --git a/test/runtime/samples/component-slot-let/main.svelte b/packages/svelte/test/runtime/samples/component-slot-let/main.svelte similarity index 100% rename from test/runtime/samples/component-slot-let/main.svelte rename to packages/svelte/test/runtime/samples/component-slot-let/main.svelte diff --git a/test/runtime/samples/component-slot-name-with-hyphen/Nested.svelte b/packages/svelte/test/runtime/samples/component-slot-name-with-hyphen/Nested.svelte similarity index 100% rename from test/runtime/samples/component-slot-name-with-hyphen/Nested.svelte rename to packages/svelte/test/runtime/samples/component-slot-name-with-hyphen/Nested.svelte diff --git a/test/runtime/samples/component-slot-name-with-hyphen/_config.js b/packages/svelte/test/runtime/samples/component-slot-name-with-hyphen/_config.js similarity index 100% rename from test/runtime/samples/component-slot-name-with-hyphen/_config.js rename to packages/svelte/test/runtime/samples/component-slot-name-with-hyphen/_config.js diff --git a/test/runtime/samples/component-slot-name-with-hyphen/main.svelte b/packages/svelte/test/runtime/samples/component-slot-name-with-hyphen/main.svelte similarity index 100% rename from test/runtime/samples/component-slot-name-with-hyphen/main.svelte rename to packages/svelte/test/runtime/samples/component-slot-name-with-hyphen/main.svelte diff --git a/test/runtime/samples/component-slot-named-b/Nested.svelte b/packages/svelte/test/runtime/samples/component-slot-named-b/Nested.svelte similarity index 100% rename from test/runtime/samples/component-slot-named-b/Nested.svelte rename to packages/svelte/test/runtime/samples/component-slot-named-b/Nested.svelte diff --git a/test/runtime/samples/component-slot-named-b/_config.js b/packages/svelte/test/runtime/samples/component-slot-named-b/_config.js similarity index 100% rename from test/runtime/samples/component-slot-named-b/_config.js rename to packages/svelte/test/runtime/samples/component-slot-named-b/_config.js diff --git a/test/runtime/samples/component-slot-named-b/main.svelte b/packages/svelte/test/runtime/samples/component-slot-named-b/main.svelte similarity index 100% rename from test/runtime/samples/component-slot-named-b/main.svelte rename to packages/svelte/test/runtime/samples/component-slot-named-b/main.svelte diff --git a/test/runtime/samples/component-slot-named-c/Nested.svelte b/packages/svelte/test/runtime/samples/component-slot-named-c/Nested.svelte similarity index 100% rename from test/runtime/samples/component-slot-named-c/Nested.svelte rename to packages/svelte/test/runtime/samples/component-slot-named-c/Nested.svelte diff --git a/test/runtime/samples/component-slot-named-c/_config.js b/packages/svelte/test/runtime/samples/component-slot-named-c/_config.js similarity index 100% rename from test/runtime/samples/component-slot-named-c/_config.js rename to packages/svelte/test/runtime/samples/component-slot-named-c/_config.js diff --git a/test/runtime/samples/component-slot-named-c/main.svelte b/packages/svelte/test/runtime/samples/component-slot-named-c/main.svelte similarity index 100% rename from test/runtime/samples/component-slot-named-c/main.svelte rename to packages/svelte/test/runtime/samples/component-slot-named-c/main.svelte diff --git a/test/runtime/samples/component-slot-named/Nested.svelte b/packages/svelte/test/runtime/samples/component-slot-named/Nested.svelte similarity index 100% rename from test/runtime/samples/component-slot-named/Nested.svelte rename to packages/svelte/test/runtime/samples/component-slot-named/Nested.svelte diff --git a/test/runtime/samples/component-slot-named/_config.js b/packages/svelte/test/runtime/samples/component-slot-named/_config.js similarity index 100% rename from test/runtime/samples/component-slot-named/_config.js rename to packages/svelte/test/runtime/samples/component-slot-named/_config.js diff --git a/test/runtime/samples/component-slot-named/main.svelte b/packages/svelte/test/runtime/samples/component-slot-named/main.svelte similarity index 100% rename from test/runtime/samples/component-slot-named/main.svelte rename to packages/svelte/test/runtime/samples/component-slot-named/main.svelte diff --git a/test/runtime/samples/component-slot-names-sanitized/Nested.svelte b/packages/svelte/test/runtime/samples/component-slot-names-sanitized/Nested.svelte similarity index 100% rename from test/runtime/samples/component-slot-names-sanitized/Nested.svelte rename to packages/svelte/test/runtime/samples/component-slot-names-sanitized/Nested.svelte diff --git a/test/runtime/samples/component-slot-names-sanitized/_config.js b/packages/svelte/test/runtime/samples/component-slot-names-sanitized/_config.js similarity index 100% rename from test/runtime/samples/component-slot-names-sanitized/_config.js rename to packages/svelte/test/runtime/samples/component-slot-names-sanitized/_config.js diff --git a/test/runtime/samples/component-slot-names-sanitized/main.svelte b/packages/svelte/test/runtime/samples/component-slot-names-sanitized/main.svelte similarity index 100% rename from test/runtime/samples/component-slot-names-sanitized/main.svelte rename to packages/svelte/test/runtime/samples/component-slot-names-sanitized/main.svelte diff --git a/test/runtime/samples/component-slot-nested-component/Inner.svelte b/packages/svelte/test/runtime/samples/component-slot-nested-component/Inner.svelte similarity index 100% rename from test/runtime/samples/component-slot-nested-component/Inner.svelte rename to packages/svelte/test/runtime/samples/component-slot-nested-component/Inner.svelte diff --git a/test/runtime/samples/component-slot-nested-component/Outer.svelte b/packages/svelte/test/runtime/samples/component-slot-nested-component/Outer.svelte similarity index 100% rename from test/runtime/samples/component-slot-nested-component/Outer.svelte rename to packages/svelte/test/runtime/samples/component-slot-nested-component/Outer.svelte diff --git a/test/runtime/samples/component-slot-nested-component/_config.js b/packages/svelte/test/runtime/samples/component-slot-nested-component/_config.js similarity index 100% rename from test/runtime/samples/component-slot-nested-component/_config.js rename to packages/svelte/test/runtime/samples/component-slot-nested-component/_config.js diff --git a/test/runtime/samples/component-slot-nested-component/main.svelte b/packages/svelte/test/runtime/samples/component-slot-nested-component/main.svelte similarity index 100% rename from test/runtime/samples/component-slot-nested-component/main.svelte rename to packages/svelte/test/runtime/samples/component-slot-nested-component/main.svelte diff --git a/test/runtime/samples/component-slot-nested-if/Display.svelte b/packages/svelte/test/runtime/samples/component-slot-nested-if/Display.svelte similarity index 100% rename from test/runtime/samples/component-slot-nested-if/Display.svelte rename to packages/svelte/test/runtime/samples/component-slot-nested-if/Display.svelte diff --git a/test/runtime/samples/component-slot-nested-if/Input.svelte b/packages/svelte/test/runtime/samples/component-slot-nested-if/Input.svelte similarity index 100% rename from test/runtime/samples/component-slot-nested-if/Input.svelte rename to packages/svelte/test/runtime/samples/component-slot-nested-if/Input.svelte diff --git a/test/runtime/samples/component-slot-nested-if/_config.js b/packages/svelte/test/runtime/samples/component-slot-nested-if/_config.js similarity index 100% rename from test/runtime/samples/component-slot-nested-if/_config.js rename to packages/svelte/test/runtime/samples/component-slot-nested-if/_config.js diff --git a/test/runtime/samples/component-slot-nested-if/main.svelte b/packages/svelte/test/runtime/samples/component-slot-nested-if/main.svelte similarity index 100% rename from test/runtime/samples/component-slot-nested-if/main.svelte rename to packages/svelte/test/runtime/samples/component-slot-nested-if/main.svelte diff --git a/test/runtime/samples/component-slot-nested-in-element/One.svelte b/packages/svelte/test/runtime/samples/component-slot-nested-in-element/One.svelte similarity index 100% rename from test/runtime/samples/component-slot-nested-in-element/One.svelte rename to packages/svelte/test/runtime/samples/component-slot-nested-in-element/One.svelte diff --git a/test/runtime/samples/component-slot-nested-in-element/Two.svelte b/packages/svelte/test/runtime/samples/component-slot-nested-in-element/Two.svelte similarity index 100% rename from test/runtime/samples/component-slot-nested-in-element/Two.svelte rename to packages/svelte/test/runtime/samples/component-slot-nested-in-element/Two.svelte diff --git a/test/runtime/samples/component-slot-nested-in-element/_config.js b/packages/svelte/test/runtime/samples/component-slot-nested-in-element/_config.js similarity index 100% rename from test/runtime/samples/component-slot-nested-in-element/_config.js rename to packages/svelte/test/runtime/samples/component-slot-nested-in-element/_config.js diff --git a/test/runtime/samples/component-slot-nested-in-element/main.svelte b/packages/svelte/test/runtime/samples/component-slot-nested-in-element/main.svelte similarity index 100% rename from test/runtime/samples/component-slot-nested-in-element/main.svelte rename to packages/svelte/test/runtime/samples/component-slot-nested-in-element/main.svelte diff --git a/packages/svelte/test/runtime/samples/component-slot-nested-in-slot/One.svelte b/packages/svelte/test/runtime/samples/component-slot-nested-in-slot/One.svelte new file mode 100644 index 0000000000..acb6a03358 --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-slot-nested-in-slot/One.svelte @@ -0,0 +1,10 @@ + + + + + + + diff --git a/test/runtime/samples/component-slot-nested-in-slot/Two.svelte b/packages/svelte/test/runtime/samples/component-slot-nested-in-slot/Two.svelte similarity index 100% rename from test/runtime/samples/component-slot-nested-in-slot/Two.svelte rename to packages/svelte/test/runtime/samples/component-slot-nested-in-slot/Two.svelte diff --git a/packages/svelte/test/runtime/samples/component-slot-nested-in-slot/_config.js b/packages/svelte/test/runtime/samples/component-slot-nested-in-slot/_config.js new file mode 100644 index 0000000000..1af084fc6c --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-slot-nested-in-slot/_config.js @@ -0,0 +1,24 @@ +export default { + html: ` +

one: 1 two: 2

+ `, + test({ assert, component, target }) { + component.a = 3; + component.b = 4; + assert.htmlEqual( + target.innerHTML, + ` +

one: 3 two: 4

+ ` + ); + + component.a = 5; + component.b = 6; + assert.htmlEqual( + target.innerHTML, + ` +

one: 5 two: 6

+ ` + ); + } +}; diff --git a/test/runtime/samples/component-slot-nested-in-slot/main.svelte b/packages/svelte/test/runtime/samples/component-slot-nested-in-slot/main.svelte similarity index 100% rename from test/runtime/samples/component-slot-nested-in-slot/main.svelte rename to packages/svelte/test/runtime/samples/component-slot-nested-in-slot/main.svelte diff --git a/test/runtime/samples/component-slot-nested/Nested.svelte b/packages/svelte/test/runtime/samples/component-slot-nested/Nested.svelte similarity index 100% rename from test/runtime/samples/component-slot-nested/Nested.svelte rename to packages/svelte/test/runtime/samples/component-slot-nested/Nested.svelte diff --git a/test/runtime/samples/component-slot-nested/_config.js b/packages/svelte/test/runtime/samples/component-slot-nested/_config.js similarity index 100% rename from test/runtime/samples/component-slot-nested/_config.js rename to packages/svelte/test/runtime/samples/component-slot-nested/_config.js diff --git a/test/runtime/samples/component-slot-nested/main.svelte b/packages/svelte/test/runtime/samples/component-slot-nested/main.svelte similarity index 100% rename from test/runtime/samples/component-slot-nested/main.svelte rename to packages/svelte/test/runtime/samples/component-slot-nested/main.svelte diff --git a/test/runtime/samples/component-slot-slot/Component.svelte b/packages/svelte/test/runtime/samples/component-slot-slot/Component.svelte similarity index 100% rename from test/runtime/samples/component-slot-slot/Component.svelte rename to packages/svelte/test/runtime/samples/component-slot-slot/Component.svelte diff --git a/test/runtime/samples/component-slot-slot/Forward.svelte b/packages/svelte/test/runtime/samples/component-slot-slot/Forward.svelte similarity index 100% rename from test/runtime/samples/component-slot-slot/Forward.svelte rename to packages/svelte/test/runtime/samples/component-slot-slot/Forward.svelte diff --git a/test/runtime/samples/component-slot-slot/_config.js b/packages/svelte/test/runtime/samples/component-slot-slot/_config.js similarity index 100% rename from test/runtime/samples/component-slot-slot/_config.js rename to packages/svelte/test/runtime/samples/component-slot-slot/_config.js diff --git a/test/runtime/samples/component-slot-slot/main.svelte b/packages/svelte/test/runtime/samples/component-slot-slot/main.svelte similarity index 100% rename from test/runtime/samples/component-slot-slot/main.svelte rename to packages/svelte/test/runtime/samples/component-slot-slot/main.svelte diff --git a/test/runtime/samples/component-slot-spread-props/Nested.svelte b/packages/svelte/test/runtime/samples/component-slot-spread-props/Nested.svelte similarity index 100% rename from test/runtime/samples/component-slot-spread-props/Nested.svelte rename to packages/svelte/test/runtime/samples/component-slot-spread-props/Nested.svelte diff --git a/packages/svelte/test/runtime/samples/component-slot-spread-props/_config.js b/packages/svelte/test/runtime/samples/component-slot-spread-props/_config.js new file mode 100644 index 0000000000..05e3f5ebfb --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-slot-spread-props/_config.js @@ -0,0 +1,28 @@ +export default { + html: ` +
+ +
+
+ `, + ssrHtml: ` +
+ +
+
+ `, + + async test({ assert, component, target }) { + component.value = 'foo'; + + assert.htmlEqual( + target.innerHTML, + ` +
+ +
+
+ ` + ); + } +}; diff --git a/test/runtime/samples/component-slot-spread-props/main.svelte b/packages/svelte/test/runtime/samples/component-slot-spread-props/main.svelte similarity index 100% rename from test/runtime/samples/component-slot-spread-props/main.svelte rename to packages/svelte/test/runtime/samples/component-slot-spread-props/main.svelte diff --git a/test/runtime/samples/component-slot-spread/Nested.svelte b/packages/svelte/test/runtime/samples/component-slot-spread/Nested.svelte similarity index 100% rename from test/runtime/samples/component-slot-spread/Nested.svelte rename to packages/svelte/test/runtime/samples/component-slot-spread/Nested.svelte diff --git a/packages/svelte/test/runtime/samples/component-slot-spread/_config.js b/packages/svelte/test/runtime/samples/component-slot-spread/_config.js new file mode 100644 index 0000000000..8e34cc9d56 --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-slot-spread/_config.js @@ -0,0 +1,68 @@ +export default { + get props() { + return { obj: { a: 1, b: 42 }, c: 5, d: 10 }; + }, + html: ` +

1

+

42

+

5

+

10

+ `, + + test({ assert, target, component }) { + component.obj = { a: 2, b: 50, c: 30 }; + assert.htmlEqual( + target.innerHTML, + ` +

2

+

50

+

30

+

10

+ ` + ); + + component.c = 22; + assert.htmlEqual( + target.innerHTML, + ` +

2

+

50

+

30

+

10

+ ` + ); + + component.d = 44; + assert.htmlEqual( + target.innerHTML, + ` +

2

+

50

+

30

+

44

+ ` + ); + + component.obj = { a: 9, b: 12 }; + assert.htmlEqual( + target.innerHTML, + ` +

9

+

12

+

22

+

44

+ ` + ); + + component.c = 88; + assert.htmlEqual( + target.innerHTML, + ` +

9

+

12

+

88

+

44

+ ` + ); + } +}; diff --git a/test/runtime/samples/component-slot-spread/main.svelte b/packages/svelte/test/runtime/samples/component-slot-spread/main.svelte similarity index 100% rename from test/runtime/samples/component-slot-spread/main.svelte rename to packages/svelte/test/runtime/samples/component-slot-spread/main.svelte diff --git a/test/runtime/samples/component-slot-static-and-dynamic/Nested.svelte b/packages/svelte/test/runtime/samples/component-slot-static-and-dynamic/Nested.svelte similarity index 100% rename from test/runtime/samples/component-slot-static-and-dynamic/Nested.svelte rename to packages/svelte/test/runtime/samples/component-slot-static-and-dynamic/Nested.svelte diff --git a/packages/svelte/test/runtime/samples/component-slot-static-and-dynamic/_config.js b/packages/svelte/test/runtime/samples/component-slot-static-and-dynamic/_config.js new file mode 100644 index 0000000000..c1003a541e --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-slot-static-and-dynamic/_config.js @@ -0,0 +1,22 @@ +export default { + html: ` +
+ static + 0 +
+ `, + + test({ assert, component, target }) { + component.dynamic += 1; + + assert.htmlEqual( + target.innerHTML, + ` +
+ static + 1 +
+ ` + ); + } +}; diff --git a/test/runtime/samples/component-slot-static-and-dynamic/main.svelte b/packages/svelte/test/runtime/samples/component-slot-static-and-dynamic/main.svelte similarity index 100% rename from test/runtime/samples/component-slot-static-and-dynamic/main.svelte rename to packages/svelte/test/runtime/samples/component-slot-static-and-dynamic/main.svelte diff --git a/test/runtime/samples/component-slot-used-with-default-event/Nested.svelte b/packages/svelte/test/runtime/samples/component-slot-used-with-default-event/Nested.svelte similarity index 100% rename from test/runtime/samples/component-slot-used-with-default-event/Nested.svelte rename to packages/svelte/test/runtime/samples/component-slot-used-with-default-event/Nested.svelte diff --git a/test/runtime/samples/component-slot-used-with-default-event/_config.js b/packages/svelte/test/runtime/samples/component-slot-used-with-default-event/_config.js similarity index 100% rename from test/runtime/samples/component-slot-used-with-default-event/_config.js rename to packages/svelte/test/runtime/samples/component-slot-used-with-default-event/_config.js diff --git a/test/runtime/samples/component-slot-used-with-default-event/main.svelte b/packages/svelte/test/runtime/samples/component-slot-used-with-default-event/main.svelte similarity index 100% rename from test/runtime/samples/component-slot-used-with-default-event/main.svelte rename to packages/svelte/test/runtime/samples/component-slot-used-with-default-event/main.svelte diff --git a/test/runtime/samples/component-slot-nested-error-2/Nested.svelte b/packages/svelte/test/runtime/samples/component-slot-warning/Nested.svelte similarity index 100% rename from test/runtime/samples/component-slot-nested-error-2/Nested.svelte rename to packages/svelte/test/runtime/samples/component-slot-warning/Nested.svelte diff --git a/packages/svelte/test/runtime/samples/component-slot-warning/_config.js b/packages/svelte/test/runtime/samples/component-slot-warning/_config.js new file mode 100644 index 0000000000..b85c30fd4d --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-slot-warning/_config.js @@ -0,0 +1,6 @@ +export default { + compileOptions: { + dev: true + }, + warnings: [' received an unexpected slot "slot1".'] +}; diff --git a/test/runtime/samples/component-slot-warning/main.svelte b/packages/svelte/test/runtime/samples/component-slot-warning/main.svelte similarity index 100% rename from test/runtime/samples/component-slot-warning/main.svelte rename to packages/svelte/test/runtime/samples/component-slot-warning/main.svelte diff --git a/test/runtime/samples/component-static-at-symbol/Email.svelte b/packages/svelte/test/runtime/samples/component-static-at-symbol/Email.svelte similarity index 100% rename from test/runtime/samples/component-static-at-symbol/Email.svelte rename to packages/svelte/test/runtime/samples/component-static-at-symbol/Email.svelte diff --git a/test/runtime/samples/component-static-at-symbol/_config.js b/packages/svelte/test/runtime/samples/component-static-at-symbol/_config.js similarity index 100% rename from test/runtime/samples/component-static-at-symbol/_config.js rename to packages/svelte/test/runtime/samples/component-static-at-symbol/_config.js diff --git a/test/runtime/samples/component-static-at-symbol/main.svelte b/packages/svelte/test/runtime/samples/component-static-at-symbol/main.svelte similarity index 100% rename from test/runtime/samples/component-static-at-symbol/main.svelte rename to packages/svelte/test/runtime/samples/component-static-at-symbol/main.svelte diff --git a/test/runtime/samples/component-svelte-fragment-2/Nested.svelte b/packages/svelte/test/runtime/samples/component-svelte-fragment-2/Nested.svelte similarity index 100% rename from test/runtime/samples/component-svelte-fragment-2/Nested.svelte rename to packages/svelte/test/runtime/samples/component-svelte-fragment-2/Nested.svelte diff --git a/test/runtime/samples/component-svelte-fragment-2/_config.js b/packages/svelte/test/runtime/samples/component-svelte-fragment-2/_config.js similarity index 100% rename from test/runtime/samples/component-svelte-fragment-2/_config.js rename to packages/svelte/test/runtime/samples/component-svelte-fragment-2/_config.js diff --git a/test/runtime/samples/component-svelte-fragment-2/main.svelte b/packages/svelte/test/runtime/samples/component-svelte-fragment-2/main.svelte similarity index 100% rename from test/runtime/samples/component-svelte-fragment-2/main.svelte rename to packages/svelte/test/runtime/samples/component-svelte-fragment-2/main.svelte diff --git a/test/runtime/samples/component-svelte-fragment-let-aliased/Nested.svelte b/packages/svelte/test/runtime/samples/component-svelte-fragment-let-aliased/Nested.svelte similarity index 100% rename from test/runtime/samples/component-svelte-fragment-let-aliased/Nested.svelte rename to packages/svelte/test/runtime/samples/component-svelte-fragment-let-aliased/Nested.svelte diff --git a/packages/svelte/test/runtime/samples/component-svelte-fragment-let-aliased/_config.js b/packages/svelte/test/runtime/samples/component-svelte-fragment-let-aliased/_config.js new file mode 100644 index 0000000000..62a2db4f8a --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-svelte-fragment-let-aliased/_config.js @@ -0,0 +1,27 @@ +export default { + get props() { + return { things: [1, 2, 3] }; + }, + + html: ` +
+ 1 + 2 + 3 +
`, + + test({ assert, component, target }) { + component.things = [1, 2, 3, 4]; + assert.htmlEqual( + target.innerHTML, + ` +
+ 1 + 2 + 3 + 4 +
+ ` + ); + } +}; diff --git a/packages/svelte/test/runtime/samples/component-svelte-fragment-let-aliased/main.svelte b/packages/svelte/test/runtime/samples/component-svelte-fragment-let-aliased/main.svelte new file mode 100644 index 0000000000..5ca0cbbd10 --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-svelte-fragment-let-aliased/main.svelte @@ -0,0 +1,11 @@ + + + + + {x} + + \ No newline at end of file diff --git a/test/runtime/samples/component-svelte-fragment-let-b/Nested.svelte b/packages/svelte/test/runtime/samples/component-svelte-fragment-let-b/Nested.svelte similarity index 100% rename from test/runtime/samples/component-svelte-fragment-let-b/Nested.svelte rename to packages/svelte/test/runtime/samples/component-svelte-fragment-let-b/Nested.svelte diff --git a/packages/svelte/test/runtime/samples/component-svelte-fragment-let-b/_config.js b/packages/svelte/test/runtime/samples/component-svelte-fragment-let-b/_config.js new file mode 100644 index 0000000000..74bb7132fd --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-svelte-fragment-let-b/_config.js @@ -0,0 +1,21 @@ +export default { + html: ` + + 0 + `, + + async test({ assert, target, window }) { + const button = target.querySelector('button'); + const click = new window.MouseEvent('click'); + + await button.dispatchEvent(click); + + assert.htmlEqual( + target.innerHTML, + ` + + 1 + ` + ); + } +}; diff --git a/packages/svelte/test/runtime/samples/component-svelte-fragment-let-b/main.svelte b/packages/svelte/test/runtime/samples/component-svelte-fragment-let-b/main.svelte new file mode 100644 index 0000000000..bb24b97a3b --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-svelte-fragment-let-b/main.svelte @@ -0,0 +1,9 @@ + + + + + {count} + + \ No newline at end of file diff --git a/test/runtime/samples/component-svelte-fragment-let-c/Nested.svelte b/packages/svelte/test/runtime/samples/component-svelte-fragment-let-c/Nested.svelte similarity index 100% rename from test/runtime/samples/component-svelte-fragment-let-c/Nested.svelte rename to packages/svelte/test/runtime/samples/component-svelte-fragment-let-c/Nested.svelte diff --git a/packages/svelte/test/runtime/samples/component-svelte-fragment-let-c/_config.js b/packages/svelte/test/runtime/samples/component-svelte-fragment-let-c/_config.js new file mode 100644 index 0000000000..002fd18e41 --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-svelte-fragment-let-c/_config.js @@ -0,0 +1,21 @@ +export default { + html: ` + + 0 (undefined) + `, + + async test({ assert, target, window }) { + const button = target.querySelector('button'); + const click = new window.MouseEvent('click'); + + await button.dispatchEvent(click); + + assert.htmlEqual( + target.innerHTML, + ` + + 1 (undefined) + ` + ); + } +}; diff --git a/test/runtime/samples/component-svelte-fragment-let-c/main.svelte b/packages/svelte/test/runtime/samples/component-svelte-fragment-let-c/main.svelte similarity index 100% rename from test/runtime/samples/component-svelte-fragment-let-c/main.svelte rename to packages/svelte/test/runtime/samples/component-svelte-fragment-let-c/main.svelte diff --git a/test/runtime/samples/component-svelte-fragment-let-d/Nested.svelte b/packages/svelte/test/runtime/samples/component-svelte-fragment-let-d/Nested.svelte similarity index 100% rename from test/runtime/samples/component-svelte-fragment-let-d/Nested.svelte rename to packages/svelte/test/runtime/samples/component-svelte-fragment-let-d/Nested.svelte diff --git a/packages/svelte/test/runtime/samples/component-svelte-fragment-let-d/_config.js b/packages/svelte/test/runtime/samples/component-svelte-fragment-let-d/_config.js new file mode 100644 index 0000000000..64d4e57849 --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-svelte-fragment-let-d/_config.js @@ -0,0 +1,23 @@ +export default { + html: ` +
+

a

+
+ `, + + async test({ assert, target, window }) { + const div = target.querySelector('div'); + const click = new window.MouseEvent('click'); + + await div.dispatchEvent(click); + + assert.htmlEqual( + target.innerHTML, + ` +
+

b

+
+ ` + ); + } +}; diff --git a/test/runtime/samples/component-svelte-fragment-let-d/main.svelte b/packages/svelte/test/runtime/samples/component-svelte-fragment-let-d/main.svelte similarity index 100% rename from test/runtime/samples/component-svelte-fragment-let-d/main.svelte rename to packages/svelte/test/runtime/samples/component-svelte-fragment-let-d/main.svelte diff --git a/test/runtime/samples/component-svelte-fragment-let-destructured-2/Nested.svelte b/packages/svelte/test/runtime/samples/component-svelte-fragment-let-destructured-2/Nested.svelte similarity index 100% rename from test/runtime/samples/component-svelte-fragment-let-destructured-2/Nested.svelte rename to packages/svelte/test/runtime/samples/component-svelte-fragment-let-destructured-2/Nested.svelte diff --git a/packages/svelte/test/runtime/samples/component-svelte-fragment-let-destructured-2/_config.js b/packages/svelte/test/runtime/samples/component-svelte-fragment-let-destructured-2/_config.js new file mode 100644 index 0000000000..95aaf168a3 --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-svelte-fragment-let-destructured-2/_config.js @@ -0,0 +1,77 @@ +export default { + html: ` +
+ hello world 0 hello + +
+
+ hello world 0 hello + +
+
+ hello world 0 hello + +
+ `, + async test({ assert, target, window }) { + const [button1, button2, button3] = target.querySelectorAll('button'); + const event = new window.MouseEvent('click'); + + await button1.dispatchEvent(event); + assert.htmlEqual( + target.innerHTML, + ` +
+ hello world 1 hello + +
+
+ hello world 0 hello + +
+
+ hello world 0 hello + +
+ ` + ); + + await button2.dispatchEvent(event); + assert.htmlEqual( + target.innerHTML, + ` +
+ hello world 1 hello + +
+
+ hello world 1 hello + +
+
+ hello world 0 hello + +
+ ` + ); + + await button3.dispatchEvent(event); + assert.htmlEqual( + target.innerHTML, + ` +
+ hello world 1 hello + +
+
+ hello world 1 hello + +
+
+ hello world 1 hello + +
+ ` + ); + } +}; diff --git a/test/runtime/samples/component-svelte-fragment-let-destructured-2/main.svelte b/packages/svelte/test/runtime/samples/component-svelte-fragment-let-destructured-2/main.svelte similarity index 100% rename from test/runtime/samples/component-svelte-fragment-let-destructured-2/main.svelte rename to packages/svelte/test/runtime/samples/component-svelte-fragment-let-destructured-2/main.svelte diff --git a/test/runtime/samples/component-svelte-fragment-let-destructured/Nested.svelte b/packages/svelte/test/runtime/samples/component-svelte-fragment-let-destructured/Nested.svelte similarity index 100% rename from test/runtime/samples/component-svelte-fragment-let-destructured/Nested.svelte rename to packages/svelte/test/runtime/samples/component-svelte-fragment-let-destructured/Nested.svelte diff --git a/packages/svelte/test/runtime/samples/component-svelte-fragment-let-destructured/_config.js b/packages/svelte/test/runtime/samples/component-svelte-fragment-let-destructured/_config.js new file mode 100644 index 0000000000..b769ac0cf1 --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-svelte-fragment-let-destructured/_config.js @@ -0,0 +1,30 @@ +export default { + get props() { + return { + things: [{ num: 1 }, { num: 2 }, { num: 3 }] + }; + }, + + html: ` +
+ 1 + 2 + 3 +
`, + + test({ assert, component, target }) { + component.things = [{ num: 1 }, { num: 2 }, { num: 3 }, { num: 4 }]; + + assert.htmlEqual( + target.innerHTML, + ` +
+ 1 + 2 + 3 + 4 +
+ ` + ); + } +}; diff --git a/test/runtime/samples/component-svelte-fragment-let-destructured/main.svelte b/packages/svelte/test/runtime/samples/component-svelte-fragment-let-destructured/main.svelte similarity index 100% rename from test/runtime/samples/component-svelte-fragment-let-destructured/main.svelte rename to packages/svelte/test/runtime/samples/component-svelte-fragment-let-destructured/main.svelte diff --git a/packages/svelte/test/runtime/samples/component-svelte-fragment-let-e/A.svelte b/packages/svelte/test/runtime/samples/component-svelte-fragment-let-e/A.svelte new file mode 100644 index 0000000000..f982aef7b1 --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-svelte-fragment-let-e/A.svelte @@ -0,0 +1,11 @@ + + + + + {reflected} + + + \ No newline at end of file diff --git a/test/runtime/samples/component-svelte-fragment-let-e/B.svelte b/packages/svelte/test/runtime/samples/component-svelte-fragment-let-e/B.svelte similarity index 100% rename from test/runtime/samples/component-svelte-fragment-let-e/B.svelte rename to packages/svelte/test/runtime/samples/component-svelte-fragment-let-e/B.svelte diff --git a/packages/svelte/test/runtime/samples/component-svelte-fragment-let-e/_config.js b/packages/svelte/test/runtime/samples/component-svelte-fragment-let-e/_config.js new file mode 100644 index 0000000000..1ececbb3ef --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-svelte-fragment-let-e/_config.js @@ -0,0 +1,18 @@ +export default { + html: ` + 1 + 1 + `, + + async test({ assert, target, component }) { + component.x = 2; + + assert.htmlEqual( + target.innerHTML, + ` + 2 + 2 + ` + ); + } +}; diff --git a/packages/svelte/test/runtime/samples/component-svelte-fragment-let-e/main.svelte b/packages/svelte/test/runtime/samples/component-svelte-fragment-let-e/main.svelte new file mode 100644 index 0000000000..e95c8d9274 --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-svelte-fragment-let-e/main.svelte @@ -0,0 +1,10 @@ + + + + + {reflected} + + diff --git a/test/runtime/samples/component-svelte-fragment-let-f/A.svelte b/packages/svelte/test/runtime/samples/component-svelte-fragment-let-f/A.svelte similarity index 100% rename from test/runtime/samples/component-svelte-fragment-let-f/A.svelte rename to packages/svelte/test/runtime/samples/component-svelte-fragment-let-f/A.svelte diff --git a/packages/svelte/test/runtime/samples/component-svelte-fragment-let-f/_config.js b/packages/svelte/test/runtime/samples/component-svelte-fragment-let-f/_config.js new file mode 100644 index 0000000000..3489e501cb --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-svelte-fragment-let-f/_config.js @@ -0,0 +1,28 @@ +export default { + html: ` + 1 + 0 + `, + async test({ assert, target, component, window }) { + component.x = 2; + + assert.htmlEqual( + target.innerHTML, + ` + 2 + 0 + ` + ); + + const span = target.querySelector('span'); + await span.dispatchEvent(new window.MouseEvent('click')); + + assert.htmlEqual( + target.innerHTML, + ` + 2 + 2 + ` + ); + } +}; diff --git a/test/runtime/samples/component-svelte-fragment-let-f/main.svelte b/packages/svelte/test/runtime/samples/component-svelte-fragment-let-f/main.svelte similarity index 100% rename from test/runtime/samples/component-svelte-fragment-let-f/main.svelte rename to packages/svelte/test/runtime/samples/component-svelte-fragment-let-f/main.svelte diff --git a/test/runtime/samples/component-svelte-fragment-let-in-binding/Nested.svelte b/packages/svelte/test/runtime/samples/component-svelte-fragment-let-in-binding/Nested.svelte similarity index 100% rename from test/runtime/samples/component-svelte-fragment-let-in-binding/Nested.svelte rename to packages/svelte/test/runtime/samples/component-svelte-fragment-let-in-binding/Nested.svelte diff --git a/test/runtime/samples/component-svelte-fragment-let-in-binding/_config.js b/packages/svelte/test/runtime/samples/component-svelte-fragment-let-in-binding/_config.js similarity index 100% rename from test/runtime/samples/component-svelte-fragment-let-in-binding/_config.js rename to packages/svelte/test/runtime/samples/component-svelte-fragment-let-in-binding/_config.js diff --git a/test/runtime/samples/component-svelte-fragment-let-in-binding/main.svelte b/packages/svelte/test/runtime/samples/component-svelte-fragment-let-in-binding/main.svelte similarity index 100% rename from test/runtime/samples/component-svelte-fragment-let-in-binding/main.svelte rename to packages/svelte/test/runtime/samples/component-svelte-fragment-let-in-binding/main.svelte diff --git a/test/runtime/samples/component-svelte-fragment-let-in-slot/Inner.svelte b/packages/svelte/test/runtime/samples/component-svelte-fragment-let-in-slot/Inner.svelte similarity index 100% rename from test/runtime/samples/component-svelte-fragment-let-in-slot/Inner.svelte rename to packages/svelte/test/runtime/samples/component-svelte-fragment-let-in-slot/Inner.svelte diff --git a/test/runtime/samples/component-svelte-fragment-let-in-slot/Outer.svelte b/packages/svelte/test/runtime/samples/component-svelte-fragment-let-in-slot/Outer.svelte similarity index 100% rename from test/runtime/samples/component-svelte-fragment-let-in-slot/Outer.svelte rename to packages/svelte/test/runtime/samples/component-svelte-fragment-let-in-slot/Outer.svelte diff --git a/packages/svelte/test/runtime/samples/component-svelte-fragment-let-in-slot/_config.js b/packages/svelte/test/runtime/samples/component-svelte-fragment-let-in-slot/_config.js new file mode 100644 index 0000000000..45a521b1c2 --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-svelte-fragment-let-in-slot/_config.js @@ -0,0 +1,12 @@ +export default { + get props() { + return { prop: 'a' }; + }, + + html: 'a', + + test({ assert, component, target }) { + component.prop = 'b'; + assert.htmlEqual(target.innerHTML, 'b'); + } +}; diff --git a/test/runtime/samples/component-svelte-fragment-let-in-slot/main.svelte b/packages/svelte/test/runtime/samples/component-svelte-fragment-let-in-slot/main.svelte similarity index 100% rename from test/runtime/samples/component-svelte-fragment-let-in-slot/main.svelte rename to packages/svelte/test/runtime/samples/component-svelte-fragment-let-in-slot/main.svelte diff --git a/test/runtime/samples/component-svelte-fragment-let-named/Nested.svelte b/packages/svelte/test/runtime/samples/component-svelte-fragment-let-named/Nested.svelte similarity index 100% rename from test/runtime/samples/component-svelte-fragment-let-named/Nested.svelte rename to packages/svelte/test/runtime/samples/component-svelte-fragment-let-named/Nested.svelte diff --git a/packages/svelte/test/runtime/samples/component-svelte-fragment-let-named/_config.js b/packages/svelte/test/runtime/samples/component-svelte-fragment-let-named/_config.js new file mode 100644 index 0000000000..75fd25f2c7 --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-svelte-fragment-let-named/_config.js @@ -0,0 +1,27 @@ +export default { + get props() { + return { things: [1, 2, 3] }; + }, + + html: ` +
+
1
+
2
+
3
+
`, + + test({ assert, component, target }) { + component.things = [1, 2, 3, 4]; + assert.htmlEqual( + target.innerHTML, + ` +
+
1
+
2
+
3
+
4
+
+ ` + ); + } +}; diff --git a/test/runtime/samples/component-svelte-fragment-let-named/main.svelte b/packages/svelte/test/runtime/samples/component-svelte-fragment-let-named/main.svelte similarity index 100% rename from test/runtime/samples/component-svelte-fragment-let-named/main.svelte rename to packages/svelte/test/runtime/samples/component-svelte-fragment-let-named/main.svelte diff --git a/test/runtime/samples/component-slot-duplicate-error-3/Nested.svelte b/packages/svelte/test/runtime/samples/component-svelte-fragment-let-static/Nested.svelte similarity index 100% rename from test/runtime/samples/component-slot-duplicate-error-3/Nested.svelte rename to packages/svelte/test/runtime/samples/component-svelte-fragment-let-static/Nested.svelte diff --git a/test/runtime/samples/component-svelte-fragment-let-static/_config.js b/packages/svelte/test/runtime/samples/component-svelte-fragment-let-static/_config.js similarity index 100% rename from test/runtime/samples/component-svelte-fragment-let-static/_config.js rename to packages/svelte/test/runtime/samples/component-svelte-fragment-let-static/_config.js diff --git a/test/runtime/samples/component-svelte-fragment-let-static/main.svelte b/packages/svelte/test/runtime/samples/component-svelte-fragment-let-static/main.svelte similarity index 100% rename from test/runtime/samples/component-svelte-fragment-let-static/main.svelte rename to packages/svelte/test/runtime/samples/component-svelte-fragment-let-static/main.svelte diff --git a/test/runtime/samples/component-svelte-fragment-let/Nested.svelte b/packages/svelte/test/runtime/samples/component-svelte-fragment-let/Nested.svelte similarity index 100% rename from test/runtime/samples/component-svelte-fragment-let/Nested.svelte rename to packages/svelte/test/runtime/samples/component-svelte-fragment-let/Nested.svelte diff --git a/packages/svelte/test/runtime/samples/component-svelte-fragment-let/_config.js b/packages/svelte/test/runtime/samples/component-svelte-fragment-let/_config.js new file mode 100644 index 0000000000..62a2db4f8a --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-svelte-fragment-let/_config.js @@ -0,0 +1,27 @@ +export default { + get props() { + return { things: [1, 2, 3] }; + }, + + html: ` +
+ 1 + 2 + 3 +
`, + + test({ assert, component, target }) { + component.things = [1, 2, 3, 4]; + assert.htmlEqual( + target.innerHTML, + ` +
+ 1 + 2 + 3 + 4 +
+ ` + ); + } +}; diff --git a/test/runtime/samples/component-svelte-fragment-let/main.svelte b/packages/svelte/test/runtime/samples/component-svelte-fragment-let/main.svelte similarity index 100% rename from test/runtime/samples/component-svelte-fragment-let/main.svelte rename to packages/svelte/test/runtime/samples/component-svelte-fragment-let/main.svelte diff --git a/test/runtime/samples/component-svelte-fragment-nested/Child.svelte b/packages/svelte/test/runtime/samples/component-svelte-fragment-nested/Child.svelte similarity index 100% rename from test/runtime/samples/component-svelte-fragment-nested/Child.svelte rename to packages/svelte/test/runtime/samples/component-svelte-fragment-nested/Child.svelte diff --git a/test/runtime/samples/component-svelte-fragment-nested/Nested.svelte b/packages/svelte/test/runtime/samples/component-svelte-fragment-nested/Nested.svelte similarity index 100% rename from test/runtime/samples/component-svelte-fragment-nested/Nested.svelte rename to packages/svelte/test/runtime/samples/component-svelte-fragment-nested/Nested.svelte diff --git a/test/runtime/samples/component-svelte-fragment-nested/_config.js b/packages/svelte/test/runtime/samples/component-svelte-fragment-nested/_config.js similarity index 100% rename from test/runtime/samples/component-svelte-fragment-nested/_config.js rename to packages/svelte/test/runtime/samples/component-svelte-fragment-nested/_config.js diff --git a/test/runtime/samples/component-svelte-fragment-nested/main.svelte b/packages/svelte/test/runtime/samples/component-svelte-fragment-nested/main.svelte similarity index 100% rename from test/runtime/samples/component-svelte-fragment-nested/main.svelte rename to packages/svelte/test/runtime/samples/component-svelte-fragment-nested/main.svelte diff --git a/test/runtime/samples/component-svelte-fragment/B.svelte b/packages/svelte/test/runtime/samples/component-svelte-fragment/B.svelte similarity index 100% rename from test/runtime/samples/component-svelte-fragment/B.svelte rename to packages/svelte/test/runtime/samples/component-svelte-fragment/B.svelte diff --git a/test/runtime/samples/component-svelte-fragment/Nested.svelte b/packages/svelte/test/runtime/samples/component-svelte-fragment/Nested.svelte similarity index 100% rename from test/runtime/samples/component-svelte-fragment/Nested.svelte rename to packages/svelte/test/runtime/samples/component-svelte-fragment/Nested.svelte diff --git a/test/runtime/samples/component-svelte-fragment/_config.js b/packages/svelte/test/runtime/samples/component-svelte-fragment/_config.js similarity index 100% rename from test/runtime/samples/component-svelte-fragment/_config.js rename to packages/svelte/test/runtime/samples/component-svelte-fragment/_config.js diff --git a/test/runtime/samples/component-svelte-fragment/main.svelte b/packages/svelte/test/runtime/samples/component-svelte-fragment/main.svelte similarity index 100% rename from test/runtime/samples/component-svelte-fragment/main.svelte rename to packages/svelte/test/runtime/samples/component-svelte-fragment/main.svelte diff --git a/test/runtime/samples/component-template-inline-mutation/Widget.svelte b/packages/svelte/test/runtime/samples/component-template-inline-mutation/Widget.svelte similarity index 100% rename from test/runtime/samples/component-template-inline-mutation/Widget.svelte rename to packages/svelte/test/runtime/samples/component-template-inline-mutation/Widget.svelte diff --git a/test/runtime/samples/component-template-inline-mutation/_config.js b/packages/svelte/test/runtime/samples/component-template-inline-mutation/_config.js similarity index 100% rename from test/runtime/samples/component-template-inline-mutation/_config.js rename to packages/svelte/test/runtime/samples/component-template-inline-mutation/_config.js diff --git a/test/runtime/samples/component-template-inline-mutation/main.svelte b/packages/svelte/test/runtime/samples/component-template-inline-mutation/main.svelte similarity index 100% rename from test/runtime/samples/component-template-inline-mutation/main.svelte rename to packages/svelte/test/runtime/samples/component-template-inline-mutation/main.svelte diff --git a/test/runtime/samples/component-transition/_config.js b/packages/svelte/test/runtime/samples/component-transition/_config.js similarity index 100% rename from test/runtime/samples/component-transition/_config.js rename to packages/svelte/test/runtime/samples/component-transition/_config.js diff --git a/test/runtime/samples/component-transition/main.svelte b/packages/svelte/test/runtime/samples/component-transition/main.svelte similarity index 100% rename from test/runtime/samples/component-transition/main.svelte rename to packages/svelte/test/runtime/samples/component-transition/main.svelte diff --git a/test/runtime/samples/component-yield-follows-element/Foo.svelte b/packages/svelte/test/runtime/samples/component-yield-follows-element/Foo.svelte similarity index 100% rename from test/runtime/samples/component-yield-follows-element/Foo.svelte rename to packages/svelte/test/runtime/samples/component-yield-follows-element/Foo.svelte diff --git a/test/runtime/samples/component-yield-follows-element/_config.js b/packages/svelte/test/runtime/samples/component-yield-follows-element/_config.js similarity index 100% rename from test/runtime/samples/component-yield-follows-element/_config.js rename to packages/svelte/test/runtime/samples/component-yield-follows-element/_config.js diff --git a/test/runtime/samples/component-yield-follows-element/main.svelte b/packages/svelte/test/runtime/samples/component-yield-follows-element/main.svelte similarity index 100% rename from test/runtime/samples/component-yield-follows-element/main.svelte rename to packages/svelte/test/runtime/samples/component-yield-follows-element/main.svelte diff --git a/test/runtime/samples/component-yield-if/Widget.svelte b/packages/svelte/test/runtime/samples/component-yield-if/Widget.svelte similarity index 100% rename from test/runtime/samples/component-yield-if/Widget.svelte rename to packages/svelte/test/runtime/samples/component-yield-if/Widget.svelte diff --git a/test/runtime/samples/component-yield-if/_config.js b/packages/svelte/test/runtime/samples/component-yield-if/_config.js similarity index 100% rename from test/runtime/samples/component-yield-if/_config.js rename to packages/svelte/test/runtime/samples/component-yield-if/_config.js diff --git a/test/runtime/samples/component-yield-if/main.svelte b/packages/svelte/test/runtime/samples/component-yield-if/main.svelte similarity index 100% rename from test/runtime/samples/component-yield-if/main.svelte rename to packages/svelte/test/runtime/samples/component-yield-if/main.svelte diff --git a/test/runtime/samples/component-yield-multiple-in-each/Widget.svelte b/packages/svelte/test/runtime/samples/component-yield-multiple-in-each/Widget.svelte similarity index 100% rename from test/runtime/samples/component-yield-multiple-in-each/Widget.svelte rename to packages/svelte/test/runtime/samples/component-yield-multiple-in-each/Widget.svelte diff --git a/packages/svelte/test/runtime/samples/component-yield-multiple-in-each/_config.js b/packages/svelte/test/runtime/samples/component-yield-multiple-in-each/_config.js new file mode 100644 index 0000000000..36ca6cf1c5 --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-yield-multiple-in-each/_config.js @@ -0,0 +1,20 @@ +export default { + html: ` +

Hello Alice

+

Hello Bob

+

Hello Charles

+ `, + + test({ assert, component, target }) { + component.people = ['Alice', 'Charles', 'Bob']; + + assert.htmlEqual( + target.innerHTML, + ` +

Hello Alice

+

Hello Charles

+

Hello Bob

+ ` + ); + } +}; diff --git a/test/runtime/samples/component-yield-multiple-in-each/main.svelte b/packages/svelte/test/runtime/samples/component-yield-multiple-in-each/main.svelte similarity index 100% rename from test/runtime/samples/component-yield-multiple-in-each/main.svelte rename to packages/svelte/test/runtime/samples/component-yield-multiple-in-each/main.svelte diff --git a/test/runtime/samples/component-yield-multiple-in-if/Widget.svelte b/packages/svelte/test/runtime/samples/component-yield-multiple-in-if/Widget.svelte similarity index 100% rename from test/runtime/samples/component-yield-multiple-in-if/Widget.svelte rename to packages/svelte/test/runtime/samples/component-yield-multiple-in-if/Widget.svelte diff --git a/test/runtime/samples/component-yield-multiple-in-if/_config.js b/packages/svelte/test/runtime/samples/component-yield-multiple-in-if/_config.js similarity index 100% rename from test/runtime/samples/component-yield-multiple-in-if/_config.js rename to packages/svelte/test/runtime/samples/component-yield-multiple-in-if/_config.js diff --git a/test/runtime/samples/component-yield-multiple-in-if/main.svelte b/packages/svelte/test/runtime/samples/component-yield-multiple-in-if/main.svelte similarity index 100% rename from test/runtime/samples/component-yield-multiple-in-if/main.svelte rename to packages/svelte/test/runtime/samples/component-yield-multiple-in-if/main.svelte diff --git a/test/runtime/samples/component-yield-nested-if/Inner.svelte b/packages/svelte/test/runtime/samples/component-yield-nested-if/Inner.svelte similarity index 100% rename from test/runtime/samples/component-yield-nested-if/Inner.svelte rename to packages/svelte/test/runtime/samples/component-yield-nested-if/Inner.svelte diff --git a/test/runtime/samples/component-yield-nested-if/Outer.svelte b/packages/svelte/test/runtime/samples/component-yield-nested-if/Outer.svelte similarity index 100% rename from test/runtime/samples/component-yield-nested-if/Outer.svelte rename to packages/svelte/test/runtime/samples/component-yield-nested-if/Outer.svelte diff --git a/packages/svelte/test/runtime/samples/component-yield-nested-if/_config.js b/packages/svelte/test/runtime/samples/component-yield-nested-if/_config.js new file mode 100644 index 0000000000..a10b31f536 --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-yield-nested-if/_config.js @@ -0,0 +1,14 @@ +export default { + html: ` + One + Inner + `, + + test({ assert, component, target }) { + component.foo = false; + assert.htmlEqual(target.innerHTML, ''); + + component.foo = true; + assert.htmlEqual(target.innerHTML, 'One\nInner'); + } +}; diff --git a/test/runtime/samples/component-yield-nested-if/main.svelte b/packages/svelte/test/runtime/samples/component-yield-nested-if/main.svelte similarity index 100% rename from test/runtime/samples/component-yield-nested-if/main.svelte rename to packages/svelte/test/runtime/samples/component-yield-nested-if/main.svelte diff --git a/test/runtime/samples/component-yield-parent/Widget.svelte b/packages/svelte/test/runtime/samples/component-yield-parent/Widget.svelte similarity index 100% rename from test/runtime/samples/component-yield-parent/Widget.svelte rename to packages/svelte/test/runtime/samples/component-yield-parent/Widget.svelte diff --git a/packages/svelte/test/runtime/samples/component-yield-parent/_config.js b/packages/svelte/test/runtime/samples/component-yield-parent/_config.js new file mode 100644 index 0000000000..382fa07477 --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-yield-parent/_config.js @@ -0,0 +1,18 @@ +export default { + html: ` +

Hello

+ `, + + test({ assert, component, target }) { + assert.equal(component.data, 'Hello'); + + component.data = 'World'; + assert.equal(component.data, 'World'); + assert.htmlEqual( + target.innerHTML, + ` +

World

+ ` + ); + } +}; diff --git a/test/runtime/samples/component-yield-parent/main.svelte b/packages/svelte/test/runtime/samples/component-yield-parent/main.svelte similarity index 100% rename from test/runtime/samples/component-yield-parent/main.svelte rename to packages/svelte/test/runtime/samples/component-yield-parent/main.svelte diff --git a/test/runtime/samples/component-yield-placement/Modal.svelte b/packages/svelte/test/runtime/samples/component-yield-placement/Modal.svelte similarity index 100% rename from test/runtime/samples/component-yield-placement/Modal.svelte rename to packages/svelte/test/runtime/samples/component-yield-placement/Modal.svelte diff --git a/packages/svelte/test/runtime/samples/component-yield-placement/_config.js b/packages/svelte/test/runtime/samples/component-yield-placement/_config.js new file mode 100644 index 0000000000..59815eeaa6 --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-yield-placement/_config.js @@ -0,0 +1,28 @@ +export default { + get props() { + return { showModal: true }; + }, + + html: ` + + + + `, + + async test({ assert, target, window }) { + const button = target.querySelector('button'); + const click = new window.MouseEvent('click'); + + await button.dispatchEvent(click); + + assert.htmlEqual( + target.innerHTML, + ` + + ` + ); + } +}; diff --git a/test/runtime/samples/component-yield-placement/main.svelte b/packages/svelte/test/runtime/samples/component-yield-placement/main.svelte similarity index 100% rename from test/runtime/samples/component-yield-placement/main.svelte rename to packages/svelte/test/runtime/samples/component-yield-placement/main.svelte diff --git a/test/runtime/samples/component-yield-static/Widget.svelte b/packages/svelte/test/runtime/samples/component-yield-static/Widget.svelte similarity index 100% rename from test/runtime/samples/component-yield-static/Widget.svelte rename to packages/svelte/test/runtime/samples/component-yield-static/Widget.svelte diff --git a/packages/svelte/test/runtime/samples/component-yield-static/_config.js b/packages/svelte/test/runtime/samples/component-yield-static/_config.js new file mode 100644 index 0000000000..871367d477 --- /dev/null +++ b/packages/svelte/test/runtime/samples/component-yield-static/_config.js @@ -0,0 +1,15 @@ +export default { + html: ` + Hello + `, + + test({ assert, component, target }) { + component.name = 'World'; + assert.htmlEqual( + target.innerHTML, + ` + Hello World + ` + ); + } +}; diff --git a/test/runtime/samples/component-yield-static/main.svelte b/packages/svelte/test/runtime/samples/component-yield-static/main.svelte similarity index 100% rename from test/runtime/samples/component-yield-static/main.svelte rename to packages/svelte/test/runtime/samples/component-yield-static/main.svelte diff --git a/test/runtime/samples/component-yield/_config.js b/packages/svelte/test/runtime/samples/component-yield/_config.js similarity index 100% rename from test/runtime/samples/component-yield/_config.js rename to packages/svelte/test/runtime/samples/component-yield/_config.js diff --git a/test/runtime/samples/component-yield/main.svelte b/packages/svelte/test/runtime/samples/component-yield/main.svelte similarity index 100% rename from test/runtime/samples/component-yield/main.svelte rename to packages/svelte/test/runtime/samples/component-yield/main.svelte diff --git a/test/runtime/samples/component/Widget.svelte b/packages/svelte/test/runtime/samples/component/Widget.svelte similarity index 100% rename from test/runtime/samples/component/Widget.svelte rename to packages/svelte/test/runtime/samples/component/Widget.svelte diff --git a/test/runtime/samples/component/_config.js b/packages/svelte/test/runtime/samples/component/_config.js similarity index 100% rename from test/runtime/samples/component/_config.js rename to packages/svelte/test/runtime/samples/component/_config.js diff --git a/test/runtime/samples/component/main.svelte b/packages/svelte/test/runtime/samples/component/main.svelte similarity index 100% rename from test/runtime/samples/component/main.svelte rename to packages/svelte/test/runtime/samples/component/main.svelte diff --git a/packages/svelte/test/runtime/samples/const-tag-await-then-destructuring-computed-in-computed/_config.js b/packages/svelte/test/runtime/samples/const-tag-await-then-destructuring-computed-in-computed/_config.js new file mode 100644 index 0000000000..92e6d63147 --- /dev/null +++ b/packages/svelte/test/runtime/samples/const-tag-await-then-destructuring-computed-in-computed/_config.js @@ -0,0 +1,23 @@ +export default { + html: ` +

4, 12, 60

+ `, + + async test({ component, target, assert }) { + component.permutation = [2, 3, 1]; + await (component.promise1 = Promise.resolve({ length: 1, width: 2, height: 3 })); + try { + await (component.promise2 = Promise.reject({ length: 97, width: 98, height: 99 })); + } catch (e) { + // nothing + } + + assert.htmlEqual( + target.innerHTML, + ` +

2, 11, 2

+

9506, 28811, 98

+ ` + ); + } +}; diff --git a/test/runtime/samples/const-tag-await-then-destructuring-computed-in-computed/main.svelte b/packages/svelte/test/runtime/samples/const-tag-await-then-destructuring-computed-in-computed/main.svelte similarity index 100% rename from test/runtime/samples/const-tag-await-then-destructuring-computed-in-computed/main.svelte rename to packages/svelte/test/runtime/samples/const-tag-await-then-destructuring-computed-in-computed/main.svelte diff --git a/packages/svelte/test/runtime/samples/const-tag-await-then-destructuring-computed-props/_config.js b/packages/svelte/test/runtime/samples/const-tag-await-then-destructuring-computed-props/_config.js new file mode 100644 index 0000000000..92e6d63147 --- /dev/null +++ b/packages/svelte/test/runtime/samples/const-tag-await-then-destructuring-computed-props/_config.js @@ -0,0 +1,23 @@ +export default { + html: ` +

4, 12, 60

+ `, + + async test({ component, target, assert }) { + component.permutation = [2, 3, 1]; + await (component.promise1 = Promise.resolve({ length: 1, width: 2, height: 3 })); + try { + await (component.promise2 = Promise.reject({ length: 97, width: 98, height: 99 })); + } catch (e) { + // nothing + } + + assert.htmlEqual( + target.innerHTML, + ` +

2, 11, 2

+

9506, 28811, 98

+ ` + ); + } +}; diff --git a/test/runtime/samples/const-tag-await-then-destructuring-computed-props/main.svelte b/packages/svelte/test/runtime/samples/const-tag-await-then-destructuring-computed-props/main.svelte similarity index 100% rename from test/runtime/samples/const-tag-await-then-destructuring-computed-props/main.svelte rename to packages/svelte/test/runtime/samples/const-tag-await-then-destructuring-computed-props/main.svelte diff --git a/packages/svelte/test/runtime/samples/const-tag-await-then-destructuring-literals/_config.js b/packages/svelte/test/runtime/samples/const-tag-await-then-destructuring-literals/_config.js new file mode 100644 index 0000000000..7f0fe80b0d --- /dev/null +++ b/packages/svelte/test/runtime/samples/const-tag-await-then-destructuring-literals/_config.js @@ -0,0 +1,25 @@ +export default { + html: '
12 120 70, 30+4=34
', + async test({ component, target, assert }) { + component.promise1 = Promise.resolve({ width: 5, height: 6 }); + component.promise2 = Promise.reject({ width: 6, height: 7 }); + + await Promise.resolve(); + assert.htmlEqual( + target.innerHTML, + ` +
30 300 110, 50+6=56
+
42 420 130, 60+7=67
+ ` + ); + + component.constant = 20; + assert.htmlEqual( + target.innerHTML, + ` +
30 600 220, 100+6=106
+
42 840 260, 120+7=127
+ ` + ); + } +}; diff --git a/test/runtime/samples/const-tag-await-then-destructuring-literals/main.svelte b/packages/svelte/test/runtime/samples/const-tag-await-then-destructuring-literals/main.svelte similarity index 100% rename from test/runtime/samples/const-tag-await-then-destructuring-literals/main.svelte rename to packages/svelte/test/runtime/samples/const-tag-await-then-destructuring-literals/main.svelte diff --git a/packages/svelte/test/runtime/samples/const-tag-await-then-destructuring-nested-rest/_config.js b/packages/svelte/test/runtime/samples/const-tag-await-then-destructuring-nested-rest/_config.js new file mode 100644 index 0000000000..7f0fe80b0d --- /dev/null +++ b/packages/svelte/test/runtime/samples/const-tag-await-then-destructuring-nested-rest/_config.js @@ -0,0 +1,25 @@ +export default { + html: '
12 120 70, 30+4=34
', + async test({ component, target, assert }) { + component.promise1 = Promise.resolve({ width: 5, height: 6 }); + component.promise2 = Promise.reject({ width: 6, height: 7 }); + + await Promise.resolve(); + assert.htmlEqual( + target.innerHTML, + ` +
30 300 110, 50+6=56
+
42 420 130, 60+7=67
+ ` + ); + + component.constant = 20; + assert.htmlEqual( + target.innerHTML, + ` +
30 600 220, 100+6=106
+
42 840 260, 120+7=127
+ ` + ); + } +}; diff --git a/test/runtime/samples/const-tag-await-then-destructuring-nested-rest/main.svelte b/packages/svelte/test/runtime/samples/const-tag-await-then-destructuring-nested-rest/main.svelte similarity index 100% rename from test/runtime/samples/const-tag-await-then-destructuring-nested-rest/main.svelte rename to packages/svelte/test/runtime/samples/const-tag-await-then-destructuring-nested-rest/main.svelte diff --git a/packages/svelte/test/runtime/samples/const-tag-await-then-destructuring/_config.js b/packages/svelte/test/runtime/samples/const-tag-await-then-destructuring/_config.js new file mode 100644 index 0000000000..7f0fe80b0d --- /dev/null +++ b/packages/svelte/test/runtime/samples/const-tag-await-then-destructuring/_config.js @@ -0,0 +1,25 @@ +export default { + html: '
12 120 70, 30+4=34
', + async test({ component, target, assert }) { + component.promise1 = Promise.resolve({ width: 5, height: 6 }); + component.promise2 = Promise.reject({ width: 6, height: 7 }); + + await Promise.resolve(); + assert.htmlEqual( + target.innerHTML, + ` +
30 300 110, 50+6=56
+
42 420 130, 60+7=67
+ ` + ); + + component.constant = 20; + assert.htmlEqual( + target.innerHTML, + ` +
30 600 220, 100+6=106
+
42 840 260, 120+7=127
+ ` + ); + } +}; diff --git a/test/runtime/samples/const-tag-await-then-destructuring/main.svelte b/packages/svelte/test/runtime/samples/const-tag-await-then-destructuring/main.svelte similarity index 100% rename from test/runtime/samples/const-tag-await-then-destructuring/main.svelte rename to packages/svelte/test/runtime/samples/const-tag-await-then-destructuring/main.svelte diff --git a/packages/svelte/test/runtime/samples/const-tag-await-then/_config.js b/packages/svelte/test/runtime/samples/const-tag-await-then/_config.js new file mode 100644 index 0000000000..7f0fe80b0d --- /dev/null +++ b/packages/svelte/test/runtime/samples/const-tag-await-then/_config.js @@ -0,0 +1,25 @@ +export default { + html: '
12 120 70, 30+4=34
', + async test({ component, target, assert }) { + component.promise1 = Promise.resolve({ width: 5, height: 6 }); + component.promise2 = Promise.reject({ width: 6, height: 7 }); + + await Promise.resolve(); + assert.htmlEqual( + target.innerHTML, + ` +
30 300 110, 50+6=56
+
42 420 130, 60+7=67
+ ` + ); + + component.constant = 20; + assert.htmlEqual( + target.innerHTML, + ` +
30 600 220, 100+6=106
+
42 840 260, 120+7=127
+ ` + ); + } +}; diff --git a/test/runtime/samples/const-tag-await-then/main.svelte b/packages/svelte/test/runtime/samples/const-tag-await-then/main.svelte similarity index 100% rename from test/runtime/samples/const-tag-await-then/main.svelte rename to packages/svelte/test/runtime/samples/const-tag-await-then/main.svelte diff --git a/test/runtime/samples/const-tag-component-without-let/Component.svelte b/packages/svelte/test/runtime/samples/const-tag-component-without-let/Component.svelte similarity index 100% rename from test/runtime/samples/const-tag-component-without-let/Component.svelte rename to packages/svelte/test/runtime/samples/const-tag-component-without-let/Component.svelte diff --git a/packages/svelte/test/runtime/samples/const-tag-component-without-let/_config.js b/packages/svelte/test/runtime/samples/const-tag-component-without-let/_config.js new file mode 100644 index 0000000000..276b99c915 --- /dev/null +++ b/packages/svelte/test/runtime/samples/const-tag-component-without-let/_config.js @@ -0,0 +1,18 @@ +export default { + html: ` +
static dynamic
+
static dynamic
+
static dynamic
+ `, + async test({ component, target, assert }) { + component.props = 'xxx'; + assert.htmlEqual( + target.innerHTML, + ` +
static xxx
+
static xxx
+
static xxx
+ ` + ); + } +}; diff --git a/test/runtime/samples/const-tag-component-without-let/main.svelte b/packages/svelte/test/runtime/samples/const-tag-component-without-let/main.svelte similarity index 100% rename from test/runtime/samples/const-tag-component-without-let/main.svelte rename to packages/svelte/test/runtime/samples/const-tag-component-without-let/main.svelte diff --git a/test/runtime/samples/const-tag-component/Component.svelte b/packages/svelte/test/runtime/samples/const-tag-component/Component.svelte similarity index 100% rename from test/runtime/samples/const-tag-component/Component.svelte rename to packages/svelte/test/runtime/samples/const-tag-component/Component.svelte diff --git a/packages/svelte/test/runtime/samples/const-tag-component/_config.js b/packages/svelte/test/runtime/samples/const-tag-component/_config.js new file mode 100644 index 0000000000..292df7ce98 --- /dev/null +++ b/packages/svelte/test/runtime/samples/const-tag-component/_config.js @@ -0,0 +1,52 @@ +export default { + html: ` +
12 120 70, 30+4=34
+
12 120 70, 30+4=34
+
12 120 70, 30+4=34
+
+
12 120 70, 30+4=34
+
+
+
12 120 70, 30+4=34
+
+
12 120 70, 30+4=34
+
12 120 70, 30+4=34
+ `, + async test({ component, target, assert }) { + component.constant = 20; + assert.htmlEqual( + target.innerHTML, + ` +
12 240 140, 60+4=64
+
12 240 140, 60+4=64
+
12 240 140, 60+4=64
+
+
12 240 140, 60+4=64
+
+
+
12 240 140, 60+4=64
+
+
12 240 140, 60+4=64
+
12 240 140, 60+4=64
+ ` + ); + + component.box = { width: 5, height: 6 }; + assert.htmlEqual( + target.innerHTML, + ` +
30 600 220, 100+6=106
+
30 600 220, 100+6=106
+
30 600 220, 100+6=106
+
+
30 600 220, 100+6=106
+
+
+
30 600 220, 100+6=106
+
+
30 600 220, 100+6=106
+
30 600 220, 100+6=106
+ ` + ); + } +}; diff --git a/test/runtime/samples/const-tag-component/main.svelte b/packages/svelte/test/runtime/samples/const-tag-component/main.svelte similarity index 100% rename from test/runtime/samples/const-tag-component/main.svelte rename to packages/svelte/test/runtime/samples/const-tag-component/main.svelte diff --git a/packages/svelte/test/runtime/samples/const-tag-dependencies/_config.js b/packages/svelte/test/runtime/samples/const-tag-dependencies/_config.js new file mode 100644 index 0000000000..05ee6339b7 --- /dev/null +++ b/packages/svelte/test/runtime/samples/const-tag-dependencies/_config.js @@ -0,0 +1,15 @@ +export default { + html: ` +
7
+ `, + async test({ component, target, assert }) { + component.a = 5; + + assert.htmlEqual( + target.innerHTML, + ` +
9
+ ` + ); + } +}; diff --git a/test/runtime/samples/const-tag-dependencies/main.svelte b/packages/svelte/test/runtime/samples/const-tag-dependencies/main.svelte similarity index 100% rename from test/runtime/samples/const-tag-dependencies/main.svelte rename to packages/svelte/test/runtime/samples/const-tag-dependencies/main.svelte diff --git a/packages/svelte/test/runtime/samples/const-tag-each-arrow/_config.js b/packages/svelte/test/runtime/samples/const-tag-each-arrow/_config.js new file mode 100644 index 0000000000..e67d4aa4c5 --- /dev/null +++ b/packages/svelte/test/runtime/samples/const-tag-each-arrow/_config.js @@ -0,0 +1,53 @@ +export default { + html: ` +

#FF0000

+

#00FF00

+

#0000FF

+ `, + async test({ component, target, assert }) { + component.constant = 20; + + assert.htmlEqual( + target.innerHTML, + ` +

#FF0000

+

#00FF00

+

#0000FF

+ ` + ); + + component.tags = [ + { + name: 'Red', + color: '#FF0000' + }, + { + name: 'Green', + color: '#00FF00' + }, + { + name: 'Blue', + color: '#0000FF' + }, + { + name: 'Black', + color: '#000000' + }, + { + name: 'White', + color: '#FFFFFF' + } + ]; + + assert.htmlEqual( + target.innerHTML, + ` +

#FF0000

+

#00FF00

+

#0000FF

+

#000000

+

#FFFFFF

+ ` + ); + } +}; diff --git a/test/runtime/samples/const-tag-each-arrow/main.svelte b/packages/svelte/test/runtime/samples/const-tag-each-arrow/main.svelte similarity index 100% rename from test/runtime/samples/const-tag-each-arrow/main.svelte rename to packages/svelte/test/runtime/samples/const-tag-each-arrow/main.svelte diff --git a/test/runtime/samples/const-tag-each-const/_config.js b/packages/svelte/test/runtime/samples/const-tag-each-const/_config.js similarity index 100% rename from test/runtime/samples/const-tag-each-const/_config.js rename to packages/svelte/test/runtime/samples/const-tag-each-const/_config.js diff --git a/test/runtime/samples/const-tag-each-const/main.svelte b/packages/svelte/test/runtime/samples/const-tag-each-const/main.svelte similarity index 100% rename from test/runtime/samples/const-tag-each-const/main.svelte rename to packages/svelte/test/runtime/samples/const-tag-each-const/main.svelte diff --git a/packages/svelte/test/runtime/samples/const-tag-each-destructure-computed-in-computed/_config.js b/packages/svelte/test/runtime/samples/const-tag-each-destructure-computed-in-computed/_config.js new file mode 100644 index 0000000000..26036fcd0c --- /dev/null +++ b/packages/svelte/test/runtime/samples/const-tag-each-destructure-computed-in-computed/_config.js @@ -0,0 +1,13 @@ +export default { + html: ` + + + + `, + + async test({ component, target, assert }) { + component.boxes = [{ length: 10, width: 20, height: 30 }]; + + assert.htmlEqual(target.innerHTML, ''); + } +}; diff --git a/test/runtime/samples/const-tag-each-destructure-computed-in-computed/main.svelte b/packages/svelte/test/runtime/samples/const-tag-each-destructure-computed-in-computed/main.svelte similarity index 100% rename from test/runtime/samples/const-tag-each-destructure-computed-in-computed/main.svelte rename to packages/svelte/test/runtime/samples/const-tag-each-destructure-computed-in-computed/main.svelte diff --git a/packages/svelte/test/runtime/samples/const-tag-each-destructure-computed-props/_config.js b/packages/svelte/test/runtime/samples/const-tag-each-destructure-computed-props/_config.js new file mode 100644 index 0000000000..26036fcd0c --- /dev/null +++ b/packages/svelte/test/runtime/samples/const-tag-each-destructure-computed-props/_config.js @@ -0,0 +1,13 @@ +export default { + html: ` + + + + `, + + async test({ component, target, assert }) { + component.boxes = [{ length: 10, width: 20, height: 30 }]; + + assert.htmlEqual(target.innerHTML, ''); + } +}; diff --git a/test/runtime/samples/const-tag-each-destructure-computed-props/main.svelte b/packages/svelte/test/runtime/samples/const-tag-each-destructure-computed-props/main.svelte similarity index 100% rename from test/runtime/samples/const-tag-each-destructure-computed-props/main.svelte rename to packages/svelte/test/runtime/samples/const-tag-each-destructure-computed-props/main.svelte diff --git a/packages/svelte/test/runtime/samples/const-tag-each-destructure-literals/_config.js b/packages/svelte/test/runtime/samples/const-tag-each-destructure-literals/_config.js new file mode 100644 index 0000000000..6106fdfbd1 --- /dev/null +++ b/packages/svelte/test/runtime/samples/const-tag-each-destructure-literals/_config.js @@ -0,0 +1,36 @@ +export default { + html: ` +
12 120 70, 30+4=34
+
35 350 120, 50+7=57
+
48 480 140, 60+8=68
+ `, + async test({ component, target, assert }) { + component.constant = 20; + + assert.htmlEqual( + target.innerHTML, + ` +
12 240 140, 60+4=64
+
35 700 240, 100+7=107
+
48 960 280, 120+8=128
+ ` + ); + + component.boxes = [ + { width: 3, height: 4 }, + { width: 4, height: 5 }, + { width: 5, height: 6 }, + { width: 6, height: 7 } + ]; + + assert.htmlEqual( + target.innerHTML, + ` +
12 240 140, 60+4=64
+
20 400 180, 80+5=85
+
30 600 220, 100+6=106
+
42 840 260, 120+7=127
+ ` + ); + } +}; diff --git a/test/runtime/samples/const-tag-each-destructure-literals/main.svelte b/packages/svelte/test/runtime/samples/const-tag-each-destructure-literals/main.svelte similarity index 100% rename from test/runtime/samples/const-tag-each-destructure-literals/main.svelte rename to packages/svelte/test/runtime/samples/const-tag-each-destructure-literals/main.svelte diff --git a/packages/svelte/test/runtime/samples/const-tag-each-destructure-nested-rest/_config.js b/packages/svelte/test/runtime/samples/const-tag-each-destructure-nested-rest/_config.js new file mode 100644 index 0000000000..6106fdfbd1 --- /dev/null +++ b/packages/svelte/test/runtime/samples/const-tag-each-destructure-nested-rest/_config.js @@ -0,0 +1,36 @@ +export default { + html: ` +
12 120 70, 30+4=34
+
35 350 120, 50+7=57
+
48 480 140, 60+8=68
+ `, + async test({ component, target, assert }) { + component.constant = 20; + + assert.htmlEqual( + target.innerHTML, + ` +
12 240 140, 60+4=64
+
35 700 240, 100+7=107
+
48 960 280, 120+8=128
+ ` + ); + + component.boxes = [ + { width: 3, height: 4 }, + { width: 4, height: 5 }, + { width: 5, height: 6 }, + { width: 6, height: 7 } + ]; + + assert.htmlEqual( + target.innerHTML, + ` +
12 240 140, 60+4=64
+
20 400 180, 80+5=85
+
30 600 220, 100+6=106
+
42 840 260, 120+7=127
+ ` + ); + } +}; diff --git a/test/runtime/samples/const-tag-each-destructure-nested-rest/main.svelte b/packages/svelte/test/runtime/samples/const-tag-each-destructure-nested-rest/main.svelte similarity index 100% rename from test/runtime/samples/const-tag-each-destructure-nested-rest/main.svelte rename to packages/svelte/test/runtime/samples/const-tag-each-destructure-nested-rest/main.svelte diff --git a/packages/svelte/test/runtime/samples/const-tag-each-destructure/_config.js b/packages/svelte/test/runtime/samples/const-tag-each-destructure/_config.js new file mode 100644 index 0000000000..6106fdfbd1 --- /dev/null +++ b/packages/svelte/test/runtime/samples/const-tag-each-destructure/_config.js @@ -0,0 +1,36 @@ +export default { + html: ` +
12 120 70, 30+4=34
+
35 350 120, 50+7=57
+
48 480 140, 60+8=68
+ `, + async test({ component, target, assert }) { + component.constant = 20; + + assert.htmlEqual( + target.innerHTML, + ` +
12 240 140, 60+4=64
+
35 700 240, 100+7=107
+
48 960 280, 120+8=128
+ ` + ); + + component.boxes = [ + { width: 3, height: 4 }, + { width: 4, height: 5 }, + { width: 5, height: 6 }, + { width: 6, height: 7 } + ]; + + assert.htmlEqual( + target.innerHTML, + ` +
12 240 140, 60+4=64
+
20 400 180, 80+5=85
+
30 600 220, 100+6=106
+
42 840 260, 120+7=127
+ ` + ); + } +}; diff --git a/test/runtime/samples/const-tag-each-destructure/main.svelte b/packages/svelte/test/runtime/samples/const-tag-each-destructure/main.svelte similarity index 100% rename from test/runtime/samples/const-tag-each-destructure/main.svelte rename to packages/svelte/test/runtime/samples/const-tag-each-destructure/main.svelte diff --git a/test/runtime/samples/const-tag-each-duplicated-variable1/_config.js b/packages/svelte/test/runtime/samples/const-tag-each-duplicated-variable1/_config.js similarity index 100% rename from test/runtime/samples/const-tag-each-duplicated-variable1/_config.js rename to packages/svelte/test/runtime/samples/const-tag-each-duplicated-variable1/_config.js diff --git a/test/runtime/samples/const-tag-each-duplicated-variable1/main.svelte b/packages/svelte/test/runtime/samples/const-tag-each-duplicated-variable1/main.svelte similarity index 100% rename from test/runtime/samples/const-tag-each-duplicated-variable1/main.svelte rename to packages/svelte/test/runtime/samples/const-tag-each-duplicated-variable1/main.svelte diff --git a/test/runtime/samples/const-tag-each-duplicated-variable2/_config.js b/packages/svelte/test/runtime/samples/const-tag-each-duplicated-variable2/_config.js similarity index 100% rename from test/runtime/samples/const-tag-each-duplicated-variable2/_config.js rename to packages/svelte/test/runtime/samples/const-tag-each-duplicated-variable2/_config.js diff --git a/test/runtime/samples/const-tag-each-duplicated-variable2/main.svelte b/packages/svelte/test/runtime/samples/const-tag-each-duplicated-variable2/main.svelte similarity index 100% rename from test/runtime/samples/const-tag-each-duplicated-variable2/main.svelte rename to packages/svelte/test/runtime/samples/const-tag-each-duplicated-variable2/main.svelte diff --git a/test/runtime/samples/const-tag-each-duplicated-variable3/_config.js b/packages/svelte/test/runtime/samples/const-tag-each-duplicated-variable3/_config.js similarity index 100% rename from test/runtime/samples/const-tag-each-duplicated-variable3/_config.js rename to packages/svelte/test/runtime/samples/const-tag-each-duplicated-variable3/_config.js diff --git a/test/runtime/samples/const-tag-each-duplicated-variable3/main.svelte b/packages/svelte/test/runtime/samples/const-tag-each-duplicated-variable3/main.svelte similarity index 100% rename from test/runtime/samples/const-tag-each-duplicated-variable3/main.svelte rename to packages/svelte/test/runtime/samples/const-tag-each-duplicated-variable3/main.svelte diff --git a/packages/svelte/test/runtime/samples/const-tag-each-else/_config.js b/packages/svelte/test/runtime/samples/const-tag-each-else/_config.js new file mode 100644 index 0000000000..ab771a51e2 --- /dev/null +++ b/packages/svelte/test/runtime/samples/const-tag-each-else/_config.js @@ -0,0 +1,33 @@ +export default { + html: ` +
12 120 70, 30+4=34
+
35 350 120, 50+7=57
+
48 480 140, 60+8=68
+ `, + async test({ component, target, assert }) { + component.boxes = []; + assert.htmlEqual( + target.innerHTML, + ` +
10 * 2 = 20
+ ` + ); + + component.constant = 35; + assert.htmlEqual( + target.innerHTML, + ` +
35 * 2 = 70
+ ` + ); + + component.boxes = [{ width: 3, height: 4 }]; + + assert.htmlEqual( + target.innerHTML, + ` +
12 420 245, 105+4=109
+ ` + ); + } +}; diff --git a/test/runtime/samples/const-tag-each-else/main.svelte b/packages/svelte/test/runtime/samples/const-tag-each-else/main.svelte similarity index 100% rename from test/runtime/samples/const-tag-each-else/main.svelte rename to packages/svelte/test/runtime/samples/const-tag-each-else/main.svelte diff --git a/test/runtime/samples/const-tag-each-function/_config.js b/packages/svelte/test/runtime/samples/const-tag-each-function/_config.js similarity index 100% rename from test/runtime/samples/const-tag-each-function/_config.js rename to packages/svelte/test/runtime/samples/const-tag-each-function/_config.js diff --git a/test/runtime/samples/const-tag-each-function/main.svelte b/packages/svelte/test/runtime/samples/const-tag-each-function/main.svelte similarity index 100% rename from test/runtime/samples/const-tag-each-function/main.svelte rename to packages/svelte/test/runtime/samples/const-tag-each-function/main.svelte diff --git a/packages/svelte/test/runtime/samples/const-tag-each/_config.js b/packages/svelte/test/runtime/samples/const-tag-each/_config.js new file mode 100644 index 0000000000..6106fdfbd1 --- /dev/null +++ b/packages/svelte/test/runtime/samples/const-tag-each/_config.js @@ -0,0 +1,36 @@ +export default { + html: ` +
12 120 70, 30+4=34
+
35 350 120, 50+7=57
+
48 480 140, 60+8=68
+ `, + async test({ component, target, assert }) { + component.constant = 20; + + assert.htmlEqual( + target.innerHTML, + ` +
12 240 140, 60+4=64
+
35 700 240, 100+7=107
+
48 960 280, 120+8=128
+ ` + ); + + component.boxes = [ + { width: 3, height: 4 }, + { width: 4, height: 5 }, + { width: 5, height: 6 }, + { width: 6, height: 7 } + ]; + + assert.htmlEqual( + target.innerHTML, + ` +
12 240 140, 60+4=64
+
20 400 180, 80+5=85
+
30 600 220, 100+6=106
+
42 840 260, 120+7=127
+ ` + ); + } +}; diff --git a/test/runtime/samples/const-tag-each/main.svelte b/packages/svelte/test/runtime/samples/const-tag-each/main.svelte similarity index 100% rename from test/runtime/samples/const-tag-each/main.svelte rename to packages/svelte/test/runtime/samples/const-tag-each/main.svelte diff --git a/packages/svelte/test/runtime/samples/const-tag-func-function/_config.js b/packages/svelte/test/runtime/samples/const-tag-func-function/_config.js new file mode 100644 index 0000000000..e1a6191fcb --- /dev/null +++ b/packages/svelte/test/runtime/samples/const-tag-func-function/_config.js @@ -0,0 +1,5 @@ +export default { + html: ` + [12,13,14] + ` +}; diff --git a/packages/svelte/test/runtime/samples/const-tag-func-function/main.svelte b/packages/svelte/test/runtime/samples/const-tag-func-function/main.svelte new file mode 100644 index 0000000000..01dce82004 --- /dev/null +++ b/packages/svelte/test/runtime/samples/const-tag-func-function/main.svelte @@ -0,0 +1,8 @@ + + +{#if true} + {@const [func_1] = [[12, 13, 14]]} + {(() => JSON.stringify(func_1))()} +{/if} diff --git a/packages/svelte/test/runtime/samples/const-tag-hoisting/_config.js b/packages/svelte/test/runtime/samples/const-tag-hoisting/_config.js new file mode 100644 index 0000000000..68f1671ee6 --- /dev/null +++ b/packages/svelte/test/runtime/samples/const-tag-hoisting/_config.js @@ -0,0 +1,15 @@ +export default { + html: ` +
4 ^ 4 = 256
+ `, + async test({ component, target, assert }) { + component.value = 3; + + assert.htmlEqual( + target.innerHTML, + ` +
3 ^ 4 = 81
+ ` + ); + } +}; diff --git a/test/runtime/samples/const-tag-hoisting/main.svelte b/packages/svelte/test/runtime/samples/const-tag-hoisting/main.svelte similarity index 100% rename from test/runtime/samples/const-tag-hoisting/main.svelte rename to packages/svelte/test/runtime/samples/const-tag-hoisting/main.svelte diff --git a/packages/svelte/test/runtime/samples/const-tag-if-else-if/_config.js b/packages/svelte/test/runtime/samples/const-tag-if-else-if/_config.js new file mode 100644 index 0000000000..7d85b2290f --- /dev/null +++ b/packages/svelte/test/runtime/samples/const-tag-if-else-if/_config.js @@ -0,0 +1,56 @@ +export default { + html: ` +
20 x 40
+
20 x 40
+ `, + get props() { + return { boxes: [{ width: 20, height: 40 }] }; + }, + async test({ component, target, assert }) { + component.boxes = [{ width: 40, height: 70 }]; + assert.htmlEqual( + target.innerHTML, + ` +
40 x 70
+
40 x 70
+ ` + ); + + component.boxes = []; + + assert.htmlEqual(target.innerHTML, ''); + + component.boxes = [ + { width: 20, height: 40 }, + { width: 30, height: 50 } + ]; + + assert.htmlEqual( + target.innerHTML, + ` +
20 x 40
+
30 x 50
+
20 x 40
+
30 x 50
+ ` + ); + + component.boxes = [ + { width: 80, height: 70 }, + { width: 90, height: 60 } + ]; + + assert.htmlEqual( + target.innerHTML, + ` +
80 x 70
+
90 x 60
+
80 x 70
+
90 x 60
+ ` + ); + + component.boxes = []; + assert.htmlEqual(target.innerHTML, ''); + } +}; diff --git a/test/runtime/samples/const-tag-if-else-if/main.svelte b/packages/svelte/test/runtime/samples/const-tag-if-else-if/main.svelte similarity index 100% rename from test/runtime/samples/const-tag-if-else-if/main.svelte rename to packages/svelte/test/runtime/samples/const-tag-if-else-if/main.svelte diff --git a/packages/svelte/test/runtime/samples/const-tag-if-else-outro/_config.js b/packages/svelte/test/runtime/samples/const-tag-if-else-outro/_config.js new file mode 100644 index 0000000000..4dcd771952 --- /dev/null +++ b/packages/svelte/test/runtime/samples/const-tag-if-else-outro/_config.js @@ -0,0 +1,57 @@ +export default { + html: ` +
20 x 40
+
20 x 40
+ `, + get props() { + return { boxes: [{ width: 20, height: 40 }] }; + }, + async test({ component, target, assert, raf }) { + component.boxes = [{ width: 40, height: 70 }]; + assert.htmlEqual( + target.innerHTML, + ` +
40 x 70
+
40 x 70
+ ` + ); + + component.boxes = []; + + raf.tick(0); + assert.htmlEqual(target.innerHTML, ''); + + component.boxes = [ + { width: 20, height: 40 }, + { width: 30, height: 50 } + ]; + + assert.htmlEqual( + target.innerHTML, + ` +
20 x 40
+
30 x 50
+
20 x 40
+
30 x 50
+ ` + ); + + component.boxes = [ + { width: 80, height: 70 }, + { width: 90, height: 60 } + ]; + + assert.htmlEqual( + target.innerHTML, + ` +
80 x 70
+
90 x 60
+
80 x 70
+
90 x 60
+ ` + ); + + component.boxes = []; + assert.htmlEqual(target.innerHTML, ''); + } +}; diff --git a/test/runtime/samples/const-tag-if-else-outro/main.svelte b/packages/svelte/test/runtime/samples/const-tag-if-else-outro/main.svelte similarity index 100% rename from test/runtime/samples/const-tag-if-else-outro/main.svelte rename to packages/svelte/test/runtime/samples/const-tag-if-else-outro/main.svelte diff --git a/packages/svelte/test/runtime/samples/const-tag-if-else/_config.js b/packages/svelte/test/runtime/samples/const-tag-if-else/_config.js new file mode 100644 index 0000000000..be7c32d9b1 --- /dev/null +++ b/packages/svelte/test/runtime/samples/const-tag-if-else/_config.js @@ -0,0 +1,52 @@ +export default { + html: '
20 x 40
', + get props() { + return { boxes: [{ width: 20, height: 40 }] }; + }, + async test({ component, target, assert }) { + component.boxes = [{ width: 30, height: 60 }]; + + assert.htmlEqual( + target.innerHTML, + ` +
30 x 60
+ ` + ); + + component.boxes = [ + { width: 20, height: 40 }, + { width: 30, height: 50 } + ]; + + assert.htmlEqual( + target.innerHTML, + ` +
20 x 40
+
30 x 50
+ ` + ); + + component.boxes = [ + { width: 80, height: 70 }, + { width: 90, height: 60 } + ]; + + assert.htmlEqual( + target.innerHTML, + ` +
80 x 70
+
90 x 60
+ ` + ); + + component.boxes = [ + { width: 20, height: 40 }, + { width: 30, height: 50 }, + { width: 30, height: 50 } + ]; + assert.htmlEqual(target.innerHTML, '
3
'); + + component.boxes = []; + assert.htmlEqual(target.innerHTML, '
0
'); + } +}; diff --git a/test/runtime/samples/const-tag-if-else/main.svelte b/packages/svelte/test/runtime/samples/const-tag-if-else/main.svelte similarity index 100% rename from test/runtime/samples/const-tag-if-else/main.svelte rename to packages/svelte/test/runtime/samples/const-tag-if-else/main.svelte diff --git a/packages/svelte/test/runtime/samples/const-tag-if/_config.js b/packages/svelte/test/runtime/samples/const-tag-if/_config.js new file mode 100644 index 0000000000..065272301c --- /dev/null +++ b/packages/svelte/test/runtime/samples/const-tag-if/_config.js @@ -0,0 +1,28 @@ +export default { + html: '
10 x 34
', + get props() { + return { boxes: [{ width: 10, height: 34 }] }; + }, + async test({ component, target, assert }) { + component.boxes = [{ width: 20, height: 40 }]; + + assert.htmlEqual( + target.innerHTML, + ` +
20 x 40
+ ` + ); + + component.boxes = []; + assert.htmlEqual(target.innerHTML, ''); + + component.boxes = [{ width: 18, height: 48 }]; + + assert.htmlEqual( + target.innerHTML, + ` +
18 x 48
+ ` + ); + } +}; diff --git a/test/runtime/samples/const-tag-if/main.svelte b/packages/svelte/test/runtime/samples/const-tag-if/main.svelte similarity index 100% rename from test/runtime/samples/const-tag-if/main.svelte rename to packages/svelte/test/runtime/samples/const-tag-if/main.svelte diff --git a/packages/svelte/test/runtime/samples/const-tag-invalidate/_config.js b/packages/svelte/test/runtime/samples/const-tag-invalidate/_config.js new file mode 100644 index 0000000000..e38839776a --- /dev/null +++ b/packages/svelte/test/runtime/samples/const-tag-invalidate/_config.js @@ -0,0 +1,43 @@ +export default { + html: ` +
[Y] A
+
[N] B
+
[N] C
+ `, + async test({ target, assert, window }) { + const [btn1, btn2, btn3] = target.querySelectorAll('button'); + await btn1.dispatchEvent(new window.MouseEvent('click')); + await btn2.dispatchEvent(new window.MouseEvent('click')); + + assert.htmlEqual( + target.innerHTML, + ` +
[N] A
+
[Y] B
+
[N] C
+ ` + ); + + await btn2.dispatchEvent(new window.MouseEvent('click')); + + assert.htmlEqual( + target.innerHTML, + ` +
[N] A
+
[N] B
+
[N] C
+ ` + ); + + await btn3.dispatchEvent(new window.MouseEvent('click')); + + assert.htmlEqual( + target.innerHTML, + ` +
[N] A
+
[N] B
+
[Y] C
+ ` + ); + } +}; diff --git a/test/runtime/samples/const-tag-invalidate/main.svelte b/packages/svelte/test/runtime/samples/const-tag-invalidate/main.svelte similarity index 100% rename from test/runtime/samples/const-tag-invalidate/main.svelte rename to packages/svelte/test/runtime/samples/const-tag-invalidate/main.svelte diff --git a/packages/svelte/test/runtime/samples/const-tag-ordering/_config.js b/packages/svelte/test/runtime/samples/const-tag-ordering/_config.js new file mode 100644 index 0000000000..68f1671ee6 --- /dev/null +++ b/packages/svelte/test/runtime/samples/const-tag-ordering/_config.js @@ -0,0 +1,15 @@ +export default { + html: ` +
4 ^ 4 = 256
+ `, + async test({ component, target, assert }) { + component.value = 3; + + assert.htmlEqual( + target.innerHTML, + ` +
3 ^ 4 = 81
+ ` + ); + } +}; diff --git a/test/runtime/samples/const-tag-ordering/main.svelte b/packages/svelte/test/runtime/samples/const-tag-ordering/main.svelte similarity index 100% rename from test/runtime/samples/const-tag-ordering/main.svelte rename to packages/svelte/test/runtime/samples/const-tag-ordering/main.svelte diff --git a/test/runtime/samples/const-tag-shadow-2/_config.js b/packages/svelte/test/runtime/samples/const-tag-shadow-2/_config.js similarity index 100% rename from test/runtime/samples/const-tag-shadow-2/_config.js rename to packages/svelte/test/runtime/samples/const-tag-shadow-2/_config.js diff --git a/test/runtime/samples/const-tag-shadow-2/main.svelte b/packages/svelte/test/runtime/samples/const-tag-shadow-2/main.svelte similarity index 100% rename from test/runtime/samples/const-tag-shadow-2/main.svelte rename to packages/svelte/test/runtime/samples/const-tag-shadow-2/main.svelte diff --git a/packages/svelte/test/runtime/samples/const-tag-shadow/_config.js b/packages/svelte/test/runtime/samples/const-tag-shadow/_config.js new file mode 100644 index 0000000000..831c67d612 --- /dev/null +++ b/packages/svelte/test/runtime/samples/const-tag-shadow/_config.js @@ -0,0 +1,46 @@ +export default { + html: ` + 7 + 11 + 15 + 7 + 19 + 23 + 27 + 19 + `, + async test({ component, target, assert }) { + component.numbers = [ + { + a: 4, + b: 5, + children: [ + { a: 6, b: 7 }, + { a: 8, b: 9 } + ] + }, + { + a: 10, + b: 11, + children: [ + { a: 12, b: 13 }, + { a: 14, b: 15 } + ] + } + ]; + + assert.htmlEqual( + target.innerHTML, + ` + 9 + 13 + 17 + 9 + 21 + 25 + 29 + 21 + ` + ); + } +}; diff --git a/test/runtime/samples/const-tag-shadow/main.svelte b/packages/svelte/test/runtime/samples/const-tag-shadow/main.svelte similarity index 100% rename from test/runtime/samples/const-tag-shadow/main.svelte rename to packages/svelte/test/runtime/samples/const-tag-shadow/main.svelte diff --git a/test/runtime/samples/constructor-pass-context/Component.svelte b/packages/svelte/test/runtime/samples/constructor-pass-context/Component.svelte similarity index 100% rename from test/runtime/samples/constructor-pass-context/Component.svelte rename to packages/svelte/test/runtime/samples/constructor-pass-context/Component.svelte diff --git a/packages/svelte/test/runtime/samples/constructor-pass-context/_config.js b/packages/svelte/test/runtime/samples/constructor-pass-context/_config.js new file mode 100644 index 0000000000..dd95cc8528 --- /dev/null +++ b/packages/svelte/test/runtime/samples/constructor-pass-context/_config.js @@ -0,0 +1,34 @@ +export default { + async test({ assert, target, window, load }) { + const Component = (await load('Component.svelte')).default; + + const called = []; + const component = new Component({ + target, + context: new Map([ + ['key', 'svelte'], + ['fn', (value) => called.push(value)] + ]) + }); + assert.htmlEqual(target.innerHTML, '
svelte
'); + + const button = target.querySelector('button'); + await button.dispatchEvent(new window.MouseEvent('click')); + + assert.deepEqual(called, ['hello world']); + + component.$destroy(); + }, + async test_ssr({ assert, load }) { + const Component = (await load('./Component.svelte')).default; + + const called = []; + const { html } = Component.render(undefined, { + context: new Map([ + ['key', 'svelte'], + ['fn', (value) => called.push(value)] + ]) + }); + assert.htmlEqual(html, '
svelte
'); + } +}; diff --git a/test/runtime/samples/spread-component-immutable/Widget.svelte b/packages/svelte/test/runtime/samples/constructor-pass-context/main.svelte similarity index 100% rename from test/runtime/samples/spread-component-immutable/Widget.svelte rename to packages/svelte/test/runtime/samples/constructor-pass-context/main.svelte diff --git a/test/runtime/samples/constructor-prefer-passed-context/ChildComponent.svelte b/packages/svelte/test/runtime/samples/constructor-prefer-passed-context/ChildComponent.svelte similarity index 100% rename from test/runtime/samples/constructor-prefer-passed-context/ChildComponent.svelte rename to packages/svelte/test/runtime/samples/constructor-prefer-passed-context/ChildComponent.svelte diff --git a/test/runtime/samples/constructor-prefer-passed-context/_config.js b/packages/svelte/test/runtime/samples/constructor-prefer-passed-context/_config.js similarity index 100% rename from test/runtime/samples/constructor-prefer-passed-context/_config.js rename to packages/svelte/test/runtime/samples/constructor-prefer-passed-context/_config.js diff --git a/test/runtime/samples/constructor-prefer-passed-context/main.svelte b/packages/svelte/test/runtime/samples/constructor-prefer-passed-context/main.svelte similarity index 100% rename from test/runtime/samples/constructor-prefer-passed-context/main.svelte rename to packages/svelte/test/runtime/samples/constructor-prefer-passed-context/main.svelte diff --git a/test/runtime/samples/context-api-b/Leaf.svelte b/packages/svelte/test/runtime/samples/context-api-b/Leaf.svelte similarity index 100% rename from test/runtime/samples/context-api-b/Leaf.svelte rename to packages/svelte/test/runtime/samples/context-api-b/Leaf.svelte diff --git a/test/runtime/samples/context-api-b/Nested.svelte b/packages/svelte/test/runtime/samples/context-api-b/Nested.svelte similarity index 100% rename from test/runtime/samples/context-api-b/Nested.svelte rename to packages/svelte/test/runtime/samples/context-api-b/Nested.svelte diff --git a/test/runtime/samples/context-api-b/_config.js b/packages/svelte/test/runtime/samples/context-api-b/_config.js similarity index 100% rename from test/runtime/samples/context-api-b/_config.js rename to packages/svelte/test/runtime/samples/context-api-b/_config.js diff --git a/test/runtime/samples/context-api-b/main.svelte b/packages/svelte/test/runtime/samples/context-api-b/main.svelte similarity index 100% rename from test/runtime/samples/context-api-b/main.svelte rename to packages/svelte/test/runtime/samples/context-api-b/main.svelte diff --git a/test/runtime/samples/context-api-c/Leaf.svelte b/packages/svelte/test/runtime/samples/context-api-c/Leaf.svelte similarity index 100% rename from test/runtime/samples/context-api-c/Leaf.svelte rename to packages/svelte/test/runtime/samples/context-api-c/Leaf.svelte diff --git a/test/runtime/samples/context-api-c/Nested.svelte b/packages/svelte/test/runtime/samples/context-api-c/Nested.svelte similarity index 100% rename from test/runtime/samples/context-api-c/Nested.svelte rename to packages/svelte/test/runtime/samples/context-api-c/Nested.svelte diff --git a/test/runtime/samples/context-api-c/_config.js b/packages/svelte/test/runtime/samples/context-api-c/_config.js similarity index 100% rename from test/runtime/samples/context-api-c/_config.js rename to packages/svelte/test/runtime/samples/context-api-c/_config.js diff --git a/test/runtime/samples/context-api-c/main.svelte b/packages/svelte/test/runtime/samples/context-api-c/main.svelte similarity index 100% rename from test/runtime/samples/context-api-c/main.svelte rename to packages/svelte/test/runtime/samples/context-api-c/main.svelte diff --git a/test/runtime/samples/context-api-d/Leaf.svelte b/packages/svelte/test/runtime/samples/context-api-d/Leaf.svelte similarity index 100% rename from test/runtime/samples/context-api-d/Leaf.svelte rename to packages/svelte/test/runtime/samples/context-api-d/Leaf.svelte diff --git a/test/runtime/samples/context-api-d/Nested.svelte b/packages/svelte/test/runtime/samples/context-api-d/Nested.svelte similarity index 100% rename from test/runtime/samples/context-api-d/Nested.svelte rename to packages/svelte/test/runtime/samples/context-api-d/Nested.svelte diff --git a/test/runtime/samples/context-api-d/_config.js b/packages/svelte/test/runtime/samples/context-api-d/_config.js similarity index 100% rename from test/runtime/samples/context-api-d/_config.js rename to packages/svelte/test/runtime/samples/context-api-d/_config.js diff --git a/test/runtime/samples/context-api-d/main.svelte b/packages/svelte/test/runtime/samples/context-api-d/main.svelte similarity index 100% rename from test/runtime/samples/context-api-d/main.svelte rename to packages/svelte/test/runtime/samples/context-api-d/main.svelte diff --git a/test/runtime/samples/context-api/Tab.svelte b/packages/svelte/test/runtime/samples/context-api/Tab.svelte similarity index 100% rename from test/runtime/samples/context-api/Tab.svelte rename to packages/svelte/test/runtime/samples/context-api/Tab.svelte diff --git a/test/runtime/samples/context-api/TabList.svelte b/packages/svelte/test/runtime/samples/context-api/TabList.svelte similarity index 100% rename from test/runtime/samples/context-api/TabList.svelte rename to packages/svelte/test/runtime/samples/context-api/TabList.svelte diff --git a/test/runtime/samples/context-api/TabPanel.svelte b/packages/svelte/test/runtime/samples/context-api/TabPanel.svelte similarity index 100% rename from test/runtime/samples/context-api/TabPanel.svelte rename to packages/svelte/test/runtime/samples/context-api/TabPanel.svelte diff --git a/test/runtime/samples/context-api/Tabs.svelte b/packages/svelte/test/runtime/samples/context-api/Tabs.svelte similarity index 100% rename from test/runtime/samples/context-api/Tabs.svelte rename to packages/svelte/test/runtime/samples/context-api/Tabs.svelte diff --git a/packages/svelte/test/runtime/samples/context-api/_config.js b/packages/svelte/test/runtime/samples/context-api/_config.js new file mode 100644 index 0000000000..c1f882f316 --- /dev/null +++ b/packages/svelte/test/runtime/samples/context-api/_config.js @@ -0,0 +1,85 @@ +export default { + html: ` +
+
+ + +
+ +

Small panel

+
+ `, + + async test({ assert, component, target, window }) { + const click = new window.MouseEvent('click'); + let buttons = target.querySelectorAll('button'); + + await buttons[1].dispatchEvent(click); + + assert.htmlEqual( + target.innerHTML, + ` +
+
+ + +
+ +

Large panel

+
+ ` + ); + + component.show_medium = true; + + assert.htmlEqual( + target.innerHTML, + ` +
+
+ + + +
+ +

Large panel

+
+ ` + ); + + buttons = target.querySelectorAll('button'); + + await buttons[1].dispatchEvent(click); + + assert.htmlEqual( + target.innerHTML, + ` +
+
+ + + +
+ +

Medium panel

+
+ ` + ); + + component.show_medium = false; + + assert.htmlEqual( + target.innerHTML, + ` +
+
+ + +
+ +

Large panel

+
+ ` + ); + } +}; diff --git a/test/runtime/samples/context-api/main.svelte b/packages/svelte/test/runtime/samples/context-api/main.svelte similarity index 100% rename from test/runtime/samples/context-api/main.svelte rename to packages/svelte/test/runtime/samples/context-api/main.svelte diff --git a/test/runtime/samples/context-in-await/Child.svelte b/packages/svelte/test/runtime/samples/context-in-await/Child.svelte similarity index 100% rename from test/runtime/samples/context-in-await/Child.svelte rename to packages/svelte/test/runtime/samples/context-in-await/Child.svelte diff --git a/packages/svelte/test/runtime/samples/context-in-await/_config.js b/packages/svelte/test/runtime/samples/context-in-await/_config.js new file mode 100644 index 0000000000..15ae20f3a6 --- /dev/null +++ b/packages/svelte/test/runtime/samples/context-in-await/_config.js @@ -0,0 +1,16 @@ +export default { + html: ` +

...waiting

+ `, + + async test({ assert, component, target }) { + await component.promise; + + assert.htmlEqual( + target.innerHTML, + ` +

Context value: 123

+ ` + ); + } +}; diff --git a/test/runtime/samples/context-in-await/main.svelte b/packages/svelte/test/runtime/samples/context-in-await/main.svelte similarity index 100% rename from test/runtime/samples/context-in-await/main.svelte rename to packages/svelte/test/runtime/samples/context-in-await/main.svelte diff --git a/test/runtime/samples/context-setcontext-return/_config.js b/packages/svelte/test/runtime/samples/context-setcontext-return/_config.js similarity index 100% rename from test/runtime/samples/context-setcontext-return/_config.js rename to packages/svelte/test/runtime/samples/context-setcontext-return/_config.js diff --git a/test/runtime/samples/context-setcontext-return/main.svelte b/packages/svelte/test/runtime/samples/context-setcontext-return/main.svelte similarity index 100% rename from test/runtime/samples/context-setcontext-return/main.svelte rename to packages/svelte/test/runtime/samples/context-setcontext-return/main.svelte diff --git a/test/runtime/samples/contextual-callback-b/_config.js b/packages/svelte/test/runtime/samples/contextual-callback-b/_config.js similarity index 100% rename from test/runtime/samples/contextual-callback-b/_config.js rename to packages/svelte/test/runtime/samples/contextual-callback-b/_config.js diff --git a/test/runtime/samples/contextual-callback-b/main.svelte b/packages/svelte/test/runtime/samples/contextual-callback-b/main.svelte similarity index 100% rename from test/runtime/samples/contextual-callback-b/main.svelte rename to packages/svelte/test/runtime/samples/contextual-callback-b/main.svelte diff --git a/test/runtime/samples/contextual-callback/Widget.svelte b/packages/svelte/test/runtime/samples/contextual-callback/Widget.svelte similarity index 100% rename from test/runtime/samples/contextual-callback/Widget.svelte rename to packages/svelte/test/runtime/samples/contextual-callback/Widget.svelte diff --git a/test/runtime/samples/contextual-callback/_config.js b/packages/svelte/test/runtime/samples/contextual-callback/_config.js similarity index 100% rename from test/runtime/samples/contextual-callback/_config.js rename to packages/svelte/test/runtime/samples/contextual-callback/_config.js diff --git a/test/runtime/samples/contextual-callback/main.svelte b/packages/svelte/test/runtime/samples/contextual-callback/main.svelte similarity index 100% rename from test/runtime/samples/contextual-callback/main.svelte rename to packages/svelte/test/runtime/samples/contextual-callback/main.svelte diff --git a/packages/svelte/test/runtime/samples/css-comments/_config.js b/packages/svelte/test/runtime/samples/css-comments/_config.js new file mode 100644 index 0000000000..44218f090e --- /dev/null +++ b/packages/svelte/test/runtime/samples/css-comments/_config.js @@ -0,0 +1,7 @@ +// JSDOM makes this test pass when it should fail. weird +export default { + test({ assert, target, window }) { + const p = target.querySelector('p'); + assert.equal(window.getComputedStyle(p).color, 'red'); + } +}; diff --git a/test/runtime/samples/css-comments/main.svelte b/packages/svelte/test/runtime/samples/css-comments/main.svelte similarity index 100% rename from test/runtime/samples/css-comments/main.svelte rename to packages/svelte/test/runtime/samples/css-comments/main.svelte diff --git a/test/runtime/samples/css-false/Widget.svelte b/packages/svelte/test/runtime/samples/css-false/Widget.svelte similarity index 100% rename from test/runtime/samples/css-false/Widget.svelte rename to packages/svelte/test/runtime/samples/css-false/Widget.svelte diff --git a/packages/svelte/test/runtime/samples/css-false/_config.js b/packages/svelte/test/runtime/samples/css-false/_config.js new file mode 100644 index 0000000000..43aadcf01b --- /dev/null +++ b/packages/svelte/test/runtime/samples/css-false/_config.js @@ -0,0 +1,12 @@ +export default { + compileOptions: { + css: false + }, + + test({ assert, target, window }) { + const [control, test] = target.querySelectorAll('p'); + + assert.equal(window.getComputedStyle(control).color, ''); + assert.equal(window.getComputedStyle(test).color, ''); + } +}; diff --git a/test/runtime/samples/css-false/main.svelte b/packages/svelte/test/runtime/samples/css-false/main.svelte similarity index 100% rename from test/runtime/samples/css-false/main.svelte rename to packages/svelte/test/runtime/samples/css-false/main.svelte diff --git a/test/runtime/samples/css-space-in-attribute/Widget.svelte b/packages/svelte/test/runtime/samples/css-space-in-attribute/Widget.svelte similarity index 100% rename from test/runtime/samples/css-space-in-attribute/Widget.svelte rename to packages/svelte/test/runtime/samples/css-space-in-attribute/Widget.svelte diff --git a/packages/svelte/test/runtime/samples/css-space-in-attribute/_config.js b/packages/svelte/test/runtime/samples/css-space-in-attribute/_config.js new file mode 100644 index 0000000000..39c9e66e12 --- /dev/null +++ b/packages/svelte/test/runtime/samples/css-space-in-attribute/_config.js @@ -0,0 +1,11 @@ +export default { + test({ assert, target, window }) { + const [control, test] = target.querySelectorAll('p'); + + assert.equal(window.getComputedStyle(control).color, ''); + assert.equal(window.getComputedStyle(control).backgroundColor, ''); + + assert.equal(window.getComputedStyle(test).color, 'red'); + assert.equal(window.getComputedStyle(test).backgroundColor, 'black'); + } +}; diff --git a/test/runtime/samples/css-space-in-attribute/main.svelte b/packages/svelte/test/runtime/samples/css-space-in-attribute/main.svelte similarity index 100% rename from test/runtime/samples/css-space-in-attribute/main.svelte rename to packages/svelte/test/runtime/samples/css-space-in-attribute/main.svelte diff --git a/test/runtime/samples/css-vars-escape/Sub.svelte b/packages/svelte/test/runtime/samples/css-vars-escape/Sub.svelte similarity index 100% rename from test/runtime/samples/css-vars-escape/Sub.svelte rename to packages/svelte/test/runtime/samples/css-vars-escape/Sub.svelte diff --git a/test/runtime/samples/css-vars-escape/_config.js b/packages/svelte/test/runtime/samples/css-vars-escape/_config.js similarity index 100% rename from test/runtime/samples/css-vars-escape/_config.js rename to packages/svelte/test/runtime/samples/css-vars-escape/_config.js diff --git a/test/runtime/samples/css-vars-escape/main.svelte b/packages/svelte/test/runtime/samples/css-vars-escape/main.svelte similarity index 100% rename from test/runtime/samples/css-vars-escape/main.svelte rename to packages/svelte/test/runtime/samples/css-vars-escape/main.svelte diff --git a/test/runtime/samples/css/Widget.svelte b/packages/svelte/test/runtime/samples/css/Widget.svelte similarity index 100% rename from test/runtime/samples/css/Widget.svelte rename to packages/svelte/test/runtime/samples/css/Widget.svelte diff --git a/test/runtime/samples/css/_config.js b/packages/svelte/test/runtime/samples/css/_config.js similarity index 100% rename from test/runtime/samples/css/_config.js rename to packages/svelte/test/runtime/samples/css/_config.js diff --git a/test/runtime/samples/css/main.svelte b/packages/svelte/test/runtime/samples/css/main.svelte similarity index 100% rename from test/runtime/samples/css/main.svelte rename to packages/svelte/test/runtime/samples/css/main.svelte diff --git a/packages/svelte/test/runtime/samples/custom-method/_config.js b/packages/svelte/test/runtime/samples/custom-method/_config.js new file mode 100644 index 0000000000..b720cd255b --- /dev/null +++ b/packages/svelte/test/runtime/samples/custom-method/_config.js @@ -0,0 +1,33 @@ +export default { + html: ` + +

0

+ `, + + async test({ assert, component, target, window }) { + const button = target.querySelector('button'); + const event = new window.MouseEvent('click'); + + await button.dispatchEvent(event); + assert.equal(component.counter, 1); + assert.htmlEqual( + target.innerHTML, + ` + +

1

+ ` + ); + + await button.dispatchEvent(event); + assert.equal(component.counter, 2); + assert.htmlEqual( + target.innerHTML, + ` + +

2

+ ` + ); + + assert.equal(component.foo(), 42); + } +}; diff --git a/test/runtime/samples/custom-method/main.svelte b/packages/svelte/test/runtime/samples/custom-method/main.svelte similarity index 100% rename from test/runtime/samples/custom-method/main.svelte rename to packages/svelte/test/runtime/samples/custom-method/main.svelte diff --git a/test/runtime/samples/deconflict-anchor/Anchor.svelte b/packages/svelte/test/runtime/samples/deconflict-anchor/Anchor.svelte similarity index 100% rename from test/runtime/samples/deconflict-anchor/Anchor.svelte rename to packages/svelte/test/runtime/samples/deconflict-anchor/Anchor.svelte diff --git a/test/runtime/samples/deconflict-anchor/_config.js b/packages/svelte/test/runtime/samples/deconflict-anchor/_config.js similarity index 100% rename from test/runtime/samples/deconflict-anchor/_config.js rename to packages/svelte/test/runtime/samples/deconflict-anchor/_config.js diff --git a/test/runtime/samples/deconflict-anchor/main.svelte b/packages/svelte/test/runtime/samples/deconflict-anchor/main.svelte similarity index 100% rename from test/runtime/samples/deconflict-anchor/main.svelte rename to packages/svelte/test/runtime/samples/deconflict-anchor/main.svelte diff --git a/test/runtime/samples/deconflict-block-methods/_config.js b/packages/svelte/test/runtime/samples/deconflict-block-methods/_config.js similarity index 100% rename from test/runtime/samples/deconflict-block-methods/_config.js rename to packages/svelte/test/runtime/samples/deconflict-block-methods/_config.js diff --git a/test/runtime/samples/deconflict-block-methods/main.svelte b/packages/svelte/test/runtime/samples/deconflict-block-methods/main.svelte similarity index 100% rename from test/runtime/samples/deconflict-block-methods/main.svelte rename to packages/svelte/test/runtime/samples/deconflict-block-methods/main.svelte diff --git a/test/runtime/samples/deconflict-builtins-2/_config.js b/packages/svelte/test/runtime/samples/deconflict-builtins-2/_config.js similarity index 100% rename from test/runtime/samples/deconflict-builtins-2/_config.js rename to packages/svelte/test/runtime/samples/deconflict-builtins-2/_config.js diff --git a/test/runtime/samples/deconflict-builtins-2/main.svelte b/packages/svelte/test/runtime/samples/deconflict-builtins-2/main.svelte similarity index 100% rename from test/runtime/samples/deconflict-builtins-2/main.svelte rename to packages/svelte/test/runtime/samples/deconflict-builtins-2/main.svelte diff --git a/test/runtime/samples/deconflict-builtins/_config.js b/packages/svelte/test/runtime/samples/deconflict-builtins/_config.js similarity index 100% rename from test/runtime/samples/deconflict-builtins/_config.js rename to packages/svelte/test/runtime/samples/deconflict-builtins/_config.js diff --git a/packages/svelte/test/runtime/samples/deconflict-builtins/get.js b/packages/svelte/test/runtime/samples/deconflict-builtins/get.js new file mode 100644 index 0000000000..3ecd58d92f --- /dev/null +++ b/packages/svelte/test/runtime/samples/deconflict-builtins/get.js @@ -0,0 +1,3 @@ +export function get() { + return 'got'; +} diff --git a/test/runtime/samples/deconflict-builtins/main.svelte b/packages/svelte/test/runtime/samples/deconflict-builtins/main.svelte similarity index 100% rename from test/runtime/samples/deconflict-builtins/main.svelte rename to packages/svelte/test/runtime/samples/deconflict-builtins/main.svelte diff --git a/test/runtime/samples/deconflict-component-name-with-global/_config.js b/packages/svelte/test/runtime/samples/deconflict-component-name-with-global/_config.js similarity index 100% rename from test/runtime/samples/deconflict-component-name-with-global/_config.js rename to packages/svelte/test/runtime/samples/deconflict-component-name-with-global/_config.js diff --git a/test/runtime/samples/deconflict-component-name-with-global/main.svelte b/packages/svelte/test/runtime/samples/deconflict-component-name-with-global/main.svelte similarity index 100% rename from test/runtime/samples/deconflict-component-name-with-global/main.svelte rename to packages/svelte/test/runtime/samples/deconflict-component-name-with-global/main.svelte diff --git a/test/runtime/samples/deconflict-component-name-with-module-global/_config.js b/packages/svelte/test/runtime/samples/deconflict-component-name-with-module-global/_config.js similarity index 100% rename from test/runtime/samples/deconflict-component-name-with-module-global/_config.js rename to packages/svelte/test/runtime/samples/deconflict-component-name-with-module-global/_config.js diff --git a/test/runtime/samples/deconflict-component-name-with-module-global/main.svelte b/packages/svelte/test/runtime/samples/deconflict-component-name-with-module-global/main.svelte similarity index 100% rename from test/runtime/samples/deconflict-component-name-with-module-global/main.svelte rename to packages/svelte/test/runtime/samples/deconflict-component-name-with-module-global/main.svelte diff --git a/packages/svelte/test/runtime/samples/deconflict-component-refs/_config.js b/packages/svelte/test/runtime/samples/deconflict-component-refs/_config.js new file mode 100644 index 0000000000..bc9217dbd1 --- /dev/null +++ b/packages/svelte/test/runtime/samples/deconflict-component-refs/_config.js @@ -0,0 +1,27 @@ +export default { + html: ` +
    +
  • +
  • bar
  • +
  • baz
  • +
+ `, + + ssrHtml: ` +
    +
  • +
  • bar
  • +
  • baz
  • +
+ `, + + get props() { + return { + components: [ + { name: 'foo', edit: true }, + { name: 'bar', edit: false }, + { name: 'baz', edit: false } + ] + }; + } +}; diff --git a/test/runtime/samples/deconflict-component-refs/main.svelte b/packages/svelte/test/runtime/samples/deconflict-component-refs/main.svelte similarity index 100% rename from test/runtime/samples/deconflict-component-refs/main.svelte rename to packages/svelte/test/runtime/samples/deconflict-component-refs/main.svelte diff --git a/packages/svelte/test/runtime/samples/deconflict-contexts/_config.js b/packages/svelte/test/runtime/samples/deconflict-contexts/_config.js new file mode 100644 index 0000000000..28607300af --- /dev/null +++ b/packages/svelte/test/runtime/samples/deconflict-contexts/_config.js @@ -0,0 +1,9 @@ +export default { + html: ` +
  • foo
  • bar
  • baz
+ `, + + get props() { + return { components: ['foo', 'bar', 'baz'] }; + } +}; diff --git a/test/runtime/samples/deconflict-contexts/main.svelte b/packages/svelte/test/runtime/samples/deconflict-contexts/main.svelte similarity index 100% rename from test/runtime/samples/deconflict-contexts/main.svelte rename to packages/svelte/test/runtime/samples/deconflict-contexts/main.svelte diff --git a/packages/svelte/test/runtime/samples/deconflict-contextual-action/_config.js b/packages/svelte/test/runtime/samples/deconflict-contextual-action/_config.js new file mode 100644 index 0000000000..c0953a849e --- /dev/null +++ b/packages/svelte/test/runtime/samples/deconflict-contextual-action/_config.js @@ -0,0 +1,13 @@ +let result; + +export default { + before_test() { + result = []; + }, + get props() { + return { collect: (str) => result.push(str) }; + }, + test({ assert }) { + assert.deepEqual(result, ['each_action', 'import_action']); + } +}; diff --git a/test/runtime/samples/deconflict-contextual-action/main.svelte b/packages/svelte/test/runtime/samples/deconflict-contextual-action/main.svelte similarity index 100% rename from test/runtime/samples/deconflict-contextual-action/main.svelte rename to packages/svelte/test/runtime/samples/deconflict-contextual-action/main.svelte diff --git a/test/runtime/samples/deconflict-contextual-action/util.js b/packages/svelte/test/runtime/samples/deconflict-contextual-action/util.js similarity index 100% rename from test/runtime/samples/deconflict-contextual-action/util.js rename to packages/svelte/test/runtime/samples/deconflict-contextual-action/util.js diff --git a/test/runtime/samples/deconflict-contextual-bind/Widget.svelte b/packages/svelte/test/runtime/samples/deconflict-contextual-bind/Widget.svelte similarity index 100% rename from test/runtime/samples/deconflict-contextual-bind/Widget.svelte rename to packages/svelte/test/runtime/samples/deconflict-contextual-bind/Widget.svelte diff --git a/test/runtime/samples/deconflict-contextual-bind/_config.js b/packages/svelte/test/runtime/samples/deconflict-contextual-bind/_config.js similarity index 100% rename from test/runtime/samples/deconflict-contextual-bind/_config.js rename to packages/svelte/test/runtime/samples/deconflict-contextual-bind/_config.js diff --git a/test/runtime/samples/deconflict-contextual-bind/main.svelte b/packages/svelte/test/runtime/samples/deconflict-contextual-bind/main.svelte similarity index 100% rename from test/runtime/samples/deconflict-contextual-bind/main.svelte rename to packages/svelte/test/runtime/samples/deconflict-contextual-bind/main.svelte diff --git a/test/runtime/samples/deconflict-ctx/_config.js b/packages/svelte/test/runtime/samples/deconflict-ctx/_config.js similarity index 100% rename from test/runtime/samples/deconflict-ctx/_config.js rename to packages/svelte/test/runtime/samples/deconflict-ctx/_config.js diff --git a/test/runtime/samples/deconflict-ctx/main.svelte b/packages/svelte/test/runtime/samples/deconflict-ctx/main.svelte similarity index 100% rename from test/runtime/samples/deconflict-ctx/main.svelte rename to packages/svelte/test/runtime/samples/deconflict-ctx/main.svelte diff --git a/packages/svelte/test/runtime/samples/deconflict-elements-indexes/_config.js b/packages/svelte/test/runtime/samples/deconflict-elements-indexes/_config.js new file mode 100644 index 0000000000..ec75d222aa --- /dev/null +++ b/packages/svelte/test/runtime/samples/deconflict-elements-indexes/_config.js @@ -0,0 +1,25 @@ +export default { + html: ` +
+ one +
+ `, + + preserveIdentifiers: true, + + test({ assert, component, target }) { + const { tagList } = component; + tagList.push('two'); + component.tagList = tagList; + + assert.htmlEqual( + target.innerHTML, + ` +
+ one + two +
+ ` + ); + } +}; diff --git a/test/runtime/samples/deconflict-elements-indexes/main.svelte b/packages/svelte/test/runtime/samples/deconflict-elements-indexes/main.svelte similarity index 100% rename from test/runtime/samples/deconflict-elements-indexes/main.svelte rename to packages/svelte/test/runtime/samples/deconflict-elements-indexes/main.svelte diff --git a/test/runtime/samples/deconflict-globals/_config.js b/packages/svelte/test/runtime/samples/deconflict-globals/_config.js similarity index 100% rename from test/runtime/samples/deconflict-globals/_config.js rename to packages/svelte/test/runtime/samples/deconflict-globals/_config.js diff --git a/test/runtime/samples/deconflict-globals/main.svelte b/packages/svelte/test/runtime/samples/deconflict-globals/main.svelte similarity index 100% rename from test/runtime/samples/deconflict-globals/main.svelte rename to packages/svelte/test/runtime/samples/deconflict-globals/main.svelte diff --git a/test/runtime/samples/deconflict-non-helpers/_config.js b/packages/svelte/test/runtime/samples/deconflict-non-helpers/_config.js similarity index 100% rename from test/runtime/samples/deconflict-non-helpers/_config.js rename to packages/svelte/test/runtime/samples/deconflict-non-helpers/_config.js diff --git a/test/runtime/samples/deconflict-non-helpers/main.svelte b/packages/svelte/test/runtime/samples/deconflict-non-helpers/main.svelte similarity index 100% rename from test/runtime/samples/deconflict-non-helpers/main.svelte rename to packages/svelte/test/runtime/samples/deconflict-non-helpers/main.svelte diff --git a/test/runtime/samples/deconflict-non-helpers/module.js b/packages/svelte/test/runtime/samples/deconflict-non-helpers/module.js similarity index 100% rename from test/runtime/samples/deconflict-non-helpers/module.js rename to packages/svelte/test/runtime/samples/deconflict-non-helpers/module.js diff --git a/test/runtime/samples/deconflict-self/_config.js b/packages/svelte/test/runtime/samples/deconflict-self/_config.js similarity index 100% rename from test/runtime/samples/deconflict-self/_config.js rename to packages/svelte/test/runtime/samples/deconflict-self/_config.js diff --git a/test/runtime/samples/deconflict-self/main.svelte b/packages/svelte/test/runtime/samples/deconflict-self/main.svelte similarity index 100% rename from test/runtime/samples/deconflict-self/main.svelte rename to packages/svelte/test/runtime/samples/deconflict-self/main.svelte diff --git a/test/runtime/samples/deconflict-self/nested/main.svelte b/packages/svelte/test/runtime/samples/deconflict-self/nested/main.svelte similarity index 100% rename from test/runtime/samples/deconflict-self/nested/main.svelte rename to packages/svelte/test/runtime/samples/deconflict-self/nested/main.svelte diff --git a/test/runtime/samples/deconflict-spread-i/_config.js b/packages/svelte/test/runtime/samples/deconflict-spread-i/_config.js similarity index 100% rename from test/runtime/samples/deconflict-spread-i/_config.js rename to packages/svelte/test/runtime/samples/deconflict-spread-i/_config.js diff --git a/test/runtime/samples/deconflict-spread-i/main.svelte b/packages/svelte/test/runtime/samples/deconflict-spread-i/main.svelte similarity index 100% rename from test/runtime/samples/deconflict-spread-i/main.svelte rename to packages/svelte/test/runtime/samples/deconflict-spread-i/main.svelte diff --git a/test/runtime/samples/deconflict-template-1/_config.js b/packages/svelte/test/runtime/samples/deconflict-template-1/_config.js similarity index 100% rename from test/runtime/samples/deconflict-template-1/_config.js rename to packages/svelte/test/runtime/samples/deconflict-template-1/_config.js diff --git a/test/runtime/samples/deconflict-template-1/main.svelte b/packages/svelte/test/runtime/samples/deconflict-template-1/main.svelte similarity index 100% rename from test/runtime/samples/deconflict-template-1/main.svelte rename to packages/svelte/test/runtime/samples/deconflict-template-1/main.svelte diff --git a/test/runtime/samples/deconflict-template-1/module.js b/packages/svelte/test/runtime/samples/deconflict-template-1/module.js similarity index 100% rename from test/runtime/samples/deconflict-template-1/module.js rename to packages/svelte/test/runtime/samples/deconflict-template-1/module.js diff --git a/test/runtime/samples/deconflict-template-2/_config.js b/packages/svelte/test/runtime/samples/deconflict-template-2/_config.js similarity index 100% rename from test/runtime/samples/deconflict-template-2/_config.js rename to packages/svelte/test/runtime/samples/deconflict-template-2/_config.js diff --git a/test/runtime/samples/deconflict-template-2/main.svelte b/packages/svelte/test/runtime/samples/deconflict-template-2/main.svelte similarity index 100% rename from test/runtime/samples/deconflict-template-2/main.svelte rename to packages/svelte/test/runtime/samples/deconflict-template-2/main.svelte diff --git a/test/runtime/samples/deconflict-value/Widget.svelte b/packages/svelte/test/runtime/samples/deconflict-value/Widget.svelte similarity index 100% rename from test/runtime/samples/deconflict-value/Widget.svelte rename to packages/svelte/test/runtime/samples/deconflict-value/Widget.svelte diff --git a/test/runtime/samples/deconflict-value/_config.js b/packages/svelte/test/runtime/samples/deconflict-value/_config.js similarity index 100% rename from test/runtime/samples/deconflict-value/_config.js rename to packages/svelte/test/runtime/samples/deconflict-value/_config.js diff --git a/test/runtime/samples/deconflict-value/main.svelte b/packages/svelte/test/runtime/samples/deconflict-value/main.svelte similarity index 100% rename from test/runtime/samples/deconflict-value/main.svelte rename to packages/svelte/test/runtime/samples/deconflict-value/main.svelte diff --git a/test/runtime/samples/deconflict-vars/_config.js b/packages/svelte/test/runtime/samples/deconflict-vars/_config.js similarity index 100% rename from test/runtime/samples/deconflict-vars/_config.js rename to packages/svelte/test/runtime/samples/deconflict-vars/_config.js diff --git a/test/runtime/samples/deconflict-vars/main.svelte b/packages/svelte/test/runtime/samples/deconflict-vars/main.svelte similarity index 100% rename from test/runtime/samples/deconflict-vars/main.svelte rename to packages/svelte/test/runtime/samples/deconflict-vars/main.svelte diff --git a/packages/svelte/test/runtime/samples/default-data-function/_config.js b/packages/svelte/test/runtime/samples/default-data-function/_config.js new file mode 100644 index 0000000000..88f135d119 --- /dev/null +++ b/packages/svelte/test/runtime/samples/default-data-function/_config.js @@ -0,0 +1,8 @@ +export default { + html: '

Hello world!

', + + test({ assert, component, target }) { + component.name = () => 'everybody'; + assert.htmlEqual(target.innerHTML, '

Hello everybody!

'); + } +}; diff --git a/test/runtime/samples/default-data-function/main.svelte b/packages/svelte/test/runtime/samples/default-data-function/main.svelte similarity index 100% rename from test/runtime/samples/default-data-function/main.svelte rename to packages/svelte/test/runtime/samples/default-data-function/main.svelte diff --git a/packages/svelte/test/runtime/samples/default-data-override/_config.js b/packages/svelte/test/runtime/samples/default-data-override/_config.js new file mode 100644 index 0000000000..c626b6599b --- /dev/null +++ b/packages/svelte/test/runtime/samples/default-data-override/_config.js @@ -0,0 +1,7 @@ +export default { + get props() { + return { name: 'everybody' }; + }, + + html: '

Hello everybody!

' +}; diff --git a/test/runtime/samples/default-data-override/main.svelte b/packages/svelte/test/runtime/samples/default-data-override/main.svelte similarity index 100% rename from test/runtime/samples/default-data-override/main.svelte rename to packages/svelte/test/runtime/samples/default-data-override/main.svelte diff --git a/test/runtime/samples/default-data/_config.js b/packages/svelte/test/runtime/samples/default-data/_config.js similarity index 100% rename from test/runtime/samples/default-data/_config.js rename to packages/svelte/test/runtime/samples/default-data/_config.js diff --git a/test/runtime/samples/default-data/main.svelte b/packages/svelte/test/runtime/samples/default-data/main.svelte similarity index 100% rename from test/runtime/samples/default-data/main.svelte rename to packages/svelte/test/runtime/samples/default-data/main.svelte diff --git a/test/runtime/samples/destroy-twice/_config.js b/packages/svelte/test/runtime/samples/destroy-twice/_config.js similarity index 100% rename from test/runtime/samples/destroy-twice/_config.js rename to packages/svelte/test/runtime/samples/destroy-twice/_config.js diff --git a/test/runtime/samples/destroy-twice/main.svelte b/packages/svelte/test/runtime/samples/destroy-twice/main.svelte similarity index 100% rename from test/runtime/samples/destroy-twice/main.svelte rename to packages/svelte/test/runtime/samples/destroy-twice/main.svelte diff --git a/test/runtime/samples/destructured-assignment-pattern-with-object-pattern/_config.js b/packages/svelte/test/runtime/samples/destructured-assignment-pattern-with-object-pattern/_config.js similarity index 100% rename from test/runtime/samples/destructured-assignment-pattern-with-object-pattern/_config.js rename to packages/svelte/test/runtime/samples/destructured-assignment-pattern-with-object-pattern/_config.js diff --git a/test/runtime/samples/destructured-assignment-pattern-with-object-pattern/main.svelte b/packages/svelte/test/runtime/samples/destructured-assignment-pattern-with-object-pattern/main.svelte similarity index 100% rename from test/runtime/samples/destructured-assignment-pattern-with-object-pattern/main.svelte rename to packages/svelte/test/runtime/samples/destructured-assignment-pattern-with-object-pattern/main.svelte diff --git a/test/runtime/samples/destructured-props-1/A.svelte b/packages/svelte/test/runtime/samples/destructured-props-1/A.svelte similarity index 100% rename from test/runtime/samples/destructured-props-1/A.svelte rename to packages/svelte/test/runtime/samples/destructured-props-1/A.svelte diff --git a/test/runtime/samples/destructured-props-1/_config.js b/packages/svelte/test/runtime/samples/destructured-props-1/_config.js similarity index 100% rename from test/runtime/samples/destructured-props-1/_config.js rename to packages/svelte/test/runtime/samples/destructured-props-1/_config.js diff --git a/test/runtime/samples/destructured-props-1/main.svelte b/packages/svelte/test/runtime/samples/destructured-props-1/main.svelte similarity index 100% rename from test/runtime/samples/destructured-props-1/main.svelte rename to packages/svelte/test/runtime/samples/destructured-props-1/main.svelte diff --git a/test/runtime/samples/destructured-props-2/A.svelte b/packages/svelte/test/runtime/samples/destructured-props-2/A.svelte similarity index 100% rename from test/runtime/samples/destructured-props-2/A.svelte rename to packages/svelte/test/runtime/samples/destructured-props-2/A.svelte diff --git a/packages/svelte/test/runtime/samples/destructured-props-2/_config.js b/packages/svelte/test/runtime/samples/destructured-props-2/_config.js new file mode 100644 index 0000000000..973746a633 --- /dev/null +++ b/packages/svelte/test/runtime/samples/destructured-props-2/_config.js @@ -0,0 +1,22 @@ +export default { + html: ` +
x: 1, list_two_a: 2, list_two_b: 5, y: 4, m: 1, n: 2, o: 5, p: 3, q: 4
+
[1,{"a":2},[3,{}]]
+
x: 1, list_two_a: 2, list_two_b: 5, y: 4, m: m, n: n, o: o, p: p, q: q
+
[1,{"a":2},[3,{}]]
+ `, + + async test({ component, assert, target }) { + await component.update(); + + assert.htmlEqual( + target.innerHTML, + ` +
x: 1, list_two_a: 2, list_two_b: 5, y: 4, m: 1, n: 2, o: 5, p: 3, q: 4
+
[1,{"a":2},[3,{}]]
+
x: 1, list_two_a: 2, list_two_b: 5, y: 4, m: MM, n: NN, o: OO, p: PP, q: QQ
+
[1,{"a":2},[3,{}]]
+ ` + ); + } +}; diff --git a/test/runtime/samples/destructured-props-2/main.svelte b/packages/svelte/test/runtime/samples/destructured-props-2/main.svelte similarity index 100% rename from test/runtime/samples/destructured-props-2/main.svelte rename to packages/svelte/test/runtime/samples/destructured-props-2/main.svelte diff --git a/test/runtime/samples/destructured-props-3/A.svelte b/packages/svelte/test/runtime/samples/destructured-props-3/A.svelte similarity index 100% rename from test/runtime/samples/destructured-props-3/A.svelte rename to packages/svelte/test/runtime/samples/destructured-props-3/A.svelte diff --git a/packages/svelte/test/runtime/samples/destructured-props-3/_config.js b/packages/svelte/test/runtime/samples/destructured-props-3/_config.js new file mode 100644 index 0000000000..ff721e78d6 --- /dev/null +++ b/packages/svelte/test/runtime/samples/destructured-props-3/_config.js @@ -0,0 +1,18 @@ +export default { + html: ` +
i: 9, j: 10, k: 11, l: 12, m: 13, n: 14, a: 9, b: 10, c: 11, d: 12, e: 13, f: 14
+
+
i: 9, j: 10, k: 11, l: 12, m: 13, n: 14, a: a, b: 10, c: c, d: d, e: 13, f: f
+ `, + async test({ component, target, assert }) { + await component.update(); + assert.htmlEqual( + target.innerHTML, + ` +
i: 9, j: 10, k: 11, l: 12, m: 13, n: 14, a: 9, b: 10, c: 11, d: 12, e: 13, f: 14
+
+
i: 9, j: 10, k: 11, l: 12, m: 13, n: 14, a: aa, b: 10, c: cc, d: dd, e: 13, f: ff
+ ` + ); + } +}; diff --git a/test/runtime/samples/destructured-props-3/main.svelte b/packages/svelte/test/runtime/samples/destructured-props-3/main.svelte similarity index 100% rename from test/runtime/samples/destructured-props-3/main.svelte rename to packages/svelte/test/runtime/samples/destructured-props-3/main.svelte diff --git a/test/runtime/samples/destructured-props-4/A.svelte b/packages/svelte/test/runtime/samples/destructured-props-4/A.svelte similarity index 100% rename from test/runtime/samples/destructured-props-4/A.svelte rename to packages/svelte/test/runtime/samples/destructured-props-4/A.svelte diff --git a/test/runtime/samples/destructured-props-4/_config.js b/packages/svelte/test/runtime/samples/destructured-props-4/_config.js similarity index 100% rename from test/runtime/samples/destructured-props-4/_config.js rename to packages/svelte/test/runtime/samples/destructured-props-4/_config.js diff --git a/test/runtime/samples/destructured-props-4/main.svelte b/packages/svelte/test/runtime/samples/destructured-props-4/main.svelte similarity index 100% rename from test/runtime/samples/destructured-props-4/main.svelte rename to packages/svelte/test/runtime/samples/destructured-props-4/main.svelte diff --git a/test/runtime/samples/destructured-props-5/A.svelte b/packages/svelte/test/runtime/samples/destructured-props-5/A.svelte similarity index 100% rename from test/runtime/samples/destructured-props-5/A.svelte rename to packages/svelte/test/runtime/samples/destructured-props-5/A.svelte diff --git a/packages/svelte/test/runtime/samples/destructured-props-5/_config.js b/packages/svelte/test/runtime/samples/destructured-props-5/_config.js new file mode 100644 index 0000000000..c55f6c397a --- /dev/null +++ b/packages/svelte/test/runtime/samples/destructured-props-5/_config.js @@ -0,0 +1,22 @@ +export default { + html: ` +
x: 1, list_two_a: 4, list_two_b: 5, y: 3, l: 1, m: 2, n: 4, o: 5, p: 5, q: 6, r: 7, s: 1
+
[1,2,3,{"a":4},[5,{},{},8]]
+
x: 1, list_two_a: 4, list_two_b: 5, y: 3, l: l, m: m, n: n, o: o, p: p, q: q, r: r, s: s
+
[1,2,3,{"a":4},[5,{},{},8]]
+ `, + + async test({ component, assert, target }) { + await component.update(); + + assert.htmlEqual( + target.innerHTML, + ` +
x: 1, list_two_a: 4, list_two_b: 5, y: 3, l: 1, m: 2, n: 4, o: 5, p: 5, q: 6, r: 7, s: 1
+
[1,2,3,{"a":4},[5,{},{},8]]
+
x: 1, list_two_a: 4, list_two_b: 5, y: 3, l: LL, m: MM, n: NN, o: OO, p: PP, q: QQ, r: RR, s: SS
+
[1,2,3,{"a":4},[5,{},{},8]]
+ ` + ); + } +}; diff --git a/test/runtime/samples/destructured-props-5/main.svelte b/packages/svelte/test/runtime/samples/destructured-props-5/main.svelte similarity index 100% rename from test/runtime/samples/destructured-props-5/main.svelte rename to packages/svelte/test/runtime/samples/destructured-props-5/main.svelte diff --git a/packages/svelte/test/runtime/samples/destructuring-assignment-array/_config.js b/packages/svelte/test/runtime/samples/destructuring-assignment-array/_config.js new file mode 100644 index 0000000000..878e3d5e5f --- /dev/null +++ b/packages/svelte/test/runtime/samples/destructuring-assignment-array/_config.js @@ -0,0 +1,26 @@ +export default { + html: ` +
    +
  • Gruyere
  • +
  • Compté
  • +
  • Beaufort
  • +
  • Abondance
  • +
+ `, + + async test({ assert, component, target }) { + await component.swap(0, 1); + + assert.htmlEqual( + target.innerHTML, + ` +
    +
  • Compté
  • +
  • Gruyere
  • +
  • Beaufort
  • +
  • Abondance
  • +
+ ` + ); + } +}; diff --git a/test/runtime/samples/destructuring-assignment-array/main.svelte b/packages/svelte/test/runtime/samples/destructuring-assignment-array/main.svelte similarity index 100% rename from test/runtime/samples/destructuring-assignment-array/main.svelte rename to packages/svelte/test/runtime/samples/destructuring-assignment-array/main.svelte diff --git a/packages/svelte/test/runtime/samples/destructuring-between-exports/_config.js b/packages/svelte/test/runtime/samples/destructuring-between-exports/_config.js new file mode 100644 index 0000000000..05a01b9bba --- /dev/null +++ b/packages/svelte/test/runtime/samples/destructuring-between-exports/_config.js @@ -0,0 +1,8 @@ +export default { + get props() { + return { foo: { bar: 42 } }; + }, + html: ` +

42

+ ` +}; diff --git a/test/runtime/samples/destructuring-between-exports/main.svelte b/packages/svelte/test/runtime/samples/destructuring-between-exports/main.svelte similarity index 100% rename from test/runtime/samples/destructuring-between-exports/main.svelte rename to packages/svelte/test/runtime/samples/destructuring-between-exports/main.svelte diff --git a/packages/svelte/test/runtime/samples/destructuring/_config.js b/packages/svelte/test/runtime/samples/destructuring/_config.js new file mode 100644 index 0000000000..23c13ac46f --- /dev/null +++ b/packages/svelte/test/runtime/samples/destructuring/_config.js @@ -0,0 +1,25 @@ +export default { + html: '', + + get props() { + return { foo: 42 }; + }, + + test({ assert, component, target, window }) { + const event = new window.MouseEvent('click'); + const button = target.querySelector('button'); + + let count = 0; + let number = null; + + component.$on('foo', (event) => { + count++; + number = event.detail.foo; + }); + + button.dispatchEvent(event); + + assert.equal(count, 1); + assert.equal(number, 42); + } +}; diff --git a/test/runtime/samples/destructuring/main.svelte b/packages/svelte/test/runtime/samples/destructuring/main.svelte similarity index 100% rename from test/runtime/samples/destructuring/main.svelte rename to packages/svelte/test/runtime/samples/destructuring/main.svelte diff --git a/packages/svelte/test/runtime/samples/dev-warning-destroy-twice/_config.js b/packages/svelte/test/runtime/samples/dev-warning-destroy-twice/_config.js new file mode 100644 index 0000000000..b700d8d92d --- /dev/null +++ b/packages/svelte/test/runtime/samples/dev-warning-destroy-twice/_config.js @@ -0,0 +1,22 @@ +export default { + compileOptions: { + dev: true + }, + + test({ assert, component }) { + const warn = console.warn; // eslint-disable-line no-console + + const warnings = []; + console.warn = (warning) => { + // eslint-disable-line no-console + warnings.push(warning); + }; + + component.$destroy(); + component.$destroy(); + + assert.deepEqual(warnings, ['Component was already destroyed']); + + console.warn = warn; // eslint-disable-line no-console + } +}; diff --git a/test/runtime/samples/dev-warning-destroy-twice/main.svelte b/packages/svelte/test/runtime/samples/dev-warning-destroy-twice/main.svelte similarity index 100% rename from test/runtime/samples/dev-warning-destroy-twice/main.svelte rename to packages/svelte/test/runtime/samples/dev-warning-destroy-twice/main.svelte diff --git a/packages/svelte/test/runtime/samples/dev-warning-each-block-require-arraylike/_config.js b/packages/svelte/test/runtime/samples/dev-warning-each-block-require-arraylike/_config.js new file mode 100644 index 0000000000..ecf16743a0 --- /dev/null +++ b/packages/svelte/test/runtime/samples/dev-warning-each-block-require-arraylike/_config.js @@ -0,0 +1,6 @@ +export default { + compileOptions: { + dev: true + }, + error: '{#each} only works with iterable values.' +}; diff --git a/test/runtime/samples/dev-warning-each-block-require-arraylike/main.svelte b/packages/svelte/test/runtime/samples/dev-warning-each-block-require-arraylike/main.svelte similarity index 100% rename from test/runtime/samples/dev-warning-each-block-require-arraylike/main.svelte rename to packages/svelte/test/runtime/samples/dev-warning-each-block-require-arraylike/main.svelte diff --git a/packages/svelte/test/runtime/samples/dev-warning-helper/_config.js b/packages/svelte/test/runtime/samples/dev-warning-helper/_config.js new file mode 100644 index 0000000000..e5369d270b --- /dev/null +++ b/packages/svelte/test/runtime/samples/dev-warning-helper/_config.js @@ -0,0 +1,13 @@ +export default { + compileOptions: { + dev: true + }, + + get props() { + return { bar: 1 }; + }, + + html: '2', + + warnings: [] +}; diff --git a/test/runtime/samples/dev-warning-helper/main.svelte b/packages/svelte/test/runtime/samples/dev-warning-helper/main.svelte similarity index 100% rename from test/runtime/samples/dev-warning-helper/main.svelte rename to packages/svelte/test/runtime/samples/dev-warning-helper/main.svelte diff --git a/packages/svelte/test/runtime/samples/dev-warning-missing-data-binding/_config.js b/packages/svelte/test/runtime/samples/dev-warning-missing-data-binding/_config.js new file mode 100644 index 0000000000..d6cb8aaaae --- /dev/null +++ b/packages/svelte/test/runtime/samples/dev-warning-missing-data-binding/_config.js @@ -0,0 +1,7 @@ +export default { + compileOptions: { + dev: true + }, + + warnings: ["
was created without expected prop 'value'"] +}; diff --git a/test/runtime/samples/dev-warning-missing-data-binding/main.svelte b/packages/svelte/test/runtime/samples/dev-warning-missing-data-binding/main.svelte similarity index 100% rename from test/runtime/samples/dev-warning-missing-data-binding/main.svelte rename to packages/svelte/test/runtime/samples/dev-warning-missing-data-binding/main.svelte diff --git a/test/runtime/samples/dev-warning-missing-data-component-bind/Foo.svelte b/packages/svelte/test/runtime/samples/dev-warning-missing-data-component-bind/Foo.svelte similarity index 100% rename from test/runtime/samples/dev-warning-missing-data-component-bind/Foo.svelte rename to packages/svelte/test/runtime/samples/dev-warning-missing-data-component-bind/Foo.svelte diff --git a/packages/svelte/test/runtime/samples/dev-warning-missing-data-component-bind/_config.js b/packages/svelte/test/runtime/samples/dev-warning-missing-data-component-bind/_config.js new file mode 100644 index 0000000000..37400c3e60 --- /dev/null +++ b/packages/svelte/test/runtime/samples/dev-warning-missing-data-component-bind/_config.js @@ -0,0 +1,7 @@ +export default { + compileOptions: { + dev: true + }, + + warnings: [" was created without expected prop 'y'"] +}; diff --git a/test/runtime/samples/dev-warning-missing-data-component-bind/main.svelte b/packages/svelte/test/runtime/samples/dev-warning-missing-data-component-bind/main.svelte similarity index 100% rename from test/runtime/samples/dev-warning-missing-data-component-bind/main.svelte rename to packages/svelte/test/runtime/samples/dev-warning-missing-data-component-bind/main.svelte diff --git a/test/runtime/samples/dev-warning-missing-data-component/Foo.svelte b/packages/svelte/test/runtime/samples/dev-warning-missing-data-component/Foo.svelte similarity index 100% rename from test/runtime/samples/dev-warning-missing-data-component/Foo.svelte rename to packages/svelte/test/runtime/samples/dev-warning-missing-data-component/Foo.svelte diff --git a/packages/svelte/test/runtime/samples/dev-warning-missing-data-component/_config.js b/packages/svelte/test/runtime/samples/dev-warning-missing-data-component/_config.js new file mode 100644 index 0000000000..37400c3e60 --- /dev/null +++ b/packages/svelte/test/runtime/samples/dev-warning-missing-data-component/_config.js @@ -0,0 +1,7 @@ +export default { + compileOptions: { + dev: true + }, + + warnings: [" was created without expected prop 'y'"] +}; diff --git a/test/runtime/samples/dev-warning-missing-data-component/main.svelte b/packages/svelte/test/runtime/samples/dev-warning-missing-data-component/main.svelte similarity index 100% rename from test/runtime/samples/dev-warning-missing-data-component/main.svelte rename to packages/svelte/test/runtime/samples/dev-warning-missing-data-component/main.svelte diff --git a/packages/svelte/test/runtime/samples/dev-warning-missing-data-each/_config.js b/packages/svelte/test/runtime/samples/dev-warning-missing-data-each/_config.js new file mode 100644 index 0000000000..341e66230f --- /dev/null +++ b/packages/svelte/test/runtime/samples/dev-warning-missing-data-each/_config.js @@ -0,0 +1,17 @@ +export default { + compileOptions: { + dev: true + }, + + get props() { + return { + letters: [ + { id: 1, char: 'a' }, + { id: 2, char: 'b' }, + { id: 3, char: 'c' } + ] + }; + }, + + warnings: [] +}; diff --git a/test/runtime/samples/dev-warning-missing-data-each/main.svelte b/packages/svelte/test/runtime/samples/dev-warning-missing-data-each/main.svelte similarity index 100% rename from test/runtime/samples/dev-warning-missing-data-each/main.svelte rename to packages/svelte/test/runtime/samples/dev-warning-missing-data-each/main.svelte diff --git a/test/runtime/samples/dev-warning-missing-data-excludes-event/_config.js b/packages/svelte/test/runtime/samples/dev-warning-missing-data-excludes-event/_config.js similarity index 100% rename from test/runtime/samples/dev-warning-missing-data-excludes-event/_config.js rename to packages/svelte/test/runtime/samples/dev-warning-missing-data-excludes-event/_config.js diff --git a/test/runtime/samples/dev-warning-missing-data-excludes-event/main.svelte b/packages/svelte/test/runtime/samples/dev-warning-missing-data-excludes-event/main.svelte similarity index 100% rename from test/runtime/samples/dev-warning-missing-data-excludes-event/main.svelte rename to packages/svelte/test/runtime/samples/dev-warning-missing-data-excludes-event/main.svelte diff --git a/test/runtime/samples/dev-warning-missing-data-function/_config.js b/packages/svelte/test/runtime/samples/dev-warning-missing-data-function/_config.js similarity index 100% rename from test/runtime/samples/dev-warning-missing-data-function/_config.js rename to packages/svelte/test/runtime/samples/dev-warning-missing-data-function/_config.js diff --git a/test/runtime/samples/dev-warning-missing-data-function/main.svelte b/packages/svelte/test/runtime/samples/dev-warning-missing-data-function/main.svelte similarity index 100% rename from test/runtime/samples/dev-warning-missing-data-function/main.svelte rename to packages/svelte/test/runtime/samples/dev-warning-missing-data-function/main.svelte diff --git a/test/runtime/samples/dev-warning-missing-data/_config.js b/packages/svelte/test/runtime/samples/dev-warning-missing-data/_config.js similarity index 100% rename from test/runtime/samples/dev-warning-missing-data/_config.js rename to packages/svelte/test/runtime/samples/dev-warning-missing-data/_config.js diff --git a/test/runtime/samples/dev-warning-missing-data/main.svelte b/packages/svelte/test/runtime/samples/dev-warning-missing-data/main.svelte similarity index 100% rename from test/runtime/samples/dev-warning-missing-data/main.svelte rename to packages/svelte/test/runtime/samples/dev-warning-missing-data/main.svelte diff --git a/packages/svelte/test/runtime/samples/dev-warning-readonly-computed/_config.js b/packages/svelte/test/runtime/samples/dev-warning-readonly-computed/_config.js new file mode 100644 index 0000000000..e16217f924 --- /dev/null +++ b/packages/svelte/test/runtime/samples/dev-warning-readonly-computed/_config.js @@ -0,0 +1,18 @@ +export default { + compileOptions: { + dev: true + }, + + get props() { + return { a: 42 }; + }, + + test({ assert, component }) { + try { + component.foo = 1; + throw new Error('Expected an error'); + } catch (err) { + assert.equal(err.message, "
: Cannot set read-only property 'foo'"); + } + } +}; diff --git a/test/runtime/samples/dev-warning-readonly-computed/main.svelte b/packages/svelte/test/runtime/samples/dev-warning-readonly-computed/main.svelte similarity index 100% rename from test/runtime/samples/dev-warning-readonly-computed/main.svelte rename to packages/svelte/test/runtime/samples/dev-warning-readonly-computed/main.svelte diff --git a/test/runtime/samples/dev-warning-readonly-window-binding/_config.js b/packages/svelte/test/runtime/samples/dev-warning-readonly-window-binding/_config.js similarity index 100% rename from test/runtime/samples/dev-warning-readonly-window-binding/_config.js rename to packages/svelte/test/runtime/samples/dev-warning-readonly-window-binding/_config.js diff --git a/test/runtime/samples/dev-warning-readonly-window-binding/main.svelte b/packages/svelte/test/runtime/samples/dev-warning-readonly-window-binding/main.svelte similarity index 100% rename from test/runtime/samples/dev-warning-readonly-window-binding/main.svelte rename to packages/svelte/test/runtime/samples/dev-warning-readonly-window-binding/main.svelte diff --git a/test/runtime/samples/dev-warning-unknown-props-2/Foo.svelte b/packages/svelte/test/runtime/samples/dev-warning-unknown-props-2/Foo.svelte similarity index 100% rename from test/runtime/samples/dev-warning-unknown-props-2/Foo.svelte rename to packages/svelte/test/runtime/samples/dev-warning-unknown-props-2/Foo.svelte diff --git a/packages/svelte/test/runtime/samples/dev-warning-unknown-props-2/_config.js b/packages/svelte/test/runtime/samples/dev-warning-unknown-props-2/_config.js new file mode 100644 index 0000000000..6033f45636 --- /dev/null +++ b/packages/svelte/test/runtime/samples/dev-warning-unknown-props-2/_config.js @@ -0,0 +1,7 @@ +export default { + compileOptions: { + dev: true + }, + + warnings: [" was created with unknown prop 'fo'"] +}; diff --git a/test/runtime/samples/dev-warning-unknown-props-2/main.svelte b/packages/svelte/test/runtime/samples/dev-warning-unknown-props-2/main.svelte similarity index 100% rename from test/runtime/samples/dev-warning-unknown-props-2/main.svelte rename to packages/svelte/test/runtime/samples/dev-warning-unknown-props-2/main.svelte diff --git a/test/runtime/samples/dev-warning-unknown-props-with-$$props/Foo.svelte b/packages/svelte/test/runtime/samples/dev-warning-unknown-props-with-$$props/Foo.svelte similarity index 100% rename from test/runtime/samples/dev-warning-unknown-props-with-$$props/Foo.svelte rename to packages/svelte/test/runtime/samples/dev-warning-unknown-props-with-$$props/Foo.svelte diff --git a/test/runtime/samples/dev-warning-unknown-props-with-$$props/_config.js b/packages/svelte/test/runtime/samples/dev-warning-unknown-props-with-$$props/_config.js similarity index 100% rename from test/runtime/samples/dev-warning-unknown-props-with-$$props/_config.js rename to packages/svelte/test/runtime/samples/dev-warning-unknown-props-with-$$props/_config.js diff --git a/test/runtime/samples/dev-warning-unknown-props-with-$$props/main.svelte b/packages/svelte/test/runtime/samples/dev-warning-unknown-props-with-$$props/main.svelte similarity index 100% rename from test/runtime/samples/dev-warning-unknown-props-with-$$props/main.svelte rename to packages/svelte/test/runtime/samples/dev-warning-unknown-props-with-$$props/main.svelte diff --git a/test/runtime/samples/dev-warning-unknown-props-with-$$rest/Foo.svelte b/packages/svelte/test/runtime/samples/dev-warning-unknown-props-with-$$rest/Foo.svelte similarity index 100% rename from test/runtime/samples/dev-warning-unknown-props-with-$$rest/Foo.svelte rename to packages/svelte/test/runtime/samples/dev-warning-unknown-props-with-$$rest/Foo.svelte diff --git a/test/runtime/samples/dev-warning-unknown-props-with-$$rest/_config.js b/packages/svelte/test/runtime/samples/dev-warning-unknown-props-with-$$rest/_config.js similarity index 100% rename from test/runtime/samples/dev-warning-unknown-props-with-$$rest/_config.js rename to packages/svelte/test/runtime/samples/dev-warning-unknown-props-with-$$rest/_config.js diff --git a/test/runtime/samples/dev-warning-unknown-props-with-$$rest/main.svelte b/packages/svelte/test/runtime/samples/dev-warning-unknown-props-with-$$rest/main.svelte similarity index 100% rename from test/runtime/samples/dev-warning-unknown-props-with-$$rest/main.svelte rename to packages/svelte/test/runtime/samples/dev-warning-unknown-props-with-$$rest/main.svelte diff --git a/test/runtime/samples/dev-warning-unknown-props-with-$$scope/Foo.svelte b/packages/svelte/test/runtime/samples/dev-warning-unknown-props-with-$$scope/Foo.svelte similarity index 100% rename from test/runtime/samples/dev-warning-unknown-props-with-$$scope/Foo.svelte rename to packages/svelte/test/runtime/samples/dev-warning-unknown-props-with-$$scope/Foo.svelte diff --git a/test/runtime/samples/dev-warning-unknown-props-with-$$scope/_config.js b/packages/svelte/test/runtime/samples/dev-warning-unknown-props-with-$$scope/_config.js similarity index 100% rename from test/runtime/samples/dev-warning-unknown-props-with-$$scope/_config.js rename to packages/svelte/test/runtime/samples/dev-warning-unknown-props-with-$$scope/_config.js diff --git a/test/runtime/samples/dev-warning-unknown-props-with-$$scope/main.svelte b/packages/svelte/test/runtime/samples/dev-warning-unknown-props-with-$$scope/main.svelte similarity index 100% rename from test/runtime/samples/dev-warning-unknown-props-with-$$scope/main.svelte rename to packages/svelte/test/runtime/samples/dev-warning-unknown-props-with-$$scope/main.svelte diff --git a/test/runtime/samples/dev-warning-unknown-props/Foo.svelte b/packages/svelte/test/runtime/samples/dev-warning-unknown-props/Foo.svelte similarity index 100% rename from test/runtime/samples/dev-warning-unknown-props/Foo.svelte rename to packages/svelte/test/runtime/samples/dev-warning-unknown-props/Foo.svelte diff --git a/packages/svelte/test/runtime/samples/dev-warning-unknown-props/_config.js b/packages/svelte/test/runtime/samples/dev-warning-unknown-props/_config.js new file mode 100644 index 0000000000..6033f45636 --- /dev/null +++ b/packages/svelte/test/runtime/samples/dev-warning-unknown-props/_config.js @@ -0,0 +1,7 @@ +export default { + compileOptions: { + dev: true + }, + + warnings: [" was created with unknown prop 'fo'"] +}; diff --git a/test/runtime/samples/dev-warning-unknown-props/main.svelte b/packages/svelte/test/runtime/samples/dev-warning-unknown-props/main.svelte similarity index 100% rename from test/runtime/samples/dev-warning-unknown-props/main.svelte rename to packages/svelte/test/runtime/samples/dev-warning-unknown-props/main.svelte diff --git a/packages/svelte/test/runtime/samples/document-binding-fullscreen/_config.js b/packages/svelte/test/runtime/samples/document-binding-fullscreen/_config.js new file mode 100644 index 0000000000..da2af40fea --- /dev/null +++ b/packages/svelte/test/runtime/samples/document-binding-fullscreen/_config.js @@ -0,0 +1,31 @@ +export default { + before_test() { + Object.defineProperties(window.document, { + fullscreenElement: { + value: null, + configurable: true + } + }); + }, + + // copied from window-binding + // there's some kind of weird bug with this test... it compiles with the wrong require.extensions hook for some bizarre reason + skip_if_ssr: true, + + async test({ assert, target, window, component }) { + const event = new window.Event('fullscreenchange'); + + const div = target.querySelector('div'); + + Object.defineProperties(window.document, { + fullscreenElement: { + value: div, + configurable: true + } + }); + + window.document.dispatchEvent(event); + + assert.equal(component.fullscreen, div); + } +}; diff --git a/test/runtime/samples/document-binding-fullscreen/main.svelte b/packages/svelte/test/runtime/samples/document-binding-fullscreen/main.svelte similarity index 100% rename from test/runtime/samples/document-binding-fullscreen/main.svelte rename to packages/svelte/test/runtime/samples/document-binding-fullscreen/main.svelte diff --git a/test/runtime/samples/document-event/_config.js b/packages/svelte/test/runtime/samples/document-event/_config.js similarity index 100% rename from test/runtime/samples/document-event/_config.js rename to packages/svelte/test/runtime/samples/document-event/_config.js diff --git a/test/runtime/samples/document-event/main.svelte b/packages/svelte/test/runtime/samples/document-event/main.svelte similarity index 100% rename from test/runtime/samples/document-event/main.svelte rename to packages/svelte/test/runtime/samples/document-event/main.svelte diff --git a/test/runtime/samples/dynamic-component-bindings-recreated-b/Green.svelte b/packages/svelte/test/runtime/samples/dynamic-component-bindings-recreated-b/Green.svelte similarity index 100% rename from test/runtime/samples/dynamic-component-bindings-recreated-b/Green.svelte rename to packages/svelte/test/runtime/samples/dynamic-component-bindings-recreated-b/Green.svelte diff --git a/test/runtime/samples/dynamic-component-bindings-recreated-b/Red.svelte b/packages/svelte/test/runtime/samples/dynamic-component-bindings-recreated-b/Red.svelte similarity index 100% rename from test/runtime/samples/dynamic-component-bindings-recreated-b/Red.svelte rename to packages/svelte/test/runtime/samples/dynamic-component-bindings-recreated-b/Red.svelte diff --git a/packages/svelte/test/runtime/samples/dynamic-component-bindings-recreated-b/_config.js b/packages/svelte/test/runtime/samples/dynamic-component-bindings-recreated-b/_config.js new file mode 100644 index 0000000000..c85280fe79 --- /dev/null +++ b/packages/svelte/test/runtime/samples/dynamic-component-bindings-recreated-b/_config.js @@ -0,0 +1,34 @@ +export default { + get props() { + return { x: true }; + }, + + html: ` +

parent green

+

green green

+ `, + + test({ assert, component, target }) { + component.foo = undefined; + component.x = false; + + assert.htmlEqual( + target.innerHTML, + ` +

parent red

+

red red

+ ` + ); + + component.foo = undefined; + component.x = true; + + assert.htmlEqual( + target.innerHTML, + ` +

parent green

+

green green

+ ` + ); + } +}; diff --git a/test/runtime/samples/dynamic-component-bindings-recreated-b/main.svelte b/packages/svelte/test/runtime/samples/dynamic-component-bindings-recreated-b/main.svelte similarity index 100% rename from test/runtime/samples/dynamic-component-bindings-recreated-b/main.svelte rename to packages/svelte/test/runtime/samples/dynamic-component-bindings-recreated-b/main.svelte diff --git a/test/runtime/samples/dynamic-component-bindings-recreated/Green.svelte b/packages/svelte/test/runtime/samples/dynamic-component-bindings-recreated/Green.svelte similarity index 100% rename from test/runtime/samples/dynamic-component-bindings-recreated/Green.svelte rename to packages/svelte/test/runtime/samples/dynamic-component-bindings-recreated/Green.svelte diff --git a/test/runtime/samples/dynamic-component-bindings-recreated/Red.svelte b/packages/svelte/test/runtime/samples/dynamic-component-bindings-recreated/Red.svelte similarity index 100% rename from test/runtime/samples/dynamic-component-bindings-recreated/Red.svelte rename to packages/svelte/test/runtime/samples/dynamic-component-bindings-recreated/Red.svelte diff --git a/packages/svelte/test/runtime/samples/dynamic-component-bindings-recreated/_config.js b/packages/svelte/test/runtime/samples/dynamic-component-bindings-recreated/_config.js new file mode 100644 index 0000000000..77b2fbdb65 --- /dev/null +++ b/packages/svelte/test/runtime/samples/dynamic-component-bindings-recreated/_config.js @@ -0,0 +1,30 @@ +export default { + get props() { + return { x: true, foo: 'one' }; + }, + + html: ` +

green one

+ `, + + test({ assert, component, target }) { + component.x = false; + + assert.htmlEqual( + target.innerHTML, + ` +

red one

+ ` + ); + + component.foo = 'two'; + component.x = true; + + assert.htmlEqual( + target.innerHTML, + ` +

green two

+ ` + ); + } +}; diff --git a/test/runtime/samples/dynamic-component-bindings-recreated/main.svelte b/packages/svelte/test/runtime/samples/dynamic-component-bindings-recreated/main.svelte similarity index 100% rename from test/runtime/samples/dynamic-component-bindings-recreated/main.svelte rename to packages/svelte/test/runtime/samples/dynamic-component-bindings-recreated/main.svelte diff --git a/test/runtime/samples/dynamic-component-bindings/Bar.svelte b/packages/svelte/test/runtime/samples/dynamic-component-bindings/Bar.svelte similarity index 100% rename from test/runtime/samples/dynamic-component-bindings/Bar.svelte rename to packages/svelte/test/runtime/samples/dynamic-component-bindings/Bar.svelte diff --git a/test/runtime/samples/dynamic-component-bindings/Foo.svelte b/packages/svelte/test/runtime/samples/dynamic-component-bindings/Foo.svelte similarity index 100% rename from test/runtime/samples/dynamic-component-bindings/Foo.svelte rename to packages/svelte/test/runtime/samples/dynamic-component-bindings/Foo.svelte diff --git a/packages/svelte/test/runtime/samples/dynamic-component-bindings/_config.js b/packages/svelte/test/runtime/samples/dynamic-component-bindings/_config.js new file mode 100644 index 0000000000..075e879808 --- /dev/null +++ b/packages/svelte/test/runtime/samples/dynamic-component-bindings/_config.js @@ -0,0 +1,34 @@ +export default { + get props() { + return { x: true }; + }, + + html: ` +

foo

+ + `, + + async test({ assert, component, target, window }) { + let input = target.querySelector('input'); + input.value = 'abc'; + await input.dispatchEvent(new window.Event('input')); + + assert.equal(component.y, 'abc'); + + component.x = false; + + assert.htmlEqual( + target.innerHTML, + ` +

bar

+ + ` + ); + + input = target.querySelector('input'); + input.checked = true; + await input.dispatchEvent(new window.Event('change')); + + assert.equal(component.z, true); + } +}; diff --git a/test/runtime/samples/dynamic-component-bindings/main.svelte b/packages/svelte/test/runtime/samples/dynamic-component-bindings/main.svelte similarity index 100% rename from test/runtime/samples/dynamic-component-bindings/main.svelte rename to packages/svelte/test/runtime/samples/dynamic-component-bindings/main.svelte diff --git a/packages/svelte/test/runtime/samples/dynamic-component-destroy-null/_config.js b/packages/svelte/test/runtime/samples/dynamic-component-destroy-null/_config.js new file mode 100644 index 0000000000..1657c18de9 --- /dev/null +++ b/packages/svelte/test/runtime/samples/dynamic-component-destroy-null/_config.js @@ -0,0 +1,9 @@ +export default { + get props() { + return { x: true }; + }, + + test({ component }) { + component.x = false; + } +}; diff --git a/test/runtime/samples/dynamic-component-destroy-null/main.svelte b/packages/svelte/test/runtime/samples/dynamic-component-destroy-null/main.svelte similarity index 100% rename from test/runtime/samples/dynamic-component-destroy-null/main.svelte rename to packages/svelte/test/runtime/samples/dynamic-component-destroy-null/main.svelte diff --git a/packages/svelte/test/runtime/samples/dynamic-component-dirty/_config.js b/packages/svelte/test/runtime/samples/dynamic-component-dirty/_config.js new file mode 100644 index 0000000000..406203a16a --- /dev/null +++ b/packages/svelte/test/runtime/samples/dynamic-component-dirty/_config.js @@ -0,0 +1,24 @@ +const calls = []; +export default { + get props() { + return { calls }; + }, + + before_test() { + calls.length = 0; + }, + + async test({ assert, component, target, window }) { + const buttons = target.querySelector('button'); + + assert.deepEqual(calls.length, 1); + + const event = new window.MouseEvent('click'); + await buttons.dispatchEvent(event); + + assert.deepEqual(calls.length, 1); + + component.current_path = 'bar'; + assert.deepEqual(calls.length, 2); + } +}; diff --git a/test/runtime/samples/dynamic-component-dirty/main.svelte b/packages/svelte/test/runtime/samples/dynamic-component-dirty/main.svelte similarity index 100% rename from test/runtime/samples/dynamic-component-dirty/main.svelte rename to packages/svelte/test/runtime/samples/dynamic-component-dirty/main.svelte diff --git a/packages/svelte/test/runtime/samples/dynamic-component-evals-props-once/Comp1.svelte b/packages/svelte/test/runtime/samples/dynamic-component-evals-props-once/Comp1.svelte new file mode 100644 index 0000000000..d4fe28a8a3 --- /dev/null +++ b/packages/svelte/test/runtime/samples/dynamic-component-evals-props-once/Comp1.svelte @@ -0,0 +1,5 @@ + + +

value(1) = {value}

diff --git a/packages/svelte/test/runtime/samples/dynamic-component-evals-props-once/Comp2.svelte b/packages/svelte/test/runtime/samples/dynamic-component-evals-props-once/Comp2.svelte new file mode 100644 index 0000000000..07d41f3d84 --- /dev/null +++ b/packages/svelte/test/runtime/samples/dynamic-component-evals-props-once/Comp2.svelte @@ -0,0 +1,5 @@ + + +

value(2) = {value}

diff --git a/packages/svelte/test/runtime/samples/dynamic-component-evals-props-once/_config.js b/packages/svelte/test/runtime/samples/dynamic-component-evals-props-once/_config.js new file mode 100644 index 0000000000..a8c94dbb8a --- /dev/null +++ b/packages/svelte/test/runtime/samples/dynamic-component-evals-props-once/_config.js @@ -0,0 +1,28 @@ +export default { + html: ` +

value(1) = 1

+ + `, + + async test({ assert, component, window, target }) { + const button = target.querySelector('button'); + await button.dispatchEvent(new window.Event('click')); + assert.htmlEqual( + target.innerHTML, + ` +

value(2) = 2

+ + ` + ); + assert.equal(component.n, 2); + await button.dispatchEvent(new window.Event('click')); + assert.htmlEqual( + target.innerHTML, + ` +

value(1) = 3

+ + ` + ); + assert.equal(component.n, 3); + } +}; diff --git a/packages/svelte/test/runtime/samples/dynamic-component-evals-props-once/main.svelte b/packages/svelte/test/runtime/samples/dynamic-component-evals-props-once/main.svelte new file mode 100644 index 0000000000..3a5805b3e5 --- /dev/null +++ b/packages/svelte/test/runtime/samples/dynamic-component-evals-props-once/main.svelte @@ -0,0 +1,12 @@ + + + + + + diff --git a/test/runtime/samples/dynamic-component-events/Bar.svelte b/packages/svelte/test/runtime/samples/dynamic-component-events/Bar.svelte similarity index 100% rename from test/runtime/samples/dynamic-component-events/Bar.svelte rename to packages/svelte/test/runtime/samples/dynamic-component-events/Bar.svelte diff --git a/test/runtime/samples/dynamic-component-events/Foo.svelte b/packages/svelte/test/runtime/samples/dynamic-component-events/Foo.svelte similarity index 100% rename from test/runtime/samples/dynamic-component-events/Foo.svelte rename to packages/svelte/test/runtime/samples/dynamic-component-events/Foo.svelte diff --git a/packages/svelte/test/runtime/samples/dynamic-component-events/_config.js b/packages/svelte/test/runtime/samples/dynamic-component-events/_config.js new file mode 100644 index 0000000000..79174469fc --- /dev/null +++ b/packages/svelte/test/runtime/samples/dynamic-component-events/_config.js @@ -0,0 +1,28 @@ +export default { + get props() { + return { x: true }; + }, + + html: ` + + `, + + test({ assert, component, target, window }) { + const click = new window.MouseEvent('click'); + + target.querySelector('button').dispatchEvent(click); + assert.equal(component.selected, 'foo'); + + component.x = false; + + assert.htmlEqual( + target.innerHTML, + ` + + ` + ); + + target.querySelector('button').dispatchEvent(click); + assert.equal(component.selected, 'bar'); + } +}; diff --git a/test/runtime/samples/dynamic-component-events/main.svelte b/packages/svelte/test/runtime/samples/dynamic-component-events/main.svelte similarity index 100% rename from test/runtime/samples/dynamic-component-events/main.svelte rename to packages/svelte/test/runtime/samples/dynamic-component-events/main.svelte diff --git a/test/runtime/samples/dynamic-component-in-if/Bar.svelte b/packages/svelte/test/runtime/samples/dynamic-component-in-if/Bar.svelte similarity index 100% rename from test/runtime/samples/dynamic-component-in-if/Bar.svelte rename to packages/svelte/test/runtime/samples/dynamic-component-in-if/Bar.svelte diff --git a/test/runtime/samples/dynamic-component-in-if/Foo.svelte b/packages/svelte/test/runtime/samples/dynamic-component-in-if/Foo.svelte similarity index 100% rename from test/runtime/samples/dynamic-component-in-if/Foo.svelte rename to packages/svelte/test/runtime/samples/dynamic-component-in-if/Foo.svelte diff --git a/packages/svelte/test/runtime/samples/dynamic-component-in-if/_config.js b/packages/svelte/test/runtime/samples/dynamic-component-in-if/_config.js new file mode 100644 index 0000000000..d43351d4c3 --- /dev/null +++ b/packages/svelte/test/runtime/samples/dynamic-component-in-if/_config.js @@ -0,0 +1,16 @@ +export default { + html: ` +

Foo

+ `, + + test({ assert, component, target }) { + component.x = component.Bar; + + assert.htmlEqual( + target.innerHTML, + ` +

Bar

+ ` + ); + } +}; diff --git a/test/runtime/samples/dynamic-component-in-if/main.svelte b/packages/svelte/test/runtime/samples/dynamic-component-in-if/main.svelte similarity index 100% rename from test/runtime/samples/dynamic-component-in-if/main.svelte rename to packages/svelte/test/runtime/samples/dynamic-component-in-if/main.svelte diff --git a/test/runtime/samples/dynamic-component-inside-element/Bar.svelte b/packages/svelte/test/runtime/samples/dynamic-component-inside-element/Bar.svelte similarity index 100% rename from test/runtime/samples/dynamic-component-inside-element/Bar.svelte rename to packages/svelte/test/runtime/samples/dynamic-component-inside-element/Bar.svelte diff --git a/test/runtime/samples/dynamic-component-inside-element/Foo.svelte b/packages/svelte/test/runtime/samples/dynamic-component-inside-element/Foo.svelte similarity index 100% rename from test/runtime/samples/dynamic-component-inside-element/Foo.svelte rename to packages/svelte/test/runtime/samples/dynamic-component-inside-element/Foo.svelte diff --git a/packages/svelte/test/runtime/samples/dynamic-component-inside-element/_config.js b/packages/svelte/test/runtime/samples/dynamic-component-inside-element/_config.js new file mode 100644 index 0000000000..e77b24a6bb --- /dev/null +++ b/packages/svelte/test/runtime/samples/dynamic-component-inside-element/_config.js @@ -0,0 +1,20 @@ +export default { + get props() { + return { x: true }; + }, + + html: ` +

true, therefore Foo

+ `, + + test({ assert, component, target }) { + component.x = false; + + assert.htmlEqual( + target.innerHTML, + ` +

false, therefore Bar

+ ` + ); + } +}; diff --git a/test/runtime/samples/dynamic-component-inside-element/main.svelte b/packages/svelte/test/runtime/samples/dynamic-component-inside-element/main.svelte similarity index 100% rename from test/runtime/samples/dynamic-component-inside-element/main.svelte rename to packages/svelte/test/runtime/samples/dynamic-component-inside-element/main.svelte diff --git a/test/runtime/samples/dynamic-component-nulled-out-intro/_config.js b/packages/svelte/test/runtime/samples/dynamic-component-nulled-out-intro/_config.js similarity index 100% rename from test/runtime/samples/dynamic-component-nulled-out-intro/_config.js rename to packages/svelte/test/runtime/samples/dynamic-component-nulled-out-intro/_config.js diff --git a/test/runtime/samples/dynamic-component-nulled-out-intro/main.svelte b/packages/svelte/test/runtime/samples/dynamic-component-nulled-out-intro/main.svelte similarity index 100% rename from test/runtime/samples/dynamic-component-nulled-out-intro/main.svelte rename to packages/svelte/test/runtime/samples/dynamic-component-nulled-out-intro/main.svelte diff --git a/test/runtime/samples/dynamic-component-nulled-out/Foo.svelte b/packages/svelte/test/runtime/samples/dynamic-component-nulled-out/Foo.svelte similarity index 100% rename from test/runtime/samples/dynamic-component-nulled-out/Foo.svelte rename to packages/svelte/test/runtime/samples/dynamic-component-nulled-out/Foo.svelte diff --git a/packages/svelte/test/runtime/samples/dynamic-component-nulled-out/_config.js b/packages/svelte/test/runtime/samples/dynamic-component-nulled-out/_config.js new file mode 100644 index 0000000000..8e66905185 --- /dev/null +++ b/packages/svelte/test/runtime/samples/dynamic-component-nulled-out/_config.js @@ -0,0 +1,22 @@ +export default { + html: ` +

Foo

+ `, + + test({ assert, component, target }) { + const Bar = component.Bar; + + component.Bar = null; + + assert.htmlEqual(target.innerHTML, ''); + + component.Bar = Bar; + + assert.htmlEqual( + target.innerHTML, + ` +

Foo

+ ` + ); + } +}; diff --git a/test/runtime/samples/dynamic-component-nulled-out/main.svelte b/packages/svelte/test/runtime/samples/dynamic-component-nulled-out/main.svelte similarity index 100% rename from test/runtime/samples/dynamic-component-nulled-out/main.svelte rename to packages/svelte/test/runtime/samples/dynamic-component-nulled-out/main.svelte diff --git a/test/runtime/samples/dynamic-component-ref/Foo.svelte b/packages/svelte/test/runtime/samples/dynamic-component-ref/Foo.svelte similarity index 100% rename from test/runtime/samples/dynamic-component-ref/Foo.svelte rename to packages/svelte/test/runtime/samples/dynamic-component-ref/Foo.svelte diff --git a/test/runtime/samples/dynamic-component-ref/_config.js b/packages/svelte/test/runtime/samples/dynamic-component-ref/_config.js similarity index 100% rename from test/runtime/samples/dynamic-component-ref/_config.js rename to packages/svelte/test/runtime/samples/dynamic-component-ref/_config.js diff --git a/test/runtime/samples/dynamic-component-ref/main.svelte b/packages/svelte/test/runtime/samples/dynamic-component-ref/main.svelte similarity index 100% rename from test/runtime/samples/dynamic-component-ref/main.svelte rename to packages/svelte/test/runtime/samples/dynamic-component-ref/main.svelte diff --git a/test/runtime/samples/dynamic-component-slot/Bar.svelte b/packages/svelte/test/runtime/samples/dynamic-component-slot/Bar.svelte similarity index 100% rename from test/runtime/samples/dynamic-component-slot/Bar.svelte rename to packages/svelte/test/runtime/samples/dynamic-component-slot/Bar.svelte diff --git a/test/runtime/samples/dynamic-component-slot/Baz.svelte b/packages/svelte/test/runtime/samples/dynamic-component-slot/Baz.svelte similarity index 100% rename from test/runtime/samples/dynamic-component-slot/Baz.svelte rename to packages/svelte/test/runtime/samples/dynamic-component-slot/Baz.svelte diff --git a/test/runtime/samples/dynamic-component-slot/Foo.svelte b/packages/svelte/test/runtime/samples/dynamic-component-slot/Foo.svelte similarity index 100% rename from test/runtime/samples/dynamic-component-slot/Foo.svelte rename to packages/svelte/test/runtime/samples/dynamic-component-slot/Foo.svelte diff --git a/packages/svelte/test/runtime/samples/dynamic-component-slot/_config.js b/packages/svelte/test/runtime/samples/dynamic-component-slot/_config.js new file mode 100644 index 0000000000..d06be260a5 --- /dev/null +++ b/packages/svelte/test/runtime/samples/dynamic-component-slot/_config.js @@ -0,0 +1,38 @@ +export default { + get props() { + return { x: true }; + }, + + html: ` +

Foo

+
what goes up must come down
+

element

+ you're it +

neither foo nor bar

+ text + a + b + c +
baz
+ `, + + test({ assert, component, target }) { + component.x = false; + + assert.htmlEqual( + target.innerHTML, + ` +

Bar

+

element

+ you're it +

neither foo nor bar

+ text + a + b + c +
baz
+
what goes up must come down
+ ` + ); + } +}; diff --git a/test/runtime/samples/dynamic-component-slot/main.svelte b/packages/svelte/test/runtime/samples/dynamic-component-slot/main.svelte similarity index 100% rename from test/runtime/samples/dynamic-component-slot/main.svelte rename to packages/svelte/test/runtime/samples/dynamic-component-slot/main.svelte diff --git a/packages/svelte/test/runtime/samples/dynamic-component-spread-props/Comp1.svelte b/packages/svelte/test/runtime/samples/dynamic-component-spread-props/Comp1.svelte new file mode 100644 index 0000000000..d4fe28a8a3 --- /dev/null +++ b/packages/svelte/test/runtime/samples/dynamic-component-spread-props/Comp1.svelte @@ -0,0 +1,5 @@ + + +

value(1) = {value}

diff --git a/packages/svelte/test/runtime/samples/dynamic-component-spread-props/Comp2.svelte b/packages/svelte/test/runtime/samples/dynamic-component-spread-props/Comp2.svelte new file mode 100644 index 0000000000..07d41f3d84 --- /dev/null +++ b/packages/svelte/test/runtime/samples/dynamic-component-spread-props/Comp2.svelte @@ -0,0 +1,5 @@ + + +

value(2) = {value}

diff --git a/packages/svelte/test/runtime/samples/dynamic-component-spread-props/_config.js b/packages/svelte/test/runtime/samples/dynamic-component-spread-props/_config.js new file mode 100644 index 0000000000..d5ba1ef64b --- /dev/null +++ b/packages/svelte/test/runtime/samples/dynamic-component-spread-props/_config.js @@ -0,0 +1,26 @@ +export default { + html: ` +

value(1) = 1

+ + `, + + async test({ assert, window, target }) { + const button = target.querySelector('button'); + await button.dispatchEvent(new window.Event('click')); + assert.htmlEqual( + target.innerHTML, + ` +

value(2) = 2

+ + ` + ); + await button.dispatchEvent(new window.Event('click')); + assert.htmlEqual( + target.innerHTML, + ` +

value(1) = 1

+ + ` + ); + } +}; diff --git a/packages/svelte/test/runtime/samples/dynamic-component-spread-props/main.svelte b/packages/svelte/test/runtime/samples/dynamic-component-spread-props/main.svelte new file mode 100644 index 0000000000..b8c45c83a0 --- /dev/null +++ b/packages/svelte/test/runtime/samples/dynamic-component-spread-props/main.svelte @@ -0,0 +1,12 @@ + + + + + diff --git a/test/runtime/samples/dynamic-component-update-existing-instance/Bar.svelte b/packages/svelte/test/runtime/samples/dynamic-component-update-existing-instance/Bar.svelte similarity index 100% rename from test/runtime/samples/dynamic-component-update-existing-instance/Bar.svelte rename to packages/svelte/test/runtime/samples/dynamic-component-update-existing-instance/Bar.svelte diff --git a/test/runtime/samples/dynamic-component-update-existing-instance/Foo.svelte b/packages/svelte/test/runtime/samples/dynamic-component-update-existing-instance/Foo.svelte similarity index 100% rename from test/runtime/samples/dynamic-component-update-existing-instance/Foo.svelte rename to packages/svelte/test/runtime/samples/dynamic-component-update-existing-instance/Foo.svelte diff --git a/packages/svelte/test/runtime/samples/dynamic-component-update-existing-instance/_config.js b/packages/svelte/test/runtime/samples/dynamic-component-update-existing-instance/_config.js new file mode 100644 index 0000000000..7b5f4d48af --- /dev/null +++ b/packages/svelte/test/runtime/samples/dynamic-component-update-existing-instance/_config.js @@ -0,0 +1,20 @@ +export default { + get props() { + return { x: 1 }; + }, + + html: ` +

Foo 1

+ `, + + test({ assert, component, target }) { + component.x = 2; + + assert.htmlEqual( + target.innerHTML, + ` +

Foo 2

+ ` + ); + } +}; diff --git a/test/runtime/samples/dynamic-component-update-existing-instance/main.svelte b/packages/svelte/test/runtime/samples/dynamic-component-update-existing-instance/main.svelte similarity index 100% rename from test/runtime/samples/dynamic-component-update-existing-instance/main.svelte rename to packages/svelte/test/runtime/samples/dynamic-component-update-existing-instance/main.svelte diff --git a/test/runtime/samples/dynamic-component/Bar.svelte b/packages/svelte/test/runtime/samples/dynamic-component/Bar.svelte similarity index 100% rename from test/runtime/samples/dynamic-component/Bar.svelte rename to packages/svelte/test/runtime/samples/dynamic-component/Bar.svelte diff --git a/test/runtime/samples/dynamic-component/Foo.svelte b/packages/svelte/test/runtime/samples/dynamic-component/Foo.svelte similarity index 100% rename from test/runtime/samples/dynamic-component/Foo.svelte rename to packages/svelte/test/runtime/samples/dynamic-component/Foo.svelte diff --git a/packages/svelte/test/runtime/samples/dynamic-component/_config.js b/packages/svelte/test/runtime/samples/dynamic-component/_config.js new file mode 100644 index 0000000000..e2389762f3 --- /dev/null +++ b/packages/svelte/test/runtime/samples/dynamic-component/_config.js @@ -0,0 +1,20 @@ +export default { + get props() { + return { x: true }; + }, + + html: ` +

true, therefore Foo

+ `, + + test({ assert, component, target }) { + component.x = false; + + assert.htmlEqual( + target.innerHTML, + ` +

false, therefore Bar

+ ` + ); + } +}; diff --git a/test/runtime/samples/dynamic-component/main.svelte b/packages/svelte/test/runtime/samples/dynamic-component/main.svelte similarity index 100% rename from test/runtime/samples/dynamic-component/main.svelte rename to packages/svelte/test/runtime/samples/dynamic-component/main.svelte diff --git a/packages/svelte/test/runtime/samples/dynamic-element-action-update/_config.js b/packages/svelte/test/runtime/samples/dynamic-element-action-update/_config.js new file mode 100644 index 0000000000..6fcdbd30b5 --- /dev/null +++ b/packages/svelte/test/runtime/samples/dynamic-element-action-update/_config.js @@ -0,0 +1,44 @@ +let logs = []; + +export default { + html: ` +

tag is h1.

+ `, + get props() { + return { + pushLogs(log) { + logs.push(log); + } + }; + }, + after_test() { + logs = []; + }, + + async test({ assert, component, target }) { + assert.equal(component.tag, 'h1'); + + assert.deepEqual(logs, ['create: h1,opt1']); + component.opt = 'opt2'; + + assert.equal(component.tag, 'h1'); + assert.deepEqual(logs, ['create: h1,opt1', 'update: h1,opt2']); + + component.tag = 'h2'; + + assert.equal(component.tag, 'h2'); + assert.deepEqual(logs, ['create: h1,opt1', 'update: h1,opt2', 'destroy', 'create: h2,opt2']); + assert.htmlEqual(target.innerHTML, '

tag is h2.

'); + + component.tag = false; + assert.deepEqual(logs, [ + 'create: h1,opt1', + 'update: h1,opt2', + 'destroy', + 'create: h2,opt2', + 'destroy' + ]); + + assert.htmlEqual(target.innerHTML, ''); + } +}; diff --git a/packages/svelte/test/runtime/samples/dynamic-element-action-update/main.svelte b/packages/svelte/test/runtime/samples/dynamic-element-action-update/main.svelte new file mode 100644 index 0000000000..f6ffe49ec3 --- /dev/null +++ b/packages/svelte/test/runtime/samples/dynamic-element-action-update/main.svelte @@ -0,0 +1,14 @@ + + +tag is {tag}. diff --git a/packages/svelte/test/runtime/samples/dynamic-element-animation-2/_config.js b/packages/svelte/test/runtime/samples/dynamic-element-animation-2/_config.js new file mode 100644 index 0000000000..d8399cac37 --- /dev/null +++ b/packages/svelte/test/runtime/samples/dynamic-element-animation-2/_config.js @@ -0,0 +1,100 @@ +let originalDivGetBoundingClientRect; +let originalSpanGetBoundingClientRect; +let originalParagraphGetBoundingClientRect; + +export default { + skip_if_ssr: true, + get props() { + return { + things: [ + { id: 1, name: 'a' }, + { id: 2, name: 'b' }, + { id: 3, name: 'c' }, + { id: 4, name: 'd' }, + { id: 5, name: 'e' } + ], + tag: 'div' + }; + }, + + html: ` +
a
+
b
+
c
+
d
+
e
+ `, + + before_test() { + originalDivGetBoundingClientRect = window.HTMLDivElement.prototype.getBoundingClientRect; + originalSpanGetBoundingClientRect = window.HTMLSpanElement.prototype.getBoundingClientRect; + originalParagraphGetBoundingClientRect = + window.HTMLParagraphElement.prototype.getBoundingClientRect; + + window.HTMLDivElement.prototype.getBoundingClientRect = fakeGetBoundingClientRect; + window.HTMLSpanElement.prototype.getBoundingClientRect = fakeGetBoundingClientRect; + window.HTMLParagraphElement.prototype.getBoundingClientRect = fakeGetBoundingClientRect; + + function fakeGetBoundingClientRect() { + const index = [...this.parentNode.children].indexOf(this); + const top = index * 30; + + return { + left: 0, + right: 100, + top, + bottom: top + 20 + }; + } + }, + after_test() { + window.HTMLDivElement.prototype.getBoundingClientRect = originalDivGetBoundingClientRect; + window.HTMLSpanElement.prototype.getBoundingClientRect = originalSpanGetBoundingClientRect; + window.HTMLParagraphElement.prototype.getBoundingClientRect = + originalParagraphGetBoundingClientRect; + }, + + async test({ assert, component, raf }) { + // switch tag and things at the same time + await component.update('p', [ + { id: 5, name: 'e' }, + { id: 2, name: 'b' }, + { id: 3, name: 'c' }, + { id: 4, name: 'd' }, + { id: 1, name: 'a' } + ]); + + const ps = document.querySelectorAll('p'); + assert.equal(ps[0].dy, 120); + assert.equal(ps[4].dy, -120); + + raf.tick(50); + assert.equal(ps[0].dy, 60); + assert.equal(ps[4].dy, -60); + + raf.tick(100); + assert.equal(ps[0].dy, 0); + assert.equal(ps[4].dy, 0); + + await component.update('span', [ + { id: 1, name: 'a' }, + { id: 2, name: 'b' }, + { id: 3, name: 'c' }, + { id: 4, name: 'd' }, + { id: 5, name: 'e' } + ]); + + const spans = document.querySelectorAll('span'); + + assert.equal(spans[0].dy, 120); + assert.equal(spans[4].dy, -120); + + raf.tick(150); + assert.equal(spans[0].dy, 60); + assert.equal(spans[4].dy, -60); + + raf.tick(200); + assert.equal(spans[0].dy, 0); + assert.equal(spans[4].dy, 0); + } +}; diff --git a/test/runtime/samples/dynamic-element-animation-2/main.svelte b/packages/svelte/test/runtime/samples/dynamic-element-animation-2/main.svelte similarity index 100% rename from test/runtime/samples/dynamic-element-animation-2/main.svelte rename to packages/svelte/test/runtime/samples/dynamic-element-animation-2/main.svelte diff --git a/packages/svelte/test/runtime/samples/dynamic-element-animation/_config.js b/packages/svelte/test/runtime/samples/dynamic-element-animation/_config.js new file mode 100644 index 0000000000..58d28c15c0 --- /dev/null +++ b/packages/svelte/test/runtime/samples/dynamic-element-animation/_config.js @@ -0,0 +1,61 @@ +export default { + get props() { + return { + things: [ + { id: 1, name: 'a' }, + { id: 2, name: 'b' }, + { id: 3, name: 'c' }, + { id: 4, name: 'd' }, + { id: 5, name: 'e' } + ], + tag: 'div' + }; + }, + + html: ` +
a
+
b
+
c
+
d
+
e
+ `, + + test({ assert, component, target, raf }) { + component.tag = 'p'; + assert.equal(target.querySelectorAll('p').length, 5); + + component.tag = 'div'; + let divs = target.querySelectorAll('div'); + divs.forEach((div) => { + div.getBoundingClientRect = function () { + const index = [...this.parentNode.children].indexOf(this); + const top = index * 30; + + return { + left: 0, + right: 100, + top, + bottom: top + 20 + }; + }; + }); + + component.things = [ + { id: 5, name: 'e' }, + { id: 2, name: 'b' }, + { id: 3, name: 'c' }, + { id: 4, name: 'd' }, + { id: 1, name: 'a' } + ]; + + divs = target.querySelectorAll('div'); + assert.ok(~divs[0].style.animation.indexOf('__svelte')); + assert.equal(divs[1].style.animation, ''); + assert.equal(divs[2].style.animation, ''); + assert.equal(divs[3].style.animation, ''); + assert.ok(~divs[4].style.animation.indexOf('__svelte')); + + raf.tick(100); + assert.deepEqual([divs[0].style.animation, divs[4].style.animation], ['', '']); + } +}; diff --git a/test/runtime/samples/dynamic-element-animation/main.svelte b/packages/svelte/test/runtime/samples/dynamic-element-animation/main.svelte similarity index 100% rename from test/runtime/samples/dynamic-element-animation/main.svelte rename to packages/svelte/test/runtime/samples/dynamic-element-animation/main.svelte diff --git a/packages/svelte/test/runtime/samples/dynamic-element-attribute-boolean/_config.js b/packages/svelte/test/runtime/samples/dynamic-element-attribute-boolean/_config.js new file mode 100644 index 0000000000..9e5edc7dfd --- /dev/null +++ b/packages/svelte/test/runtime/samples/dynamic-element-attribute-boolean/_config.js @@ -0,0 +1,15 @@ +export default { + get props() { + return { disabled: false }; + }, + html: '', + + test({ assert, component, target }) { + const button = target.querySelector('button'); + assert.equal(button.disabled, false); + + component.disabled = true; + assert.htmlEqual(target.innerHTML, ''); + assert.equal(button.disabled, true); + } +}; diff --git a/test/runtime/samples/dynamic-element-attribute-boolean/main.svelte b/packages/svelte/test/runtime/samples/dynamic-element-attribute-boolean/main.svelte similarity index 100% rename from test/runtime/samples/dynamic-element-attribute-boolean/main.svelte rename to packages/svelte/test/runtime/samples/dynamic-element-attribute-boolean/main.svelte diff --git a/packages/svelte/test/runtime/samples/dynamic-element-attribute-spread/_config.js b/packages/svelte/test/runtime/samples/dynamic-element-attribute-spread/_config.js new file mode 100644 index 0000000000..ad9fe70818 --- /dev/null +++ b/packages/svelte/test/runtime/samples/dynamic-element-attribute-spread/_config.js @@ -0,0 +1,25 @@ +export default { + get props() { + return { + props: { + disabled: true, + type: 'button', + 'data-named': 'foo' + } + }; + }, + html: '', + + test({ assert, component, target }) { + const button = target.querySelector('button'); + assert.equal(button.disabled, true); + assert.equal(button.type, 'button'); + assert.equal(button.dataset.named, 'foo'); + + component.props = { type: 'submit' }; + assert.htmlEqual(target.innerHTML, ''); + assert.equal(button.disabled, false); + assert.equal(button.type, 'submit'); + assert.equal(button.dataset.named, undefined); + } +}; diff --git a/test/runtime/samples/dynamic-element-attribute-spread/main.svelte b/packages/svelte/test/runtime/samples/dynamic-element-attribute-spread/main.svelte similarity index 100% rename from test/runtime/samples/dynamic-element-attribute-spread/main.svelte rename to packages/svelte/test/runtime/samples/dynamic-element-attribute-spread/main.svelte diff --git a/packages/svelte/test/runtime/samples/dynamic-element-attribute/_config.js b/packages/svelte/test/runtime/samples/dynamic-element-attribute/_config.js new file mode 100644 index 0000000000..0010ccf49b --- /dev/null +++ b/packages/svelte/test/runtime/samples/dynamic-element-attribute/_config.js @@ -0,0 +1,17 @@ +export default { + get props() { + return { tag: 'div' }; + }, + html: '
Foo
', + + test({ assert, component, target }) { + component.tag = 'h1'; + + assert.htmlEqual( + target.innerHTML, + ` +

Foo

+ ` + ); + } +}; diff --git a/test/runtime/samples/dynamic-element-attribute/main.svelte b/packages/svelte/test/runtime/samples/dynamic-element-attribute/main.svelte similarity index 100% rename from test/runtime/samples/dynamic-element-attribute/main.svelte rename to packages/svelte/test/runtime/samples/dynamic-element-attribute/main.svelte diff --git a/test/runtime/samples/dynamic-element-binding-this/_config.js b/packages/svelte/test/runtime/samples/dynamic-element-binding-this/_config.js similarity index 100% rename from test/runtime/samples/dynamic-element-binding-this/_config.js rename to packages/svelte/test/runtime/samples/dynamic-element-binding-this/_config.js diff --git a/test/runtime/samples/dynamic-element-binding-this/main.svelte b/packages/svelte/test/runtime/samples/dynamic-element-binding-this/main.svelte similarity index 100% rename from test/runtime/samples/dynamic-element-binding-this/main.svelte rename to packages/svelte/test/runtime/samples/dynamic-element-binding-this/main.svelte diff --git a/packages/svelte/test/runtime/samples/dynamic-element-change-tag/_config.js b/packages/svelte/test/runtime/samples/dynamic-element-change-tag/_config.js new file mode 100644 index 0000000000..b12c0da54c --- /dev/null +++ b/packages/svelte/test/runtime/samples/dynamic-element-change-tag/_config.js @@ -0,0 +1,17 @@ +export default { + get props() { + return { tag: 'div' }; + }, + html: '
Foo
', + + test({ assert, component, target }) { + component.tag = 'h1'; + + assert.htmlEqual( + target.innerHTML, + ` +

Foo

+ ` + ); + } +}; diff --git a/test/runtime/samples/dynamic-element-change-tag/main.svelte b/packages/svelte/test/runtime/samples/dynamic-element-change-tag/main.svelte similarity index 100% rename from test/runtime/samples/dynamic-element-change-tag/main.svelte rename to packages/svelte/test/runtime/samples/dynamic-element-change-tag/main.svelte diff --git a/test/runtime/samples/dynamic-element-class-directive/Link.svelte b/packages/svelte/test/runtime/samples/dynamic-element-class-directive/Link.svelte similarity index 100% rename from test/runtime/samples/dynamic-element-class-directive/Link.svelte rename to packages/svelte/test/runtime/samples/dynamic-element-class-directive/Link.svelte diff --git a/test/runtime/samples/dynamic-element-class-directive/_config.js b/packages/svelte/test/runtime/samples/dynamic-element-class-directive/_config.js similarity index 100% rename from test/runtime/samples/dynamic-element-class-directive/_config.js rename to packages/svelte/test/runtime/samples/dynamic-element-class-directive/_config.js diff --git a/test/runtime/samples/dynamic-element-class-directive/main.svelte b/packages/svelte/test/runtime/samples/dynamic-element-class-directive/main.svelte similarity index 100% rename from test/runtime/samples/dynamic-element-class-directive/main.svelte rename to packages/svelte/test/runtime/samples/dynamic-element-class-directive/main.svelte diff --git a/test/runtime/samples/dynamic-element-empty-tag/_config.js b/packages/svelte/test/runtime/samples/dynamic-element-empty-tag/_config.js similarity index 100% rename from test/runtime/samples/dynamic-element-empty-tag/_config.js rename to packages/svelte/test/runtime/samples/dynamic-element-empty-tag/_config.js diff --git a/test/runtime/samples/dynamic-element-empty-tag/main.svelte b/packages/svelte/test/runtime/samples/dynamic-element-empty-tag/main.svelte similarity index 100% rename from test/runtime/samples/dynamic-element-empty-tag/main.svelte rename to packages/svelte/test/runtime/samples/dynamic-element-empty-tag/main.svelte diff --git a/packages/svelte/test/runtime/samples/dynamic-element-event-handler1/_config.js b/packages/svelte/test/runtime/samples/dynamic-element-event-handler1/_config.js new file mode 100644 index 0000000000..aabb4bfe26 --- /dev/null +++ b/packages/svelte/test/runtime/samples/dynamic-element-event-handler1/_config.js @@ -0,0 +1,25 @@ +let clicked = false; +function handler() { + clicked = true; +} + +export default { + get props() { + return { handler }; + }, + html: '', + + before_test() { + clicked = false; + }, + + test({ assert, target }) { + assert.equal(clicked, false); + + const button = target.querySelector('button'); + const click = new window.MouseEvent('click'); + button.dispatchEvent(click); + + assert.equal(clicked, true); + } +}; diff --git a/test/runtime/samples/dynamic-element-event-handler1/main.svelte b/packages/svelte/test/runtime/samples/dynamic-element-event-handler1/main.svelte similarity index 100% rename from test/runtime/samples/dynamic-element-event-handler1/main.svelte rename to packages/svelte/test/runtime/samples/dynamic-element-event-handler1/main.svelte diff --git a/packages/svelte/test/runtime/samples/dynamic-element-event-handler2/_config.js b/packages/svelte/test/runtime/samples/dynamic-element-event-handler2/_config.js new file mode 100644 index 0000000000..3b98130c54 --- /dev/null +++ b/packages/svelte/test/runtime/samples/dynamic-element-event-handler2/_config.js @@ -0,0 +1,26 @@ +let clicked = false; +function handler() { + clicked = true; +} + +export default { + get props() { + return { tag: 'div', handler }; + }, + html: '
Foo
', + + before_test() { + clicked = false; + }, + + test({ assert, component, target }) { + assert.equal(clicked, false); + + component.tag = 'button'; + const button = target.querySelector('button'); + const click = new window.MouseEvent('click'); + button.dispatchEvent(click); + + assert.equal(clicked, true); + } +}; diff --git a/test/runtime/samples/dynamic-element-event-handler2/main.svelte b/packages/svelte/test/runtime/samples/dynamic-element-event-handler2/main.svelte similarity index 100% rename from test/runtime/samples/dynamic-element-event-handler2/main.svelte rename to packages/svelte/test/runtime/samples/dynamic-element-event-handler2/main.svelte diff --git a/test/runtime/samples/dynamic-element-expression/_config.js b/packages/svelte/test/runtime/samples/dynamic-element-expression/_config.js similarity index 100% rename from test/runtime/samples/dynamic-element-expression/_config.js rename to packages/svelte/test/runtime/samples/dynamic-element-expression/_config.js diff --git a/test/runtime/samples/dynamic-element-expression/main.svelte b/packages/svelte/test/runtime/samples/dynamic-element-expression/main.svelte similarity index 100% rename from test/runtime/samples/dynamic-element-expression/main.svelte rename to packages/svelte/test/runtime/samples/dynamic-element-expression/main.svelte diff --git a/packages/svelte/test/runtime/samples/dynamic-element-invalid-this/_config.js b/packages/svelte/test/runtime/samples/dynamic-element-invalid-this/_config.js new file mode 100644 index 0000000000..8d6ec016d5 --- /dev/null +++ b/packages/svelte/test/runtime/samples/dynamic-element-invalid-this/_config.js @@ -0,0 +1,9 @@ +export default { + compileOptions: { + dev: true + }, + get props() { + return { tag: 123 }; + }, + error: ' expects "this" attribute to be a string.' +}; diff --git a/test/runtime/samples/dynamic-element-invalid-this/main.svelte b/packages/svelte/test/runtime/samples/dynamic-element-invalid-this/main.svelte similarity index 100% rename from test/runtime/samples/dynamic-element-invalid-this/main.svelte rename to packages/svelte/test/runtime/samples/dynamic-element-invalid-this/main.svelte diff --git a/test/runtime/samples/dynamic-element-null-tag/_config.js b/packages/svelte/test/runtime/samples/dynamic-element-null-tag/_config.js similarity index 100% rename from test/runtime/samples/dynamic-element-null-tag/_config.js rename to packages/svelte/test/runtime/samples/dynamic-element-null-tag/_config.js diff --git a/test/runtime/samples/dynamic-element-null-tag/main.svelte b/packages/svelte/test/runtime/samples/dynamic-element-null-tag/main.svelte similarity index 100% rename from test/runtime/samples/dynamic-element-null-tag/main.svelte rename to packages/svelte/test/runtime/samples/dynamic-element-null-tag/main.svelte diff --git a/packages/svelte/test/runtime/samples/dynamic-element-pass-props/_config.js b/packages/svelte/test/runtime/samples/dynamic-element-pass-props/_config.js new file mode 100644 index 0000000000..1cc5773f3e --- /dev/null +++ b/packages/svelte/test/runtime/samples/dynamic-element-pass-props/_config.js @@ -0,0 +1,18 @@ +let clicked = false; + +export default { + get props() { + return { + tag: 'div', + onClick: () => (clicked = true) + }; + }, + html: '
Foo
', + + async test({ assert, target, window }) { + const div = target.querySelector('div'); + await div.dispatchEvent(new window.MouseEvent('click')); + + assert.equal(clicked, true); + } +}; diff --git a/test/runtime/samples/dynamic-element-pass-props/main.svelte b/packages/svelte/test/runtime/samples/dynamic-element-pass-props/main.svelte similarity index 100% rename from test/runtime/samples/dynamic-element-pass-props/main.svelte rename to packages/svelte/test/runtime/samples/dynamic-element-pass-props/main.svelte diff --git a/test/runtime/samples/dynamic-element-slot/Foo.svelte b/packages/svelte/test/runtime/samples/dynamic-element-slot/Foo.svelte similarity index 100% rename from test/runtime/samples/dynamic-element-slot/Foo.svelte rename to packages/svelte/test/runtime/samples/dynamic-element-slot/Foo.svelte diff --git a/packages/svelte/test/runtime/samples/dynamic-element-slot/_config.js b/packages/svelte/test/runtime/samples/dynamic-element-slot/_config.js new file mode 100644 index 0000000000..b4f6f5f444 --- /dev/null +++ b/packages/svelte/test/runtime/samples/dynamic-element-slot/_config.js @@ -0,0 +1,32 @@ +export default { + get props() { + return { x: true }; + }, + + html: ` +

Foo

+
+

This is default slot

+
+
+

This is other slot

+
+ `, + + test({ assert, component, target }) { + component.tag = 'h2'; + + assert.htmlEqual( + target.innerHTML, + ` +

Foo

+
+

This is default slot

+
+
+

This is other slot

+
+ ` + ); + } +}; diff --git a/test/runtime/samples/dynamic-element-slot/main.svelte b/packages/svelte/test/runtime/samples/dynamic-element-slot/main.svelte similarity index 100% rename from test/runtime/samples/dynamic-element-slot/main.svelte rename to packages/svelte/test/runtime/samples/dynamic-element-slot/main.svelte diff --git a/test/runtime/samples/dynamic-element-store/_config.js b/packages/svelte/test/runtime/samples/dynamic-element-store/_config.js similarity index 100% rename from test/runtime/samples/dynamic-element-store/_config.js rename to packages/svelte/test/runtime/samples/dynamic-element-store/_config.js diff --git a/test/runtime/samples/dynamic-element-store/main.svelte b/packages/svelte/test/runtime/samples/dynamic-element-store/main.svelte similarity index 100% rename from test/runtime/samples/dynamic-element-store/main.svelte rename to packages/svelte/test/runtime/samples/dynamic-element-store/main.svelte diff --git a/test/runtime/samples/dynamic-element-string/_config.js b/packages/svelte/test/runtime/samples/dynamic-element-string/_config.js similarity index 100% rename from test/runtime/samples/dynamic-element-string/_config.js rename to packages/svelte/test/runtime/samples/dynamic-element-string/_config.js diff --git a/test/runtime/samples/dynamic-element-string/main.svelte b/packages/svelte/test/runtime/samples/dynamic-element-string/main.svelte similarity index 100% rename from test/runtime/samples/dynamic-element-string/main.svelte rename to packages/svelte/test/runtime/samples/dynamic-element-string/main.svelte diff --git a/test/runtime/samples/dynamic-element-svg/_config.js b/packages/svelte/test/runtime/samples/dynamic-element-svg/_config.js similarity index 100% rename from test/runtime/samples/dynamic-element-svg/_config.js rename to packages/svelte/test/runtime/samples/dynamic-element-svg/_config.js diff --git a/test/runtime/samples/dynamic-element-svg/main.svelte b/packages/svelte/test/runtime/samples/dynamic-element-svg/main.svelte similarity index 100% rename from test/runtime/samples/dynamic-element-svg/main.svelte rename to packages/svelte/test/runtime/samples/dynamic-element-svg/main.svelte diff --git a/packages/svelte/test/runtime/samples/dynamic-element-template-literals/_config.js b/packages/svelte/test/runtime/samples/dynamic-element-template-literals/_config.js new file mode 100644 index 0000000000..a1cf8b163a --- /dev/null +++ b/packages/svelte/test/runtime/samples/dynamic-element-template-literals/_config.js @@ -0,0 +1,21 @@ +export default { + get props() { + return { size: 1 }; + }, + html: '

This is h1 tag

', + + test({ assert, component, target }) { + const h1 = target.firstChild; + component.size = 2; + + assert.htmlEqual( + target.innerHTML, + ` +

This is h2 tag

+ ` + ); + + const h2 = target.firstChild; + assert.notEqual(h1, h2); + } +}; diff --git a/test/runtime/samples/dynamic-element-template-literals/main.svelte b/packages/svelte/test/runtime/samples/dynamic-element-template-literals/main.svelte similarity index 100% rename from test/runtime/samples/dynamic-element-template-literals/main.svelte rename to packages/svelte/test/runtime/samples/dynamic-element-template-literals/main.svelte diff --git a/test/runtime/samples/dynamic-element-transition/_config.js b/packages/svelte/test/runtime/samples/dynamic-element-transition/_config.js similarity index 100% rename from test/runtime/samples/dynamic-element-transition/_config.js rename to packages/svelte/test/runtime/samples/dynamic-element-transition/_config.js diff --git a/packages/svelte/test/runtime/samples/dynamic-element-transition/main.svelte b/packages/svelte/test/runtime/samples/dynamic-element-transition/main.svelte new file mode 100644 index 0000000000..b30d948d6b --- /dev/null +++ b/packages/svelte/test/runtime/samples/dynamic-element-transition/main.svelte @@ -0,0 +1,17 @@ + + +{#if visible} + +{/if} diff --git a/test/runtime/samples/dynamic-element-undefined-tag/_config.js b/packages/svelte/test/runtime/samples/dynamic-element-undefined-tag/_config.js similarity index 100% rename from test/runtime/samples/dynamic-element-undefined-tag/_config.js rename to packages/svelte/test/runtime/samples/dynamic-element-undefined-tag/_config.js diff --git a/test/runtime/samples/dynamic-element-undefined-tag/main.svelte b/packages/svelte/test/runtime/samples/dynamic-element-undefined-tag/main.svelte similarity index 100% rename from test/runtime/samples/dynamic-element-undefined-tag/main.svelte rename to packages/svelte/test/runtime/samples/dynamic-element-undefined-tag/main.svelte diff --git a/packages/svelte/test/runtime/samples/dynamic-element-variable/_config.js b/packages/svelte/test/runtime/samples/dynamic-element-variable/_config.js new file mode 100644 index 0000000000..61e63ff401 --- /dev/null +++ b/packages/svelte/test/runtime/samples/dynamic-element-variable/_config.js @@ -0,0 +1,22 @@ +export default { + get props() { + return { tag: 'div', text: 'Foo' }; + }, + html: '
Foo
', + + test({ assert, component, target }) { + const div = target.firstChild; + component.tag = 'nav'; + component.text = 'Bar'; + + assert.htmlEqual( + target.innerHTML, + ` + + ` + ); + + const h1 = target.firstChild; + assert.notEqual(div, h1); + } +}; diff --git a/test/runtime/samples/dynamic-element-variable/main.svelte b/packages/svelte/test/runtime/samples/dynamic-element-variable/main.svelte similarity index 100% rename from test/runtime/samples/dynamic-element-variable/main.svelte rename to packages/svelte/test/runtime/samples/dynamic-element-variable/main.svelte diff --git a/packages/svelte/test/runtime/samples/dynamic-element-void-tag/_config.js b/packages/svelte/test/runtime/samples/dynamic-element-void-tag/_config.js new file mode 100644 index 0000000000..f99cd248d9 --- /dev/null +++ b/packages/svelte/test/runtime/samples/dynamic-element-void-tag/_config.js @@ -0,0 +1,12 @@ +export default { + get props() { + return { propTag: 'hr' }; + }, + html: '



', + + test({ assert, component, target }) { + assert.htmlEqual(target.innerHTML, '



'); + component.propTag = 'link'; + assert.htmlEqual(target.innerHTML, '


'); + } +}; diff --git a/test/runtime/samples/dynamic-element-void-tag/main.svelte b/packages/svelte/test/runtime/samples/dynamic-element-void-tag/main.svelte similarity index 100% rename from test/runtime/samples/dynamic-element-void-tag/main.svelte rename to packages/svelte/test/runtime/samples/dynamic-element-void-tag/main.svelte diff --git a/packages/svelte/test/runtime/samples/dynamic-element-void-with-content-1/_config.js b/packages/svelte/test/runtime/samples/dynamic-element-void-with-content-1/_config.js new file mode 100644 index 0000000000..c069c25e10 --- /dev/null +++ b/packages/svelte/test/runtime/samples/dynamic-element-void-with-content-1/_config.js @@ -0,0 +1,9 @@ +export default { + compileOptions: { + dev: true + }, + get props() { + return { tag: 'br' }; + }, + warnings: [' is self-closing and cannot have content.'] +}; diff --git a/test/runtime/samples/dynamic-element-void-with-content-1/main.svelte b/packages/svelte/test/runtime/samples/dynamic-element-void-with-content-1/main.svelte similarity index 100% rename from test/runtime/samples/dynamic-element-void-with-content-1/main.svelte rename to packages/svelte/test/runtime/samples/dynamic-element-void-with-content-1/main.svelte diff --git a/packages/svelte/test/runtime/samples/dynamic-element-void-with-content-2/_config.js b/packages/svelte/test/runtime/samples/dynamic-element-void-with-content-2/_config.js new file mode 100644 index 0000000000..c069c25e10 --- /dev/null +++ b/packages/svelte/test/runtime/samples/dynamic-element-void-with-content-2/_config.js @@ -0,0 +1,9 @@ +export default { + compileOptions: { + dev: true + }, + get props() { + return { tag: 'br' }; + }, + warnings: [' is self-closing and cannot have content.'] +}; diff --git a/test/runtime/samples/dynamic-element-void-with-content-2/main.svelte b/packages/svelte/test/runtime/samples/dynamic-element-void-with-content-2/main.svelte similarity index 100% rename from test/runtime/samples/dynamic-element-void-with-content-2/main.svelte rename to packages/svelte/test/runtime/samples/dynamic-element-void-with-content-2/main.svelte diff --git a/test/runtime/samples/dynamic-element-void-with-content-3/Nested.svelte b/packages/svelte/test/runtime/samples/dynamic-element-void-with-content-3/Nested.svelte similarity index 100% rename from test/runtime/samples/dynamic-element-void-with-content-3/Nested.svelte rename to packages/svelte/test/runtime/samples/dynamic-element-void-with-content-3/Nested.svelte diff --git a/packages/svelte/test/runtime/samples/dynamic-element-void-with-content-3/_config.js b/packages/svelte/test/runtime/samples/dynamic-element-void-with-content-3/_config.js new file mode 100644 index 0000000000..c069c25e10 --- /dev/null +++ b/packages/svelte/test/runtime/samples/dynamic-element-void-with-content-3/_config.js @@ -0,0 +1,9 @@ +export default { + compileOptions: { + dev: true + }, + get props() { + return { tag: 'br' }; + }, + warnings: [' is self-closing and cannot have content.'] +}; diff --git a/test/runtime/samples/dynamic-element-void-with-content-3/main.svelte b/packages/svelte/test/runtime/samples/dynamic-element-void-with-content-3/main.svelte similarity index 100% rename from test/runtime/samples/dynamic-element-void-with-content-3/main.svelte rename to packages/svelte/test/runtime/samples/dynamic-element-void-with-content-3/main.svelte diff --git a/test/runtime/samples/dynamic-element-void-with-content-4/Nested.svelte b/packages/svelte/test/runtime/samples/dynamic-element-void-with-content-4/Nested.svelte similarity index 100% rename from test/runtime/samples/dynamic-element-void-with-content-4/Nested.svelte rename to packages/svelte/test/runtime/samples/dynamic-element-void-with-content-4/Nested.svelte diff --git a/packages/svelte/test/runtime/samples/dynamic-element-void-with-content-4/_config.js b/packages/svelte/test/runtime/samples/dynamic-element-void-with-content-4/_config.js new file mode 100644 index 0000000000..f49ea0f070 --- /dev/null +++ b/packages/svelte/test/runtime/samples/dynamic-element-void-with-content-4/_config.js @@ -0,0 +1,6 @@ +export default { + get props() { + return { tag: 'br' }; + }, + html: '
' +}; diff --git a/test/runtime/samples/dynamic-element-void-with-content-4/main.svelte b/packages/svelte/test/runtime/samples/dynamic-element-void-with-content-4/main.svelte similarity index 100% rename from test/runtime/samples/dynamic-element-void-with-content-4/main.svelte rename to packages/svelte/test/runtime/samples/dynamic-element-void-with-content-4/main.svelte diff --git a/test/runtime/samples/dynamic-element-void-with-content-5/_config.js b/packages/svelte/test/runtime/samples/dynamic-element-void-with-content-5/_config.js similarity index 100% rename from test/runtime/samples/dynamic-element-void-with-content-5/_config.js rename to packages/svelte/test/runtime/samples/dynamic-element-void-with-content-5/_config.js diff --git a/test/runtime/samples/dynamic-element-void-with-content-5/main.svelte b/packages/svelte/test/runtime/samples/dynamic-element-void-with-content-5/main.svelte similarity index 100% rename from test/runtime/samples/dynamic-element-void-with-content-5/main.svelte rename to packages/svelte/test/runtime/samples/dynamic-element-void-with-content-5/main.svelte diff --git a/test/runtime/samples/each-block-after-let/Child.svelte b/packages/svelte/test/runtime/samples/each-block-after-let/Child.svelte similarity index 100% rename from test/runtime/samples/each-block-after-let/Child.svelte rename to packages/svelte/test/runtime/samples/each-block-after-let/Child.svelte diff --git a/test/runtime/samples/each-block-after-let/_config.js b/packages/svelte/test/runtime/samples/each-block-after-let/_config.js similarity index 100% rename from test/runtime/samples/each-block-after-let/_config.js rename to packages/svelte/test/runtime/samples/each-block-after-let/_config.js diff --git a/test/runtime/samples/each-block-after-let/main.svelte b/packages/svelte/test/runtime/samples/each-block-after-let/main.svelte similarity index 100% rename from test/runtime/samples/each-block-after-let/main.svelte rename to packages/svelte/test/runtime/samples/each-block-after-let/main.svelte diff --git a/packages/svelte/test/runtime/samples/each-block-array-literal/_config.js b/packages/svelte/test/runtime/samples/each-block-array-literal/_config.js new file mode 100644 index 0000000000..f3bbee8d79 --- /dev/null +++ b/packages/svelte/test/runtime/samples/each-block-array-literal/_config.js @@ -0,0 +1,22 @@ +export default { + html: ` + + + `, + + test({ assert, component, target }) { + assert.htmlEqual( + target.innerHTML, + ` + + + ` + ); + + const button = target.querySelector('button'); + const event = new window.MouseEvent('click'); + + button.dispatchEvent(event); + assert.equal(component.clicked, 'racoon'); + } +}; diff --git a/test/runtime/samples/each-block-array-literal/main.svelte b/packages/svelte/test/runtime/samples/each-block-array-literal/main.svelte similarity index 100% rename from test/runtime/samples/each-block-array-literal/main.svelte rename to packages/svelte/test/runtime/samples/each-block-array-literal/main.svelte diff --git a/test/runtime/samples/each-block-component-no-props/Child.svelte b/packages/svelte/test/runtime/samples/each-block-component-no-props/Child.svelte similarity index 100% rename from test/runtime/samples/each-block-component-no-props/Child.svelte rename to packages/svelte/test/runtime/samples/each-block-component-no-props/Child.svelte diff --git a/test/runtime/samples/each-block-component-no-props/_config.js b/packages/svelte/test/runtime/samples/each-block-component-no-props/_config.js similarity index 100% rename from test/runtime/samples/each-block-component-no-props/_config.js rename to packages/svelte/test/runtime/samples/each-block-component-no-props/_config.js diff --git a/test/runtime/samples/each-block-component-no-props/main.svelte b/packages/svelte/test/runtime/samples/each-block-component-no-props/main.svelte similarity index 100% rename from test/runtime/samples/each-block-component-no-props/main.svelte rename to packages/svelte/test/runtime/samples/each-block-component-no-props/main.svelte diff --git a/test/runtime/samples/each-block-containing-component-in-if/Nested.svelte b/packages/svelte/test/runtime/samples/each-block-containing-component-in-if/Nested.svelte similarity index 100% rename from test/runtime/samples/each-block-containing-component-in-if/Nested.svelte rename to packages/svelte/test/runtime/samples/each-block-containing-component-in-if/Nested.svelte diff --git a/packages/svelte/test/runtime/samples/each-block-containing-component-in-if/_config.js b/packages/svelte/test/runtime/samples/each-block-containing-component-in-if/_config.js new file mode 100644 index 0000000000..5ff4482488 --- /dev/null +++ b/packages/svelte/test/runtime/samples/each-block-containing-component-in-if/_config.js @@ -0,0 +1,37 @@ +export default { + get props() { + return { show: false, fields: [1, 2] }; + }, + + html: '
', + + test({ assert, component, target }) { + component.show = true; + component.fields = [1, 2, 3]; + + assert.htmlEqual( + target.innerHTML, + ` +
+ 1 + 2 + 3 +
+ ` + ); + + component.fields = [1, 2, 3, 4]; + + assert.htmlEqual( + target.innerHTML, + ` +
+ 1 + 2 + 3 + 4 +
+ ` + ); + } +}; diff --git a/test/runtime/samples/each-block-containing-component-in-if/main.svelte b/packages/svelte/test/runtime/samples/each-block-containing-component-in-if/main.svelte similarity index 100% rename from test/runtime/samples/each-block-containing-component-in-if/main.svelte rename to packages/svelte/test/runtime/samples/each-block-containing-component-in-if/main.svelte diff --git a/packages/svelte/test/runtime/samples/each-block-containing-if/_config.js b/packages/svelte/test/runtime/samples/each-block-containing-if/_config.js new file mode 100644 index 0000000000..6162db8132 --- /dev/null +++ b/packages/svelte/test/runtime/samples/each-block-containing-if/_config.js @@ -0,0 +1,15 @@ +export default { + test({ assert, component, target }) { + const items = component.items; + items.forEach((item) => (item.completed = false)); + + component.currentFilter = 'all'; + + assert.htmlEqual( + target.innerHTML, + ` +
  • one
  • two
  • three
+ ` + ); + } +}; diff --git a/test/runtime/samples/each-block-containing-if/main.svelte b/packages/svelte/test/runtime/samples/each-block-containing-if/main.svelte similarity index 100% rename from test/runtime/samples/each-block-containing-if/main.svelte rename to packages/svelte/test/runtime/samples/each-block-containing-if/main.svelte diff --git a/packages/svelte/test/runtime/samples/each-block-deconflict-name-context/_config.js b/packages/svelte/test/runtime/samples/each-block-deconflict-name-context/_config.js new file mode 100644 index 0000000000..a3970bee1c --- /dev/null +++ b/packages/svelte/test/runtime/samples/each-block-deconflict-name-context/_config.js @@ -0,0 +1,28 @@ +export default { + get props() { + return { foo: { bar: ['x', 'y', 'z'] } }; + }, + + html: ` + + + + `, + + ssrHtml: ` + + + + `, + + test({ assert, component, target, window }) { + const inputs = target.querySelectorAll('input'); + + inputs[1].value = 'w'; + inputs[1].dispatchEvent(new window.MouseEvent('input')); + + assert.deepEqual(component.foo, { + bar: ['x', 'w', 'z'] + }); + } +}; diff --git a/test/runtime/samples/each-block-deconflict-name-context/main.svelte b/packages/svelte/test/runtime/samples/each-block-deconflict-name-context/main.svelte similarity index 100% rename from test/runtime/samples/each-block-deconflict-name-context/main.svelte rename to packages/svelte/test/runtime/samples/each-block-deconflict-name-context/main.svelte diff --git a/packages/svelte/test/runtime/samples/each-block-destructured-array-as-object/_config.js b/packages/svelte/test/runtime/samples/each-block-destructured-array-as-object/_config.js new file mode 100644 index 0000000000..a9a7aae437 --- /dev/null +++ b/packages/svelte/test/runtime/samples/each-block-destructured-array-as-object/_config.js @@ -0,0 +1,27 @@ +export default { + get props() { + return { + array: [ + [1, 2, 3, 4, 5], + [6, 7, 8], + [9, 10, 11, 12] + ] + }; + }, + + html: ` +

First: 1, Third: 3, Length: 5

+

First: 6, Third: 8, Length: 3

+

First: 9, Third: 11, Length: 4

+ `, + + test({ assert, component, target }) { + component.array = [[12, 13]]; + assert.htmlEqual( + target.innerHTML, + ` +

First: 12, Third: undefined, Length: 2

+ ` + ); + } +}; diff --git a/test/runtime/samples/each-block-destructured-array-as-object/main.svelte b/packages/svelte/test/runtime/samples/each-block-destructured-array-as-object/main.svelte similarity index 100% rename from test/runtime/samples/each-block-destructured-array-as-object/main.svelte rename to packages/svelte/test/runtime/samples/each-block-destructured-array-as-object/main.svelte diff --git a/packages/svelte/test/runtime/samples/each-block-destructured-array-computed-props/_config.js b/packages/svelte/test/runtime/samples/each-block-destructured-array-computed-props/_config.js new file mode 100644 index 0000000000..8a85238695 --- /dev/null +++ b/packages/svelte/test/runtime/samples/each-block-destructured-array-computed-props/_config.js @@ -0,0 +1,29 @@ +export default { + get props() { + return { + array: [ + [1, 2, 3, 4, 5], + [6, 7, 8], + [9, 10, 11, 12], + [13, 14, 15, 16, 17, 18, 19, 20, 21, 22] + ] + }; + }, + + html: ` +

First: 1, Half: 3, Last: 5, Length: 5

+

First: 6, Half: 7, Last: 8, Length: 3

+

First: 9, Half: 11, Last: 12, Length: 4

+

First: 13, Half: 18, Last: 22, Length: 10

+ `, + + test({ assert, component, target }) { + component.array = [[23, 24, 25, 26, 27, 28, 29]]; + assert.htmlEqual( + target.innerHTML, + ` +

First: 23, Half: 26, Last: 29, Length: 7

+ ` + ); + } +}; diff --git a/test/runtime/samples/each-block-destructured-array-computed-props/main.svelte b/packages/svelte/test/runtime/samples/each-block-destructured-array-computed-props/main.svelte similarity index 100% rename from test/runtime/samples/each-block-destructured-array-computed-props/main.svelte rename to packages/svelte/test/runtime/samples/each-block-destructured-array-computed-props/main.svelte diff --git a/packages/svelte/test/runtime/samples/each-block-destructured-array-nested-rest/_config.js b/packages/svelte/test/runtime/samples/each-block-destructured-array-nested-rest/_config.js new file mode 100644 index 0000000000..7737125a08 --- /dev/null +++ b/packages/svelte/test/runtime/samples/each-block-destructured-array-nested-rest/_config.js @@ -0,0 +1,29 @@ +export default { + get props() { + return { + array: [ + [1, 2, 3, 4, 5], + [6, 7, 8], + [9, 10, 11, 12], + [13, 14, 15, 16, 17, 18, 19, 20, 21, 22] + ] + }; + }, + + html: ` +

First: 1, Second: 2, Third: 3, Elements remaining: 2

+

First: 6, Second: 7, Third: 8, Elements remaining: 0

+

First: 9, Second: 10, Third: 11, Elements remaining: 1

+

First: 13, Second: 14, Third: 15, Elements remaining: 7

+ `, + + test({ assert, component, target }) { + component.array = [[23, 24, 25, 26, 27, 28, 29]]; + assert.htmlEqual( + target.innerHTML, + ` +

First: 23, Second: 24, Third: 25, Elements remaining: 4

+ ` + ); + } +}; diff --git a/test/runtime/samples/each-block-destructured-array-nested-rest/main.svelte b/packages/svelte/test/runtime/samples/each-block-destructured-array-nested-rest/main.svelte similarity index 100% rename from test/runtime/samples/each-block-destructured-array-nested-rest/main.svelte rename to packages/svelte/test/runtime/samples/each-block-destructured-array-nested-rest/main.svelte diff --git a/packages/svelte/test/runtime/samples/each-block-destructured-array-sparse/_config.js b/packages/svelte/test/runtime/samples/each-block-destructured-array-sparse/_config.js new file mode 100644 index 0000000000..bfc32192da --- /dev/null +++ b/packages/svelte/test/runtime/samples/each-block-destructured-array-sparse/_config.js @@ -0,0 +1,25 @@ +export default { + get props() { + return { + animalPawsEntries: [ + ['raccoon', 'hands'], + ['eagle', 'wings'] + ] + }; + }, + + html: ` +

hands

+

wings

+ `, + + test({ assert, component, target }) { + component.animalPawsEntries = [['foo', 'bar']]; + assert.htmlEqual( + target.innerHTML, + ` +

bar

+ ` + ); + } +}; diff --git a/test/runtime/samples/each-block-destructured-array-sparse/main.svelte b/packages/svelte/test/runtime/samples/each-block-destructured-array-sparse/main.svelte similarity index 100% rename from test/runtime/samples/each-block-destructured-array-sparse/main.svelte rename to packages/svelte/test/runtime/samples/each-block-destructured-array-sparse/main.svelte diff --git a/packages/svelte/test/runtime/samples/each-block-destructured-array/_config.js b/packages/svelte/test/runtime/samples/each-block-destructured-array/_config.js new file mode 100644 index 0000000000..9d2379da1b --- /dev/null +++ b/packages/svelte/test/runtime/samples/each-block-destructured-array/_config.js @@ -0,0 +1,25 @@ +export default { + get props() { + return { + animalPawsEntries: [ + ['raccoon', 'hands'], + ['eagle', 'wings'] + ] + }; + }, + + html: ` +

raccoon: hands

+

eagle: wings

+ `, + + test({ assert, component, target }) { + component.animalPawsEntries = [['foo', 'bar']]; + assert.htmlEqual( + target.innerHTML, + ` +

foo: bar

+ ` + ); + } +}; diff --git a/test/runtime/samples/each-block-destructured-array/main.svelte b/packages/svelte/test/runtime/samples/each-block-destructured-array/main.svelte similarity index 100% rename from test/runtime/samples/each-block-destructured-array/main.svelte rename to packages/svelte/test/runtime/samples/each-block-destructured-array/main.svelte diff --git a/test/runtime/samples/each-block-destructured-default-binding/_config.js b/packages/svelte/test/runtime/samples/each-block-destructured-default-binding/_config.js similarity index 100% rename from test/runtime/samples/each-block-destructured-default-binding/_config.js rename to packages/svelte/test/runtime/samples/each-block-destructured-default-binding/_config.js diff --git a/test/runtime/samples/each-block-destructured-default-binding/main.svelte b/packages/svelte/test/runtime/samples/each-block-destructured-default-binding/main.svelte similarity index 100% rename from test/runtime/samples/each-block-destructured-default-binding/main.svelte rename to packages/svelte/test/runtime/samples/each-block-destructured-default-binding/main.svelte diff --git a/packages/svelte/test/runtime/samples/each-block-destructured-default/_config.js b/packages/svelte/test/runtime/samples/each-block-destructured-default/_config.js new file mode 100644 index 0000000000..c59df0dcf1 --- /dev/null +++ b/packages/svelte/test/runtime/samples/each-block-destructured-default/_config.js @@ -0,0 +1,57 @@ +export default { + get props() { + return { + animalEntries: [ + { + animal: 'raccoon', + class: 'mammal', + species: 'P. lotor', + kilogram: 25, + bmi: 0.04 + }, + { + animal: 'eagle', + class: 'bird', + kilogram: 5.4 + }, + { + animal: 'tiger', + class: 'mammal', + kilogram: 10, + pound: 30 + }, + { + animal: 'lion', + class: 'mammal', + kilogram: 10, + height: 50 + }, + { + animal: 'leopard', + class: 'mammal', + kilogram: 30, + height: 50, + bmi: 10 + } + ] + }; + }, + + html: ` +

raccoon - P. lotor - 25kg (55 lb) - 30cm - 0.04

+

eagle - unknown - 5.4kg (12 lb) - 30cm - 0.006

+

tiger - unknown - 10kg (30 lb) - 30cm - 0.011111111111111112

+

lion - unknown - 10kg (22 lb) - 50cm - 0.004

+

leopard - unknown - 30kg (66 lb) - 50cm - 10

+ `, + + test({ assert, component, target }) { + component.animalEntries = [{ animal: 'cow', class: 'mammal', species: '‎B. taurus' }]; + assert.htmlEqual( + target.innerHTML, + ` +

cow - ‎B. taurus - 50kg (110 lb) - 30cm - 0.05555555555555555

+ ` + ); + } +}; diff --git a/test/runtime/samples/each-block-destructured-default/main.svelte b/packages/svelte/test/runtime/samples/each-block-destructured-default/main.svelte similarity index 100% rename from test/runtime/samples/each-block-destructured-default/main.svelte rename to packages/svelte/test/runtime/samples/each-block-destructured-default/main.svelte diff --git a/packages/svelte/test/runtime/samples/each-block-destructured-object-binding/_config.js b/packages/svelte/test/runtime/samples/each-block-destructured-object-binding/_config.js new file mode 100644 index 0000000000..4a3f8be13f --- /dev/null +++ b/packages/svelte/test/runtime/samples/each-block-destructured-object-binding/_config.js @@ -0,0 +1,51 @@ +export default { + get props() { + return { + people: [{ name: { first: 'Doctor', last: 'Who' } }] + }; + }, + + html: ` + + +

Doctor Who

+ `, + + ssrHtml: ` + + +

Doctor Who

+ `, + + async test({ assert, component, target, window }) { + const inputs = target.querySelectorAll('input'); + + inputs[1].value = 'Oz'; + await inputs[1].dispatchEvent(new window.Event('input')); + + const { people } = component; + + assert.deepEqual(people, [{ name: { first: 'Doctor', last: 'Oz' } }]); + + assert.htmlEqual( + target.innerHTML, + ` + + +

Doctor Oz

+ ` + ); + + people[0].name.first = 'Frank'; + component.people = people; + + assert.htmlEqual( + target.innerHTML, + ` + + +

Frank Oz

+ ` + ); + } +}; diff --git a/test/runtime/samples/each-block-destructured-object-binding/main.svelte b/packages/svelte/test/runtime/samples/each-block-destructured-object-binding/main.svelte similarity index 100% rename from test/runtime/samples/each-block-destructured-object-binding/main.svelte rename to packages/svelte/test/runtime/samples/each-block-destructured-object-binding/main.svelte diff --git a/packages/svelte/test/runtime/samples/each-block-destructured-object-computed-props/_config.js b/packages/svelte/test/runtime/samples/each-block-destructured-object-computed-props/_config.js new file mode 100644 index 0000000000..a1330aa7e9 --- /dev/null +++ b/packages/svelte/test/runtime/samples/each-block-destructured-object-computed-props/_config.js @@ -0,0 +1,43 @@ +export default { + get props() { + return { + firstString: 'cats', + secondString: 'dogs', + objectsArray: [ + { + dogs: 'woof', + cats: 'meow', + stac: 'stack', + DOGS: 'WOOF' + }, + { + dogs: 'A German sheppard', + cats: 'A tailless cat', + stac: 'A jenga tower', + DOGS: 'A GERMAN SHEPPARD' + }, + { + dogs: 'dogs', + cats: 'cats', + stac: 'stac', + DOGS: 'DOGS' + } + ] + }; + }, + + html: ` +

cats: meow

+

dogs: woof

+

stac: stack

+

DOGS: WOOF

+

cats: A tailless cat

+

dogs: A German sheppard

+

stac: A jenga tower

+

DOGS: A GERMAN SHEPPARD

+

cats: cats

+

dogs: dogs

+

stac: stac

+

DOGS: DOGS

+ ` +}; diff --git a/test/runtime/samples/each-block-destructured-object-computed-props/main.svelte b/packages/svelte/test/runtime/samples/each-block-destructured-object-computed-props/main.svelte similarity index 100% rename from test/runtime/samples/each-block-destructured-object-computed-props/main.svelte rename to packages/svelte/test/runtime/samples/each-block-destructured-object-computed-props/main.svelte diff --git a/packages/svelte/test/runtime/samples/each-block-destructured-object-literal-props/_config.js b/packages/svelte/test/runtime/samples/each-block-destructured-object-literal-props/_config.js new file mode 100644 index 0000000000..6eb8a98a4b --- /dev/null +++ b/packages/svelte/test/runtime/samples/each-block-destructured-object-literal-props/_config.js @@ -0,0 +1,39 @@ +export default { + get props() { + return { + objectsArray: [ + { + 'foo-bar': 'FooBar', + 0: 'zero', + prop: 'prop' + }, + { + 'foo-bar': 'foobar', + 0: 'null', + prop: 'a prop' + }, + { + 'foo-bar': 'FOO BAR', + 0: 'nada', + prop: 'the prop' + } + ] + }; + }, + + html: ` +

FooBar: prop zero

+

foobar: a prop null

+

FOO BAR: the prop nada

+ `, + + test({ assert, component, target }) { + component.objectsArray = [{ 'foo-bar': 'Fool Ball', 0: 'nil', prop: 'one prop' }]; + assert.htmlEqual( + target.innerHTML, + ` +

Fool Ball: one prop nil

+ ` + ); + } +}; diff --git a/test/runtime/samples/each-block-destructured-object-literal-props/main.svelte b/packages/svelte/test/runtime/samples/each-block-destructured-object-literal-props/main.svelte similarity index 100% rename from test/runtime/samples/each-block-destructured-object-literal-props/main.svelte rename to packages/svelte/test/runtime/samples/each-block-destructured-object-literal-props/main.svelte diff --git a/packages/svelte/test/runtime/samples/each-block-destructured-object-literal-rest/_config.js b/packages/svelte/test/runtime/samples/each-block-destructured-object-literal-rest/_config.js new file mode 100644 index 0000000000..8e9acaca37 --- /dev/null +++ b/packages/svelte/test/runtime/samples/each-block-destructured-object-literal-rest/_config.js @@ -0,0 +1,44 @@ +export default { + get props() { + return { + objectsArray: [ + { + quote: 'q1', + 'wrong-quote': 'wq1', + 16: '16', + class: 'class' + }, + { + quote: 'q2', + 'wrong-quote': 'wq2', + 16: 'sixteen', + class: 'glass' + }, + { + quote: 'q3', + 'wrong-quote': 'wq3', + 16: 'seize', + class: 'mass' + } + ] + }; + }, + + html: ` +

Quote: q1, Wrong Quote: wq1, 16: 16

+

Quote: q2, Wrong Quote: wq2, 16: sixteen

+

Quote: q3, Wrong Quote: wq3, 16: seize

+ `, + + test({ assert, component, target }) { + component.objectsArray = [ + { quote: 'new-quote', 'wrong-quote': 'wq4', 16: 'ten+six', role: 'role' } + ]; + assert.htmlEqual( + target.innerHTML, + ` +

Quote: new-quote, Wrong Quote: wq4, 16: ten+six

+ ` + ); + } +}; diff --git a/test/runtime/samples/each-block-destructured-object-literal-rest/main.svelte b/packages/svelte/test/runtime/samples/each-block-destructured-object-literal-rest/main.svelte similarity index 100% rename from test/runtime/samples/each-block-destructured-object-literal-rest/main.svelte rename to packages/svelte/test/runtime/samples/each-block-destructured-object-literal-rest/main.svelte diff --git a/test/runtime/samples/each-block-destructured-object-reserved-key/_config.js b/packages/svelte/test/runtime/samples/each-block-destructured-object-reserved-key/_config.js similarity index 100% rename from test/runtime/samples/each-block-destructured-object-reserved-key/_config.js rename to packages/svelte/test/runtime/samples/each-block-destructured-object-reserved-key/_config.js diff --git a/test/runtime/samples/each-block-destructured-object-reserved-key/main.svelte b/packages/svelte/test/runtime/samples/each-block-destructured-object-reserved-key/main.svelte similarity index 100% rename from test/runtime/samples/each-block-destructured-object-reserved-key/main.svelte rename to packages/svelte/test/runtime/samples/each-block-destructured-object-reserved-key/main.svelte diff --git a/packages/svelte/test/runtime/samples/each-block-destructured-object-rest/_config.js b/packages/svelte/test/runtime/samples/each-block-destructured-object-rest/_config.js new file mode 100644 index 0000000000..1a4c9d9e20 --- /dev/null +++ b/packages/svelte/test/runtime/samples/each-block-destructured-object-rest/_config.js @@ -0,0 +1,25 @@ +export default { + get props() { + return { + animalEntries: [ + { animal: 'raccoon', class: 'mammal' }, + { animal: 'eagle', class: 'bird' } + ] + }; + }, + + html: ` +

raccoon

+

eagle

+ `, + + test({ assert, component, target }) { + component.animalEntries = [{ animal: 'cow', class: 'mammal' }]; + assert.htmlEqual( + target.innerHTML, + ` +

cow

+ ` + ); + } +}; diff --git a/test/runtime/samples/each-block-destructured-object-rest/main.svelte b/packages/svelte/test/runtime/samples/each-block-destructured-object-rest/main.svelte similarity index 100% rename from test/runtime/samples/each-block-destructured-object-rest/main.svelte rename to packages/svelte/test/runtime/samples/each-block-destructured-object-rest/main.svelte diff --git a/packages/svelte/test/runtime/samples/each-block-destructured-object/_config.js b/packages/svelte/test/runtime/samples/each-block-destructured-object/_config.js new file mode 100644 index 0000000000..9eb6ebc52f --- /dev/null +++ b/packages/svelte/test/runtime/samples/each-block-destructured-object/_config.js @@ -0,0 +1,25 @@ +export default { + get props() { + return { + animalPawsEntries: [ + { animal: 'raccoon', pawType: 'hands' }, + { animal: 'eagle', pawType: 'wings' } + ] + }; + }, + + html: ` +

raccoon: hands

+

eagle: wings

+ `, + + test({ assert, component, target }) { + component.animalPawsEntries = [{ animal: 'cow', pawType: 'hooves' }]; + assert.htmlEqual( + target.innerHTML, + ` +

cow: hooves

+ ` + ); + } +}; diff --git a/test/runtime/samples/each-block-destructured-object/main.svelte b/packages/svelte/test/runtime/samples/each-block-destructured-object/main.svelte similarity index 100% rename from test/runtime/samples/each-block-destructured-object/main.svelte rename to packages/svelte/test/runtime/samples/each-block-destructured-object/main.svelte diff --git a/packages/svelte/test/runtime/samples/each-block-dynamic-else-static/_config.js b/packages/svelte/test/runtime/samples/each-block-dynamic-else-static/_config.js new file mode 100644 index 0000000000..d777379873 --- /dev/null +++ b/packages/svelte/test/runtime/samples/each-block-dynamic-else-static/_config.js @@ -0,0 +1,43 @@ +export default { + get props() { + return { + animals: ['alpaca', 'baboon', 'capybara'] + }; + }, + + html: ` +

alpaca

+

baboon

+

capybara

+ `, + + test({ assert, component, target }) { + component.animals = []; + assert.htmlEqual( + target.innerHTML, + ` +

no animals

+ ` + ); + + // trigger an 'update' of the else block, to ensure that + // nonexistent update method is not called + component.animals = []; + + component.animals = ['wombat']; + assert.htmlEqual( + target.innerHTML, + ` +

wombat

+ ` + ); + + component.animals = ['dinosaur']; + assert.htmlEqual( + target.innerHTML, + ` +

dinosaur

+ ` + ); + } +}; diff --git a/test/runtime/samples/each-block-dynamic-else-static/main.svelte b/packages/svelte/test/runtime/samples/each-block-dynamic-else-static/main.svelte similarity index 100% rename from test/runtime/samples/each-block-dynamic-else-static/main.svelte rename to packages/svelte/test/runtime/samples/each-block-dynamic-else-static/main.svelte diff --git a/packages/svelte/test/runtime/samples/each-block-else-in-if/_config.js b/packages/svelte/test/runtime/samples/each-block-else-in-if/_config.js new file mode 100644 index 0000000000..f6edac9e8f --- /dev/null +++ b/packages/svelte/test/runtime/samples/each-block-else-in-if/_config.js @@ -0,0 +1,20 @@ +export default { + html: ` +

nothing

+

after

+ `, + + test({ assert, component, target }) { + component.visible = false; + assert.htmlEqual(target.innerHTML, ''); + + component.visible = true; + assert.htmlEqual( + target.innerHTML, + ` +

nothing

+

after

+ ` + ); + } +}; diff --git a/test/runtime/samples/each-block-else-in-if/main.svelte b/packages/svelte/test/runtime/samples/each-block-else-in-if/main.svelte similarity index 100% rename from test/runtime/samples/each-block-else-in-if/main.svelte rename to packages/svelte/test/runtime/samples/each-block-else-in-if/main.svelte diff --git a/test/runtime/samples/each-block-else-mount-or-intro/Widget.svelte b/packages/svelte/test/runtime/samples/each-block-else-mount-or-intro/Widget.svelte similarity index 100% rename from test/runtime/samples/each-block-else-mount-or-intro/Widget.svelte rename to packages/svelte/test/runtime/samples/each-block-else-mount-or-intro/Widget.svelte diff --git a/packages/svelte/test/runtime/samples/each-block-else-mount-or-intro/_config.js b/packages/svelte/test/runtime/samples/each-block-else-mount-or-intro/_config.js new file mode 100644 index 0000000000..b649b44fdb --- /dev/null +++ b/packages/svelte/test/runtime/samples/each-block-else-mount-or-intro/_config.js @@ -0,0 +1,6 @@ +export default { + get props() { + return { items: [] }; + }, + html: 'No items.' +}; diff --git a/test/runtime/samples/each-block-else-mount-or-intro/main.svelte b/packages/svelte/test/runtime/samples/each-block-else-mount-or-intro/main.svelte similarity index 100% rename from test/runtime/samples/each-block-else-mount-or-intro/main.svelte rename to packages/svelte/test/runtime/samples/each-block-else-mount-or-intro/main.svelte diff --git a/packages/svelte/test/runtime/samples/each-block-else-starts-empty/_config.js b/packages/svelte/test/runtime/samples/each-block-else-starts-empty/_config.js new file mode 100644 index 0000000000..e9f75105b2 --- /dev/null +++ b/packages/svelte/test/runtime/samples/each-block-else-starts-empty/_config.js @@ -0,0 +1,23 @@ +export default { + get props() { + return { animals: [], foo: 'something else' }; + }, + + html: ` + before +

no animals, but rather something else

+ after + `, + + test({ assert, component, target }) { + component.animals = ['wombat']; + assert.htmlEqual( + target.innerHTML, + ` + before +

wombat

+ after + ` + ); + } +}; diff --git a/test/runtime/samples/each-block-else-starts-empty/main.svelte b/packages/svelte/test/runtime/samples/each-block-else-starts-empty/main.svelte similarity index 100% rename from test/runtime/samples/each-block-else-starts-empty/main.svelte rename to packages/svelte/test/runtime/samples/each-block-else-starts-empty/main.svelte diff --git a/packages/svelte/test/runtime/samples/each-block-else/_config.js b/packages/svelte/test/runtime/samples/each-block-else/_config.js new file mode 100644 index 0000000000..23a47928ea --- /dev/null +++ b/packages/svelte/test/runtime/samples/each-block-else/_config.js @@ -0,0 +1,48 @@ +export default { + get props() { + return { + animals: ['alpaca', 'baboon', 'capybara'], + foo: 'something else' + }; + }, + + html: ` + before +

alpaca

+

baboon

+

capybara

+ after + `, + + test({ assert, component, target }) { + component.animals = []; + assert.htmlEqual( + target.innerHTML, + ` + before +

no animals, but rather something else

+ after + ` + ); + + component.foo = 'something other'; + assert.htmlEqual( + target.innerHTML, + ` + before +

no animals, but rather something other

+ after + ` + ); + + component.animals = ['wombat']; + assert.htmlEqual( + target.innerHTML, + ` + before +

wombat

+ after + ` + ); + } +}; diff --git a/test/runtime/samples/each-block-else/main.svelte b/packages/svelte/test/runtime/samples/each-block-else/main.svelte similarity index 100% rename from test/runtime/samples/each-block-else/main.svelte rename to packages/svelte/test/runtime/samples/each-block-else/main.svelte diff --git a/test/runtime/samples/each-block-empty-outro/Thing.svelte b/packages/svelte/test/runtime/samples/each-block-empty-outro/Thing.svelte similarity index 100% rename from test/runtime/samples/each-block-empty-outro/Thing.svelte rename to packages/svelte/test/runtime/samples/each-block-empty-outro/Thing.svelte diff --git a/packages/svelte/test/runtime/samples/each-block-empty-outro/_config.js b/packages/svelte/test/runtime/samples/each-block-empty-outro/_config.js new file mode 100644 index 0000000000..955b36ba98 --- /dev/null +++ b/packages/svelte/test/runtime/samples/each-block-empty-outro/_config.js @@ -0,0 +1,17 @@ +export default { + get props() { + return { visible: true, empty: [] }; + }, + + html: ` +
+

text

+
+ `, + + test({ assert, component, target }) { + component.visible = false; + + assert.htmlEqual(target.innerHTML, ''); + } +}; diff --git a/test/runtime/samples/each-block-empty-outro/main.svelte b/packages/svelte/test/runtime/samples/each-block-empty-outro/main.svelte similarity index 100% rename from test/runtime/samples/each-block-empty-outro/main.svelte rename to packages/svelte/test/runtime/samples/each-block-empty-outro/main.svelte diff --git a/packages/svelte/test/runtime/samples/each-block-func-function/_config.js b/packages/svelte/test/runtime/samples/each-block-func-function/_config.js new file mode 100644 index 0000000000..af96b8ce83 --- /dev/null +++ b/packages/svelte/test/runtime/samples/each-block-func-function/_config.js @@ -0,0 +1,9 @@ +export default { + html: ` +

1

+

2

+

3

+

4

+

5

+ ` +}; diff --git a/packages/svelte/test/runtime/samples/each-block-func-function/main.svelte b/packages/svelte/test/runtime/samples/each-block-func-function/main.svelte new file mode 100644 index 0000000000..812e7940d5 --- /dev/null +++ b/packages/svelte/test/runtime/samples/each-block-func-function/main.svelte @@ -0,0 +1,3 @@ +{#each [1, 2, 3, 4, 5] as func} +

{(() => func)()}

+{/each} diff --git a/packages/svelte/test/runtime/samples/each-block-function/_config.js b/packages/svelte/test/runtime/samples/each-block-function/_config.js new file mode 100644 index 0000000000..36965fc7c8 --- /dev/null +++ b/packages/svelte/test/runtime/samples/each-block-function/_config.js @@ -0,0 +1,18 @@ +export default { + html: ` +

1, 2, 3

+

2, 4, 6

+

3, 6, 9

+ `, + + test({ assert, component, target }) { + component.numbers = [4, 5]; + assert.htmlEqual( + target.innerHTML, + ` +

16, 20

+

20, 25

+ ` + ); + } +}; diff --git a/test/runtime/samples/each-block-function/main.svelte b/packages/svelte/test/runtime/samples/each-block-function/main.svelte similarity index 100% rename from test/runtime/samples/each-block-function/main.svelte rename to packages/svelte/test/runtime/samples/each-block-function/main.svelte diff --git a/packages/svelte/test/runtime/samples/each-block-in-if-block/_config.js b/packages/svelte/test/runtime/samples/each-block-in-if-block/_config.js new file mode 100644 index 0000000000..623b51cdc1 --- /dev/null +++ b/packages/svelte/test/runtime/samples/each-block-in-if-block/_config.js @@ -0,0 +1,18 @@ +export default { + get props() { + return { + dummy: false, + fruits: ['Apple', 'Banana', 'Tomato'] + }; + }, + + html: '
Apple
Banana
Tomato
', + + test({ assert, component, target }) { + component.dummy = true; + assert.htmlEqual( + target.innerHTML, + '
Apple
Banana
Tomato
' + ); + } +}; diff --git a/test/runtime/samples/each-block-in-if-block/main.svelte b/packages/svelte/test/runtime/samples/each-block-in-if-block/main.svelte similarity index 100% rename from test/runtime/samples/each-block-in-if-block/main.svelte rename to packages/svelte/test/runtime/samples/each-block-in-if-block/main.svelte diff --git a/packages/svelte/test/runtime/samples/each-block-index-only/_config.js b/packages/svelte/test/runtime/samples/each-block-index-only/_config.js new file mode 100644 index 0000000000..dce804b26b --- /dev/null +++ b/packages/svelte/test/runtime/samples/each-block-index-only/_config.js @@ -0,0 +1,26 @@ +export default { + get props() { + return { things: [0, 0, 0, 0, 0] }; + }, + + html: ` +

0

+

1

+

2

+

3

+

4

+ `, + + test({ assert, component, target }) { + component.things = [0, 0, 0]; + + assert.htmlEqual( + target.innerHTML, + ` +

0

+

1

+

2

+ ` + ); + } +}; diff --git a/test/runtime/samples/each-block-index-only/main.svelte b/packages/svelte/test/runtime/samples/each-block-index-only/main.svelte similarity index 100% rename from test/runtime/samples/each-block-index-only/main.svelte rename to packages/svelte/test/runtime/samples/each-block-index-only/main.svelte diff --git a/packages/svelte/test/runtime/samples/each-block-indexed/_config.js b/packages/svelte/test/runtime/samples/each-block-indexed/_config.js new file mode 100644 index 0000000000..dbb63c4e91 --- /dev/null +++ b/packages/svelte/test/runtime/samples/each-block-indexed/_config.js @@ -0,0 +1,8 @@ +export default { + get props() { + return { + animals: ['adder', 'blue whale', 'chameleon'] + }; + }, + html: '

0: adder

1: blue whale

2: chameleon

' +}; diff --git a/test/runtime/samples/each-block-indexed/main.svelte b/packages/svelte/test/runtime/samples/each-block-indexed/main.svelte similarity index 100% rename from test/runtime/samples/each-block-indexed/main.svelte rename to packages/svelte/test/runtime/samples/each-block-indexed/main.svelte diff --git a/packages/svelte/test/runtime/samples/each-block-keyed-bind-group/_config.js b/packages/svelte/test/runtime/samples/each-block-keyed-bind-group/_config.js new file mode 100644 index 0000000000..9cd2274e1f --- /dev/null +++ b/packages/svelte/test/runtime/samples/each-block-keyed-bind-group/_config.js @@ -0,0 +1,74 @@ +export default { + html: ` + + + + + + `, + + async test({ assert, target, window }) { + const [input1, input2, input3, input4, input5] = target.querySelectorAll('input'); + const event = new window.Event('change'); + + input3.checked = true; + await input3.dispatchEvent(event); + + assert.htmlEqual( + target.innerHTML, + ` + + + + + + ` + ); + + assert.equal(input1.checked, false); + assert.equal(input2.checked, false); + assert.equal(input3.checked, true); + assert.equal(input4.checked, false); + assert.equal(input5.checked, false); + + input4.checked = true; + await input4.dispatchEvent(event); + + assert.htmlEqual( + target.innerHTML, + ` + + + + + + ` + ); + + assert.equal(input1.checked, false); + assert.equal(input2.checked, false); + assert.equal(input3.checked, true); + assert.equal(input4.checked, true); + assert.equal(input5.checked, false); + + input3.checked = false; + await input3.dispatchEvent(event); + + assert.htmlEqual( + target.innerHTML, + ` + + + + + + ` + ); + + assert.equal(input1.checked, false); + assert.equal(input2.checked, false); + assert.equal(input3.checked, false); + assert.equal(input4.checked, true); + assert.equal(input5.checked, false); + } +}; diff --git a/test/runtime/samples/each-block-keyed-bind-group/main.svelte b/packages/svelte/test/runtime/samples/each-block-keyed-bind-group/main.svelte similarity index 100% rename from test/runtime/samples/each-block-keyed-bind-group/main.svelte rename to packages/svelte/test/runtime/samples/each-block-keyed-bind-group/main.svelte diff --git a/packages/svelte/test/runtime/samples/each-block-keyed-changed/_config.js b/packages/svelte/test/runtime/samples/each-block-keyed-changed/_config.js new file mode 100644 index 0000000000..70fc7b44a2 --- /dev/null +++ b/packages/svelte/test/runtime/samples/each-block-keyed-changed/_config.js @@ -0,0 +1,15 @@ +export default { + get props() { + return { + titles: [{ name: 'a' }, { name: 'b' }, { name: 'c' }] + }; + }, + + html: '

a

b

c

', + + test({ assert, component, target }) { + component.titles = [{ name: 'b' }, { name: 'c' }, { name: 'a' }]; + + assert.htmlEqual(target.innerHTML, '

b

c

a

'); + } +}; diff --git a/test/runtime/samples/each-block-keyed-changed/main.svelte b/packages/svelte/test/runtime/samples/each-block-keyed-changed/main.svelte similarity index 100% rename from test/runtime/samples/each-block-keyed-changed/main.svelte rename to packages/svelte/test/runtime/samples/each-block-keyed-changed/main.svelte diff --git a/test/runtime/samples/each-block-keyed-component-action/Component.svelte b/packages/svelte/test/runtime/samples/each-block-keyed-component-action/Component.svelte similarity index 100% rename from test/runtime/samples/each-block-keyed-component-action/Component.svelte rename to packages/svelte/test/runtime/samples/each-block-keyed-component-action/Component.svelte diff --git a/test/runtime/samples/each-block-keyed-component-action/_config.js b/packages/svelte/test/runtime/samples/each-block-keyed-component-action/_config.js similarity index 100% rename from test/runtime/samples/each-block-keyed-component-action/_config.js rename to packages/svelte/test/runtime/samples/each-block-keyed-component-action/_config.js diff --git a/test/runtime/samples/each-block-keyed-component-action/main.svelte b/packages/svelte/test/runtime/samples/each-block-keyed-component-action/main.svelte similarity index 100% rename from test/runtime/samples/each-block-keyed-component-action/main.svelte rename to packages/svelte/test/runtime/samples/each-block-keyed-component-action/main.svelte diff --git a/test/runtime/samples/each-block-keyed-dynamic-2/_config.js b/packages/svelte/test/runtime/samples/each-block-keyed-dynamic-2/_config.js similarity index 100% rename from test/runtime/samples/each-block-keyed-dynamic-2/_config.js rename to packages/svelte/test/runtime/samples/each-block-keyed-dynamic-2/_config.js diff --git a/test/runtime/samples/each-block-keyed-dynamic-2/main.svelte b/packages/svelte/test/runtime/samples/each-block-keyed-dynamic-2/main.svelte similarity index 100% rename from test/runtime/samples/each-block-keyed-dynamic-2/main.svelte rename to packages/svelte/test/runtime/samples/each-block-keyed-dynamic-2/main.svelte diff --git a/packages/svelte/test/runtime/samples/each-block-keyed-dynamic-key/_config.js b/packages/svelte/test/runtime/samples/each-block-keyed-dynamic-key/_config.js new file mode 100644 index 0000000000..57480c04b2 --- /dev/null +++ b/packages/svelte/test/runtime/samples/each-block-keyed-dynamic-key/_config.js @@ -0,0 +1,37 @@ +let count = 0; +let value = 'foo'; + +export default { + get props() { + return { + value() { + count++; + return value; + } + }; + }, + + before_test() { + count = 0; + value = 'foo'; + }, + + html: ` +
foo
+
foo
+ `, + + test({ assert, component, target }) { + value = 'bar'; + component.id = 1; + + assert.equal(count, 4); + assert.htmlEqual( + target.innerHTML, + ` +
bar
+
bar
+ ` + ); + } +}; diff --git a/test/runtime/samples/each-block-keyed-dynamic-key/main.svelte b/packages/svelte/test/runtime/samples/each-block-keyed-dynamic-key/main.svelte similarity index 100% rename from test/runtime/samples/each-block-keyed-dynamic-key/main.svelte rename to packages/svelte/test/runtime/samples/each-block-keyed-dynamic-key/main.svelte diff --git a/packages/svelte/test/runtime/samples/each-block-keyed-dynamic/_config.js b/packages/svelte/test/runtime/samples/each-block-keyed-dynamic/_config.js new file mode 100644 index 0000000000..7007729b23 --- /dev/null +++ b/packages/svelte/test/runtime/samples/each-block-keyed-dynamic/_config.js @@ -0,0 +1,36 @@ +export default { + get props() { + return { + todos: [ + { id: 123, description: 'buy milk' }, + { id: 234, description: 'drink milk' } + ] + }; + }, + + html: ` +

buy milk

+

drink milk

+ `, + + test({ assert, component, target }) { + const [p1, p2] = target.querySelectorAll('p'); + + component.todos = [ + { id: 123, description: 'buy beer' }, + { id: 234, description: 'drink beer' } + ]; + assert.htmlEqual( + target.innerHTML, + ` +

buy beer

+

drink beer

+ ` + ); + + const [p3, p4] = target.querySelectorAll('p'); + + assert.equal(p1, p3); + assert.equal(p2, p4); + } +}; diff --git a/test/runtime/samples/each-block-keyed-dynamic/main.svelte b/packages/svelte/test/runtime/samples/each-block-keyed-dynamic/main.svelte similarity index 100% rename from test/runtime/samples/each-block-keyed-dynamic/main.svelte rename to packages/svelte/test/runtime/samples/each-block-keyed-dynamic/main.svelte diff --git a/packages/svelte/test/runtime/samples/each-block-keyed-else/_config.js b/packages/svelte/test/runtime/samples/each-block-keyed-else/_config.js new file mode 100644 index 0000000000..23a47928ea --- /dev/null +++ b/packages/svelte/test/runtime/samples/each-block-keyed-else/_config.js @@ -0,0 +1,48 @@ +export default { + get props() { + return { + animals: ['alpaca', 'baboon', 'capybara'], + foo: 'something else' + }; + }, + + html: ` + before +

alpaca

+

baboon

+

capybara

+ after + `, + + test({ assert, component, target }) { + component.animals = []; + assert.htmlEqual( + target.innerHTML, + ` + before +

no animals, but rather something else

+ after + ` + ); + + component.foo = 'something other'; + assert.htmlEqual( + target.innerHTML, + ` + before +

no animals, but rather something other

+ after + ` + ); + + component.animals = ['wombat']; + assert.htmlEqual( + target.innerHTML, + ` + before +

wombat

+ after + ` + ); + } +}; diff --git a/test/runtime/samples/each-block-keyed-else/main.svelte b/packages/svelte/test/runtime/samples/each-block-keyed-else/main.svelte similarity index 100% rename from test/runtime/samples/each-block-keyed-else/main.svelte rename to packages/svelte/test/runtime/samples/each-block-keyed-else/main.svelte diff --git a/packages/svelte/test/runtime/samples/each-block-keyed-empty/_config.js b/packages/svelte/test/runtime/samples/each-block-keyed-empty/_config.js new file mode 100644 index 0000000000..d9bae08e99 --- /dev/null +++ b/packages/svelte/test/runtime/samples/each-block-keyed-empty/_config.js @@ -0,0 +1,7 @@ +export default { + get props() { + return { x: [{ z: 1 }, { z: 2 }] }; + }, + + html: '' +}; diff --git a/test/runtime/samples/each-block-keyed-empty/main.svelte b/packages/svelte/test/runtime/samples/each-block-keyed-empty/main.svelte similarity index 100% rename from test/runtime/samples/each-block-keyed-empty/main.svelte rename to packages/svelte/test/runtime/samples/each-block-keyed-empty/main.svelte diff --git a/packages/svelte/test/runtime/samples/each-block-keyed-html-b/_config.js b/packages/svelte/test/runtime/samples/each-block-keyed-html-b/_config.js new file mode 100644 index 0000000000..b1c7a78982 --- /dev/null +++ b/packages/svelte/test/runtime/samples/each-block-keyed-html-b/_config.js @@ -0,0 +1,17 @@ +export default { + html: ` +
hello John
+
hello Jill
+ `, + + test({ assert, component, target }) { + component.names = component.names.reverse(); + assert.htmlEqual( + target.innerHTML, + ` +
hello Jill
+
hello John
+ ` + ); + } +}; diff --git a/test/runtime/samples/each-block-keyed-html-b/main.svelte b/packages/svelte/test/runtime/samples/each-block-keyed-html-b/main.svelte similarity index 100% rename from test/runtime/samples/each-block-keyed-html-b/main.svelte rename to packages/svelte/test/runtime/samples/each-block-keyed-html-b/main.svelte diff --git a/test/runtime/samples/each-block-keyed-html/_config.js b/packages/svelte/test/runtime/samples/each-block-keyed-html/_config.js similarity index 100% rename from test/runtime/samples/each-block-keyed-html/_config.js rename to packages/svelte/test/runtime/samples/each-block-keyed-html/_config.js diff --git a/test/runtime/samples/each-block-keyed-html/main.svelte b/packages/svelte/test/runtime/samples/each-block-keyed-html/main.svelte similarity index 100% rename from test/runtime/samples/each-block-keyed-html/main.svelte rename to packages/svelte/test/runtime/samples/each-block-keyed-html/main.svelte diff --git a/test/runtime/samples/each-block-keyed-iife/_config.js b/packages/svelte/test/runtime/samples/each-block-keyed-iife/_config.js similarity index 100% rename from test/runtime/samples/each-block-keyed-iife/_config.js rename to packages/svelte/test/runtime/samples/each-block-keyed-iife/_config.js diff --git a/test/runtime/samples/each-block-keyed-iife/main.svelte b/packages/svelte/test/runtime/samples/each-block-keyed-iife/main.svelte similarity index 100% rename from test/runtime/samples/each-block-keyed-iife/main.svelte rename to packages/svelte/test/runtime/samples/each-block-keyed-iife/main.svelte diff --git a/packages/svelte/test/runtime/samples/each-block-keyed-index-in-event-handler/_config.js b/packages/svelte/test/runtime/samples/each-block-keyed-index-in-event-handler/_config.js new file mode 100644 index 0000000000..fa79dfba61 --- /dev/null +++ b/packages/svelte/test/runtime/samples/each-block-keyed-index-in-event-handler/_config.js @@ -0,0 +1,21 @@ +export default { + html: ` + + + + `, + + async test({ assert, target, window }) { + const click = new window.MouseEvent('click'); + + await target.querySelectorAll('button')[1].dispatchEvent(click); + await target.querySelectorAll('button')[1].dispatchEvent(click); + + assert.htmlEqual( + target.innerHTML, + ` + + ` + ); + } +}; diff --git a/test/runtime/samples/each-block-keyed-index-in-event-handler/main.svelte b/packages/svelte/test/runtime/samples/each-block-keyed-index-in-event-handler/main.svelte similarity index 100% rename from test/runtime/samples/each-block-keyed-index-in-event-handler/main.svelte rename to packages/svelte/test/runtime/samples/each-block-keyed-index-in-event-handler/main.svelte diff --git a/test/runtime/samples/each-block-keyed-nested/Child.svelte b/packages/svelte/test/runtime/samples/each-block-keyed-nested/Child.svelte similarity index 100% rename from test/runtime/samples/each-block-keyed-nested/Child.svelte rename to packages/svelte/test/runtime/samples/each-block-keyed-nested/Child.svelte diff --git a/test/runtime/samples/each-block-keyed-nested/_config.js b/packages/svelte/test/runtime/samples/each-block-keyed-nested/_config.js similarity index 100% rename from test/runtime/samples/each-block-keyed-nested/_config.js rename to packages/svelte/test/runtime/samples/each-block-keyed-nested/_config.js diff --git a/test/runtime/samples/each-block-keyed-nested/main.svelte b/packages/svelte/test/runtime/samples/each-block-keyed-nested/main.svelte similarity index 100% rename from test/runtime/samples/each-block-keyed-nested/main.svelte rename to packages/svelte/test/runtime/samples/each-block-keyed-nested/main.svelte diff --git a/packages/svelte/test/runtime/samples/each-block-keyed-non-prop/_config.js b/packages/svelte/test/runtime/samples/each-block-keyed-non-prop/_config.js new file mode 100644 index 0000000000..e2c8b662f6 --- /dev/null +++ b/packages/svelte/test/runtime/samples/each-block-keyed-non-prop/_config.js @@ -0,0 +1,32 @@ +export default { + get props() { + return { words: ['foo', 'bar', 'baz'] }; + }, + + html: ` +

foo

+

bar

+

baz

+ `, + + test({ assert, component, target }) { + const [p1, p2, p3] = target.querySelectorAll('p'); + + component.words = ['foo', 'baz']; + + assert.htmlEqual( + target.innerHTML, + ` +

foo

+

baz

+ ` + ); + + const [p4, p5] = target.querySelectorAll('p'); + + assert.ok(!target.contains(p2), '

element should be removed'); + + assert.equal(p1, p4, 'first

element should be retained'); + assert.equal(p3, p5, 'last

element should be retained'); + } +}; diff --git a/test/runtime/samples/each-block-keyed-non-prop/main.svelte b/packages/svelte/test/runtime/samples/each-block-keyed-non-prop/main.svelte similarity index 100% rename from test/runtime/samples/each-block-keyed-non-prop/main.svelte rename to packages/svelte/test/runtime/samples/each-block-keyed-non-prop/main.svelte diff --git a/packages/svelte/test/runtime/samples/each-block-keyed-object-identity/_config.js b/packages/svelte/test/runtime/samples/each-block-keyed-object-identity/_config.js new file mode 100644 index 0000000000..22147ba64c --- /dev/null +++ b/packages/svelte/test/runtime/samples/each-block-keyed-object-identity/_config.js @@ -0,0 +1,31 @@ +export default { + get props() { + return { + todos: [ + { + description: 'implement keyed each blocks' + }, + { + description: 'implement client-side hydration' + } + ] + }; + }, + + html: ` +

1: implement keyed each blocks

+

2: implement client-side hydration

+ `, + + test({ assert, component, target }) { + const [p1, p2] = target.querySelectorAll('p'); + + component.todos = [component.todos[1]]; + assert.htmlEqual(target.innerHTML, '

1: implement client-side hydration

'); + + const [p3] = target.querySelectorAll('p'); + + assert.ok(!target.contains(p1), 'first

element should be removed'); + assert.equal(p2, p3, 'second

element should be retained'); + } +}; diff --git a/test/runtime/samples/each-block-keyed-object-identity/main.svelte b/packages/svelte/test/runtime/samples/each-block-keyed-object-identity/main.svelte similarity index 100% rename from test/runtime/samples/each-block-keyed-object-identity/main.svelte rename to packages/svelte/test/runtime/samples/each-block-keyed-object-identity/main.svelte diff --git a/packages/svelte/test/runtime/samples/each-block-keyed-random-permute/_config.js b/packages/svelte/test/runtime/samples/each-block-keyed-random-permute/_config.js new file mode 100644 index 0000000000..454ef48d0f --- /dev/null +++ b/packages/svelte/test/runtime/samples/each-block-keyed-random-permute/_config.js @@ -0,0 +1,63 @@ +const VALUES = Array.from('abcdefghijklmnopqrstuvwxyz'); + +function toObjects(array) { + return array.split('').map((x) => ({ id: x })); +} + +function permute() { + const values = VALUES.slice(); + const number = Math.floor(Math.random() * VALUES.length); + const permuted = []; + for (let i = 0; i < number; i++) { + permuted.push(...values.splice(Math.floor(Math.random() * (number - i)), 1)); + } + + return permuted.join(''); +} + +export default { + get props() { + return { values: toObjects('abc') }; + }, + + html: '(a)(b)(c)', + + test({ assert, component, target }) { + function test(sequence) { + const previous = target.textContent; + const expected = sequence + .split('') + .map((x) => `(${x})`) + .join(''); + component.values = toObjects(sequence); + assert.htmlEqual( + target.innerHTML, + expected, + `\n${previous} -> ${expected}\n${target.textContent}` + ); + } + + // first, some fixed tests so that we can debug them + test('abc'); + test('abcd'); + test('abecd'); + test('fabecd'); + test('fabed'); + test('beadf'); + test('ghbeadf'); + test('gf'); + test('gc'); + test('g'); + test(''); + test('abc'); + test('duqbmineapjhtlofrskcg'); + test('hdnkjougmrvftewsqpailcb'); + test('bidhfacge'); + test('kgjnempcboaflidh'); + test('fekbijachgd'); + test('kdmlgfbicheja'); + + // then, we party + for (let i = 0; i < 100; i += 1) test(permute()); + } +}; diff --git a/test/runtime/samples/each-block-keyed-random-permute/main.svelte b/packages/svelte/test/runtime/samples/each-block-keyed-random-permute/main.svelte similarity index 100% rename from test/runtime/samples/each-block-keyed-random-permute/main.svelte rename to packages/svelte/test/runtime/samples/each-block-keyed-random-permute/main.svelte diff --git a/packages/svelte/test/runtime/samples/each-block-keyed-recursive/_config.js b/packages/svelte/test/runtime/samples/each-block-keyed-recursive/_config.js new file mode 100644 index 0000000000..f2a750d5ad --- /dev/null +++ b/packages/svelte/test/runtime/samples/each-block-keyed-recursive/_config.js @@ -0,0 +1,30 @@ +export default { + get props() { + return { + tree: [ + { id: 1, sub: null }, + { id: 2, sub: [{ id: 11 }] } + ] + }; + }, + + html: ` +

1
+
2\n
11
+ `, + + test({ assert, component, target }) { + component.tree = [ + { id: 1, sub: null }, + { id: 2, sub: null } + ]; + + assert.htmlEqual( + target.innerHTML, + ` +
1
+
2
+ ` + ); + } +}; diff --git a/test/runtime/samples/each-block-keyed-recursive/main.svelte b/packages/svelte/test/runtime/samples/each-block-keyed-recursive/main.svelte similarity index 100% rename from test/runtime/samples/each-block-keyed-recursive/main.svelte rename to packages/svelte/test/runtime/samples/each-block-keyed-recursive/main.svelte diff --git a/test/runtime/samples/each-block-keyed-shift/Nested.svelte b/packages/svelte/test/runtime/samples/each-block-keyed-shift/Nested.svelte similarity index 100% rename from test/runtime/samples/each-block-keyed-shift/Nested.svelte rename to packages/svelte/test/runtime/samples/each-block-keyed-shift/Nested.svelte diff --git a/packages/svelte/test/runtime/samples/each-block-keyed-shift/_config.js b/packages/svelte/test/runtime/samples/each-block-keyed-shift/_config.js new file mode 100644 index 0000000000..54f99eb1fd --- /dev/null +++ b/packages/svelte/test/runtime/samples/each-block-keyed-shift/_config.js @@ -0,0 +1,34 @@ +export default { + get props() { + return { + titles: [{ name: 'a' }, { name: 'b' }, { name: 'c' }] + }; + }, + + html: ` +

a

+

b

+

c

+ `, + + test({ assert, component, target }) { + component.titles = [{ name: 'b' }, { name: 'c' }]; + + assert.htmlEqual( + target.innerHTML, + ` +

b

+

c

+ ` + ); + + component.titles = [{ name: 'c' }]; + + assert.htmlEqual( + target.innerHTML, + ` +

c

+ ` + ); + } +}; diff --git a/test/runtime/samples/each-block-keyed-shift/main.svelte b/packages/svelte/test/runtime/samples/each-block-keyed-shift/main.svelte similarity index 100% rename from test/runtime/samples/each-block-keyed-shift/main.svelte rename to packages/svelte/test/runtime/samples/each-block-keyed-shift/main.svelte diff --git a/packages/svelte/test/runtime/samples/each-block-keyed-siblings/_config.js b/packages/svelte/test/runtime/samples/each-block-keyed-siblings/_config.js new file mode 100644 index 0000000000..f82b8bb414 --- /dev/null +++ b/packages/svelte/test/runtime/samples/each-block-keyed-siblings/_config.js @@ -0,0 +1,25 @@ +export default { + get props() { + return { + ones: [{ text: '1' }], + twos: [{ text: '2' }] + }; + }, + + html: ` +
1
+
2
+ `, + + test({ assert, component, target }) { + component.ones = [{ text: '11' }]; + + assert.htmlEqual( + target.innerHTML, + ` +
11
+
2
+ ` + ); + } +}; diff --git a/test/runtime/samples/each-block-keyed-siblings/main.svelte b/packages/svelte/test/runtime/samples/each-block-keyed-siblings/main.svelte similarity index 100% rename from test/runtime/samples/each-block-keyed-siblings/main.svelte rename to packages/svelte/test/runtime/samples/each-block-keyed-siblings/main.svelte diff --git a/packages/svelte/test/runtime/samples/each-block-keyed-static/_config.js b/packages/svelte/test/runtime/samples/each-block-keyed-static/_config.js new file mode 100644 index 0000000000..a7e2efb357 --- /dev/null +++ b/packages/svelte/test/runtime/samples/each-block-keyed-static/_config.js @@ -0,0 +1,10 @@ +export default { + get props() { + return { x: [{ z: 1 }, { z: 2 }] }; + }, + + html: ` +

does not change

+

does not change

+ ` +}; diff --git a/test/runtime/samples/each-block-keyed-static/main.svelte b/packages/svelte/test/runtime/samples/each-block-keyed-static/main.svelte similarity index 100% rename from test/runtime/samples/each-block-keyed-static/main.svelte rename to packages/svelte/test/runtime/samples/each-block-keyed-static/main.svelte diff --git a/test/runtime/samples/each-block-keyed-unshift/Nested.svelte b/packages/svelte/test/runtime/samples/each-block-keyed-unshift/Nested.svelte similarity index 100% rename from test/runtime/samples/each-block-keyed-unshift/Nested.svelte rename to packages/svelte/test/runtime/samples/each-block-keyed-unshift/Nested.svelte diff --git a/packages/svelte/test/runtime/samples/each-block-keyed-unshift/_config.js b/packages/svelte/test/runtime/samples/each-block-keyed-unshift/_config.js new file mode 100644 index 0000000000..87cf262bac --- /dev/null +++ b/packages/svelte/test/runtime/samples/each-block-keyed-unshift/_config.js @@ -0,0 +1,23 @@ +export default { + get props() { + return { titles: [{ name: 'b' }, { name: 'c' }] }; + }, + + html: ` +

b

+

c

+ `, + + test({ assert, component, target }) { + component.titles = [{ name: 'a' }, { name: 'b' }, { name: 'c' }]; + + assert.htmlEqual( + target.innerHTML, + ` +

a

+

b

+

c

+ ` + ); + } +}; diff --git a/test/runtime/samples/each-block-keyed-unshift/main.svelte b/packages/svelte/test/runtime/samples/each-block-keyed-unshift/main.svelte similarity index 100% rename from test/runtime/samples/each-block-keyed-unshift/main.svelte rename to packages/svelte/test/runtime/samples/each-block-keyed-unshift/main.svelte diff --git a/packages/svelte/test/runtime/samples/each-block-keyed/_config.js b/packages/svelte/test/runtime/samples/each-block-keyed/_config.js new file mode 100644 index 0000000000..d50749f5c3 --- /dev/null +++ b/packages/svelte/test/runtime/samples/each-block-keyed/_config.js @@ -0,0 +1,33 @@ +export default { + get props() { + return { + todos: [ + { + id: 123, + description: 'implement keyed each blocks' + }, + { + id: 234, + description: 'implement client-side hydration' + } + ] + }; + }, + + html: ` +

1: implement keyed each blocks

+

2: implement client-side hydration

+ `, + + test({ assert, component, target }) { + const [p1, p2] = target.querySelectorAll('p'); + + component.todos = [{ id: 234, description: 'implement client-side hydration' }]; + assert.htmlEqual(target.innerHTML, '

1: implement client-side hydration

'); + + const [p3] = target.querySelectorAll('p'); + + assert.ok(!target.contains(p1), 'first

element should be removed'); + assert.equal(p2, p3, 'second

element should be retained'); + } +}; diff --git a/test/runtime/samples/each-block-keyed/main.svelte b/packages/svelte/test/runtime/samples/each-block-keyed/main.svelte similarity index 100% rename from test/runtime/samples/each-block-keyed/main.svelte rename to packages/svelte/test/runtime/samples/each-block-keyed/main.svelte diff --git a/packages/svelte/test/runtime/samples/each-block-random-permute/_config.js b/packages/svelte/test/runtime/samples/each-block-random-permute/_config.js new file mode 100644 index 0000000000..d424171832 --- /dev/null +++ b/packages/svelte/test/runtime/samples/each-block-random-permute/_config.js @@ -0,0 +1,35 @@ +const VALUES = Array.from('abcdefghijklmnopqrstuvwxyz'); + +function permute() { + const values = VALUES.slice(); + const number = Math.floor(Math.random() * VALUES.length); + const permuted = []; + for (let i = 0; i < number; i++) { + permuted.push(...values.splice(Math.floor(Math.random() * (number - i)), 1)); + } + + return { + data: permuted, + expected: permuted.length ? `(${permuted.join(')(')})` : '' + }; +} + +let step = permute(); + +export default { + get props() { + return { values: step.data }; + }, + + get html() { + return step.expected; + }, + + test({ assert, component, target }) { + for (let i = 0; i < 100; i++) { + step = permute(); + component.values = step.data; + assert.htmlEqual(target.innerHTML, step.expected); + } + } +}; diff --git a/test/runtime/samples/each-block-random-permute/main.svelte b/packages/svelte/test/runtime/samples/each-block-random-permute/main.svelte similarity index 100% rename from test/runtime/samples/each-block-random-permute/main.svelte rename to packages/svelte/test/runtime/samples/each-block-random-permute/main.svelte diff --git a/test/runtime/samples/each-block-recursive-with-function-condition/_config.js b/packages/svelte/test/runtime/samples/each-block-recursive-with-function-condition/_config.js similarity index 100% rename from test/runtime/samples/each-block-recursive-with-function-condition/_config.js rename to packages/svelte/test/runtime/samples/each-block-recursive-with-function-condition/_config.js diff --git a/test/runtime/samples/each-block-recursive-with-function-condition/main.svelte b/packages/svelte/test/runtime/samples/each-block-recursive-with-function-condition/main.svelte similarity index 100% rename from test/runtime/samples/each-block-recursive-with-function-condition/main.svelte rename to packages/svelte/test/runtime/samples/each-block-recursive-with-function-condition/main.svelte diff --git a/test/runtime/samples/each-block-scope-shadow-bind-2/_config.js b/packages/svelte/test/runtime/samples/each-block-scope-shadow-bind-2/_config.js similarity index 100% rename from test/runtime/samples/each-block-scope-shadow-bind-2/_config.js rename to packages/svelte/test/runtime/samples/each-block-scope-shadow-bind-2/_config.js diff --git a/test/runtime/samples/each-block-scope-shadow-bind-2/main.svelte b/packages/svelte/test/runtime/samples/each-block-scope-shadow-bind-2/main.svelte similarity index 100% rename from test/runtime/samples/each-block-scope-shadow-bind-2/main.svelte rename to packages/svelte/test/runtime/samples/each-block-scope-shadow-bind-2/main.svelte diff --git a/test/runtime/samples/each-block-scope-shadow-bind-3/_config.js b/packages/svelte/test/runtime/samples/each-block-scope-shadow-bind-3/_config.js similarity index 100% rename from test/runtime/samples/each-block-scope-shadow-bind-3/_config.js rename to packages/svelte/test/runtime/samples/each-block-scope-shadow-bind-3/_config.js diff --git a/test/runtime/samples/each-block-scope-shadow-bind-3/main.svelte b/packages/svelte/test/runtime/samples/each-block-scope-shadow-bind-3/main.svelte similarity index 100% rename from test/runtime/samples/each-block-scope-shadow-bind-3/main.svelte rename to packages/svelte/test/runtime/samples/each-block-scope-shadow-bind-3/main.svelte diff --git a/packages/svelte/test/runtime/samples/each-block-scope-shadow-bind-4/_config.js b/packages/svelte/test/runtime/samples/each-block-scope-shadow-bind-4/_config.js new file mode 100644 index 0000000000..374ba7affd --- /dev/null +++ b/packages/svelte/test/runtime/samples/each-block-scope-shadow-bind-4/_config.js @@ -0,0 +1,63 @@ +export default { + html: ` +

+ b: Hello + +
+ + `, + ssrHtml: ` +
+ b: Hello + +
+ + `, + async test({ assert, target, window }) { + const input = target.querySelector('input'); + const button = target.querySelector('button'); + + input.value = 'Awesome'; + await input.dispatchEvent(new window.Event('input')); + + assert.htmlEqual( + target.innerHTML, + ` +
+ b: Awesome + +
+ + ` + ); + + await button.dispatchEvent(new window.MouseEvent('click')); + + assert.htmlEqual( + target.innerHTML, + ` +
+ c: World + +
+ + ` + ); + + assert.equal(input.value, 'World'); + + input.value = 'Svelte'; + await input.dispatchEvent(new window.Event('input')); + + assert.htmlEqual( + target.innerHTML, + ` +
+ c: Svelte + +
+ + ` + ); + } +}; diff --git a/test/runtime/samples/each-block-scope-shadow-bind-4/main.svelte b/packages/svelte/test/runtime/samples/each-block-scope-shadow-bind-4/main.svelte similarity index 100% rename from test/runtime/samples/each-block-scope-shadow-bind-4/main.svelte rename to packages/svelte/test/runtime/samples/each-block-scope-shadow-bind-4/main.svelte diff --git a/test/runtime/samples/each-block-scope-shadow-bind/_config.js b/packages/svelte/test/runtime/samples/each-block-scope-shadow-bind/_config.js similarity index 100% rename from test/runtime/samples/each-block-scope-shadow-bind/_config.js rename to packages/svelte/test/runtime/samples/each-block-scope-shadow-bind/_config.js diff --git a/test/runtime/samples/each-block-scope-shadow-bind/main.svelte b/packages/svelte/test/runtime/samples/each-block-scope-shadow-bind/main.svelte similarity index 100% rename from test/runtime/samples/each-block-scope-shadow-bind/main.svelte rename to packages/svelte/test/runtime/samples/each-block-scope-shadow-bind/main.svelte diff --git a/test/runtime/samples/each-block-scope-shadow-self/_config.js b/packages/svelte/test/runtime/samples/each-block-scope-shadow-self/_config.js similarity index 100% rename from test/runtime/samples/each-block-scope-shadow-self/_config.js rename to packages/svelte/test/runtime/samples/each-block-scope-shadow-self/_config.js diff --git a/test/runtime/samples/each-block-scope-shadow-self/main.svelte b/packages/svelte/test/runtime/samples/each-block-scope-shadow-self/main.svelte similarity index 100% rename from test/runtime/samples/each-block-scope-shadow-self/main.svelte rename to packages/svelte/test/runtime/samples/each-block-scope-shadow-self/main.svelte diff --git a/test/runtime/samples/each-block-scope-shadow/_config.js b/packages/svelte/test/runtime/samples/each-block-scope-shadow/_config.js similarity index 100% rename from test/runtime/samples/each-block-scope-shadow/_config.js rename to packages/svelte/test/runtime/samples/each-block-scope-shadow/_config.js diff --git a/test/runtime/samples/each-block-scope-shadow/main.svelte b/packages/svelte/test/runtime/samples/each-block-scope-shadow/main.svelte similarity index 100% rename from test/runtime/samples/each-block-scope-shadow/main.svelte rename to packages/svelte/test/runtime/samples/each-block-scope-shadow/main.svelte diff --git a/packages/svelte/test/runtime/samples/each-block-static/_config.js b/packages/svelte/test/runtime/samples/each-block-static/_config.js new file mode 100644 index 0000000000..0934542449 --- /dev/null +++ b/packages/svelte/test/runtime/samples/each-block-static/_config.js @@ -0,0 +1,12 @@ +export default { + get props() { + return { items: [] }; + }, + + html: '', + + test({ assert, component, target }) { + component.items = ['x']; + assert.htmlEqual(target.innerHTML, 'foo'); + } +}; diff --git a/test/runtime/samples/each-block-static/main.svelte b/packages/svelte/test/runtime/samples/each-block-static/main.svelte similarity index 100% rename from test/runtime/samples/each-block-static/main.svelte rename to packages/svelte/test/runtime/samples/each-block-static/main.svelte diff --git a/test/runtime/samples/each-block-string/_config.js b/packages/svelte/test/runtime/samples/each-block-string/_config.js similarity index 100% rename from test/runtime/samples/each-block-string/_config.js rename to packages/svelte/test/runtime/samples/each-block-string/_config.js diff --git a/test/runtime/samples/each-block-string/main.svelte b/packages/svelte/test/runtime/samples/each-block-string/main.svelte similarity index 100% rename from test/runtime/samples/each-block-string/main.svelte rename to packages/svelte/test/runtime/samples/each-block-string/main.svelte diff --git a/packages/svelte/test/runtime/samples/each-block-text-node/_config.js b/packages/svelte/test/runtime/samples/each-block-text-node/_config.js new file mode 100644 index 0000000000..1c9c0c601b --- /dev/null +++ b/packages/svelte/test/runtime/samples/each-block-text-node/_config.js @@ -0,0 +1,16 @@ +export default { + get props() { + return { + animals: ['alpaca', 'baboon', 'capybara'] + }; + }, + + html: '(alpaca)(baboon)(capybara)', + + test({ assert, component, target }) { + component.animals = ['caribou', 'dogfish']; + assert.htmlEqual(target.innerHTML, '(caribou)(dogfish)'); + component.animals = []; + assert.htmlEqual(target.innerHTML, ''); + } +}; diff --git a/test/runtime/samples/each-block-text-node/main.svelte b/packages/svelte/test/runtime/samples/each-block-text-node/main.svelte similarity index 100% rename from test/runtime/samples/each-block-text-node/main.svelte rename to packages/svelte/test/runtime/samples/each-block-text-node/main.svelte diff --git a/packages/svelte/test/runtime/samples/each-block-unkeyed-else-2/_config.js b/packages/svelte/test/runtime/samples/each-block-unkeyed-else-2/_config.js new file mode 100644 index 0000000000..23a47928ea --- /dev/null +++ b/packages/svelte/test/runtime/samples/each-block-unkeyed-else-2/_config.js @@ -0,0 +1,48 @@ +export default { + get props() { + return { + animals: ['alpaca', 'baboon', 'capybara'], + foo: 'something else' + }; + }, + + html: ` + before +

alpaca

+

baboon

+

capybara

+ after + `, + + test({ assert, component, target }) { + component.animals = []; + assert.htmlEqual( + target.innerHTML, + ` + before +

no animals, but rather something else

+ after + ` + ); + + component.foo = 'something other'; + assert.htmlEqual( + target.innerHTML, + ` + before +

no animals, but rather something other

+ after + ` + ); + + component.animals = ['wombat']; + assert.htmlEqual( + target.innerHTML, + ` + before +

wombat

+ after + ` + ); + } +}; diff --git a/test/runtime/samples/each-block-unkeyed-else-2/main.svelte b/packages/svelte/test/runtime/samples/each-block-unkeyed-else-2/main.svelte similarity index 100% rename from test/runtime/samples/each-block-unkeyed-else-2/main.svelte rename to packages/svelte/test/runtime/samples/each-block-unkeyed-else-2/main.svelte diff --git a/packages/svelte/test/runtime/samples/each-block-with-iterable/_config.js b/packages/svelte/test/runtime/samples/each-block-with-iterable/_config.js new file mode 100644 index 0000000000..b1ba63754c --- /dev/null +++ b/packages/svelte/test/runtime/samples/each-block-with-iterable/_config.js @@ -0,0 +1,29 @@ +export default { + html: ` +

1

+

2

+ +

1 0

+

2 1

+ +

1 0

+

2 1

+ `, + + test({ assert, component, target }) { + component.numbers = new Set([2, 3]); + assert.htmlEqual( + target.innerHTML, + ` +

2

+

3

+ +

2 0

+

3 1

+ +

2 0

+

3 1

+ ` + ); + } +}; diff --git a/packages/svelte/test/runtime/samples/each-block-with-iterable/main.svelte b/packages/svelte/test/runtime/samples/each-block-with-iterable/main.svelte new file mode 100644 index 0000000000..b69e5ec3fa --- /dev/null +++ b/packages/svelte/test/runtime/samples/each-block-with-iterable/main.svelte @@ -0,0 +1,15 @@ + + +{#each numbers as i} +

{i}

+{/each} + +{#each numbers as i, index} +

{i} {index}

+{/each} + +{#each numbers as i, index (i)} +

{i} {index}

+{/each} diff --git a/packages/svelte/test/runtime/samples/each-block/_config.js b/packages/svelte/test/runtime/samples/each-block/_config.js new file mode 100644 index 0000000000..c75e1bd682 --- /dev/null +++ b/packages/svelte/test/runtime/samples/each-block/_config.js @@ -0,0 +1,29 @@ +export default { + get props() { + return { + animals: ['alpaca', 'baboon', 'capybara'] + }; + }, + + html: ` +

alpaca

+

baboon

+

capybara

+ `, + + test({ assert, component, target }) { + component.animals = ['alpaca', 'baboon', 'caribou', 'dogfish']; + assert.htmlEqual( + target.innerHTML, + ` +

alpaca

+

baboon

+

caribou

+

dogfish

+ ` + ); + + component.animals = []; + assert.htmlEqual(target.innerHTML, ''); + } +}; diff --git a/test/runtime/samples/each-block/main.svelte b/packages/svelte/test/runtime/samples/each-block/main.svelte similarity index 100% rename from test/runtime/samples/each-block/main.svelte rename to packages/svelte/test/runtime/samples/each-block/main.svelte diff --git a/test/runtime/samples/each-blocks-assignment-2/_config.js b/packages/svelte/test/runtime/samples/each-blocks-assignment-2/_config.js similarity index 100% rename from test/runtime/samples/each-blocks-assignment-2/_config.js rename to packages/svelte/test/runtime/samples/each-blocks-assignment-2/_config.js diff --git a/test/runtime/samples/each-blocks-assignment-2/main.svelte b/packages/svelte/test/runtime/samples/each-blocks-assignment-2/main.svelte similarity index 100% rename from test/runtime/samples/each-blocks-assignment-2/main.svelte rename to packages/svelte/test/runtime/samples/each-blocks-assignment-2/main.svelte diff --git a/test/runtime/samples/each-blocks-assignment/_config.js b/packages/svelte/test/runtime/samples/each-blocks-assignment/_config.js similarity index 100% rename from test/runtime/samples/each-blocks-assignment/_config.js rename to packages/svelte/test/runtime/samples/each-blocks-assignment/_config.js diff --git a/test/runtime/samples/each-blocks-assignment/main.svelte b/packages/svelte/test/runtime/samples/each-blocks-assignment/main.svelte similarity index 100% rename from test/runtime/samples/each-blocks-assignment/main.svelte rename to packages/svelte/test/runtime/samples/each-blocks-assignment/main.svelte diff --git a/test/runtime/samples/each-blocks-expression/_config.js b/packages/svelte/test/runtime/samples/each-blocks-expression/_config.js similarity index 100% rename from test/runtime/samples/each-blocks-expression/_config.js rename to packages/svelte/test/runtime/samples/each-blocks-expression/_config.js diff --git a/test/runtime/samples/each-blocks-expression/main.svelte b/packages/svelte/test/runtime/samples/each-blocks-expression/main.svelte similarity index 100% rename from test/runtime/samples/each-blocks-expression/main.svelte rename to packages/svelte/test/runtime/samples/each-blocks-expression/main.svelte diff --git a/packages/svelte/test/runtime/samples/each-blocks-nested-b/_config.js b/packages/svelte/test/runtime/samples/each-blocks-nested-b/_config.js new file mode 100644 index 0000000000..3e70469893 --- /dev/null +++ b/packages/svelte/test/runtime/samples/each-blocks-nested-b/_config.js @@ -0,0 +1,24 @@ +export default { + get props() { + return { + categories: [ + { + name: 'animals', + things: [{ name: 'aardvark' }, { name: 'buffalo' }, { name: 'chinchilla' }] + }, + { + name: 'countries', + things: [{ name: 'albania' }, { name: 'brazil' }, { name: 'china' }] + }, + { + name: 'people', + things: [{ name: 'alice' }, { name: 'bob' }, { name: 'carol' }, { name: 'dave' }] + } + ] + }; + }, + html: '

animals: aardvark

animals: buffalo

animals: chinchilla

countries: albania

countries: brazil

countries: china

people: alice

people: bob

people: carol

people: dave

', + test() { + // TODO + } +}; diff --git a/test/runtime/samples/each-blocks-nested-b/main.svelte b/packages/svelte/test/runtime/samples/each-blocks-nested-b/main.svelte similarity index 100% rename from test/runtime/samples/each-blocks-nested-b/main.svelte rename to packages/svelte/test/runtime/samples/each-blocks-nested-b/main.svelte diff --git a/packages/svelte/test/runtime/samples/each-blocks-nested/_config.js b/packages/svelte/test/runtime/samples/each-blocks-nested/_config.js new file mode 100644 index 0000000000..f27af94b47 --- /dev/null +++ b/packages/svelte/test/runtime/samples/each-blocks-nested/_config.js @@ -0,0 +1,13 @@ +export default { + get props() { + return { + columns: ['a', 'b', 'c'], + rows: [1, 2, 3] + }; + }, + + html: '
a, 1
a, 2
a, 3
b, 1
b, 2
b, 3
c, 1
c, 2
c, 3
', + + // TODO + test() {} +}; diff --git a/test/runtime/samples/each-blocks-nested/main.svelte b/packages/svelte/test/runtime/samples/each-blocks-nested/main.svelte similarity index 100% rename from test/runtime/samples/each-blocks-nested/main.svelte rename to packages/svelte/test/runtime/samples/each-blocks-nested/main.svelte diff --git a/test/runtime/samples/element-invalid-name/_config.js b/packages/svelte/test/runtime/samples/element-invalid-name/_config.js similarity index 100% rename from test/runtime/samples/element-invalid-name/_config.js rename to packages/svelte/test/runtime/samples/element-invalid-name/_config.js diff --git a/test/runtime/samples/element-invalid-name/main.svelte b/packages/svelte/test/runtime/samples/element-invalid-name/main.svelte similarity index 100% rename from test/runtime/samples/element-invalid-name/main.svelte rename to packages/svelte/test/runtime/samples/element-invalid-name/main.svelte diff --git a/packages/svelte/test/runtime/samples/element-source-location-preprocessed/_config.js b/packages/svelte/test/runtime/samples/element-source-location-preprocessed/_config.js new file mode 100644 index 0000000000..d132db0141 --- /dev/null +++ b/packages/svelte/test/runtime/samples/element-source-location-preprocessed/_config.js @@ -0,0 +1,33 @@ +import MagicString from 'magic-string'; +import * as path from 'node:path'; + +// fake preprocessor by doing transforms on the source +const str = new MagicString( + ` + +

{foo}

+`.replace(/\r\n/g, '\n') +); +str.remove(8, 26); // remove line type Foo = ... +str.remove(55, 56); // remove whitespace before

+ +export default { + compileOptions: { + dev: true, + sourcemap: str.generateMap({ hires: true }) + }, + + test({ assert, target }) { + const h1 = target.querySelector('h1'); + + assert.deepEqual(h1.__svelte_meta.loc, { + file: path.relative(process.cwd(), path.resolve(__dirname, 'main.svelte')), + line: 5, // line 4 in main.svelte, but that's the preprocessed code, the original code is above in the fake preprocessor + column: 1, // line 0 in main.svelte, but that's the preprocessed code, the original code is above in the fake preprocessor + char: 38 // TODO this is wrong but we can't backtrace it due to limitations, see add_location function usage comment for more info + }); + } +}; diff --git a/packages/svelte/test/runtime/samples/element-source-location-preprocessed/main.svelte b/packages/svelte/test/runtime/samples/element-source-location-preprocessed/main.svelte new file mode 100644 index 0000000000..fd631ff11c --- /dev/null +++ b/packages/svelte/test/runtime/samples/element-source-location-preprocessed/main.svelte @@ -0,0 +1,5 @@ + + +

{foo}

diff --git a/test/runtime/samples/element-source-location/Foo.svelte b/packages/svelte/test/runtime/samples/element-source-location/Foo.svelte similarity index 100% rename from test/runtime/samples/element-source-location/Foo.svelte rename to packages/svelte/test/runtime/samples/element-source-location/Foo.svelte diff --git a/packages/svelte/test/runtime/samples/element-source-location/_config.js b/packages/svelte/test/runtime/samples/element-source-location/_config.js new file mode 100644 index 0000000000..a5ba9a79da --- /dev/null +++ b/packages/svelte/test/runtime/samples/element-source-location/_config.js @@ -0,0 +1,26 @@ +import * as path from 'node:path'; + +export default { + compileOptions: { + dev: true + }, + + test({ assert, target }) { + const h1 = target.querySelector('h1'); + const p = target.querySelector('p'); + + assert.deepEqual(h1.__svelte_meta.loc, { + file: path.relative(process.cwd(), path.resolve(__dirname, 'main.svelte')), + line: 4, + column: 0, + char: 53 + }); + + assert.deepEqual(p.__svelte_meta.loc, { + file: path.relative(process.cwd(), path.resolve(__dirname, 'Foo.svelte')), + line: 1, + column: 1, + char: 7 + }); + } +}; diff --git a/test/runtime/samples/element-source-location/main.svelte b/packages/svelte/test/runtime/samples/element-source-location/main.svelte similarity index 100% rename from test/runtime/samples/element-source-location/main.svelte rename to packages/svelte/test/runtime/samples/element-source-location/main.svelte diff --git a/test/runtime/samples/empty-component-destroy/Empty.svelte b/packages/svelte/test/runtime/samples/empty-component-destroy/Empty.svelte similarity index 100% rename from test/runtime/samples/empty-component-destroy/Empty.svelte rename to packages/svelte/test/runtime/samples/empty-component-destroy/Empty.svelte diff --git a/packages/svelte/test/runtime/samples/empty-component-destroy/_config.js b/packages/svelte/test/runtime/samples/empty-component-destroy/_config.js new file mode 100644 index 0000000000..7a51b21b8b --- /dev/null +++ b/packages/svelte/test/runtime/samples/empty-component-destroy/_config.js @@ -0,0 +1,28 @@ +let log; +export default { + html: ` + + `, + + before_test() { + log = console.log; + }, + after_test() { + console.log = log; + }, + + async test({ assert, target, window }) { + const button = target.querySelector('button'); + const event = new window.MouseEvent('click'); + const messages = []; + console.log = (msg) => messages.push(msg); + await button.dispatchEvent(event); + assert.htmlEqual( + target.innerHTML, + ` + + ` + ); + assert.deepEqual(messages, ['destroy']); + } +}; diff --git a/test/runtime/samples/empty-component-destroy/main.svelte b/packages/svelte/test/runtime/samples/empty-component-destroy/main.svelte similarity index 100% rename from test/runtime/samples/empty-component-destroy/main.svelte rename to packages/svelte/test/runtime/samples/empty-component-destroy/main.svelte diff --git a/test/runtime/samples/empty-dom/_config.js b/packages/svelte/test/runtime/samples/empty-dom/_config.js similarity index 100% rename from test/runtime/samples/empty-dom/_config.js rename to packages/svelte/test/runtime/samples/empty-dom/_config.js diff --git a/test/runtime/samples/empty-dom/main.svelte b/packages/svelte/test/runtime/samples/empty-dom/main.svelte similarity index 100% rename from test/runtime/samples/empty-dom/main.svelte rename to packages/svelte/test/runtime/samples/empty-dom/main.svelte diff --git a/test/runtime/samples/empty-style-block/_config.js b/packages/svelte/test/runtime/samples/empty-style-block/_config.js similarity index 100% rename from test/runtime/samples/empty-style-block/_config.js rename to packages/svelte/test/runtime/samples/empty-style-block/_config.js diff --git a/test/runtime/samples/empty-style-block/main.svelte b/packages/svelte/test/runtime/samples/empty-style-block/main.svelte similarity index 100% rename from test/runtime/samples/empty-style-block/main.svelte rename to packages/svelte/test/runtime/samples/empty-style-block/main.svelte diff --git a/test/runtime/samples/escape-template-literals/Widget.svelte b/packages/svelte/test/runtime/samples/escape-template-literals/Widget.svelte similarity index 100% rename from test/runtime/samples/escape-template-literals/Widget.svelte rename to packages/svelte/test/runtime/samples/escape-template-literals/Widget.svelte diff --git a/test/runtime/samples/escape-template-literals/_config.js b/packages/svelte/test/runtime/samples/escape-template-literals/_config.js similarity index 100% rename from test/runtime/samples/escape-template-literals/_config.js rename to packages/svelte/test/runtime/samples/escape-template-literals/_config.js diff --git a/test/runtime/samples/escape-template-literals/main.svelte b/packages/svelte/test/runtime/samples/escape-template-literals/main.svelte similarity index 100% rename from test/runtime/samples/escape-template-literals/main.svelte rename to packages/svelte/test/runtime/samples/escape-template-literals/main.svelte diff --git a/test/runtime/samples/escaped-text/_config.js b/packages/svelte/test/runtime/samples/escaped-text/_config.js similarity index 100% rename from test/runtime/samples/escaped-text/_config.js rename to packages/svelte/test/runtime/samples/escaped-text/_config.js diff --git a/test/runtime/samples/escaped-text/main.svelte b/packages/svelte/test/runtime/samples/escaped-text/main.svelte similarity index 100% rename from test/runtime/samples/escaped-text/main.svelte rename to packages/svelte/test/runtime/samples/escaped-text/main.svelte diff --git a/test/runtime/samples/event-handler-async/_config.js b/packages/svelte/test/runtime/samples/event-handler-async/_config.js similarity index 100% rename from test/runtime/samples/event-handler-async/_config.js rename to packages/svelte/test/runtime/samples/event-handler-async/_config.js diff --git a/test/runtime/samples/event-handler-async/main.svelte b/packages/svelte/test/runtime/samples/event-handler-async/main.svelte similarity index 100% rename from test/runtime/samples/event-handler-async/main.svelte rename to packages/svelte/test/runtime/samples/event-handler-async/main.svelte diff --git a/packages/svelte/test/runtime/samples/event-handler-console-log/_config.js b/packages/svelte/test/runtime/samples/event-handler-console-log/_config.js new file mode 100644 index 0000000000..564e1dbc78 --- /dev/null +++ b/packages/svelte/test/runtime/samples/event-handler-console-log/_config.js @@ -0,0 +1,23 @@ +export default { + get props() { + return { foo: 42 }; + }, + + html: ` + + `, + + test({ assert, target, window }) { + const button = target.querySelector('button'); + const event = new window.MouseEvent('click'); + + const messages = []; + + const log = console.log; + console.log = (msg) => messages.push(msg); + button.dispatchEvent(event); + console.log = log; + + assert.deepEqual(messages, [42]); + } +}; diff --git a/test/runtime/samples/event-handler-console-log/main.svelte b/packages/svelte/test/runtime/samples/event-handler-console-log/main.svelte similarity index 100% rename from test/runtime/samples/event-handler-console-log/main.svelte rename to packages/svelte/test/runtime/samples/event-handler-console-log/main.svelte diff --git a/packages/svelte/test/runtime/samples/event-handler-deconflicted/_config.js b/packages/svelte/test/runtime/samples/event-handler-deconflicted/_config.js new file mode 100644 index 0000000000..f63e301a48 --- /dev/null +++ b/packages/svelte/test/runtime/samples/event-handler-deconflicted/_config.js @@ -0,0 +1,11 @@ +export default { + preserveIdentifiers: true, + + get props() { + return { click_handler: 'x' }; + }, + + html: ` + + ` +}; diff --git a/test/runtime/samples/event-handler-deconflicted/main.svelte b/packages/svelte/test/runtime/samples/event-handler-deconflicted/main.svelte similarity index 100% rename from test/runtime/samples/event-handler-deconflicted/main.svelte rename to packages/svelte/test/runtime/samples/event-handler-deconflicted/main.svelte diff --git a/packages/svelte/test/runtime/samples/event-handler-destructured/_config.js b/packages/svelte/test/runtime/samples/event-handler-destructured/_config.js new file mode 100644 index 0000000000..397db63fe1 --- /dev/null +++ b/packages/svelte/test/runtime/samples/event-handler-destructured/_config.js @@ -0,0 +1,18 @@ +export default { + html: ` + + `, + + async test({ assert, target, window }) { + const button = target.querySelector('button'); + const event = new window.MouseEvent('click'); + + await button.dispatchEvent(event); + assert.htmlEqual( + target.innerHTML, + ` + + ` + ); + } +}; diff --git a/test/runtime/samples/event-handler-destructured/main.svelte b/packages/svelte/test/runtime/samples/event-handler-destructured/main.svelte similarity index 100% rename from test/runtime/samples/event-handler-destructured/main.svelte rename to packages/svelte/test/runtime/samples/event-handler-destructured/main.svelte diff --git a/test/runtime/samples/event-handler-dynamic-2/_config.js b/packages/svelte/test/runtime/samples/event-handler-dynamic-2/_config.js similarity index 100% rename from test/runtime/samples/event-handler-dynamic-2/_config.js rename to packages/svelte/test/runtime/samples/event-handler-dynamic-2/_config.js diff --git a/test/runtime/samples/event-handler-dynamic-2/main.svelte b/packages/svelte/test/runtime/samples/event-handler-dynamic-2/main.svelte similarity index 100% rename from test/runtime/samples/event-handler-dynamic-2/main.svelte rename to packages/svelte/test/runtime/samples/event-handler-dynamic-2/main.svelte diff --git a/test/runtime/samples/event-handler-dynamic-bound-var/Nested.svelte b/packages/svelte/test/runtime/samples/event-handler-dynamic-bound-var/Nested.svelte similarity index 100% rename from test/runtime/samples/event-handler-dynamic-bound-var/Nested.svelte rename to packages/svelte/test/runtime/samples/event-handler-dynamic-bound-var/Nested.svelte diff --git a/test/runtime/samples/event-handler-dynamic-bound-var/_config.js b/packages/svelte/test/runtime/samples/event-handler-dynamic-bound-var/_config.js similarity index 100% rename from test/runtime/samples/event-handler-dynamic-bound-var/_config.js rename to packages/svelte/test/runtime/samples/event-handler-dynamic-bound-var/_config.js diff --git a/test/runtime/samples/event-handler-dynamic-bound-var/main.svelte b/packages/svelte/test/runtime/samples/event-handler-dynamic-bound-var/main.svelte similarity index 100% rename from test/runtime/samples/event-handler-dynamic-bound-var/main.svelte rename to packages/svelte/test/runtime/samples/event-handler-dynamic-bound-var/main.svelte diff --git a/packages/svelte/test/runtime/samples/event-handler-dynamic-expression/_config.js b/packages/svelte/test/runtime/samples/event-handler-dynamic-expression/_config.js new file mode 100644 index 0000000000..58bf66aac6 --- /dev/null +++ b/packages/svelte/test/runtime/samples/event-handler-dynamic-expression/_config.js @@ -0,0 +1,18 @@ +export default { + html: '', + + async test({ assert, target, window }) { + const [button] = target.querySelectorAll('button'); + + const event = new window.MouseEvent('click'); + + await button.dispatchEvent(event); + assert.htmlEqual(target.innerHTML, ''); + + await button.dispatchEvent(event); + assert.htmlEqual(target.innerHTML, ''); + + await button.dispatchEvent(event); + assert.htmlEqual(target.innerHTML, ''); + } +}; diff --git a/test/runtime/samples/event-handler-dynamic-expression/main.svelte b/packages/svelte/test/runtime/samples/event-handler-dynamic-expression/main.svelte similarity index 100% rename from test/runtime/samples/event-handler-dynamic-expression/main.svelte rename to packages/svelte/test/runtime/samples/event-handler-dynamic-expression/main.svelte diff --git a/packages/svelte/test/runtime/samples/event-handler-dynamic-hash/_config.js b/packages/svelte/test/runtime/samples/event-handler-dynamic-hash/_config.js new file mode 100644 index 0000000000..44990524fd --- /dev/null +++ b/packages/svelte/test/runtime/samples/event-handler-dynamic-hash/_config.js @@ -0,0 +1,63 @@ +export default { + html: ` +

+ + +

+

0

+ + `, + + async test({ assert, target, window }) { + const [updateButton1, updateButton2, button] = target.querySelectorAll('button'); + + const event = new window.MouseEvent('click'); + let err = ''; + window.addEventListener('error', (e) => { + e.preventDefault(); + err = e.message; + }); + + await button.dispatchEvent(event); + assert.equal(err, '', err); + assert.htmlEqual( + target.innerHTML, + ` +

+ + +

+

0

+ + ` + ); + + await updateButton1.dispatchEvent(event); + await button.dispatchEvent(event); + assert.htmlEqual( + target.innerHTML, + ` +

+ + +

+

1

+ + ` + ); + + await updateButton2.dispatchEvent(event); + await button.dispatchEvent(event); + assert.htmlEqual( + target.innerHTML, + ` +

+ + +

+

2

+ + ` + ); + } +}; diff --git a/test/runtime/samples/event-handler-dynamic-hash/main.svelte b/packages/svelte/test/runtime/samples/event-handler-dynamic-hash/main.svelte similarity index 100% rename from test/runtime/samples/event-handler-dynamic-hash/main.svelte rename to packages/svelte/test/runtime/samples/event-handler-dynamic-hash/main.svelte diff --git a/packages/svelte/test/runtime/samples/event-handler-dynamic-invalid/_config.js b/packages/svelte/test/runtime/samples/event-handler-dynamic-invalid/_config.js new file mode 100644 index 0000000000..cac6d60f2e --- /dev/null +++ b/packages/svelte/test/runtime/samples/event-handler-dynamic-invalid/_config.js @@ -0,0 +1,26 @@ +export default { + html: ` + + `, + + async test({ assert, target, window }) { + const [buttonUndef, buttonNull, buttonInvalid] = target.querySelectorAll('button'); + + const event = new window.MouseEvent('click'); + let err = ''; + window.addEventListener('error', (e) => { + e.preventDefault(); + err = e.message; + }); + + // All three should not throw if proper checking is done in runtime code + await buttonUndef.dispatchEvent(event); + assert.equal(err, '', err); + + await buttonNull.dispatchEvent(event); + assert.equal(err, '', err); + + await buttonInvalid.dispatchEvent(event); + assert.equal(err, '', err); + } +}; diff --git a/test/runtime/samples/event-handler-dynamic-invalid/main.svelte b/packages/svelte/test/runtime/samples/event-handler-dynamic-invalid/main.svelte similarity index 100% rename from test/runtime/samples/event-handler-dynamic-invalid/main.svelte rename to packages/svelte/test/runtime/samples/event-handler-dynamic-invalid/main.svelte diff --git a/test/runtime/samples/event-handler-dynamic-modifier-once/_config.js b/packages/svelte/test/runtime/samples/event-handler-dynamic-modifier-once/_config.js similarity index 100% rename from test/runtime/samples/event-handler-dynamic-modifier-once/_config.js rename to packages/svelte/test/runtime/samples/event-handler-dynamic-modifier-once/_config.js diff --git a/test/runtime/samples/event-handler-dynamic-modifier-once/main.svelte b/packages/svelte/test/runtime/samples/event-handler-dynamic-modifier-once/main.svelte similarity index 100% rename from test/runtime/samples/event-handler-dynamic-modifier-once/main.svelte rename to packages/svelte/test/runtime/samples/event-handler-dynamic-modifier-once/main.svelte diff --git a/test/runtime/samples/event-handler-dynamic-modifier-prevent-default/_config.js b/packages/svelte/test/runtime/samples/event-handler-dynamic-modifier-prevent-default/_config.js similarity index 100% rename from test/runtime/samples/event-handler-dynamic-modifier-prevent-default/_config.js rename to packages/svelte/test/runtime/samples/event-handler-dynamic-modifier-prevent-default/_config.js diff --git a/test/runtime/samples/event-handler-dynamic-modifier-prevent-default/main.svelte b/packages/svelte/test/runtime/samples/event-handler-dynamic-modifier-prevent-default/main.svelte similarity index 100% rename from test/runtime/samples/event-handler-dynamic-modifier-prevent-default/main.svelte rename to packages/svelte/test/runtime/samples/event-handler-dynamic-modifier-prevent-default/main.svelte diff --git a/test/runtime/samples/event-handler-dynamic-modifier-self/_config.js b/packages/svelte/test/runtime/samples/event-handler-dynamic-modifier-self/_config.js similarity index 100% rename from test/runtime/samples/event-handler-dynamic-modifier-self/_config.js rename to packages/svelte/test/runtime/samples/event-handler-dynamic-modifier-self/_config.js diff --git a/test/runtime/samples/event-handler-dynamic-modifier-self/main.svelte b/packages/svelte/test/runtime/samples/event-handler-dynamic-modifier-self/main.svelte similarity index 100% rename from test/runtime/samples/event-handler-dynamic-modifier-self/main.svelte rename to packages/svelte/test/runtime/samples/event-handler-dynamic-modifier-self/main.svelte diff --git a/test/runtime/samples/event-handler-dynamic-modifier-stop-propagation/_config.js b/packages/svelte/test/runtime/samples/event-handler-dynamic-modifier-stop-propagation/_config.js similarity index 100% rename from test/runtime/samples/event-handler-dynamic-modifier-stop-propagation/_config.js rename to packages/svelte/test/runtime/samples/event-handler-dynamic-modifier-stop-propagation/_config.js diff --git a/test/runtime/samples/event-handler-dynamic-modifier-stop-propagation/main.svelte b/packages/svelte/test/runtime/samples/event-handler-dynamic-modifier-stop-propagation/main.svelte similarity index 100% rename from test/runtime/samples/event-handler-dynamic-modifier-stop-propagation/main.svelte rename to packages/svelte/test/runtime/samples/event-handler-dynamic-modifier-stop-propagation/main.svelte diff --git a/test/runtime/samples/event-handler-dynamic-multiple/_config.js b/packages/svelte/test/runtime/samples/event-handler-dynamic-multiple/_config.js similarity index 100% rename from test/runtime/samples/event-handler-dynamic-multiple/_config.js rename to packages/svelte/test/runtime/samples/event-handler-dynamic-multiple/_config.js diff --git a/test/runtime/samples/event-handler-dynamic-multiple/main.svelte b/packages/svelte/test/runtime/samples/event-handler-dynamic-multiple/main.svelte similarity index 100% rename from test/runtime/samples/event-handler-dynamic-multiple/main.svelte rename to packages/svelte/test/runtime/samples/event-handler-dynamic-multiple/main.svelte diff --git a/packages/svelte/test/runtime/samples/event-handler-dynamic/_config.js b/packages/svelte/test/runtime/samples/event-handler-dynamic/_config.js new file mode 100644 index 0000000000..44990524fd --- /dev/null +++ b/packages/svelte/test/runtime/samples/event-handler-dynamic/_config.js @@ -0,0 +1,63 @@ +export default { + html: ` +

+ + +

+

0

+ + `, + + async test({ assert, target, window }) { + const [updateButton1, updateButton2, button] = target.querySelectorAll('button'); + + const event = new window.MouseEvent('click'); + let err = ''; + window.addEventListener('error', (e) => { + e.preventDefault(); + err = e.message; + }); + + await button.dispatchEvent(event); + assert.equal(err, '', err); + assert.htmlEqual( + target.innerHTML, + ` +

+ + +

+

0

+ + ` + ); + + await updateButton1.dispatchEvent(event); + await button.dispatchEvent(event); + assert.htmlEqual( + target.innerHTML, + ` +

+ + +

+

1

+ + ` + ); + + await updateButton2.dispatchEvent(event); + await button.dispatchEvent(event); + assert.htmlEqual( + target.innerHTML, + ` +

+ + +

+

2

+ + ` + ); + } +}; diff --git a/test/runtime/samples/event-handler-dynamic/main.svelte b/packages/svelte/test/runtime/samples/event-handler-dynamic/main.svelte similarity index 100% rename from test/runtime/samples/event-handler-dynamic/main.svelte rename to packages/svelte/test/runtime/samples/event-handler-dynamic/main.svelte diff --git a/packages/svelte/test/runtime/samples/event-handler-each-context-invalidation/_config.js b/packages/svelte/test/runtime/samples/event-handler-each-context-invalidation/_config.js new file mode 100644 index 0000000000..8baa8fd096 --- /dev/null +++ b/packages/svelte/test/runtime/samples/event-handler-each-context-invalidation/_config.js @@ -0,0 +1,37 @@ +export default { + html: ` + + + +

on: 1

+ `, + + async test({ assert, component, target, window }) { + const buttons = target.querySelectorAll('button'); + const event = new window.MouseEvent('click'); + + await buttons[0].dispatchEvent(event); + assert.htmlEqual( + target.innerHTML, + ` + + + +

on: 2

+ ` + ); + + await buttons[2].dispatchEvent(event); + assert.htmlEqual( + target.innerHTML, + ` + + + +

on: 3

+ ` + ); + + assert.deepEqual(component.switches, [{ on: true }, { on: true }, { on: true }]); + } +}; diff --git a/test/runtime/samples/event-handler-each-context-invalidation/main.svelte b/packages/svelte/test/runtime/samples/event-handler-each-context-invalidation/main.svelte similarity index 100% rename from test/runtime/samples/event-handler-each-context-invalidation/main.svelte rename to packages/svelte/test/runtime/samples/event-handler-each-context-invalidation/main.svelte diff --git a/packages/svelte/test/runtime/samples/event-handler-each-context/_config.js b/packages/svelte/test/runtime/samples/event-handler-each-context/_config.js new file mode 100644 index 0000000000..df024d7fb9 --- /dev/null +++ b/packages/svelte/test/runtime/samples/event-handler-each-context/_config.js @@ -0,0 +1,21 @@ +export default { + get props() { + return { + items: ['whatever'], + foo: 'wrong', + bar: 'right' + }; + }, + + test({ assert, component, target, window }) { + const button = target.querySelector('button'); + const event = new window.MouseEvent('click'); + + button.dispatchEvent(event); + assert.equal(component.foo, 'right'); + + component.bar = 'left'; + button.dispatchEvent(event); + assert.equal(component.foo, 'left'); + } +}; diff --git a/test/runtime/samples/event-handler-each-context/main.svelte b/packages/svelte/test/runtime/samples/event-handler-each-context/main.svelte similarity index 100% rename from test/runtime/samples/event-handler-each-context/main.svelte rename to packages/svelte/test/runtime/samples/event-handler-each-context/main.svelte diff --git a/packages/svelte/test/runtime/samples/event-handler-each-deconflicted/_config.js b/packages/svelte/test/runtime/samples/event-handler-each-deconflicted/_config.js new file mode 100644 index 0000000000..3f6c98e531 --- /dev/null +++ b/packages/svelte/test/runtime/samples/event-handler-each-deconflicted/_config.js @@ -0,0 +1,38 @@ +export default { + get props() { + return { foo: [1], bar: [2], clicked: 'neither' }; + }, + + html: ` + + +

clicked: neither

+ `, + + async test({ assert, component, target, window }) { + const buttons = target.querySelectorAll('button'); + const event = new window.MouseEvent('click'); + + await buttons[0].dispatchEvent(event); + assert.equal(component.clicked, 'foo'); + assert.htmlEqual( + target.innerHTML, + ` + + +

clicked: foo

+ ` + ); + + await buttons[1].dispatchEvent(event); + assert.equal(component.clicked, 'bar'); + assert.htmlEqual( + target.innerHTML, + ` + + +

clicked: bar

+ ` + ); + } +}; diff --git a/test/runtime/samples/event-handler-each-deconflicted/main.svelte b/packages/svelte/test/runtime/samples/event-handler-each-deconflicted/main.svelte similarity index 100% rename from test/runtime/samples/event-handler-each-deconflicted/main.svelte rename to packages/svelte/test/runtime/samples/event-handler-each-deconflicted/main.svelte diff --git a/packages/svelte/test/runtime/samples/event-handler-each-modifier/_config.js b/packages/svelte/test/runtime/samples/event-handler-each-modifier/_config.js new file mode 100644 index 0000000000..e96cd1a987 --- /dev/null +++ b/packages/svelte/test/runtime/samples/event-handler-each-modifier/_config.js @@ -0,0 +1,30 @@ +export default { + async test({ assert, component, target, window }) { + // set first + await component.lists.update(() => [{ text: 'item1' }, { text: 'item2' }, { text: 'item3' }]); + + await component.lists.update(() => [{ text: 'item3' }, { text: 'item2' }, { text: 'item1' }]); + + await component.lists.update(() => [{ text: 'item1' }, { text: 'item2' }, { text: 'item3' }]); + + assert.equal(component.updated, 4); + + const [item1, item2] = target.childNodes; + const [item1Btn1, item1Btn2] = item1.querySelectorAll('button'); + const [item2Btn1, item2Btn2] = item2.querySelectorAll('button'); + + const clickEvent = new window.MouseEvent('click'); + + await item1Btn1.dispatchEvent(clickEvent); + assert.equal(component.getNormalCount(), 1); + + await item1Btn2.dispatchEvent(clickEvent); + assert.equal(component.getModifierCount(), 1); + + await item2Btn1.dispatchEvent(clickEvent); + assert.equal(component.getNormalCount(), 2); + + await item2Btn2.dispatchEvent(clickEvent); + assert.equal(component.getModifierCount(), 2); + } +}; diff --git a/test/runtime/samples/event-handler-each-modifier/main.svelte b/packages/svelte/test/runtime/samples/event-handler-each-modifier/main.svelte similarity index 100% rename from test/runtime/samples/event-handler-each-modifier/main.svelte rename to packages/svelte/test/runtime/samples/event-handler-each-modifier/main.svelte diff --git a/packages/svelte/test/runtime/samples/event-handler-each-this/_config.js b/packages/svelte/test/runtime/samples/event-handler-each-this/_config.js new file mode 100644 index 0000000000..369e6a9d1e --- /dev/null +++ b/packages/svelte/test/runtime/samples/event-handler-each-this/_config.js @@ -0,0 +1,28 @@ +export default { + get props() { + return { items: ['foo', 'bar', 'baz'] }; + }, + + html: ` + + + + `, + + test({ assert, component, target, window }) { + const buttons = target.querySelectorAll('button'); + const event = new window.MouseEvent('click'); + + const clicked = []; + + component.$on('clicked', (event) => { + clicked.push(event.detail.node); + }); + + buttons[1].dispatchEvent(event); + + assert.equal(clicked.length, 1); + assert.equal(clicked[0].nodeName, 'BUTTON'); + assert.equal(clicked[0].textContent, 'bar'); + } +}; diff --git a/test/runtime/samples/event-handler-each-this/main.svelte b/packages/svelte/test/runtime/samples/event-handler-each-this/main.svelte similarity index 100% rename from test/runtime/samples/event-handler-each-this/main.svelte rename to packages/svelte/test/runtime/samples/event-handler-each-this/main.svelte diff --git a/packages/svelte/test/runtime/samples/event-handler-each/_config.js b/packages/svelte/test/runtime/samples/event-handler-each/_config.js new file mode 100644 index 0000000000..e86b93e4da --- /dev/null +++ b/packages/svelte/test/runtime/samples/event-handler-each/_config.js @@ -0,0 +1,31 @@ +export default { + get props() { + return { + items: ['foo', 'bar', 'baz'], + selected: 'foo' + }; + }, + + html: ` + + + +

selected: foo

+ `, + + async test({ assert, target, window }) { + const buttons = target.querySelectorAll('button'); + const event = new window.MouseEvent('click'); + + await buttons[1].dispatchEvent(event); + assert.htmlEqual( + target.innerHTML, + ` + + + +

selected: bar

+ ` + ); + } +}; diff --git a/test/runtime/samples/event-handler-each/main.svelte b/packages/svelte/test/runtime/samples/event-handler-each/main.svelte similarity index 100% rename from test/runtime/samples/event-handler-each/main.svelte rename to packages/svelte/test/runtime/samples/event-handler-each/main.svelte diff --git a/test/runtime/samples/event-handler-event-methods/_config.js b/packages/svelte/test/runtime/samples/event-handler-event-methods/_config.js similarity index 100% rename from test/runtime/samples/event-handler-event-methods/_config.js rename to packages/svelte/test/runtime/samples/event-handler-event-methods/_config.js diff --git a/test/runtime/samples/event-handler-event-methods/main.svelte b/packages/svelte/test/runtime/samples/event-handler-event-methods/main.svelte similarity index 100% rename from test/runtime/samples/event-handler-event-methods/main.svelte rename to packages/svelte/test/runtime/samples/event-handler-event-methods/main.svelte diff --git a/packages/svelte/test/runtime/samples/event-handler-hoisted/_config.js b/packages/svelte/test/runtime/samples/event-handler-hoisted/_config.js new file mode 100644 index 0000000000..6d44f444f1 --- /dev/null +++ b/packages/svelte/test/runtime/samples/event-handler-hoisted/_config.js @@ -0,0 +1,17 @@ +export default { + get props() { + return { foo: [1], a: 42 }; + }, + + html: ` + + `, + + test({ assert, component, target, window }) { + const button = target.querySelector('button'); + const event = new window.MouseEvent('click'); + + button.dispatchEvent(event); + assert.equal(component.snapshot, 42); + } +}; diff --git a/test/runtime/samples/event-handler-hoisted/main.svelte b/packages/svelte/test/runtime/samples/event-handler-hoisted/main.svelte similarity index 100% rename from test/runtime/samples/event-handler-hoisted/main.svelte rename to packages/svelte/test/runtime/samples/event-handler-hoisted/main.svelte diff --git a/test/runtime/samples/event-handler-modifier-body-once/_config.js b/packages/svelte/test/runtime/samples/event-handler-modifier-body-once/_config.js similarity index 100% rename from test/runtime/samples/event-handler-modifier-body-once/_config.js rename to packages/svelte/test/runtime/samples/event-handler-modifier-body-once/_config.js diff --git a/test/runtime/samples/event-handler-modifier-body-once/main.svelte b/packages/svelte/test/runtime/samples/event-handler-modifier-body-once/main.svelte similarity index 100% rename from test/runtime/samples/event-handler-modifier-body-once/main.svelte rename to packages/svelte/test/runtime/samples/event-handler-modifier-body-once/main.svelte diff --git a/test/runtime/samples/event-handler-modifier-once/_config.js b/packages/svelte/test/runtime/samples/event-handler-modifier-once/_config.js similarity index 100% rename from test/runtime/samples/event-handler-modifier-once/_config.js rename to packages/svelte/test/runtime/samples/event-handler-modifier-once/_config.js diff --git a/test/runtime/samples/event-handler-modifier-once/main.svelte b/packages/svelte/test/runtime/samples/event-handler-modifier-once/main.svelte similarity index 100% rename from test/runtime/samples/event-handler-modifier-once/main.svelte rename to packages/svelte/test/runtime/samples/event-handler-modifier-once/main.svelte diff --git a/test/runtime/samples/event-handler-modifier-prevent-default/_config.js b/packages/svelte/test/runtime/samples/event-handler-modifier-prevent-default/_config.js similarity index 100% rename from test/runtime/samples/event-handler-modifier-prevent-default/_config.js rename to packages/svelte/test/runtime/samples/event-handler-modifier-prevent-default/_config.js diff --git a/test/runtime/samples/event-handler-modifier-prevent-default/main.svelte b/packages/svelte/test/runtime/samples/event-handler-modifier-prevent-default/main.svelte similarity index 100% rename from test/runtime/samples/event-handler-modifier-prevent-default/main.svelte rename to packages/svelte/test/runtime/samples/event-handler-modifier-prevent-default/main.svelte diff --git a/test/runtime/samples/event-handler-modifier-self/_config.js b/packages/svelte/test/runtime/samples/event-handler-modifier-self/_config.js similarity index 100% rename from test/runtime/samples/event-handler-modifier-self/_config.js rename to packages/svelte/test/runtime/samples/event-handler-modifier-self/_config.js diff --git a/test/runtime/samples/event-handler-modifier-self/main.svelte b/packages/svelte/test/runtime/samples/event-handler-modifier-self/main.svelte similarity index 100% rename from test/runtime/samples/event-handler-modifier-self/main.svelte rename to packages/svelte/test/runtime/samples/event-handler-modifier-self/main.svelte diff --git a/packages/svelte/test/runtime/samples/event-handler-modifier-stop-immediate-propagation/_config.js b/packages/svelte/test/runtime/samples/event-handler-modifier-stop-immediate-propagation/_config.js new file mode 100644 index 0000000000..23d50e9ee8 --- /dev/null +++ b/packages/svelte/test/runtime/samples/event-handler-modifier-stop-immediate-propagation/_config.js @@ -0,0 +1,17 @@ +export default { + async test({ assert, component, target, window }) { + const button = target.querySelector('button'); + const event = new window.MouseEvent('click'); + + await button.dispatchEvent(event); + assert.deepEqual(component.logs, ['click_1', 'click_2']); + + component.click_2 = () => component.logs.push('22'); + await button.dispatchEvent(event); + assert.deepEqual(component.logs, ['click_1', 'click_2', 'click_1', '22']); + + component.click_1 = () => component.logs.push('11'); + await button.dispatchEvent(event); + assert.deepEqual(component.logs, ['click_1', 'click_2', 'click_1', '22', '11', '22']); + } +}; diff --git a/test/runtime/samples/event-handler-modifier-stop-immediate-propagation/main.svelte b/packages/svelte/test/runtime/samples/event-handler-modifier-stop-immediate-propagation/main.svelte similarity index 100% rename from test/runtime/samples/event-handler-modifier-stop-immediate-propagation/main.svelte rename to packages/svelte/test/runtime/samples/event-handler-modifier-stop-immediate-propagation/main.svelte diff --git a/test/runtime/samples/event-handler-modifier-stop-propagation/_config.js b/packages/svelte/test/runtime/samples/event-handler-modifier-stop-propagation/_config.js similarity index 100% rename from test/runtime/samples/event-handler-modifier-stop-propagation/_config.js rename to packages/svelte/test/runtime/samples/event-handler-modifier-stop-propagation/_config.js diff --git a/test/runtime/samples/event-handler-modifier-stop-propagation/main.svelte b/packages/svelte/test/runtime/samples/event-handler-modifier-stop-propagation/main.svelte similarity index 100% rename from test/runtime/samples/event-handler-modifier-stop-propagation/main.svelte rename to packages/svelte/test/runtime/samples/event-handler-modifier-stop-propagation/main.svelte diff --git a/test/runtime/samples/event-handler-modifier-trusted/_config.js b/packages/svelte/test/runtime/samples/event-handler-modifier-trusted/_config.js similarity index 100% rename from test/runtime/samples/event-handler-modifier-trusted/_config.js rename to packages/svelte/test/runtime/samples/event-handler-modifier-trusted/_config.js diff --git a/test/runtime/samples/event-handler-modifier-trusted/main.svelte b/packages/svelte/test/runtime/samples/event-handler-modifier-trusted/main.svelte similarity index 100% rename from test/runtime/samples/event-handler-modifier-trusted/main.svelte rename to packages/svelte/test/runtime/samples/event-handler-modifier-trusted/main.svelte diff --git a/test/runtime/samples/event-handler-multiple/_config.js b/packages/svelte/test/runtime/samples/event-handler-multiple/_config.js similarity index 100% rename from test/runtime/samples/event-handler-multiple/_config.js rename to packages/svelte/test/runtime/samples/event-handler-multiple/_config.js diff --git a/test/runtime/samples/event-handler-multiple/main.svelte b/packages/svelte/test/runtime/samples/event-handler-multiple/main.svelte similarity index 100% rename from test/runtime/samples/event-handler-multiple/main.svelte rename to packages/svelte/test/runtime/samples/event-handler-multiple/main.svelte diff --git a/test/runtime/samples/event-handler-removal/_config.js b/packages/svelte/test/runtime/samples/event-handler-removal/_config.js similarity index 100% rename from test/runtime/samples/event-handler-removal/_config.js rename to packages/svelte/test/runtime/samples/event-handler-removal/_config.js diff --git a/test/runtime/samples/event-handler-removal/main.svelte b/packages/svelte/test/runtime/samples/event-handler-removal/main.svelte similarity index 100% rename from test/runtime/samples/event-handler-removal/main.svelte rename to packages/svelte/test/runtime/samples/event-handler-removal/main.svelte diff --git a/packages/svelte/test/runtime/samples/event-handler-sanitize/_config.js b/packages/svelte/test/runtime/samples/event-handler-sanitize/_config.js new file mode 100644 index 0000000000..7a750f4b8d --- /dev/null +++ b/packages/svelte/test/runtime/samples/event-handler-sanitize/_config.js @@ -0,0 +1,27 @@ +export default { + html: ` +
toggle
+ `, + + async test({ assert, target, window }) { + const div = target.querySelector('div'); + const event = new window.MouseEvent('some-event'); + + await div.dispatchEvent(event); + assert.htmlEqual( + target.innerHTML, + ` +
toggle
+

hello!

+ ` + ); + + await div.dispatchEvent(event); + assert.htmlEqual( + target.innerHTML, + ` +
toggle
+ ` + ); + } +}; diff --git a/test/runtime/samples/event-handler-sanitize/main.svelte b/packages/svelte/test/runtime/samples/event-handler-sanitize/main.svelte similarity index 100% rename from test/runtime/samples/event-handler-sanitize/main.svelte rename to packages/svelte/test/runtime/samples/event-handler-sanitize/main.svelte diff --git a/test/runtime/samples/event-handler-shorthand-component/Widget.svelte b/packages/svelte/test/runtime/samples/event-handler-shorthand-component/Widget.svelte similarity index 100% rename from test/runtime/samples/event-handler-shorthand-component/Widget.svelte rename to packages/svelte/test/runtime/samples/event-handler-shorthand-component/Widget.svelte diff --git a/packages/svelte/test/runtime/samples/event-handler-shorthand-component/_config.js b/packages/svelte/test/runtime/samples/event-handler-shorthand-component/_config.js new file mode 100644 index 0000000000..4ee17468e6 --- /dev/null +++ b/packages/svelte/test/runtime/samples/event-handler-shorthand-component/_config.js @@ -0,0 +1,18 @@ +export default { + html: ` + + `, + + test({ assert, component, target, window }) { + const button = target.querySelector('button'); + const event = new window.MouseEvent('click'); + + let answer; + component.$on('foo', (event) => { + answer = event.detail.answer; + }); + + button.dispatchEvent(event); + assert.equal(answer, 42); + } +}; diff --git a/test/runtime/samples/event-handler-shorthand-component/main.svelte b/packages/svelte/test/runtime/samples/event-handler-shorthand-component/main.svelte similarity index 100% rename from test/runtime/samples/event-handler-shorthand-component/main.svelte rename to packages/svelte/test/runtime/samples/event-handler-shorthand-component/main.svelte diff --git a/test/runtime/samples/event-handler-shorthand-dynamic-component/Widget.svelte b/packages/svelte/test/runtime/samples/event-handler-shorthand-dynamic-component/Widget.svelte similarity index 100% rename from test/runtime/samples/event-handler-shorthand-dynamic-component/Widget.svelte rename to packages/svelte/test/runtime/samples/event-handler-shorthand-dynamic-component/Widget.svelte diff --git a/packages/svelte/test/runtime/samples/event-handler-shorthand-dynamic-component/_config.js b/packages/svelte/test/runtime/samples/event-handler-shorthand-dynamic-component/_config.js new file mode 100644 index 0000000000..4ee17468e6 --- /dev/null +++ b/packages/svelte/test/runtime/samples/event-handler-shorthand-dynamic-component/_config.js @@ -0,0 +1,18 @@ +export default { + html: ` + + `, + + test({ assert, component, target, window }) { + const button = target.querySelector('button'); + const event = new window.MouseEvent('click'); + + let answer; + component.$on('foo', (event) => { + answer = event.detail.answer; + }); + + button.dispatchEvent(event); + assert.equal(answer, 42); + } +}; diff --git a/test/runtime/samples/event-handler-shorthand-dynamic-component/main.svelte b/packages/svelte/test/runtime/samples/event-handler-shorthand-dynamic-component/main.svelte similarity index 100% rename from test/runtime/samples/event-handler-shorthand-dynamic-component/main.svelte rename to packages/svelte/test/runtime/samples/event-handler-shorthand-dynamic-component/main.svelte diff --git a/test/runtime/samples/event-handler-shorthand-sanitized/_config.js b/packages/svelte/test/runtime/samples/event-handler-shorthand-sanitized/_config.js similarity index 100% rename from test/runtime/samples/event-handler-shorthand-sanitized/_config.js rename to packages/svelte/test/runtime/samples/event-handler-shorthand-sanitized/_config.js diff --git a/test/runtime/samples/event-handler-shorthand-sanitized/main.svelte b/packages/svelte/test/runtime/samples/event-handler-shorthand-sanitized/main.svelte similarity index 100% rename from test/runtime/samples/event-handler-shorthand-sanitized/main.svelte rename to packages/svelte/test/runtime/samples/event-handler-shorthand-sanitized/main.svelte diff --git a/test/runtime/samples/event-handler-this-methods/_config.js b/packages/svelte/test/runtime/samples/event-handler-this-methods/_config.js similarity index 100% rename from test/runtime/samples/event-handler-this-methods/_config.js rename to packages/svelte/test/runtime/samples/event-handler-this-methods/_config.js diff --git a/test/runtime/samples/event-handler-this-methods/main.svelte b/packages/svelte/test/runtime/samples/event-handler-this-methods/main.svelte similarity index 100% rename from test/runtime/samples/event-handler-this-methods/main.svelte rename to packages/svelte/test/runtime/samples/event-handler-this-methods/main.svelte diff --git a/packages/svelte/test/runtime/samples/event-handler/_config.js b/packages/svelte/test/runtime/samples/event-handler/_config.js new file mode 100644 index 0000000000..058a22b1d7 --- /dev/null +++ b/packages/svelte/test/runtime/samples/event-handler/_config.js @@ -0,0 +1,27 @@ +export default { + html: ` + + `, + + async test({ assert, target, window }) { + const button = target.querySelector('button'); + const event = new window.MouseEvent('click'); + + await button.dispatchEvent(event); + assert.htmlEqual( + target.innerHTML, + ` + +

hello!

+ ` + ); + + await button.dispatchEvent(event); + assert.htmlEqual( + target.innerHTML, + ` + + ` + ); + } +}; diff --git a/test/runtime/samples/event-handler/main.svelte b/packages/svelte/test/runtime/samples/event-handler/main.svelte similarity index 100% rename from test/runtime/samples/event-handler/main.svelte rename to packages/svelte/test/runtime/samples/event-handler/main.svelte diff --git a/test/runtime/samples/export-from/A.svelte b/packages/svelte/test/runtime/samples/export-from/A.svelte similarity index 100% rename from test/runtime/samples/export-from/A.svelte rename to packages/svelte/test/runtime/samples/export-from/A.svelte diff --git a/test/runtime/samples/export-from/B.svelte b/packages/svelte/test/runtime/samples/export-from/B.svelte similarity index 100% rename from test/runtime/samples/export-from/B.svelte rename to packages/svelte/test/runtime/samples/export-from/B.svelte diff --git a/test/runtime/samples/export-from/_config.js b/packages/svelte/test/runtime/samples/export-from/_config.js similarity index 100% rename from test/runtime/samples/export-from/_config.js rename to packages/svelte/test/runtime/samples/export-from/_config.js diff --git a/test/runtime/samples/export-from/main.svelte b/packages/svelte/test/runtime/samples/export-from/main.svelte similarity index 100% rename from test/runtime/samples/export-from/main.svelte rename to packages/svelte/test/runtime/samples/export-from/main.svelte diff --git a/test/runtime/samples/export-function-hoisting/_config.js b/packages/svelte/test/runtime/samples/export-function-hoisting/_config.js similarity index 100% rename from test/runtime/samples/export-function-hoisting/_config.js rename to packages/svelte/test/runtime/samples/export-function-hoisting/_config.js diff --git a/test/runtime/samples/export-function-hoisting/main.svelte b/packages/svelte/test/runtime/samples/export-function-hoisting/main.svelte similarity index 100% rename from test/runtime/samples/export-function-hoisting/main.svelte rename to packages/svelte/test/runtime/samples/export-function-hoisting/main.svelte diff --git a/test/runtime/samples/flush-before-bindings/Nested.svelte b/packages/svelte/test/runtime/samples/flush-before-bindings/Nested.svelte similarity index 100% rename from test/runtime/samples/flush-before-bindings/Nested.svelte rename to packages/svelte/test/runtime/samples/flush-before-bindings/Nested.svelte diff --git a/test/runtime/samples/flush-before-bindings/Visibility.svelte b/packages/svelte/test/runtime/samples/flush-before-bindings/Visibility.svelte similarity index 100% rename from test/runtime/samples/flush-before-bindings/Visibility.svelte rename to packages/svelte/test/runtime/samples/flush-before-bindings/Visibility.svelte diff --git a/test/runtime/samples/flush-before-bindings/_config.js b/packages/svelte/test/runtime/samples/flush-before-bindings/_config.js similarity index 100% rename from test/runtime/samples/flush-before-bindings/_config.js rename to packages/svelte/test/runtime/samples/flush-before-bindings/_config.js diff --git a/test/runtime/samples/flush-before-bindings/counter.js b/packages/svelte/test/runtime/samples/flush-before-bindings/counter.js similarity index 100% rename from test/runtime/samples/flush-before-bindings/counter.js rename to packages/svelte/test/runtime/samples/flush-before-bindings/counter.js diff --git a/test/runtime/samples/flush-before-bindings/main.svelte b/packages/svelte/test/runtime/samples/flush-before-bindings/main.svelte similarity index 100% rename from test/runtime/samples/flush-before-bindings/main.svelte rename to packages/svelte/test/runtime/samples/flush-before-bindings/main.svelte diff --git a/packages/svelte/test/runtime/samples/fragment-trailing-whitespace/_config.js b/packages/svelte/test/runtime/samples/fragment-trailing-whitespace/_config.js new file mode 100644 index 0000000000..d2c59af0de --- /dev/null +++ b/packages/svelte/test/runtime/samples/fragment-trailing-whitespace/_config.js @@ -0,0 +1,16 @@ +const message = 'the quick brown fox jumps over the lazy dog'; +const expected = [...message].map((c) => `${c + ' '}`).join(''); + +export default { + get props() { + return { message }; + }, + + async test({ assert, target }) { + const firstSpanList = target.children[0]; + assert.htmlEqualWithOptions(firstSpanList.innerHTML, expected, { withoutNormalizeHtml: true }); + + const secondSpanList = target.children[1]; + assert.htmlEqualWithOptions(secondSpanList.innerHTML, expected, { withoutNormalizeHtml: true }); + } +}; diff --git a/test/runtime/samples/fragment-trailing-whitespace/main.svelte b/packages/svelte/test/runtime/samples/fragment-trailing-whitespace/main.svelte similarity index 100% rename from test/runtime/samples/fragment-trailing-whitespace/main.svelte rename to packages/svelte/test/runtime/samples/fragment-trailing-whitespace/main.svelte diff --git a/packages/svelte/test/runtime/samples/function-expression-inline/_config.js b/packages/svelte/test/runtime/samples/function-expression-inline/_config.js new file mode 100644 index 0000000000..16ef33d02b --- /dev/null +++ b/packages/svelte/test/runtime/samples/function-expression-inline/_config.js @@ -0,0 +1,25 @@ +export default { + html: ` + +

1

+

2

+

3

+ `, + + async test({ assert, target, window }) { + const button = target.querySelector('button'); + const click = new window.MouseEvent('click'); + + await button.dispatchEvent(click); + + assert.htmlEqual( + target.innerHTML, + ` + +

2

+

4

+

6

+ ` + ); + } +}; diff --git a/test/runtime/samples/function-expression-inline/main.svelte b/packages/svelte/test/runtime/samples/function-expression-inline/main.svelte similarity index 100% rename from test/runtime/samples/function-expression-inline/main.svelte rename to packages/svelte/test/runtime/samples/function-expression-inline/main.svelte diff --git a/packages/svelte/test/runtime/samples/function-hoisting/_config.js b/packages/svelte/test/runtime/samples/function-hoisting/_config.js new file mode 100644 index 0000000000..878b01e019 --- /dev/null +++ b/packages/svelte/test/runtime/samples/function-hoisting/_config.js @@ -0,0 +1,7 @@ +export default { + get props() { + return { greeting: 'Good day' }; + }, + + html: '

Good day, world

' +}; diff --git a/test/runtime/samples/function-hoisting/main.svelte b/packages/svelte/test/runtime/samples/function-hoisting/main.svelte similarity index 100% rename from test/runtime/samples/function-hoisting/main.svelte rename to packages/svelte/test/runtime/samples/function-hoisting/main.svelte diff --git a/packages/svelte/test/runtime/samples/function-in-expression/_config.js b/packages/svelte/test/runtime/samples/function-in-expression/_config.js new file mode 100644 index 0000000000..17e009ac4b --- /dev/null +++ b/packages/svelte/test/runtime/samples/function-in-expression/_config.js @@ -0,0 +1,15 @@ +export default { + get props() { + return { + numbers: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] + }; + }, + + html: '1, 3, 5, 7, 9', + + test({ assert, component, target }) { + component.numbers = [10, 11, 12, 13, 14, 15, 16]; + + assert.htmlEqual(target.innerHTML, '11, 13, 15'); + } +}; diff --git a/test/runtime/samples/function-in-expression/main.svelte b/packages/svelte/test/runtime/samples/function-in-expression/main.svelte similarity index 100% rename from test/runtime/samples/function-in-expression/main.svelte rename to packages/svelte/test/runtime/samples/function-in-expression/main.svelte diff --git a/packages/svelte/test/runtime/samples/get-after-destroy/_config.js b/packages/svelte/test/runtime/samples/get-after-destroy/_config.js new file mode 100644 index 0000000000..9b69ff68fc --- /dev/null +++ b/packages/svelte/test/runtime/samples/get-after-destroy/_config.js @@ -0,0 +1,13 @@ +export default { + get props() { + return { foo: 1 }; + }, + + html: '
1
', + + test({ assert, component }) { + component.$destroy(); + const { foo } = component; + assert.equal(foo, undefined); + } +}; diff --git a/test/runtime/samples/get-after-destroy/main.svelte b/packages/svelte/test/runtime/samples/get-after-destroy/main.svelte similarity index 100% rename from test/runtime/samples/get-after-destroy/main.svelte rename to packages/svelte/test/runtime/samples/get-after-destroy/main.svelte diff --git a/test/runtime/samples/globals-accessible-directly-process/_config.js b/packages/svelte/test/runtime/samples/globals-accessible-directly-process/_config.js similarity index 100% rename from test/runtime/samples/globals-accessible-directly-process/_config.js rename to packages/svelte/test/runtime/samples/globals-accessible-directly-process/_config.js diff --git a/test/runtime/samples/globals-accessible-directly-process/main.svelte b/packages/svelte/test/runtime/samples/globals-accessible-directly-process/main.svelte similarity index 100% rename from test/runtime/samples/globals-accessible-directly-process/main.svelte rename to packages/svelte/test/runtime/samples/globals-accessible-directly-process/main.svelte diff --git a/test/runtime/samples/globals-accessible-directly/_config.js b/packages/svelte/test/runtime/samples/globals-accessible-directly/_config.js similarity index 100% rename from test/runtime/samples/globals-accessible-directly/_config.js rename to packages/svelte/test/runtime/samples/globals-accessible-directly/_config.js diff --git a/test/runtime/samples/globals-accessible-directly/main.svelte b/packages/svelte/test/runtime/samples/globals-accessible-directly/main.svelte similarity index 100% rename from test/runtime/samples/globals-accessible-directly/main.svelte rename to packages/svelte/test/runtime/samples/globals-accessible-directly/main.svelte diff --git a/packages/svelte/test/runtime/samples/globals-not-dereferenced/_config.js b/packages/svelte/test/runtime/samples/globals-not-dereferenced/_config.js new file mode 100644 index 0000000000..29434a7a3d --- /dev/null +++ b/packages/svelte/test/runtime/samples/globals-not-dereferenced/_config.js @@ -0,0 +1,12 @@ +export default { + get props() { + return { x: 10 }; + }, + + html: '5', + + test({ assert, component, target }) { + component.x = 3; + assert.htmlEqual(target.innerHTML, '3'); + } +}; diff --git a/test/runtime/samples/globals-not-dereferenced/main.svelte b/packages/svelte/test/runtime/samples/globals-not-dereferenced/main.svelte similarity index 100% rename from test/runtime/samples/globals-not-dereferenced/main.svelte rename to packages/svelte/test/runtime/samples/globals-not-dereferenced/main.svelte diff --git a/packages/svelte/test/runtime/samples/globals-not-overwritten-by-bindings/_config.js b/packages/svelte/test/runtime/samples/globals-not-overwritten-by-bindings/_config.js new file mode 100644 index 0000000000..186f9ef34d --- /dev/null +++ b/packages/svelte/test/runtime/samples/globals-not-overwritten-by-bindings/_config.js @@ -0,0 +1,80 @@ +export default { + html: ` +
+ + +
+ +
+ + +
+ +
+ + +
+ `, + + ssrHtml: ` +
+ + +
+ +
+ + +
+ +
+ + +
+ `, + + get props() { + return { + todos: { + first: { description: 'Buy some milk', done: true }, + second: { + description: 'Do the laundry', + done: true + }, + third: { + description: "Find life's true purpose", + done: false + } + } + }; + }, + + async test({ assert, component, target, window }) { + const input = document.querySelectorAll('input[type="checkbox"]')[2]; + const change = new window.Event('change'); + + input.checked = true; + await input.dispatchEvent(change); + + assert.ok(component.todos.third.done); + assert.htmlEqual( + target.innerHTML, + ` +
+ + +
+ +
+ + +
+ +
+ + +
+ ` + ); + } +}; diff --git a/test/runtime/samples/globals-not-overwritten-by-bindings/main.svelte b/packages/svelte/test/runtime/samples/globals-not-overwritten-by-bindings/main.svelte similarity index 100% rename from test/runtime/samples/globals-not-overwritten-by-bindings/main.svelte rename to packages/svelte/test/runtime/samples/globals-not-overwritten-by-bindings/main.svelte diff --git a/packages/svelte/test/runtime/samples/globals-shadowed-by-data/_config.js b/packages/svelte/test/runtime/samples/globals-shadowed-by-data/_config.js new file mode 100644 index 0000000000..ae772b5c89 --- /dev/null +++ b/packages/svelte/test/runtime/samples/globals-shadowed-by-data/_config.js @@ -0,0 +1,12 @@ +export default { + get props() { + return { x: 10 }; + }, + + html: 'potato', + + test({ assert, component, target }) { + component.x = 3; + assert.htmlEqual(target.innerHTML, 'potato'); + } +}; diff --git a/test/runtime/samples/globals-shadowed-by-data/main.svelte b/packages/svelte/test/runtime/samples/globals-shadowed-by-data/main.svelte similarity index 100% rename from test/runtime/samples/globals-shadowed-by-data/main.svelte rename to packages/svelte/test/runtime/samples/globals-shadowed-by-data/main.svelte diff --git a/test/runtime/samples/globals-shadowed-by-each-binding/_config.js b/packages/svelte/test/runtime/samples/globals-shadowed-by-each-binding/_config.js similarity index 100% rename from test/runtime/samples/globals-shadowed-by-each-binding/_config.js rename to packages/svelte/test/runtime/samples/globals-shadowed-by-each-binding/_config.js diff --git a/test/runtime/samples/globals-shadowed-by-each-binding/main.svelte b/packages/svelte/test/runtime/samples/globals-shadowed-by-each-binding/main.svelte similarity index 100% rename from test/runtime/samples/globals-shadowed-by-each-binding/main.svelte rename to packages/svelte/test/runtime/samples/globals-shadowed-by-each-binding/main.svelte diff --git a/packages/svelte/test/runtime/samples/globals-shadowed-by-helpers/_config.js b/packages/svelte/test/runtime/samples/globals-shadowed-by-helpers/_config.js new file mode 100644 index 0000000000..ae772b5c89 --- /dev/null +++ b/packages/svelte/test/runtime/samples/globals-shadowed-by-helpers/_config.js @@ -0,0 +1,12 @@ +export default { + get props() { + return { x: 10 }; + }, + + html: 'potato', + + test({ assert, component, target }) { + component.x = 3; + assert.htmlEqual(target.innerHTML, 'potato'); + } +}; diff --git a/test/runtime/samples/globals-shadowed-by-helpers/main.svelte b/packages/svelte/test/runtime/samples/globals-shadowed-by-helpers/main.svelte similarity index 100% rename from test/runtime/samples/globals-shadowed-by-helpers/main.svelte rename to packages/svelte/test/runtime/samples/globals-shadowed-by-helpers/main.svelte diff --git a/packages/svelte/test/runtime/samples/hash-in-attribute/_config.js b/packages/svelte/test/runtime/samples/hash-in-attribute/_config.js new file mode 100644 index 0000000000..695a03c157 --- /dev/null +++ b/packages/svelte/test/runtime/samples/hash-in-attribute/_config.js @@ -0,0 +1,34 @@ +export default { + preserveIdentifiers: true, + + get props() { + return { links: ['a', 'b', 'c'] }; + }, + + html: ` + x#a + x#b + x#c + `, + + test({ assert, component, target }) { + component.links = ['d', 'e', 'f']; + + const links = [...target.querySelectorAll('a')]; + + assert.deepEqual( + // Vitest/JSDom does prepend the base URL, so we need to strip it + links.map((l) => l.href.slice(l.href.lastIndexOf('/') + 1)), + ['x#d', 'x#e', 'x#f'] + ); + + assert.htmlEqual( + target.innerHTML, + ` + x#d + x#e + x#f + ` + ); + } +}; diff --git a/test/runtime/samples/hash-in-attribute/main.svelte b/packages/svelte/test/runtime/samples/hash-in-attribute/main.svelte similarity index 100% rename from test/runtime/samples/hash-in-attribute/main.svelte rename to packages/svelte/test/runtime/samples/hash-in-attribute/main.svelte diff --git a/test/runtime/samples/head-detached-in-dynamic-component/A.svelte b/packages/svelte/test/runtime/samples/head-detached-in-dynamic-component/A.svelte similarity index 100% rename from test/runtime/samples/head-detached-in-dynamic-component/A.svelte rename to packages/svelte/test/runtime/samples/head-detached-in-dynamic-component/A.svelte diff --git a/test/runtime/samples/head-detached-in-dynamic-component/B.svelte b/packages/svelte/test/runtime/samples/head-detached-in-dynamic-component/B.svelte similarity index 100% rename from test/runtime/samples/head-detached-in-dynamic-component/B.svelte rename to packages/svelte/test/runtime/samples/head-detached-in-dynamic-component/B.svelte diff --git a/test/runtime/samples/head-detached-in-dynamic-component/_config.js b/packages/svelte/test/runtime/samples/head-detached-in-dynamic-component/_config.js similarity index 100% rename from test/runtime/samples/head-detached-in-dynamic-component/_config.js rename to packages/svelte/test/runtime/samples/head-detached-in-dynamic-component/_config.js diff --git a/test/runtime/samples/head-detached-in-dynamic-component/main.svelte b/packages/svelte/test/runtime/samples/head-detached-in-dynamic-component/main.svelte similarity index 100% rename from test/runtime/samples/head-detached-in-dynamic-component/main.svelte rename to packages/svelte/test/runtime/samples/head-detached-in-dynamic-component/main.svelte diff --git a/packages/svelte/test/runtime/samples/head-if-block/_config.js b/packages/svelte/test/runtime/samples/head-if-block/_config.js new file mode 100644 index 0000000000..d810b9e359 --- /dev/null +++ b/packages/svelte/test/runtime/samples/head-if-block/_config.js @@ -0,0 +1,12 @@ +export default { + get props() { + return { condition: false }; + }, + + test({ assert, component, window }) { + assert.equal(window.document.title, ''); + + component.condition = true; + assert.equal(window.document.title, 'woo!!!'); + } +}; diff --git a/test/runtime/samples/head-if-block/main.svelte b/packages/svelte/test/runtime/samples/head-if-block/main.svelte similarity index 100% rename from test/runtime/samples/head-if-block/main.svelte rename to packages/svelte/test/runtime/samples/head-if-block/main.svelte diff --git a/packages/svelte/test/runtime/samples/head-if-else-block/_config.js b/packages/svelte/test/runtime/samples/head-if-else-block/_config.js new file mode 100644 index 0000000000..3b6285a4d9 --- /dev/null +++ b/packages/svelte/test/runtime/samples/head-if-else-block/_config.js @@ -0,0 +1,14 @@ +export default { + get props() { + return { condition: false }; + }, + + test({ assert, component, window }) { + assert.equal(window.document.title, ''); + assert.equal(Boolean(window.document.getElementById('meta')), true); + + component.condition = true; + assert.equal(window.document.title, 'woo!!!'); + assert.equal(window.document.getElementById('meta'), null); + } +}; diff --git a/test/runtime/samples/head-if-else-block/main.svelte b/packages/svelte/test/runtime/samples/head-if-else-block/main.svelte similarity index 100% rename from test/runtime/samples/head-if-else-block/main.svelte rename to packages/svelte/test/runtime/samples/head-if-else-block/main.svelte diff --git a/packages/svelte/test/runtime/samples/head-if-else-raw-dynamic/_config.js b/packages/svelte/test/runtime/samples/head-if-else-raw-dynamic/_config.js new file mode 100644 index 0000000000..df402624be --- /dev/null +++ b/packages/svelte/test/runtime/samples/head-if-else-raw-dynamic/_config.js @@ -0,0 +1,17 @@ +const foo = ''; +const bar = ''; + +export default { + get props() { + return { condition: false, foo, bar }; + }, + + test({ assert, component, window }) { + assert.equal(window.document.head.innerHTML.includes(foo), false); + assert.equal(window.document.head.innerHTML.includes(bar), true); + + component.condition = true; + assert.equal(window.document.head.innerHTML.includes(foo), true); + assert.equal(window.document.head.innerHTML.includes(bar), false); + } +}; diff --git a/test/runtime/samples/head-if-else-raw-dynamic/main.svelte b/packages/svelte/test/runtime/samples/head-if-else-raw-dynamic/main.svelte similarity index 100% rename from test/runtime/samples/head-if-else-raw-dynamic/main.svelte rename to packages/svelte/test/runtime/samples/head-if-else-raw-dynamic/main.svelte diff --git a/test/runtime/samples/head-raw-dynamic/Bar.svelte b/packages/svelte/test/runtime/samples/head-raw-dynamic/Bar.svelte similarity index 100% rename from test/runtime/samples/head-raw-dynamic/Bar.svelte rename to packages/svelte/test/runtime/samples/head-raw-dynamic/Bar.svelte diff --git a/test/runtime/samples/head-raw-dynamic/Foo.svelte b/packages/svelte/test/runtime/samples/head-raw-dynamic/Foo.svelte similarity index 100% rename from test/runtime/samples/head-raw-dynamic/Foo.svelte rename to packages/svelte/test/runtime/samples/head-raw-dynamic/Foo.svelte diff --git a/packages/svelte/test/runtime/samples/head-raw-dynamic/_config.js b/packages/svelte/test/runtime/samples/head-raw-dynamic/_config.js new file mode 100644 index 0000000000..739c9650d8 --- /dev/null +++ b/packages/svelte/test/runtime/samples/head-raw-dynamic/_config.js @@ -0,0 +1,24 @@ +const foo = ''; +const bar = ''; + +export default { + get props() { + return { condition: 1, foo, bar }; + }, + + test({ assert, component, window }) { + assert.equal(window.document.head.innerHTML.includes(foo), true); + + component.condition = false; + assert.equal(window.document.head.innerHTML.includes(foo), false); + + component.condition = 2; + assert.equal(window.document.title, 'bar!!!'); + assert.equal(window.document.head.innerHTML.includes(bar), true); + assert.equal(Boolean(window.document.getElementById('meta')), true); + + component.condition = false; + assert.equal(window.document.head.innerHTML.includes(bar), false); + assert.equal(window.document.getElementById('meta'), null); + } +}; diff --git a/test/runtime/samples/head-raw-dynamic/main.svelte b/packages/svelte/test/runtime/samples/head-raw-dynamic/main.svelte similarity index 100% rename from test/runtime/samples/head-raw-dynamic/main.svelte rename to packages/svelte/test/runtime/samples/head-raw-dynamic/main.svelte diff --git a/packages/svelte/test/runtime/samples/head-title-dynamic-simple/_config.js b/packages/svelte/test/runtime/samples/head-title-dynamic-simple/_config.js new file mode 100644 index 0000000000..88bed8b65d --- /dev/null +++ b/packages/svelte/test/runtime/samples/head-title-dynamic-simple/_config.js @@ -0,0 +1,12 @@ +export default { + get props() { + return { foo: 'A Title' }; + }, + + test({ assert, component, window }) { + assert.equal(window.document.title, 'A Title'); + + component.foo = 'Also A Title'; + assert.equal(window.document.title, 'Also A Title'); + } +}; diff --git a/test/runtime/samples/head-title-dynamic-simple/main.svelte b/packages/svelte/test/runtime/samples/head-title-dynamic-simple/main.svelte similarity index 100% rename from test/runtime/samples/head-title-dynamic-simple/main.svelte rename to packages/svelte/test/runtime/samples/head-title-dynamic-simple/main.svelte diff --git a/packages/svelte/test/runtime/samples/head-title-dynamic/_config.js b/packages/svelte/test/runtime/samples/head-title-dynamic/_config.js new file mode 100644 index 0000000000..fe16e7ae02 --- /dev/null +++ b/packages/svelte/test/runtime/samples/head-title-dynamic/_config.js @@ -0,0 +1,12 @@ +export default { + get props() { + return { adjective: 'custom' }; + }, + + test({ assert, component, window }) { + assert.equal(window.document.title, 'a custom title'); + + component.adjective = 'different'; + assert.equal(window.document.title, 'a different title'); + } +}; diff --git a/test/runtime/samples/head-title-dynamic/main.svelte b/packages/svelte/test/runtime/samples/head-title-dynamic/main.svelte similarity index 100% rename from test/runtime/samples/head-title-dynamic/main.svelte rename to packages/svelte/test/runtime/samples/head-title-dynamic/main.svelte diff --git a/test/runtime/samples/head-title-empty/_config.js b/packages/svelte/test/runtime/samples/head-title-empty/_config.js similarity index 100% rename from test/runtime/samples/head-title-empty/_config.js rename to packages/svelte/test/runtime/samples/head-title-empty/_config.js diff --git a/test/runtime/samples/head-title-empty/main.svelte b/packages/svelte/test/runtime/samples/head-title-empty/main.svelte similarity index 100% rename from test/runtime/samples/head-title-empty/main.svelte rename to packages/svelte/test/runtime/samples/head-title-empty/main.svelte diff --git a/test/runtime/samples/head-title-static/_config.js b/packages/svelte/test/runtime/samples/head-title-static/_config.js similarity index 100% rename from test/runtime/samples/head-title-static/_config.js rename to packages/svelte/test/runtime/samples/head-title-static/_config.js diff --git a/test/runtime/samples/head-title-static/main.svelte b/packages/svelte/test/runtime/samples/head-title-static/main.svelte similarity index 100% rename from test/runtime/samples/head-title-static/main.svelte rename to packages/svelte/test/runtime/samples/head-title-static/main.svelte diff --git a/packages/svelte/test/runtime/samples/hello-world/_config.js b/packages/svelte/test/runtime/samples/hello-world/_config.js new file mode 100644 index 0000000000..59d39ac863 --- /dev/null +++ b/packages/svelte/test/runtime/samples/hello-world/_config.js @@ -0,0 +1,15 @@ +export default { + get props() { + return { name: 'world' }; + }, + + html: '

Hello world!

', + + test({ assert, component, target }) { + component.name = 'everybody'; + assert.htmlEqual(target.innerHTML, '

Hello everybody!

'); + + component.$destroy(); + assert.htmlEqual(target.innerHTML, ''); + } +}; diff --git a/test/runtime/samples/hello-world/main.svelte b/packages/svelte/test/runtime/samples/hello-world/main.svelte similarity index 100% rename from test/runtime/samples/hello-world/main.svelte rename to packages/svelte/test/runtime/samples/hello-world/main.svelte diff --git a/test/runtime/samples/helpers-not-call-expression/_config.js b/packages/svelte/test/runtime/samples/helpers-not-call-expression/_config.js similarity index 100% rename from test/runtime/samples/helpers-not-call-expression/_config.js rename to packages/svelte/test/runtime/samples/helpers-not-call-expression/_config.js diff --git a/test/runtime/samples/helpers-not-call-expression/main.svelte b/packages/svelte/test/runtime/samples/helpers-not-call-expression/main.svelte similarity index 100% rename from test/runtime/samples/helpers-not-call-expression/main.svelte rename to packages/svelte/test/runtime/samples/helpers-not-call-expression/main.svelte diff --git a/test/runtime/samples/helpers/_config.js b/packages/svelte/test/runtime/samples/helpers/_config.js similarity index 100% rename from test/runtime/samples/helpers/_config.js rename to packages/svelte/test/runtime/samples/helpers/_config.js diff --git a/test/runtime/samples/helpers/main.svelte b/packages/svelte/test/runtime/samples/helpers/main.svelte similarity index 100% rename from test/runtime/samples/helpers/main.svelte rename to packages/svelte/test/runtime/samples/helpers/main.svelte diff --git a/test/runtime/samples/html-entities-inside-attributes/_config.js b/packages/svelte/test/runtime/samples/html-entities-inside-attributes/_config.js similarity index 100% rename from test/runtime/samples/html-entities-inside-attributes/_config.js rename to packages/svelte/test/runtime/samples/html-entities-inside-attributes/_config.js diff --git a/test/runtime/samples/html-entities-inside-attributes/main.svelte b/packages/svelte/test/runtime/samples/html-entities-inside-attributes/main.svelte similarity index 100% rename from test/runtime/samples/html-entities-inside-attributes/main.svelte rename to packages/svelte/test/runtime/samples/html-entities-inside-attributes/main.svelte diff --git a/packages/svelte/test/runtime/samples/html-entities-inside-component-slot/Component.svelte b/packages/svelte/test/runtime/samples/html-entities-inside-component-slot/Component.svelte new file mode 100644 index 0000000000..8063609738 --- /dev/null +++ b/packages/svelte/test/runtime/samples/html-entities-inside-component-slot/Component.svelte @@ -0,0 +1,3 @@ +
+ +
diff --git a/packages/svelte/test/runtime/samples/html-entities-inside-component-slot/_config.js b/packages/svelte/test/runtime/samples/html-entities-inside-component-slot/_config.js new file mode 100644 index 0000000000..33777a4919 --- /dev/null +++ b/packages/svelte/test/runtime/samples/html-entities-inside-component-slot/_config.js @@ -0,0 +1,11 @@ +export default { + html: ` +
 
+ +
+   +
+ +
 
+ ` +}; diff --git a/packages/svelte/test/runtime/samples/html-entities-inside-component-slot/main.svelte b/packages/svelte/test/runtime/samples/html-entities-inside-component-slot/main.svelte new file mode 100644 index 0000000000..8baecfedcc --- /dev/null +++ b/packages/svelte/test/runtime/samples/html-entities-inside-component-slot/main.svelte @@ -0,0 +1,13 @@ + + +  + + +   + + + + {@html " "} + diff --git a/test/runtime/samples/html-entities-inside-elements/_config.js b/packages/svelte/test/runtime/samples/html-entities-inside-elements/_config.js similarity index 100% rename from test/runtime/samples/html-entities-inside-elements/_config.js rename to packages/svelte/test/runtime/samples/html-entities-inside-elements/_config.js diff --git a/test/runtime/samples/html-entities-inside-elements/main.svelte b/packages/svelte/test/runtime/samples/html-entities-inside-elements/main.svelte similarity index 100% rename from test/runtime/samples/html-entities-inside-elements/main.svelte rename to packages/svelte/test/runtime/samples/html-entities-inside-elements/main.svelte diff --git a/test/runtime/samples/html-entities/_config.js b/packages/svelte/test/runtime/samples/html-entities/_config.js similarity index 100% rename from test/runtime/samples/html-entities/_config.js rename to packages/svelte/test/runtime/samples/html-entities/_config.js diff --git a/test/runtime/samples/html-entities/main.svelte b/packages/svelte/test/runtime/samples/html-entities/main.svelte similarity index 100% rename from test/runtime/samples/html-entities/main.svelte rename to packages/svelte/test/runtime/samples/html-entities/main.svelte diff --git a/test/runtime/samples/html-non-entities-inside-elements/_config.js b/packages/svelte/test/runtime/samples/html-non-entities-inside-elements/_config.js similarity index 100% rename from test/runtime/samples/html-non-entities-inside-elements/_config.js rename to packages/svelte/test/runtime/samples/html-non-entities-inside-elements/_config.js diff --git a/test/runtime/samples/html-non-entities-inside-elements/main.svelte b/packages/svelte/test/runtime/samples/html-non-entities-inside-elements/main.svelte similarity index 100% rename from test/runtime/samples/html-non-entities-inside-elements/main.svelte rename to packages/svelte/test/runtime/samples/html-non-entities-inside-elements/main.svelte diff --git a/test/runtime/samples/if-block-component-store-function-conditionals/Widget.svelte b/packages/svelte/test/runtime/samples/if-block-component-store-function-conditionals/Widget.svelte similarity index 100% rename from test/runtime/samples/if-block-component-store-function-conditionals/Widget.svelte rename to packages/svelte/test/runtime/samples/if-block-component-store-function-conditionals/Widget.svelte diff --git a/test/runtime/samples/if-block-component-store-function-conditionals/_config.js b/packages/svelte/test/runtime/samples/if-block-component-store-function-conditionals/_config.js similarity index 100% rename from test/runtime/samples/if-block-component-store-function-conditionals/_config.js rename to packages/svelte/test/runtime/samples/if-block-component-store-function-conditionals/_config.js diff --git a/test/runtime/samples/if-block-component-store-function-conditionals/main.svelte b/packages/svelte/test/runtime/samples/if-block-component-store-function-conditionals/main.svelte similarity index 100% rename from test/runtime/samples/if-block-component-store-function-conditionals/main.svelte rename to packages/svelte/test/runtime/samples/if-block-component-store-function-conditionals/main.svelte diff --git a/test/runtime/samples/if-block-component-without-outro/Widget.svelte b/packages/svelte/test/runtime/samples/if-block-component-without-outro/Widget.svelte similarity index 100% rename from test/runtime/samples/if-block-component-without-outro/Widget.svelte rename to packages/svelte/test/runtime/samples/if-block-component-without-outro/Widget.svelte diff --git a/packages/svelte/test/runtime/samples/if-block-component-without-outro/_config.js b/packages/svelte/test/runtime/samples/if-block-component-without-outro/_config.js new file mode 100644 index 0000000000..ac8abdfba9 --- /dev/null +++ b/packages/svelte/test/runtime/samples/if-block-component-without-outro/_config.js @@ -0,0 +1,12 @@ +export default { + get props() { + return { foo: true }; + }, + + html: '
A wild component appears
', + + test({ assert, component, target }) { + component.foo = false; + assert.htmlEqual(target.innerHTML, ''); + } +}; diff --git a/test/runtime/samples/if-block-component-without-outro/main.svelte b/packages/svelte/test/runtime/samples/if-block-component-without-outro/main.svelte similarity index 100% rename from test/runtime/samples/if-block-component-without-outro/main.svelte rename to packages/svelte/test/runtime/samples/if-block-component-without-outro/main.svelte diff --git a/test/runtime/samples/if-block-compound-outro-no-dependencies/_config.js b/packages/svelte/test/runtime/samples/if-block-compound-outro-no-dependencies/_config.js similarity index 100% rename from test/runtime/samples/if-block-compound-outro-no-dependencies/_config.js rename to packages/svelte/test/runtime/samples/if-block-compound-outro-no-dependencies/_config.js diff --git a/test/runtime/samples/if-block-compound-outro-no-dependencies/main.svelte b/packages/svelte/test/runtime/samples/if-block-compound-outro-no-dependencies/main.svelte similarity index 100% rename from test/runtime/samples/if-block-compound-outro-no-dependencies/main.svelte rename to packages/svelte/test/runtime/samples/if-block-compound-outro-no-dependencies/main.svelte diff --git a/packages/svelte/test/runtime/samples/if-block-conservative-update/_config.js b/packages/svelte/test/runtime/samples/if-block-conservative-update/_config.js new file mode 100644 index 0000000000..ca51c1bb6c --- /dev/null +++ b/packages/svelte/test/runtime/samples/if-block-conservative-update/_config.js @@ -0,0 +1,27 @@ +let count = 0; + +export default { + get props() { + return { + foo: 'potato', + fn: () => { + count += 1; + return true; + } + }; + }, + + html: '

potato

', + + before_test() { + count = 0; + }, + test({ assert, component, target }) { + assert.equal(count, 1); + + component.foo = 'soup'; + assert.equal(count, 1); + + assert.htmlEqual(target.innerHTML, '

soup

'); + } +}; diff --git a/test/runtime/samples/if-block-conservative-update/main.svelte b/packages/svelte/test/runtime/samples/if-block-conservative-update/main.svelte similarity index 100% rename from test/runtime/samples/if-block-conservative-update/main.svelte rename to packages/svelte/test/runtime/samples/if-block-conservative-update/main.svelte diff --git a/packages/svelte/test/runtime/samples/if-block-else-conservative-update/_config.js b/packages/svelte/test/runtime/samples/if-block-else-conservative-update/_config.js new file mode 100644 index 0000000000..d32a336790 --- /dev/null +++ b/packages/svelte/test/runtime/samples/if-block-else-conservative-update/_config.js @@ -0,0 +1,45 @@ +let a = true; +let count_a = 0; +let count_b = 0; + +export default { + get props() { + return { + foo: 'potato', + fn: () => { + count_a += 1; + return a; + }, + other_fn: () => { + count_b += 1; + return true; + } + }; + }, + + html: '

potato

', + + before_test() { + a = true; + count_a = 0; + count_b = 0; + }, + + test({ assert, component, target }) { + assert.equal(count_a, 1); + assert.equal(count_b, 0); + + a = false; + component.foo = 'soup'; + assert.equal(count_a, 2); + assert.equal(count_b, 1); + + assert.htmlEqual(target.innerHTML, '

SOUP

'); + + component.foo = 'salad'; + assert.equal(count_a, 3); + assert.equal(count_b, 1); + + assert.htmlEqual(target.innerHTML, '

SALAD

'); + } +}; diff --git a/test/runtime/samples/if-block-else-conservative-update/main.svelte b/packages/svelte/test/runtime/samples/if-block-else-conservative-update/main.svelte similarity index 100% rename from test/runtime/samples/if-block-else-conservative-update/main.svelte rename to packages/svelte/test/runtime/samples/if-block-else-conservative-update/main.svelte diff --git a/packages/svelte/test/runtime/samples/if-block-else-in-each/_config.js b/packages/svelte/test/runtime/samples/if-block-else-in-each/_config.js new file mode 100644 index 0000000000..d8e5528fe6 --- /dev/null +++ b/packages/svelte/test/runtime/samples/if-block-else-in-each/_config.js @@ -0,0 +1,9 @@ +export default { + get props() { + return { array: [true, false] }; + }, + html: ` +
foo
+
bar
+ ` +}; diff --git a/test/runtime/samples/if-block-else-in-each/main.svelte b/packages/svelte/test/runtime/samples/if-block-else-in-each/main.svelte similarity index 100% rename from test/runtime/samples/if-block-else-in-each/main.svelte rename to packages/svelte/test/runtime/samples/if-block-else-in-each/main.svelte diff --git a/test/runtime/samples/if-block-else-partial-outro/Foo.svelte b/packages/svelte/test/runtime/samples/if-block-else-partial-outro/Foo.svelte similarity index 100% rename from test/runtime/samples/if-block-else-partial-outro/Foo.svelte rename to packages/svelte/test/runtime/samples/if-block-else-partial-outro/Foo.svelte diff --git a/packages/svelte/test/runtime/samples/if-block-else-partial-outro/_config.js b/packages/svelte/test/runtime/samples/if-block-else-partial-outro/_config.js new file mode 100644 index 0000000000..ec02f08e46 --- /dev/null +++ b/packages/svelte/test/runtime/samples/if-block-else-partial-outro/_config.js @@ -0,0 +1,19 @@ +export default { + get props() { + return { x: 1, y: false }; + }, + + html: ` + 1 + `, + + test({ assert, component, target }) { + component.x = 2; + assert.htmlEqual( + target.innerHTML, + ` + 2 + ` + ); + } +}; diff --git a/test/runtime/samples/if-block-else-partial-outro/main.svelte b/packages/svelte/test/runtime/samples/if-block-else-partial-outro/main.svelte similarity index 100% rename from test/runtime/samples/if-block-else-partial-outro/main.svelte rename to packages/svelte/test/runtime/samples/if-block-else-partial-outro/main.svelte diff --git a/packages/svelte/test/runtime/samples/if-block-else-update/_config.js b/packages/svelte/test/runtime/samples/if-block-else-update/_config.js new file mode 100644 index 0000000000..3ba36906ad --- /dev/null +++ b/packages/svelte/test/runtime/samples/if-block-else-update/_config.js @@ -0,0 +1,58 @@ +export default { + async test({ assert, target, window }) { + const [btn1, btn2] = target.querySelectorAll('button'); + + const clickEvent = new window.MouseEvent('click'); + + await btn2.dispatchEvent(clickEvent); + assert.htmlEqual( + target.innerHTML, + ` + + +
+ foo: false, bar: true +
+ bar! + ` + ); + + await btn1.dispatchEvent(clickEvent); + assert.htmlEqual( + target.innerHTML, + ` + + +
+ foo: true, bar: true +
+ foo! + ` + ); + + await btn2.dispatchEvent(clickEvent); + assert.htmlEqual( + target.innerHTML, + ` + + +
+ foo: true, bar: false +
+ foo! + ` + ); + + await btn1.dispatchEvent(clickEvent); + assert.htmlEqual( + target.innerHTML, + ` + + +
+ foo: false, bar: false +
+ ` + ); + } +}; diff --git a/test/runtime/samples/if-block-else-update/main.svelte b/packages/svelte/test/runtime/samples/if-block-else-update/main.svelte similarity index 100% rename from test/runtime/samples/if-block-else-update/main.svelte rename to packages/svelte/test/runtime/samples/if-block-else-update/main.svelte diff --git a/packages/svelte/test/runtime/samples/if-block-else/_config.js b/packages/svelte/test/runtime/samples/if-block-else/_config.js new file mode 100644 index 0000000000..56cd41f420 --- /dev/null +++ b/packages/svelte/test/runtime/samples/if-block-else/_config.js @@ -0,0 +1,39 @@ +export default { + get props() { + return { foo: true, bar: false }; + }, + + html: ` +

foo

+

not bar

+ `, + + test({ assert, component, target }) { + component.foo = false; + assert.htmlEqual( + target.innerHTML, + ` +

not foo

+

not bar

+ ` + ); + + component.bar = true; + assert.htmlEqual( + target.innerHTML, + ` +

not foo

+

bar

+ ` + ); + + component.foo = true; + assert.htmlEqual( + target.innerHTML, + ` +

foo

+

bar

+ ` + ); + } +}; diff --git a/test/runtime/samples/if-block-else/main.svelte b/packages/svelte/test/runtime/samples/if-block-else/main.svelte similarity index 100% rename from test/runtime/samples/if-block-else/main.svelte rename to packages/svelte/test/runtime/samples/if-block-else/main.svelte diff --git a/packages/svelte/test/runtime/samples/if-block-elseif-no-else/_config.js b/packages/svelte/test/runtime/samples/if-block-elseif-no-else/_config.js new file mode 100644 index 0000000000..50bead7353 --- /dev/null +++ b/packages/svelte/test/runtime/samples/if-block-elseif-no-else/_config.js @@ -0,0 +1,22 @@ +export default { + get props() { + return { x: 11 }; + }, + + html: ` +

x is greater than 10

+ `, + + test({ assert, component, target }) { + component.x = 4; + assert.htmlEqual( + target.innerHTML, + ` +

x is less than 5

+ ` + ); + + component.x = 6; + assert.htmlEqual(target.innerHTML, ''); + } +}; diff --git a/test/runtime/samples/if-block-elseif-no-else/main.svelte b/packages/svelte/test/runtime/samples/if-block-elseif-no-else/main.svelte similarity index 100% rename from test/runtime/samples/if-block-elseif-no-else/main.svelte rename to packages/svelte/test/runtime/samples/if-block-elseif-no-else/main.svelte diff --git a/packages/svelte/test/runtime/samples/if-block-elseif-text/_config.js b/packages/svelte/test/runtime/samples/if-block-elseif-text/_config.js new file mode 100644 index 0000000000..0933a761c9 --- /dev/null +++ b/packages/svelte/test/runtime/samples/if-block-elseif-text/_config.js @@ -0,0 +1,27 @@ +export default { + get props() { + return { x: 11 }; + }, + + html: ` + before-if-after + `, + + test({ assert, component, target }) { + component.x = 4; + assert.htmlEqual( + target.innerHTML, + ` + before-elseif-after + ` + ); + + component.x = 6; + assert.htmlEqual( + target.innerHTML, + ` + before-else-after + ` + ); + } +}; diff --git a/test/runtime/samples/if-block-elseif-text/main.svelte b/packages/svelte/test/runtime/samples/if-block-elseif-text/main.svelte similarity index 100% rename from test/runtime/samples/if-block-elseif-text/main.svelte rename to packages/svelte/test/runtime/samples/if-block-elseif-text/main.svelte diff --git a/packages/svelte/test/runtime/samples/if-block-elseif/_config.js b/packages/svelte/test/runtime/samples/if-block-elseif/_config.js new file mode 100644 index 0000000000..53a459fd47 --- /dev/null +++ b/packages/svelte/test/runtime/samples/if-block-elseif/_config.js @@ -0,0 +1,27 @@ +export default { + get props() { + return { x: 11 }; + }, + + html: ` +

x is greater than 10

+ `, + + test({ assert, component, target }) { + component.x = 4; + assert.htmlEqual( + target.innerHTML, + ` +

x is less than 5

+ ` + ); + + component.x = 6; + assert.htmlEqual( + target.innerHTML, + ` +

x is between 5 and 10

+ ` + ); + } +}; diff --git a/test/runtime/samples/if-block-elseif/main.svelte b/packages/svelte/test/runtime/samples/if-block-elseif/main.svelte similarity index 100% rename from test/runtime/samples/if-block-elseif/main.svelte rename to packages/svelte/test/runtime/samples/if-block-elseif/main.svelte diff --git a/test/runtime/samples/if-block-expression/_config.js b/packages/svelte/test/runtime/samples/if-block-expression/_config.js similarity index 100% rename from test/runtime/samples/if-block-expression/_config.js rename to packages/svelte/test/runtime/samples/if-block-expression/_config.js diff --git a/test/runtime/samples/if-block-expression/main.svelte b/packages/svelte/test/runtime/samples/if-block-expression/main.svelte similarity index 100% rename from test/runtime/samples/if-block-expression/main.svelte rename to packages/svelte/test/runtime/samples/if-block-expression/main.svelte diff --git a/packages/svelte/test/runtime/samples/if-block-first/_config.js b/packages/svelte/test/runtime/samples/if-block-first/_config.js new file mode 100644 index 0000000000..ff90ed44f1 --- /dev/null +++ b/packages/svelte/test/runtime/samples/if-block-first/_config.js @@ -0,0 +1,12 @@ +export default { + get props() { + return { visible: false }; + }, + + html: '
before me
', + + test({ assert, component, target }) { + component.visible = true; + assert.htmlEqual(target.innerHTML, '
i am visible
before me
'); + } +}; diff --git a/test/runtime/samples/if-block-first/main.svelte b/packages/svelte/test/runtime/samples/if-block-first/main.svelte similarity index 100% rename from test/runtime/samples/if-block-first/main.svelte rename to packages/svelte/test/runtime/samples/if-block-first/main.svelte diff --git a/test/runtime/samples/if-block-no-outro-else-with-outro/Widget.svelte b/packages/svelte/test/runtime/samples/if-block-no-outro-else-with-outro/Widget.svelte similarity index 100% rename from test/runtime/samples/if-block-no-outro-else-with-outro/Widget.svelte rename to packages/svelte/test/runtime/samples/if-block-no-outro-else-with-outro/Widget.svelte diff --git a/packages/svelte/test/runtime/samples/if-block-no-outro-else-with-outro/_config.js b/packages/svelte/test/runtime/samples/if-block-no-outro-else-with-outro/_config.js new file mode 100644 index 0000000000..5149fe9ee5 --- /dev/null +++ b/packages/svelte/test/runtime/samples/if-block-no-outro-else-with-outro/_config.js @@ -0,0 +1,25 @@ +export default { + html: ` +
A wild component appears
+

x

+ + `, + + ssrHtml: ` +
A wild component appears
+

x

+ + `, + + test({ assert, component, target }) { + component.x = 'y'; + assert.htmlEqual( + target.innerHTML, + ` +
A wild component appears
+

y

+ + ` + ); + } +}; diff --git a/test/runtime/samples/if-block-no-outro-else-with-outro/main.svelte b/packages/svelte/test/runtime/samples/if-block-no-outro-else-with-outro/main.svelte similarity index 100% rename from test/runtime/samples/if-block-no-outro-else-with-outro/main.svelte rename to packages/svelte/test/runtime/samples/if-block-no-outro-else-with-outro/main.svelte diff --git a/packages/svelte/test/runtime/samples/if-block-or/_config.js b/packages/svelte/test/runtime/samples/if-block-or/_config.js new file mode 100644 index 0000000000..e51daa7561 --- /dev/null +++ b/packages/svelte/test/runtime/samples/if-block-or/_config.js @@ -0,0 +1,14 @@ +export default { + get props() { + return { a: true, b: false }; + }, + + html: '

i am visible

', + + test({ assert, component, target }) { + component.a = false; + assert.htmlEqual(target.innerHTML, ''); + component.b = true; + assert.htmlEqual(target.innerHTML, '

i am visible

'); + } +}; diff --git a/test/runtime/samples/if-block-or/main.svelte b/packages/svelte/test/runtime/samples/if-block-or/main.svelte similarity index 100% rename from test/runtime/samples/if-block-or/main.svelte rename to packages/svelte/test/runtime/samples/if-block-or/main.svelte diff --git a/test/runtime/samples/if-block-outro-computed-function/Foo.svelte b/packages/svelte/test/runtime/samples/if-block-outro-computed-function/Foo.svelte similarity index 100% rename from test/runtime/samples/if-block-outro-computed-function/Foo.svelte rename to packages/svelte/test/runtime/samples/if-block-outro-computed-function/Foo.svelte diff --git a/packages/svelte/test/runtime/samples/if-block-outro-computed-function/_config.js b/packages/svelte/test/runtime/samples/if-block-outro-computed-function/_config.js new file mode 100644 index 0000000000..d638dedd4b --- /dev/null +++ b/packages/svelte/test/runtime/samples/if-block-outro-computed-function/_config.js @@ -0,0 +1,12 @@ +export default { + get props() { + return { foo: true }; + }, + + html: 'foo', + + test({ assert, component, target }) { + component.foo = false; + assert.htmlEqual(target.innerHTML, 'bar'); + } +}; diff --git a/test/runtime/samples/if-block-outro-computed-function/main.svelte b/packages/svelte/test/runtime/samples/if-block-outro-computed-function/main.svelte similarity index 100% rename from test/runtime/samples/if-block-outro-computed-function/main.svelte rename to packages/svelte/test/runtime/samples/if-block-outro-computed-function/main.svelte diff --git a/test/runtime/samples/if-block-outro-nested-else/Component.svelte b/packages/svelte/test/runtime/samples/if-block-outro-nested-else/Component.svelte similarity index 100% rename from test/runtime/samples/if-block-outro-nested-else/Component.svelte rename to packages/svelte/test/runtime/samples/if-block-outro-nested-else/Component.svelte diff --git a/test/runtime/samples/if-block-outro-nested-else/_config.js b/packages/svelte/test/runtime/samples/if-block-outro-nested-else/_config.js similarity index 100% rename from test/runtime/samples/if-block-outro-nested-else/_config.js rename to packages/svelte/test/runtime/samples/if-block-outro-nested-else/_config.js diff --git a/test/runtime/samples/if-block-outro-nested-else/main.svelte b/packages/svelte/test/runtime/samples/if-block-outro-nested-else/main.svelte similarity index 100% rename from test/runtime/samples/if-block-outro-nested-else/main.svelte rename to packages/svelte/test/runtime/samples/if-block-outro-nested-else/main.svelte diff --git a/test/server-side-rendering/samples/static-div/_expected.html b/packages/svelte/test/runtime/samples/if-block-outro-unique-select-block-type/Component.svelte similarity index 100% rename from test/server-side-rendering/samples/static-div/_expected.html rename to packages/svelte/test/runtime/samples/if-block-outro-unique-select-block-type/Component.svelte diff --git a/test/runtime/samples/if-block-outro-unique-select-block-type/_config.js b/packages/svelte/test/runtime/samples/if-block-outro-unique-select-block-type/_config.js similarity index 100% rename from test/runtime/samples/if-block-outro-unique-select-block-type/_config.js rename to packages/svelte/test/runtime/samples/if-block-outro-unique-select-block-type/_config.js diff --git a/test/runtime/samples/if-block-outro-unique-select-block-type/main.svelte b/packages/svelte/test/runtime/samples/if-block-outro-unique-select-block-type/main.svelte similarity index 100% rename from test/runtime/samples/if-block-outro-unique-select-block-type/main.svelte rename to packages/svelte/test/runtime/samples/if-block-outro-unique-select-block-type/main.svelte diff --git a/packages/svelte/test/runtime/samples/if-block-static-with-dynamic-contents/_config.js b/packages/svelte/test/runtime/samples/if-block-static-with-dynamic-contents/_config.js new file mode 100644 index 0000000000..082a3613e4 --- /dev/null +++ b/packages/svelte/test/runtime/samples/if-block-static-with-dynamic-contents/_config.js @@ -0,0 +1,12 @@ +export default { + get props() { + return { foo: 42 }; + }, + + html: '

42

', + + test({ assert, component, target }) { + component.foo = 43; + assert.htmlEqual(target.innerHTML, '

43

'); + } +}; diff --git a/test/runtime/samples/if-block-static-with-dynamic-contents/main.svelte b/packages/svelte/test/runtime/samples/if-block-static-with-dynamic-contents/main.svelte similarity index 100% rename from test/runtime/samples/if-block-static-with-dynamic-contents/main.svelte rename to packages/svelte/test/runtime/samples/if-block-static-with-dynamic-contents/main.svelte diff --git a/test/runtime/samples/if-block-static-with-else-and-outros/EEE.svelte b/packages/svelte/test/runtime/samples/if-block-static-with-else-and-outros/EEE.svelte similarity index 100% rename from test/runtime/samples/if-block-static-with-else-and-outros/EEE.svelte rename to packages/svelte/test/runtime/samples/if-block-static-with-else-and-outros/EEE.svelte diff --git a/test/runtime/samples/if-block-static-with-else-and-outros/RRR.svelte b/packages/svelte/test/runtime/samples/if-block-static-with-else-and-outros/RRR.svelte similarity index 100% rename from test/runtime/samples/if-block-static-with-else-and-outros/RRR.svelte rename to packages/svelte/test/runtime/samples/if-block-static-with-else-and-outros/RRR.svelte diff --git a/test/runtime/samples/if-block-static-with-else-and-outros/_config.js b/packages/svelte/test/runtime/samples/if-block-static-with-else-and-outros/_config.js similarity index 100% rename from test/runtime/samples/if-block-static-with-else-and-outros/_config.js rename to packages/svelte/test/runtime/samples/if-block-static-with-else-and-outros/_config.js diff --git a/test/runtime/samples/if-block-static-with-else-and-outros/main.svelte b/packages/svelte/test/runtime/samples/if-block-static-with-else-and-outros/main.svelte similarity index 100% rename from test/runtime/samples/if-block-static-with-else-and-outros/main.svelte rename to packages/svelte/test/runtime/samples/if-block-static-with-else-and-outros/main.svelte diff --git a/test/runtime/samples/if-block-static-with-else/_config.js b/packages/svelte/test/runtime/samples/if-block-static-with-else/_config.js similarity index 100% rename from test/runtime/samples/if-block-static-with-else/_config.js rename to packages/svelte/test/runtime/samples/if-block-static-with-else/_config.js diff --git a/test/runtime/samples/if-block-static-with-else/main.svelte b/packages/svelte/test/runtime/samples/if-block-static-with-else/main.svelte similarity index 100% rename from test/runtime/samples/if-block-static-with-else/main.svelte rename to packages/svelte/test/runtime/samples/if-block-static-with-else/main.svelte diff --git a/test/runtime/samples/if-block-static-with-elseif-else-and-outros/RRR.svelte b/packages/svelte/test/runtime/samples/if-block-static-with-elseif-else-and-outros/RRR.svelte similarity index 100% rename from test/runtime/samples/if-block-static-with-elseif-else-and-outros/RRR.svelte rename to packages/svelte/test/runtime/samples/if-block-static-with-elseif-else-and-outros/RRR.svelte diff --git a/test/runtime/samples/if-block-static-with-elseif-else-and-outros/_config.js b/packages/svelte/test/runtime/samples/if-block-static-with-elseif-else-and-outros/_config.js similarity index 100% rename from test/runtime/samples/if-block-static-with-elseif-else-and-outros/_config.js rename to packages/svelte/test/runtime/samples/if-block-static-with-elseif-else-and-outros/_config.js diff --git a/test/runtime/samples/if-block-static-with-elseif-else-and-outros/main.svelte b/packages/svelte/test/runtime/samples/if-block-static-with-elseif-else-and-outros/main.svelte similarity index 100% rename from test/runtime/samples/if-block-static-with-elseif-else-and-outros/main.svelte rename to packages/svelte/test/runtime/samples/if-block-static-with-elseif-else-and-outros/main.svelte diff --git a/test/runtime/samples/if-block-widget/Widget.svelte b/packages/svelte/test/runtime/samples/if-block-widget/Widget.svelte similarity index 100% rename from test/runtime/samples/if-block-widget/Widget.svelte rename to packages/svelte/test/runtime/samples/if-block-widget/Widget.svelte diff --git a/packages/svelte/test/runtime/samples/if-block-widget/_config.js b/packages/svelte/test/runtime/samples/if-block-widget/_config.js new file mode 100644 index 0000000000..39a65d3b22 --- /dev/null +++ b/packages/svelte/test/runtime/samples/if-block-widget/_config.js @@ -0,0 +1,33 @@ +export default { + get props() { + return { visible: true }; + }, + + html: ` + before +

Widget

+ after + `, + + test({ assert, component, target }) { + component.visible = false; + assert.htmlEqual( + target.innerHTML, + ` + before + + after + ` + ); + + component.visible = true; + assert.htmlEqual( + target.innerHTML, + ` + before +

Widget

+ after + ` + ); + } +}; diff --git a/test/runtime/samples/if-block-widget/main.svelte b/packages/svelte/test/runtime/samples/if-block-widget/main.svelte similarity index 100% rename from test/runtime/samples/if-block-widget/main.svelte rename to packages/svelte/test/runtime/samples/if-block-widget/main.svelte diff --git a/packages/svelte/test/runtime/samples/if-block/_config.js b/packages/svelte/test/runtime/samples/if-block/_config.js new file mode 100644 index 0000000000..322b0c6d31 --- /dev/null +++ b/packages/svelte/test/runtime/samples/if-block/_config.js @@ -0,0 +1,14 @@ +export default { + get props() { + return { visible: true }; + }, + + html: '

i am visible

', + + test({ assert, component, target }) { + component.visible = false; + assert.htmlEqual(target.innerHTML, ''); + component.visible = true; + assert.htmlEqual(target.innerHTML, '

i am visible

'); + } +}; diff --git a/test/runtime/samples/if-block/main.svelte b/packages/svelte/test/runtime/samples/if-block/main.svelte similarity index 100% rename from test/runtime/samples/if-block/main.svelte rename to packages/svelte/test/runtime/samples/if-block/main.svelte diff --git a/packages/svelte/test/runtime/samples/if-in-keyed-each/_config.js b/packages/svelte/test/runtime/samples/if-in-keyed-each/_config.js new file mode 100644 index 0000000000..3188e724ee --- /dev/null +++ b/packages/svelte/test/runtime/samples/if-in-keyed-each/_config.js @@ -0,0 +1,17 @@ +export default { + get props() { + return { + items: [ + { id: 1, name: 'one' }, + { id: 2, name: 'two' } + ] + }; + }, + + html: ` +
    +
  • one
  • +
  • two
  • +
+ ` +}; diff --git a/test/runtime/samples/if-in-keyed-each/main.svelte b/packages/svelte/test/runtime/samples/if-in-keyed-each/main.svelte similarity index 100% rename from test/runtime/samples/if-in-keyed-each/main.svelte rename to packages/svelte/test/runtime/samples/if-in-keyed-each/main.svelte diff --git a/packages/svelte/test/runtime/samples/ignore-unchanged-attribute-compound/_config.js b/packages/svelte/test/runtime/samples/ignore-unchanged-attribute-compound/_config.js new file mode 100644 index 0000000000..64b8715f45 --- /dev/null +++ b/packages/svelte/test/runtime/samples/ignore-unchanged-attribute-compound/_config.js @@ -0,0 +1,27 @@ +import counter from './counter.js'; + +export default { + get props() { + return { x: 1, y: 2 }; + }, + + html: ` +

1

+

+ `, + + test({ assert, component }) { + counter.count = 0; + + component.x = 3; + assert.equal(counter.count, 0); + + component.x = 4; + component.y = 5; + assert.equal(counter.count, 1); + + component.x = 5; + component.y = 5; + assert.equal(counter.count, 1); + } +}; diff --git a/test/runtime/samples/ignore-unchanged-attribute-compound/counter.js b/packages/svelte/test/runtime/samples/ignore-unchanged-attribute-compound/counter.js similarity index 100% rename from test/runtime/samples/ignore-unchanged-attribute-compound/counter.js rename to packages/svelte/test/runtime/samples/ignore-unchanged-attribute-compound/counter.js diff --git a/test/runtime/samples/ignore-unchanged-attribute-compound/main.svelte b/packages/svelte/test/runtime/samples/ignore-unchanged-attribute-compound/main.svelte similarity index 100% rename from test/runtime/samples/ignore-unchanged-attribute-compound/main.svelte rename to packages/svelte/test/runtime/samples/ignore-unchanged-attribute-compound/main.svelte diff --git a/packages/svelte/test/runtime/samples/ignore-unchanged-attribute/_config.js b/packages/svelte/test/runtime/samples/ignore-unchanged-attribute/_config.js new file mode 100644 index 0000000000..ef8487122f --- /dev/null +++ b/packages/svelte/test/runtime/samples/ignore-unchanged-attribute/_config.js @@ -0,0 +1,27 @@ +import counter from './counter.js'; + +export default { + get props() { + return { x: 1, y: 2 }; + }, + + html: ` +

1

+

+ `, + + test({ assert, component }) { + counter.count = 0; + + component.x = 3; + assert.equal(counter.count, 0); + + component.x = 4; + component.y = 5; + assert.equal(counter.count, 1); + + component.x = 5; + component.y = 5; + assert.equal(counter.count, 1); + } +}; diff --git a/test/runtime/samples/ignore-unchanged-attribute/counter.js b/packages/svelte/test/runtime/samples/ignore-unchanged-attribute/counter.js similarity index 100% rename from test/runtime/samples/ignore-unchanged-attribute/counter.js rename to packages/svelte/test/runtime/samples/ignore-unchanged-attribute/counter.js diff --git a/test/runtime/samples/ignore-unchanged-attribute/main.svelte b/packages/svelte/test/runtime/samples/ignore-unchanged-attribute/main.svelte similarity index 100% rename from test/runtime/samples/ignore-unchanged-attribute/main.svelte rename to packages/svelte/test/runtime/samples/ignore-unchanged-attribute/main.svelte diff --git a/packages/svelte/test/runtime/samples/ignore-unchanged-raw/_config.js b/packages/svelte/test/runtime/samples/ignore-unchanged-raw/_config.js new file mode 100644 index 0000000000..43fb7fc3ac --- /dev/null +++ b/packages/svelte/test/runtime/samples/ignore-unchanged-raw/_config.js @@ -0,0 +1,27 @@ +import counter from './counter.js'; + +export default { + get props() { + return { x: 1, y: 2 }; + }, + + html: ` +

1

+

2

+ `, + + test({ assert, component }) { + counter.count = 0; + + component.x = 3; + assert.equal(counter.count, 0); + + component.x = 4; + component.y = 5; + assert.equal(counter.count, 1); + + component.x = 5; + component.y = 5; + assert.equal(counter.count, 1); + } +}; diff --git a/test/runtime/samples/ignore-unchanged-raw/counter.js b/packages/svelte/test/runtime/samples/ignore-unchanged-raw/counter.js similarity index 100% rename from test/runtime/samples/ignore-unchanged-raw/counter.js rename to packages/svelte/test/runtime/samples/ignore-unchanged-raw/counter.js diff --git a/test/runtime/samples/ignore-unchanged-raw/main.svelte b/packages/svelte/test/runtime/samples/ignore-unchanged-raw/main.svelte similarity index 100% rename from test/runtime/samples/ignore-unchanged-raw/main.svelte rename to packages/svelte/test/runtime/samples/ignore-unchanged-raw/main.svelte diff --git a/packages/svelte/test/runtime/samples/ignore-unchanged-tag/_config.js b/packages/svelte/test/runtime/samples/ignore-unchanged-tag/_config.js new file mode 100644 index 0000000000..43fb7fc3ac --- /dev/null +++ b/packages/svelte/test/runtime/samples/ignore-unchanged-tag/_config.js @@ -0,0 +1,27 @@ +import counter from './counter.js'; + +export default { + get props() { + return { x: 1, y: 2 }; + }, + + html: ` +

1

+

2

+ `, + + test({ assert, component }) { + counter.count = 0; + + component.x = 3; + assert.equal(counter.count, 0); + + component.x = 4; + component.y = 5; + assert.equal(counter.count, 1); + + component.x = 5; + component.y = 5; + assert.equal(counter.count, 1); + } +}; diff --git a/test/runtime/samples/ignore-unchanged-tag/counter.js b/packages/svelte/test/runtime/samples/ignore-unchanged-tag/counter.js similarity index 100% rename from test/runtime/samples/ignore-unchanged-tag/counter.js rename to packages/svelte/test/runtime/samples/ignore-unchanged-tag/counter.js diff --git a/test/runtime/samples/ignore-unchanged-tag/main.svelte b/packages/svelte/test/runtime/samples/ignore-unchanged-tag/main.svelte similarity index 100% rename from test/runtime/samples/ignore-unchanged-tag/main.svelte rename to packages/svelte/test/runtime/samples/ignore-unchanged-tag/main.svelte diff --git a/test/runtime/samples/immutable-nested/Nested.svelte b/packages/svelte/test/runtime/samples/immutable-nested/Nested.svelte similarity index 100% rename from test/runtime/samples/immutable-nested/Nested.svelte rename to packages/svelte/test/runtime/samples/immutable-nested/Nested.svelte diff --git a/packages/svelte/test/runtime/samples/immutable-nested/_config.js b/packages/svelte/test/runtime/samples/immutable-nested/_config.js new file mode 100644 index 0000000000..a71c144db4 --- /dev/null +++ b/packages/svelte/test/runtime/samples/immutable-nested/_config.js @@ -0,0 +1,42 @@ +export default { + immutable: true, + + html: ` +
+

Called 1 times.

+

baz true

+
+ `, + + ssrHtml: ` +
+

Called 0 times.

+

baz false

+
`, + + test({ assert, component, target }) { + const nested = component.nested; + + assert.htmlEqual( + target.innerHTML, + ` +
+

Called 1 times.

+

baz true

+
+ ` + ); + + // eslint-disable-next-line no-self-assign + nested.foo = nested.foo; + assert.htmlEqual( + target.innerHTML, + ` +
+

Called 1 times.

+

baz true

+
+ ` + ); + } +}; diff --git a/test/runtime/samples/immutable-nested/main.svelte b/packages/svelte/test/runtime/samples/immutable-nested/main.svelte similarity index 100% rename from test/runtime/samples/immutable-nested/main.svelte rename to packages/svelte/test/runtime/samples/immutable-nested/main.svelte diff --git a/test/runtime/samples/immutable-option/_config.js b/packages/svelte/test/runtime/samples/immutable-option/_config.js similarity index 100% rename from test/runtime/samples/immutable-option/_config.js rename to packages/svelte/test/runtime/samples/immutable-option/_config.js diff --git a/test/runtime/samples/immutable-option/main.svelte b/packages/svelte/test/runtime/samples/immutable-option/main.svelte similarity index 100% rename from test/runtime/samples/immutable-option/main.svelte rename to packages/svelte/test/runtime/samples/immutable-option/main.svelte diff --git a/test/runtime/samples/immutable-svelte-meta-false/_config.js b/packages/svelte/test/runtime/samples/immutable-svelte-meta-false/_config.js similarity index 100% rename from test/runtime/samples/immutable-svelte-meta-false/_config.js rename to packages/svelte/test/runtime/samples/immutable-svelte-meta-false/_config.js diff --git a/test/runtime/samples/immutable-svelte-meta-false/main.svelte b/packages/svelte/test/runtime/samples/immutable-svelte-meta-false/main.svelte similarity index 100% rename from test/runtime/samples/immutable-svelte-meta-false/main.svelte rename to packages/svelte/test/runtime/samples/immutable-svelte-meta-false/main.svelte diff --git a/test/runtime/samples/immutable-svelte-meta/_config.js b/packages/svelte/test/runtime/samples/immutable-svelte-meta/_config.js similarity index 100% rename from test/runtime/samples/immutable-svelte-meta/_config.js rename to packages/svelte/test/runtime/samples/immutable-svelte-meta/_config.js diff --git a/test/runtime/samples/immutable-svelte-meta/main.svelte b/packages/svelte/test/runtime/samples/immutable-svelte-meta/main.svelte similarity index 100% rename from test/runtime/samples/immutable-svelte-meta/main.svelte rename to packages/svelte/test/runtime/samples/immutable-svelte-meta/main.svelte diff --git a/test/runtime/samples/imported-renamed-components/ComponentOne.svelte b/packages/svelte/test/runtime/samples/imported-renamed-components/ComponentOne.svelte similarity index 100% rename from test/runtime/samples/imported-renamed-components/ComponentOne.svelte rename to packages/svelte/test/runtime/samples/imported-renamed-components/ComponentOne.svelte diff --git a/test/runtime/samples/imported-renamed-components/ComponentTwo.svelte b/packages/svelte/test/runtime/samples/imported-renamed-components/ComponentTwo.svelte similarity index 100% rename from test/runtime/samples/imported-renamed-components/ComponentTwo.svelte rename to packages/svelte/test/runtime/samples/imported-renamed-components/ComponentTwo.svelte diff --git a/test/runtime/samples/imported-renamed-components/_config.js b/packages/svelte/test/runtime/samples/imported-renamed-components/_config.js similarity index 100% rename from test/runtime/samples/imported-renamed-components/_config.js rename to packages/svelte/test/runtime/samples/imported-renamed-components/_config.js diff --git a/test/runtime/samples/imported-renamed-components/main.svelte b/packages/svelte/test/runtime/samples/imported-renamed-components/main.svelte similarity index 100% rename from test/runtime/samples/imported-renamed-components/main.svelte rename to packages/svelte/test/runtime/samples/imported-renamed-components/main.svelte diff --git a/packages/svelte/test/runtime/samples/initial-state-assign/_config.js b/packages/svelte/test/runtime/samples/initial-state-assign/_config.js new file mode 100644 index 0000000000..26ee07cec6 --- /dev/null +++ b/packages/svelte/test/runtime/samples/initial-state-assign/_config.js @@ -0,0 +1,9 @@ +export default { + get props() { + return { bar: 'bar' }; + }, + html: ` + "foo" + "bar" + ` +}; diff --git a/test/runtime/samples/initial-state-assign/main.svelte b/packages/svelte/test/runtime/samples/initial-state-assign/main.svelte similarity index 100% rename from test/runtime/samples/initial-state-assign/main.svelte rename to packages/svelte/test/runtime/samples/initial-state-assign/main.svelte diff --git a/packages/svelte/test/runtime/samples/inline-expressions/_config.js b/packages/svelte/test/runtime/samples/inline-expressions/_config.js new file mode 100644 index 0000000000..4086020c5f --- /dev/null +++ b/packages/svelte/test/runtime/samples/inline-expressions/_config.js @@ -0,0 +1,11 @@ +export default { + get props() { + return { a: 1, b: 2 }; + }, + html: '

1 + 2 = 3

', + test({ assert, component, target }) { + component.a = 3; + component.b = 4; + assert.equal(target.innerHTML, '

3 + 4 = 7

'); + } +}; diff --git a/test/runtime/samples/inline-expressions/main.svelte b/packages/svelte/test/runtime/samples/inline-expressions/main.svelte similarity index 100% rename from test/runtime/samples/inline-expressions/main.svelte rename to packages/svelte/test/runtime/samples/inline-expressions/main.svelte diff --git a/test/runtime/samples/inline-style-become-undefined/_config.js b/packages/svelte/test/runtime/samples/inline-style-become-undefined/_config.js similarity index 100% rename from test/runtime/samples/inline-style-become-undefined/_config.js rename to packages/svelte/test/runtime/samples/inline-style-become-undefined/_config.js diff --git a/test/runtime/samples/inline-style-become-undefined/main.svelte b/packages/svelte/test/runtime/samples/inline-style-become-undefined/main.svelte similarity index 100% rename from test/runtime/samples/inline-style-become-undefined/main.svelte rename to packages/svelte/test/runtime/samples/inline-style-become-undefined/main.svelte diff --git a/test/runtime/samples/inline-style-directive-and-style-attr-merged/_config.js b/packages/svelte/test/runtime/samples/inline-style-directive-and-style-attr-merged/_config.js similarity index 100% rename from test/runtime/samples/inline-style-directive-and-style-attr-merged/_config.js rename to packages/svelte/test/runtime/samples/inline-style-directive-and-style-attr-merged/_config.js diff --git a/test/runtime/samples/inline-style-directive-and-style-attr-merged/main.svelte b/packages/svelte/test/runtime/samples/inline-style-directive-and-style-attr-merged/main.svelte similarity index 100% rename from test/runtime/samples/inline-style-directive-and-style-attr-merged/main.svelte rename to packages/svelte/test/runtime/samples/inline-style-directive-and-style-attr-merged/main.svelte diff --git a/test/runtime/samples/inline-style-directive-and-style-attr/_config.js b/packages/svelte/test/runtime/samples/inline-style-directive-and-style-attr/_config.js similarity index 100% rename from test/runtime/samples/inline-style-directive-and-style-attr/_config.js rename to packages/svelte/test/runtime/samples/inline-style-directive-and-style-attr/_config.js diff --git a/test/runtime/samples/inline-style-directive-and-style-attr/main.svelte b/packages/svelte/test/runtime/samples/inline-style-directive-and-style-attr/main.svelte similarity index 100% rename from test/runtime/samples/inline-style-directive-and-style-attr/main.svelte rename to packages/svelte/test/runtime/samples/inline-style-directive-and-style-attr/main.svelte diff --git a/test/runtime/samples/inline-style-directive-css-vars/_config.js b/packages/svelte/test/runtime/samples/inline-style-directive-css-vars/_config.js similarity index 100% rename from test/runtime/samples/inline-style-directive-css-vars/_config.js rename to packages/svelte/test/runtime/samples/inline-style-directive-css-vars/_config.js diff --git a/test/runtime/samples/inline-style-directive-css-vars/main.svelte b/packages/svelte/test/runtime/samples/inline-style-directive-css-vars/main.svelte similarity index 100% rename from test/runtime/samples/inline-style-directive-css-vars/main.svelte rename to packages/svelte/test/runtime/samples/inline-style-directive-css-vars/main.svelte diff --git a/test/runtime/samples/inline-style-directive-dynamic/_config.js b/packages/svelte/test/runtime/samples/inline-style-directive-dynamic/_config.js similarity index 100% rename from test/runtime/samples/inline-style-directive-dynamic/_config.js rename to packages/svelte/test/runtime/samples/inline-style-directive-dynamic/_config.js diff --git a/test/runtime/samples/inline-style-directive-dynamic/main.svelte b/packages/svelte/test/runtime/samples/inline-style-directive-dynamic/main.svelte similarity index 100% rename from test/runtime/samples/inline-style-directive-dynamic/main.svelte rename to packages/svelte/test/runtime/samples/inline-style-directive-dynamic/main.svelte diff --git a/packages/svelte/test/runtime/samples/inline-style-directive-escape/_config.js b/packages/svelte/test/runtime/samples/inline-style-directive-escape/_config.js new file mode 100644 index 0000000000..069f06b7b5 --- /dev/null +++ b/packages/svelte/test/runtime/samples/inline-style-directive-escape/_config.js @@ -0,0 +1,15 @@ +export default { + html: ` +
+ `, + + test({ assert, component, target }) { + component.attack = '" onload="alert(\'uhoh2\')" data-nothing="not important'; + assert.htmlEqual( + target.innerHTML, + ` +
+ ` + ); + } +}; diff --git a/test/runtime/samples/inline-style-directive-escape/main.svelte b/packages/svelte/test/runtime/samples/inline-style-directive-escape/main.svelte similarity index 100% rename from test/runtime/samples/inline-style-directive-escape/main.svelte rename to packages/svelte/test/runtime/samples/inline-style-directive-escape/main.svelte diff --git a/test/runtime/samples/inline-style-directive-multiple/_config.js b/packages/svelte/test/runtime/samples/inline-style-directive-multiple/_config.js similarity index 100% rename from test/runtime/samples/inline-style-directive-multiple/_config.js rename to packages/svelte/test/runtime/samples/inline-style-directive-multiple/_config.js diff --git a/test/runtime/samples/inline-style-directive-multiple/main.svelte b/packages/svelte/test/runtime/samples/inline-style-directive-multiple/main.svelte similarity index 100% rename from test/runtime/samples/inline-style-directive-multiple/main.svelte rename to packages/svelte/test/runtime/samples/inline-style-directive-multiple/main.svelte diff --git a/test/runtime/samples/inline-style-directive-shorthand/_config.js b/packages/svelte/test/runtime/samples/inline-style-directive-shorthand/_config.js similarity index 100% rename from test/runtime/samples/inline-style-directive-shorthand/_config.js rename to packages/svelte/test/runtime/samples/inline-style-directive-shorthand/_config.js diff --git a/test/runtime/samples/inline-style-directive-shorthand/main.svelte b/packages/svelte/test/runtime/samples/inline-style-directive-shorthand/main.svelte similarity index 100% rename from test/runtime/samples/inline-style-directive-shorthand/main.svelte rename to packages/svelte/test/runtime/samples/inline-style-directive-shorthand/main.svelte diff --git a/test/runtime/samples/inline-style-directive-spread-and-attr-empty/_config.js b/packages/svelte/test/runtime/samples/inline-style-directive-spread-and-attr-empty/_config.js similarity index 100% rename from test/runtime/samples/inline-style-directive-spread-and-attr-empty/_config.js rename to packages/svelte/test/runtime/samples/inline-style-directive-spread-and-attr-empty/_config.js diff --git a/test/runtime/samples/inline-style-directive-spread-and-attr-empty/main.svelte b/packages/svelte/test/runtime/samples/inline-style-directive-spread-and-attr-empty/main.svelte similarity index 100% rename from test/runtime/samples/inline-style-directive-spread-and-attr-empty/main.svelte rename to packages/svelte/test/runtime/samples/inline-style-directive-spread-and-attr-empty/main.svelte diff --git a/packages/svelte/test/runtime/samples/inline-style-directive-spread-and-attr/_config.js b/packages/svelte/test/runtime/samples/inline-style-directive-spread-and-attr/_config.js new file mode 100644 index 0000000000..eab5b5bef2 --- /dev/null +++ b/packages/svelte/test/runtime/samples/inline-style-directive-spread-and-attr/_config.js @@ -0,0 +1,37 @@ +export default { + html: ` +

+ `, + + test({ assert, component, target, window }) { + const p = target.querySelector('p'); + + let styles = window.getComputedStyle(p); + assert.equal(styles.color, 'green'); + + component.color = null; + assert.htmlEqual(target.innerHTML, '

'); + styles = window.getComputedStyle(p); + assert.equal(styles.color, ''); + + component.spread = { style: 'color: yellow; padding: 30px;' }; + + assert.htmlEqual(target.innerHTML, '

'); + styles = window.getComputedStyle(p); + assert.equal(styles.color, ''); + assert.equal(styles.padding, '30px'); + + component.spread = {}; + component.style = 'color: blue; background-color: green;'; + assert.htmlEqual(target.innerHTML, '

'); + styles = window.getComputedStyle(p); + assert.equal(styles.color, ''); + assert.equal(styles.backgroundColor, 'green'); + + component.color = 'purple'; + assert.htmlEqual(target.innerHTML, '

'); + styles = window.getComputedStyle(p); + assert.equal(styles.color, 'purple'); + assert.equal(styles.backgroundColor, 'green'); + } +}; diff --git a/test/runtime/samples/inline-style-directive-spread-and-attr/main.svelte b/packages/svelte/test/runtime/samples/inline-style-directive-spread-and-attr/main.svelte similarity index 100% rename from test/runtime/samples/inline-style-directive-spread-and-attr/main.svelte rename to packages/svelte/test/runtime/samples/inline-style-directive-spread-and-attr/main.svelte diff --git a/packages/svelte/test/runtime/samples/inline-style-directive-spread-dynamic/_config.js b/packages/svelte/test/runtime/samples/inline-style-directive-spread-dynamic/_config.js new file mode 100644 index 0000000000..a37b99530c --- /dev/null +++ b/packages/svelte/test/runtime/samples/inline-style-directive-spread-dynamic/_config.js @@ -0,0 +1,30 @@ +export default { + html: ` +

+ `, + + test({ assert, component, target, window }) { + const p = target.querySelector('p'); + + const styles = window.getComputedStyle(p); + assert.equal(styles.color, 'blue'); + assert.equal(styles.width, '65px'); + assert.equal(p.id, 'my-id'); + + component.color = 'red'; + + assert.htmlEqual(target.innerHTML, '

'); + + component.obj = { style: 'height: 72px;' }; + + assert.htmlEqual(target.innerHTML, '

'); + + component.obj = { style: 'border-radius: 2px; color: orange' }; + + assert.htmlEqual(target.innerHTML, '

'); + + component.obj = {}; + + assert.htmlEqual(target.innerHTML, '

'); + } +}; diff --git a/test/runtime/samples/inline-style-directive-spread-dynamic/main.svelte b/packages/svelte/test/runtime/samples/inline-style-directive-spread-dynamic/main.svelte similarity index 100% rename from test/runtime/samples/inline-style-directive-spread-dynamic/main.svelte rename to packages/svelte/test/runtime/samples/inline-style-directive-spread-dynamic/main.svelte diff --git a/test/runtime/samples/inline-style-directive-spread/_config.js b/packages/svelte/test/runtime/samples/inline-style-directive-spread/_config.js similarity index 100% rename from test/runtime/samples/inline-style-directive-spread/_config.js rename to packages/svelte/test/runtime/samples/inline-style-directive-spread/_config.js diff --git a/test/runtime/samples/inline-style-directive-spread/main.svelte b/packages/svelte/test/runtime/samples/inline-style-directive-spread/main.svelte similarity index 100% rename from test/runtime/samples/inline-style-directive-spread/main.svelte rename to packages/svelte/test/runtime/samples/inline-style-directive-spread/main.svelte diff --git a/packages/svelte/test/runtime/samples/inline-style-directive-string-variable-kebab-case/_config.js b/packages/svelte/test/runtime/samples/inline-style-directive-string-variable-kebab-case/_config.js new file mode 100644 index 0000000000..8d1984191a --- /dev/null +++ b/packages/svelte/test/runtime/samples/inline-style-directive-string-variable-kebab-case/_config.js @@ -0,0 +1,21 @@ +export default { + html: ` +
+ `, + + test({ assert, target, window }) { + const div = target.querySelector('div'); + const styles = window.getComputedStyle(div); + + assert.equal( + styles['background-image'], + 'url(https://raw.githubusercontent.com/sveltejs/branding/master/svelte-vertical.png)' + ); + assert.equal(styles.getPropertyValue('--css-variable'), 'rgba(0, 0, 0, 1)'); + + assert.htmlEqual( + target.innerHTML, + '
' + ); + } +}; diff --git a/test/runtime/samples/inline-style-directive-string-variable-kebab-case/main.svelte b/packages/svelte/test/runtime/samples/inline-style-directive-string-variable-kebab-case/main.svelte similarity index 100% rename from test/runtime/samples/inline-style-directive-string-variable-kebab-case/main.svelte rename to packages/svelte/test/runtime/samples/inline-style-directive-string-variable-kebab-case/main.svelte diff --git a/test/runtime/samples/inline-style-directive-string-variable/_config.js b/packages/svelte/test/runtime/samples/inline-style-directive-string-variable/_config.js similarity index 100% rename from test/runtime/samples/inline-style-directive-string-variable/_config.js rename to packages/svelte/test/runtime/samples/inline-style-directive-string-variable/_config.js diff --git a/test/runtime/samples/inline-style-directive-string-variable/main.svelte b/packages/svelte/test/runtime/samples/inline-style-directive-string-variable/main.svelte similarity index 100% rename from test/runtime/samples/inline-style-directive-string-variable/main.svelte rename to packages/svelte/test/runtime/samples/inline-style-directive-string-variable/main.svelte diff --git a/test/runtime/samples/inline-style-directive-string/_config.js b/packages/svelte/test/runtime/samples/inline-style-directive-string/_config.js similarity index 100% rename from test/runtime/samples/inline-style-directive-string/_config.js rename to packages/svelte/test/runtime/samples/inline-style-directive-string/_config.js diff --git a/test/runtime/samples/inline-style-directive-string/main.svelte b/packages/svelte/test/runtime/samples/inline-style-directive-string/main.svelte similarity index 100% rename from test/runtime/samples/inline-style-directive-string/main.svelte rename to packages/svelte/test/runtime/samples/inline-style-directive-string/main.svelte diff --git a/test/runtime/samples/inline-style-directive/_config.js b/packages/svelte/test/runtime/samples/inline-style-directive/_config.js similarity index 100% rename from test/runtime/samples/inline-style-directive/_config.js rename to packages/svelte/test/runtime/samples/inline-style-directive/_config.js diff --git a/test/runtime/samples/inline-style-directive/main.svelte b/packages/svelte/test/runtime/samples/inline-style-directive/main.svelte similarity index 100% rename from test/runtime/samples/inline-style-directive/main.svelte rename to packages/svelte/test/runtime/samples/inline-style-directive/main.svelte diff --git a/test/runtime/samples/inline-style-important/_config.js b/packages/svelte/test/runtime/samples/inline-style-important/_config.js similarity index 100% rename from test/runtime/samples/inline-style-important/_config.js rename to packages/svelte/test/runtime/samples/inline-style-important/_config.js diff --git a/test/runtime/samples/inline-style-important/main.svelte b/packages/svelte/test/runtime/samples/inline-style-important/main.svelte similarity index 100% rename from test/runtime/samples/inline-style-important/main.svelte rename to packages/svelte/test/runtime/samples/inline-style-important/main.svelte diff --git a/test/runtime/samples/inline-style-optimisation-bailout/_config.js b/packages/svelte/test/runtime/samples/inline-style-optimisation-bailout/_config.js similarity index 100% rename from test/runtime/samples/inline-style-optimisation-bailout/_config.js rename to packages/svelte/test/runtime/samples/inline-style-optimisation-bailout/_config.js diff --git a/test/runtime/samples/inline-style-optimisation-bailout/main.svelte b/packages/svelte/test/runtime/samples/inline-style-optimisation-bailout/main.svelte similarity index 100% rename from test/runtime/samples/inline-style-optimisation-bailout/main.svelte rename to packages/svelte/test/runtime/samples/inline-style-optimisation-bailout/main.svelte diff --git a/test/runtime/samples/inline-style/_config.js b/packages/svelte/test/runtime/samples/inline-style/_config.js similarity index 100% rename from test/runtime/samples/inline-style/_config.js rename to packages/svelte/test/runtime/samples/inline-style/_config.js diff --git a/test/runtime/samples/inline-style/main.svelte b/packages/svelte/test/runtime/samples/inline-style/main.svelte similarity index 100% rename from test/runtime/samples/inline-style/main.svelte rename to packages/svelte/test/runtime/samples/inline-style/main.svelte diff --git a/test/runtime/samples/innerhtml-interpolated-literal/_config.js b/packages/svelte/test/runtime/samples/innerhtml-interpolated-literal/_config.js similarity index 100% rename from test/runtime/samples/innerhtml-interpolated-literal/_config.js rename to packages/svelte/test/runtime/samples/innerhtml-interpolated-literal/_config.js diff --git a/test/runtime/samples/innerhtml-interpolated-literal/main.svelte b/packages/svelte/test/runtime/samples/innerhtml-interpolated-literal/main.svelte similarity index 100% rename from test/runtime/samples/innerhtml-interpolated-literal/main.svelte rename to packages/svelte/test/runtime/samples/innerhtml-interpolated-literal/main.svelte diff --git a/test/runtime/samples/innerhtml-with-comments/_config.js b/packages/svelte/test/runtime/samples/innerhtml-with-comments/_config.js similarity index 100% rename from test/runtime/samples/innerhtml-with-comments/_config.js rename to packages/svelte/test/runtime/samples/innerhtml-with-comments/_config.js diff --git a/test/runtime/samples/innerhtml-with-comments/main.svelte b/packages/svelte/test/runtime/samples/innerhtml-with-comments/main.svelte similarity index 100% rename from test/runtime/samples/innerhtml-with-comments/main.svelte rename to packages/svelte/test/runtime/samples/innerhtml-with-comments/main.svelte diff --git a/test/runtime/samples/input-list/_config.js b/packages/svelte/test/runtime/samples/input-list/_config.js similarity index 100% rename from test/runtime/samples/input-list/_config.js rename to packages/svelte/test/runtime/samples/input-list/_config.js diff --git a/test/runtime/samples/input-list/main.svelte b/packages/svelte/test/runtime/samples/input-list/main.svelte similarity index 100% rename from test/runtime/samples/input-list/main.svelte rename to packages/svelte/test/runtime/samples/input-list/main.svelte diff --git a/test/runtime/samples/instrumentation-auto-subscription-self-assignment/_config.js b/packages/svelte/test/runtime/samples/instrumentation-auto-subscription-self-assignment/_config.js similarity index 100% rename from test/runtime/samples/instrumentation-auto-subscription-self-assignment/_config.js rename to packages/svelte/test/runtime/samples/instrumentation-auto-subscription-self-assignment/_config.js diff --git a/test/runtime/samples/instrumentation-auto-subscription-self-assignment/main.svelte b/packages/svelte/test/runtime/samples/instrumentation-auto-subscription-self-assignment/main.svelte similarity index 100% rename from test/runtime/samples/instrumentation-auto-subscription-self-assignment/main.svelte rename to packages/svelte/test/runtime/samples/instrumentation-auto-subscription-self-assignment/main.svelte diff --git a/packages/svelte/test/runtime/samples/instrumentation-script-destructuring/_config.js b/packages/svelte/test/runtime/samples/instrumentation-script-destructuring/_config.js new file mode 100644 index 0000000000..eeb584dc18 --- /dev/null +++ b/packages/svelte/test/runtime/samples/instrumentation-script-destructuring/_config.js @@ -0,0 +1,35 @@ +export default { + html: ` + + + +

x: 0

+ `, + + async test({ assert, target, window }) { + const buttons = target.querySelectorAll('button'); + const click = new window.MouseEvent('click'); + + await buttons[0].dispatchEvent(click); + assert.htmlEqual( + target.innerHTML, + ` + + + +

x: 1

+ ` + ); + + await buttons[1].dispatchEvent(click); + assert.htmlEqual( + target.innerHTML, + ` + + + +

x: 2

+ ` + ); + } +}; diff --git a/test/runtime/samples/instrumentation-script-destructuring/main.svelte b/packages/svelte/test/runtime/samples/instrumentation-script-destructuring/main.svelte similarity index 100% rename from test/runtime/samples/instrumentation-script-destructuring/main.svelte rename to packages/svelte/test/runtime/samples/instrumentation-script-destructuring/main.svelte diff --git a/packages/svelte/test/runtime/samples/instrumentation-script-loop-scope/_config.js b/packages/svelte/test/runtime/samples/instrumentation-script-loop-scope/_config.js new file mode 100644 index 0000000000..963d01f936 --- /dev/null +++ b/packages/svelte/test/runtime/samples/instrumentation-script-loop-scope/_config.js @@ -0,0 +1,20 @@ +export default { + html: ` + +

x: 0

+ `, + + async test({ assert, target, window }) { + const buttons = target.querySelectorAll('button'); + const click = new window.MouseEvent('click'); + + await buttons[0].dispatchEvent(click); + assert.htmlEqual( + target.innerHTML, + ` + +

x: 42

+ ` + ); + } +}; diff --git a/test/runtime/samples/instrumentation-script-loop-scope/main.svelte b/packages/svelte/test/runtime/samples/instrumentation-script-loop-scope/main.svelte similarity index 100% rename from test/runtime/samples/instrumentation-script-loop-scope/main.svelte rename to packages/svelte/test/runtime/samples/instrumentation-script-loop-scope/main.svelte diff --git a/packages/svelte/test/runtime/samples/instrumentation-script-multiple-assignments/_config.js b/packages/svelte/test/runtime/samples/instrumentation-script-multiple-assignments/_config.js new file mode 100644 index 0000000000..d219920acd --- /dev/null +++ b/packages/svelte/test/runtime/samples/instrumentation-script-multiple-assignments/_config.js @@ -0,0 +1,30 @@ +export default { + get props() { + return { foo: 0, bar: 0 }; + }, + + html: ` + +

foo: 0

+

bar: 0

+ `, + + async test({ assert, component, target, window }) { + const button = target.querySelector('button'); + const click = new window.MouseEvent('click'); + + await button.dispatchEvent(click); + + assert.equal(component.foo, 4); + assert.equal(component.bar, 2); + + assert.htmlEqual( + target.innerHTML, + ` + +

foo: 4

+

bar: 2

+ ` + ); + } +}; diff --git a/test/runtime/samples/instrumentation-script-multiple-assignments/main.svelte b/packages/svelte/test/runtime/samples/instrumentation-script-multiple-assignments/main.svelte similarity index 100% rename from test/runtime/samples/instrumentation-script-multiple-assignments/main.svelte rename to packages/svelte/test/runtime/samples/instrumentation-script-multiple-assignments/main.svelte diff --git a/packages/svelte/test/runtime/samples/instrumentation-script-update/_config.js b/packages/svelte/test/runtime/samples/instrumentation-script-update/_config.js new file mode 100644 index 0000000000..abca3bb0cd --- /dev/null +++ b/packages/svelte/test/runtime/samples/instrumentation-script-update/_config.js @@ -0,0 +1,20 @@ +export default { + html: ` + +

x: 0

+ `, + + async test({ assert, target, window }) { + const buttons = target.querySelectorAll('button'); + const click = new window.MouseEvent('click'); + + await buttons[0].dispatchEvent(click); + assert.htmlEqual( + target.innerHTML, + ` + +

x: 1

+ ` + ); + } +}; diff --git a/test/runtime/samples/instrumentation-script-update/main.svelte b/packages/svelte/test/runtime/samples/instrumentation-script-update/main.svelte similarity index 100% rename from test/runtime/samples/instrumentation-script-update/main.svelte rename to packages/svelte/test/runtime/samples/instrumentation-script-update/main.svelte diff --git a/packages/svelte/test/runtime/samples/instrumentation-template-destructuring/_config.js b/packages/svelte/test/runtime/samples/instrumentation-template-destructuring/_config.js new file mode 100644 index 0000000000..eeb584dc18 --- /dev/null +++ b/packages/svelte/test/runtime/samples/instrumentation-template-destructuring/_config.js @@ -0,0 +1,35 @@ +export default { + html: ` + + + +

x: 0

+ `, + + async test({ assert, target, window }) { + const buttons = target.querySelectorAll('button'); + const click = new window.MouseEvent('click'); + + await buttons[0].dispatchEvent(click); + assert.htmlEqual( + target.innerHTML, + ` + + + +

x: 1

+ ` + ); + + await buttons[1].dispatchEvent(click); + assert.htmlEqual( + target.innerHTML, + ` + + + +

x: 2

+ ` + ); + } +}; diff --git a/test/runtime/samples/instrumentation-template-destructuring/main.svelte b/packages/svelte/test/runtime/samples/instrumentation-template-destructuring/main.svelte similarity index 100% rename from test/runtime/samples/instrumentation-template-destructuring/main.svelte rename to packages/svelte/test/runtime/samples/instrumentation-template-destructuring/main.svelte diff --git a/packages/svelte/test/runtime/samples/instrumentation-template-loop-scope/_config.js b/packages/svelte/test/runtime/samples/instrumentation-template-loop-scope/_config.js new file mode 100644 index 0000000000..963d01f936 --- /dev/null +++ b/packages/svelte/test/runtime/samples/instrumentation-template-loop-scope/_config.js @@ -0,0 +1,20 @@ +export default { + html: ` + +

x: 0

+ `, + + async test({ assert, target, window }) { + const buttons = target.querySelectorAll('button'); + const click = new window.MouseEvent('click'); + + await buttons[0].dispatchEvent(click); + assert.htmlEqual( + target.innerHTML, + ` + +

x: 42

+ ` + ); + } +}; diff --git a/test/runtime/samples/instrumentation-template-loop-scope/main.svelte b/packages/svelte/test/runtime/samples/instrumentation-template-loop-scope/main.svelte similarity index 100% rename from test/runtime/samples/instrumentation-template-loop-scope/main.svelte rename to packages/svelte/test/runtime/samples/instrumentation-template-loop-scope/main.svelte diff --git a/packages/svelte/test/runtime/samples/instrumentation-template-multiple-assignments/_config.js b/packages/svelte/test/runtime/samples/instrumentation-template-multiple-assignments/_config.js new file mode 100644 index 0000000000..d219920acd --- /dev/null +++ b/packages/svelte/test/runtime/samples/instrumentation-template-multiple-assignments/_config.js @@ -0,0 +1,30 @@ +export default { + get props() { + return { foo: 0, bar: 0 }; + }, + + html: ` + +

foo: 0

+

bar: 0

+ `, + + async test({ assert, component, target, window }) { + const button = target.querySelector('button'); + const click = new window.MouseEvent('click'); + + await button.dispatchEvent(click); + + assert.equal(component.foo, 4); + assert.equal(component.bar, 2); + + assert.htmlEqual( + target.innerHTML, + ` + +

foo: 4

+

bar: 2

+ ` + ); + } +}; diff --git a/test/runtime/samples/instrumentation-template-multiple-assignments/main.svelte b/packages/svelte/test/runtime/samples/instrumentation-template-multiple-assignments/main.svelte similarity index 100% rename from test/runtime/samples/instrumentation-template-multiple-assignments/main.svelte rename to packages/svelte/test/runtime/samples/instrumentation-template-multiple-assignments/main.svelte diff --git a/packages/svelte/test/runtime/samples/instrumentation-template-update/_config.js b/packages/svelte/test/runtime/samples/instrumentation-template-update/_config.js new file mode 100644 index 0000000000..abca3bb0cd --- /dev/null +++ b/packages/svelte/test/runtime/samples/instrumentation-template-update/_config.js @@ -0,0 +1,20 @@ +export default { + html: ` + +

x: 0

+ `, + + async test({ assert, target, window }) { + const buttons = target.querySelectorAll('button'); + const click = new window.MouseEvent('click'); + + await buttons[0].dispatchEvent(click); + assert.htmlEqual( + target.innerHTML, + ` + +

x: 1

+ ` + ); + } +}; diff --git a/test/runtime/samples/instrumentation-template-update/main.svelte b/packages/svelte/test/runtime/samples/instrumentation-template-update/main.svelte similarity index 100% rename from test/runtime/samples/instrumentation-template-update/main.svelte rename to packages/svelte/test/runtime/samples/instrumentation-template-update/main.svelte diff --git a/test/runtime/samples/instrumentation-update-expression/_config.js b/packages/svelte/test/runtime/samples/instrumentation-update-expression/_config.js similarity index 100% rename from test/runtime/samples/instrumentation-update-expression/_config.js rename to packages/svelte/test/runtime/samples/instrumentation-update-expression/_config.js diff --git a/test/runtime/samples/instrumentation-update-expression/main.svelte b/packages/svelte/test/runtime/samples/instrumentation-update-expression/main.svelte similarity index 100% rename from test/runtime/samples/instrumentation-update-expression/main.svelte rename to packages/svelte/test/runtime/samples/instrumentation-update-expression/main.svelte diff --git a/test/runtime/samples/internal-state/Foo.svelte b/packages/svelte/test/runtime/samples/internal-state/Foo.svelte similarity index 100% rename from test/runtime/samples/internal-state/Foo.svelte rename to packages/svelte/test/runtime/samples/internal-state/Foo.svelte diff --git a/packages/svelte/test/runtime/samples/internal-state/_config.js b/packages/svelte/test/runtime/samples/internal-state/_config.js new file mode 100644 index 0000000000..245397df24 --- /dev/null +++ b/packages/svelte/test/runtime/samples/internal-state/_config.js @@ -0,0 +1,21 @@ +export default { + html: ` +

internal: 1

+ + `, + + async test({ assert, target, window }) { + const button = target.querySelector('button'); + const click = new window.MouseEvent('click'); + + await button.dispatchEvent(click); + + assert.htmlEqual( + target.innerHTML, + ` +

internal: 1

+ + ` + ); + } +}; diff --git a/test/runtime/samples/internal-state/main.svelte b/packages/svelte/test/runtime/samples/internal-state/main.svelte similarity index 100% rename from test/runtime/samples/internal-state/main.svelte rename to packages/svelte/test/runtime/samples/internal-state/main.svelte diff --git a/test/runtime/samples/invalidation-in-if-condition/_config.js b/packages/svelte/test/runtime/samples/invalidation-in-if-condition/_config.js similarity index 100% rename from test/runtime/samples/invalidation-in-if-condition/_config.js rename to packages/svelte/test/runtime/samples/invalidation-in-if-condition/_config.js diff --git a/test/runtime/samples/invalidation-in-if-condition/main.svelte b/packages/svelte/test/runtime/samples/invalidation-in-if-condition/main.svelte similarity index 100% rename from test/runtime/samples/invalidation-in-if-condition/main.svelte rename to packages/svelte/test/runtime/samples/invalidation-in-if-condition/main.svelte diff --git a/test/runtime/samples/isolated-text/_config.js b/packages/svelte/test/runtime/samples/isolated-text/_config.js similarity index 100% rename from test/runtime/samples/isolated-text/_config.js rename to packages/svelte/test/runtime/samples/isolated-text/_config.js diff --git a/test/runtime/samples/isolated-text/main.svelte b/packages/svelte/test/runtime/samples/isolated-text/main.svelte similarity index 100% rename from test/runtime/samples/isolated-text/main.svelte rename to packages/svelte/test/runtime/samples/isolated-text/main.svelte diff --git a/test/runtime/samples/key-block-2/_config.js b/packages/svelte/test/runtime/samples/key-block-2/_config.js similarity index 100% rename from test/runtime/samples/key-block-2/_config.js rename to packages/svelte/test/runtime/samples/key-block-2/_config.js diff --git a/test/runtime/samples/key-block-2/main.svelte b/packages/svelte/test/runtime/samples/key-block-2/main.svelte similarity index 100% rename from test/runtime/samples/key-block-2/main.svelte rename to packages/svelte/test/runtime/samples/key-block-2/main.svelte diff --git a/test/runtime/samples/key-block-3/_config.js b/packages/svelte/test/runtime/samples/key-block-3/_config.js similarity index 100% rename from test/runtime/samples/key-block-3/_config.js rename to packages/svelte/test/runtime/samples/key-block-3/_config.js diff --git a/test/runtime/samples/key-block-3/main.svelte b/packages/svelte/test/runtime/samples/key-block-3/main.svelte similarity index 100% rename from test/runtime/samples/key-block-3/main.svelte rename to packages/svelte/test/runtime/samples/key-block-3/main.svelte diff --git a/test/runtime/samples/key-block-array-immutable/_config.js b/packages/svelte/test/runtime/samples/key-block-array-immutable/_config.js similarity index 100% rename from test/runtime/samples/key-block-array-immutable/_config.js rename to packages/svelte/test/runtime/samples/key-block-array-immutable/_config.js diff --git a/test/runtime/samples/key-block-array-immutable/main.svelte b/packages/svelte/test/runtime/samples/key-block-array-immutable/main.svelte similarity index 100% rename from test/runtime/samples/key-block-array-immutable/main.svelte rename to packages/svelte/test/runtime/samples/key-block-array-immutable/main.svelte diff --git a/test/runtime/samples/key-block-array/_config.js b/packages/svelte/test/runtime/samples/key-block-array/_config.js similarity index 100% rename from test/runtime/samples/key-block-array/_config.js rename to packages/svelte/test/runtime/samples/key-block-array/_config.js diff --git a/test/runtime/samples/key-block-array/main.svelte b/packages/svelte/test/runtime/samples/key-block-array/main.svelte similarity index 100% rename from test/runtime/samples/key-block-array/main.svelte rename to packages/svelte/test/runtime/samples/key-block-array/main.svelte diff --git a/test/runtime/samples/key-block-component-slot/Component1.svelte b/packages/svelte/test/runtime/samples/key-block-component-slot/Component1.svelte similarity index 100% rename from test/runtime/samples/key-block-component-slot/Component1.svelte rename to packages/svelte/test/runtime/samples/key-block-component-slot/Component1.svelte diff --git a/test/runtime/samples/key-block-component-slot/Component2.svelte b/packages/svelte/test/runtime/samples/key-block-component-slot/Component2.svelte similarity index 100% rename from test/runtime/samples/key-block-component-slot/Component2.svelte rename to packages/svelte/test/runtime/samples/key-block-component-slot/Component2.svelte diff --git a/packages/svelte/test/runtime/samples/key-block-component-slot/_config.js b/packages/svelte/test/runtime/samples/key-block-component-slot/_config.js new file mode 100644 index 0000000000..fadd9484ae --- /dev/null +++ b/packages/svelte/test/runtime/samples/key-block-component-slot/_config.js @@ -0,0 +1,23 @@ +let logs = []; + +export default { + html: '', + get props() { + return { logs }; + }, + + before_test() { + logs = []; + }, + + async test({ assert, target }) { + assert.deepEqual(logs, ['mount']); + + const button = target.querySelector('button'); + + const click = new window.MouseEvent('click'); + await button.dispatchEvent(click); + + assert.deepEqual(logs, ['mount', 'unmount', 'mount']); + } +}; diff --git a/test/runtime/samples/key-block-component-slot/main.svelte b/packages/svelte/test/runtime/samples/key-block-component-slot/main.svelte similarity index 100% rename from test/runtime/samples/key-block-component-slot/main.svelte rename to packages/svelte/test/runtime/samples/key-block-component-slot/main.svelte diff --git a/test/runtime/samples/key-block-expression-2/_config.js b/packages/svelte/test/runtime/samples/key-block-expression-2/_config.js similarity index 100% rename from test/runtime/samples/key-block-expression-2/_config.js rename to packages/svelte/test/runtime/samples/key-block-expression-2/_config.js diff --git a/test/runtime/samples/key-block-expression-2/main.svelte b/packages/svelte/test/runtime/samples/key-block-expression-2/main.svelte similarity index 100% rename from test/runtime/samples/key-block-expression-2/main.svelte rename to packages/svelte/test/runtime/samples/key-block-expression-2/main.svelte diff --git a/test/runtime/samples/key-block-expression/_config.js b/packages/svelte/test/runtime/samples/key-block-expression/_config.js similarity index 100% rename from test/runtime/samples/key-block-expression/_config.js rename to packages/svelte/test/runtime/samples/key-block-expression/_config.js diff --git a/test/runtime/samples/key-block-expression/main.svelte b/packages/svelte/test/runtime/samples/key-block-expression/main.svelte similarity index 100% rename from test/runtime/samples/key-block-expression/main.svelte rename to packages/svelte/test/runtime/samples/key-block-expression/main.svelte diff --git a/packages/svelte/test/runtime/samples/key-block-post-hydrate/_config.js b/packages/svelte/test/runtime/samples/key-block-post-hydrate/_config.js new file mode 100644 index 0000000000..5c5472a376 --- /dev/null +++ b/packages/svelte/test/runtime/samples/key-block-post-hydrate/_config.js @@ -0,0 +1,22 @@ +export default { + html: ` +
+
item 1something
+
item 2something
+
item 3something
+
+ `, + test({ assert, component, target }) { + component.sortById = false; + assert.htmlEqual( + target.innerHTML, + ` +
+
item 3something
+
item 2something
+
item 1something
+
+ ` + ); + } +}; diff --git a/test/runtime/samples/key-block-post-hydrate/main.svelte b/packages/svelte/test/runtime/samples/key-block-post-hydrate/main.svelte similarity index 100% rename from test/runtime/samples/key-block-post-hydrate/main.svelte rename to packages/svelte/test/runtime/samples/key-block-post-hydrate/main.svelte diff --git a/packages/svelte/test/runtime/samples/key-block-static-if/_config.js b/packages/svelte/test/runtime/samples/key-block-static-if/_config.js new file mode 100644 index 0000000000..3c6435e59a --- /dev/null +++ b/packages/svelte/test/runtime/samples/key-block-static-if/_config.js @@ -0,0 +1,24 @@ +export default { + html: ` +
+
Second
+
+ + `, + async test({ assert, target, window }) { + const button = target.querySelector('button'); + + await button.dispatchEvent(new window.Event('click')); + + assert.htmlEqual( + target.innerHTML, + ` +
+
First
+
Second
+
+ + ` + ); + } +}; diff --git a/test/runtime/samples/key-block-static-if/main.svelte b/packages/svelte/test/runtime/samples/key-block-static-if/main.svelte similarity index 100% rename from test/runtime/samples/key-block-static-if/main.svelte rename to packages/svelte/test/runtime/samples/key-block-static-if/main.svelte diff --git a/test/runtime/samples/key-block-static/_config.js b/packages/svelte/test/runtime/samples/key-block-static/_config.js similarity index 100% rename from test/runtime/samples/key-block-static/_config.js rename to packages/svelte/test/runtime/samples/key-block-static/_config.js diff --git a/test/runtime/samples/key-block-static/main.svelte b/packages/svelte/test/runtime/samples/key-block-static/main.svelte similarity index 100% rename from test/runtime/samples/key-block-static/main.svelte rename to packages/svelte/test/runtime/samples/key-block-static/main.svelte diff --git a/packages/svelte/test/runtime/samples/key-block-transition-local/_config.js b/packages/svelte/test/runtime/samples/key-block-transition-local/_config.js new file mode 100644 index 0000000000..06cac37a8d --- /dev/null +++ b/packages/svelte/test/runtime/samples/key-block-transition-local/_config.js @@ -0,0 +1,36 @@ +export default { + get props() { + return { x: false, y: 1 }; + }, + + test({ assert, component, target, raf }) { + component.x = true; + + let div = target.querySelector('div'); + assert.equal(div.foo, undefined); + + // play both in and out transition when changed with `{#key}` + component.y = 2; + assert.htmlEqual(target.innerHTML, '
'); + const [leaving, incoming] = target.querySelectorAll('div'); + + raf.tick(50); + assert.equal(leaving.foo, 0.5); + assert.equal(incoming.foo, 0.5); + + raf.tick(100); + assert.htmlEqual(target.innerHTML, '
'); + assert.equal(leaving.foo, 0); + assert.equal(incoming.foo, 1); + + // do not play out transition when removed by `{#if}` + component.x = false; + assert.htmlEqual(target.innerHTML, ''); + + // do not play in transition when added back with `{#if}` + component.x = true; + assert.htmlEqual(target.innerHTML, '
'); + div = target.querySelector('div'); + assert.equal(div.foo, undefined); + } +}; diff --git a/test/runtime/samples/key-block-transition-local/main.svelte b/packages/svelte/test/runtime/samples/key-block-transition-local/main.svelte similarity index 100% rename from test/runtime/samples/key-block-transition-local/main.svelte rename to packages/svelte/test/runtime/samples/key-block-transition-local/main.svelte diff --git a/test/runtime/samples/key-block-transition/_config.js b/packages/svelte/test/runtime/samples/key-block-transition/_config.js similarity index 100% rename from test/runtime/samples/key-block-transition/_config.js rename to packages/svelte/test/runtime/samples/key-block-transition/_config.js diff --git a/test/runtime/samples/key-block-transition/main.svelte b/packages/svelte/test/runtime/samples/key-block-transition/main.svelte similarity index 100% rename from test/runtime/samples/key-block-transition/main.svelte rename to packages/svelte/test/runtime/samples/key-block-transition/main.svelte diff --git a/test/runtime/samples/key-block/_config.js b/packages/svelte/test/runtime/samples/key-block/_config.js similarity index 100% rename from test/runtime/samples/key-block/_config.js rename to packages/svelte/test/runtime/samples/key-block/_config.js diff --git a/test/runtime/samples/key-block/main.svelte b/packages/svelte/test/runtime/samples/key-block/main.svelte similarity index 100% rename from test/runtime/samples/key-block/main.svelte rename to packages/svelte/test/runtime/samples/key-block/main.svelte diff --git a/packages/svelte/test/runtime/samples/keyed-each-dev-unique/_config.js b/packages/svelte/test/runtime/samples/keyed-each-dev-unique/_config.js new file mode 100644 index 0000000000..9d1c5e2ac8 --- /dev/null +++ b/packages/svelte/test/runtime/samples/keyed-each-dev-unique/_config.js @@ -0,0 +1,8 @@ +export default { + compileOptions: { + dev: true + }, + + error: + "Cannot have duplicate keys in a keyed each: Keys at index 0 and 3 with value '1' are duplicates" +}; diff --git a/test/runtime/samples/keyed-each-dev-unique/main.svelte b/packages/svelte/test/runtime/samples/keyed-each-dev-unique/main.svelte similarity index 100% rename from test/runtime/samples/keyed-each-dev-unique/main.svelte rename to packages/svelte/test/runtime/samples/keyed-each-dev-unique/main.svelte diff --git a/test/runtime/samples/lifecycle-events/_config.js b/packages/svelte/test/runtime/samples/lifecycle-events/_config.js similarity index 100% rename from test/runtime/samples/lifecycle-events/_config.js rename to packages/svelte/test/runtime/samples/lifecycle-events/_config.js diff --git a/test/runtime/samples/lifecycle-events/main.svelte b/packages/svelte/test/runtime/samples/lifecycle-events/main.svelte similarity index 100% rename from test/runtime/samples/lifecycle-events/main.svelte rename to packages/svelte/test/runtime/samples/lifecycle-events/main.svelte diff --git a/packages/svelte/test/runtime/samples/lifecycle-next-tick/_config.js b/packages/svelte/test/runtime/samples/lifecycle-next-tick/_config.js new file mode 100644 index 0000000000..e5e16b8adf --- /dev/null +++ b/packages/svelte/test/runtime/samples/lifecycle-next-tick/_config.js @@ -0,0 +1,22 @@ +export default { + async test({ assert, component, target, window }) { + const buttons = target.querySelectorAll('button'); + const click = new window.MouseEvent('click'); + + await buttons[0].dispatchEvent(click); + assert.deepEqual(component.snapshots, ['before 0', 'after 1']); + + await buttons[0].dispatchEvent(click); + assert.deepEqual(component.snapshots, ['before 0', 'after 1', 'before 1', 'after 2']); + + await buttons[1].dispatchEvent(click); + assert.deepEqual(component.snapshots, [ + 'before 0', + 'after 1', + 'before 1', + 'after 2', + 'before 2', + 'after 2' + ]); + } +}; diff --git a/test/runtime/samples/lifecycle-next-tick/main.svelte b/packages/svelte/test/runtime/samples/lifecycle-next-tick/main.svelte similarity index 100% rename from test/runtime/samples/lifecycle-next-tick/main.svelte rename to packages/svelte/test/runtime/samples/lifecycle-next-tick/main.svelte diff --git a/test/runtime/samples/lifecycle-onmount-infinite-loop/Child.svelte b/packages/svelte/test/runtime/samples/lifecycle-onmount-infinite-loop/Child.svelte similarity index 100% rename from test/runtime/samples/lifecycle-onmount-infinite-loop/Child.svelte rename to packages/svelte/test/runtime/samples/lifecycle-onmount-infinite-loop/Child.svelte diff --git a/test/runtime/samples/lifecycle-onmount-infinite-loop/_config.js b/packages/svelte/test/runtime/samples/lifecycle-onmount-infinite-loop/_config.js similarity index 100% rename from test/runtime/samples/lifecycle-onmount-infinite-loop/_config.js rename to packages/svelte/test/runtime/samples/lifecycle-onmount-infinite-loop/_config.js diff --git a/test/runtime/samples/lifecycle-onmount-infinite-loop/main.svelte b/packages/svelte/test/runtime/samples/lifecycle-onmount-infinite-loop/main.svelte similarity index 100% rename from test/runtime/samples/lifecycle-onmount-infinite-loop/main.svelte rename to packages/svelte/test/runtime/samples/lifecycle-onmount-infinite-loop/main.svelte diff --git a/test/runtime/samples/lifecycle-render-order-for-children/Item.svelte b/packages/svelte/test/runtime/samples/lifecycle-render-order-for-children/Item.svelte similarity index 100% rename from test/runtime/samples/lifecycle-render-order-for-children/Item.svelte rename to packages/svelte/test/runtime/samples/lifecycle-render-order-for-children/Item.svelte diff --git a/test/runtime/samples/lifecycle-render-order-for-children/_config.js b/packages/svelte/test/runtime/samples/lifecycle-render-order-for-children/_config.js similarity index 100% rename from test/runtime/samples/lifecycle-render-order-for-children/_config.js rename to packages/svelte/test/runtime/samples/lifecycle-render-order-for-children/_config.js diff --git a/test/runtime/samples/lifecycle-render-order-for-children/main.svelte b/packages/svelte/test/runtime/samples/lifecycle-render-order-for-children/main.svelte similarity index 100% rename from test/runtime/samples/lifecycle-render-order-for-children/main.svelte rename to packages/svelte/test/runtime/samples/lifecycle-render-order-for-children/main.svelte diff --git a/test/runtime/samples/lifecycle-render-order-for-children/order.js b/packages/svelte/test/runtime/samples/lifecycle-render-order-for-children/order.js similarity index 100% rename from test/runtime/samples/lifecycle-render-order-for-children/order.js rename to packages/svelte/test/runtime/samples/lifecycle-render-order-for-children/order.js diff --git a/packages/svelte/test/runtime/samples/lifecycle-render-order/_config.js b/packages/svelte/test/runtime/samples/lifecycle-render-order/_config.js new file mode 100644 index 0000000000..612b739207 --- /dev/null +++ b/packages/svelte/test/runtime/samples/lifecycle-render-order/_config.js @@ -0,0 +1,12 @@ +import order from './order.js'; + +export default { + skip_if_ssr: true, + + before_test() { + order.length = 0; + }, + test({ assert }) { + assert.deepEqual(order, ['beforeUpdate', 'render', 'onMount', 'afterUpdate']); + } +}; diff --git a/test/runtime/samples/lifecycle-render-order/main.svelte b/packages/svelte/test/runtime/samples/lifecycle-render-order/main.svelte similarity index 100% rename from test/runtime/samples/lifecycle-render-order/main.svelte rename to packages/svelte/test/runtime/samples/lifecycle-render-order/main.svelte diff --git a/test/runtime/samples/lifecycle-render-order/order.js b/packages/svelte/test/runtime/samples/lifecycle-render-order/order.js similarity index 100% rename from test/runtime/samples/lifecycle-render-order/order.js rename to packages/svelte/test/runtime/samples/lifecycle-render-order/order.js diff --git a/test/runtime/samples/loop-protect-async-opt-out/_config.js b/packages/svelte/test/runtime/samples/loop-protect-async-opt-out/_config.js similarity index 100% rename from test/runtime/samples/loop-protect-async-opt-out/_config.js rename to packages/svelte/test/runtime/samples/loop-protect-async-opt-out/_config.js diff --git a/test/runtime/samples/loop-protect-async-opt-out/main.svelte b/packages/svelte/test/runtime/samples/loop-protect-async-opt-out/main.svelte similarity index 100% rename from test/runtime/samples/loop-protect-async-opt-out/main.svelte rename to packages/svelte/test/runtime/samples/loop-protect-async-opt-out/main.svelte diff --git a/test/runtime/samples/loop-protect-generator-opt-out/_config.js b/packages/svelte/test/runtime/samples/loop-protect-generator-opt-out/_config.js similarity index 100% rename from test/runtime/samples/loop-protect-generator-opt-out/_config.js rename to packages/svelte/test/runtime/samples/loop-protect-generator-opt-out/_config.js diff --git a/test/runtime/samples/loop-protect-generator-opt-out/main.svelte b/packages/svelte/test/runtime/samples/loop-protect-generator-opt-out/main.svelte similarity index 100% rename from test/runtime/samples/loop-protect-generator-opt-out/main.svelte rename to packages/svelte/test/runtime/samples/loop-protect-generator-opt-out/main.svelte diff --git a/test/runtime/samples/loop-protect-inner-function/_config.js b/packages/svelte/test/runtime/samples/loop-protect-inner-function/_config.js similarity index 100% rename from test/runtime/samples/loop-protect-inner-function/_config.js rename to packages/svelte/test/runtime/samples/loop-protect-inner-function/_config.js diff --git a/test/runtime/samples/loop-protect-inner-function/main.svelte b/packages/svelte/test/runtime/samples/loop-protect-inner-function/main.svelte similarity index 100% rename from test/runtime/samples/loop-protect-inner-function/main.svelte rename to packages/svelte/test/runtime/samples/loop-protect-inner-function/main.svelte diff --git a/test/runtime/samples/loop-protect/_config.js b/packages/svelte/test/runtime/samples/loop-protect/_config.js similarity index 100% rename from test/runtime/samples/loop-protect/_config.js rename to packages/svelte/test/runtime/samples/loop-protect/_config.js diff --git a/test/runtime/samples/loop-protect/main.svelte b/packages/svelte/test/runtime/samples/loop-protect/main.svelte similarity index 100% rename from test/runtime/samples/loop-protect/main.svelte rename to packages/svelte/test/runtime/samples/loop-protect/main.svelte diff --git a/packages/svelte/test/runtime/samples/mixed-let-export/_config.js b/packages/svelte/test/runtime/samples/mixed-let-export/_config.js new file mode 100644 index 0000000000..23bcf0c454 --- /dev/null +++ b/packages/svelte/test/runtime/samples/mixed-let-export/_config.js @@ -0,0 +1,9 @@ +export default { + get props() { + return { a: 42 }; + }, + + html: ` + 42 + ` +}; diff --git a/test/runtime/samples/mixed-let-export/main.svelte b/packages/svelte/test/runtime/samples/mixed-let-export/main.svelte similarity index 100% rename from test/runtime/samples/mixed-let-export/main.svelte rename to packages/svelte/test/runtime/samples/mixed-let-export/main.svelte diff --git a/test/runtime/samples/module-context-bind/_config.js b/packages/svelte/test/runtime/samples/module-context-bind/_config.js similarity index 100% rename from test/runtime/samples/module-context-bind/_config.js rename to packages/svelte/test/runtime/samples/module-context-bind/_config.js diff --git a/test/runtime/samples/module-context-bind/main.svelte b/packages/svelte/test/runtime/samples/module-context-bind/main.svelte similarity index 100% rename from test/runtime/samples/module-context-bind/main.svelte rename to packages/svelte/test/runtime/samples/module-context-bind/main.svelte diff --git a/test/runtime/samples/module-context-export/Foo.svelte b/packages/svelte/test/runtime/samples/module-context-export/Foo.svelte similarity index 100% rename from test/runtime/samples/module-context-export/Foo.svelte rename to packages/svelte/test/runtime/samples/module-context-export/Foo.svelte diff --git a/test/runtime/samples/module-context-export/_config.js b/packages/svelte/test/runtime/samples/module-context-export/_config.js similarity index 100% rename from test/runtime/samples/module-context-export/_config.js rename to packages/svelte/test/runtime/samples/module-context-export/_config.js diff --git a/test/runtime/samples/module-context-export/main.svelte b/packages/svelte/test/runtime/samples/module-context-export/main.svelte similarity index 100% rename from test/runtime/samples/module-context-export/main.svelte rename to packages/svelte/test/runtime/samples/module-context-export/main.svelte diff --git a/test/runtime/samples/module-context-with-instance-script/_config.js b/packages/svelte/test/runtime/samples/module-context-with-instance-script/_config.js similarity index 100% rename from test/runtime/samples/module-context-with-instance-script/_config.js rename to packages/svelte/test/runtime/samples/module-context-with-instance-script/_config.js diff --git a/test/runtime/samples/module-context-with-instance-script/main.svelte b/packages/svelte/test/runtime/samples/module-context-with-instance-script/main.svelte similarity index 100% rename from test/runtime/samples/module-context-with-instance-script/main.svelte rename to packages/svelte/test/runtime/samples/module-context-with-instance-script/main.svelte diff --git a/test/runtime/samples/module-context/_config.js b/packages/svelte/test/runtime/samples/module-context/_config.js similarity index 100% rename from test/runtime/samples/module-context/_config.js rename to packages/svelte/test/runtime/samples/module-context/_config.js diff --git a/test/runtime/samples/module-context/main.svelte b/packages/svelte/test/runtime/samples/module-context/main.svelte similarity index 100% rename from test/runtime/samples/module-context/main.svelte rename to packages/svelte/test/runtime/samples/module-context/main.svelte diff --git a/test/runtime/samples/mutation-tracking-across-sibling-scopes/_config.js b/packages/svelte/test/runtime/samples/mutation-tracking-across-sibling-scopes/_config.js similarity index 100% rename from test/runtime/samples/mutation-tracking-across-sibling-scopes/_config.js rename to packages/svelte/test/runtime/samples/mutation-tracking-across-sibling-scopes/_config.js diff --git a/test/runtime/samples/mutation-tracking-across-sibling-scopes/main.svelte b/packages/svelte/test/runtime/samples/mutation-tracking-across-sibling-scopes/main.svelte similarity index 100% rename from test/runtime/samples/mutation-tracking-across-sibling-scopes/main.svelte rename to packages/svelte/test/runtime/samples/mutation-tracking-across-sibling-scopes/main.svelte diff --git a/packages/svelte/test/runtime/samples/names-deconflicted-nested/_config.js b/packages/svelte/test/runtime/samples/names-deconflicted-nested/_config.js new file mode 100644 index 0000000000..ce4fd333b6 --- /dev/null +++ b/packages/svelte/test/runtime/samples/names-deconflicted-nested/_config.js @@ -0,0 +1,21 @@ +export default { + get props() { + return { + array: [ + [0, 0, 0], + [0, 0, 0], + [0, 0, 0] + ] + }; + }, + + html: ` +
+ [ 0, 0 ][ 0, 1 ][ 0, 2 ] +
+ [ 1, 0 ][ 1, 1 ][ 1, 2 ] +
+ [ 2, 0 ][ 2, 1 ][ 2, 2 ] +
+ ` +}; diff --git a/test/runtime/samples/names-deconflicted-nested/main.svelte b/packages/svelte/test/runtime/samples/names-deconflicted-nested/main.svelte similarity index 100% rename from test/runtime/samples/names-deconflicted-nested/main.svelte rename to packages/svelte/test/runtime/samples/names-deconflicted-nested/main.svelte diff --git a/test/runtime/samples/names-deconflicted/Widget.svelte b/packages/svelte/test/runtime/samples/names-deconflicted/Widget.svelte similarity index 100% rename from test/runtime/samples/names-deconflicted/Widget.svelte rename to packages/svelte/test/runtime/samples/names-deconflicted/Widget.svelte diff --git a/packages/svelte/test/runtime/samples/names-deconflicted/_config.js b/packages/svelte/test/runtime/samples/names-deconflicted/_config.js new file mode 100644 index 0000000000..54a6fa1337 --- /dev/null +++ b/packages/svelte/test/runtime/samples/names-deconflicted/_config.js @@ -0,0 +1,9 @@ +export default { + html: '

1: foo

2: bar

3: baz

', + + test({ assert, component, target }) { + component.widgets = [{ name: 'bish' }, { name: 'bosh' }]; + + assert.htmlEqual(target.innerHTML, '

1: bish

2: bosh

'); + } +}; diff --git a/test/runtime/samples/names-deconflicted/main.svelte b/packages/svelte/test/runtime/samples/names-deconflicted/main.svelte similarity index 100% rename from test/runtime/samples/names-deconflicted/main.svelte rename to packages/svelte/test/runtime/samples/names-deconflicted/main.svelte diff --git a/packages/svelte/test/runtime/samples/nbsp-div/_config.js b/packages/svelte/test/runtime/samples/nbsp-div/_config.js new file mode 100644 index 0000000000..5489360934 --- /dev/null +++ b/packages/svelte/test/runtime/samples/nbsp-div/_config.js @@ -0,0 +1,17 @@ +export default { + html: `
 hello
+
 hello  
+
 hello   hello
`, + + test({ assert, target }) { + const divList = target.querySelectorAll('div'); + assert.equal(divList[0].textContent.charCodeAt(0), 160); + assert.equal(divList[1].textContent.charCodeAt(0), 160); + assert.equal(divList[1].textContent.charCodeAt(6), 160); + assert.equal(divList[1].textContent.charCodeAt(7), 160); + assert.equal(divList[2].textContent.charCodeAt(0), 160); + assert.equal(divList[2].textContent.charCodeAt(6), 160); + assert.equal(divList[2].textContent.charCodeAt(7), 32); //normal space + assert.equal(divList[2].textContent.charCodeAt(8), 160); + } +}; diff --git a/test/runtime/samples/nbsp-div/main.svelte b/packages/svelte/test/runtime/samples/nbsp-div/main.svelte similarity index 100% rename from test/runtime/samples/nbsp-div/main.svelte rename to packages/svelte/test/runtime/samples/nbsp-div/main.svelte diff --git a/packages/svelte/test/runtime/samples/nbsp/_config.js b/packages/svelte/test/runtime/samples/nbsp/_config.js new file mode 100644 index 0000000000..712de8b127 --- /dev/null +++ b/packages/svelte/test/runtime/samples/nbsp/_config.js @@ -0,0 +1,8 @@ +export default { + html: ' ', + + test({ assert, target }) { + const text = target.querySelector('span').textContent; + assert.equal(text.charCodeAt(0), 160); + } +}; diff --git a/test/runtime/samples/nbsp/main.svelte b/packages/svelte/test/runtime/samples/nbsp/main.svelte similarity index 100% rename from test/runtime/samples/nbsp/main.svelte rename to packages/svelte/test/runtime/samples/nbsp/main.svelte diff --git a/packages/svelte/test/runtime/samples/nested-transition-detach-each/_config.js b/packages/svelte/test/runtime/samples/nested-transition-detach-each/_config.js new file mode 100644 index 0000000000..fc69414657 --- /dev/null +++ b/packages/svelte/test/runtime/samples/nested-transition-detach-each/_config.js @@ -0,0 +1,44 @@ +export default { + get props() { + return { + visible: false, + rows: [1, 2, 3], + cols: ['a', 'b', 'c'] + }; + }, + + html: '', + + compileOptions: { + dev: true + }, + + test({ assert, component, target, raf }) { + component.visible = true; + assert.htmlEqual( + target.innerHTML, + ` +
+
1, a
+
1, b
+
1, c
+
+
+
2, a
+
2, b
+
2, c
+
+
+
3, a
+
3, b
+
3, c
+
+ ` + ); + + component.visible = false; + raf.tick(0); + raf.tick(100); + assert.htmlEqual(target.innerHTML, ''); + } +}; diff --git a/test/runtime/samples/nested-transition-detach-each/main.svelte b/packages/svelte/test/runtime/samples/nested-transition-detach-each/main.svelte similarity index 100% rename from test/runtime/samples/nested-transition-detach-each/main.svelte rename to packages/svelte/test/runtime/samples/nested-transition-detach-each/main.svelte diff --git a/test/runtime/samples/nested-transition-detach-if-false/Folder.svelte b/packages/svelte/test/runtime/samples/nested-transition-detach-if-false/Folder.svelte similarity index 100% rename from test/runtime/samples/nested-transition-detach-if-false/Folder.svelte rename to packages/svelte/test/runtime/samples/nested-transition-detach-if-false/Folder.svelte diff --git a/packages/svelte/test/runtime/samples/nested-transition-detach-if-false/_config.js b/packages/svelte/test/runtime/samples/nested-transition-detach-if-false/_config.js new file mode 100644 index 0000000000..85de817a2b --- /dev/null +++ b/packages/svelte/test/runtime/samples/nested-transition-detach-if-false/_config.js @@ -0,0 +1,27 @@ +export default { + html: ` +
  • + a +
      +
    • + a/b +
        +
      • a/b/c
      • +
      +
    • +
    +
  • + `, + + test({ assert, component, target }) { + component.folder.open = false; + assert.htmlEqual( + target.innerHTML, + ` +
  • + a +
  • + ` + ); + } +}; diff --git a/test/runtime/samples/nested-transition-detach-if-false/main.svelte b/packages/svelte/test/runtime/samples/nested-transition-detach-if-false/main.svelte similarity index 100% rename from test/runtime/samples/nested-transition-detach-if-false/main.svelte rename to packages/svelte/test/runtime/samples/nested-transition-detach-if-false/main.svelte diff --git a/test/runtime/samples/nested-transition-if-block-not-remounted/Span.svelte b/packages/svelte/test/runtime/samples/nested-transition-if-block-not-remounted/Span.svelte similarity index 100% rename from test/runtime/samples/nested-transition-if-block-not-remounted/Span.svelte rename to packages/svelte/test/runtime/samples/nested-transition-if-block-not-remounted/Span.svelte diff --git a/packages/svelte/test/runtime/samples/nested-transition-if-block-not-remounted/_config.js b/packages/svelte/test/runtime/samples/nested-transition-if-block-not-remounted/_config.js new file mode 100644 index 0000000000..fe8206914f --- /dev/null +++ b/packages/svelte/test/runtime/samples/nested-transition-if-block-not-remounted/_config.js @@ -0,0 +1,22 @@ +export default { + get props() { + return { x: true, value: 'one' }; + }, + + html: ` +
    + + x +
    + `, + + test({ component, target }) { + const div = target.querySelector('div'); + + div.appendChild = div.insertBefore = () => { + throw new Error('DOM was mutated'); + }; + + component.value = 'two'; + } +}; diff --git a/test/runtime/samples/nested-transition-if-block-not-remounted/main.svelte b/packages/svelte/test/runtime/samples/nested-transition-if-block-not-remounted/main.svelte similarity index 100% rename from test/runtime/samples/nested-transition-if-block-not-remounted/main.svelte rename to packages/svelte/test/runtime/samples/nested-transition-if-block-not-remounted/main.svelte diff --git a/packages/svelte/test/runtime/samples/noscript-removal/_config.js b/packages/svelte/test/runtime/samples/noscript-removal/_config.js new file mode 100644 index 0000000000..a60a4f87b0 --- /dev/null +++ b/packages/svelte/test/runtime/samples/noscript-removal/_config.js @@ -0,0 +1,33 @@ +export default { + ssrHtml: ` + + +
    foo
    + +
    foo
    foo
    + `, + test({ assert, target, compileOptions }) { + // if created on client side, should not build noscript + if (!compileOptions.hydratable) { + assert.equal(target.querySelectorAll('noscript').length, 0); + } + + // it's okay not to remove the node during hydration + // will not be seen by user anyway + removeNoScript(target); + + assert.htmlEqual( + target.innerHTML, + ` +
    foo
    +
    foo
    foo
    + ` + ); + } +}; + +function removeNoScript(target) { + target.querySelectorAll('noscript').forEach((elem) => { + elem.parentNode.removeChild(elem); + }); +} diff --git a/test/runtime/samples/noscript-removal/main.svelte b/packages/svelte/test/runtime/samples/noscript-removal/main.svelte similarity index 100% rename from test/runtime/samples/noscript-removal/main.svelte rename to packages/svelte/test/runtime/samples/noscript-removal/main.svelte diff --git a/test/runtime/samples/observable-auto-subscribe/Nested.svelte b/packages/svelte/test/runtime/samples/observable-auto-subscribe/Nested.svelte similarity index 100% rename from test/runtime/samples/observable-auto-subscribe/Nested.svelte rename to packages/svelte/test/runtime/samples/observable-auto-subscribe/Nested.svelte diff --git a/packages/svelte/test/runtime/samples/observable-auto-subscribe/_config.js b/packages/svelte/test/runtime/samples/observable-auto-subscribe/_config.js new file mode 100644 index 0000000000..4a8c2f05ff --- /dev/null +++ b/packages/svelte/test/runtime/samples/observable-auto-subscribe/_config.js @@ -0,0 +1,51 @@ +import { tick } from 'svelte'; + +let value = 'initial'; + +let subscribers = []; +const observable = { + subscribe: (fn) => { + subscribers.push(fn); + + fn(value); + + return { + unsubscribe: () => { + const i = subscribers.indexOf(fn); + subscribers.splice(i, 1); + } + }; + } +}; + +export default { + before_test() { + value = 'initial'; + subscribers = []; + }, + + get props() { + return { observable, visible: false }; + }, + + html: '', + + async test({ assert, component, target }) { + assert.equal(subscribers.length, 0); + + component.visible = true; + + assert.equal(subscribers.length, 1); + assert.htmlEqual(target.innerHTML, '

    value: initial

    '); + value = 42; + subscribers.forEach((fn) => { + fn(value); + }); + await tick(); + assert.htmlEqual(target.innerHTML, '

    value: 42

    '); + + component.visible = false; + + assert.equal(subscribers.length, 0); + } +}; diff --git a/test/runtime/samples/observable-auto-subscribe/main.svelte b/packages/svelte/test/runtime/samples/observable-auto-subscribe/main.svelte similarity index 100% rename from test/runtime/samples/observable-auto-subscribe/main.svelte rename to packages/svelte/test/runtime/samples/observable-auto-subscribe/main.svelte diff --git a/test/runtime/samples/ondestroy-before-cleanup/Top.svelte b/packages/svelte/test/runtime/samples/ondestroy-before-cleanup/Top.svelte similarity index 100% rename from test/runtime/samples/ondestroy-before-cleanup/Top.svelte rename to packages/svelte/test/runtime/samples/ondestroy-before-cleanup/Top.svelte diff --git a/test/runtime/samples/ondestroy-before-cleanup/_config.js b/packages/svelte/test/runtime/samples/ondestroy-before-cleanup/_config.js similarity index 100% rename from test/runtime/samples/ondestroy-before-cleanup/_config.js rename to packages/svelte/test/runtime/samples/ondestroy-before-cleanup/_config.js diff --git a/test/runtime/samples/ondestroy-before-cleanup/container.js b/packages/svelte/test/runtime/samples/ondestroy-before-cleanup/container.js similarity index 100% rename from test/runtime/samples/ondestroy-before-cleanup/container.js rename to packages/svelte/test/runtime/samples/ondestroy-before-cleanup/container.js diff --git a/test/runtime/samples/ondestroy-before-cleanup/main.svelte b/packages/svelte/test/runtime/samples/ondestroy-before-cleanup/main.svelte similarity index 100% rename from test/runtime/samples/ondestroy-before-cleanup/main.svelte rename to packages/svelte/test/runtime/samples/ondestroy-before-cleanup/main.svelte diff --git a/test/runtime/samples/ondestroy-deep/A.svelte b/packages/svelte/test/runtime/samples/ondestroy-deep/A.svelte similarity index 100% rename from test/runtime/samples/ondestroy-deep/A.svelte rename to packages/svelte/test/runtime/samples/ondestroy-deep/A.svelte diff --git a/test/runtime/samples/ondestroy-deep/B.svelte b/packages/svelte/test/runtime/samples/ondestroy-deep/B.svelte similarity index 100% rename from test/runtime/samples/ondestroy-deep/B.svelte rename to packages/svelte/test/runtime/samples/ondestroy-deep/B.svelte diff --git a/test/runtime/samples/ondestroy-deep/C.svelte b/packages/svelte/test/runtime/samples/ondestroy-deep/C.svelte similarity index 100% rename from test/runtime/samples/ondestroy-deep/C.svelte rename to packages/svelte/test/runtime/samples/ondestroy-deep/C.svelte diff --git a/test/runtime/samples/ondestroy-deep/_config.js b/packages/svelte/test/runtime/samples/ondestroy-deep/_config.js similarity index 100% rename from test/runtime/samples/ondestroy-deep/_config.js rename to packages/svelte/test/runtime/samples/ondestroy-deep/_config.js diff --git a/packages/svelte/test/runtime/samples/ondestroy-deep/destroyed.js b/packages/svelte/test/runtime/samples/ondestroy-deep/destroyed.js new file mode 100644 index 0000000000..7bfde507e9 --- /dev/null +++ b/packages/svelte/test/runtime/samples/ondestroy-deep/destroyed.js @@ -0,0 +1,3 @@ +export const destroyed = []; + +export const reset = () => (destroyed.length = 0); diff --git a/test/runtime/samples/ondestroy-deep/main.svelte b/packages/svelte/test/runtime/samples/ondestroy-deep/main.svelte similarity index 100% rename from test/runtime/samples/ondestroy-deep/main.svelte rename to packages/svelte/test/runtime/samples/ondestroy-deep/main.svelte diff --git a/packages/svelte/test/runtime/samples/onmount-async/_config.js b/packages/svelte/test/runtime/samples/onmount-async/_config.js new file mode 100644 index 0000000000..ff85896d2e --- /dev/null +++ b/packages/svelte/test/runtime/samples/onmount-async/_config.js @@ -0,0 +1,3 @@ +export default { + skip: +/^v(\d+)/.exec(process.version)[1] < 8 +}; diff --git a/test/runtime/samples/onmount-async/main.svelte b/packages/svelte/test/runtime/samples/onmount-async/main.svelte similarity index 100% rename from test/runtime/samples/onmount-async/main.svelte rename to packages/svelte/test/runtime/samples/onmount-async/main.svelte diff --git a/test/runtime/samples/onmount-fires-when-ready-nested/ParentWidget.svelte b/packages/svelte/test/runtime/samples/onmount-fires-when-ready-nested/ParentWidget.svelte similarity index 100% rename from test/runtime/samples/onmount-fires-when-ready-nested/ParentWidget.svelte rename to packages/svelte/test/runtime/samples/onmount-fires-when-ready-nested/ParentWidget.svelte diff --git a/test/runtime/samples/onmount-fires-when-ready-nested/Widget.svelte b/packages/svelte/test/runtime/samples/onmount-fires-when-ready-nested/Widget.svelte similarity index 100% rename from test/runtime/samples/onmount-fires-when-ready-nested/Widget.svelte rename to packages/svelte/test/runtime/samples/onmount-fires-when-ready-nested/Widget.svelte diff --git a/test/runtime/samples/onmount-fires-when-ready-nested/_config.js b/packages/svelte/test/runtime/samples/onmount-fires-when-ready-nested/_config.js similarity index 100% rename from test/runtime/samples/onmount-fires-when-ready-nested/_config.js rename to packages/svelte/test/runtime/samples/onmount-fires-when-ready-nested/_config.js diff --git a/test/runtime/samples/onmount-fires-when-ready-nested/main.svelte b/packages/svelte/test/runtime/samples/onmount-fires-when-ready-nested/main.svelte similarity index 100% rename from test/runtime/samples/onmount-fires-when-ready-nested/main.svelte rename to packages/svelte/test/runtime/samples/onmount-fires-when-ready-nested/main.svelte diff --git a/test/runtime/samples/onmount-fires-when-ready/Widget.svelte b/packages/svelte/test/runtime/samples/onmount-fires-when-ready/Widget.svelte similarity index 100% rename from test/runtime/samples/onmount-fires-when-ready/Widget.svelte rename to packages/svelte/test/runtime/samples/onmount-fires-when-ready/Widget.svelte diff --git a/test/runtime/samples/onmount-fires-when-ready/_config.js b/packages/svelte/test/runtime/samples/onmount-fires-when-ready/_config.js similarity index 100% rename from test/runtime/samples/onmount-fires-when-ready/_config.js rename to packages/svelte/test/runtime/samples/onmount-fires-when-ready/_config.js diff --git a/test/runtime/samples/onmount-fires-when-ready/main.svelte b/packages/svelte/test/runtime/samples/onmount-fires-when-ready/main.svelte similarity index 100% rename from test/runtime/samples/onmount-fires-when-ready/main.svelte rename to packages/svelte/test/runtime/samples/onmount-fires-when-ready/main.svelte diff --git a/test/runtime/samples/onmount-get-current-component/_config.js b/packages/svelte/test/runtime/samples/onmount-get-current-component/_config.js similarity index 100% rename from test/runtime/samples/onmount-get-current-component/_config.js rename to packages/svelte/test/runtime/samples/onmount-get-current-component/_config.js diff --git a/test/runtime/samples/onmount-get-current-component/main.svelte b/packages/svelte/test/runtime/samples/onmount-get-current-component/main.svelte similarity index 100% rename from test/runtime/samples/onmount-get-current-component/main.svelte rename to packages/svelte/test/runtime/samples/onmount-get-current-component/main.svelte diff --git a/test/runtime/samples/onmount-sibling-order/Nested.svelte b/packages/svelte/test/runtime/samples/onmount-sibling-order/Nested.svelte similarity index 100% rename from test/runtime/samples/onmount-sibling-order/Nested.svelte rename to packages/svelte/test/runtime/samples/onmount-sibling-order/Nested.svelte diff --git a/packages/svelte/test/runtime/samples/onmount-sibling-order/_config.js b/packages/svelte/test/runtime/samples/onmount-sibling-order/_config.js new file mode 100644 index 0000000000..eac73d1fb1 --- /dev/null +++ b/packages/svelte/test/runtime/samples/onmount-sibling-order/_config.js @@ -0,0 +1,13 @@ +import result from './result.js'; + +export default { + // TODO is sibling onMount order important? + skip: true, + + test({ assert }) { + assert.deepEqual(result, ['onMount foo', 'onMount bar']); + + result.pop(); + result.pop(); + } +}; diff --git a/test/runtime/samples/onmount-sibling-order/main.svelte b/packages/svelte/test/runtime/samples/onmount-sibling-order/main.svelte similarity index 100% rename from test/runtime/samples/onmount-sibling-order/main.svelte rename to packages/svelte/test/runtime/samples/onmount-sibling-order/main.svelte diff --git a/test/runtime/samples/onmount-sibling-order/result.js b/packages/svelte/test/runtime/samples/onmount-sibling-order/result.js similarity index 100% rename from test/runtime/samples/onmount-sibling-order/result.js rename to packages/svelte/test/runtime/samples/onmount-sibling-order/result.js diff --git a/packages/svelte/test/runtime/samples/option-without-select/_config.js b/packages/svelte/test/runtime/samples/option-without-select/_config.js new file mode 100644 index 0000000000..e1d45f03bb --- /dev/null +++ b/packages/svelte/test/runtime/samples/option-without-select/_config.js @@ -0,0 +1,17 @@ +export default { + get props() { + return { foo: 'hello' }; + }, + + html: "", + + test({ assert, component, target }) { + component.foo = 'goodbye'; + assert.htmlEqual( + target.innerHTML, + ` + + ` + ); + } +}; diff --git a/test/runtime/samples/option-without-select/main.svelte b/packages/svelte/test/runtime/samples/option-without-select/main.svelte similarity index 100% rename from test/runtime/samples/option-without-select/main.svelte rename to packages/svelte/test/runtime/samples/option-without-select/main.svelte diff --git a/packages/svelte/test/runtime/samples/paren-wrapped-expressions/_config.js b/packages/svelte/test/runtime/samples/paren-wrapped-expressions/_config.js new file mode 100644 index 0000000000..400c638c07 --- /dev/null +++ b/packages/svelte/test/runtime/samples/paren-wrapped-expressions/_config.js @@ -0,0 +1,14 @@ +export default { + get props() { + return { a: 'foo', b: true, c: [1, 2, 3] }; + }, + + html: ` + foo + + true + 1 + 2 + 3 + ` +}; diff --git a/test/runtime/samples/paren-wrapped-expressions/main.svelte b/packages/svelte/test/runtime/samples/paren-wrapped-expressions/main.svelte similarity index 100% rename from test/runtime/samples/paren-wrapped-expressions/main.svelte rename to packages/svelte/test/runtime/samples/paren-wrapped-expressions/main.svelte diff --git a/test/runtime/samples/pre-tag/.editorconfig b/packages/svelte/test/runtime/samples/pre-tag/.editorconfig similarity index 100% rename from test/runtime/samples/pre-tag/.editorconfig rename to packages/svelte/test/runtime/samples/pre-tag/.editorconfig diff --git a/packages/svelte/test/runtime/samples/pre-tag/_config.js b/packages/svelte/test/runtime/samples/pre-tag/_config.js new file mode 100644 index 0000000000..7560441dc0 --- /dev/null +++ b/packages/svelte/test/runtime/samples/pre-tag/_config.js @@ -0,0 +1,41 @@ +export default { + withoutNormalizeHtml: true, + html: get_html(false), + ssrHtml: get_html(true) +}; + +function get_html(ssr) { + // ssr rendered HTML has an extra newline prefixed within `
    ` tag,
    +	// if the 
     tag starts with `\n`
    +	// because when browser parses the SSR rendered HTML, it will ignore the 1st '\n' character
    +	return `
      A
    +  B
    +  
    +    C
    +    D
    +  
    +  E
    +  F
    +
    A + B + C + D + E + F
        A
    +    B
    +    
    +      C
    +      D
    +    
    +    E
    +    F
    +  
    leading newline
      leading newline and spaces
    ${
    +		ssr ? '\n' : ''
    +	}
    +leading newlines
    without spaces
      with spaces  
     
    +newline after leading space
    ${
    +		ssr ? '\n' : ''
    +	}
    +
    +multiple leading newlines
    `; +} diff --git a/test/runtime/samples/pre-tag/main.svelte b/packages/svelte/test/runtime/samples/pre-tag/main.svelte similarity index 100% rename from test/runtime/samples/pre-tag/main.svelte rename to packages/svelte/test/runtime/samples/pre-tag/main.svelte diff --git a/test/runtime/samples/preload/_config.js b/packages/svelte/test/runtime/samples/preload/_config.js similarity index 100% rename from test/runtime/samples/preload/_config.js rename to packages/svelte/test/runtime/samples/preload/_config.js diff --git a/test/runtime/samples/preload/main.svelte b/packages/svelte/test/runtime/samples/preload/main.svelte similarity index 100% rename from test/runtime/samples/preload/main.svelte rename to packages/svelte/test/runtime/samples/preload/main.svelte diff --git a/packages/svelte/test/runtime/samples/preserve-whitespaces/_config.js b/packages/svelte/test/runtime/samples/preserve-whitespaces/_config.js new file mode 100644 index 0000000000..ed08764e13 --- /dev/null +++ b/packages/svelte/test/runtime/samples/preserve-whitespaces/_config.js @@ -0,0 +1,38 @@ +export default { + compileOptions: { + preserveWhitespace: true + }, + + html: `
      A
    +  B
    +  
    +    C
    +    D
    +  
    +  E
    +  F
    +
    + +
    + A + B + + C + D + + E + F +
    + +
    +
        A
    +    B
    +    
    +      C
    +      D
    +    
    +    E
    +    F
    +  
    +
    ` +}; diff --git a/test/runtime/samples/preserve-whitespaces/main.svelte b/packages/svelte/test/runtime/samples/preserve-whitespaces/main.svelte similarity index 100% rename from test/runtime/samples/preserve-whitespaces/main.svelte rename to packages/svelte/test/runtime/samples/preserve-whitespaces/main.svelte diff --git a/packages/svelte/test/runtime/samples/prop-accessors/_config.js b/packages/svelte/test/runtime/samples/prop-accessors/_config.js new file mode 100644 index 0000000000..247d27ecaf --- /dev/null +++ b/packages/svelte/test/runtime/samples/prop-accessors/_config.js @@ -0,0 +1,16 @@ +export default { + accessors: false, + test({ assert, component }) { + assert.equal(component.foo1, 42); + assert.equal(component.foo2(), 42); + assert.equal(component.bar, undefined); + + assert.throws(() => { + component.foo1 = null; + }, /Cannot set property foo1 of/); + + assert.throws(() => { + component.foo2 = null; + }, /Cannot set property foo2 of/); + } +}; diff --git a/test/runtime/samples/prop-accessors/main.svelte b/packages/svelte/test/runtime/samples/prop-accessors/main.svelte similarity index 100% rename from test/runtime/samples/prop-accessors/main.svelte rename to packages/svelte/test/runtime/samples/prop-accessors/main.svelte diff --git a/test/runtime/samples/prop-const/Nested.svelte b/packages/svelte/test/runtime/samples/prop-const/Nested.svelte similarity index 100% rename from test/runtime/samples/prop-const/Nested.svelte rename to packages/svelte/test/runtime/samples/prop-const/Nested.svelte diff --git a/packages/svelte/test/runtime/samples/prop-const/_config.js b/packages/svelte/test/runtime/samples/prop-const/_config.js new file mode 100644 index 0000000000..56e0087cd3 --- /dev/null +++ b/packages/svelte/test/runtime/samples/prop-const/_config.js @@ -0,0 +1,25 @@ +export default { + get props() { + return { a: 3, b: 4 }; + }, + + html: ` +

    a: 3

    +

    b: 2

    + `, + + async test({ assert, component, target }) { + await component.$set({ + a: 5, + b: 6 + }); + + assert.htmlEqual( + target.innerHTML, + ` +

    a: 5

    +

    b: 2

    + ` + ); + } +}; diff --git a/test/runtime/samples/prop-const/main.svelte b/packages/svelte/test/runtime/samples/prop-const/main.svelte similarity index 100% rename from test/runtime/samples/prop-const/main.svelte rename to packages/svelte/test/runtime/samples/prop-const/main.svelte diff --git a/packages/svelte/test/runtime/samples/prop-exports/_config.js b/packages/svelte/test/runtime/samples/prop-exports/_config.js new file mode 100644 index 0000000000..4bcd1c769c --- /dev/null +++ b/packages/svelte/test/runtime/samples/prop-exports/_config.js @@ -0,0 +1,32 @@ +import { writable } from 'svelte/store'; + +export default { + get props() { + return { + s1: writable(42), + s2: writable(43), + p1: 2, + p3: 3, + a1: writable(1), + a2: 4, + a6: writable(29), + for: 'loop', + continue: '...' + }; + }, + + html: ` + $s1=42 + $s2=43 + p1=2 + p3=3 + $v1=1 + v2=4 + vi1=4 + $vs1=1 + vl0=hello + vl1=test + $s3=29 + loop... + ` +}; diff --git a/test/runtime/samples/prop-exports/main.svelte b/packages/svelte/test/runtime/samples/prop-exports/main.svelte similarity index 100% rename from test/runtime/samples/prop-exports/main.svelte rename to packages/svelte/test/runtime/samples/prop-exports/main.svelte diff --git a/test/runtime/samples/prop-not-action/Nested.svelte b/packages/svelte/test/runtime/samples/prop-not-action/Nested.svelte similarity index 100% rename from test/runtime/samples/prop-not-action/Nested.svelte rename to packages/svelte/test/runtime/samples/prop-not-action/Nested.svelte diff --git a/packages/svelte/test/runtime/samples/prop-not-action/_config.js b/packages/svelte/test/runtime/samples/prop-not-action/_config.js new file mode 100644 index 0000000000..ce036cbd0e --- /dev/null +++ b/packages/svelte/test/runtime/samples/prop-not-action/_config.js @@ -0,0 +1,9 @@ +export default { + get props() { + return { currentUser: { name: 'world' } }; + }, + + html: ` +

    Hello world!

    + ` +}; diff --git a/test/runtime/samples/prop-not-action/main.svelte b/packages/svelte/test/runtime/samples/prop-not-action/main.svelte similarity index 100% rename from test/runtime/samples/prop-not-action/main.svelte rename to packages/svelte/test/runtime/samples/prop-not-action/main.svelte diff --git a/test/runtime/samples/prop-quoted/Nested.svelte b/packages/svelte/test/runtime/samples/prop-quoted/Nested.svelte similarity index 100% rename from test/runtime/samples/prop-quoted/Nested.svelte rename to packages/svelte/test/runtime/samples/prop-quoted/Nested.svelte diff --git a/packages/svelte/test/runtime/samples/prop-quoted/_config.js b/packages/svelte/test/runtime/samples/prop-quoted/_config.js new file mode 100644 index 0000000000..99f97961e3 --- /dev/null +++ b/packages/svelte/test/runtime/samples/prop-quoted/_config.js @@ -0,0 +1,12 @@ +export default { + get props() { + return { foo: 1 }; + }, + + html: '1', + + async test({ assert, component, target }) { + component.foo = 2; + assert.htmlEqual(target.innerHTML, '2'); + } +}; diff --git a/test/runtime/samples/prop-quoted/main.svelte b/packages/svelte/test/runtime/samples/prop-quoted/main.svelte similarity index 100% rename from test/runtime/samples/prop-quoted/main.svelte rename to packages/svelte/test/runtime/samples/prop-quoted/main.svelte diff --git a/packages/svelte/test/runtime/samples/prop-subscribable/_config.js b/packages/svelte/test/runtime/samples/prop-subscribable/_config.js new file mode 100644 index 0000000000..bbe76c8170 --- /dev/null +++ b/packages/svelte/test/runtime/samples/prop-subscribable/_config.js @@ -0,0 +1,11 @@ +import { writable } from 'svelte/store'; + +export default { + get props() { + return { b: writable(42) }; + }, + + html: ` + 42 + ` +}; diff --git a/test/runtime/samples/prop-subscribable/main.svelte b/packages/svelte/test/runtime/samples/prop-subscribable/main.svelte similarity index 100% rename from test/runtime/samples/prop-subscribable/main.svelte rename to packages/svelte/test/runtime/samples/prop-subscribable/main.svelte diff --git a/packages/svelte/test/runtime/samples/prop-without-semicolon-b/_config.js b/packages/svelte/test/runtime/samples/prop-without-semicolon-b/_config.js new file mode 100644 index 0000000000..613951c9b8 --- /dev/null +++ b/packages/svelte/test/runtime/samples/prop-without-semicolon-b/_config.js @@ -0,0 +1,7 @@ +export default { + get props() { + return { name: 'world' }; + }, + + html: '

    Hello world!

    ' +}; diff --git a/test/runtime/samples/prop-without-semicolon-b/main.svelte b/packages/svelte/test/runtime/samples/prop-without-semicolon-b/main.svelte similarity index 100% rename from test/runtime/samples/prop-without-semicolon-b/main.svelte rename to packages/svelte/test/runtime/samples/prop-without-semicolon-b/main.svelte diff --git a/test/runtime/samples/prop-without-semicolon/_config.js b/packages/svelte/test/runtime/samples/prop-without-semicolon/_config.js similarity index 100% rename from test/runtime/samples/prop-without-semicolon/_config.js rename to packages/svelte/test/runtime/samples/prop-without-semicolon/_config.js diff --git a/test/runtime/samples/prop-without-semicolon/main.svelte b/packages/svelte/test/runtime/samples/prop-without-semicolon/main.svelte similarity index 100% rename from test/runtime/samples/prop-without-semicolon/main.svelte rename to packages/svelte/test/runtime/samples/prop-without-semicolon/main.svelte diff --git a/packages/svelte/test/runtime/samples/props-reactive-b/_config.js b/packages/svelte/test/runtime/samples/props-reactive-b/_config.js new file mode 100644 index 0000000000..3bc2d8d672 --- /dev/null +++ b/packages/svelte/test/runtime/samples/props-reactive-b/_config.js @@ -0,0 +1,35 @@ +export default { + get props() { + return { a: 1, b: 2 }; + }, + + html: ` +

    a: 1

    +

    b: 2

    +

    c: 3

    + `, + + async test({ assert, component, target }) { + await component.$set({ a: 4 }); + + assert.htmlEqual( + target.innerHTML, + ` +

    a: 4

    +

    b: 2

    +

    c: 6

    + ` + ); + + await component.$set({ b: 5 }); + + assert.htmlEqual( + target.innerHTML, + ` +

    a: 4

    +

    b: 5

    +

    c: 9

    + ` + ); + } +}; diff --git a/test/runtime/samples/props-reactive-b/main.svelte b/packages/svelte/test/runtime/samples/props-reactive-b/main.svelte similarity index 100% rename from test/runtime/samples/props-reactive-b/main.svelte rename to packages/svelte/test/runtime/samples/props-reactive-b/main.svelte diff --git a/test/runtime/samples/props-reactive-only-with-change/Comp.svelte b/packages/svelte/test/runtime/samples/props-reactive-only-with-change/Comp.svelte similarity index 100% rename from test/runtime/samples/props-reactive-only-with-change/Comp.svelte rename to packages/svelte/test/runtime/samples/props-reactive-only-with-change/Comp.svelte diff --git a/packages/svelte/test/runtime/samples/props-reactive-only-with-change/_config.js b/packages/svelte/test/runtime/samples/props-reactive-only-with-change/_config.js new file mode 100644 index 0000000000..922059adf9 --- /dev/null +++ b/packages/svelte/test/runtime/samples/props-reactive-only-with-change/_config.js @@ -0,0 +1,32 @@ +let callbacks = []; + +export default { + get props() { + return { + callback: (value) => callbacks.push(value), + val1: '1', + val2: '2' + }; + }, + + before_test() { + callbacks = []; + }, + + async test({ assert, component }) { + assert.equal(callbacks.length, 2); + assert.equal(JSON.stringify(callbacks), '["1","2"]'); + + component.val1 = '3'; + assert.equal(callbacks.length, 3); + assert.equal(JSON.stringify(callbacks), '["1","2","1"]'); + + component.val1 = '4'; + assert.equal(callbacks.length, 4); + assert.equal(JSON.stringify(callbacks), '["1","2","1","1"]'); + + component.val2 = '5'; + assert.equal(callbacks.length, 5); + assert.equal(JSON.stringify(callbacks), '["1","2","1","1","2"]'); + } +}; diff --git a/test/runtime/samples/props-reactive-only-with-change/main.svelte b/packages/svelte/test/runtime/samples/props-reactive-only-with-change/main.svelte similarity index 100% rename from test/runtime/samples/props-reactive-only-with-change/main.svelte rename to packages/svelte/test/runtime/samples/props-reactive-only-with-change/main.svelte diff --git a/test/runtime/samples/props-reactive-slot/Comp.svelte b/packages/svelte/test/runtime/samples/props-reactive-slot/Comp.svelte similarity index 100% rename from test/runtime/samples/props-reactive-slot/Comp.svelte rename to packages/svelte/test/runtime/samples/props-reactive-slot/Comp.svelte diff --git a/test/runtime/samples/props-reactive-slot/_config.js b/packages/svelte/test/runtime/samples/props-reactive-slot/_config.js similarity index 100% rename from test/runtime/samples/props-reactive-slot/_config.js rename to packages/svelte/test/runtime/samples/props-reactive-slot/_config.js diff --git a/test/runtime/samples/props-reactive-slot/main.svelte b/packages/svelte/test/runtime/samples/props-reactive-slot/main.svelte similarity index 100% rename from test/runtime/samples/props-reactive-slot/main.svelte rename to packages/svelte/test/runtime/samples/props-reactive-slot/main.svelte diff --git a/test/runtime/samples/props-reactive/Nested.svelte b/packages/svelte/test/runtime/samples/props-reactive/Nested.svelte similarity index 100% rename from test/runtime/samples/props-reactive/Nested.svelte rename to packages/svelte/test/runtime/samples/props-reactive/Nested.svelte diff --git a/packages/svelte/test/runtime/samples/props-reactive/_config.js b/packages/svelte/test/runtime/samples/props-reactive/_config.js new file mode 100644 index 0000000000..b2190b665f --- /dev/null +++ b/packages/svelte/test/runtime/samples/props-reactive/_config.js @@ -0,0 +1,20 @@ +export default { + get props() { + return { a: 1, b: 2, c: 3, d: 4 }; + }, + + html: ` +

    4

    + `, + + test({ assert, component, target }) { + component.d = 5; + + assert.htmlEqual( + target.innerHTML, + ` +

    5

    + ` + ); + } +}; diff --git a/test/runtime/samples/props-reactive/main.svelte b/packages/svelte/test/runtime/samples/props-reactive/main.svelte similarity index 100% rename from test/runtime/samples/props-reactive/main.svelte rename to packages/svelte/test/runtime/samples/props-reactive/main.svelte diff --git a/test/runtime/samples/props/RenderProps.svelte b/packages/svelte/test/runtime/samples/props/RenderProps.svelte similarity index 100% rename from test/runtime/samples/props/RenderProps.svelte rename to packages/svelte/test/runtime/samples/props/RenderProps.svelte diff --git a/packages/svelte/test/runtime/samples/props/_config.js b/packages/svelte/test/runtime/samples/props/_config.js new file mode 100644 index 0000000000..b63cc47441 --- /dev/null +++ b/packages/svelte/test/runtime/samples/props/_config.js @@ -0,0 +1,20 @@ +export default { + get props() { + return { x: 1 }; + }, + + html: ` +

    {"x":1}

    + `, + + test({ assert, component, target }) { + component.x = 2; + + assert.htmlEqual( + target.innerHTML, + ` +

    {"x":2}

    + ` + ); + } +}; diff --git a/test/runtime/samples/props/main.svelte b/packages/svelte/test/runtime/samples/props/main.svelte similarity index 100% rename from test/runtime/samples/props/main.svelte rename to packages/svelte/test/runtime/samples/props/main.svelte diff --git a/packages/svelte/test/runtime/samples/raw-anchor-first-child/_config.js b/packages/svelte/test/runtime/samples/raw-anchor-first-child/_config.js new file mode 100644 index 0000000000..cec7aaba01 --- /dev/null +++ b/packages/svelte/test/runtime/samples/raw-anchor-first-child/_config.js @@ -0,0 +1,13 @@ +export default { + get props() { + return { raw: 'foo' }; + }, + + test({ assert, component, target }) { + const span = target.querySelector('span'); + assert.ok(!span.previousSibling); + + component.raw = 'bar'; + assert.htmlEqual(target.innerHTML, '
    bar
    '); + } +}; diff --git a/test/runtime/samples/raw-anchor-first-child/main.svelte b/packages/svelte/test/runtime/samples/raw-anchor-first-child/main.svelte similarity index 100% rename from test/runtime/samples/raw-anchor-first-child/main.svelte rename to packages/svelte/test/runtime/samples/raw-anchor-first-child/main.svelte diff --git a/packages/svelte/test/runtime/samples/raw-anchor-first-last-child/_config.js b/packages/svelte/test/runtime/samples/raw-anchor-first-last-child/_config.js new file mode 100644 index 0000000000..7c08b02967 --- /dev/null +++ b/packages/svelte/test/runtime/samples/raw-anchor-first-last-child/_config.js @@ -0,0 +1,13 @@ +export default { + get props() { + return { raw: 'foo' }; + }, + + test({ assert, component, target }) { + const span = target.querySelector('span'); + assert.ok(!span.previousSibling); + assert.ok(!span.nextSibling); + + component.raw = 'bar'; + } +}; diff --git a/test/runtime/samples/raw-anchor-first-last-child/main.svelte b/packages/svelte/test/runtime/samples/raw-anchor-first-last-child/main.svelte similarity index 100% rename from test/runtime/samples/raw-anchor-first-last-child/main.svelte rename to packages/svelte/test/runtime/samples/raw-anchor-first-last-child/main.svelte diff --git a/packages/svelte/test/runtime/samples/raw-anchor-last-child/_config.js b/packages/svelte/test/runtime/samples/raw-anchor-last-child/_config.js new file mode 100644 index 0000000000..4aa93c686d --- /dev/null +++ b/packages/svelte/test/runtime/samples/raw-anchor-last-child/_config.js @@ -0,0 +1,12 @@ +export default { + get props() { + return { raw: 'foo' }; + }, + + test({ assert, component, target }) { + const span = target.querySelector('span'); + assert.ok(!span.nextSibling); + + component.raw = 'bar'; + } +}; diff --git a/test/runtime/samples/raw-anchor-last-child/main.svelte b/packages/svelte/test/runtime/samples/raw-anchor-last-child/main.svelte similarity index 100% rename from test/runtime/samples/raw-anchor-last-child/main.svelte rename to packages/svelte/test/runtime/samples/raw-anchor-last-child/main.svelte diff --git a/packages/svelte/test/runtime/samples/raw-anchor-next-previous-sibling/_config.js b/packages/svelte/test/runtime/samples/raw-anchor-next-previous-sibling/_config.js new file mode 100644 index 0000000000..5f9d6e5ac5 --- /dev/null +++ b/packages/svelte/test/runtime/samples/raw-anchor-next-previous-sibling/_config.js @@ -0,0 +1,13 @@ +export default { + get props() { + return { raw: 'foo' }; + }, + + test({ assert, component, target }) { + const span = target.querySelector('span'); + assert.equal(span.previousSibling.nodeName, 'BR'); + assert.equal(span.nextSibling.nodeName, 'BR'); + + component.raw = 'bar'; + } +}; diff --git a/test/runtime/samples/raw-anchor-next-previous-sibling/main.svelte b/packages/svelte/test/runtime/samples/raw-anchor-next-previous-sibling/main.svelte similarity index 100% rename from test/runtime/samples/raw-anchor-next-previous-sibling/main.svelte rename to packages/svelte/test/runtime/samples/raw-anchor-next-previous-sibling/main.svelte diff --git a/packages/svelte/test/runtime/samples/raw-anchor-next-sibling/_config.js b/packages/svelte/test/runtime/samples/raw-anchor-next-sibling/_config.js new file mode 100644 index 0000000000..6d6c032f71 --- /dev/null +++ b/packages/svelte/test/runtime/samples/raw-anchor-next-sibling/_config.js @@ -0,0 +1,12 @@ +export default { + get props() { + return { raw: 'foo' }; + }, + + test({ assert, component, target }) { + const span = target.querySelector('span'); + assert.equal(span.previousSibling.nodeName, 'BR'); + + component.raw = 'bar'; + } +}; diff --git a/test/runtime/samples/raw-anchor-next-sibling/main.svelte b/packages/svelte/test/runtime/samples/raw-anchor-next-sibling/main.svelte similarity index 100% rename from test/runtime/samples/raw-anchor-next-sibling/main.svelte rename to packages/svelte/test/runtime/samples/raw-anchor-next-sibling/main.svelte diff --git a/packages/svelte/test/runtime/samples/raw-anchor-previous-sibling/_config.js b/packages/svelte/test/runtime/samples/raw-anchor-previous-sibling/_config.js new file mode 100644 index 0000000000..6d6c032f71 --- /dev/null +++ b/packages/svelte/test/runtime/samples/raw-anchor-previous-sibling/_config.js @@ -0,0 +1,12 @@ +export default { + get props() { + return { raw: 'foo' }; + }, + + test({ assert, component, target }) { + const span = target.querySelector('span'); + assert.equal(span.previousSibling.nodeName, 'BR'); + + component.raw = 'bar'; + } +}; diff --git a/test/runtime/samples/raw-anchor-previous-sibling/main.svelte b/packages/svelte/test/runtime/samples/raw-anchor-previous-sibling/main.svelte similarity index 100% rename from test/runtime/samples/raw-anchor-previous-sibling/main.svelte rename to packages/svelte/test/runtime/samples/raw-anchor-previous-sibling/main.svelte diff --git a/test/runtime/samples/raw-mustache-as-root/RawMustache.svelte b/packages/svelte/test/runtime/samples/raw-mustache-as-root/RawMustache.svelte similarity index 100% rename from test/runtime/samples/raw-mustache-as-root/RawMustache.svelte rename to packages/svelte/test/runtime/samples/raw-mustache-as-root/RawMustache.svelte diff --git a/test/runtime/samples/raw-mustache-as-root/_config.js b/packages/svelte/test/runtime/samples/raw-mustache-as-root/_config.js similarity index 100% rename from test/runtime/samples/raw-mustache-as-root/_config.js rename to packages/svelte/test/runtime/samples/raw-mustache-as-root/_config.js diff --git a/test/runtime/samples/raw-mustache-as-root/main.svelte b/packages/svelte/test/runtime/samples/raw-mustache-as-root/main.svelte similarity index 100% rename from test/runtime/samples/raw-mustache-as-root/main.svelte rename to packages/svelte/test/runtime/samples/raw-mustache-as-root/main.svelte diff --git a/test/runtime/samples/raw-mustache-before-element/_config.js b/packages/svelte/test/runtime/samples/raw-mustache-before-element/_config.js similarity index 100% rename from test/runtime/samples/raw-mustache-before-element/_config.js rename to packages/svelte/test/runtime/samples/raw-mustache-before-element/_config.js diff --git a/test/runtime/samples/raw-mustache-before-element/main.svelte b/packages/svelte/test/runtime/samples/raw-mustache-before-element/main.svelte similarity index 100% rename from test/runtime/samples/raw-mustache-before-element/main.svelte rename to packages/svelte/test/runtime/samples/raw-mustache-before-element/main.svelte diff --git a/packages/svelte/test/runtime/samples/raw-mustache-inside-head/_config.js b/packages/svelte/test/runtime/samples/raw-mustache-inside-head/_config.js new file mode 100644 index 0000000000..f478d186be --- /dev/null +++ b/packages/svelte/test/runtime/samples/raw-mustache-inside-head/_config.js @@ -0,0 +1,31 @@ +export default { + async test({ assert, target, window }) { + const btn = target.querySelector('button'); + const clickEvent = new window.MouseEvent('click'); + + assert.equal( + window.document.head.innerHTML.includes( + '' + ), + true + ); + + await btn.dispatchEvent(clickEvent); + + assert.equal( + window.document.head.innerHTML.includes( + '' + ), + true + ); + + await btn.dispatchEvent(clickEvent); + + assert.equal( + window.document.head.innerHTML.includes( + '' + ), + true + ); + } +}; diff --git a/test/runtime/samples/raw-mustache-inside-head/main.svelte b/packages/svelte/test/runtime/samples/raw-mustache-inside-head/main.svelte similarity index 100% rename from test/runtime/samples/raw-mustache-inside-head/main.svelte rename to packages/svelte/test/runtime/samples/raw-mustache-inside-head/main.svelte diff --git a/test/runtime/samples/raw-mustache-inside-slot/Component.svelte b/packages/svelte/test/runtime/samples/raw-mustache-inside-slot/Component.svelte similarity index 100% rename from test/runtime/samples/raw-mustache-inside-slot/Component.svelte rename to packages/svelte/test/runtime/samples/raw-mustache-inside-slot/Component.svelte diff --git a/test/runtime/samples/raw-mustache-inside-slot/_config.js b/packages/svelte/test/runtime/samples/raw-mustache-inside-slot/_config.js similarity index 100% rename from test/runtime/samples/raw-mustache-inside-slot/_config.js rename to packages/svelte/test/runtime/samples/raw-mustache-inside-slot/_config.js diff --git a/test/runtime/samples/raw-mustache-inside-slot/main.svelte b/packages/svelte/test/runtime/samples/raw-mustache-inside-slot/main.svelte similarity index 100% rename from test/runtime/samples/raw-mustache-inside-slot/main.svelte rename to packages/svelte/test/runtime/samples/raw-mustache-inside-slot/main.svelte diff --git a/packages/svelte/test/runtime/samples/raw-mustaches-preserved/_config.js b/packages/svelte/test/runtime/samples/raw-mustaches-preserved/_config.js new file mode 100644 index 0000000000..d5c4a00641 --- /dev/null +++ b/packages/svelte/test/runtime/samples/raw-mustaches-preserved/_config.js @@ -0,0 +1,19 @@ +export default { + skip_if_ssr: true, + + get props() { + return { raw: '

    does not change

    ' }; + }, + + html: '

    does not change

    ', + + test({ assert, component, target }) { + const p = target.querySelector('p'); + + component.raw = '

    does not change

    '; + assert.htmlEqualWithOptions(target.innerHTML, '

    does not change

    ', { + withoutNormalizeHtml: true + }); + assert.strictEqual(target.querySelector('p'), p); + } +}; diff --git a/test/runtime/samples/raw-mustaches-preserved/main.svelte b/packages/svelte/test/runtime/samples/raw-mustaches-preserved/main.svelte similarity index 100% rename from test/runtime/samples/raw-mustaches-preserved/main.svelte rename to packages/svelte/test/runtime/samples/raw-mustaches-preserved/main.svelte diff --git a/packages/svelte/test/runtime/samples/raw-mustaches-td-tr/_config.js b/packages/svelte/test/runtime/samples/raw-mustaches-td-tr/_config.js new file mode 100644 index 0000000000..c4cc857184 --- /dev/null +++ b/packages/svelte/test/runtime/samples/raw-mustaches-td-tr/_config.js @@ -0,0 +1,18 @@ +export default { + get props() { + return { raw: '12' }; + }, + + html: ` + + + + + + + + + +
    57
    12
    + ` +}; diff --git a/test/runtime/samples/raw-mustaches-td-tr/main.svelte b/packages/svelte/test/runtime/samples/raw-mustaches-td-tr/main.svelte similarity index 100% rename from test/runtime/samples/raw-mustaches-td-tr/main.svelte rename to packages/svelte/test/runtime/samples/raw-mustaches-td-tr/main.svelte diff --git a/packages/svelte/test/runtime/samples/raw-mustaches/_config.js b/packages/svelte/test/runtime/samples/raw-mustaches/_config.js new file mode 100644 index 0000000000..1102068885 --- /dev/null +++ b/packages/svelte/test/runtime/samples/raw-mustaches/_config.js @@ -0,0 +1,18 @@ +export default { + get props() { + return { + raw: 'raw html!!!\\o/' + }; + }, + + html: 'beforeraw html!!!\\o/after', + + test({ assert, component, target }) { + component.raw = ''; + assert.equal(target.innerHTML, 'beforeafter'); + component.raw = 'how about unclosed elements?'; + assert.equal(target.innerHTML, 'beforehow about unclosed elements?after'); + component.$destroy(); + assert.equal(target.innerHTML, ''); + } +}; diff --git a/test/runtime/samples/raw-mustaches/main.svelte b/packages/svelte/test/runtime/samples/raw-mustaches/main.svelte similarity index 100% rename from test/runtime/samples/raw-mustaches/main.svelte rename to packages/svelte/test/runtime/samples/raw-mustaches/main.svelte diff --git a/packages/svelte/test/runtime/samples/raw-svg/_config.js b/packages/svelte/test/runtime/samples/raw-svg/_config.js new file mode 100644 index 0000000000..7744c8bdd1 --- /dev/null +++ b/packages/svelte/test/runtime/samples/raw-svg/_config.js @@ -0,0 +1,10 @@ +export default { + html: '', + + test({ assert, component, target }) { + component.show = true; + assert.equal(target.innerHTML, ''); + assert.instanceOf(target.querySelector('svg'), SVGElement); + assert.instanceOf(target.querySelector('circle'), SVGElement); + } +}; diff --git a/packages/svelte/test/runtime/samples/raw-svg/main.svelte b/packages/svelte/test/runtime/samples/raw-svg/main.svelte new file mode 100644 index 0000000000..248fa9125d --- /dev/null +++ b/packages/svelte/test/runtime/samples/raw-svg/main.svelte @@ -0,0 +1,7 @@ + + +{#if show} + {@html ''} +{/if} diff --git a/test/runtime/samples/reactive-assignment-in-assignment-rhs/_config.js b/packages/svelte/test/runtime/samples/reactive-assignment-in-assignment-rhs/_config.js similarity index 100% rename from test/runtime/samples/reactive-assignment-in-assignment-rhs/_config.js rename to packages/svelte/test/runtime/samples/reactive-assignment-in-assignment-rhs/_config.js diff --git a/test/runtime/samples/reactive-assignment-in-assignment-rhs/main.svelte b/packages/svelte/test/runtime/samples/reactive-assignment-in-assignment-rhs/main.svelte similarity index 100% rename from test/runtime/samples/reactive-assignment-in-assignment-rhs/main.svelte rename to packages/svelte/test/runtime/samples/reactive-assignment-in-assignment-rhs/main.svelte diff --git a/test/runtime/samples/reactive-assignment-in-complex-declaration-with-store-2/_config.js b/packages/svelte/test/runtime/samples/reactive-assignment-in-complex-declaration-with-store-2/_config.js similarity index 100% rename from test/runtime/samples/reactive-assignment-in-complex-declaration-with-store-2/_config.js rename to packages/svelte/test/runtime/samples/reactive-assignment-in-complex-declaration-with-store-2/_config.js diff --git a/test/runtime/samples/reactive-assignment-in-complex-declaration-with-store-2/main.svelte b/packages/svelte/test/runtime/samples/reactive-assignment-in-complex-declaration-with-store-2/main.svelte similarity index 100% rename from test/runtime/samples/reactive-assignment-in-complex-declaration-with-store-2/main.svelte rename to packages/svelte/test/runtime/samples/reactive-assignment-in-complex-declaration-with-store-2/main.svelte diff --git a/test/runtime/samples/reactive-assignment-in-complex-declaration-with-store-3/_config.js b/packages/svelte/test/runtime/samples/reactive-assignment-in-complex-declaration-with-store-3/_config.js similarity index 100% rename from test/runtime/samples/reactive-assignment-in-complex-declaration-with-store-3/_config.js rename to packages/svelte/test/runtime/samples/reactive-assignment-in-complex-declaration-with-store-3/_config.js diff --git a/test/runtime/samples/reactive-assignment-in-complex-declaration-with-store-3/main.svelte b/packages/svelte/test/runtime/samples/reactive-assignment-in-complex-declaration-with-store-3/main.svelte similarity index 100% rename from test/runtime/samples/reactive-assignment-in-complex-declaration-with-store-3/main.svelte rename to packages/svelte/test/runtime/samples/reactive-assignment-in-complex-declaration-with-store-3/main.svelte diff --git a/packages/svelte/test/runtime/samples/reactive-assignment-in-complex-declaration-with-store-3/store.js b/packages/svelte/test/runtime/samples/reactive-assignment-in-complex-declaration-with-store-3/store.js new file mode 100644 index 0000000000..262665017e --- /dev/null +++ b/packages/svelte/test/runtime/samples/reactive-assignment-in-complex-declaration-with-store-3/store.js @@ -0,0 +1,18 @@ +import { writable } from 'svelte/store'; +const _store = writable(0); +let count = 0; + +export const store = { + ..._store, + subscribe(fn) { + count++; + return _store.subscribe(fn); + }, + reset() { + count = 0; + _store.set(0); + }, + numberOfTimesSubscribeCalled() { + return count; + } +}; diff --git a/test/runtime/samples/reactive-assignment-in-complex-declaration-with-store/_config.js b/packages/svelte/test/runtime/samples/reactive-assignment-in-complex-declaration-with-store/_config.js similarity index 100% rename from test/runtime/samples/reactive-assignment-in-complex-declaration-with-store/_config.js rename to packages/svelte/test/runtime/samples/reactive-assignment-in-complex-declaration-with-store/_config.js diff --git a/test/runtime/samples/reactive-assignment-in-complex-declaration-with-store/main.svelte b/packages/svelte/test/runtime/samples/reactive-assignment-in-complex-declaration-with-store/main.svelte similarity index 100% rename from test/runtime/samples/reactive-assignment-in-complex-declaration-with-store/main.svelte rename to packages/svelte/test/runtime/samples/reactive-assignment-in-complex-declaration-with-store/main.svelte diff --git a/test/runtime/samples/reactive-assignment-in-complex-declaration/_config.js b/packages/svelte/test/runtime/samples/reactive-assignment-in-complex-declaration/_config.js similarity index 100% rename from test/runtime/samples/reactive-assignment-in-complex-declaration/_config.js rename to packages/svelte/test/runtime/samples/reactive-assignment-in-complex-declaration/_config.js diff --git a/test/runtime/samples/reactive-assignment-in-complex-declaration/main.svelte b/packages/svelte/test/runtime/samples/reactive-assignment-in-complex-declaration/main.svelte similarity index 100% rename from test/runtime/samples/reactive-assignment-in-complex-declaration/main.svelte rename to packages/svelte/test/runtime/samples/reactive-assignment-in-complex-declaration/main.svelte diff --git a/test/runtime/samples/reactive-assignment-in-declaration/_config.js b/packages/svelte/test/runtime/samples/reactive-assignment-in-declaration/_config.js similarity index 100% rename from test/runtime/samples/reactive-assignment-in-declaration/_config.js rename to packages/svelte/test/runtime/samples/reactive-assignment-in-declaration/_config.js diff --git a/test/runtime/samples/reactive-assignment-in-declaration/main.svelte b/packages/svelte/test/runtime/samples/reactive-assignment-in-declaration/main.svelte similarity index 100% rename from test/runtime/samples/reactive-assignment-in-declaration/main.svelte rename to packages/svelte/test/runtime/samples/reactive-assignment-in-declaration/main.svelte diff --git a/test/runtime/samples/reactive-assignment-in-for-loop-head/_config.js b/packages/svelte/test/runtime/samples/reactive-assignment-in-for-loop-head/_config.js similarity index 100% rename from test/runtime/samples/reactive-assignment-in-for-loop-head/_config.js rename to packages/svelte/test/runtime/samples/reactive-assignment-in-for-loop-head/_config.js diff --git a/test/runtime/samples/reactive-assignment-in-for-loop-head/main.svelte b/packages/svelte/test/runtime/samples/reactive-assignment-in-for-loop-head/main.svelte similarity index 100% rename from test/runtime/samples/reactive-assignment-in-for-loop-head/main.svelte rename to packages/svelte/test/runtime/samples/reactive-assignment-in-for-loop-head/main.svelte diff --git a/test/runtime/samples/reactive-block-break/_config.js b/packages/svelte/test/runtime/samples/reactive-block-break/_config.js similarity index 100% rename from test/runtime/samples/reactive-block-break/_config.js rename to packages/svelte/test/runtime/samples/reactive-block-break/_config.js diff --git a/test/runtime/samples/reactive-block-break/main.svelte b/packages/svelte/test/runtime/samples/reactive-block-break/main.svelte similarity index 100% rename from test/runtime/samples/reactive-block-break/main.svelte rename to packages/svelte/test/runtime/samples/reactive-block-break/main.svelte diff --git a/packages/svelte/test/runtime/samples/reactive-compound-operator/_config.js b/packages/svelte/test/runtime/samples/reactive-compound-operator/_config.js new file mode 100644 index 0000000000..692400b9dc --- /dev/null +++ b/packages/svelte/test/runtime/samples/reactive-compound-operator/_config.js @@ -0,0 +1,33 @@ +export default { + html: ` + +

    count: 0

    + `, + + async test({ assert, component, target, window }) { + const click = new window.MouseEvent('click'); + const button = target.querySelector('button'); + + await button.dispatchEvent(click); + + assert.equal(component.x, 2); + assert.htmlEqual( + target.innerHTML, + ` + +

    count: 2

    + ` + ); + + await button.dispatchEvent(click); + + assert.equal(component.x, 6); + assert.htmlEqual( + target.innerHTML, + ` + +

    count: 6

    + ` + ); + } +}; diff --git a/test/runtime/samples/reactive-compound-operator/main.svelte b/packages/svelte/test/runtime/samples/reactive-compound-operator/main.svelte similarity index 100% rename from test/runtime/samples/reactive-compound-operator/main.svelte rename to packages/svelte/test/runtime/samples/reactive-compound-operator/main.svelte diff --git a/packages/svelte/test/runtime/samples/reactive-function-called-reassigned/_config.js b/packages/svelte/test/runtime/samples/reactive-function-called-reassigned/_config.js new file mode 100644 index 0000000000..d653adcf97 --- /dev/null +++ b/packages/svelte/test/runtime/samples/reactive-function-called-reassigned/_config.js @@ -0,0 +1,30 @@ +let value; +let called = 0; +function callback(_value) { + called++; + value = _value; +} + +export default { + get props() { + return { callback }; + }, + before_test() { + called = 0; + }, + async test({ assert, target, window }) { + assert.equal(called, 1); + + const input = target.querySelector('input'); + + const event = new window.Event('input'); + input.value = 'h'; + await input.dispatchEvent(event); + + assert.equal(called, 2); + assert.equal(value.length, 3); + assert.equal(value[0], 'h'); + assert.equal(value[1], '2'); + assert.equal(value[2], '3'); + } +}; diff --git a/test/runtime/samples/reactive-function-called-reassigned/main.svelte b/packages/svelte/test/runtime/samples/reactive-function-called-reassigned/main.svelte similarity index 100% rename from test/runtime/samples/reactive-function-called-reassigned/main.svelte rename to packages/svelte/test/runtime/samples/reactive-function-called-reassigned/main.svelte diff --git a/test/runtime/samples/reactive-function-inline/_config.js b/packages/svelte/test/runtime/samples/reactive-function-inline/_config.js similarity index 100% rename from test/runtime/samples/reactive-function-inline/_config.js rename to packages/svelte/test/runtime/samples/reactive-function-inline/_config.js diff --git a/test/runtime/samples/reactive-function-inline/main.svelte b/packages/svelte/test/runtime/samples/reactive-function-inline/main.svelte similarity index 100% rename from test/runtime/samples/reactive-function-inline/main.svelte rename to packages/svelte/test/runtime/samples/reactive-function-inline/main.svelte diff --git a/test/runtime/samples/reactive-function/_config.js b/packages/svelte/test/runtime/samples/reactive-function/_config.js similarity index 100% rename from test/runtime/samples/reactive-function/_config.js rename to packages/svelte/test/runtime/samples/reactive-function/_config.js diff --git a/test/runtime/samples/reactive-function/main.svelte b/packages/svelte/test/runtime/samples/reactive-function/main.svelte similarity index 100% rename from test/runtime/samples/reactive-function/main.svelte rename to packages/svelte/test/runtime/samples/reactive-function/main.svelte diff --git a/test/runtime/samples/reactive-import-statement-2/_config.js b/packages/svelte/test/runtime/samples/reactive-import-statement-2/_config.js similarity index 100% rename from test/runtime/samples/reactive-import-statement-2/_config.js rename to packages/svelte/test/runtime/samples/reactive-import-statement-2/_config.js diff --git a/test/runtime/samples/reactive-import-statement-2/data.js b/packages/svelte/test/runtime/samples/reactive-import-statement-2/data.js similarity index 100% rename from test/runtime/samples/reactive-import-statement-2/data.js rename to packages/svelte/test/runtime/samples/reactive-import-statement-2/data.js diff --git a/test/runtime/samples/reactive-import-statement-2/main.svelte b/packages/svelte/test/runtime/samples/reactive-import-statement-2/main.svelte similarity index 100% rename from test/runtime/samples/reactive-import-statement-2/main.svelte rename to packages/svelte/test/runtime/samples/reactive-import-statement-2/main.svelte diff --git a/packages/svelte/test/runtime/samples/reactive-import-statement/_config.js b/packages/svelte/test/runtime/samples/reactive-import-statement/_config.js new file mode 100644 index 0000000000..1160919839 --- /dev/null +++ b/packages/svelte/test/runtime/samples/reactive-import-statement/_config.js @@ -0,0 +1,44 @@ +import { reset_numbers } from './data'; + +export default { + html: ` + import +

    1 + 2 + 3 + 4 = 10

    + local +

    1 + 2 + 3 + 4 = 10

    + + `, + before_test() { + reset_numbers(); + }, + async test({ assert, target, window }) { + const btn = target.querySelector('button'); + const clickEvent = new window.MouseEvent('click'); + + await btn.dispatchEvent(clickEvent); + + assert.htmlEqual( + target.innerHTML, + ` + import +

    1 + 2 + 3 + 4 + 5 = 15

    + local +

    1 + 2 + 3 + 4 + 5 = 15

    + + ` + ); + + await btn.dispatchEvent(clickEvent); + + assert.htmlEqual( + target.innerHTML, + ` + import +

    1 + 2 + 3 + 4 + 5 + 6 = 21

    + local +

    1 + 2 + 3 + 4 + 5 + 6 = 21

    + + ` + ); + } +}; diff --git a/packages/svelte/test/runtime/samples/reactive-import-statement/data.js b/packages/svelte/test/runtime/samples/reactive-import-statement/data.js new file mode 100644 index 0000000000..a45bb69310 --- /dev/null +++ b/packages/svelte/test/runtime/samples/reactive-import-statement/data.js @@ -0,0 +1,5 @@ +export let numbers = [1, 2, 3, 4]; + +export function reset_numbers() { + numbers = [1, 2, 3, 4]; +} diff --git a/test/runtime/samples/reactive-import-statement/main.svelte b/packages/svelte/test/runtime/samples/reactive-import-statement/main.svelte similarity index 100% rename from test/runtime/samples/reactive-import-statement/main.svelte rename to packages/svelte/test/runtime/samples/reactive-import-statement/main.svelte diff --git a/packages/svelte/test/runtime/samples/reactive-statement-indirect/_config.js b/packages/svelte/test/runtime/samples/reactive-statement-indirect/_config.js new file mode 100644 index 0000000000..ff41a7eb34 --- /dev/null +++ b/packages/svelte/test/runtime/samples/reactive-statement-indirect/_config.js @@ -0,0 +1,17 @@ +export default { + html: ` +

    2

    + + `, + async test({ assert, target }) { + await target.querySelector('button').dispatchEvent(new window.MouseEvent('click')); + + assert.htmlEqual( + target.innerHTML, + ` +

    4

    + + ` + ); + } +}; diff --git a/test/runtime/samples/reactive-statement-indirect/main.svelte b/packages/svelte/test/runtime/samples/reactive-statement-indirect/main.svelte similarity index 100% rename from test/runtime/samples/reactive-statement-indirect/main.svelte rename to packages/svelte/test/runtime/samples/reactive-statement-indirect/main.svelte diff --git a/packages/svelte/test/runtime/samples/reactive-statement-module-vars/_config.js b/packages/svelte/test/runtime/samples/reactive-statement-module-vars/_config.js new file mode 100644 index 0000000000..67f13af3e2 --- /dev/null +++ b/packages/svelte/test/runtime/samples/reactive-statement-module-vars/_config.js @@ -0,0 +1,21 @@ +export default { + html: ` + a: moduleA + b: moduleB + moduleA: moduleA + moduleB: moduleB + `, + async test({ assert, target, component }) { + await component.updateModuleA(); + + assert.htmlEqual( + target.innerHTML, + ` + a: moduleA + b: moduleB + moduleA: moduleA + moduleB: moduleB + ` + ); + } +}; diff --git a/test/runtime/samples/reactive-statement-module-vars/main.svelte b/packages/svelte/test/runtime/samples/reactive-statement-module-vars/main.svelte similarity index 100% rename from test/runtime/samples/reactive-statement-module-vars/main.svelte rename to packages/svelte/test/runtime/samples/reactive-statement-module-vars/main.svelte diff --git a/packages/svelte/test/runtime/samples/reactive-update-expression/_config.js b/packages/svelte/test/runtime/samples/reactive-update-expression/_config.js new file mode 100644 index 0000000000..8e973fb5ec --- /dev/null +++ b/packages/svelte/test/runtime/samples/reactive-update-expression/_config.js @@ -0,0 +1,35 @@ +export default { + html: ` + +

    count: 1

    + `, + + async test({ assert, component, target, window }) { + const click = new window.MouseEvent('click'); + const button = target.querySelector('button'); + + assert.equal(component.x, 1); + + await button.dispatchEvent(click); + + assert.equal(component.x, 3); + assert.htmlEqual( + target.innerHTML, + ` + +

    count: 3

    + ` + ); + + await button.dispatchEvent(click); + + assert.equal(component.x, 5); + assert.htmlEqual( + target.innerHTML, + ` + +

    count: 5

    + ` + ); + } +}; diff --git a/test/runtime/samples/reactive-update-expression/main.svelte b/packages/svelte/test/runtime/samples/reactive-update-expression/main.svelte similarity index 100% rename from test/runtime/samples/reactive-update-expression/main.svelte rename to packages/svelte/test/runtime/samples/reactive-update-expression/main.svelte diff --git a/test/runtime/samples/reactive-value-assign-property/_config.js b/packages/svelte/test/runtime/samples/reactive-value-assign-property/_config.js similarity index 100% rename from test/runtime/samples/reactive-value-assign-property/_config.js rename to packages/svelte/test/runtime/samples/reactive-value-assign-property/_config.js diff --git a/test/runtime/samples/reactive-value-assign-property/main.svelte b/packages/svelte/test/runtime/samples/reactive-value-assign-property/main.svelte similarity index 100% rename from test/runtime/samples/reactive-value-assign-property/main.svelte rename to packages/svelte/test/runtime/samples/reactive-value-assign-property/main.svelte diff --git a/test/runtime/samples/reactive-value-coerce-precedence/_config.js b/packages/svelte/test/runtime/samples/reactive-value-coerce-precedence/_config.js similarity index 100% rename from test/runtime/samples/reactive-value-coerce-precedence/_config.js rename to packages/svelte/test/runtime/samples/reactive-value-coerce-precedence/_config.js diff --git a/test/runtime/samples/reactive-value-coerce-precedence/main.svelte b/packages/svelte/test/runtime/samples/reactive-value-coerce-precedence/main.svelte similarity index 100% rename from test/runtime/samples/reactive-value-coerce-precedence/main.svelte rename to packages/svelte/test/runtime/samples/reactive-value-coerce-precedence/main.svelte diff --git a/test/runtime/samples/reactive-value-coerce/_config.js b/packages/svelte/test/runtime/samples/reactive-value-coerce/_config.js similarity index 100% rename from test/runtime/samples/reactive-value-coerce/_config.js rename to packages/svelte/test/runtime/samples/reactive-value-coerce/_config.js diff --git a/test/runtime/samples/reactive-value-coerce/main.svelte b/packages/svelte/test/runtime/samples/reactive-value-coerce/main.svelte similarity index 100% rename from test/runtime/samples/reactive-value-coerce/main.svelte rename to packages/svelte/test/runtime/samples/reactive-value-coerce/main.svelte diff --git a/test/runtime/samples/reactive-value-dependency-not-referenced/_config.js b/packages/svelte/test/runtime/samples/reactive-value-dependency-not-referenced/_config.js similarity index 100% rename from test/runtime/samples/reactive-value-dependency-not-referenced/_config.js rename to packages/svelte/test/runtime/samples/reactive-value-dependency-not-referenced/_config.js diff --git a/test/runtime/samples/reactive-value-dependency-not-referenced/main.svelte b/packages/svelte/test/runtime/samples/reactive-value-dependency-not-referenced/main.svelte similarity index 100% rename from test/runtime/samples/reactive-value-dependency-not-referenced/main.svelte rename to packages/svelte/test/runtime/samples/reactive-value-dependency-not-referenced/main.svelte diff --git a/packages/svelte/test/runtime/samples/reactive-value-function-hoist-b/_config.js b/packages/svelte/test/runtime/samples/reactive-value-function-hoist-b/_config.js new file mode 100644 index 0000000000..112fa2a954 --- /dev/null +++ b/packages/svelte/test/runtime/samples/reactive-value-function-hoist-b/_config.js @@ -0,0 +1,18 @@ +export default { + html: ` + + `, + + async test({ assert, target, window }) { + const event = new window.MouseEvent('click'); + const button = target.querySelector('button'); + + await button.dispatchEvent(event); + assert.htmlEqual( + target.innerHTML, + ` + + ` + ); + } +}; diff --git a/test/runtime/samples/reactive-value-function-hoist-b/main.svelte b/packages/svelte/test/runtime/samples/reactive-value-function-hoist-b/main.svelte similarity index 100% rename from test/runtime/samples/reactive-value-function-hoist-b/main.svelte rename to packages/svelte/test/runtime/samples/reactive-value-function-hoist-b/main.svelte diff --git a/packages/svelte/test/runtime/samples/reactive-value-function-hoist/_config.js b/packages/svelte/test/runtime/samples/reactive-value-function-hoist/_config.js new file mode 100644 index 0000000000..3d0e7f1e41 --- /dev/null +++ b/packages/svelte/test/runtime/samples/reactive-value-function-hoist/_config.js @@ -0,0 +1,18 @@ +export default { + html: ` + + `, + + async test({ assert, target, window }) { + const event = new window.MouseEvent('click'); + const button = target.querySelector('button'); + + await button.dispatchEvent(event); + assert.htmlEqual( + target.innerHTML, + ` + + ` + ); + } +}; diff --git a/test/runtime/samples/reactive-value-function-hoist/main.svelte b/packages/svelte/test/runtime/samples/reactive-value-function-hoist/main.svelte similarity index 100% rename from test/runtime/samples/reactive-value-function-hoist/main.svelte rename to packages/svelte/test/runtime/samples/reactive-value-function-hoist/main.svelte diff --git a/test/runtime/samples/reactive-value-function/_config.js b/packages/svelte/test/runtime/samples/reactive-value-function/_config.js similarity index 100% rename from test/runtime/samples/reactive-value-function/_config.js rename to packages/svelte/test/runtime/samples/reactive-value-function/_config.js diff --git a/test/runtime/samples/reactive-value-function/main.svelte b/packages/svelte/test/runtime/samples/reactive-value-function/main.svelte similarity index 100% rename from test/runtime/samples/reactive-value-function/main.svelte rename to packages/svelte/test/runtime/samples/reactive-value-function/main.svelte diff --git a/packages/svelte/test/runtime/samples/reactive-value-mutate-const/_config.js b/packages/svelte/test/runtime/samples/reactive-value-mutate-const/_config.js new file mode 100644 index 0000000000..efe1eba6df --- /dev/null +++ b/packages/svelte/test/runtime/samples/reactive-value-mutate-const/_config.js @@ -0,0 +1,20 @@ +export default { + html: ` + +
    {}
    + `, + + async test({ assert, target }) { + const button = target.querySelector('button'); + const click = new window.MouseEvent('click'); + + await button.dispatchEvent(click); + assert.htmlEqual( + target.innerHTML, + ` + +
    {"foo":42}
    + ` + ); + } +}; diff --git a/test/runtime/samples/reactive-value-mutate-const/main.svelte b/packages/svelte/test/runtime/samples/reactive-value-mutate-const/main.svelte similarity index 100% rename from test/runtime/samples/reactive-value-mutate-const/main.svelte rename to packages/svelte/test/runtime/samples/reactive-value-mutate-const/main.svelte diff --git a/test/runtime/samples/reactive-value-mutate/_config.js b/packages/svelte/test/runtime/samples/reactive-value-mutate/_config.js similarity index 100% rename from test/runtime/samples/reactive-value-mutate/_config.js rename to packages/svelte/test/runtime/samples/reactive-value-mutate/_config.js diff --git a/test/runtime/samples/reactive-value-mutate/main.svelte b/packages/svelte/test/runtime/samples/reactive-value-mutate/main.svelte similarity index 100% rename from test/runtime/samples/reactive-value-mutate/main.svelte rename to packages/svelte/test/runtime/samples/reactive-value-mutate/main.svelte diff --git a/packages/svelte/test/runtime/samples/reactive-values-deconflicted/_config.js b/packages/svelte/test/runtime/samples/reactive-values-deconflicted/_config.js new file mode 100644 index 0000000000..57ffcb20e9 --- /dev/null +++ b/packages/svelte/test/runtime/samples/reactive-values-deconflicted/_config.js @@ -0,0 +1,13 @@ +export default { + html: 'waiting', + + test({ assert, component, target }) { + component.x = 'ready'; + assert.htmlEqual( + target.innerHTML, + ` + ready + ` + ); + } +}; diff --git a/test/runtime/samples/reactive-values-deconflicted/main.svelte b/packages/svelte/test/runtime/samples/reactive-values-deconflicted/main.svelte similarity index 100% rename from test/runtime/samples/reactive-values-deconflicted/main.svelte rename to packages/svelte/test/runtime/samples/reactive-values-deconflicted/main.svelte diff --git a/packages/svelte/test/runtime/samples/reactive-values-exported/_config.js b/packages/svelte/test/runtime/samples/reactive-values-exported/_config.js new file mode 100644 index 0000000000..2a3ea59621 --- /dev/null +++ b/packages/svelte/test/runtime/samples/reactive-values-exported/_config.js @@ -0,0 +1,18 @@ +export default { + get props() { + return { x: 1 }; + }, + + html: ` +

    1 1 1

    + `, + + test({ assert, component }) { + assert.equal(component.y, 1); + assert.equal(component.z, 1); + + component.x = 2; + assert.equal(component.y, 2); + assert.equal(component.z, 2); + } +}; diff --git a/test/runtime/samples/reactive-values-exported/main.svelte b/packages/svelte/test/runtime/samples/reactive-values-exported/main.svelte similarity index 100% rename from test/runtime/samples/reactive-values-exported/main.svelte rename to packages/svelte/test/runtime/samples/reactive-values-exported/main.svelte diff --git a/packages/svelte/test/runtime/samples/reactive-values-fixed/_config.js b/packages/svelte/test/runtime/samples/reactive-values-fixed/_config.js new file mode 100644 index 0000000000..7eb2d4a648 --- /dev/null +++ b/packages/svelte/test/runtime/samples/reactive-values-fixed/_config.js @@ -0,0 +1,14 @@ +export default { + html: ` +

    4

    + `, + + test({ assert, target }) { + assert.htmlEqual( + target.innerHTML, + ` +

    4

    + ` + ); + } +}; diff --git a/test/runtime/samples/reactive-values-fixed/main.svelte b/packages/svelte/test/runtime/samples/reactive-values-fixed/main.svelte similarity index 100% rename from test/runtime/samples/reactive-values-fixed/main.svelte rename to packages/svelte/test/runtime/samples/reactive-values-fixed/main.svelte diff --git a/test/runtime/samples/reactive-values-function-dependency/_config.js b/packages/svelte/test/runtime/samples/reactive-values-function-dependency/_config.js similarity index 100% rename from test/runtime/samples/reactive-values-function-dependency/_config.js rename to packages/svelte/test/runtime/samples/reactive-values-function-dependency/_config.js diff --git a/test/runtime/samples/reactive-values-function-dependency/main.svelte b/packages/svelte/test/runtime/samples/reactive-values-function-dependency/main.svelte similarity index 100% rename from test/runtime/samples/reactive-values-function-dependency/main.svelte rename to packages/svelte/test/runtime/samples/reactive-values-function-dependency/main.svelte diff --git a/packages/svelte/test/runtime/samples/reactive-values-implicit-destructured/_config.js b/packages/svelte/test/runtime/samples/reactive-values-implicit-destructured/_config.js new file mode 100644 index 0000000000..7b05808c6a --- /dev/null +++ b/packages/svelte/test/runtime/samples/reactive-values-implicit-destructured/_config.js @@ -0,0 +1,30 @@ +export default { + get props() { + return { coords: [0, 0], numbers: { answer: 42 } }; + }, + + html: ` +

    0,0

    +

    42

    + `, + + test({ assert, component, target }) { + component.coords = [1, 2]; + assert.htmlEqual( + target.innerHTML, + ` +

    1,2

    +

    42

    + ` + ); + + component.numbers = { answer: 43 }; + assert.htmlEqual( + target.innerHTML, + ` +

    1,2

    +

    43

    + ` + ); + } +}; diff --git a/test/runtime/samples/reactive-values-implicit-destructured/main.svelte b/packages/svelte/test/runtime/samples/reactive-values-implicit-destructured/main.svelte similarity index 100% rename from test/runtime/samples/reactive-values-implicit-destructured/main.svelte rename to packages/svelte/test/runtime/samples/reactive-values-implicit-destructured/main.svelte diff --git a/packages/svelte/test/runtime/samples/reactive-values-implicit-self-dependency/_config.js b/packages/svelte/test/runtime/samples/reactive-values-implicit-self-dependency/_config.js new file mode 100644 index 0000000000..bbf6723ece --- /dev/null +++ b/packages/svelte/test/runtime/samples/reactive-values-implicit-self-dependency/_config.js @@ -0,0 +1,25 @@ +export default { + html: ` +

    1 / 1

    + `, + + test({ assert, component, target }) { + component.num = 3; + + assert.htmlEqual( + target.innerHTML, + ` +

    3 / 3

    + ` + ); + + component.num = 2; + + assert.htmlEqual( + target.innerHTML, + ` +

    2 / 3

    + ` + ); + } +}; diff --git a/test/runtime/samples/reactive-values-implicit-self-dependency/main.svelte b/packages/svelte/test/runtime/samples/reactive-values-implicit-self-dependency/main.svelte similarity index 100% rename from test/runtime/samples/reactive-values-implicit-self-dependency/main.svelte rename to packages/svelte/test/runtime/samples/reactive-values-implicit-self-dependency/main.svelte diff --git a/packages/svelte/test/runtime/samples/reactive-values-implicit/_config.js b/packages/svelte/test/runtime/samples/reactive-values-implicit/_config.js new file mode 100644 index 0000000000..e0f10f8935 --- /dev/null +++ b/packages/svelte/test/runtime/samples/reactive-values-implicit/_config.js @@ -0,0 +1,17 @@ +export default { + html: ` +

    1 + 2 = 3

    +

    3 * 3 = 9

    + `, + + test({ assert, component, target }) { + component.a = 3; + assert.htmlEqual( + target.innerHTML, + ` +

    3 + 2 = 5

    +

    5 * 5 = 25

    + ` + ); + } +}; diff --git a/test/runtime/samples/reactive-values-implicit/main.svelte b/packages/svelte/test/runtime/samples/reactive-values-implicit/main.svelte similarity index 100% rename from test/runtime/samples/reactive-values-implicit/main.svelte rename to packages/svelte/test/runtime/samples/reactive-values-implicit/main.svelte diff --git a/packages/svelte/test/runtime/samples/reactive-values-no-dependencies/_config.js b/packages/svelte/test/runtime/samples/reactive-values-no-dependencies/_config.js new file mode 100644 index 0000000000..5e18619a3a --- /dev/null +++ b/packages/svelte/test/runtime/samples/reactive-values-no-dependencies/_config.js @@ -0,0 +1,15 @@ +export default { + html: ` +

    10 - 90

    + `, + + test({ assert, component, target }) { + component.width = 50; + assert.htmlEqual( + target.innerHTML, + ` +

    10 - 40

    + ` + ); + } +}; diff --git a/test/runtime/samples/reactive-values-no-dependencies/main.svelte b/packages/svelte/test/runtime/samples/reactive-values-no-dependencies/main.svelte similarity index 100% rename from test/runtime/samples/reactive-values-no-dependencies/main.svelte rename to packages/svelte/test/runtime/samples/reactive-values-no-dependencies/main.svelte diff --git a/test/runtime/samples/reactive-values-no-implicit-member-expression/_config.js b/packages/svelte/test/runtime/samples/reactive-values-no-implicit-member-expression/_config.js similarity index 100% rename from test/runtime/samples/reactive-values-no-implicit-member-expression/_config.js rename to packages/svelte/test/runtime/samples/reactive-values-no-implicit-member-expression/_config.js diff --git a/test/runtime/samples/reactive-values-no-implicit-member-expression/main.svelte b/packages/svelte/test/runtime/samples/reactive-values-no-implicit-member-expression/main.svelte similarity index 100% rename from test/runtime/samples/reactive-values-no-implicit-member-expression/main.svelte rename to packages/svelte/test/runtime/samples/reactive-values-no-implicit-member-expression/main.svelte diff --git a/packages/svelte/test/runtime/samples/reactive-values-non-cyclical-declaration-order-independent/_config.js b/packages/svelte/test/runtime/samples/reactive-values-non-cyclical-declaration-order-independent/_config.js new file mode 100644 index 0000000000..8aca87dc17 --- /dev/null +++ b/packages/svelte/test/runtime/samples/reactive-values-non-cyclical-declaration-order-independent/_config.js @@ -0,0 +1,14 @@ +export default { + html: ` +

    2+2=4

    + `, + + test({ assert, target }) { + assert.htmlEqual( + target.innerHTML, + ` +

    2+2=4

    + ` + ); + } +}; diff --git a/test/runtime/samples/reactive-values-non-cyclical-declaration-order-independent/main.svelte b/packages/svelte/test/runtime/samples/reactive-values-non-cyclical-declaration-order-independent/main.svelte similarity index 100% rename from test/runtime/samples/reactive-values-non-cyclical-declaration-order-independent/main.svelte rename to packages/svelte/test/runtime/samples/reactive-values-non-cyclical-declaration-order-independent/main.svelte diff --git a/packages/svelte/test/runtime/samples/reactive-values-non-cyclical/_config.js b/packages/svelte/test/runtime/samples/reactive-values-non-cyclical/_config.js new file mode 100644 index 0000000000..ad274547dd --- /dev/null +++ b/packages/svelte/test/runtime/samples/reactive-values-non-cyclical/_config.js @@ -0,0 +1,20 @@ +export default { + get props() { + return { x: 42 }; + }, + + html: ` +

    42 42

    + `, + + test({ assert, component, target }) { + component.x = 43; + + assert.htmlEqual( + target.innerHTML, + ` +

    43 43

    + ` + ); + } +}; diff --git a/test/runtime/samples/reactive-values-non-cyclical/main.svelte b/packages/svelte/test/runtime/samples/reactive-values-non-cyclical/main.svelte similarity index 100% rename from test/runtime/samples/reactive-values-non-cyclical/main.svelte rename to packages/svelte/test/runtime/samples/reactive-values-non-cyclical/main.svelte diff --git a/packages/svelte/test/runtime/samples/reactive-values-overwrite/_config.js b/packages/svelte/test/runtime/samples/reactive-values-overwrite/_config.js new file mode 100644 index 0000000000..4b4dc35372 --- /dev/null +++ b/packages/svelte/test/runtime/samples/reactive-values-overwrite/_config.js @@ -0,0 +1,27 @@ +export default { + html: ` +

    doubled: 2

    + `, + + test({ assert, component, target }) { + component.a = 2; + + assert.equal(component.doubled, 4); + assert.htmlEqual( + target.innerHTML, + ` +

    doubled: 4

    + ` + ); + + component.doubled = 3; + + assert.equal(component.doubled, 3); + assert.htmlEqual( + target.innerHTML, + ` +

    doubled: 3

    + ` + ); + } +}; diff --git a/test/runtime/samples/reactive-values-overwrite/main.svelte b/packages/svelte/test/runtime/samples/reactive-values-overwrite/main.svelte similarity index 100% rename from test/runtime/samples/reactive-values-overwrite/main.svelte rename to packages/svelte/test/runtime/samples/reactive-values-overwrite/main.svelte diff --git a/test/runtime/samples/reactive-values-second-order/_config.js b/packages/svelte/test/runtime/samples/reactive-values-second-order/_config.js similarity index 100% rename from test/runtime/samples/reactive-values-second-order/_config.js rename to packages/svelte/test/runtime/samples/reactive-values-second-order/_config.js diff --git a/test/runtime/samples/reactive-values-second-order/main.svelte b/packages/svelte/test/runtime/samples/reactive-values-second-order/main.svelte similarity index 100% rename from test/runtime/samples/reactive-values-second-order/main.svelte rename to packages/svelte/test/runtime/samples/reactive-values-second-order/main.svelte diff --git a/packages/svelte/test/runtime/samples/reactive-values-self-dependency-b/_config.js b/packages/svelte/test/runtime/samples/reactive-values-self-dependency-b/_config.js new file mode 100644 index 0000000000..0f71ee6058 --- /dev/null +++ b/packages/svelte/test/runtime/samples/reactive-values-self-dependency-b/_config.js @@ -0,0 +1,25 @@ +export default { + html: ` +

    count: 0

    + `, + + test({ assert, component, target }) { + component.count = 5; + + assert.htmlEqual( + target.innerHTML, + ` +

    count: 5

    + ` + ); + + component.count = 50; + + assert.htmlEqual( + target.innerHTML, + ` +

    count: 9

    + ` + ); + } +}; diff --git a/test/runtime/samples/reactive-values-self-dependency-b/main.svelte b/packages/svelte/test/runtime/samples/reactive-values-self-dependency-b/main.svelte similarity index 100% rename from test/runtime/samples/reactive-values-self-dependency-b/main.svelte rename to packages/svelte/test/runtime/samples/reactive-values-self-dependency-b/main.svelte diff --git a/packages/svelte/test/runtime/samples/reactive-values-self-dependency/_config.js b/packages/svelte/test/runtime/samples/reactive-values-self-dependency/_config.js new file mode 100644 index 0000000000..7670be4502 --- /dev/null +++ b/packages/svelte/test/runtime/samples/reactive-values-self-dependency/_config.js @@ -0,0 +1,18 @@ +export default { + html: ` +

    1 + 2 = 3

    +

    Times calculated: 1

    + `, + + test({ assert, component, target }) { + component.a = 3; + + assert.htmlEqual( + target.innerHTML, + ` +

    3 + 2 = 5

    +

    Times calculated: 2

    + ` + ); + } +}; diff --git a/test/runtime/samples/reactive-values-self-dependency/main.svelte b/packages/svelte/test/runtime/samples/reactive-values-self-dependency/main.svelte similarity index 100% rename from test/runtime/samples/reactive-values-self-dependency/main.svelte rename to packages/svelte/test/runtime/samples/reactive-values-self-dependency/main.svelte diff --git a/test/runtime/samples/reactive-values-store-destructured-undefined/_config.js b/packages/svelte/test/runtime/samples/reactive-values-store-destructured-undefined/_config.js similarity index 100% rename from test/runtime/samples/reactive-values-store-destructured-undefined/_config.js rename to packages/svelte/test/runtime/samples/reactive-values-store-destructured-undefined/_config.js diff --git a/test/runtime/samples/reactive-values-store-destructured-undefined/main.svelte b/packages/svelte/test/runtime/samples/reactive-values-store-destructured-undefined/main.svelte similarity index 100% rename from test/runtime/samples/reactive-values-store-destructured-undefined/main.svelte rename to packages/svelte/test/runtime/samples/reactive-values-store-destructured-undefined/main.svelte diff --git a/test/runtime/samples/reactive-values-subscript-assignment/_config.js b/packages/svelte/test/runtime/samples/reactive-values-subscript-assignment/_config.js similarity index 100% rename from test/runtime/samples/reactive-values-subscript-assignment/_config.js rename to packages/svelte/test/runtime/samples/reactive-values-subscript-assignment/_config.js diff --git a/test/runtime/samples/reactive-values-subscript-assignment/main.svelte b/packages/svelte/test/runtime/samples/reactive-values-subscript-assignment/main.svelte similarity index 100% rename from test/runtime/samples/reactive-values-subscript-assignment/main.svelte rename to packages/svelte/test/runtime/samples/reactive-values-subscript-assignment/main.svelte diff --git a/packages/svelte/test/runtime/samples/reactive-values-text-node/_config.js b/packages/svelte/test/runtime/samples/reactive-values-text-node/_config.js new file mode 100644 index 0000000000..e7b474fd26 --- /dev/null +++ b/packages/svelte/test/runtime/samples/reactive-values-text-node/_config.js @@ -0,0 +1,25 @@ +import { create_deferred } from '../../../helpers'; + +let deferred; + +export default { + before_test() { + deferred = create_deferred(); + }, + + get props() { + return { deferred }; + }, + + html: '
    same text
    ', + + async test({ assert, target }) { + await deferred.promise; + assert.htmlEqual( + target.innerHTML, + ` +
    same text text
    + ` + ); + } +}; diff --git a/packages/svelte/test/runtime/samples/reactive-values-text-node/main.svelte b/packages/svelte/test/runtime/samples/reactive-values-text-node/main.svelte new file mode 100644 index 0000000000..9e19f14f86 --- /dev/null +++ b/packages/svelte/test/runtime/samples/reactive-values-text-node/main.svelte @@ -0,0 +1,10 @@ + + +
    {text} text
    diff --git a/test/runtime/samples/reactive-values-uninitialised/_config.js b/packages/svelte/test/runtime/samples/reactive-values-uninitialised/_config.js similarity index 100% rename from test/runtime/samples/reactive-values-uninitialised/_config.js rename to packages/svelte/test/runtime/samples/reactive-values-uninitialised/_config.js diff --git a/test/runtime/samples/reactive-values-uninitialised/main.svelte b/packages/svelte/test/runtime/samples/reactive-values-uninitialised/main.svelte similarity index 100% rename from test/runtime/samples/reactive-values-uninitialised/main.svelte rename to packages/svelte/test/runtime/samples/reactive-values-uninitialised/main.svelte diff --git a/packages/svelte/test/runtime/samples/reactive-values/_config.js b/packages/svelte/test/runtime/samples/reactive-values/_config.js new file mode 100644 index 0000000000..1d12395c05 --- /dev/null +++ b/packages/svelte/test/runtime/samples/reactive-values/_config.js @@ -0,0 +1,19 @@ +export default { + html: ` +

    1 + 2 = 3

    +

    3 * 3 = 9

    + `, + + test({ assert, component, target }) { + component.a = 3; + assert.equal(component.c, 5); + assert.equal(component.cSquared, 25); + assert.htmlEqual( + target.innerHTML, + ` +

    3 + 2 = 5

    +

    5 * 5 = 25

    + ` + ); + } +}; diff --git a/test/runtime/samples/reactive-values/main.svelte b/packages/svelte/test/runtime/samples/reactive-values/main.svelte similarity index 100% rename from test/runtime/samples/reactive-values/main.svelte rename to packages/svelte/test/runtime/samples/reactive-values/main.svelte diff --git a/packages/svelte/test/runtime/samples/renamed-instance-exports/_config.js b/packages/svelte/test/runtime/samples/renamed-instance-exports/_config.js new file mode 100644 index 0000000000..5bfba0d485 --- /dev/null +++ b/packages/svelte/test/runtime/samples/renamed-instance-exports/_config.js @@ -0,0 +1,12 @@ +export default { + test({ assert, component }) { + assert.equal(component.bar1, 42); + assert.equal(component.bar2, 42); + assert.throws(() => { + component.bar1 = 100; + }, /Cannot set property bar1 of/); + component.bar2 = 100; + assert.equal(component.bar1, 42); + assert.equal(component.bar2, 100); + } +}; diff --git a/test/runtime/samples/renamed-instance-exports/main.svelte b/packages/svelte/test/runtime/samples/renamed-instance-exports/main.svelte similarity index 100% rename from test/runtime/samples/renamed-instance-exports/main.svelte rename to packages/svelte/test/runtime/samples/renamed-instance-exports/main.svelte diff --git a/test/runtime/samples/script-style-non-top-level/_config.js b/packages/svelte/test/runtime/samples/script-style-non-top-level/_config.js similarity index 100% rename from test/runtime/samples/script-style-non-top-level/_config.js rename to packages/svelte/test/runtime/samples/script-style-non-top-level/_config.js diff --git a/test/runtime/samples/script-style-non-top-level/main.svelte b/packages/svelte/test/runtime/samples/script-style-non-top-level/main.svelte similarity index 100% rename from test/runtime/samples/script-style-non-top-level/main.svelte rename to packages/svelte/test/runtime/samples/script-style-non-top-level/main.svelte diff --git a/packages/svelte/test/runtime/samples/select-bind-array/_config.js b/packages/svelte/test/runtime/samples/select-bind-array/_config.js new file mode 100644 index 0000000000..11be3bce34 --- /dev/null +++ b/packages/svelte/test/runtime/samples/select-bind-array/_config.js @@ -0,0 +1,21 @@ +const items = [{ id: 'a' }, { id: 'b' }]; + +export default { + skip_if_ssr: true, + + get props() { + return { foo: 'b', items }; + }, + + test({ assert, component, target }) { + const options = target.querySelectorAll('option'); + + assert.equal(options[0].selected, false); + assert.equal(options[1].selected, true); + + component.foo = items[0].id; + + assert.equal(options[0].selected, true); + assert.equal(options[1].selected, false); + } +}; diff --git a/test/runtime/samples/select-bind-array/main.svelte b/packages/svelte/test/runtime/samples/select-bind-array/main.svelte similarity index 100% rename from test/runtime/samples/select-bind-array/main.svelte rename to packages/svelte/test/runtime/samples/select-bind-array/main.svelte diff --git a/packages/svelte/test/runtime/samples/select-bind-in-array/_config.js b/packages/svelte/test/runtime/samples/select-bind-in-array/_config.js new file mode 100644 index 0000000000..feba32d389 --- /dev/null +++ b/packages/svelte/test/runtime/samples/select-bind-in-array/_config.js @@ -0,0 +1,16 @@ +const items = [{ id: 'a' }, { id: 'b' }]; + +export default { + skip_if_ssr: true, + + get props() { + return { items }; + }, + + test({ assert, component }) { + const items = component.items; + + assert.equal(items[0].id, 'a'); + assert.equal(items[1].id, 'b'); + } +}; diff --git a/test/runtime/samples/select-bind-in-array/main.svelte b/packages/svelte/test/runtime/samples/select-bind-in-array/main.svelte similarity index 100% rename from test/runtime/samples/select-bind-in-array/main.svelte rename to packages/svelte/test/runtime/samples/select-bind-in-array/main.svelte diff --git a/packages/svelte/test/runtime/samples/select-change-handler/_config.js b/packages/svelte/test/runtime/samples/select-change-handler/_config.js new file mode 100644 index 0000000000..594d23c62d --- /dev/null +++ b/packages/svelte/test/runtime/samples/select-change-handler/_config.js @@ -0,0 +1,22 @@ +export default { + get props() { + return { + options: [{ id: 'a' }, { id: 'b' }, { id: 'c' }], + selected: 'b' + }; + }, + + test({ assert, component, target, window }) { + const select = target.querySelector('select'); + assert.equal(select.value, 'b'); + + const event = new window.Event('change'); + + select.value = 'c'; + select.dispatchEvent(event); + + assert.equal(select.value, 'c'); + assert.equal(component.lastChangedTo, 'c'); + assert.equal(component.selected, 'c'); + } +}; diff --git a/test/runtime/samples/select-change-handler/main.svelte b/packages/svelte/test/runtime/samples/select-change-handler/main.svelte similarity index 100% rename from test/runtime/samples/select-change-handler/main.svelte rename to packages/svelte/test/runtime/samples/select-change-handler/main.svelte diff --git a/test/runtime/samples/select-multiple-spread-and-bind/_config.js b/packages/svelte/test/runtime/samples/select-multiple-spread-and-bind/_config.js similarity index 100% rename from test/runtime/samples/select-multiple-spread-and-bind/_config.js rename to packages/svelte/test/runtime/samples/select-multiple-spread-and-bind/_config.js diff --git a/test/runtime/samples/select-multiple-spread-and-bind/main.svelte b/packages/svelte/test/runtime/samples/select-multiple-spread-and-bind/main.svelte similarity index 100% rename from test/runtime/samples/select-multiple-spread-and-bind/main.svelte rename to packages/svelte/test/runtime/samples/select-multiple-spread-and-bind/main.svelte diff --git a/test/runtime/samples/select-multiple-spread-and-bind/select.svelte b/packages/svelte/test/runtime/samples/select-multiple-spread-and-bind/select.svelte similarity index 100% rename from test/runtime/samples/select-multiple-spread-and-bind/select.svelte rename to packages/svelte/test/runtime/samples/select-multiple-spread-and-bind/select.svelte diff --git a/test/runtime/samples/select-multiple-spread/_config.js b/packages/svelte/test/runtime/samples/select-multiple-spread/_config.js similarity index 100% rename from test/runtime/samples/select-multiple-spread/_config.js rename to packages/svelte/test/runtime/samples/select-multiple-spread/_config.js diff --git a/test/runtime/samples/select-multiple-spread/main.svelte b/packages/svelte/test/runtime/samples/select-multiple-spread/main.svelte similarity index 100% rename from test/runtime/samples/select-multiple-spread/main.svelte rename to packages/svelte/test/runtime/samples/select-multiple-spread/main.svelte diff --git a/test/runtime/samples/select-multiple-spread/select.svelte b/packages/svelte/test/runtime/samples/select-multiple-spread/select.svelte similarity index 100% rename from test/runtime/samples/select-multiple-spread/select.svelte rename to packages/svelte/test/runtime/samples/select-multiple-spread/select.svelte diff --git a/packages/svelte/test/runtime/samples/select-no-whitespace/_config.js b/packages/svelte/test/runtime/samples/select-no-whitespace/_config.js new file mode 100644 index 0000000000..7e9238fc28 --- /dev/null +++ b/packages/svelte/test/runtime/samples/select-no-whitespace/_config.js @@ -0,0 +1,6 @@ +export default { + test({ assert, target }) { + const select = target.querySelector('select'); + assert.equal(select.childNodes.length, 3); + } +}; diff --git a/test/runtime/samples/select-no-whitespace/main.svelte b/packages/svelte/test/runtime/samples/select-no-whitespace/main.svelte similarity index 100% rename from test/runtime/samples/select-no-whitespace/main.svelte rename to packages/svelte/test/runtime/samples/select-no-whitespace/main.svelte diff --git a/packages/svelte/test/runtime/samples/select-one-way-bind-object/_config.js b/packages/svelte/test/runtime/samples/select-one-way-bind-object/_config.js new file mode 100644 index 0000000000..55dbcd82d2 --- /dev/null +++ b/packages/svelte/test/runtime/samples/select-one-way-bind-object/_config.js @@ -0,0 +1,21 @@ +const items = [{}, {}]; + +export default { + skip_if_ssr: true, + + get props() { + return { foo: items[0], items }; + }, + + test({ assert, component, target }) { + const options = target.querySelectorAll('option'); + + assert.equal(options[0].selected, true); + assert.equal(options[1].selected, false); + + component.foo = items[1]; + + assert.equal(options[0].selected, false); + assert.equal(options[1].selected, true); + } +}; diff --git a/test/runtime/samples/select-one-way-bind-object/main.svelte b/packages/svelte/test/runtime/samples/select-one-way-bind-object/main.svelte similarity index 100% rename from test/runtime/samples/select-one-way-bind-object/main.svelte rename to packages/svelte/test/runtime/samples/select-one-way-bind-object/main.svelte diff --git a/packages/svelte/test/runtime/samples/select-one-way-bind/_config.js b/packages/svelte/test/runtime/samples/select-one-way-bind/_config.js new file mode 100644 index 0000000000..fb7920c2a1 --- /dev/null +++ b/packages/svelte/test/runtime/samples/select-one-way-bind/_config.js @@ -0,0 +1,19 @@ +export default { + skip_if_ssr: true, + + get props() { + return { foo: 'a' }; + }, + + test({ assert, component, target }) { + const options = target.querySelectorAll('option'); + + assert.equal(options[0].selected, true); + assert.equal(options[1].selected, false); + + component.foo = 'b'; + + assert.equal(options[0].selected, false); + assert.equal(options[1].selected, true); + } +}; diff --git a/test/runtime/samples/select-one-way-bind/main.svelte b/packages/svelte/test/runtime/samples/select-one-way-bind/main.svelte similarity index 100% rename from test/runtime/samples/select-one-way-bind/main.svelte rename to packages/svelte/test/runtime/samples/select-one-way-bind/main.svelte diff --git a/test/runtime/samples/select-props/_config.js b/packages/svelte/test/runtime/samples/select-props/_config.js similarity index 100% rename from test/runtime/samples/select-props/_config.js rename to packages/svelte/test/runtime/samples/select-props/_config.js diff --git a/test/runtime/samples/select-props/main.svelte b/packages/svelte/test/runtime/samples/select-props/main.svelte similarity index 100% rename from test/runtime/samples/select-props/main.svelte rename to packages/svelte/test/runtime/samples/select-props/main.svelte diff --git a/packages/svelte/test/runtime/samples/select/_config.js b/packages/svelte/test/runtime/samples/select/_config.js new file mode 100644 index 0000000000..777288d534 --- /dev/null +++ b/packages/svelte/test/runtime/samples/select/_config.js @@ -0,0 +1,31 @@ +export default { + get props() { + return { item: { name: 'One', key: 'a' } }; + }, + + html: ` + + `, + + test({ assert, component, target }) { + assert.htmlEqual( + target.innerHTML, + ` + + ` + ); + + assert.equal(target.querySelector('select').value, 'a'); + + component.$destroy(); + assert.htmlEqual(target.innerHTML, ''); + } +}; diff --git a/test/runtime/samples/select/main.svelte b/packages/svelte/test/runtime/samples/select/main.svelte similarity index 100% rename from test/runtime/samples/select/main.svelte rename to packages/svelte/test/runtime/samples/select/main.svelte diff --git a/test/runtime/samples/self-reference-component/Countdown.svelte b/packages/svelte/test/runtime/samples/self-reference-component/Countdown.svelte similarity index 100% rename from test/runtime/samples/self-reference-component/Countdown.svelte rename to packages/svelte/test/runtime/samples/self-reference-component/Countdown.svelte diff --git a/test/runtime/samples/self-reference-component/_config.js b/packages/svelte/test/runtime/samples/self-reference-component/_config.js similarity index 100% rename from test/runtime/samples/self-reference-component/_config.js rename to packages/svelte/test/runtime/samples/self-reference-component/_config.js diff --git a/test/runtime/samples/self-reference-component/main.svelte b/packages/svelte/test/runtime/samples/self-reference-component/main.svelte similarity index 100% rename from test/runtime/samples/self-reference-component/main.svelte rename to packages/svelte/test/runtime/samples/self-reference-component/main.svelte diff --git a/packages/svelte/test/runtime/samples/self-reference-tree/_config.js b/packages/svelte/test/runtime/samples/self-reference-tree/_config.js new file mode 100644 index 0000000000..1cebb70598 --- /dev/null +++ b/packages/svelte/test/runtime/samples/self-reference-tree/_config.js @@ -0,0 +1,55 @@ +export default { + get props() { + return { + file: { + name: '/', + type: 'folder', + children: [ + { name: 'foo.jpg', type: 'image' }, + { name: 'bar.jpg', type: 'image' }, + { + name: 'baz', + type: 'folder', + children: [ + { name: '.DS_Store', type: 'junk' }, + { name: 'README.md', type: 'markdown' } + ] + } + ] + } + }; + }, + + html: ` +
    + / + +
      +
    • +
      + foo.jpg +
      +
    • +
      + bar.jpg +
      +
    • +
      + baz +
        +
      • +
        + .DS_Store +
        +
      • +
        + README.md +
        +
      • +
      +
      +
    • +
    +
    + ` +}; diff --git a/test/runtime/samples/self-reference-tree/main.svelte b/packages/svelte/test/runtime/samples/self-reference-tree/main.svelte similarity index 100% rename from test/runtime/samples/self-reference-tree/main.svelte rename to packages/svelte/test/runtime/samples/self-reference-tree/main.svelte diff --git a/packages/svelte/test/runtime/samples/self-reference/_config.js b/packages/svelte/test/runtime/samples/self-reference/_config.js new file mode 100644 index 0000000000..d8e5ce66d4 --- /dev/null +++ b/packages/svelte/test/runtime/samples/self-reference/_config.js @@ -0,0 +1,14 @@ +export default { + get props() { + return { depth: 5 }; + }, + + html: ` + 5 + 4 + 3 + 2 + 1 + 0 + ` +}; diff --git a/test/runtime/samples/self-reference/main.svelte b/packages/svelte/test/runtime/samples/self-reference/main.svelte similarity index 100% rename from test/runtime/samples/self-reference/main.svelte rename to packages/svelte/test/runtime/samples/self-reference/main.svelte diff --git a/test/runtime/samples/semicolon-hoisting/_config.js b/packages/svelte/test/runtime/samples/semicolon-hoisting/_config.js similarity index 100% rename from test/runtime/samples/semicolon-hoisting/_config.js rename to packages/svelte/test/runtime/samples/semicolon-hoisting/_config.js diff --git a/test/runtime/samples/semicolon-hoisting/main.svelte b/packages/svelte/test/runtime/samples/semicolon-hoisting/main.svelte similarity index 100% rename from test/runtime/samples/semicolon-hoisting/main.svelte rename to packages/svelte/test/runtime/samples/semicolon-hoisting/main.svelte diff --git a/packages/svelte/test/runtime/samples/set-after-destroy/_config.js b/packages/svelte/test/runtime/samples/set-after-destroy/_config.js new file mode 100644 index 0000000000..1f13e95c21 --- /dev/null +++ b/packages/svelte/test/runtime/samples/set-after-destroy/_config.js @@ -0,0 +1,10 @@ +export default { + get props() { + return { x: 1 }; + }, + + test({ component }) { + component.$destroy(); + component.x = 2; + } +}; diff --git a/test/runtime/samples/set-after-destroy/main.svelte b/packages/svelte/test/runtime/samples/set-after-destroy/main.svelte similarity index 100% rename from test/runtime/samples/set-after-destroy/main.svelte rename to packages/svelte/test/runtime/samples/set-after-destroy/main.svelte diff --git a/test/runtime/samples/set-in-oncreate/_config.js b/packages/svelte/test/runtime/samples/set-in-oncreate/_config.js similarity index 100% rename from test/runtime/samples/set-in-oncreate/_config.js rename to packages/svelte/test/runtime/samples/set-in-oncreate/_config.js diff --git a/test/runtime/samples/set-in-oncreate/main.svelte b/packages/svelte/test/runtime/samples/set-in-oncreate/main.svelte similarity index 100% rename from test/runtime/samples/set-in-oncreate/main.svelte rename to packages/svelte/test/runtime/samples/set-in-oncreate/main.svelte diff --git a/test/runtime/samples/set-in-onstate-dedupes-renders/Widget.svelte b/packages/svelte/test/runtime/samples/set-in-onstate-dedupes-renders/Widget.svelte similarity index 100% rename from test/runtime/samples/set-in-onstate-dedupes-renders/Widget.svelte rename to packages/svelte/test/runtime/samples/set-in-onstate-dedupes-renders/Widget.svelte diff --git a/test/runtime/samples/set-in-onstate-dedupes-renders/_config.js b/packages/svelte/test/runtime/samples/set-in-onstate-dedupes-renders/_config.js similarity index 100% rename from test/runtime/samples/set-in-onstate-dedupes-renders/_config.js rename to packages/svelte/test/runtime/samples/set-in-onstate-dedupes-renders/_config.js diff --git a/test/runtime/samples/set-in-onstate-dedupes-renders/main.svelte b/packages/svelte/test/runtime/samples/set-in-onstate-dedupes-renders/main.svelte similarity index 100% rename from test/runtime/samples/set-in-onstate-dedupes-renders/main.svelte rename to packages/svelte/test/runtime/samples/set-in-onstate-dedupes-renders/main.svelte diff --git a/packages/svelte/test/runtime/samples/set-in-onstate/_config.js b/packages/svelte/test/runtime/samples/set-in-onstate/_config.js new file mode 100644 index 0000000000..012a2aafb3 --- /dev/null +++ b/packages/svelte/test/runtime/samples/set-in-onstate/_config.js @@ -0,0 +1,19 @@ +export default { + skip_if_ssr: true, // uses oncreate + + html: ` +

    1

    +

    2

    + `, + + test({ assert, component, target }) { + component.foo = 2; + assert.htmlEqual( + target.innerHTML, + ` +

    2

    +

    4

    + ` + ); + } +}; diff --git a/test/runtime/samples/set-in-onstate/main.svelte b/packages/svelte/test/runtime/samples/set-in-onstate/main.svelte similarity index 100% rename from test/runtime/samples/set-in-onstate/main.svelte rename to packages/svelte/test/runtime/samples/set-in-onstate/main.svelte diff --git a/packages/svelte/test/runtime/samples/set-null-text-node/_config.js b/packages/svelte/test/runtime/samples/set-null-text-node/_config.js new file mode 100644 index 0000000000..1dbfc72631 --- /dev/null +++ b/packages/svelte/test/runtime/samples/set-null-text-node/_config.js @@ -0,0 +1,15 @@ +export default { + get props() { + return { foo: null }; + }, + + html: 'foo is null', + + test({ assert, component, target }) { + component.foo = 42; + assert.htmlEqual(target.innerHTML, 'foo is 42'); + + component.foo = null; + assert.htmlEqual(target.innerHTML, 'foo is null'); + } +}; diff --git a/test/runtime/samples/set-null-text-node/main.svelte b/packages/svelte/test/runtime/samples/set-null-text-node/main.svelte similarity index 100% rename from test/runtime/samples/set-null-text-node/main.svelte rename to packages/svelte/test/runtime/samples/set-null-text-node/main.svelte diff --git a/test/server-side-rendering/samples/static-div/main.svelte b/packages/svelte/test/runtime/samples/set-prevents-loop/Foo.svelte similarity index 100% rename from test/server-side-rendering/samples/static-div/main.svelte rename to packages/svelte/test/runtime/samples/set-prevents-loop/Foo.svelte diff --git a/test/runtime/samples/store-shadow-scope-declaration/_config.js b/packages/svelte/test/runtime/samples/set-prevents-loop/_config.js similarity index 100% rename from test/runtime/samples/store-shadow-scope-declaration/_config.js rename to packages/svelte/test/runtime/samples/set-prevents-loop/_config.js diff --git a/test/runtime/samples/set-prevents-loop/main.svelte b/packages/svelte/test/runtime/samples/set-prevents-loop/main.svelte similarity index 100% rename from test/runtime/samples/set-prevents-loop/main.svelte rename to packages/svelte/test/runtime/samples/set-prevents-loop/main.svelte diff --git a/test/runtime/samples/set-undefined-attr/_config.js b/packages/svelte/test/runtime/samples/set-undefined-attr/_config.js similarity index 100% rename from test/runtime/samples/set-undefined-attr/_config.js rename to packages/svelte/test/runtime/samples/set-undefined-attr/_config.js diff --git a/test/runtime/samples/set-undefined-attr/main.svelte b/packages/svelte/test/runtime/samples/set-undefined-attr/main.svelte similarity index 100% rename from test/runtime/samples/set-undefined-attr/main.svelte rename to packages/svelte/test/runtime/samples/set-undefined-attr/main.svelte diff --git a/test/runtime/samples/shorthand-method-in-template/Foo.svelte b/packages/svelte/test/runtime/samples/shorthand-method-in-template/Foo.svelte similarity index 100% rename from test/runtime/samples/shorthand-method-in-template/Foo.svelte rename to packages/svelte/test/runtime/samples/shorthand-method-in-template/Foo.svelte diff --git a/test/runtime/samples/shorthand-method-in-template/_config.js b/packages/svelte/test/runtime/samples/shorthand-method-in-template/_config.js similarity index 100% rename from test/runtime/samples/shorthand-method-in-template/_config.js rename to packages/svelte/test/runtime/samples/shorthand-method-in-template/_config.js diff --git a/test/runtime/samples/shorthand-method-in-template/main.svelte b/packages/svelte/test/runtime/samples/shorthand-method-in-template/main.svelte similarity index 100% rename from test/runtime/samples/shorthand-method-in-template/main.svelte rename to packages/svelte/test/runtime/samples/shorthand-method-in-template/main.svelte diff --git a/test/runtime/samples/sigil-component-prop/Widget.svelte b/packages/svelte/test/runtime/samples/sigil-component-prop/Widget.svelte similarity index 100% rename from test/runtime/samples/sigil-component-prop/Widget.svelte rename to packages/svelte/test/runtime/samples/sigil-component-prop/Widget.svelte diff --git a/packages/svelte/test/runtime/samples/sigil-component-prop/_config.js b/packages/svelte/test/runtime/samples/sigil-component-prop/_config.js new file mode 100644 index 0000000000..4cc6131cdb --- /dev/null +++ b/packages/svelte/test/runtime/samples/sigil-component-prop/_config.js @@ -0,0 +1,9 @@ +export default { + compileOptions: { + dev: true + }, + get props() { + return { foo: 'foo' }; + }, + html: '
    foo @ foo # foo
    ' +}; diff --git a/test/runtime/samples/sigil-component-prop/main.svelte b/packages/svelte/test/runtime/samples/sigil-component-prop/main.svelte similarity index 100% rename from test/runtime/samples/sigil-component-prop/main.svelte rename to packages/svelte/test/runtime/samples/sigil-component-prop/main.svelte diff --git a/test/runtime/samples/sigil-expression-function-body/_config.js b/packages/svelte/test/runtime/samples/sigil-expression-function-body/_config.js similarity index 100% rename from test/runtime/samples/sigil-expression-function-body/_config.js rename to packages/svelte/test/runtime/samples/sigil-expression-function-body/_config.js diff --git a/test/runtime/samples/sigil-expression-function-body/main.svelte b/packages/svelte/test/runtime/samples/sigil-expression-function-body/main.svelte similarity index 100% rename from test/runtime/samples/sigil-expression-function-body/main.svelte rename to packages/svelte/test/runtime/samples/sigil-expression-function-body/main.svelte diff --git a/test/runtime/samples/sigil-static-@/_config.js b/packages/svelte/test/runtime/samples/sigil-static-at/_config.js similarity index 100% rename from test/runtime/samples/sigil-static-@/_config.js rename to packages/svelte/test/runtime/samples/sigil-static-at/_config.js diff --git a/test/runtime/samples/sigil-static-@/main.svelte b/packages/svelte/test/runtime/samples/sigil-static-at/main.svelte similarity index 100% rename from test/runtime/samples/sigil-static-@/main.svelte rename to packages/svelte/test/runtime/samples/sigil-static-at/main.svelte diff --git a/test/runtime/samples/sigil-static-#/_config.js b/packages/svelte/test/runtime/samples/sigil-static-hash/_config.js similarity index 100% rename from test/runtime/samples/sigil-static-#/_config.js rename to packages/svelte/test/runtime/samples/sigil-static-hash/_config.js diff --git a/test/runtime/samples/sigil-static-#/main.svelte b/packages/svelte/test/runtime/samples/sigil-static-hash/main.svelte similarity index 100% rename from test/runtime/samples/sigil-static-#/main.svelte rename to packages/svelte/test/runtime/samples/sigil-static-hash/main.svelte diff --git a/test/runtime/samples/single-static-element/_config.js b/packages/svelte/test/runtime/samples/single-static-element/_config.js similarity index 100% rename from test/runtime/samples/single-static-element/_config.js rename to packages/svelte/test/runtime/samples/single-static-element/_config.js diff --git a/test/runtime/samples/single-static-element/main.svelte b/packages/svelte/test/runtime/samples/single-static-element/main.svelte similarity index 100% rename from test/runtime/samples/single-static-element/main.svelte rename to packages/svelte/test/runtime/samples/single-static-element/main.svelte diff --git a/test/runtime/samples/single-text-node/_config.js b/packages/svelte/test/runtime/samples/single-text-node/_config.js similarity index 100% rename from test/runtime/samples/single-text-node/_config.js rename to packages/svelte/test/runtime/samples/single-text-node/_config.js diff --git a/test/runtime/samples/single-text-node/main.svelte b/packages/svelte/test/runtime/samples/single-text-node/main.svelte similarity index 100% rename from test/runtime/samples/single-text-node/main.svelte rename to packages/svelte/test/runtime/samples/single-text-node/main.svelte diff --git a/test/runtime/samples/slot-if-block-update-no-anchor/_config.js b/packages/svelte/test/runtime/samples/slot-if-block-update-no-anchor/_config.js similarity index 100% rename from test/runtime/samples/slot-if-block-update-no-anchor/_config.js rename to packages/svelte/test/runtime/samples/slot-if-block-update-no-anchor/_config.js diff --git a/test/runtime/samples/slot-if-block-update-no-anchor/main.svelte b/packages/svelte/test/runtime/samples/slot-if-block-update-no-anchor/main.svelte similarity index 100% rename from test/runtime/samples/slot-if-block-update-no-anchor/main.svelte rename to packages/svelte/test/runtime/samples/slot-if-block-update-no-anchor/main.svelte diff --git a/test/runtime/samples/slot-in-custom-element/_config.js b/packages/svelte/test/runtime/samples/slot-in-custom-element/_config.js similarity index 100% rename from test/runtime/samples/slot-in-custom-element/_config.js rename to packages/svelte/test/runtime/samples/slot-in-custom-element/_config.js diff --git a/test/runtime/samples/slot-in-custom-element/main.svelte b/packages/svelte/test/runtime/samples/slot-in-custom-element/main.svelte similarity index 100% rename from test/runtime/samples/slot-in-custom-element/main.svelte rename to packages/svelte/test/runtime/samples/slot-in-custom-element/main.svelte diff --git a/packages/svelte/test/runtime/samples/slot-in-dynamic-element/_config.js b/packages/svelte/test/runtime/samples/slot-in-dynamic-element/_config.js new file mode 100644 index 0000000000..589e57d78e --- /dev/null +++ b/packages/svelte/test/runtime/samples/slot-in-dynamic-element/_config.js @@ -0,0 +1,7 @@ +export default { + html: ` + +
    header header header
    +
    + ` +}; diff --git a/packages/svelte/test/runtime/samples/slot-in-dynamic-element/main.svelte b/packages/svelte/test/runtime/samples/slot-in-dynamic-element/main.svelte new file mode 100644 index 0000000000..38d7cd233e --- /dev/null +++ b/packages/svelte/test/runtime/samples/slot-in-dynamic-element/main.svelte @@ -0,0 +1,7 @@ + + + +
    header header header
    +
    \ No newline at end of file diff --git a/test/runtime/samples/spread-component-2/Widget.svelte b/packages/svelte/test/runtime/samples/spread-component-2/Widget.svelte similarity index 100% rename from test/runtime/samples/spread-component-2/Widget.svelte rename to packages/svelte/test/runtime/samples/spread-component-2/Widget.svelte diff --git a/packages/svelte/test/runtime/samples/spread-component-2/_config.js b/packages/svelte/test/runtime/samples/spread-component-2/_config.js new file mode 100644 index 0000000000..9b1d50a765 --- /dev/null +++ b/packages/svelte/test/runtime/samples/spread-component-2/_config.js @@ -0,0 +1,90 @@ +export default { + get props() { + return { + list: [ + { + foo: 'lol', + baz: 40 + 2, + qux: 5, + quux: 'core' + }, + { + foo: 'lolzz', + baz: 50 + 2, + qux: 1, + quux: 'quuxx' + } + ] + }; + }, + + html: ` +
    +

    foo: lol

    +

    baz: 42 (number)

    +

    qux: 0

    +

    quux: core

    +

    selected: true

    +

    foo: lolzz

    +

    baz: 52 (number)

    +

    qux: 0

    +

    quux: quuxx

    +

    selected: false

    +
    + `, + + test({ assert, component, target }) { + component.list = [ + { + foo: 'lol', + baz: 40 + 3, + qux: 8, + quux: 'heart' + }, + { + foo: 'lolzz', + baz: 50 + 3, + qux: 8, + quux: 'heartxx' + } + ]; + + assert.htmlEqual( + target.innerHTML, + ` +
    +

    foo: lol

    +

    baz: 43 (number)

    +

    qux: 0

    +

    quux: heart

    +

    selected: true

    +

    foo: lolzz

    +

    baz: 53 (number)

    +

    qux: 0

    +

    quux: heartxx

    +

    selected: false

    +
    + ` + ); + + component.qux = 1; + + assert.htmlEqual( + target.innerHTML, + ` +
    +

    foo: lol

    +

    baz: 43 (number)

    +

    qux: 1

    +

    quux: heart

    +

    selected: false

    +

    foo: lolzz

    +

    baz: 53 (number)

    +

    qux: 1

    +

    quux: heartxx

    +

    selected: true

    +
    + ` + ); + } +}; diff --git a/test/runtime/samples/spread-component-2/main.svelte b/packages/svelte/test/runtime/samples/spread-component-2/main.svelte similarity index 100% rename from test/runtime/samples/spread-component-2/main.svelte rename to packages/svelte/test/runtime/samples/spread-component-2/main.svelte diff --git a/test/runtime/samples/spread-component-dynamic-non-object-multiple-dependencies/Widget.svelte b/packages/svelte/test/runtime/samples/spread-component-dynamic-non-object-multiple-dependencies/Widget.svelte similarity index 100% rename from test/runtime/samples/spread-component-dynamic-non-object-multiple-dependencies/Widget.svelte rename to packages/svelte/test/runtime/samples/spread-component-dynamic-non-object-multiple-dependencies/Widget.svelte diff --git a/packages/svelte/test/runtime/samples/spread-component-dynamic-non-object-multiple-dependencies/_config.js b/packages/svelte/test/runtime/samples/spread-component-dynamic-non-object-multiple-dependencies/_config.js new file mode 100644 index 0000000000..5c42c36f91 --- /dev/null +++ b/packages/svelte/test/runtime/samples/spread-component-dynamic-non-object-multiple-dependencies/_config.js @@ -0,0 +1,49 @@ +export default { + get props() { + return { props: { foo: 'lol', baz: 40 + 2 } }; + }, + + html: ` +

    foo: lol

    +

    baz: 42

    +

    qux: named

    +

    corge: b

    + `, + + test({ assert, component, target }) { + const html = ` +

    foo: undefined

    +

    baz: undefined

    +

    qux: named

    +

    corge: b

    + `; + + // test undefined + component.props = undefined; + assert.htmlEqual(target.innerHTML, html); + + // set object props + component.props = this.props.props; + assert.htmlEqual(target.innerHTML, this.html); + + // test null + component.props = null; + assert.htmlEqual(target.innerHTML, html); + + // set object props + component.props = this.props.props; + assert.htmlEqual(target.innerHTML, this.html); + + // test boolean + component.props = true; + assert.htmlEqual(target.innerHTML, html); + + // set object props + component.props = this.props.props; + assert.htmlEqual(target.innerHTML, this.html); + + // test number + component.props = 123; + assert.htmlEqual(target.innerHTML, html); + } +}; diff --git a/test/runtime/samples/spread-component-dynamic-non-object-multiple-dependencies/main.svelte b/packages/svelte/test/runtime/samples/spread-component-dynamic-non-object-multiple-dependencies/main.svelte similarity index 100% rename from test/runtime/samples/spread-component-dynamic-non-object-multiple-dependencies/main.svelte rename to packages/svelte/test/runtime/samples/spread-component-dynamic-non-object-multiple-dependencies/main.svelte diff --git a/test/runtime/samples/spread-component-dynamic-non-object/Widget.svelte b/packages/svelte/test/runtime/samples/spread-component-dynamic-non-object/Widget.svelte similarity index 100% rename from test/runtime/samples/spread-component-dynamic-non-object/Widget.svelte rename to packages/svelte/test/runtime/samples/spread-component-dynamic-non-object/Widget.svelte diff --git a/packages/svelte/test/runtime/samples/spread-component-dynamic-non-object/_config.js b/packages/svelte/test/runtime/samples/spread-component-dynamic-non-object/_config.js new file mode 100644 index 0000000000..e772649533 --- /dev/null +++ b/packages/svelte/test/runtime/samples/spread-component-dynamic-non-object/_config.js @@ -0,0 +1,47 @@ +export default { + get props() { + return { props: { foo: 'lol', baz: 40 + 2 } }; + }, + + html: ` +

    foo: lol

    +

    baz: 42

    +

    qux: named

    + `, + + test({ assert, component, target }) { + const html = ` +

    foo: undefined

    +

    baz: undefined

    +

    qux: named

    + `; + + // test undefined + component.props = undefined; + assert.htmlEqual(target.innerHTML, html); + + // set object props + component.props = this.props.props; + assert.htmlEqual(target.innerHTML, this.html); + + // test null + component.props = null; + assert.htmlEqual(target.innerHTML, html); + + // set object props + component.props = this.props.props; + assert.htmlEqual(target.innerHTML, this.html); + + // test boolean + component.props = true; + assert.htmlEqual(target.innerHTML, html); + + // set object props + component.props = this.props.props; + assert.htmlEqual(target.innerHTML, this.html); + + // test number + component.props = 123; + assert.htmlEqual(target.innerHTML, html); + } +}; diff --git a/test/runtime/samples/spread-component-dynamic-non-object/main.svelte b/packages/svelte/test/runtime/samples/spread-component-dynamic-non-object/main.svelte similarity index 100% rename from test/runtime/samples/spread-component-dynamic-non-object/main.svelte rename to packages/svelte/test/runtime/samples/spread-component-dynamic-non-object/main.svelte diff --git a/packages/svelte/test/runtime/samples/spread-component-dynamic-undefined/_config.js b/packages/svelte/test/runtime/samples/spread-component-dynamic-undefined/_config.js new file mode 100644 index 0000000000..5a96b04c2e --- /dev/null +++ b/packages/svelte/test/runtime/samples/spread-component-dynamic-undefined/_config.js @@ -0,0 +1,15 @@ +export default { + get props() { + return { props: { a: 1 } }; + }, + + html: '', + + test({ assert, component, target }) { + component.props = { + a: 2 + }; + + assert.htmlEqual(target.innerHTML, ''); + } +}; diff --git a/test/runtime/samples/spread-component-dynamic-undefined/main.svelte b/packages/svelte/test/runtime/samples/spread-component-dynamic-undefined/main.svelte similarity index 100% rename from test/runtime/samples/spread-component-dynamic-undefined/main.svelte rename to packages/svelte/test/runtime/samples/spread-component-dynamic-undefined/main.svelte diff --git a/test/runtime/samples/spread-component-dynamic/Foo.svelte b/packages/svelte/test/runtime/samples/spread-component-dynamic/Foo.svelte similarity index 100% rename from test/runtime/samples/spread-component-dynamic/Foo.svelte rename to packages/svelte/test/runtime/samples/spread-component-dynamic/Foo.svelte diff --git a/packages/svelte/test/runtime/samples/spread-component-dynamic/_config.js b/packages/svelte/test/runtime/samples/spread-component-dynamic/_config.js new file mode 100644 index 0000000000..270d8acd47 --- /dev/null +++ b/packages/svelte/test/runtime/samples/spread-component-dynamic/_config.js @@ -0,0 +1,17 @@ +export default { + get props() { + return { props: { a: 1 } }; + }, + + html: ` +

    a: 1

    + `, + + test({ assert, component, target }) { + component.props = { + a: 2 + }; + + assert.htmlEqual(target.innerHTML, '

    a: 2

    '); + } +}; diff --git a/test/runtime/samples/spread-component-dynamic/main.svelte b/packages/svelte/test/runtime/samples/spread-component-dynamic/main.svelte similarity index 100% rename from test/runtime/samples/spread-component-dynamic/main.svelte rename to packages/svelte/test/runtime/samples/spread-component-dynamic/main.svelte diff --git a/test/server-side-rendering/samples/head-html-and-component/_expected.html b/packages/svelte/test/runtime/samples/spread-component-immutable/Widget.svelte similarity index 100% rename from test/server-side-rendering/samples/head-html-and-component/_expected.html rename to packages/svelte/test/runtime/samples/spread-component-immutable/Widget.svelte diff --git a/packages/svelte/test/runtime/samples/spread-component-immutable/_config.js b/packages/svelte/test/runtime/samples/spread-component-immutable/_config.js new file mode 100644 index 0000000000..56a564f0bf --- /dev/null +++ b/packages/svelte/test/runtime/samples/spread-component-immutable/_config.js @@ -0,0 +1,15 @@ +const obj = { + x: 1, + y: 2, + z: 3 +}; + +export default { + get props() { + return { obj }; + }, + + test({ assert }) { + assert.deepEqual(obj, { x: 1, y: 2, z: 3 }); + } +}; diff --git a/test/runtime/samples/spread-component-immutable/main.svelte b/packages/svelte/test/runtime/samples/spread-component-immutable/main.svelte similarity index 100% rename from test/runtime/samples/spread-component-immutable/main.svelte rename to packages/svelte/test/runtime/samples/spread-component-immutable/main.svelte diff --git a/test/runtime/samples/spread-component-literal/Widget.svelte b/packages/svelte/test/runtime/samples/spread-component-literal/Widget.svelte similarity index 100% rename from test/runtime/samples/spread-component-literal/Widget.svelte rename to packages/svelte/test/runtime/samples/spread-component-literal/Widget.svelte diff --git a/test/runtime/samples/spread-component-literal/_config.js b/packages/svelte/test/runtime/samples/spread-component-literal/_config.js similarity index 100% rename from test/runtime/samples/spread-component-literal/_config.js rename to packages/svelte/test/runtime/samples/spread-component-literal/_config.js diff --git a/test/runtime/samples/spread-component-literal/main.svelte b/packages/svelte/test/runtime/samples/spread-component-literal/main.svelte similarity index 100% rename from test/runtime/samples/spread-component-literal/main.svelte rename to packages/svelte/test/runtime/samples/spread-component-literal/main.svelte diff --git a/test/runtime/samples/spread-component-multiple-dependencies/Widget.svelte b/packages/svelte/test/runtime/samples/spread-component-multiple-dependencies/Widget.svelte similarity index 100% rename from test/runtime/samples/spread-component-multiple-dependencies/Widget.svelte rename to packages/svelte/test/runtime/samples/spread-component-multiple-dependencies/Widget.svelte diff --git a/packages/svelte/test/runtime/samples/spread-component-multiple-dependencies/_config.js b/packages/svelte/test/runtime/samples/spread-component-multiple-dependencies/_config.js new file mode 100644 index 0000000000..72bb9ea651 --- /dev/null +++ b/packages/svelte/test/runtime/samples/spread-component-multiple-dependencies/_config.js @@ -0,0 +1,7 @@ +export default { + html: 'b baz', + test({ assert, component, target }) { + component.foo = true; + assert.htmlEqual(target.innerHTML, 'a baz'); + } +}; diff --git a/test/runtime/samples/spread-component-multiple-dependencies/main.svelte b/packages/svelte/test/runtime/samples/spread-component-multiple-dependencies/main.svelte similarity index 100% rename from test/runtime/samples/spread-component-multiple-dependencies/main.svelte rename to packages/svelte/test/runtime/samples/spread-component-multiple-dependencies/main.svelte diff --git a/test/runtime/samples/spread-component-side-effects/Widget.svelte b/packages/svelte/test/runtime/samples/spread-component-side-effects/Widget.svelte similarity index 100% rename from test/runtime/samples/spread-component-side-effects/Widget.svelte rename to packages/svelte/test/runtime/samples/spread-component-side-effects/Widget.svelte diff --git a/packages/svelte/test/runtime/samples/spread-component-side-effects/_config.js b/packages/svelte/test/runtime/samples/spread-component-side-effects/_config.js new file mode 100644 index 0000000000..6832650c85 --- /dev/null +++ b/packages/svelte/test/runtime/samples/spread-component-side-effects/_config.js @@ -0,0 +1,24 @@ +export default { + get props() { + return {}; + }, + + html: ` +

    i: 1

    +

    foo: foo

    +

    qux: named

    + `, + + test({ assert, component, target }) { + component.foo = 'lol'; + + assert.htmlEqual( + target.innerHTML, + ` +

    i: 2

    +

    foo: lol

    +

    qux: named

    + ` + ); + } +}; diff --git a/test/runtime/samples/spread-component-side-effects/main.svelte b/packages/svelte/test/runtime/samples/spread-component-side-effects/main.svelte similarity index 100% rename from test/runtime/samples/spread-component-side-effects/main.svelte rename to packages/svelte/test/runtime/samples/spread-component-side-effects/main.svelte diff --git a/test/runtime/samples/spread-component-with-bind/Widget.svelte b/packages/svelte/test/runtime/samples/spread-component-with-bind/Widget.svelte similarity index 100% rename from test/runtime/samples/spread-component-with-bind/Widget.svelte rename to packages/svelte/test/runtime/samples/spread-component-with-bind/Widget.svelte diff --git a/packages/svelte/test/runtime/samples/spread-component-with-bind/_config.js b/packages/svelte/test/runtime/samples/spread-component-with-bind/_config.js new file mode 100644 index 0000000000..478cc02d45 --- /dev/null +++ b/packages/svelte/test/runtime/samples/spread-component-with-bind/_config.js @@ -0,0 +1,26 @@ +export default { + html: ` +

    foo

    + + `, + + ssrHtml: ` +

    foo

    + + `, + + async test({ assert, target, window }) { + const input = target.querySelector('input'); + + input.value = 'bar'; + await input.dispatchEvent(new window.Event('input')); + + assert.htmlEqual( + target.innerHTML, + ` +

    bar

    + + ` + ); + } +}; diff --git a/test/runtime/samples/spread-component-with-bind/main.svelte b/packages/svelte/test/runtime/samples/spread-component-with-bind/main.svelte similarity index 100% rename from test/runtime/samples/spread-component-with-bind/main.svelte rename to packages/svelte/test/runtime/samples/spread-component-with-bind/main.svelte diff --git a/test/runtime/samples/spread-component/Widget.svelte b/packages/svelte/test/runtime/samples/spread-component/Widget.svelte similarity index 100% rename from test/runtime/samples/spread-component/Widget.svelte rename to packages/svelte/test/runtime/samples/spread-component/Widget.svelte diff --git a/packages/svelte/test/runtime/samples/spread-component/_config.js b/packages/svelte/test/runtime/samples/spread-component/_config.js new file mode 100644 index 0000000000..6e0da44578 --- /dev/null +++ b/packages/svelte/test/runtime/samples/spread-component/_config.js @@ -0,0 +1,38 @@ +export default { + get props() { + return { + props: { + foo: 'lol', + baz: 40 + 2, + qux: `this is a ${'piece of'} string`, + quux: 'core' + } + }; + }, + + html: ` +

    foo: lol

    +

    baz: 42 (number)

    +

    qux: named

    +

    quux: core

    + `, + + test({ assert, component, target }) { + component.props = { + foo: 'wut', + baz: 40 + 3, + qux: `this is a ${'rather boring'} string`, + quux: 'heart' + }; + + assert.htmlEqual( + target.innerHTML, + ` +

    foo: wut

    +

    baz: 43 (number)

    +

    qux: named

    +

    quux: heart

    + ` + ); + } +}; diff --git a/test/runtime/samples/spread-component/main.svelte b/packages/svelte/test/runtime/samples/spread-component/main.svelte similarity index 100% rename from test/runtime/samples/spread-component/main.svelte rename to packages/svelte/test/runtime/samples/spread-component/main.svelte diff --git a/test/runtime/samples/spread-each-component/Nested.svelte b/packages/svelte/test/runtime/samples/spread-each-component/Nested.svelte similarity index 100% rename from test/runtime/samples/spread-each-component/Nested.svelte rename to packages/svelte/test/runtime/samples/spread-each-component/Nested.svelte diff --git a/packages/svelte/test/runtime/samples/spread-each-component/_config.js b/packages/svelte/test/runtime/samples/spread-each-component/_config.js new file mode 100644 index 0000000000..7090a0038e --- /dev/null +++ b/packages/svelte/test/runtime/samples/spread-each-component/_config.js @@ -0,0 +1,29 @@ +export default { + html: ` +
    +
    + `, + + get props() { + return { + things: [ + { a: 1, b: 2 }, + { a: 3, b: 4 } + ] + }; + }, + + test({ assert, component, target }) { + const { things } = component; + + component.things = things.reverse(); + + assert.htmlEqual( + target.innerHTML, + ` +
    +
    + ` + ); + } +}; diff --git a/test/runtime/samples/spread-each-component/main.svelte b/packages/svelte/test/runtime/samples/spread-each-component/main.svelte similarity index 100% rename from test/runtime/samples/spread-each-component/main.svelte rename to packages/svelte/test/runtime/samples/spread-each-component/main.svelte diff --git a/packages/svelte/test/runtime/samples/spread-each-element/_config.js b/packages/svelte/test/runtime/samples/spread-each-element/_config.js new file mode 100644 index 0000000000..da851efebb --- /dev/null +++ b/packages/svelte/test/runtime/samples/spread-each-element/_config.js @@ -0,0 +1,29 @@ +export default { + html: ` +
    +
    + `, + + get props() { + return { + things: [ + { 'data-a': 1, 'data-b': 2 }, + { 'data-c': 3, 'data-d': 4 } + ] + }; + }, + + test({ assert, component, target }) { + const { things } = component; + + component.things = things.reverse(); + + assert.htmlEqual( + target.innerHTML, + ` +
    +
    + ` + ); + } +}; diff --git a/test/runtime/samples/spread-each-element/main.svelte b/packages/svelte/test/runtime/samples/spread-each-element/main.svelte similarity index 100% rename from test/runtime/samples/spread-each-element/main.svelte rename to packages/svelte/test/runtime/samples/spread-each-element/main.svelte diff --git a/packages/svelte/test/runtime/samples/spread-element-boolean/_config.js b/packages/svelte/test/runtime/samples/spread-element-boolean/_config.js new file mode 100644 index 0000000000..f5893d234e --- /dev/null +++ b/packages/svelte/test/runtime/samples/spread-element-boolean/_config.js @@ -0,0 +1,20 @@ +export default { + get props() { + return { props: { disabled: true } }; + }, + + html: ` + + `, + + test({ assert, component, target }) { + const button = target.querySelector('button'); + + assert.ok(button.disabled); + + component.props = { disabled: false }; + + assert.htmlEqual(target.innerHTML, ''); + assert.ok(!button.disabled); + } +}; diff --git a/test/runtime/samples/spread-element-boolean/main.svelte b/packages/svelte/test/runtime/samples/spread-element-boolean/main.svelte similarity index 100% rename from test/runtime/samples/spread-element-boolean/main.svelte rename to packages/svelte/test/runtime/samples/spread-element-boolean/main.svelte diff --git a/test/runtime/samples/spread-element-class/_config.js b/packages/svelte/test/runtime/samples/spread-element-class/_config.js similarity index 100% rename from test/runtime/samples/spread-element-class/_config.js rename to packages/svelte/test/runtime/samples/spread-element-class/_config.js diff --git a/test/runtime/samples/spread-element-class/main.svelte b/packages/svelte/test/runtime/samples/spread-element-class/main.svelte similarity index 100% rename from test/runtime/samples/spread-element-class/main.svelte rename to packages/svelte/test/runtime/samples/spread-element-class/main.svelte diff --git a/packages/svelte/test/runtime/samples/spread-element-input-bind-group-with-value-attr/_config.js b/packages/svelte/test/runtime/samples/spread-element-input-bind-group-with-value-attr/_config.js new file mode 100644 index 0000000000..589aeb3ad6 --- /dev/null +++ b/packages/svelte/test/runtime/samples/spread-element-input-bind-group-with-value-attr/_config.js @@ -0,0 +1,13 @@ +export default { + get props() { + return { props: { 'data-foo': 'bar' } }; + }, + + html: '', + + async test({ assert, target }) { + const input = target.querySelector('input'); + assert.equal(input.value, 'abc'); + assert.equal(input.__value, 'abc'); + } +}; diff --git a/test/runtime/samples/spread-element-input-bind-group-with-value-attr/main.svelte b/packages/svelte/test/runtime/samples/spread-element-input-bind-group-with-value-attr/main.svelte similarity index 100% rename from test/runtime/samples/spread-element-input-bind-group-with-value-attr/main.svelte rename to packages/svelte/test/runtime/samples/spread-element-input-bind-group-with-value-attr/main.svelte diff --git a/test/runtime/samples/spread-element-input-each-block-keyed/_config.js b/packages/svelte/test/runtime/samples/spread-element-input-each-block-keyed/_config.js similarity index 100% rename from test/runtime/samples/spread-element-input-each-block-keyed/_config.js rename to packages/svelte/test/runtime/samples/spread-element-input-each-block-keyed/_config.js diff --git a/test/runtime/samples/spread-element-input-each-block-keyed/main.svelte b/packages/svelte/test/runtime/samples/spread-element-input-each-block-keyed/main.svelte similarity index 100% rename from test/runtime/samples/spread-element-input-each-block-keyed/main.svelte rename to packages/svelte/test/runtime/samples/spread-element-input-each-block-keyed/main.svelte diff --git a/test/runtime/samples/spread-element-input-select-multiple/_config.js b/packages/svelte/test/runtime/samples/spread-element-input-select-multiple/_config.js similarity index 100% rename from test/runtime/samples/spread-element-input-select-multiple/_config.js rename to packages/svelte/test/runtime/samples/spread-element-input-select-multiple/_config.js diff --git a/test/runtime/samples/spread-element-input-select-multiple/main.svelte b/packages/svelte/test/runtime/samples/spread-element-input-select-multiple/main.svelte similarity index 100% rename from test/runtime/samples/spread-element-input-select-multiple/main.svelte rename to packages/svelte/test/runtime/samples/spread-element-input-select-multiple/main.svelte diff --git a/test/runtime/samples/spread-element-input-select/_config.js b/packages/svelte/test/runtime/samples/spread-element-input-select/_config.js similarity index 100% rename from test/runtime/samples/spread-element-input-select/_config.js rename to packages/svelte/test/runtime/samples/spread-element-input-select/_config.js diff --git a/test/runtime/samples/spread-element-input-select/main.svelte b/packages/svelte/test/runtime/samples/spread-element-input-select/main.svelte similarity index 100% rename from test/runtime/samples/spread-element-input-select/main.svelte rename to packages/svelte/test/runtime/samples/spread-element-input-select/main.svelte diff --git a/test/runtime/samples/spread-element-input-value-undefined/_config.js b/packages/svelte/test/runtime/samples/spread-element-input-value-undefined/_config.js similarity index 100% rename from test/runtime/samples/spread-element-input-value-undefined/_config.js rename to packages/svelte/test/runtime/samples/spread-element-input-value-undefined/_config.js diff --git a/test/runtime/samples/spread-element-input-value-undefined/main.svelte b/packages/svelte/test/runtime/samples/spread-element-input-value-undefined/main.svelte similarity index 100% rename from test/runtime/samples/spread-element-input-value-undefined/main.svelte rename to packages/svelte/test/runtime/samples/spread-element-input-value-undefined/main.svelte diff --git a/test/runtime/samples/spread-element-input-value/InputOne.svelte b/packages/svelte/test/runtime/samples/spread-element-input-value/InputOne.svelte similarity index 100% rename from test/runtime/samples/spread-element-input-value/InputOne.svelte rename to packages/svelte/test/runtime/samples/spread-element-input-value/InputOne.svelte diff --git a/test/runtime/samples/spread-element-input-value/InputTwo.svelte b/packages/svelte/test/runtime/samples/spread-element-input-value/InputTwo.svelte similarity index 100% rename from test/runtime/samples/spread-element-input-value/InputTwo.svelte rename to packages/svelte/test/runtime/samples/spread-element-input-value/InputTwo.svelte diff --git a/packages/svelte/test/runtime/samples/spread-element-input-value/_config.js b/packages/svelte/test/runtime/samples/spread-element-input-value/_config.js new file mode 100644 index 0000000000..64ae0fe469 --- /dev/null +++ b/packages/svelte/test/runtime/samples/spread-element-input-value/_config.js @@ -0,0 +1,62 @@ +export default { + async test({ assert, component, target, window }) { + const [input1, input2] = target.querySelectorAll('input'); + + // we are not able emulate user interaction in jsdom, + // therefore, jsdom could not validate minlength / maxlength + + // we simulate user input with + // setting input.value + dispatchEvent + + // and we determine if svelte does not set the `input.value` again by + // spying on the setter of `input.value` + + const spy1 = spyOnValueSetter(input1, input1.value); + const spy2 = spyOnValueSetter(input2, input2.value); + + const event = new window.Event('input'); + + input1.value = '12345'; + spy1.reset(); + await input1.dispatchEvent(event); + + assert.ok(!spy1.isSetCalled()); + + input2.value = '12345'; + spy2.reset(); + await input2.dispatchEvent(event); + + assert.ok(!spy2.isSetCalled()); + + spy1.reset(); + component.val1 = '56789'; + assert.ok(spy1.isSetCalled()); + + spy2.reset(); + component.val2 = '56789'; + assert.ok(spy2.isSetCalled()); + } +}; + +function spyOnValueSetter(input, initialValue) { + let value = initialValue; + let isSet = false; + Object.defineProperty(input, 'value', { + get() { + return value; + }, + set(_value) { + value = _value; + isSet = true; + } + }); + + return { + isSetCalled() { + return isSet; + }, + reset() { + isSet = false; + } + }; +} diff --git a/test/runtime/samples/spread-element-input-value/main.svelte b/packages/svelte/test/runtime/samples/spread-element-input-value/main.svelte similarity index 100% rename from test/runtime/samples/spread-element-input-value/main.svelte rename to packages/svelte/test/runtime/samples/spread-element-input-value/main.svelte diff --git a/test/runtime/samples/spread-element-input-value/utils.js b/packages/svelte/test/runtime/samples/spread-element-input-value/utils.js similarity index 100% rename from test/runtime/samples/spread-element-input-value/utils.js rename to packages/svelte/test/runtime/samples/spread-element-input-value/utils.js diff --git a/packages/svelte/test/runtime/samples/spread-element-input/_config.js b/packages/svelte/test/runtime/samples/spread-element-input/_config.js new file mode 100644 index 0000000000..c25c5e9724 --- /dev/null +++ b/packages/svelte/test/runtime/samples/spread-element-input/_config.js @@ -0,0 +1,7 @@ +export default { + get props() { + return { props: { 'data-foo': 'bar' } }; + }, + + html: '' +}; diff --git a/test/runtime/samples/spread-element-input/main.svelte b/packages/svelte/test/runtime/samples/spread-element-input/main.svelte similarity index 100% rename from test/runtime/samples/spread-element-input/main.svelte rename to packages/svelte/test/runtime/samples/spread-element-input/main.svelte diff --git a/packages/svelte/test/runtime/samples/spread-element-multiple-dependencies/_config.js b/packages/svelte/test/runtime/samples/spread-element-multiple-dependencies/_config.js new file mode 100644 index 0000000000..5078df6b58 --- /dev/null +++ b/packages/svelte/test/runtime/samples/spread-element-multiple-dependencies/_config.js @@ -0,0 +1,7 @@ +export default { + html: "
    ", + test({ assert, component, target }) { + component.foo = true; + assert.htmlEqual(target.innerHTML, "
    "); + } +}; diff --git a/test/runtime/samples/spread-element-multiple-dependencies/main.svelte b/packages/svelte/test/runtime/samples/spread-element-multiple-dependencies/main.svelte similarity index 100% rename from test/runtime/samples/spread-element-multiple-dependencies/main.svelte rename to packages/svelte/test/runtime/samples/spread-element-multiple-dependencies/main.svelte diff --git a/packages/svelte/test/runtime/samples/spread-element-multiple/_config.js b/packages/svelte/test/runtime/samples/spread-element-multiple/_config.js new file mode 100644 index 0000000000..e67cf2b937 --- /dev/null +++ b/packages/svelte/test/runtime/samples/spread-element-multiple/_config.js @@ -0,0 +1,28 @@ +export default { + get props() { + return { + a: { 'data-one': 1, 'data-two': 2 }, + c: { 'data-b': 'overridden' }, + d: 'deeeeee' + }; + }, + + html: ` +
    test
    + `, + + test({ assert, component, target }) { + component.a = { + 'data-one': 10 + }; + component.c = { + 'data-c': 'new' + }; + component.d = 'DEEEEEE'; + + assert.htmlEqual( + target.innerHTML, + '
    test
    ' + ); + } +}; diff --git a/test/runtime/samples/spread-element-multiple/main.svelte b/packages/svelte/test/runtime/samples/spread-element-multiple/main.svelte similarity index 100% rename from test/runtime/samples/spread-element-multiple/main.svelte rename to packages/svelte/test/runtime/samples/spread-element-multiple/main.svelte diff --git a/test/runtime/samples/spread-element-readonly/_config.js b/packages/svelte/test/runtime/samples/spread-element-readonly/_config.js similarity index 100% rename from test/runtime/samples/spread-element-readonly/_config.js rename to packages/svelte/test/runtime/samples/spread-element-readonly/_config.js diff --git a/test/runtime/samples/spread-element-readonly/main.svelte b/packages/svelte/test/runtime/samples/spread-element-readonly/main.svelte similarity index 100% rename from test/runtime/samples/spread-element-readonly/main.svelte rename to packages/svelte/test/runtime/samples/spread-element-readonly/main.svelte diff --git a/test/runtime/samples/spread-element-removal/_config.js b/packages/svelte/test/runtime/samples/spread-element-removal/_config.js similarity index 100% rename from test/runtime/samples/spread-element-removal/_config.js rename to packages/svelte/test/runtime/samples/spread-element-removal/_config.js diff --git a/test/runtime/samples/spread-element-removal/main.svelte b/packages/svelte/test/runtime/samples/spread-element-removal/main.svelte similarity index 100% rename from test/runtime/samples/spread-element-removal/main.svelte rename to packages/svelte/test/runtime/samples/spread-element-removal/main.svelte diff --git a/test/runtime/samples/spread-element-scope/_config.js b/packages/svelte/test/runtime/samples/spread-element-scope/_config.js similarity index 100% rename from test/runtime/samples/spread-element-scope/_config.js rename to packages/svelte/test/runtime/samples/spread-element-scope/_config.js diff --git a/test/runtime/samples/spread-element-scope/main.svelte b/packages/svelte/test/runtime/samples/spread-element-scope/main.svelte similarity index 100% rename from test/runtime/samples/spread-element-scope/main.svelte rename to packages/svelte/test/runtime/samples/spread-element-scope/main.svelte diff --git a/test/runtime/samples/spread-element-select-value-undefined/Select.svelte b/packages/svelte/test/runtime/samples/spread-element-select-value-undefined/Select.svelte similarity index 100% rename from test/runtime/samples/spread-element-select-value-undefined/Select.svelte rename to packages/svelte/test/runtime/samples/spread-element-select-value-undefined/Select.svelte diff --git a/test/runtime/samples/spread-element-select-value-undefined/_config.js b/packages/svelte/test/runtime/samples/spread-element-select-value-undefined/_config.js similarity index 100% rename from test/runtime/samples/spread-element-select-value-undefined/_config.js rename to packages/svelte/test/runtime/samples/spread-element-select-value-undefined/_config.js diff --git a/test/runtime/samples/spread-element-select-value-undefined/main.svelte b/packages/svelte/test/runtime/samples/spread-element-select-value-undefined/main.svelte similarity index 100% rename from test/runtime/samples/spread-element-select-value-undefined/main.svelte rename to packages/svelte/test/runtime/samples/spread-element-select-value-undefined/main.svelte diff --git a/packages/svelte/test/runtime/samples/spread-element/_config.js b/packages/svelte/test/runtime/samples/spread-element/_config.js new file mode 100644 index 0000000000..215e4a56f4 --- /dev/null +++ b/packages/svelte/test/runtime/samples/spread-element/_config.js @@ -0,0 +1,21 @@ +export default { + html: '
    red
    ', + + test({ assert, component, target }) { + const div = target.querySelector('div'); + + assert.equal(div.dataset.foo, 'bar'); + assert.equal(div.dataset.named, 'value'); + + component.color = 'blue'; + component.props = { 'data-foo': 'baz', 'data-named': 'qux' }; + assert.htmlEqual(target.innerHTML, '
    blue
    '); + assert.equal(div.dataset.foo, 'baz'); + assert.equal(div.dataset.named, 'value'); + + component.color = 'blue'; + component.props = {}; + assert.htmlEqual(target.innerHTML, '
    blue
    '); + assert.equal(div.dataset.foo, undefined); + } +}; diff --git a/test/runtime/samples/spread-element/main.svelte b/packages/svelte/test/runtime/samples/spread-element/main.svelte similarity index 100% rename from test/runtime/samples/spread-element/main.svelte rename to packages/svelte/test/runtime/samples/spread-element/main.svelte diff --git a/test/runtime/samples/spread-own-props/Widget.svelte b/packages/svelte/test/runtime/samples/spread-own-props/Widget.svelte similarity index 100% rename from test/runtime/samples/spread-own-props/Widget.svelte rename to packages/svelte/test/runtime/samples/spread-own-props/Widget.svelte diff --git a/packages/svelte/test/runtime/samples/spread-own-props/_config.js b/packages/svelte/test/runtime/samples/spread-own-props/_config.js new file mode 100644 index 0000000000..fe8cafa21d --- /dev/null +++ b/packages/svelte/test/runtime/samples/spread-own-props/_config.js @@ -0,0 +1,36 @@ +export default { + get props() { + return { + foo: 'lol', + baz: 40 + 2, + qux: `this is a ${'piece of'} string`, + quux: 'core' + }; + }, + + html: ` +

    foo: lol

    +

    baz: 42 (number)

    +

    qux: named

    +

    quux: core

    + `, + + async test({ assert, component, target }) { + await component.$set({ + foo: 'wut', + baz: 40 + 3, + qux: `this is a ${'rather boring'} string`, + quux: 'heart' + }); + + assert.htmlEqual( + target.innerHTML, + ` +

    foo: wut

    +

    baz: 43 (number)

    +

    qux: named

    +

    quux: heart

    + ` + ); + } +}; diff --git a/test/runtime/samples/spread-own-props/main.svelte b/packages/svelte/test/runtime/samples/spread-own-props/main.svelte similarity index 100% rename from test/runtime/samples/spread-own-props/main.svelte rename to packages/svelte/test/runtime/samples/spread-own-props/main.svelte diff --git a/test/runtime/samples/spread-reuse-levels/Nested.svelte b/packages/svelte/test/runtime/samples/spread-reuse-levels/Nested.svelte similarity index 100% rename from test/runtime/samples/spread-reuse-levels/Nested.svelte rename to packages/svelte/test/runtime/samples/spread-reuse-levels/Nested.svelte diff --git a/packages/svelte/test/runtime/samples/spread-reuse-levels/_config.js b/packages/svelte/test/runtime/samples/spread-reuse-levels/_config.js new file mode 100644 index 0000000000..0b19296c40 --- /dev/null +++ b/packages/svelte/test/runtime/samples/spread-reuse-levels/_config.js @@ -0,0 +1,23 @@ +export default { + html: ` +
    {"a":1,"b":[1],"c":42}
    +
    {"a":false,"b":false,"c":false}
    + `, + + ssrHtml: ` +
    {"a":1,"b":[1],"c":42}
    +
    {}
    + `, + + test({ assert, component, target }) { + component.a = 2; + + assert.htmlEqual( + target.innerHTML, + ` +
    {"a":2,"b":[1],"c":42}
    +
    {"a":true,"b":false,"c":false}
    + ` + ); + } +}; diff --git a/test/runtime/samples/spread-reuse-levels/main.svelte b/packages/svelte/test/runtime/samples/spread-reuse-levels/main.svelte similarity index 100% rename from test/runtime/samples/spread-reuse-levels/main.svelte rename to packages/svelte/test/runtime/samples/spread-reuse-levels/main.svelte diff --git a/test/runtime/samples/spread-width-height-attributes/_config.js b/packages/svelte/test/runtime/samples/spread-width-height-attributes/_config.js similarity index 100% rename from test/runtime/samples/spread-width-height-attributes/_config.js rename to packages/svelte/test/runtime/samples/spread-width-height-attributes/_config.js diff --git a/test/runtime/samples/spread-width-height-attributes/main.svelte b/packages/svelte/test/runtime/samples/spread-width-height-attributes/main.svelte similarity index 100% rename from test/runtime/samples/spread-width-height-attributes/main.svelte rename to packages/svelte/test/runtime/samples/spread-width-height-attributes/main.svelte diff --git a/test/runtime/samples/spring/_config.js b/packages/svelte/test/runtime/samples/spring/_config.js similarity index 100% rename from test/runtime/samples/spring/_config.js rename to packages/svelte/test/runtime/samples/spring/_config.js diff --git a/test/runtime/samples/spring/main.svelte b/packages/svelte/test/runtime/samples/spring/main.svelte similarity index 100% rename from test/runtime/samples/spring/main.svelte rename to packages/svelte/test/runtime/samples/spring/main.svelte diff --git a/packages/svelte/test/runtime/samples/state-deconflicted/_config.js b/packages/svelte/test/runtime/samples/state-deconflicted/_config.js new file mode 100644 index 0000000000..1039c3f470 --- /dev/null +++ b/packages/svelte/test/runtime/samples/state-deconflicted/_config.js @@ -0,0 +1,51 @@ +export default { + get props() { + return { + state: 'deconflicted', + states: ['Alabama', 'Alaska', 'Arizona', 'Arkansas', '...and some others'] + }; + }, + + html: ` +

    Current state: deconflicted

    + +
      +
    • Alabama
    • +
    • Alaska
    • +
    • Arizona
    • +
    • Arkansas
    • +
    • ...and some others
    • +
    + `, + + test({ assert, component, target }) { + component.states = [ + 'Maine', + 'Maryland', + 'Massachusetts', + 'Michigan', + 'Minnesota', + 'Mississippi', + 'Missouri', + 'Montana' + ]; + + assert.htmlEqual( + target.innerHTML, + ` +

    Current state: deconflicted

    + +
      +
    • Maine
    • +
    • Maryland
    • +
    • Massachusetts
    • +
    • Michigan
    • +
    • Minnesota
    • +
    • Mississippi
    • +
    • Missouri
    • +
    • Montana
    • +
    + ` + ); + } +}; diff --git a/test/runtime/samples/state-deconflicted/main.svelte b/packages/svelte/test/runtime/samples/state-deconflicted/main.svelte similarity index 100% rename from test/runtime/samples/state-deconflicted/main.svelte rename to packages/svelte/test/runtime/samples/state-deconflicted/main.svelte diff --git a/test/runtime/samples/static-svelte-element/_config.js b/packages/svelte/test/runtime/samples/static-svelte-element/_config.js similarity index 100% rename from test/runtime/samples/static-svelte-element/_config.js rename to packages/svelte/test/runtime/samples/static-svelte-element/_config.js diff --git a/test/runtime/samples/static-svelte-element/main.svelte b/packages/svelte/test/runtime/samples/static-svelte-element/main.svelte similarity index 100% rename from test/runtime/samples/static-svelte-element/main.svelte rename to packages/svelte/test/runtime/samples/static-svelte-element/main.svelte diff --git a/test/runtime/samples/static-svelte-element2/_config.js b/packages/svelte/test/runtime/samples/static-svelte-element2/_config.js similarity index 100% rename from test/runtime/samples/static-svelte-element2/_config.js rename to packages/svelte/test/runtime/samples/static-svelte-element2/_config.js diff --git a/test/runtime/samples/static-svelte-element2/main.svelte b/packages/svelte/test/runtime/samples/static-svelte-element2/main.svelte similarity index 100% rename from test/runtime/samples/static-svelte-element2/main.svelte rename to packages/svelte/test/runtime/samples/static-svelte-element2/main.svelte diff --git a/test/runtime/samples/store-assignment-updates-destructure/_config.js b/packages/svelte/test/runtime/samples/store-assignment-updates-destructure/_config.js similarity index 100% rename from test/runtime/samples/store-assignment-updates-destructure/_config.js rename to packages/svelte/test/runtime/samples/store-assignment-updates-destructure/_config.js diff --git a/test/runtime/samples/store-assignment-updates-destructure/main.svelte b/packages/svelte/test/runtime/samples/store-assignment-updates-destructure/main.svelte similarity index 100% rename from test/runtime/samples/store-assignment-updates-destructure/main.svelte rename to packages/svelte/test/runtime/samples/store-assignment-updates-destructure/main.svelte diff --git a/packages/svelte/test/runtime/samples/store-assignment-updates-property/_config.js b/packages/svelte/test/runtime/samples/store-assignment-updates-property/_config.js new file mode 100644 index 0000000000..7a963dd553 --- /dev/null +++ b/packages/svelte/test/runtime/samples/store-assignment-updates-property/_config.js @@ -0,0 +1,37 @@ +export default { + html: ` +

    a: {"foo":3,"bar":2}

    +

    b: {"foo":3}

    + + + `, + + async test({ assert, target, window }) { + const [btn1, btn2] = target.querySelectorAll('button'); + const click = new window.MouseEvent('click'); + + await btn1.dispatchEvent(click); + + assert.htmlEqual( + target.innerHTML, + ` +

    a: {"foo":4,"bar":2}

    +

    b: {"foo":4,"baz":0}

    + + + ` + ); + + await btn2.dispatchEvent(click); + + assert.htmlEqual( + target.innerHTML, + ` +

    a: {"foo":5,"bar":2}

    +

    b: {"foo":5,"qux":0}

    + + + ` + ); + } +}; diff --git a/packages/svelte/test/runtime/samples/store-assignment-updates-property/main.svelte b/packages/svelte/test/runtime/samples/store-assignment-updates-property/main.svelte new file mode 100644 index 0000000000..b2c4a3d1c0 --- /dev/null +++ b/packages/svelte/test/runtime/samples/store-assignment-updates-property/main.svelte @@ -0,0 +1,24 @@ + + +

    a: {JSON.stringify($a)}

    +

    b: {JSON.stringify($b)}

    + + + `, + + async test({ assert, component, target, window }) { + const button = target.querySelector('button'); + const click = new window.MouseEvent('click'); + + await button.dispatchEvent(click); + + assert.htmlEqual( + target.innerHTML, + ` +

    a: 1

    +

    b: 1

    +

    c: 1

    + + + ` + ); + + await component.c.set(42); + + assert.htmlEqual( + target.innerHTML, + ` +

    a: 42

    +

    b: 42

    +

    c: 42

    + + + ` + ); + } +}; diff --git a/packages/svelte/test/runtime/samples/store-assignment-updates-reactive/main.svelte b/packages/svelte/test/runtime/samples/store-assignment-updates-reactive/main.svelte new file mode 100644 index 0000000000..abf70241fa --- /dev/null +++ b/packages/svelte/test/runtime/samples/store-assignment-updates-reactive/main.svelte @@ -0,0 +1,20 @@ + + +

    a: {$a}

    +

    b: {$b}

    +

    c: {$c}

    + + \ No newline at end of file diff --git a/packages/svelte/test/runtime/samples/store-assignment-updates/_config.js b/packages/svelte/test/runtime/samples/store-assignment-updates/_config.js new file mode 100644 index 0000000000..baa0590f5e --- /dev/null +++ b/packages/svelte/test/runtime/samples/store-assignment-updates/_config.js @@ -0,0 +1,37 @@ +import { writable } from 'svelte/store'; + +export default { + get props() { + return { count: writable(0) }; + }, + + html: ` + +

    doubled: 0

    + `, + + async test({ assert, component, target, window }) { + const button = target.querySelector('button'); + const click = new window.MouseEvent('click'); + + await button.dispatchEvent(click); + + assert.htmlEqual( + target.innerHTML, + ` + +

    doubled: 2

    + ` + ); + + await component.count.set(42); + + assert.htmlEqual( + target.innerHTML, + ` + +

    doubled: 84

    + ` + ); + } +}; diff --git a/packages/svelte/test/runtime/samples/store-assignment-updates/main.svelte b/packages/svelte/test/runtime/samples/store-assignment-updates/main.svelte new file mode 100644 index 0000000000..4f499ca54d --- /dev/null +++ b/packages/svelte/test/runtime/samples/store-assignment-updates/main.svelte @@ -0,0 +1,9 @@ + + + +

    doubled: {$doubled}

    \ No newline at end of file diff --git a/test/runtime/samples/store-auto-resubscribe-immediate/_config.js b/packages/svelte/test/runtime/samples/store-auto-resubscribe-immediate/_config.js similarity index 100% rename from test/runtime/samples/store-auto-resubscribe-immediate/_config.js rename to packages/svelte/test/runtime/samples/store-auto-resubscribe-immediate/_config.js diff --git a/packages/svelte/test/runtime/samples/store-auto-resubscribe-immediate/main.svelte b/packages/svelte/test/runtime/samples/store-auto-resubscribe-immediate/main.svelte new file mode 100644 index 0000000000..3bcab5674a --- /dev/null +++ b/packages/svelte/test/runtime/samples/store-auto-resubscribe-immediate/main.svelte @@ -0,0 +1,31 @@ + + +{JSON.stringify($value)} diff --git a/packages/svelte/test/runtime/samples/store-auto-subscribe-event-callback/_config.js b/packages/svelte/test/runtime/samples/store-auto-subscribe-event-callback/_config.js new file mode 100644 index 0000000000..58b1740f0f --- /dev/null +++ b/packages/svelte/test/runtime/samples/store-auto-subscribe-event-callback/_config.js @@ -0,0 +1,25 @@ +export default { + html: ` + + Dirty: false + Valid: false + `, + + async test({ assert, target, window }) { + const input = target.querySelector('input'); + + input.value = 'foo'; + const inputEvent = new window.InputEvent('input'); + + await input.dispatchEvent(inputEvent); + + assert.htmlEqual( + target.innerHTML, + ` + + Dirty: true + Valid: true + ` + ); + } +}; diff --git a/test/runtime/samples/store-auto-subscribe-event-callback/main.svelte b/packages/svelte/test/runtime/samples/store-auto-subscribe-event-callback/main.svelte similarity index 100% rename from test/runtime/samples/store-auto-subscribe-event-callback/main.svelte rename to packages/svelte/test/runtime/samples/store-auto-subscribe-event-callback/main.svelte diff --git a/test/runtime/samples/store-auto-subscribe-immediate-multiple-vars/_config.js b/packages/svelte/test/runtime/samples/store-auto-subscribe-immediate-multiple-vars/_config.js similarity index 100% rename from test/runtime/samples/store-auto-subscribe-immediate-multiple-vars/_config.js rename to packages/svelte/test/runtime/samples/store-auto-subscribe-immediate-multiple-vars/_config.js diff --git a/test/runtime/samples/store-auto-subscribe-immediate-multiple-vars/main.svelte b/packages/svelte/test/runtime/samples/store-auto-subscribe-immediate-multiple-vars/main.svelte similarity index 100% rename from test/runtime/samples/store-auto-subscribe-immediate-multiple-vars/main.svelte rename to packages/svelte/test/runtime/samples/store-auto-subscribe-immediate-multiple-vars/main.svelte diff --git a/test/runtime/samples/store-auto-subscribe-immediate/_config.js b/packages/svelte/test/runtime/samples/store-auto-subscribe-immediate/_config.js similarity index 100% rename from test/runtime/samples/store-auto-subscribe-immediate/_config.js rename to packages/svelte/test/runtime/samples/store-auto-subscribe-immediate/_config.js diff --git a/test/runtime/samples/store-auto-subscribe-immediate/main.svelte b/packages/svelte/test/runtime/samples/store-auto-subscribe-immediate/main.svelte similarity index 100% rename from test/runtime/samples/store-auto-subscribe-immediate/main.svelte rename to packages/svelte/test/runtime/samples/store-auto-subscribe-immediate/main.svelte diff --git a/packages/svelte/test/runtime/samples/store-auto-subscribe-implicit/_config.js b/packages/svelte/test/runtime/samples/store-auto-subscribe-implicit/_config.js new file mode 100644 index 0000000000..7d2dc76387 --- /dev/null +++ b/packages/svelte/test/runtime/samples/store-auto-subscribe-implicit/_config.js @@ -0,0 +1,34 @@ +import { writable } from 'svelte/store'; + +export default { + get props() { + return { count: writable(0) }; + }, + + html: ` + + `, + + async test({ assert, component, target, window }) { + const button = target.querySelector('button'); + const click = new window.MouseEvent('click'); + + await button.dispatchEvent(click); + + assert.htmlEqual( + target.innerHTML, + ` + + ` + ); + + await component.count.set(42); + + assert.htmlEqual( + target.innerHTML, + ` + + ` + ); + } +}; diff --git a/test/runtime/samples/store-auto-subscribe-implicit/main.svelte b/packages/svelte/test/runtime/samples/store-auto-subscribe-implicit/main.svelte similarity index 100% rename from test/runtime/samples/store-auto-subscribe-implicit/main.svelte rename to packages/svelte/test/runtime/samples/store-auto-subscribe-implicit/main.svelte diff --git a/packages/svelte/test/runtime/samples/store-auto-subscribe-in-each/_config.js b/packages/svelte/test/runtime/samples/store-auto-subscribe-in-each/_config.js new file mode 100644 index 0000000000..babd52fa33 --- /dev/null +++ b/packages/svelte/test/runtime/samples/store-auto-subscribe-in-each/_config.js @@ -0,0 +1,44 @@ +import { writable } from 'svelte/store'; + +export default { + skip: true, + + get props() { + return { + things: [writable('a'), writable('b'), writable('c')] + }; + }, + + html: ` + + + + `, + + async test({ assert, component, target, window }) { + const buttons = target.querySelectorAll('button'); + const click = new window.MouseEvent('click'); + + await buttons[1].dispatchEvent(click); + + assert.htmlEqual( + target.innerHTML, + ` + + + + ` + ); + + await component.things[1].set('d'); + + assert.htmlEqual( + target.innerHTML, + ` + + + + ` + ); + } +}; diff --git a/test/runtime/samples/store-auto-subscribe-in-each/main.svelte b/packages/svelte/test/runtime/samples/store-auto-subscribe-in-each/main.svelte similarity index 100% rename from test/runtime/samples/store-auto-subscribe-in-each/main.svelte rename to packages/svelte/test/runtime/samples/store-auto-subscribe-in-each/main.svelte diff --git a/test/runtime/samples/store-auto-subscribe-in-reactive-declaration-2/App.svelte b/packages/svelte/test/runtime/samples/store-auto-subscribe-in-reactive-declaration-2/App.svelte similarity index 100% rename from test/runtime/samples/store-auto-subscribe-in-reactive-declaration-2/App.svelte rename to packages/svelte/test/runtime/samples/store-auto-subscribe-in-reactive-declaration-2/App.svelte diff --git a/packages/svelte/test/runtime/samples/store-auto-subscribe-in-reactive-declaration-2/_config.js b/packages/svelte/test/runtime/samples/store-auto-subscribe-in-reactive-declaration-2/_config.js new file mode 100644 index 0000000000..10aa438d7c --- /dev/null +++ b/packages/svelte/test/runtime/samples/store-auto-subscribe-in-reactive-declaration-2/_config.js @@ -0,0 +1,18 @@ +export default { + html: ` +
    Hello World
    +
    Hello World
    + `, + + async test({ assert, component, target }) { + await component.update_value('Hi Svelte'); + + assert.htmlEqual( + target.innerHTML, + ` +
    Hi Svelte
    +
    Hi Svelte
    + ` + ); + } +}; diff --git a/test/runtime/samples/store-auto-subscribe-in-reactive-declaration-2/main.svelte b/packages/svelte/test/runtime/samples/store-auto-subscribe-in-reactive-declaration-2/main.svelte similarity index 100% rename from test/runtime/samples/store-auto-subscribe-in-reactive-declaration-2/main.svelte rename to packages/svelte/test/runtime/samples/store-auto-subscribe-in-reactive-declaration-2/main.svelte diff --git a/packages/svelte/test/runtime/samples/store-auto-subscribe-in-reactive-declaration/_config.js b/packages/svelte/test/runtime/samples/store-auto-subscribe-in-reactive-declaration/_config.js new file mode 100644 index 0000000000..19cd265e26 --- /dev/null +++ b/packages/svelte/test/runtime/samples/store-auto-subscribe-in-reactive-declaration/_config.js @@ -0,0 +1,34 @@ +import { writable } from 'svelte/store'; + +export default { + get props() { + return { count: writable(0) }; + }, + + html: ` + + `, + + async test({ assert, component, target, window }) { + const button = target.querySelector('button'); + const click = new window.MouseEvent('click'); + + await button.dispatchEvent(click); + + assert.htmlEqual( + target.innerHTML, + ` + + ` + ); + + await component.count.set(42); + + assert.htmlEqual( + target.innerHTML, + ` + + ` + ); + } +}; diff --git a/test/runtime/samples/store-auto-subscribe-in-reactive-declaration/main.svelte b/packages/svelte/test/runtime/samples/store-auto-subscribe-in-reactive-declaration/main.svelte similarity index 100% rename from test/runtime/samples/store-auto-subscribe-in-reactive-declaration/main.svelte rename to packages/svelte/test/runtime/samples/store-auto-subscribe-in-reactive-declaration/main.svelte diff --git a/packages/svelte/test/runtime/samples/store-auto-subscribe-in-script/_config.js b/packages/svelte/test/runtime/samples/store-auto-subscribe-in-script/_config.js new file mode 100644 index 0000000000..9602e4b165 --- /dev/null +++ b/packages/svelte/test/runtime/samples/store-auto-subscribe-in-script/_config.js @@ -0,0 +1,27 @@ +import { writable } from 'svelte/store'; + +let count = writable(0); + +export default { + get props() { + count = writable(0); + return { count }; + }, + + html: ` + + `, + + async test({ assert, component, target, window }) { + assert.equal(component.get_count(), 0); + + const button = target.querySelector('button'); + const click = new window.MouseEvent('click'); + + await button.dispatchEvent(click); + assert.equal(component.get_count(), 1); + + await count.set(42); + assert.equal(component.get_count(), 42); + } +}; diff --git a/test/runtime/samples/store-auto-subscribe-in-script/main.svelte b/packages/svelte/test/runtime/samples/store-auto-subscribe-in-script/main.svelte similarity index 100% rename from test/runtime/samples/store-auto-subscribe-in-script/main.svelte rename to packages/svelte/test/runtime/samples/store-auto-subscribe-in-script/main.svelte diff --git a/test/runtime/samples/store-auto-subscribe-missing-global-script/_config.js b/packages/svelte/test/runtime/samples/store-auto-subscribe-missing-global-script/_config.js similarity index 100% rename from test/runtime/samples/store-auto-subscribe-missing-global-script/_config.js rename to packages/svelte/test/runtime/samples/store-auto-subscribe-missing-global-script/_config.js diff --git a/test/runtime/samples/store-auto-subscribe-missing-global-script/main.svelte b/packages/svelte/test/runtime/samples/store-auto-subscribe-missing-global-script/main.svelte similarity index 100% rename from test/runtime/samples/store-auto-subscribe-missing-global-script/main.svelte rename to packages/svelte/test/runtime/samples/store-auto-subscribe-missing-global-script/main.svelte diff --git a/test/runtime/samples/store-auto-subscribe-missing-global-template/_config.js b/packages/svelte/test/runtime/samples/store-auto-subscribe-missing-global-template/_config.js similarity index 100% rename from test/runtime/samples/store-auto-subscribe-missing-global-template/_config.js rename to packages/svelte/test/runtime/samples/store-auto-subscribe-missing-global-template/_config.js diff --git a/test/runtime/samples/store-auto-subscribe-missing-global-template/main.svelte b/packages/svelte/test/runtime/samples/store-auto-subscribe-missing-global-template/main.svelte similarity index 100% rename from test/runtime/samples/store-auto-subscribe-missing-global-template/main.svelte rename to packages/svelte/test/runtime/samples/store-auto-subscribe-missing-global-template/main.svelte diff --git a/packages/svelte/test/runtime/samples/store-auto-subscribe-nullish/_config.js b/packages/svelte/test/runtime/samples/store-auto-subscribe-nullish/_config.js new file mode 100644 index 0000000000..88246fd0aa --- /dev/null +++ b/packages/svelte/test/runtime/samples/store-auto-subscribe-nullish/_config.js @@ -0,0 +1,16 @@ +import { writable } from 'svelte/store'; + +export default { + html: ` +

    undefined

    + `, + async test({ assert, component, target }) { + component.store = writable('foo'); + assert.htmlEqual( + target.innerHTML, + ` +

    foo

    + ` + ); + } +}; diff --git a/test/runtime/samples/store-auto-subscribe-nullish/main.svelte b/packages/svelte/test/runtime/samples/store-auto-subscribe-nullish/main.svelte similarity index 100% rename from test/runtime/samples/store-auto-subscribe-nullish/main.svelte rename to packages/svelte/test/runtime/samples/store-auto-subscribe-nullish/main.svelte diff --git a/packages/svelte/test/runtime/samples/store-auto-subscribe-removed-store/_config.js b/packages/svelte/test/runtime/samples/store-auto-subscribe-removed-store/_config.js new file mode 100644 index 0000000000..aac0e7d73a --- /dev/null +++ b/packages/svelte/test/runtime/samples/store-auto-subscribe-removed-store/_config.js @@ -0,0 +1,30 @@ +import { writable } from 'svelte/store'; + +export default { + html: ` +

    undefined

    + `, + async test({ assert, component, target }) { + component.store = writable('foo'); + assert.htmlEqual( + target.innerHTML, + ` +

    foo

    + ` + ); + component.store = undefined; + assert.htmlEqual( + target.innerHTML, + ` +

    undefined

    + ` + ); + component.store = writable('bar'); + assert.htmlEqual( + target.innerHTML, + ` +

    bar

    + ` + ); + } +}; diff --git a/packages/svelte/test/runtime/samples/store-auto-subscribe-removed-store/main.svelte b/packages/svelte/test/runtime/samples/store-auto-subscribe-removed-store/main.svelte new file mode 100644 index 0000000000..9c1ed4a560 --- /dev/null +++ b/packages/svelte/test/runtime/samples/store-auto-subscribe-removed-store/main.svelte @@ -0,0 +1,5 @@ + + +

    {$store}

    diff --git a/packages/svelte/test/runtime/samples/store-auto-subscribe/_config.js b/packages/svelte/test/runtime/samples/store-auto-subscribe/_config.js new file mode 100644 index 0000000000..7d2dc76387 --- /dev/null +++ b/packages/svelte/test/runtime/samples/store-auto-subscribe/_config.js @@ -0,0 +1,34 @@ +import { writable } from 'svelte/store'; + +export default { + get props() { + return { count: writable(0) }; + }, + + html: ` + + `, + + async test({ assert, component, target, window }) { + const button = target.querySelector('button'); + const click = new window.MouseEvent('click'); + + await button.dispatchEvent(click); + + assert.htmlEqual( + target.innerHTML, + ` + + ` + ); + + await component.count.set(42); + + assert.htmlEqual( + target.innerHTML, + ` + + ` + ); + } +}; diff --git a/test/runtime/samples/store-auto-subscribe/main.svelte b/packages/svelte/test/runtime/samples/store-auto-subscribe/main.svelte similarity index 100% rename from test/runtime/samples/store-auto-subscribe/main.svelte rename to packages/svelte/test/runtime/samples/store-auto-subscribe/main.svelte diff --git a/packages/svelte/test/runtime/samples/store-dev-mode-error/_config.js b/packages/svelte/test/runtime/samples/store-dev-mode-error/_config.js new file mode 100644 index 0000000000..48f11ab22d --- /dev/null +++ b/packages/svelte/test/runtime/samples/store-dev-mode-error/_config.js @@ -0,0 +1,11 @@ +export default { + compileOptions: { + dev: true + }, + + get props() { + return { count: 0 }; + }, + + error: "'count' is not a store with a 'subscribe' method" +}; diff --git a/test/runtime/samples/store-dev-mode-error/main.svelte b/packages/svelte/test/runtime/samples/store-dev-mode-error/main.svelte similarity index 100% rename from test/runtime/samples/store-dev-mode-error/main.svelte rename to packages/svelte/test/runtime/samples/store-dev-mode-error/main.svelte diff --git a/packages/svelte/test/runtime/samples/store-each-binding-deep/_config.js b/packages/svelte/test/runtime/samples/store-each-binding-deep/_config.js new file mode 100644 index 0000000000..b3de6fad7d --- /dev/null +++ b/packages/svelte/test/runtime/samples/store-each-binding-deep/_config.js @@ -0,0 +1,17 @@ +export default { + async test({ assert, target, window }) { + const input = target.querySelector('input'); + + const event = new window.Event('input'); + input.value = 'changed'; + await input.dispatchEvent(event); + + assert.htmlEqual( + target.innerHTML, + ` + +

    changed

    + ` + ); + } +}; diff --git a/test/runtime/samples/store-each-binding-deep/main.svelte b/packages/svelte/test/runtime/samples/store-each-binding-deep/main.svelte similarity index 100% rename from test/runtime/samples/store-each-binding-deep/main.svelte rename to packages/svelte/test/runtime/samples/store-each-binding-deep/main.svelte diff --git a/packages/svelte/test/runtime/samples/store-each-binding-destructuring/_config.js b/packages/svelte/test/runtime/samples/store-each-binding-destructuring/_config.js new file mode 100644 index 0000000000..b3de6fad7d --- /dev/null +++ b/packages/svelte/test/runtime/samples/store-each-binding-destructuring/_config.js @@ -0,0 +1,17 @@ +export default { + async test({ assert, target, window }) { + const input = target.querySelector('input'); + + const event = new window.Event('input'); + input.value = 'changed'; + await input.dispatchEvent(event); + + assert.htmlEqual( + target.innerHTML, + ` + +

    changed

    + ` + ); + } +}; diff --git a/test/runtime/samples/store-each-binding-destructuring/main.svelte b/packages/svelte/test/runtime/samples/store-each-binding-destructuring/main.svelte similarity index 100% rename from test/runtime/samples/store-each-binding-destructuring/main.svelte rename to packages/svelte/test/runtime/samples/store-each-binding-destructuring/main.svelte diff --git a/packages/svelte/test/runtime/samples/store-each-binding/_config.js b/packages/svelte/test/runtime/samples/store-each-binding/_config.js new file mode 100644 index 0000000000..b3de6fad7d --- /dev/null +++ b/packages/svelte/test/runtime/samples/store-each-binding/_config.js @@ -0,0 +1,17 @@ +export default { + async test({ assert, target, window }) { + const input = target.querySelector('input'); + + const event = new window.Event('input'); + input.value = 'changed'; + await input.dispatchEvent(event); + + assert.htmlEqual( + target.innerHTML, + ` + +

    changed

    + ` + ); + } +}; diff --git a/test/runtime/samples/store-each-binding/main.svelte b/packages/svelte/test/runtime/samples/store-each-binding/main.svelte similarity index 100% rename from test/runtime/samples/store-each-binding/main.svelte rename to packages/svelte/test/runtime/samples/store-each-binding/main.svelte diff --git a/test/runtime/samples/store-imported-module/_config.js b/packages/svelte/test/runtime/samples/store-imported-module/_config.js similarity index 100% rename from test/runtime/samples/store-imported-module/_config.js rename to packages/svelte/test/runtime/samples/store-imported-module/_config.js diff --git a/packages/svelte/test/runtime/samples/store-imported-module/foo.js b/packages/svelte/test/runtime/samples/store-imported-module/foo.js new file mode 100644 index 0000000000..b88c1cc577 --- /dev/null +++ b/packages/svelte/test/runtime/samples/store-imported-module/foo.js @@ -0,0 +1,3 @@ +import { writable } from 'svelte/store'; + +export default writable(42); diff --git a/test/runtime/samples/store-imported-module/main.svelte b/packages/svelte/test/runtime/samples/store-imported-module/main.svelte similarity index 100% rename from test/runtime/samples/store-imported-module/main.svelte rename to packages/svelte/test/runtime/samples/store-imported-module/main.svelte diff --git a/test/runtime/samples/store-imported/_config.js b/packages/svelte/test/runtime/samples/store-imported/_config.js similarity index 100% rename from test/runtime/samples/store-imported/_config.js rename to packages/svelte/test/runtime/samples/store-imported/_config.js diff --git a/packages/svelte/test/runtime/samples/store-imported/foo.js b/packages/svelte/test/runtime/samples/store-imported/foo.js new file mode 100644 index 0000000000..b88c1cc577 --- /dev/null +++ b/packages/svelte/test/runtime/samples/store-imported/foo.js @@ -0,0 +1,3 @@ +import { writable } from 'svelte/store'; + +export default writable(42); diff --git a/test/runtime/samples/store-imported/main.svelte b/packages/svelte/test/runtime/samples/store-imported/main.svelte similarity index 100% rename from test/runtime/samples/store-imported/main.svelte rename to packages/svelte/test/runtime/samples/store-imported/main.svelte diff --git a/test/runtime/samples/store-imports-hoisted/_config.js b/packages/svelte/test/runtime/samples/store-imports-hoisted/_config.js similarity index 100% rename from test/runtime/samples/store-imports-hoisted/_config.js rename to packages/svelte/test/runtime/samples/store-imports-hoisted/_config.js diff --git a/packages/svelte/test/runtime/samples/store-imports-hoisted/foo.js b/packages/svelte/test/runtime/samples/store-imports-hoisted/foo.js new file mode 100644 index 0000000000..b88c1cc577 --- /dev/null +++ b/packages/svelte/test/runtime/samples/store-imports-hoisted/foo.js @@ -0,0 +1,3 @@ +import { writable } from 'svelte/store'; + +export default writable(42); diff --git a/test/runtime/samples/store-imports-hoisted/main.svelte b/packages/svelte/test/runtime/samples/store-imports-hoisted/main.svelte similarity index 100% rename from test/runtime/samples/store-imports-hoisted/main.svelte rename to packages/svelte/test/runtime/samples/store-imports-hoisted/main.svelte diff --git a/test/runtime/samples/store-increment-updates-reactive/_config.js b/packages/svelte/test/runtime/samples/store-increment-updates-reactive/_config.js similarity index 100% rename from test/runtime/samples/store-increment-updates-reactive/_config.js rename to packages/svelte/test/runtime/samples/store-increment-updates-reactive/_config.js diff --git a/packages/svelte/test/runtime/samples/store-increment-updates-reactive/main.svelte b/packages/svelte/test/runtime/samples/store-increment-updates-reactive/main.svelte new file mode 100644 index 0000000000..4085f69fb4 --- /dev/null +++ b/packages/svelte/test/runtime/samples/store-increment-updates-reactive/main.svelte @@ -0,0 +1,11 @@ + + +{$foo} diff --git a/packages/svelte/test/runtime/samples/store-invalidation-while-update-1/_config.js b/packages/svelte/test/runtime/samples/store-invalidation-while-update-1/_config.js new file mode 100644 index 0000000000..eaa5b3c92b --- /dev/null +++ b/packages/svelte/test/runtime/samples/store-invalidation-while-update-1/_config.js @@ -0,0 +1,59 @@ +export default { + html: ` + +
    +
    simple
    + + `, + ssrHtml: ` + +
    +
    simple
    + + `, + + async test({ assert, target, window }) { + const input = target.querySelector('input'); + const button = target.querySelector('button'); + + const inputEvent = new window.InputEvent('input'); + const clickEvent = new window.MouseEvent('click'); + + input.value = 'foo'; + await input.dispatchEvent(inputEvent); + + assert.htmlEqual( + target.innerHTML, + ` + +
    foo
    +
    foo
    + + ` + ); + + await button.dispatchEvent(clickEvent); + assert.htmlEqual( + target.innerHTML, + ` + +
    foo
    +
    clicked
    + + ` + ); + + input.value = 'bar'; + await input.dispatchEvent(inputEvent); + + assert.htmlEqual( + target.innerHTML, + ` + +
    bar
    +
    bar
    + + ` + ); + } +}; diff --git a/test/runtime/samples/store-invalidation-while-update-1/main.svelte b/packages/svelte/test/runtime/samples/store-invalidation-while-update-1/main.svelte similarity index 100% rename from test/runtime/samples/store-invalidation-while-update-1/main.svelte rename to packages/svelte/test/runtime/samples/store-invalidation-while-update-1/main.svelte diff --git a/packages/svelte/test/runtime/samples/store-invalidation-while-update-2/_config.js b/packages/svelte/test/runtime/samples/store-invalidation-while-update-2/_config.js new file mode 100644 index 0000000000..8c318b0faf --- /dev/null +++ b/packages/svelte/test/runtime/samples/store-invalidation-while-update-2/_config.js @@ -0,0 +1,59 @@ +export default { + html: ` +
    +
    simple
    + + + `, + ssrHtml: ` +
    +
    simple
    + + + `, + + async test({ assert, target, window }) { + const input = target.querySelector('input'); + const button = target.querySelector('button'); + + const inputEvent = new window.InputEvent('input'); + const clickEvent = new window.MouseEvent('click'); + + input.value = 'foo'; + await input.dispatchEvent(inputEvent); + + assert.htmlEqual( + target.innerHTML, + ` +
    foo
    +
    foo
    + + + ` + ); + + await button.dispatchEvent(clickEvent); + assert.htmlEqual( + target.innerHTML, + ` +
    foo
    +
    clicked
    + + + ` + ); + + input.value = 'bar'; + await input.dispatchEvent(inputEvent); + + assert.htmlEqual( + target.innerHTML, + ` +
    bar
    +
    bar
    + + + ` + ); + } +}; diff --git a/test/runtime/samples/store-invalidation-while-update-2/main.svelte b/packages/svelte/test/runtime/samples/store-invalidation-while-update-2/main.svelte similarity index 100% rename from test/runtime/samples/store-invalidation-while-update-2/main.svelte rename to packages/svelte/test/runtime/samples/store-invalidation-while-update-2/main.svelte diff --git a/test/runtime/samples/store-resubscribe-b/_config.js b/packages/svelte/test/runtime/samples/store-resubscribe-b/_config.js similarity index 100% rename from test/runtime/samples/store-resubscribe-b/_config.js rename to packages/svelte/test/runtime/samples/store-resubscribe-b/_config.js diff --git a/test/runtime/samples/store-resubscribe-b/main.svelte b/packages/svelte/test/runtime/samples/store-resubscribe-b/main.svelte similarity index 100% rename from test/runtime/samples/store-resubscribe-b/main.svelte rename to packages/svelte/test/runtime/samples/store-resubscribe-b/main.svelte diff --git a/test/runtime/samples/store-resubscribe-c/_config.js b/packages/svelte/test/runtime/samples/store-resubscribe-c/_config.js similarity index 100% rename from test/runtime/samples/store-resubscribe-c/_config.js rename to packages/svelte/test/runtime/samples/store-resubscribe-c/_config.js diff --git a/test/runtime/samples/store-resubscribe-c/main.svelte b/packages/svelte/test/runtime/samples/store-resubscribe-c/main.svelte similarity index 100% rename from test/runtime/samples/store-resubscribe-c/main.svelte rename to packages/svelte/test/runtime/samples/store-resubscribe-c/main.svelte diff --git a/packages/svelte/test/runtime/samples/store-resubscribe-export/_config.js b/packages/svelte/test/runtime/samples/store-resubscribe-export/_config.js new file mode 100644 index 0000000000..b4615a27d1 --- /dev/null +++ b/packages/svelte/test/runtime/samples/store-resubscribe-export/_config.js @@ -0,0 +1,29 @@ +let unsubscribeCalled = false; + +const fakeStore = (val) => ({ + subscribe: (cb) => { + cb(val); + return { + unsubscribe: () => { + unsubscribeCalled = true; + } + }; + } +}); + +export default { + get props() { + return { foo: fakeStore(1) }; + }, + html: ` +

    1

    + `, + + async test({ assert, component, target }) { + component.foo = fakeStore(5); + + assert.htmlEqual(target.innerHTML, '

    5

    '); + + assert.ok(unsubscribeCalled); + } +}; diff --git a/test/runtime/samples/store-resubscribe-export/main.svelte b/packages/svelte/test/runtime/samples/store-resubscribe-export/main.svelte similarity index 100% rename from test/runtime/samples/store-resubscribe-export/main.svelte rename to packages/svelte/test/runtime/samples/store-resubscribe-export/main.svelte diff --git a/test/runtime/samples/store-resubscribe-observable/_config.js b/packages/svelte/test/runtime/samples/store-resubscribe-observable/_config.js similarity index 100% rename from test/runtime/samples/store-resubscribe-observable/_config.js rename to packages/svelte/test/runtime/samples/store-resubscribe-observable/_config.js diff --git a/test/runtime/samples/store-resubscribe-observable/main.svelte b/packages/svelte/test/runtime/samples/store-resubscribe-observable/main.svelte similarity index 100% rename from test/runtime/samples/store-resubscribe-observable/main.svelte rename to packages/svelte/test/runtime/samples/store-resubscribe-observable/main.svelte diff --git a/packages/svelte/test/runtime/samples/store-resubscribe/_config.js b/packages/svelte/test/runtime/samples/store-resubscribe/_config.js new file mode 100644 index 0000000000..fed2e1a204 --- /dev/null +++ b/packages/svelte/test/runtime/samples/store-resubscribe/_config.js @@ -0,0 +1,45 @@ +export default { + html: ` +

    0

    + + + `, + + async test({ assert, target, window }) { + const buttons = target.querySelectorAll('button'); + const click = new window.MouseEvent('click'); + + await buttons[0].dispatchEvent(click); + + assert.htmlEqual( + target.innerHTML, + ` +

    1

    + + + ` + ); + + await buttons[1].dispatchEvent(click); + + assert.htmlEqual( + target.innerHTML, + ` +

    0

    + + + ` + ); + + await buttons[0].dispatchEvent(click); + + assert.htmlEqual( + target.innerHTML, + ` +

    1

    + + + ` + ); + } +}; diff --git a/test/runtime/samples/store-resubscribe/main.svelte b/packages/svelte/test/runtime/samples/store-resubscribe/main.svelte similarity index 100% rename from test/runtime/samples/store-resubscribe/main.svelte rename to packages/svelte/test/runtime/samples/store-resubscribe/main.svelte diff --git a/packages/svelte/test/runtime/samples/store-shadow-scope-declaration/_config.js b/packages/svelte/test/runtime/samples/store-shadow-scope-declaration/_config.js new file mode 100644 index 0000000000..ff8b4c5632 --- /dev/null +++ b/packages/svelte/test/runtime/samples/store-shadow-scope-declaration/_config.js @@ -0,0 +1 @@ +export default {}; diff --git a/test/runtime/samples/store-shadow-scope-declaration/main.svelte b/packages/svelte/test/runtime/samples/store-shadow-scope-declaration/main.svelte similarity index 100% rename from test/runtime/samples/store-shadow-scope-declaration/main.svelte rename to packages/svelte/test/runtime/samples/store-shadow-scope-declaration/main.svelte diff --git a/test/runtime/samples/store-unreferenced/Nested.svelte b/packages/svelte/test/runtime/samples/store-unreferenced/Nested.svelte similarity index 100% rename from test/runtime/samples/store-unreferenced/Nested.svelte rename to packages/svelte/test/runtime/samples/store-unreferenced/Nested.svelte diff --git a/test/runtime/samples/store-unreferenced/_config.js b/packages/svelte/test/runtime/samples/store-unreferenced/_config.js similarity index 100% rename from test/runtime/samples/store-unreferenced/_config.js rename to packages/svelte/test/runtime/samples/store-unreferenced/_config.js diff --git a/test/runtime/samples/store-unreferenced/main.svelte b/packages/svelte/test/runtime/samples/store-unreferenced/main.svelte similarity index 100% rename from test/runtime/samples/store-unreferenced/main.svelte rename to packages/svelte/test/runtime/samples/store-unreferenced/main.svelte diff --git a/packages/svelte/test/runtime/samples/store-unreferenced/store.js b/packages/svelte/test/runtime/samples/store-unreferenced/store.js new file mode 100644 index 0000000000..d432d339ec --- /dev/null +++ b/packages/svelte/test/runtime/samples/store-unreferenced/store.js @@ -0,0 +1,3 @@ +import { writable } from 'svelte/store'; + +export const count = writable(0); diff --git a/test/runtime/samples/svg-attributes/_config.js b/packages/svelte/test/runtime/samples/svg-attributes/_config.js similarity index 100% rename from test/runtime/samples/svg-attributes/_config.js rename to packages/svelte/test/runtime/samples/svg-attributes/_config.js diff --git a/test/runtime/samples/svg-attributes/main.svelte b/packages/svelte/test/runtime/samples/svg-attributes/main.svelte similarity index 100% rename from test/runtime/samples/svg-attributes/main.svelte rename to packages/svelte/test/runtime/samples/svg-attributes/main.svelte diff --git a/test/runtime/samples/svg-child-component-declared-namespace-shorthand/Rect.svelte b/packages/svelte/test/runtime/samples/svg-child-component-declared-namespace-shorthand/Rect.svelte similarity index 100% rename from test/runtime/samples/svg-child-component-declared-namespace-shorthand/Rect.svelte rename to packages/svelte/test/runtime/samples/svg-child-component-declared-namespace-shorthand/Rect.svelte diff --git a/packages/svelte/test/runtime/samples/svg-child-component-declared-namespace-shorthand/_config.js b/packages/svelte/test/runtime/samples/svg-child-component-declared-namespace-shorthand/_config.js new file mode 100644 index 0000000000..a1b4a753e2 --- /dev/null +++ b/packages/svelte/test/runtime/samples/svg-child-component-declared-namespace-shorthand/_config.js @@ -0,0 +1,19 @@ +export default { + get props() { + return { x: 0, y: 0, width: 100, height: 100 }; + }, + + html: '', + + test({ assert, component, target }) { + const svg = target.querySelector('svg'); + const rect = target.querySelector('rect'); + + assert.equal(svg.namespaceURI, 'http://www.w3.org/2000/svg'); + assert.equal(rect.namespaceURI, 'http://www.w3.org/2000/svg'); + + component.width = 150; + component.height = 50; + assert.equal(target.innerHTML, ''); + } +}; diff --git a/test/runtime/samples/svg-child-component-declared-namespace-shorthand/main.svelte b/packages/svelte/test/runtime/samples/svg-child-component-declared-namespace-shorthand/main.svelte similarity index 100% rename from test/runtime/samples/svg-child-component-declared-namespace-shorthand/main.svelte rename to packages/svelte/test/runtime/samples/svg-child-component-declared-namespace-shorthand/main.svelte diff --git a/test/runtime/samples/svg-child-component-declared-namespace/Rect.svelte b/packages/svelte/test/runtime/samples/svg-child-component-declared-namespace/Rect.svelte similarity index 100% rename from test/runtime/samples/svg-child-component-declared-namespace/Rect.svelte rename to packages/svelte/test/runtime/samples/svg-child-component-declared-namespace/Rect.svelte diff --git a/packages/svelte/test/runtime/samples/svg-child-component-declared-namespace/_config.js b/packages/svelte/test/runtime/samples/svg-child-component-declared-namespace/_config.js new file mode 100644 index 0000000000..a1b4a753e2 --- /dev/null +++ b/packages/svelte/test/runtime/samples/svg-child-component-declared-namespace/_config.js @@ -0,0 +1,19 @@ +export default { + get props() { + return { x: 0, y: 0, width: 100, height: 100 }; + }, + + html: '', + + test({ assert, component, target }) { + const svg = target.querySelector('svg'); + const rect = target.querySelector('rect'); + + assert.equal(svg.namespaceURI, 'http://www.w3.org/2000/svg'); + assert.equal(rect.namespaceURI, 'http://www.w3.org/2000/svg'); + + component.width = 150; + component.height = 50; + assert.equal(target.innerHTML, ''); + } +}; diff --git a/test/runtime/samples/svg-child-component-declared-namespace/main.svelte b/packages/svelte/test/runtime/samples/svg-child-component-declared-namespace/main.svelte similarity index 100% rename from test/runtime/samples/svg-child-component-declared-namespace/main.svelte rename to packages/svelte/test/runtime/samples/svg-child-component-declared-namespace/main.svelte diff --git a/test/runtime/samples/svg-class/_config.js b/packages/svelte/test/runtime/samples/svg-class/_config.js similarity index 100% rename from test/runtime/samples/svg-class/_config.js rename to packages/svelte/test/runtime/samples/svg-class/_config.js diff --git a/test/runtime/samples/svg-class/main.svelte b/packages/svelte/test/runtime/samples/svg-class/main.svelte similarity index 100% rename from test/runtime/samples/svg-class/main.svelte rename to packages/svelte/test/runtime/samples/svg-class/main.svelte diff --git a/packages/svelte/test/runtime/samples/svg-each-block-anchor/_config.js b/packages/svelte/test/runtime/samples/svg-each-block-anchor/_config.js new file mode 100644 index 0000000000..93d5a50797 --- /dev/null +++ b/packages/svelte/test/runtime/samples/svg-each-block-anchor/_config.js @@ -0,0 +1,27 @@ +export default { + get props() { + return { foo: ['a'], bar: ['c'] }; + }, + + html: ` + + a + c + + `, + + test({ assert, component, target }) { + component.foo = ['a', 'b']; + + assert.htmlEqual( + target.innerHTML, + ` + + a + b + c + + ` + ); + } +}; diff --git a/test/runtime/samples/svg-each-block-anchor/main.svelte b/packages/svelte/test/runtime/samples/svg-each-block-anchor/main.svelte similarity index 100% rename from test/runtime/samples/svg-each-block-anchor/main.svelte rename to packages/svelte/test/runtime/samples/svg-each-block-anchor/main.svelte diff --git a/test/runtime/samples/svg-each-block-namespace/_config.js b/packages/svelte/test/runtime/samples/svg-each-block-namespace/_config.js similarity index 100% rename from test/runtime/samples/svg-each-block-namespace/_config.js rename to packages/svelte/test/runtime/samples/svg-each-block-namespace/_config.js diff --git a/test/runtime/samples/svg-each-block-namespace/main.svelte b/packages/svelte/test/runtime/samples/svg-each-block-namespace/main.svelte similarity index 100% rename from test/runtime/samples/svg-each-block-namespace/main.svelte rename to packages/svelte/test/runtime/samples/svg-each-block-namespace/main.svelte diff --git a/test/runtime/samples/svg-foreignobject-namespace/_config.js b/packages/svelte/test/runtime/samples/svg-foreignobject-namespace/_config.js similarity index 100% rename from test/runtime/samples/svg-foreignobject-namespace/_config.js rename to packages/svelte/test/runtime/samples/svg-foreignobject-namespace/_config.js diff --git a/test/runtime/samples/svg-foreignobject-namespace/main.svelte b/packages/svelte/test/runtime/samples/svg-foreignobject-namespace/main.svelte similarity index 100% rename from test/runtime/samples/svg-foreignobject-namespace/main.svelte rename to packages/svelte/test/runtime/samples/svg-foreignobject-namespace/main.svelte diff --git a/packages/svelte/test/runtime/samples/svg-html-tag/_config.js b/packages/svelte/test/runtime/samples/svg-html-tag/_config.js new file mode 100644 index 0000000000..caabe034bf --- /dev/null +++ b/packages/svelte/test/runtime/samples/svg-html-tag/_config.js @@ -0,0 +1,34 @@ +export default { + html: ` + + + + + `, + test({ assert, target, component }) { + let svg = target.querySelector('svg'); + let circles = target.querySelectorAll('circle'); + assert.equal(svg.namespaceURI, 'http://www.w3.org/2000/svg'); + assert.equal(2, circles.length); + assert.equal(circles[0].namespaceURI, 'http://www.w3.org/2000/svg'); + assert.equal(circles[1].namespaceURI, 'http://www.w3.org/2000/svg'); + + component.width = 200; + component.height = 120; + assert.htmlEqual( + target.innerHTML, + ` + + + + + ` + ); + svg = target.querySelector('svg'); + circles = target.querySelectorAll('circle'); + assert.equal(svg.namespaceURI, 'http://www.w3.org/2000/svg'); + assert.equal(2, circles.length); + assert.equal(circles[0].namespaceURI, 'http://www.w3.org/2000/svg'); + assert.equal(circles[1].namespaceURI, 'http://www.w3.org/2000/svg'); + } +}; diff --git a/test/runtime/samples/svg-html-tag/main.svelte b/packages/svelte/test/runtime/samples/svg-html-tag/main.svelte similarity index 100% rename from test/runtime/samples/svg-html-tag/main.svelte rename to packages/svelte/test/runtime/samples/svg-html-tag/main.svelte diff --git a/packages/svelte/test/runtime/samples/svg-html-tag2/_config.js b/packages/svelte/test/runtime/samples/svg-html-tag2/_config.js new file mode 100644 index 0000000000..73f5e4e774 --- /dev/null +++ b/packages/svelte/test/runtime/samples/svg-html-tag2/_config.js @@ -0,0 +1,38 @@ +export default { + html: ` + + + + + + + `, + test({ assert, target, component }) { + let svg = target.querySelector('svg'); + let circles = target.querySelectorAll('circle'); + assert.equal(svg.namespaceURI, 'http://www.w3.org/2000/svg'); + assert.equal(2, circles.length); + assert.equal(circles[0].namespaceURI, 'http://www.w3.org/2000/svg'); + assert.equal(circles[1].namespaceURI, 'http://www.w3.org/2000/svg'); + + component.width = 200; + component.height = 120; + assert.htmlEqual( + target.innerHTML, + ` + + + + + + + ` + ); + svg = target.querySelector('svg'); + circles = target.querySelectorAll('circle'); + assert.equal(svg.namespaceURI, 'http://www.w3.org/2000/svg'); + assert.equal(2, circles.length); + assert.equal(circles[0].namespaceURI, 'http://www.w3.org/2000/svg'); + assert.equal(circles[1].namespaceURI, 'http://www.w3.org/2000/svg'); + } +}; diff --git a/test/runtime/samples/svg-html-tag2/main.svelte b/packages/svelte/test/runtime/samples/svg-html-tag2/main.svelte similarity index 100% rename from test/runtime/samples/svg-html-tag2/main.svelte rename to packages/svelte/test/runtime/samples/svg-html-tag2/main.svelte diff --git a/packages/svelte/test/runtime/samples/svg-html-tag3/_config.js b/packages/svelte/test/runtime/samples/svg-html-tag3/_config.js new file mode 100644 index 0000000000..9756e111e5 --- /dev/null +++ b/packages/svelte/test/runtime/samples/svg-html-tag3/_config.js @@ -0,0 +1,30 @@ +export default { + html: ` + + + + `, + test({ assert, target, component }) { + let svg = target.querySelector('svg'); + let circle = target.querySelector('circle'); + assert.equal(svg.namespaceURI, 'http://www.w3.org/2000/svg'); + assert.equal(circle.namespaceURI, 'http://www.w3.org/1999/xhtml'); + + component.width = 200; + component.height = 120; + assert.htmlEqual( + target.innerHTML, + ` + + + + + + ` + ); + svg = target.querySelector('svg'); + circle = target.querySelector('circle'); + assert.equal(svg.namespaceURI, 'http://www.w3.org/2000/svg'); + assert.equal(circle.namespaceURI, 'http://www.w3.org/1999/xhtml'); + } +}; diff --git a/packages/svelte/test/runtime/samples/svg-html-tag3/main.svelte b/packages/svelte/test/runtime/samples/svg-html-tag3/main.svelte new file mode 100644 index 0000000000..0d8836e963 --- /dev/null +++ b/packages/svelte/test/runtime/samples/svg-html-tag3/main.svelte @@ -0,0 +1,11 @@ + + + + + {@html circle} + + diff --git a/packages/svelte/test/runtime/samples/svg-multiple/_config.js b/packages/svelte/test/runtime/samples/svg-multiple/_config.js new file mode 100644 index 0000000000..5f28c88489 --- /dev/null +++ b/packages/svelte/test/runtime/samples/svg-multiple/_config.js @@ -0,0 +1,30 @@ +export default { + get props() { + return { x: 0, y: 0, width: 100, height: 100 }; + }, + + html: ` + + + `, + + test({ assert, component, target }) { + const svgs = target.querySelectorAll('svg'); + const rects = target.querySelectorAll('rect'); + + assert.equal(svgs[0].namespaceURI, 'http://www.w3.org/2000/svg'); + assert.equal(svgs[0].namespaceURI, 'http://www.w3.org/2000/svg'); + assert.equal(rects[1].namespaceURI, 'http://www.w3.org/2000/svg'); + assert.equal(rects[1].namespaceURI, 'http://www.w3.org/2000/svg'); + + component.width = 150; + component.height = 50; + assert.htmlEqual( + target.innerHTML, + ` + + + ` + ); + } +}; diff --git a/test/runtime/samples/svg-multiple/main.svelte b/packages/svelte/test/runtime/samples/svg-multiple/main.svelte similarity index 100% rename from test/runtime/samples/svg-multiple/main.svelte rename to packages/svelte/test/runtime/samples/svg-multiple/main.svelte diff --git a/packages/svelte/test/runtime/samples/svg-no-whitespace/_config.js b/packages/svelte/test/runtime/samples/svg-no-whitespace/_config.js new file mode 100644 index 0000000000..6bd242d96a --- /dev/null +++ b/packages/svelte/test/runtime/samples/svg-no-whitespace/_config.js @@ -0,0 +1,9 @@ +export default { + test({ assert, target }) { + const svg = target.querySelector('svg'); + + assert.equal(svg.childNodes.length, 2); + assert.equal(svg.childNodes[0].nodeName, 'rect'); + assert.equal(svg.childNodes[1].nodeName, 'rect'); + } +}; diff --git a/test/runtime/samples/svg-no-whitespace/main.svelte b/packages/svelte/test/runtime/samples/svg-no-whitespace/main.svelte similarity index 100% rename from test/runtime/samples/svg-no-whitespace/main.svelte rename to packages/svelte/test/runtime/samples/svg-no-whitespace/main.svelte diff --git a/test/runtime/samples/svg-slot-namespace/Widget.svelte b/packages/svelte/test/runtime/samples/svg-slot-namespace/Widget.svelte similarity index 100% rename from test/runtime/samples/svg-slot-namespace/Widget.svelte rename to packages/svelte/test/runtime/samples/svg-slot-namespace/Widget.svelte diff --git a/test/runtime/samples/svg-slot-namespace/_config.js b/packages/svelte/test/runtime/samples/svg-slot-namespace/_config.js similarity index 100% rename from test/runtime/samples/svg-slot-namespace/_config.js rename to packages/svelte/test/runtime/samples/svg-slot-namespace/_config.js diff --git a/test/runtime/samples/svg-slot-namespace/main.svelte b/packages/svelte/test/runtime/samples/svg-slot-namespace/main.svelte similarity index 100% rename from test/runtime/samples/svg-slot-namespace/main.svelte rename to packages/svelte/test/runtime/samples/svg-slot-namespace/main.svelte diff --git a/test/runtime/samples/svg-spread/_config.js b/packages/svelte/test/runtime/samples/svg-spread/_config.js similarity index 100% rename from test/runtime/samples/svg-spread/_config.js rename to packages/svelte/test/runtime/samples/svg-spread/_config.js diff --git a/test/runtime/samples/svg-spread/main.svelte b/packages/svelte/test/runtime/samples/svg-spread/main.svelte similarity index 100% rename from test/runtime/samples/svg-spread/main.svelte rename to packages/svelte/test/runtime/samples/svg-spread/main.svelte diff --git a/test/runtime/samples/svg-tspan-preserve-space/_config.js b/packages/svelte/test/runtime/samples/svg-tspan-preserve-space/_config.js similarity index 100% rename from test/runtime/samples/svg-tspan-preserve-space/_config.js rename to packages/svelte/test/runtime/samples/svg-tspan-preserve-space/_config.js diff --git a/test/runtime/samples/svg-tspan-preserve-space/main.svelte b/packages/svelte/test/runtime/samples/svg-tspan-preserve-space/main.svelte similarity index 100% rename from test/runtime/samples/svg-tspan-preserve-space/main.svelte rename to packages/svelte/test/runtime/samples/svg-tspan-preserve-space/main.svelte diff --git a/packages/svelte/test/runtime/samples/svg-with-style/_config.js b/packages/svelte/test/runtime/samples/svg-with-style/_config.js new file mode 100644 index 0000000000..2c65082c24 --- /dev/null +++ b/packages/svelte/test/runtime/samples/svg-with-style/_config.js @@ -0,0 +1,13 @@ +export default { + get props() { + return { x: 'bar' }; + }, + + html: ` + + + + + + ` +}; diff --git a/test/runtime/samples/svg-with-style/main.svelte b/packages/svelte/test/runtime/samples/svg-with-style/main.svelte similarity index 100% rename from test/runtime/samples/svg-with-style/main.svelte rename to packages/svelte/test/runtime/samples/svg-with-style/main.svelte diff --git a/packages/svelte/test/runtime/samples/svg-xlink/_config.js b/packages/svelte/test/runtime/samples/svg-xlink/_config.js new file mode 100644 index 0000000000..c4eb917500 --- /dev/null +++ b/packages/svelte/test/runtime/samples/svg-xlink/_config.js @@ -0,0 +1,17 @@ +export default { + html: ` + + + + + + + + `, + test({ assert, target }) { + const use = target.querySelector('use'); + const href = use.attributes['xlink:href']; + + assert.equal(href.namespaceURI, 'http://www.w3.org/1999/xlink'); + } +}; diff --git a/test/runtime/samples/svg-xlink/main.svelte b/packages/svelte/test/runtime/samples/svg-xlink/main.svelte similarity index 100% rename from test/runtime/samples/svg-xlink/main.svelte rename to packages/svelte/test/runtime/samples/svg-xlink/main.svelte diff --git a/packages/svelte/test/runtime/samples/svg-xmlns/_config.js b/packages/svelte/test/runtime/samples/svg-xmlns/_config.js new file mode 100644 index 0000000000..9740a55288 --- /dev/null +++ b/packages/svelte/test/runtime/samples/svg-xmlns/_config.js @@ -0,0 +1,24 @@ +export default { + skip_if_ssr: true, + + get props() { + return { x: 0, y: 0, width: 100, height: 100 }; + }, + + html: '', + + test({ assert, component, target }) { + const svg = target.querySelector('svg'); + const rect = target.querySelector('rect'); + + assert.equal(svg.namespaceURI, 'http://www.w3.org/2000/svg'); + assert.equal(rect.namespaceURI, 'http://www.w3.org/2000/svg'); + + component.width = 150; + component.height = 50; + assert.equal( + target.innerHTML, + '' + ); + } +}; diff --git a/test/runtime/samples/svg-xmlns/main.svelte b/packages/svelte/test/runtime/samples/svg-xmlns/main.svelte similarity index 100% rename from test/runtime/samples/svg-xmlns/main.svelte rename to packages/svelte/test/runtime/samples/svg-xmlns/main.svelte diff --git a/packages/svelte/test/runtime/samples/svg/_config.js b/packages/svelte/test/runtime/samples/svg/_config.js new file mode 100644 index 0000000000..a1b4a753e2 --- /dev/null +++ b/packages/svelte/test/runtime/samples/svg/_config.js @@ -0,0 +1,19 @@ +export default { + get props() { + return { x: 0, y: 0, width: 100, height: 100 }; + }, + + html: '', + + test({ assert, component, target }) { + const svg = target.querySelector('svg'); + const rect = target.querySelector('rect'); + + assert.equal(svg.namespaceURI, 'http://www.w3.org/2000/svg'); + assert.equal(rect.namespaceURI, 'http://www.w3.org/2000/svg'); + + component.width = 150; + component.height = 50; + assert.equal(target.innerHTML, ''); + } +}; diff --git a/test/runtime/samples/svg/main.svelte b/packages/svelte/test/runtime/samples/svg/main.svelte similarity index 100% rename from test/runtime/samples/svg/main.svelte rename to packages/svelte/test/runtime/samples/svg/main.svelte diff --git a/test/runtime/samples/target-dom-detached/App.svelte b/packages/svelte/test/runtime/samples/target-dom-detached/App.svelte similarity index 100% rename from test/runtime/samples/target-dom-detached/App.svelte rename to packages/svelte/test/runtime/samples/target-dom-detached/App.svelte diff --git a/packages/svelte/test/runtime/samples/target-dom-detached/_config.js b/packages/svelte/test/runtime/samples/target-dom-detached/_config.js new file mode 100644 index 0000000000..d8f18f14e0 --- /dev/null +++ b/packages/svelte/test/runtime/samples/target-dom-detached/_config.js @@ -0,0 +1,13 @@ +export default { + skip_if_ssr: true, + compileOptions: { + cssHash: () => 'svelte-xyz' + }, + async test({ assert, component, window }) { + assert.htmlEqual( + window.document.head.innerHTML, + '' + ); + assert.htmlEqual(component.div.innerHTML, '
    Hello World
    '); + } +}; diff --git a/test/runtime/samples/target-dom-detached/main.svelte b/packages/svelte/test/runtime/samples/target-dom-detached/main.svelte similarity index 100% rename from test/runtime/samples/target-dom-detached/main.svelte rename to packages/svelte/test/runtime/samples/target-dom-detached/main.svelte diff --git a/test/runtime/samples/target-dom/App.svelte b/packages/svelte/test/runtime/samples/target-dom/App.svelte similarity index 100% rename from test/runtime/samples/target-dom/App.svelte rename to packages/svelte/test/runtime/samples/target-dom/App.svelte diff --git a/packages/svelte/test/runtime/samples/target-dom/_config.js b/packages/svelte/test/runtime/samples/target-dom/_config.js new file mode 100644 index 0000000000..d8f18f14e0 --- /dev/null +++ b/packages/svelte/test/runtime/samples/target-dom/_config.js @@ -0,0 +1,13 @@ +export default { + skip_if_ssr: true, + compileOptions: { + cssHash: () => 'svelte-xyz' + }, + async test({ assert, component, window }) { + assert.htmlEqual( + window.document.head.innerHTML, + '' + ); + assert.htmlEqual(component.div.innerHTML, '
    Hello World
    '); + } +}; diff --git a/test/runtime/samples/target-dom/main.svelte b/packages/svelte/test/runtime/samples/target-dom/main.svelte similarity index 100% rename from test/runtime/samples/target-dom/main.svelte rename to packages/svelte/test/runtime/samples/target-dom/main.svelte diff --git a/test/runtime/samples/target-shadow-dom/App.svelte b/packages/svelte/test/runtime/samples/target-shadow-dom/App.svelte similarity index 100% rename from test/runtime/samples/target-shadow-dom/App.svelte rename to packages/svelte/test/runtime/samples/target-shadow-dom/App.svelte diff --git a/packages/svelte/test/runtime/samples/target-shadow-dom/_config.js b/packages/svelte/test/runtime/samples/target-shadow-dom/_config.js new file mode 100644 index 0000000000..4b6ab30a48 --- /dev/null +++ b/packages/svelte/test/runtime/samples/target-shadow-dom/_config.js @@ -0,0 +1,16 @@ +export default { + skip_if_ssr: true, + compileOptions: { + cssHash: () => 'svelte-xyz' + }, + async test({ assert, component, window }) { + assert.htmlEqual(window.document.head.innerHTML, ''); + assert.htmlEqual( + component.div.shadowRoot.innerHTML, + ` + +
    Hello World
    + ` + ); + } +}; diff --git a/test/runtime/samples/target-shadow-dom/main.svelte b/packages/svelte/test/runtime/samples/target-shadow-dom/main.svelte similarity index 100% rename from test/runtime/samples/target-shadow-dom/main.svelte rename to packages/svelte/test/runtime/samples/target-shadow-dom/main.svelte diff --git a/packages/svelte/test/runtime/samples/template/_config.js b/packages/svelte/test/runtime/samples/template/_config.js new file mode 100644 index 0000000000..daf63da5ba --- /dev/null +++ b/packages/svelte/test/runtime/samples/template/_config.js @@ -0,0 +1,46 @@ +export default { + // solo: 1, + + html: ` + + + + `, + + test({ assert, target }) { + const template = target.querySelector('#t1'); + assert.htmlEqual( + template.innerHTML, + ` +
    foo
    + ` + ); + const content = template.content.cloneNode(true); + const div = content.children[0]; + assert.htmlEqual( + div.outerHTML, + ` +
    foo
    + ` + ); + + const template2 = target.querySelector('#t2'); + assert.equal(template2.childNodes.length, 0); + assert.equal(template2.content.childNodes.length, 1); + assert.equal(template2.content.firstChild.textContent, '123'); + assert.htmlEqual(template2.innerHTML, '123'); + + const template3 = target.querySelector('#t3'); + assert.equal(template3.childNodes.length, 0); + assert.equal(template3.content.childNodes.length, 3); + // test: (with hydration from ssr rendered html) + // out of order render. + // may render as for ssr+hydration case. + // we bypass it by using symmetric siblings. hence