angular-cn/packages/compiler/test
Alex Rickabaugh bea85ffe9c fix(ivy): match microsyntax template directives correctly (#29698)
Previously, Template.templateAttrs was introduced to capture attribute
bindings which originated from microsyntax (e.g. bindings in *ngFor="...").
This means that a Template node can have two different structures, depending
on whether it originated from microsyntax or from a literal <ng-template>.

In the literal case, the node behaves much like an Element node, it has
attributes, inputs, and outputs which determine which directives apply.
In the microsyntax case, though, only the templateAttrs should be used
to determine which directives apply.

Previously, both the t2_binder and the TemplateDefinitionBuilder were using
the wrong set of attributes to match directives - combining the attributes,
inputs, outputs, and templateAttrs of the Template node regardless of its
origin. In the TDB's case this wasn't a problem, since the TDB collects a
global Set of directives used in the template, so it didn't matter whether
the directive was also recognized on the <ng-template>. t2_binder's API
distinguishes between directives on specific nodes, though, so it's more
sensitive to mismatching.

In particular, this showed up as an assertion failure in template type-
checking in certain cases, when a directive was accidentally matched on
a microsyntax template element and also had a binding which referenced a
variable declared in the microsyntax. This resulted in the type-checker
attempting to generate a reference to a variable that didn't exist in that
scope.

The fix is to distinguish between the two cases and select the appropriate
set of attributes to match on accordingly.

Testing strategy: tested in the t2_binder tests.

PR Close #29698
2019-04-19 11:15:25 -07:00
..
aot test(ivy): add tests for component factory projectable node corner cases (#27791) 2019-03-25 13:47:48 -07:00
css_parser build: fix type-check errors introduced during rules_ts 0.21 (#27586) 2018-12-10 16:33:41 -08:00
expression_parser test(ivy): update //packages/compiler tests for Ivy (#27301) 2018-11-29 21:31:35 -08:00
i18n refactor(compiler): use `options` argument for parsers (#28055) 2019-02-12 20:58:27 -08:00
ml_parser fix(core): parse incorrect ML open tag as text (#29328) 2019-03-19 23:23:31 -04:00
output build: upgrade jasmine (and related typings) to latest version (#19904) 2018-07-06 13:48:02 -07:00
render3 fix(ivy): match microsyntax template directives correctly (#29698) 2019-04-19 11:15:25 -07:00
schema feat(ivy): add `ngcc` ivy switch (#25238) 2018-08-16 13:51:42 -07:00
selector build: fix type-check errors introduced during rules_ts 0.21 (#27586) 2018-12-10 16:33:41 -08:00
template_parser fix(compiler): ensure that event handlers have the correct source spans (#28055) 2019-02-12 20:58:28 -08:00
BUILD.bazel build: rules_nodejs 0.26.0 & use @npm instead of @ngdeps now that downstream angular build uses angular bundles (#28871) 2019-02-28 12:06:36 -08:00
compiler_facade_interface_spec.ts fix(ivy): platform module bootstrap does not resolve resources (#29083) 2019-03-12 11:50:06 -07:00
config_spec.ts feat(core): set preserveWhitespaces to false by default (#22046) 2018-02-16 09:06:14 -08:00
core_spec.ts build: upgrade jasmine (and related typings) to latest version (#19904) 2018-07-06 13:48:02 -07:00
directive_lifecycle_spec.ts build: remove `main()` from specs (#21053) 2017-12-22 13:10:51 -08:00
directive_normalizer_spec.ts build: remove `main()` from specs (#21053) 2017-12-22 13:10:51 -08:00
directive_resolver_mock_spec.ts build: remove `main()` from specs (#21053) 2017-12-22 13:10:51 -08:00
directive_resolver_spec.ts build: remove `main()` from specs (#21053) 2017-12-22 13:10:51 -08:00
integration_spec.ts build(bazel): Turning on strictPropertyInitialization for Angular. (#24572) 2018-06-25 07:57:13 -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 Revert "fix(compiler): Pretty print object instead of [Object object] (#22689)" (#23442) 2018-04-19 14:51:58 -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 build: remove `main()` from specs (#21053) 2017-12-22 13:10:51 -08: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 build: remove `main()` from specs (#21053) 2017-12-22 13:10:51 -08:00
resource_loader_mock_spec.ts build: remove `main()` from specs (#21053) 2017-12-22 13:10:51 -08:00
runtime_compiler_spec.ts build: remove `main()` from specs (#21053) 2017-12-22 13:10:51 -08:00
shadow_css_spec.ts fix(compiler): Don't strip `/*# sourceURL ... */` (#16088) 2018-01-24 12:35:30 -08:00
spies.ts perf: switch angular to use StaticInjector instead of ReflectiveInjector 2017-08-07 15:42:34 -07:00
style_url_resolver_spec.ts build: remove `main()` from specs (#21053) 2017-12-22 13:10:51 -08:00
test_bindings.ts refactor(compiler): split compiler and core (#18683) 2017-08-16 17:58:53 -05:00
url_resolver_spec.ts build: remove `main()` from specs (#21053) 2017-12-22 13:10:51 -08:00
util_spec.ts Revert "fix(compiler): Pretty print object instead of [Object object] (#22689)" (#23442) 2018-04-19 14:51:58 -07:00