diff --git a/packages/svelte/tests/runtime-legacy/shared.ts b/packages/svelte/tests/runtime-legacy/shared.ts index e0f10ca2dd..634f99e52c 100644 --- a/packages/svelte/tests/runtime-legacy/shared.ts +++ b/packages/svelte/tests/runtime-legacy/shared.ts @@ -403,6 +403,16 @@ async function run_test_variant( throw new Error('Ensure dom mode is skipped'); }; + const run_hydratables_init = () => { + if (variant !== 'hydrate') return; + const script = document.head + .querySelectorAll('script') + .values() + .find((script) => script.textContent.includes('(window.__svelte ??= {}).h'))?.textContent; + if (!script) return; + (0, eval)(script); + }; + if (runes) { props = proxy({ ...(config.props || {}) }); @@ -411,6 +421,7 @@ async function run_test_variant( if (manual_hydrate && variant === 'hydrate') { hydrate_fn = () => { + run_hydratables_init(); instance = hydrate(mod.default, { target, props, @@ -419,6 +430,7 @@ async function run_test_variant( }); }; } else { + run_hydratables_init(); const render = variant === 'hydrate' ? hydrate : mount; instance = render(mod.default, { target, @@ -428,6 +440,7 @@ async function run_test_variant( }); } } else { + run_hydratables_init(); instance = createClassComponent({ component: mod.default, props: config.props, diff --git a/packages/svelte/tests/runtime-runes/samples/hydratables/_config.js b/packages/svelte/tests/runtime-runes/samples/hydratable-custom-transport/_config.js similarity index 52% rename from packages/svelte/tests/runtime-runes/samples/hydratables/_config.js rename to packages/svelte/tests/runtime-runes/samples/hydratable-custom-transport/_config.js index b7622279e3..af004b900a 100644 --- a/packages/svelte/tests/runtime-runes/samples/hydratables/_config.js +++ b/packages/svelte/tests/runtime-runes/samples/hydratable-custom-transport/_config.js @@ -1,4 +1,3 @@ -import { tick } from 'svelte'; import { ok, test } from '../../test'; export default test({ @@ -8,12 +7,14 @@ export default test({ ssrHtml: '
The current environment is: server
', props: { environment: 'browser' }, - html: 'The current environment is: server
', - async test({ assert, target }) { - await tick(); + async test({ assert, target, variant }) { const p = target.querySelector('p'); ok(p); - assert.htmlEqual(p.outerHTML, 'The current environment is: server
'); + if (variant === 'hydrate') { + assert.htmlEqual(p.outerHTML, 'The current environment is: server
'); + } else { + assert.htmlEqual(p.outerHTML, 'The current environment is: browser
'); + } } }); diff --git a/packages/svelte/tests/runtime-runes/samples/hydratable-custom-transport/main.svelte b/packages/svelte/tests/runtime-runes/samples/hydratable-custom-transport/main.svelte new file mode 100644 index 0000000000..18b7f83467 --- /dev/null +++ b/packages/svelte/tests/runtime-runes/samples/hydratable-custom-transport/main.svelte @@ -0,0 +1,15 @@ + + +The current environment is: {value}
diff --git a/packages/svelte/tests/runtime-runes/samples/hydratable-error-on-missing-imperative/_config.js b/packages/svelte/tests/runtime-runes/samples/hydratable-error-on-missing-imperative/_config.js new file mode 100644 index 0000000000..a8d1e1ddc4 --- /dev/null +++ b/packages/svelte/tests/runtime-runes/samples/hydratable-error-on-missing-imperative/_config.js @@ -0,0 +1,12 @@ +import { test } from '../../test'; + +export default test({ + mode: ['async-server', 'hydrate'], + + server_props: { environment: 'server' }, + ssrHtml: 'The current environment is: server
', + + props: { environment: 'browser' }, + + runtime_error: 'hydratable_missing_but_expected_e' +}); diff --git a/packages/svelte/tests/runtime-runes/samples/hydratable-error-on-missing-imperative/main.svelte b/packages/svelte/tests/runtime-runes/samples/hydratable-error-on-missing-imperative/main.svelte new file mode 100644 index 0000000000..4784dd13b2 --- /dev/null +++ b/packages/svelte/tests/runtime-runes/samples/hydratable-error-on-missing-imperative/main.svelte @@ -0,0 +1,14 @@ + + +The current environment is: {value}
diff --git a/packages/svelte/tests/runtime-runes/samples/hydratable-error-on-missing/_config.js b/packages/svelte/tests/runtime-runes/samples/hydratable-error-on-missing/_config.js new file mode 100644 index 0000000000..f6564753ce --- /dev/null +++ b/packages/svelte/tests/runtime-runes/samples/hydratable-error-on-missing/_config.js @@ -0,0 +1,12 @@ +import { ok, test } from '../../test'; + +export default test({ + mode: ['async-server', 'hydrate'], + + server_props: { environment: 'server' }, + ssrHtml: 'The current environment is: server
', + + props: { environment: 'browser' }, + + runtime_error: 'hydratable_missing_but_expected_e' +}); diff --git a/packages/svelte/tests/runtime-runes/samples/hydratable-error-on-missing/main.svelte b/packages/svelte/tests/runtime-runes/samples/hydratable-error-on-missing/main.svelte new file mode 100644 index 0000000000..b7dfc0e7e2 --- /dev/null +++ b/packages/svelte/tests/runtime-runes/samples/hydratable-error-on-missing/main.svelte @@ -0,0 +1,14 @@ + + +The current environment is: {value}
diff --git a/packages/svelte/tests/runtime-runes/samples/hydratable/_config.js b/packages/svelte/tests/runtime-runes/samples/hydratable/_config.js new file mode 100644 index 0000000000..af004b900a --- /dev/null +++ b/packages/svelte/tests/runtime-runes/samples/hydratable/_config.js @@ -0,0 +1,20 @@ +import { ok, test } from '../../test'; + +export default test({ + skip_mode: ['server'], + + server_props: { environment: 'server' }, + ssrHtml: 'The current environment is: server
', + + props: { environment: 'browser' }, + + async test({ assert, target, variant }) { + const p = target.querySelector('p'); + ok(p); + if (variant === 'hydrate') { + assert.htmlEqual(p.outerHTML, 'The current environment is: server
'); + } else { + assert.htmlEqual(p.outerHTML, 'The current environment is: browser
'); + } + } +}); diff --git a/packages/svelte/tests/runtime-runes/samples/hydratables/main.svelte b/packages/svelte/tests/runtime-runes/samples/hydratable/main.svelte similarity index 100% rename from packages/svelte/tests/runtime-runes/samples/hydratables/main.svelte rename to packages/svelte/tests/runtime-runes/samples/hydratable/main.svelte diff --git a/packages/svelte/tests/server-side-rendering/samples/hydratable-clobbering-imperative/_config.js b/packages/svelte/tests/server-side-rendering/samples/hydratable-clobbering-imperative/_config.js new file mode 100644 index 0000000000..404260cc66 --- /dev/null +++ b/packages/svelte/tests/server-side-rendering/samples/hydratable-clobbering-imperative/_config.js @@ -0,0 +1,6 @@ +import { test } from '../../test'; + +export default test({ + mode: ['async'], + error: 'hydratable_clobbering' +}); diff --git a/packages/svelte/tests/server-side-rendering/samples/hydratable-clobbering-imperative/main.svelte b/packages/svelte/tests/server-side-rendering/samples/hydratable-clobbering-imperative/main.svelte new file mode 100644 index 0000000000..25a1166f83 --- /dev/null +++ b/packages/svelte/tests/server-side-rendering/samples/hydratable-clobbering-imperative/main.svelte @@ -0,0 +1,6 @@ + \ No newline at end of file diff --git a/packages/svelte/tests/server-side-rendering/samples/hydratable-clobbering/_config.js b/packages/svelte/tests/server-side-rendering/samples/hydratable-clobbering/_config.js new file mode 100644 index 0000000000..404260cc66 --- /dev/null +++ b/packages/svelte/tests/server-side-rendering/samples/hydratable-clobbering/_config.js @@ -0,0 +1,6 @@ +import { test } from '../../test'; + +export default test({ + mode: ['async'], + error: 'hydratable_clobbering' +}); diff --git a/packages/svelte/tests/server-side-rendering/samples/hydratable-clobbering/main.svelte b/packages/svelte/tests/server-side-rendering/samples/hydratable-clobbering/main.svelte new file mode 100644 index 0000000000..764c2c2415 --- /dev/null +++ b/packages/svelte/tests/server-side-rendering/samples/hydratable-clobbering/main.svelte @@ -0,0 +1,6 @@ + \ No newline at end of file diff --git a/packages/svelte/tests/server-side-rendering/test.ts b/packages/svelte/tests/server-side-rendering/test.ts index 7eede332a7..20997cdf62 100644 --- a/packages/svelte/tests/server-side-rendering/test.ts +++ b/packages/svelte/tests/server-side-rendering/test.ts @@ -81,7 +81,7 @@ const { test, run } = suite_with_variants