angular-cn/packages/compiler-cli/test/compliance
Alex Rickabaugh 718d7fe5fe fix(ivy): properly parenthesize ternary expressions when emitted (#34221)
Previously, ternary expressions were emitted as:

condExpr ? trueCase : falseCase

However, this causes problems when ternary operations are nested. In
particular, a template expression of the form:

a?.b ? c : d

would have compiled to:

a == null ? null : a.b ? c : d

The ternary operator is right-associative, so that expression is interpreted
as:

a == null ? null : (a.b ? c : d)

when in reality left-associativity is desired in this particular instance:

(a == null ? null : a.b) ? c : d

This commit adds a check in the expression translator to detect such
left-associative usages of ternaries and to enforce such associativity with
parentheses when necessary.

A test is also added for the template type-checking expression translator,
to ensure it correctly produces right-associative expressions for ternaries
in the user's template.

Fixes #34087

PR Close #34221
2019-12-06 13:01:48 -08:00
..
BUILD.bazel refactor(ivy): implement a virtual file-system layer in ngtsc + ngcc (#30921) 2019-06-25 16:25:24 -07:00
README.md build: migrate references and scripts that set to build with ivy via compile=aot to use config=ivy (#33983) 2019-11-26 16:38:40 -05:00
mock_compile.ts refactor(compiler): i18n - render legacy i18n message ids (#34135) 2019-12-03 10:15:53 -08:00
mock_compiler_spec.ts test(compiler-cli): compliance tests not always reporting test failure (#30597) 2019-05-22 16:22:52 -07:00
r3_compiler_compliance_spec.ts fix(ivy): correctly support `ngProjectAs` on templates (#34200) 2019-12-03 16:12:55 -08:00
r3_view_compiler_binding_spec.ts perf(ivy): chain listener instructions (#33720) 2019-11-12 09:59:13 -08:00
r3_view_compiler_di_spec.ts refactor(ivy): do not generate providedIn: null (#34116) 2019-12-03 10:14:52 -08:00
r3_view_compiler_directives_spec.ts refactor(core): rename ngFactoryDef to ɵfac (#33116) 2019-10-14 20:27:25 +00:00
r3_view_compiler_i18n_spec.ts test(ivy): update `ngI18nClosureMode` flag usage in tests (#34224) 2019-12-03 23:03:27 -08:00
r3_view_compiler_input_outputs_spec.ts refactor(ivy): remove ngBaseDef (#33264) 2019-10-25 13:11:34 -07:00
r3_view_compiler_listener_spec.ts perf(ivy): chain listener instructions (#33720) 2019-11-12 09:59:13 -08:00
r3_view_compiler_providers_spec.ts refactor(core): rename ngFactoryDef to ɵfac (#33116) 2019-10-14 20:27:25 +00:00
r3_view_compiler_spec.ts perf(ivy): chain multiple property instructions (#31078) 2019-06-19 15:42:37 -07:00
r3_view_compiler_styling_spec.ts perf(ivy): chain styling instructions (#33837) 2019-11-19 11:44:29 -08:00
r3_view_compiler_template_spec.ts fix(ivy): properly parenthesize ternary expressions when emitted (#34221) 2019-12-06 13:01:48 -08:00

README.md

Tests in this directory should be run with:

yarn bazel test --config=ivy  packages/compiler-cli/test/compliance:compliance