angular-cn/packages/compiler/test
Pete Bacon Darwin 70dd27ffd8 fix(compiler): normalize line endings in ICU expansions (#36741)
The html parser already normalizes line endings (converting `\r\n` to `\n`)
for most text in templates but it was missing the expressions of ICU expansions.

In ViewEngine backticked literal strings, used to define inline templates,
were already normalized by the TypeScript parser.
In Ivy we are parsing the raw text of the source file directly so the line
endings need to be manually normalized.

This change ensures that inline templates have the line endings of ICU
expression normalized correctly, which matches the ViewEngine.

In ViewEngine external templates, defined in HTML files, the behavior was
different, since TypeScript was not normalizing the line endings.
Specifically, ICU expansion "expressions" are not being normalized.
This is a problem because it means that i18n message ids can be different on
different machines that are setup with different line ending handling,
or if the developer moves a template from inline to external or vice versa.

The goal is always to normalize line endings, whether inline or external.
But this would be a breaking change since it would change i18n message ids
that have been previously computed. Therefore this commit aligns the ivy
template parsing to have the same "buggy" behavior for external templates.

There is now a compiler option `i18nNormalizeLineEndingsInICUs`, which
if set to `true` will ensure the correct non-buggy behavior. For the time
being this option defaults to `false` to ensure backward compatibility while
allowing opt-in to the desired behavior. This option's default will be
flipped in a future breaking change release.

Further, when this option is set to `false`, any ICU expression tokens,
which have not been normalized, are added to the `ParseResult` from the
`HtmlParser.parse()` method. In the future, this collection of tokens could
be used to diagnose and encourage developers to migrate their i18n message
ids. See FW-2106.

Closes #36725

PR Close #36741
2020-04-28 12:22:40 -07:00
..
aot style(compiler): reformat of codebase with new clang-format version (#36520) 2020-04-08 14:51:08 -07:00
css_parser style(compiler): reformat of codebase with new clang-format version (#36520) 2020-04-08 14:51:08 -07:00
expression_parser style(compiler): reformat of codebase with new clang-format version (#36520) 2020-04-08 14:51:08 -07:00
i18n test(compiler): check extracted translations for line endings (#36741) 2020-04-28 12:22:40 -07:00
ml_parser fix(compiler): normalize line endings in ICU expansions (#36741) 2020-04-28 12:22:40 -07:00
output style(compiler): reformat of codebase with new clang-format version (#36520) 2020-04-08 14:51:08 -07:00
render3 style(compiler): reformat of codebase with new clang-format version (#36520) 2020-04-08 14:51:08 -07:00
schema style(compiler): reformat of codebase with new clang-format version (#36520) 2020-04-08 14:51:08 -07:00
selector style(compiler): reformat of codebase with new clang-format version (#36520) 2020-04-08 14:51:08 -07:00
template_parser style(compiler): reformat of codebase with new clang-format version (#36520) 2020-04-08 14:51:08 -07:00
BUILD.bazel test: setup circular dependency tests for all entry points (#34774) 2020-01-23 11:36:40 -08:00
compiler_facade_interface_spec.ts style(compiler): reformat of codebase with new clang-format version (#36520) 2020-04-08 14:51:08 -07:00
config_spec.ts style(compiler): reformat of codebase with new clang-format version (#36520) 2020-04-08 14:51:08 -07:00
core_spec.ts style(compiler): reformat of codebase with new clang-format version (#36520) 2020-04-08 14:51:08 -07:00
directive_lifecycle_spec.ts style(compiler): reformat of codebase with new clang-format version (#36520) 2020-04-08 14:51:08 -07:00
directive_normalizer_spec.ts style(compiler): reformat of codebase with new clang-format version (#36520) 2020-04-08 14:51:08 -07:00
directive_resolver_mock_spec.ts style(compiler): reformat of codebase with new clang-format version (#36520) 2020-04-08 14:51:08 -07:00
directive_resolver_spec.ts style(compiler): reformat of codebase with new clang-format version (#36520) 2020-04-08 14:51:08 -07:00
integration_spec.ts style(compiler): reformat of codebase with new clang-format version (#36520) 2020-04-08 14:51:08 -07:00
metadata_resolver_fixture.ts refactor: move angular source to /packages rather than modules/@angular 2017-03-08 16:29:27 -08:00
metadata_resolver_spec.ts style(compiler): reformat of codebase with new clang-format version (#36520) 2020-04-08 14:51:08 -07:00
ng_module_resolver_mock_spec.ts build: remove `main()` from specs (#21053) 2017-12-22 13:10:51 -08:00
ng_module_resolver_spec.ts style(compiler): reformat of codebase with new clang-format version (#36520) 2020-04-08 14:51:08 -07:00
parse_util_spec.ts build: remove `main()` from specs (#21053) 2017-12-22 13:10:51 -08:00
pipe_resolver_mock_spec.ts build: remove `main()` from specs (#21053) 2017-12-22 13:10:51 -08:00
pipe_resolver_spec.ts style(compiler): reformat of codebase with new clang-format version (#36520) 2020-04-08 14:51:08 -07:00
resource_loader_mock_spec.ts style(compiler): reformat of codebase with new clang-format version (#36520) 2020-04-08 14:51:08 -07:00
runtime_compiler_spec.ts style(compiler): reformat of codebase with new clang-format version (#36520) 2020-04-08 14:51:08 -07:00
shadow_css_spec.ts style(compiler): reformat of codebase with new clang-format version (#36520) 2020-04-08 14:51:08 -07:00
spies.ts style(compiler): reformat of codebase with new clang-format version (#36520) 2020-04-08 14:51:08 -07:00
style_url_resolver_spec.ts style(compiler): reformat of codebase with new clang-format version (#36520) 2020-04-08 14:51:08 -07:00
test_bindings.ts refactor(compiler): split compiler and core (#18683) 2017-08-16 17:58:53 -05:00
url_resolver_spec.ts style(compiler): reformat of codebase with new clang-format version (#36520) 2020-04-08 14:51:08 -07:00
util_spec.ts fix(compiler): avoid generating i18n attributes in plain form (#36422) 2020-04-16 09:44:10 -07:00