angular/packages/core/test/acceptance
Paul Gschwendtner 58be2ff884 fix(ivy): unable to bind to implicit receiver in embedded views (#30897)
To provide some context: The implicit receiver is part of the
parsed Angular template AST. Any property reads in bindings,
interpolations etc. read from a given object (usually the component
instance). In that case there is an _implicit_ receiver which can also
be specified explicitly by just using `this`.

e.g.

```html
<ng-template>{{this.myProperty}}</ng-template>
```

This works as expected in Ivy and View Engine, but breaks in case the
implicit receiver is not used for property reads. For example:

```html
<my-dir [myFn]="greetFn.bind(this)"></my-dir>
```

In that case the `this` will not be properly translated into the generated
template function code because the Ivy compiler currently always treats
the `ctx` variable as the implicit receiver. This is **not correct** and breaks
compatibility with View Engine. Rather we need to ensure that we retrieve
the root context for the standalone implicit receiver similar to how it works
for property reads (as seen in the example above with `this.myProperty`)

Note that this requires some small changes to the `expression_converter`
because we only want to generate the `eenextContent()` instruction if the
implicit receiver is _actually_ used/needed. View Engine determines if that is the case by recursively walking through the converted output AST and
checking for usages of the `o.variable('_co')` variable ([see here][ve_check]). This would work too for Ivy, but involves most likely more code duplication
since templates are isolated in different functions and it another pass
through the output AST for every template expression.

[ve_check]: 0d6c9d36a1/packages/compiler/src/view_compiler/view_compiler.ts (L206-L208)

Resolves FW-1366.

PR Close #30897
2019-06-11 14:29:42 -07:00
..
attributes_spec.ts test(ivy): add attribute interpolation test (#30503) 2019-05-22 16:30:28 -07:00
BUILD.bazel fix(ivy): module with providers are processed too early (#30688) 2019-05-31 09:48:39 -07:00
change_detection_spec.ts test(core): update core tests (unrelated to queries) to use static flag (#30626) 2019-05-23 10:31:32 -07:00
common_integration_spec.ts test(ivy): move common integration tests to acceptance (#30213) 2019-05-14 11:37:50 -07:00
component_spec.ts test(core): update core tests (unrelated to queries) to use static flag (#30626) 2019-05-23 10:31:32 -07:00
content_spec.ts test(core): update core tests (unrelated to queries) to use static flag (#30626) 2019-05-23 10:31:32 -07:00
di_spec.ts fix(ivy): module with providers are processed too early (#30688) 2019-05-31 09:48:39 -07:00
directive_spec.ts test(core): update core tests (unrelated to queries) to use static flag (#30626) 2019-05-23 10:31:32 -07:00
discover_utils_spec.ts test(core): update core tests (unrelated to queries) to use static flag (#30626) 2019-05-23 10:31:32 -07:00
embedded_views_spec.ts fix(ivy): unable to bind to implicit receiver in embedded views (#30897) 2019-06-11 14:29:42 -07:00
exports_spec.ts refactor(ivy): move exports tests to acceptance (#30157) 2019-04-26 16:37:34 -07:00
host_binding_spec.ts test(core): update core tests (unrelated to queries) to use static flag (#30626) 2019-05-23 10:31:32 -07:00
i18n_spec.ts fix(ivy): correctly set TView.firstChild with runtime i18n (#30920) 2019-06-11 00:09:32 +00:00
inherit_definition_feature_spec.ts test(ivy): Add TODOs (#30522) 2019-05-17 09:56:49 -07:00
integration_spec.ts test(core): update core tests (unrelated to queries) to use static flag (#30626) 2019-05-23 10:31:32 -07:00
lifecycle_spec.ts test(core): update core tests (unrelated to queries) to use static flag (#30626) 2019-05-23 10:31:32 -07:00
listener_spec.ts test(core): update core tests (unrelated to queries) to use static flag (#30626) 2019-05-23 10:31:32 -07:00
outputs_spec.ts test(core): update core tests (unrelated to queries) to use static flag (#30626) 2019-05-23 10:31:32 -07:00
pipe_spec.ts test(core): update core tests (unrelated to queries) to use static flag (#30626) 2019-05-23 10:31:32 -07:00
property_binding_spec.ts test(ivy): move property render3 tests to acceptance (#30426) 2019-05-14 09:39:22 -07:00
property_interpolation_spec.ts test(ivy): move property and attribute tests to acceptance (#30321) 2019-05-09 11:23:35 -07:00
providers_spec.ts fix(ivy): support injection flags for provider deps without new (#30216) 2019-04-30 20:37:56 -07:00
pure_function_spec.ts test(ivy): pure function acceptance tests (#30406) 2019-05-13 10:55:59 -07:00
query_spec.ts test(core): update query-specific tests in core (#30626) 2019-05-23 10:31:32 -07:00
renderer_factory_spec.ts test(ivy): move render3 renderer_factory tests to acceptance (#30435) 2019-05-14 09:36:24 -07:00
router_integration_spec.ts fix(ivy): module with providers are processed too early (#30688) 2019-05-31 09:48:39 -07:00
styling_next_spec.ts feat(ivy): in ngDevMode use named object literals and arrays for easier debugging/profiling (#30542) 2019-06-04 12:01:46 -07:00
styling_spec.ts fix(ivy): unable to bind SafeValue to clip-path (#30491) 2019-05-16 14:40:21 -07:00
template_ref_spec.ts test(core): update core tests (unrelated to queries) to use static flag (#30626) 2019-05-23 10:31:32 -07:00
text_spec.ts perf(ivy): remove check for function type in renderStringify (#30838) 2019-06-06 13:47:41 -07:00
view_container_ref_spec.ts fix(ivy): unable to project into multiple slots with default selector (#30561) 2019-05-31 09:52:32 -07:00
view_insertion_spec.ts test(core): add missing static flag to view_insertion test view queries (#30967) 2019-06-11 09:37:19 -07:00
view_ref_spec.ts test(ivy): fix failing view ref test (#29178) 2019-03-07 18:56:22 -08:00