import {NgFor} from '@angular/common';
import {TestComponentBuilder} from '@angular/compiler/testing';
import {Component, Directive, Inject, Query, QueryList, bind, forwardRef, provide, resolveForwardRef} from '@angular/core';
import {asNativeElements} from '@angular/core';
import {beforeEach, ddescribe, describe, expect, iit, inject, it, xit} from '@angular/core/testing/testing_internal';
import {AsyncTestCompleter} from '@angular/core/testing/testing_internal';
import {Type} from '../src/facade/lang';
export function main() {
describe('forwardRef integration', function() {
it('should instantiate components which are declared using forwardRef',
inject(
[TestComponentBuilder, AsyncTestCompleter],
(tcb: TestComponentBuilder, async: AsyncTestCompleter) => {
tcb.createAsync(App).then((tc) => {
tc.detectChanges();
expect(asNativeElements(tc.debugElement.children)).toHaveText('frame(lock)');
async.done();
});
}));
});
}
@Component({
selector: 'app',
viewProviders: [forwardRef(() => Frame)],
template: ``,
directives: [forwardRef(() => Door), forwardRef(() => Lock)],
})
class App {
}
@Component({
selector: 'lock',
directives: [NgFor],
template: `{{frame.name}}({{lock.name}})`,
})
class Door {
locks: QueryList;
frame: Frame;
constructor(
@Query(forwardRef(() => Lock)) locks: QueryList,
@Inject(forwardRef(() => Frame)) frame: Frame) {
this.frame = frame;
this.locks = locks;
}
}
class Frame {
name: string;
constructor() { this.name = 'frame'; }
}
@Directive({selector: 'lock'})
class Lock {
name: string;
constructor() { this.name = 'lock'; }
}