diff options
author | 2021-04-28 14:43:50 -0500 | |
---|---|---|
committer | 2021-04-28 14:43:50 -0500 | |
commit | 633bb46dc4b83ec39004260ff44ddafa1963cf79 (patch) | |
tree | 9524eea0a84858bd353e8e39c633ac9d4829b148 /test | |
parent | 6bc51facce11e97392d4830e0f745ea7482c38d4 (diff) | |
download | astro-633bb46dc4b83ec39004260ff44ddafa1963cf79.tar.gz astro-633bb46dc4b83ec39004260ff44ddafa1963cf79.tar.zst astro-633bb46dc4b83ec39004260ff44ddafa1963cf79.zip |
Fix: plain string children bug (#138)
* fix: string children bug
* test: add string children test
* test: add other child test scenarios
Diffstat (limited to 'test')
8 files changed, 163 insertions, 0 deletions
diff --git a/test/astro-children.test.js b/test/astro-children.test.js new file mode 100644 index 000000000..368cfc9f9 --- /dev/null +++ b/test/astro-children.test.js @@ -0,0 +1,75 @@ +import { suite } from 'uvu'; +import * as assert from 'uvu/assert'; +import { doc } from './test-utils.js'; +import { setup, setupBuild } from './helpers.js'; + +const ComponentChildren = suite('Component children tests'); + +setup(ComponentChildren, './fixtures/astro-children'); +setupBuild(ComponentChildren, './fixtures/astro-children'); + +ComponentChildren('Passes string children to framework components', async ({ runtime }) => { + let result = await runtime.load('/strings'); + + assert.equal(result.statusCode, 200); + const $ = doc(result.contents); + + const $preact = $('#preact'); + assert.equal($preact.text().trim(), 'Hello world', 'Can pass text to Preact components'); + + const $vue = $('#vue'); + assert.equal($vue.text().trim(), 'Hello world', 'Can pass text to Vue components'); + + const $svelte = $('#svelte'); + assert.equal($svelte.text().trim(), 'Hello world', 'Can pass text to Svelte components'); +}); + +ComponentChildren('Passes markup children to framework components', async ({ runtime }) => { + let result = await runtime.load('/markup'); + + assert.equal(result.statusCode, 200); + const $ = doc(result.contents); + + const $preact = $('#preact > h1'); + assert.equal($preact.text().trim(), 'Hello world', 'Can pass markup to Preact components'); + + const $vue = $('#vue > h1'); + assert.equal($vue.text().trim(), 'Hello world', 'Can pass markup to Vue components'); + + const $svelte = $('#svelte > h1'); + assert.equal($svelte.text().trim(), 'Hello world', 'Can pass markup to Svelte components'); +}); + +ComponentChildren('Passes multiple children to framework components', async ({ runtime }) => { + let result = await runtime.load('/multiple'); + + assert.equal(result.statusCode, 200); + const $ = doc(result.contents); + + const $preact = $('#preact'); + assert.equal($preact.children().length, 2, 'Can pass multiple children to Preact components'); + assert.equal($preact.children(':first-child').text().trim(), 'Hello world'); + assert.equal($preact.children(':last-child').text().trim(), 'Goodbye world'); + + const $vue = $('#vue'); + assert.equal($vue.children().length, 2, 'Can pass multiple children to Vue components'); + assert.equal($vue.children(':first-child').text().trim(), 'Hello world'); + assert.equal($vue.children(':last-child').text().trim(), 'Goodbye world'); + + const $svelte = $('#svelte'); + assert.equal($svelte.children().length, 2, 'Can pass multiple children to Svelte components'); + assert.equal($svelte.children(':first-child').text().trim(), 'Hello world'); + assert.equal($svelte.children(':last-child').text().trim(), 'Goodbye world'); +}); + +ComponentChildren('Can be built', async ({ build }) => { + try { + await build(); + assert.ok(true, 'Can build a project with component children'); + } catch (err) { + console.log(err); + assert.ok(false, 'build threw'); + } +}); + +ComponentChildren.run(); diff --git a/test/fixtures/astro-children/astro.config.mjs b/test/fixtures/astro-children/astro.config.mjs new file mode 100644 index 000000000..e2a209f83 --- /dev/null +++ b/test/fixtures/astro-children/astro.config.mjs @@ -0,0 +1,5 @@ +export default { + extensions: { + '.jsx': 'preact' + }, +}; diff --git a/test/fixtures/astro-children/src/components/Component.jsx b/test/fixtures/astro-children/src/components/Component.jsx new file mode 100644 index 000000000..bf9280f86 --- /dev/null +++ b/test/fixtures/astro-children/src/components/Component.jsx @@ -0,0 +1,5 @@ +import { h } from 'preact'; + +export default function PreactComponent({ children }) { + return <div id="preact">{children}</div> +} diff --git a/test/fixtures/astro-children/src/components/Component.svelte b/test/fixtures/astro-children/src/components/Component.svelte new file mode 100644 index 000000000..4276a78b8 --- /dev/null +++ b/test/fixtures/astro-children/src/components/Component.svelte @@ -0,0 +1,3 @@ +<div id="svelte"> + <slot /> +</div> diff --git a/test/fixtures/astro-children/src/components/Component.vue b/test/fixtures/astro-children/src/components/Component.vue new file mode 100644 index 000000000..22e6e1143 --- /dev/null +++ b/test/fixtures/astro-children/src/components/Component.vue @@ -0,0 +1,9 @@ +<template> + <div id="vue"> + <slot /> + </div> +</template> + +<script> +export default {} +</script> diff --git a/test/fixtures/astro-children/src/pages/markup.astro b/test/fixtures/astro-children/src/pages/markup.astro new file mode 100644 index 000000000..b771c2433 --- /dev/null +++ b/test/fixtures/astro-children/src/pages/markup.astro @@ -0,0 +1,21 @@ +--- +import PreactComponent from '../components/Component.jsx'; +import VueComponent from '../components/Component.vue'; +import SvelteComponent from '../components/Component.svelte'; +--- +<html> +<head><title>Children</title></head> +<body> + <PreactComponent> + <h1>Hello world</h1> + </PreactComponent> + + <VueComponent> + <h1>Hello world</h1> + </VueComponent> + + <SvelteComponent> + <h1>Hello world</h1> + </SvelteComponent> +</body> +</html> diff --git a/test/fixtures/astro-children/src/pages/multiple.astro b/test/fixtures/astro-children/src/pages/multiple.astro new file mode 100644 index 000000000..8c2f73a91 --- /dev/null +++ b/test/fixtures/astro-children/src/pages/multiple.astro @@ -0,0 +1,24 @@ +--- +import PreactComponent from '../components/Component.jsx'; +import VueComponent from '../components/Component.vue'; +import SvelteComponent from '../components/Component.svelte'; +--- +<html> +<head><title>Children</title></head> +<body> + <PreactComponent> + <h1>Hello world</h1> + <h1>Goodbye world</h1> + </PreactComponent> + + <VueComponent> + <h1>Hello world</h1> + <h1>Goodbye world</h1> + </VueComponent> + + <SvelteComponent> + <h1>Hello world</h1> + <h1>Goodbye world</h1> + </SvelteComponent> +</body> +</html> diff --git a/test/fixtures/astro-children/src/pages/strings.astro b/test/fixtures/astro-children/src/pages/strings.astro new file mode 100644 index 000000000..10b1a887f --- /dev/null +++ b/test/fixtures/astro-children/src/pages/strings.astro @@ -0,0 +1,21 @@ +--- +import PreactComponent from '../components/Component.jsx'; +import VueComponent from '../components/Component.vue'; +import SvelteComponent from '../components/Component.svelte'; +--- +<html> +<head><title>Children</title></head> +<body> + <PreactComponent> + Hello world + </PreactComponent> + + <VueComponent> + Hello world + </VueComponent> + + <SvelteComponent> + Hello world + </SvelteComponent> +</body> +</html> |