diff --git a/tests/components/ct-svelte/playwright/index.ts b/tests/components/ct-svelte/playwright/index.ts
index e69de29bb2..d3a5d6623b 100644
--- a/tests/components/ct-svelte/playwright/index.ts
+++ b/tests/components/ct-svelte/playwright/index.ts
@@ -0,0 +1,10 @@
+//@ts-check
+import { beforeMount, afterMount } from '@playwright/experimental-ct-svelte/hooks';
+
+beforeMount(async ({ hooksConfig }) => {
+ console.log(`Before mount: ${JSON.stringify(hooksConfig)}`);
+});
+
+afterMount(async ({}) => {
+ console.log(`After mount`);
+});
diff --git a/tests/components/ct-svelte/src/App.spec.ts b/tests/components/ct-svelte/src/App.spec.ts
deleted file mode 100644
index 68223ddc06..0000000000
--- a/tests/components/ct-svelte/src/App.spec.ts
+++ /dev/null
@@ -1,29 +0,0 @@
-/**
- * Copyright (c) Microsoft Corporation. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import { test, expect } from '@playwright/experimental-ct-svelte';
-import App from './App.svelte';
-
-test.use({ viewport: { width: 500, height: 500 } });
-
-test('should work', async ({ mount }) => {
- const component = await mount(App, {
- props: {
- name: 'world'
- }
- });
- await expect(component).toContainText('Hello world!');
-})
diff --git a/tests/components/ct-svelte/src/App.svelte b/tests/components/ct-svelte/src/App.svelte
index 84cd1b59c9..9d6aec93d6 100644
--- a/tests/components/ct-svelte/src/App.svelte
+++ b/tests/components/ct-svelte/src/App.svelte
@@ -27,4 +27,4 @@
max-width: none;
}
}
-
\ No newline at end of file
+
diff --git a/tests/components/ct-svelte/src/components/Button.svelte b/tests/components/ct-svelte/src/components/Button.svelte
new file mode 100644
index 0000000000..8c46efd1f2
--- /dev/null
+++ b/tests/components/ct-svelte/src/components/Button.svelte
@@ -0,0 +1,7 @@
+
+
+
diff --git a/tests/components/ct-svelte/src/components/MultiRoot.svelte b/tests/components/ct-svelte/src/components/MultiRoot.svelte
new file mode 100644
index 0000000000..87996d0ce0
--- /dev/null
+++ b/tests/components/ct-svelte/src/components/MultiRoot.svelte
@@ -0,0 +1,2 @@
+
root 1
+
root 2
diff --git a/tests/components/ct-svelte/src/main.js b/tests/components/ct-svelte/src/main.js
index 8f6710a978..8e1efe955c 100644
--- a/tests/components/ct-svelte/src/main.js
+++ b/tests/components/ct-svelte/src/main.js
@@ -7,4 +7,4 @@ const app = new App({
}
});
-export default app;
\ No newline at end of file
+export default app;
diff --git a/tests/components/ct-svelte/src/tests.spec.ts b/tests/components/ct-svelte/src/tests.spec.ts
new file mode 100644
index 0000000000..c41abb50a4
--- /dev/null
+++ b/tests/components/ct-svelte/src/tests.spec.ts
@@ -0,0 +1,76 @@
+/**
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import { test, expect } from '@playwright/experimental-ct-svelte';
+import Button from './components/Button.svelte';
+import MultiRoot from './components/MultiRoot.svelte';
+
+test.use({ viewport: { width: 500, height: 500 } });
+
+test('props should work', async ({ mount }) => {
+ const component = await mount(Button, {
+ props: {
+ title: 'Submit'
+ }
+ })
+ await expect(component).toContainText('Submit')
+})
+
+test('event should work', async ({ mount }) => {
+ const messages = []
+ const component = await mount(Button, {
+ props: {
+ title: 'Submit'
+ },
+ on: {
+ submit: data => messages.push(data)
+ }
+ })
+ await component.click()
+ expect(messages).toEqual(['hello'])
+})
+
+test('should run hooks', async ({ page, mount }) => {
+ const messages = []
+ page.on('console', m => messages.push(m.text()))
+ await mount(Button, {
+ props: {
+ title: 'Submit'
+ },
+ hooksConfig: { route: 'A' }
+ })
+ expect(messages).toEqual(['Before mount: {\"route\":\"A\"}', 'After mount']);
+})
+
+test('should unmount', async ({ page, mount }) => {
+ const component = await mount(Button, {
+ props: {
+ title: 'Submit'
+ }
+ })
+ await expect(page.locator('#root')).toContainText('Submit')
+ await component.unmount();
+ await expect(page.locator('#root')).not.toContainText('Submit');
+});
+
+test('unmount a multi root component should work', async ({ mount, page }) => {
+ const component = await mount(MultiRoot)
+ await expect(page.locator('#root')).toContainText('root 1')
+ await expect(page.locator('#root')).toContainText('root 2')
+ await component.unmount()
+ await expect(page.locator('#root')).not.toContainText('root 1')
+ await expect(page.locator('#root')).not.toContainText('root 2')
+})