diff --git a/test/e2e/app-dir/rsc-basic.test.ts b/test/e2e/app-dir/rsc-basic.test.ts
index 1bf806767572145..713806074c16948 100644
--- a/test/e2e/app-dir/rsc-basic.test.ts
+++ b/test/e2e/app-dir/rsc-basic.test.ts
@@ -64,6 +64,45 @@ describe('app dir - rsc basics', () => {
return
}
+ it('should correctly render page returning null', async () => {
+ const homeHTML = await renderViaHTTP(next.url, '/return-null/page')
+ const $ = cheerio.load(homeHTML)
+ expect($('#return-null-layout').html()).toBeEmpty()
+ })
+
+ it('should correctly render component returning null', async () => {
+ const homeHTML = await renderViaHTTP(next.url, '/return-null/component')
+ const $ = cheerio.load(homeHTML)
+ expect($('#return-null-layout').html()).toBeEmpty()
+ })
+
+ it('should correctly render layout returning null', async () => {
+ const homeHTML = await renderViaHTTP(next.url, '/return-null/layout')
+ const $ = cheerio.load(homeHTML)
+ expect($('#return-null-layout').html()).toBeEmpty()
+ })
+
+ it('should correctly render page returning undefined', async () => {
+ const homeHTML = await renderViaHTTP(next.url, '/return-undefined/page')
+ const $ = cheerio.load(homeHTML)
+ expect($('#return-undefined-layout').html()).toBeEmpty()
+ })
+
+ it('should correctly render component returning undefined', async () => {
+ const homeHTML = await renderViaHTTP(
+ next.url,
+ '/return-undefined/component'
+ )
+ const $ = cheerio.load(homeHTML)
+ expect($('#return-undefined-layout').html()).toBeEmpty()
+ })
+
+ it('should correctly render layout returning undefined', async () => {
+ const homeHTML = await renderViaHTTP(next.url, '/return-undefined/layout')
+ const $ = cheerio.load(homeHTML)
+ expect($('#return-undefined-layout').html()).toBeEmpty()
+ })
+
it('should render server components correctly', async () => {
const homeHTML = await renderViaHTTP(next.url, '/', null, {
headers: {
diff --git a/test/e2e/app-dir/rsc-basic/app/return-null/component/component.js b/test/e2e/app-dir/rsc-basic/app/return-null/component/component.js
new file mode 100644
index 000000000000000..fff7432b96cd3a6
--- /dev/null
+++ b/test/e2e/app-dir/rsc-basic/app/return-null/component/component.js
@@ -0,0 +1,3 @@
+export default function Component() {
+ return null
+}
diff --git a/test/e2e/app-dir/rsc-basic/app/return-null/component/page.js b/test/e2e/app-dir/rsc-basic/app/return-null/component/page.js
new file mode 100644
index 000000000000000..11af371bb967efe
--- /dev/null
+++ b/test/e2e/app-dir/rsc-basic/app/return-null/component/page.js
@@ -0,0 +1,5 @@
+import Component from './component'
+
+export default function Page() {
+ return
+}
diff --git a/test/e2e/app-dir/rsc-basic/app/return-null/layout.js b/test/e2e/app-dir/rsc-basic/app/return-null/layout.js
new file mode 100644
index 000000000000000..f22bb0fb80afc20
--- /dev/null
+++ b/test/e2e/app-dir/rsc-basic/app/return-null/layout.js
@@ -0,0 +1,3 @@
+export default function Layout({ children }) {
+ return
{children}
+}
diff --git a/test/e2e/app-dir/rsc-basic/app/return-null/layout/layout.js b/test/e2e/app-dir/rsc-basic/app/return-null/layout/layout.js
new file mode 100644
index 000000000000000..703a5922a1b92e7
--- /dev/null
+++ b/test/e2e/app-dir/rsc-basic/app/return-null/layout/layout.js
@@ -0,0 +1,3 @@
+export default function Layout() {
+ return null
+}
diff --git a/test/e2e/app-dir/rsc-basic/app/return-null/layout/page.js b/test/e2e/app-dir/rsc-basic/app/return-null/layout/page.js
new file mode 100644
index 000000000000000..2e55ad1b6db8e1b
--- /dev/null
+++ b/test/e2e/app-dir/rsc-basic/app/return-null/layout/page.js
@@ -0,0 +1,3 @@
+export default function Page() {
+ return
+}
diff --git a/test/e2e/app-dir/rsc-basic/app/return-null/page/page.js b/test/e2e/app-dir/rsc-basic/app/return-null/page/page.js
new file mode 100644
index 000000000000000..c17431379f962fe
--- /dev/null
+++ b/test/e2e/app-dir/rsc-basic/app/return-null/page/page.js
@@ -0,0 +1,3 @@
+export default function Page() {
+ return null
+}
diff --git a/test/e2e/app-dir/rsc-basic/app/return-undefined/component/component.js b/test/e2e/app-dir/rsc-basic/app/return-undefined/component/component.js
new file mode 100644
index 000000000000000..c6be8faf00884ac
--- /dev/null
+++ b/test/e2e/app-dir/rsc-basic/app/return-undefined/component/component.js
@@ -0,0 +1 @@
+export default function Component() {}
diff --git a/test/e2e/app-dir/rsc-basic/app/return-undefined/component/page.js b/test/e2e/app-dir/rsc-basic/app/return-undefined/component/page.js
new file mode 100644
index 000000000000000..11af371bb967efe
--- /dev/null
+++ b/test/e2e/app-dir/rsc-basic/app/return-undefined/component/page.js
@@ -0,0 +1,5 @@
+import Component from './component'
+
+export default function Page() {
+ return
+}
diff --git a/test/e2e/app-dir/rsc-basic/app/return-undefined/layout.js b/test/e2e/app-dir/rsc-basic/app/return-undefined/layout.js
new file mode 100644
index 000000000000000..e8f4ac88a45c351
--- /dev/null
+++ b/test/e2e/app-dir/rsc-basic/app/return-undefined/layout.js
@@ -0,0 +1,3 @@
+export default function Layout({ children }) {
+ return {children}
+}
diff --git a/test/e2e/app-dir/rsc-basic/app/return-undefined/layout/layout.js b/test/e2e/app-dir/rsc-basic/app/return-undefined/layout/layout.js
new file mode 100644
index 000000000000000..538b725feb4c34d
--- /dev/null
+++ b/test/e2e/app-dir/rsc-basic/app/return-undefined/layout/layout.js
@@ -0,0 +1 @@
+export default function Layout() {}
diff --git a/test/e2e/app-dir/rsc-basic/app/return-undefined/layout/page.js b/test/e2e/app-dir/rsc-basic/app/return-undefined/layout/page.js
new file mode 100644
index 000000000000000..2e55ad1b6db8e1b
--- /dev/null
+++ b/test/e2e/app-dir/rsc-basic/app/return-undefined/layout/page.js
@@ -0,0 +1,3 @@
+export default function Page() {
+ return
+}
diff --git a/test/e2e/app-dir/rsc-basic/app/return-undefined/page/page.js b/test/e2e/app-dir/rsc-basic/app/return-undefined/page/page.js
new file mode 100644
index 000000000000000..b454a79bc8f1984
--- /dev/null
+++ b/test/e2e/app-dir/rsc-basic/app/return-undefined/page/page.js
@@ -0,0 +1 @@
+export default function Page() {}