diff --git a/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_control_flow/TEST_CASES.json b/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_control_flow/TEST_CASES.json
index 833ca840a1bd42..c0b924191be548 100644
--- a/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_control_flow/TEST_CASES.json
+++ b/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_control_flow/TEST_CASES.json
@@ -76,6 +76,21 @@
}
]
},
+ {
+ "description": "should generate code for switch blocks containing a case with multiple guards",
+ "inputFiles": ["switch_with_multi_case.ts"],
+ "expectations": [
+ {
+ "files": [
+ {
+ "expected": "switch_with_multi_case_template.js",
+ "generated": "empty_switch.js"
+ }
+ ],
+ "failureMessage": "Incorrect template"
+ }
+ ]
+ },
{
"description": "should generate a basic if block",
"inputFiles": ["basic_if.ts"],
diff --git a/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_control_flow/switch_with_multi_case.ts b/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_control_flow/switch_with_multi_case.ts
new file mode 100644
index 00000000000000..89cac28ace786c
--- /dev/null
+++ b/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_control_flow/switch_with_multi_case.ts
@@ -0,0 +1,25 @@
+import {Component} from '@angular/core';
+
+@Component({
+ template: `
+
+ {{message}}
+ @switch (value()) {
+ @case (0; 1; 2) {
+ case 0, 1, or 2
+ }
+ @case (3) {
+ case 3
+ }
+ @case (4) {
+ case 4
+ }
+ }
+
+ `,
+ standalone: false
+})
+export class MyApp {
+ message = 'hello';
+ value = () => 1;
+}
diff --git a/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_control_flow/switch_with_multi_case_template.js b/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_control_flow/switch_with_multi_case_template.js
new file mode 100644
index 00000000000000..4916b119ecc716
--- /dev/null
+++ b/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_control_flow/switch_with_multi_case_template.js
@@ -0,0 +1,33 @@
+function MyApp_Case_2_Template(rf, ctx) {
+ if (rf & 1) {
+ $r3$.ɵɵtext(0, " case 0, 1, or 2 ");
+ }
+}
+
+function MyApp_Case_3_Template(rf, ctx) {
+ if (rf & 1) {
+ $r3$.ɵɵtext(0, " case 3 ");
+ }
+}
+
+function MyApp_Case_4_Template(rf, ctx) {
+ if (rf & 1) {
+ $r3$.ɵɵtext(0, " case 4 ");
+ }
+}
+…
+function MyApp_Template(rf, ctx) {
+ if (rf & 1) {
+ $r3$.ɵɵelementStart(0, "div");
+ $r3$.ɵɵtext(1);
+ $r3$.ɵɵtemplate(2, MyApp_Case_2_Template, 1, 0)(3, MyApp_Case_3_Template, 1, 0)(4, MyApp_Case_4_Template, 1, 0);
+ $r3$.ɵɵelementEnd();
+ }
+ if (rf & 2) {
+ let $MyApp_contFlowTmp$;
+ $r3$.ɵɵadvance();
+ $r3$.ɵɵtextInterpolate1(" ", ctx.message, " ");
+ $r3$.ɵɵadvance();
+ $r3$.ɵɵconditional(($MyApp_contFlowTmp$ = ctx.value()) === 0 ? 2 : $MyApp_contFlowTmp$ === 1 ? 3 : $MyApp_contFlowTmp$ === 2 ? 4 : -1);
+ }
+}