angular/packages/core/test/render3
Paul Gschwendtner 43dfab447d fix(core): destroy hooks not set up for useClass provider using forwardRef (#44281)
Fixes an issue where destroy hooks are not set up for `useClass` providers
that rely on `forwardRef` for passing the actual class reference.

Currently the destroy hooks are not captured because forward refs are
not resolved for class providers. In ES2015+ this issue becomes even
more critical if arrow-functions are used for

e.g. `useClass: () => forwardRef(..)`.

This is because arrow functions do not have a prototype, unlike in ES5
where the function assigned to `useClass` would always have a prototype.
In ES2015+ a runtime exception as followed is returned (and doesn't give
any useful indication of the forwardRef issue):

```
TypeError: Cannot read properties of undefined (reading 'ngOnDestroy')
  at registerDestroyHooksIfSupported (dist/packages/core/src/render3/di_setup.ts:196:35 <- dist/legacy-test-bundle.spec.js:41508:37)
  at resolveProvider (dist/packages/core/src/render3/di_setup.ts:153:9 <- dist/legacy-test-bundle.spec.js:41485:11)
  at resolveProvider (dist/packages/core/src/render3/di_setup.ts:70:7 <- dist/legacy-test-bundle.spec.js:41445:9)
  at providersResolver (dist/packages/core/src/render3/di_setup.ts:54:5 <- dist/legacy-test-bundle.spec.js:41438:7)
  at Object.definition.providersResolver (dist/packages/core/src/render3/features/providers_feature.ts:48:18 <- dist/legacy-test-bundle.spec.js:41600:16)
  at resolveDirectives (dist/packages/core/src/render3/instructions/shared.ts:1179:40 <- dist/legacy-test-bundle.spec.js:35611:17)
  at elementStartFirstCreatePass (dist/packages/core/src/render3/instructions/element.ts:40:7 <- dist/legacy-test-bundle.spec.js:38432:27)
  at ɵɵelementStart (dist/packages/core/src/render3/instructions/element.ts:87:7 <- dist/legacy-test-bundle.spec.js:38453:43)
  at ɵɵelement (dist/packages/core/src/render3/instructions/element.ts:180:3 <- dist/legacy-test-bundle.spec.js:38510:5)
  at MultipleFormControls_Template (ng:///MultipleFormControls.js:9:9)
```

PR Close #44281
2021-11-30 11:56:05 -05:00
..
i18n test: clean up internal testing utilities (#42177) 2021-05-26 20:07:25 +00:00
instructions test: clean up internal testing utilities (#42177) 2021-05-26 20:07:25 +00:00
interfaces ci: add lint error for files with missing trailing new-line (#42478) 2021-06-04 13:31:03 -07:00
ivy build: bundle spec files for saucelabs legacy job (#44281) 2021-11-30 11:56:04 -05:00
jit refactor: delete the View Engine runtime (#43884) 2021-11-23 21:10:06 +00:00
perf build: Use Ivy compiler for bazel builds by default (#43862) 2021-10-19 10:06:54 -07:00
styling_next refactor(core): Ensure that previousOrParentTNode always belongs to current TView. (#38707) 2020-09-28 16:15:58 -04:00
util test: clean up internal testing utilities (#42177) 2021-05-26 20:07:25 +00:00
BUILD.bazel fix(core): destroy hooks not set up for useClass provider using forwardRef (#44281) 2021-11-30 11:56:05 -05:00
change_detection_spec.ts refactor: delete the View Engine runtime (#43884) 2021-11-23 21:10:06 +00:00
common_with_def.ts refactor: delete the View Engine runtime (#43884) 2021-11-23 21:10:06 +00:00
component_ref_spec.ts refactor(core): clean up circular dependencies (#39722) 2020-11-18 09:15:29 -08:00
component_spec.ts refactor: delete the View Engine runtime (#43884) 2021-11-23 21:10:06 +00:00
di_spec.ts test(core): verify that token IDs that exceed the bloom filter size are handled correctly (#40489) 2021-01-20 17:02:02 -08:00
es2015-tsconfig.json fix(core): destroy hooks not set up for useClass provider using forwardRef (#44281) 2021-11-30 11:56:05 -05:00
global_utils_spec.ts feat(core): introduce getDirectiveMetadata global debugging utility (#41525) 2021-04-13 16:06:32 -07:00
i18n_debug_spec.ts build: bundle spec files for saucelabs legacy job (#44281) 2021-11-30 11:56:04 -05:00
imported_renderer2.ts refactor: add override keyword to members implementing abstract declarations (#42512) 2021-07-12 13:11:17 -07:00
instructions_spec.ts refactor: delete the View Engine runtime (#43884) 2021-11-23 21:10:06 +00:00
integration_spec.ts refactor: delete the View Engine runtime (#43884) 2021-11-23 21:10:06 +00:00
is_shape_of.ts ci: add lint error for files with missing trailing new-line (#42478) 2021-06-04 13:31:03 -07:00
is_shape_of_spec.ts ci: add lint error for files with missing trailing new-line (#42478) 2021-06-04 13:31:03 -07:00
jit_environment_spec.ts refactor(compiler-cli): introduce declaration function to declare class metadata (#41200) 2021-04-12 10:41:17 -07:00
listeners_spec.ts refactor(core): Consistent use of HEADER_OFFSET (in ɵɵ* instructions only) (#39233) 2020-10-21 18:33:00 -07:00
load_domino.ts refactor(core): remove unused fakeAsyncFallback and asyncFallback (#37879) 2020-11-20 08:34:59 -08:00
matchers.ts test(core): update matcher.jasmineToString() to work with jasmine@3.6.0 (#43411) 2021-10-01 12:27:25 -04:00
matchers_spec.ts test: remove Ivy/ViewEngine switch helpers and obsolete tests (#44120) 2021-11-24 19:42:39 +00:00
metadata_spec.ts build: update license headers to reference Google LLC (#37205) 2020-05-26 14:26:58 -04:00
node_selector_matcher_spec.ts build: update license headers to reference Google LLC (#37205) 2020-05-26 14:26:58 -04:00
perfCounter_spec.ts build: update license headers to reference Google LLC (#37205) 2020-05-26 14:26:58 -04:00
pipe_spec.ts perf(core): remove support for the deprecated WrappedValue (#43507) 2021-10-01 12:25:19 -04:00
providers_es2015_spec.ts fix(core): destroy hooks not set up for useClass provider using forwardRef (#44281) 2021-11-30 11:56:05 -05:00
providers_helper.ts fix(core): destroy hooks not set up for useClass provider using forwardRef (#44281) 2021-11-30 11:56:05 -05:00
providers_spec.ts fix(core): destroy hooks not set up for useClass provider using forwardRef (#44281) 2021-11-30 11:56:05 -05:00
query_spec.ts fix(core): QueryList should not fire changes if the underlying list did not change. (#40091) 2021-01-14 13:55:02 -08:00
render_util.ts refactor: delete the View Engine runtime (#43884) 2021-11-23 21:10:06 +00:00
renderer_factory_spec.ts build: update license headers to reference Google LLC (#37205) 2020-05-26 14:26:58 -04:00
testing_spec.ts build: update license headers to reference Google LLC (#37205) 2020-05-26 14:26:58 -04:00
utils.ts refactor(core): Rename debugMatch to matchDebug for consistency (#39233) 2020-10-21 18:33:00 -07:00
view_container_ref_spec.ts fix(core): QueryList should not fire changes if the underlying list did not change. (#40091) 2021-01-14 13:55:02 -08:00
view_fixture.ts ci: add lint error for files with missing trailing new-line (#42478) 2021-06-04 13:31:03 -07:00
view_utils_spec.ts fix(core): Store ICU state in LView rather than in TView (#39233) 2020-10-21 18:33:00 -07:00