diff --git a/packages/svelte/tests/print/samples/basic/input.svelte b/packages/svelte/tests/print/samples/basic/input.svelte
new file mode 100644
index 0000000000..bff6bee537
--- /dev/null
+++ b/packages/svelte/tests/print/samples/basic/input.svelte
@@ -0,0 +1,7 @@
+
+
+
+ Hello {name}!
+
diff --git a/packages/svelte/tests/print/samples/basic/output.svelte b/packages/svelte/tests/print/samples/basic/output.svelte
new file mode 100644
index 0000000000..22b3c84db0
--- /dev/null
+++ b/packages/svelte/tests/print/samples/basic/output.svelte
@@ -0,0 +1,5 @@
+
+
+Hello {name}!
\ No newline at end of file
diff --git a/packages/svelte/tests/print/test.ts b/packages/svelte/tests/print/test.ts
new file mode 100644
index 0000000000..776a6a4ca4
--- /dev/null
+++ b/packages/svelte/tests/print/test.ts
@@ -0,0 +1,32 @@
+import * as fs from 'node:fs';
+import { assert, it } from 'vitest';
+import { parse, print } from 'svelte/compiler';
+import { try_load_json } from '../helpers.js';
+import { suite, type BaseTest } from '../suite.js';
+import { walk } from 'zimmerframe';
+import type { AST } from 'svelte/compiler';
+
+interface ParserTest extends BaseTest {}
+
+const { test, run } = suite(async (config, cwd) => {
+ const input = fs.readFileSync(`${cwd}/input.svelte`, 'utf-8');
+
+ const ast = parse(input, { modern: true });
+ const output = print(ast);
+
+ // run `UPDATE_SNAPSHOTS=true pnpm test parser` to update parser tests
+ if (process.env.UPDATE_SNAPSHOTS) {
+ fs.writeFileSync(`${cwd}/output.svelte`, output.code);
+ } else {
+ fs.writeFileSync(`${cwd}/_actual.svelte`, output.code);
+
+ const file = `${cwd}/output.svelte`;
+
+ const expected = fs.existsSync(file) ? fs.readFileSync(file, 'utf-8') : '';
+ assert.deepEqual(output.code, expected);
+ }
+});
+
+export { test };
+
+await run(__dirname);