From 265020e99521367c2c0e28558c78f79c9c309bbc Mon Sep 17 00:00:00 2001 From: Vincent Lycoops Date: Mon, 18 Nov 2024 22:01:08 +0100 Subject: [PATCH] . --- .../TEST_CASES.json | 15 +++++++++ .../switch_with_multi_case.ts | 25 ++++++++++++++ .../switch_with_multi_case_template.js | 33 +++++++++++++++++++ 3 files changed, 73 insertions(+) create mode 100644 packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_control_flow/switch_with_multi_case.ts create mode 100644 packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_control_flow/switch_with_multi_case_template.js 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 833ca840a1bd4..c0b924191be54 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 0000000000000..89cac28ace786 --- /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 0000000000000..4916b119ecc71 --- /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); + } +}