summaryrefslogtreecommitdiff
path: root/packages/integrations/mdx/test
diff options
context:
space:
mode:
authorGravatar Nate Moore <natemoo-re@users.noreply.github.com> 2022-09-30 17:13:44 -0500
committerGravatar GitHub <noreply@github.com> 2022-09-30 17:13:44 -0500
commitcf2bba1e4a32ff7d424cc1c4954d6328167af8d7 (patch)
tree5b5f9b2fda89c1dfdbf9eda111b930de1a03f1e0 /packages/integrations/mdx/test
parent0ae81479888ae76ce5ba6dc31b1c379675763797 (diff)
downloadastro-cf2bba1e4a32ff7d424cc1c4954d6328167af8d7.tar.gz
astro-cf2bba1e4a32ff7d424cc1c4954d6328167af8d7.tar.zst
astro-cf2bba1e4a32ff7d424cc1c4954d6328167af8d7.zip
P5: fix MDX memory leak (#4939)
* fix(astro): tag jsx vnodes with renderer so errors are properly handled * chore: fix missing package in test Co-authored-by: Nate Moore <nate@astro.build>
Diffstat (limited to 'packages/integrations/mdx/test')
-rw-r--r--packages/integrations/mdx/test/fixtures/mdx-infinite-loop/astro.config.ts6
-rw-r--r--packages/integrations/mdx/test/fixtures/mdx-infinite-loop/package.json10
-rw-r--r--packages/integrations/mdx/test/fixtures/mdx-infinite-loop/src/components/Test.js3
-rw-r--r--packages/integrations/mdx/test/fixtures/mdx-infinite-loop/src/pages/doc.mdx6
-rw-r--r--packages/integrations/mdx/test/fixtures/mdx-infinite-loop/src/pages/index.astro5
-rw-r--r--packages/integrations/mdx/test/mdx-infinite-loop.test.js30
6 files changed, 60 insertions, 0 deletions
diff --git a/packages/integrations/mdx/test/fixtures/mdx-infinite-loop/astro.config.ts b/packages/integrations/mdx/test/fixtures/mdx-infinite-loop/astro.config.ts
new file mode 100644
index 000000000..75a2b5f3a
--- /dev/null
+++ b/packages/integrations/mdx/test/fixtures/mdx-infinite-loop/astro.config.ts
@@ -0,0 +1,6 @@
+import mdx from '@astrojs/mdx';
+import preact from '@astrojs/preact';
+
+export default {
+ integrations: [mdx(), preact()]
+}
diff --git a/packages/integrations/mdx/test/fixtures/mdx-infinite-loop/package.json b/packages/integrations/mdx/test/fixtures/mdx-infinite-loop/package.json
new file mode 100644
index 000000000..5d1ab5632
--- /dev/null
+++ b/packages/integrations/mdx/test/fixtures/mdx-infinite-loop/package.json
@@ -0,0 +1,10 @@
+{
+ "name": "@test/mdx-infinite-loop",
+ "type": "module",
+ "dependencies": {
+ "@astrojs/mdx": "workspace:*",
+ "@astrojs/preact": "workspace:*",
+ "preact": "^10.7.3",
+ "astro": "workspace:*"
+ }
+}
diff --git a/packages/integrations/mdx/test/fixtures/mdx-infinite-loop/src/components/Test.js b/packages/integrations/mdx/test/fixtures/mdx-infinite-loop/src/components/Test.js
new file mode 100644
index 000000000..831fb327c
--- /dev/null
+++ b/packages/integrations/mdx/test/fixtures/mdx-infinite-loop/src/components/Test.js
@@ -0,0 +1,3 @@
+export default function () {
+ return 'Hello world'
+}
diff --git a/packages/integrations/mdx/test/fixtures/mdx-infinite-loop/src/pages/doc.mdx b/packages/integrations/mdx/test/fixtures/mdx-infinite-loop/src/pages/doc.mdx
new file mode 100644
index 000000000..8b8dc5e07
--- /dev/null
+++ b/packages/integrations/mdx/test/fixtures/mdx-infinite-loop/src/pages/doc.mdx
@@ -0,0 +1,6 @@
+import Test, { Missing } from '../components/Test';
+
+# Hello page!
+
+<Test />
+<Missing />
diff --git a/packages/integrations/mdx/test/fixtures/mdx-infinite-loop/src/pages/index.astro b/packages/integrations/mdx/test/fixtures/mdx-infinite-loop/src/pages/index.astro
new file mode 100644
index 000000000..11f7af385
--- /dev/null
+++ b/packages/integrations/mdx/test/fixtures/mdx-infinite-loop/src/pages/index.astro
@@ -0,0 +1,5 @@
+---
+const files = await Astro.glob('./**/*.mdx')
+---
+
+{files.map((file: any) => <file.Content />)}
diff --git a/packages/integrations/mdx/test/mdx-infinite-loop.test.js b/packages/integrations/mdx/test/mdx-infinite-loop.test.js
new file mode 100644
index 000000000..c76c24270
--- /dev/null
+++ b/packages/integrations/mdx/test/mdx-infinite-loop.test.js
@@ -0,0 +1,30 @@
+import mdx from '@astrojs/mdx';
+
+import { expect } from 'chai';
+import { loadFixture } from '../../../astro/test/test-utils.js';
+
+describe('MDX Infinite Loop', () => {
+ let fixture;
+
+ before(async () => {
+ fixture = await loadFixture({
+ root: new URL('./fixtures/mdx-infinite-loop/', import.meta.url),
+ integrations: [mdx()],
+ });
+ });
+
+ describe('build', () => {
+ let err;
+ before(async () => {
+ try {
+ await fixture.build();
+ } catch (e) {
+ err = e;
+ }
+ });
+
+ it('does not hang forever if an error is thrown', async () => {
+ expect(!!err).to.be.true;
+ });
+ });
+});