chore: move StaticReflector into compiler_cli, part 2
Adjust tests and build to run the unit tests again after the move. Closes #8363
This commit is contained in:
parent
ab56be46e1
commit
9e05814212
@ -1060,11 +1060,15 @@ gulp.task('!test.compiler_cli.codegen', function(done) {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
gulp.task('!test.compiler_cli.unit',
|
||||||
|
function(done) { runJasmineTests(['dist/js/cjs/compiler_cli/**/*_spec.js'], done) });
|
||||||
|
|
||||||
// End-to-end test for compiler CLI.
|
// End-to-end test for compiler CLI.
|
||||||
// Calls the compiler using its command-line interface, then compiles the app with the codegen.
|
// Calls the compiler using its command-line interface, then compiles the app with the codegen.
|
||||||
// TODO(alexeagle): wire up the playground tests with offline compilation, similar to dart.
|
// TODO(alexeagle): wire up the playground tests with offline compilation, similar to dart.
|
||||||
gulp.task('test.compiler_cli', ['!build.compiler_cli'],
|
gulp.task('test.compiler_cli', ['!build.compiler_cli'], function(done) {
|
||||||
function(done) { runSequence('!test.compiler_cli.codegen', sequenceComplete(done)); });
|
runSequence('!test.compiler_cli.unit', '!test.compiler_cli.codegen', sequenceComplete(done));
|
||||||
|
});
|
||||||
|
|
||||||
// -----------------
|
// -----------------
|
||||||
// orchestrated targets
|
// orchestrated targets
|
||||||
|
@ -6,7 +6,7 @@ import * as ts from 'typescript';
|
|||||||
import * as path from 'path';
|
import * as path from 'path';
|
||||||
|
|
||||||
import * as compiler from 'angular2/compiler';
|
import * as compiler from 'angular2/compiler';
|
||||||
import {StaticReflector} from 'angular2/src/compiler/static_reflector';
|
import {StaticReflector} from './static_reflector';
|
||||||
import {CompileMetadataResolver} from 'angular2/src/compiler/metadata_resolver';
|
import {CompileMetadataResolver} from 'angular2/src/compiler/metadata_resolver';
|
||||||
import {HtmlParser} from 'angular2/src/compiler/html_parser';
|
import {HtmlParser} from 'angular2/src/compiler/html_parser';
|
||||||
import {DirectiveNormalizer} from 'angular2/src/compiler/directive_normalizer';
|
import {DirectiveNormalizer} from 'angular2/src/compiler/directive_normalizer';
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import {StaticReflectorHost, StaticSymbol} from 'angular2/src/compiler/static_reflector';
|
import {StaticReflectorHost, StaticSymbol} from './static_reflector';
|
||||||
import * as ts from 'typescript';
|
import * as ts from 'typescript';
|
||||||
import {MetadataCollector, ModuleMetadata} from 'ts-metadata-collector';
|
import {MetadataCollector, ModuleMetadata} from 'ts-metadata-collector';
|
||||||
import * as fs from 'fs';
|
import * as fs from 'fs';
|
||||||
|
@ -130,7 +130,7 @@ export class StaticReflector implements ReflectorReader {
|
|||||||
|
|
||||||
parameters = [];
|
parameters = [];
|
||||||
ListWrapper.forEachWithIndex(parameterTypes, (paramType, index) => {
|
ListWrapper.forEachWithIndex(parameterTypes, (paramType, index) => {
|
||||||
let nestedResult = [];
|
let nestedResult: any[] = [];
|
||||||
if (isPresent(paramType)) {
|
if (isPresent(paramType)) {
|
||||||
nestedResult.push(paramType);
|
nestedResult.push(paramType);
|
||||||
}
|
}
|
||||||
@ -155,9 +155,9 @@ export class StaticReflector implements ReflectorReader {
|
|||||||
|
|
||||||
private registerDecoratorOrConstructor(type: StaticSymbol, ctor: any): void {
|
private registerDecoratorOrConstructor(type: StaticSymbol, ctor: any): void {
|
||||||
this.conversionMap.set(type, (context: StaticSymbol, args: any[]) => {
|
this.conversionMap.set(type, (context: StaticSymbol, args: any[]) => {
|
||||||
let argValues = [];
|
let argValues: any[] = [];
|
||||||
ListWrapper.forEachWithIndex(args, (arg, index) => {
|
ListWrapper.forEachWithIndex(args, (arg, index) => {
|
||||||
let argValue;
|
let argValue: any;
|
||||||
if (isStringMap(arg) && isBlank(arg['__symbolic'])) {
|
if (isStringMap(arg) && isBlank(arg['__symbolic'])) {
|
||||||
argValue = mapStringMap(arg, (value, key) => this.simplify(context, value));
|
argValue = mapStringMap(arg, (value, key) => this.simplify(context, value));
|
||||||
} else {
|
} else {
|
||||||
@ -237,7 +237,7 @@ export class StaticReflector implements ReflectorReader {
|
|||||||
return expression;
|
return expression;
|
||||||
}
|
}
|
||||||
if (isArray(expression)) {
|
if (isArray(expression)) {
|
||||||
let result = [];
|
let result: any[] = [];
|
||||||
for (let item of(<any>expression)) {
|
for (let item of(<any>expression)) {
|
||||||
result.push(simplify(item));
|
result.push(simplify(item));
|
||||||
}
|
}
|
||||||
@ -245,7 +245,7 @@ export class StaticReflector implements ReflectorReader {
|
|||||||
}
|
}
|
||||||
if (isPresent(expression)) {
|
if (isPresent(expression)) {
|
||||||
if (isPresent(expression['__symbolic'])) {
|
if (isPresent(expression['__symbolic'])) {
|
||||||
let staticSymbol;
|
let staticSymbol: StaticSymbol;
|
||||||
switch (expression['__symbolic']) {
|
switch (expression['__symbolic']) {
|
||||||
case "binop":
|
case "binop":
|
||||||
let left = simplify(expression['left']);
|
let left = simplify(expression['left']);
|
||||||
@ -396,7 +396,7 @@ function isClassMetadata(expression: any): boolean {
|
|||||||
function mapStringMap(input: {[key: string]: any},
|
function mapStringMap(input: {[key: string]: any},
|
||||||
transform: (value: any, key: string) => any): {[key: string]: any} {
|
transform: (value: any, key: string) => any): {[key: string]: any} {
|
||||||
if (isBlank(input)) return {};
|
if (isBlank(input)) return {};
|
||||||
var result = {};
|
var result: {[key: string]: any} = {};
|
||||||
StringMapWrapper.keys(input).forEach((key) => { result[key] = transform(input[key], key); });
|
StringMapWrapper.keys(input).forEach((key) => { result[key] = transform(input[key], key); });
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -1,244 +1,235 @@
|
|||||||
|
/// <reference path="../../typings/jasmine/jasmine.d.ts" />
|
||||||
|
|
||||||
import {describe, it, iit, expect, ddescribe, beforeEach} from 'angular2/testing_internal';
|
import {describe, it, iit, expect, ddescribe, beforeEach} from 'angular2/testing_internal';
|
||||||
import {IS_DART, isBlank} from 'angular2/src/facade/lang';
|
import {isBlank} from 'angular2/src/facade/lang';
|
||||||
import {ListWrapper} from 'angular2/src/facade/collection';
|
import {ListWrapper} from 'angular2/src/facade/collection';
|
||||||
|
|
||||||
import {
|
import {StaticReflector, StaticReflectorHost, StaticSymbol} from './static_reflector';
|
||||||
StaticReflector,
|
|
||||||
StaticReflectorHost,
|
|
||||||
StaticSymbol
|
|
||||||
} from 'angular2/src/compiler/static_reflector';
|
|
||||||
|
|
||||||
export function main() {
|
describe('StaticReflector', () => {
|
||||||
// Static reflector is not supported in Dart
|
|
||||||
// as we use reflection to create objects.
|
|
||||||
if (IS_DART) return;
|
|
||||||
let noContext = new StaticSymbol('', '', '');
|
let noContext = new StaticSymbol('', '', '');
|
||||||
|
let host: StaticReflectorHost;
|
||||||
|
let reflector: StaticReflector;
|
||||||
|
|
||||||
describe('StaticReflector', () => {
|
beforeEach(() => {
|
||||||
let host: StaticReflectorHost;
|
host = new MockReflectorHost();
|
||||||
let reflector: StaticReflector;
|
reflector = new StaticReflector(host);
|
||||||
|
|
||||||
beforeEach(() => {
|
|
||||||
host = new MockReflectorHost();
|
|
||||||
reflector = new StaticReflector(host);
|
|
||||||
});
|
|
||||||
|
|
||||||
function simplify(context: StaticSymbol, value: any) {
|
|
||||||
return reflector.simplify(context, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
it('should get annotations for NgFor', () => {
|
|
||||||
let NgFor = host.findDeclaration('angular2/src/common/directives/ng_for', 'NgFor');
|
|
||||||
let annotations = reflector.annotations(NgFor);
|
|
||||||
expect(annotations.length).toEqual(1);
|
|
||||||
let annotation = annotations[0];
|
|
||||||
expect(annotation.selector).toEqual('[ngFor][ngForOf]');
|
|
||||||
expect(annotation.inputs).toEqual(['ngForTrackBy', 'ngForOf', 'ngForTemplate']);
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should get constructor for NgFor', () => {
|
|
||||||
let NgFor = host.findDeclaration('angular2/src/common/directives/ng_for', 'NgFor');
|
|
||||||
let ViewContainerRef =
|
|
||||||
host.findDeclaration('angular2/src/core/linker/view_container_ref', 'ViewContainerRef');
|
|
||||||
let TemplateRef =
|
|
||||||
host.findDeclaration('angular2/src/core/linker/template_ref', 'TemplateRef');
|
|
||||||
let IterableDiffers = host.findDeclaration(
|
|
||||||
'angular2/src/core/change_detection/differs/iterable_differs', 'IterableDiffers');
|
|
||||||
let ChangeDetectorRef = host.findDeclaration(
|
|
||||||
'angular2/src/core/change_detection/change_detector_ref', 'ChangeDetectorRef');
|
|
||||||
|
|
||||||
let parameters = reflector.parameters(NgFor);
|
|
||||||
expect(parameters)
|
|
||||||
.toEqual([[ViewContainerRef], [TemplateRef], [IterableDiffers], [ChangeDetectorRef]]);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should get annotations for HeroDetailComponent', () => {
|
|
||||||
let HeroDetailComponent =
|
|
||||||
host.findDeclaration('src/app/hero-detail.component', 'HeroDetailComponent');
|
|
||||||
let annotations = reflector.annotations(HeroDetailComponent);
|
|
||||||
expect(annotations.length).toEqual(1);
|
|
||||||
let annotation = annotations[0];
|
|
||||||
expect(annotation.selector).toEqual('my-hero-detail');
|
|
||||||
expect(annotation.directives)
|
|
||||||
.toEqual([[host.findDeclaration('angular2/src/common/directives/ng_for', 'NgFor')]]);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should get and empty annotation list for an unknown class', () => {
|
|
||||||
let UnknownClass = host.findDeclaration('src/app/app.component', 'UnknownClass');
|
|
||||||
let annotations = reflector.annotations(UnknownClass);
|
|
||||||
expect(annotations).toEqual([]);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should get propMetadata for HeroDetailComponent', () => {
|
|
||||||
let HeroDetailComponent =
|
|
||||||
host.findDeclaration('src/app/hero-detail.component', 'HeroDetailComponent');
|
|
||||||
let props = reflector.propMetadata(HeroDetailComponent);
|
|
||||||
expect(props['hero']).toBeTruthy();
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should get an empty object from propMetadata for an unknown class', () => {
|
|
||||||
let UnknownClass = host.findDeclaration('src/app/app.component', 'UnknownClass');
|
|
||||||
let properties = reflector.propMetadata(UnknownClass);
|
|
||||||
expect(properties).toEqual({});
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should get empty parameters list for an unknown class ', () => {
|
|
||||||
let UnknownClass = host.findDeclaration('src/app/app.component', 'UnknownClass');
|
|
||||||
let parameters = reflector.parameters(UnknownClass);
|
|
||||||
expect(parameters).toEqual([]);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should simplify primitive into itself', () => {
|
|
||||||
expect(simplify(noContext, 1)).toBe(1);
|
|
||||||
expect(simplify(noContext, true)).toBe(true);
|
|
||||||
expect(simplify(noContext, "some value")).toBe("some value");
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should simplify an array into a copy of the array',
|
|
||||||
() => { expect(simplify(noContext, [1, 2, 3])).toEqual([1, 2, 3]); });
|
|
||||||
|
|
||||||
it('should simplify an object to a copy of the object', () => {
|
|
||||||
let expr = {a: 1, b: 2, c: 3};
|
|
||||||
expect(simplify(noContext, expr)).toEqual(expr);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should simplify &&', () => {
|
|
||||||
expect(simplify(noContext, ({ __symbolic: 'binop', operator: '&&', left: true, right: true}))).toBe(true);
|
|
||||||
expect(simplify(noContext, ({ __symbolic: 'binop', operator: '&&', left: true, right: false}))).toBe(false);
|
|
||||||
expect(simplify(noContext, ({ __symbolic: 'binop', operator: '&&', left: false, right: true}))).toBe(false);
|
|
||||||
expect(simplify(noContext, ({ __symbolic: 'binop', operator: '&&', left: false, right: false}))).toBe(false);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should simplify ||', () => {
|
|
||||||
expect(simplify(noContext, ({ __symbolic: 'binop', operator: '||', left: true, right: true}))).toBe(true);
|
|
||||||
expect(simplify(noContext, ({ __symbolic: 'binop', operator: '||', left: true, right: false}))).toBe(true);
|
|
||||||
expect(simplify(noContext, ({ __symbolic: 'binop', operator: '||', left: false, right: true}))).toBe(true);
|
|
||||||
expect(simplify(noContext, ({ __symbolic: 'binop', operator: '||', left: false, right: false}))).toBe(false);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should simplify &', () => {
|
|
||||||
expect(simplify(noContext, ({ __symbolic: 'binop', operator: '&', left: 0x22, right: 0x0F}))).toBe(0x22 & 0x0F);
|
|
||||||
expect(simplify(noContext, ({ __symbolic: 'binop', operator: '&', left: 0x22, right: 0xF0}))).toBe(0x22 & 0xF0);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should simplify |', () => {
|
|
||||||
expect(simplify(noContext, ({ __symbolic: 'binop', operator: '|', left: 0x22, right: 0x0F}))).toBe(0x22 | 0x0F);
|
|
||||||
expect(simplify(noContext, ({ __symbolic: 'binop', operator: '|', left: 0x22, right: 0xF0}))).toBe(0x22 | 0xF0);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should simplify ^', () => {
|
|
||||||
expect(simplify(noContext, ({ __symbolic: 'binop', operator: '|', left: 0x22, right: 0x0F}))).toBe(0x22 | 0x0F);
|
|
||||||
expect(simplify(noContext, ({ __symbolic: 'binop', operator: '|', left: 0x22, right: 0xF0}))).toBe(0x22 | 0xF0);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should simplify ==', () => {
|
|
||||||
expect(simplify(noContext, ({ __symbolic: 'binop', operator: '==', left: 0x22, right: 0x22}))).toBe(0x22 == 0x22);
|
|
||||||
expect(simplify(noContext, ({ __symbolic: 'binop', operator: '==', left: 0x22, right: 0xF0}))).toBe(0x22 == 0xF0);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should simplify !=', () => {
|
|
||||||
expect(simplify(noContext, ({ __symbolic: 'binop', operator: '!=', left: 0x22, right: 0x22}))).toBe(0x22 != 0x22);
|
|
||||||
expect(simplify(noContext, ({ __symbolic: 'binop', operator: '!=', left: 0x22, right: 0xF0}))).toBe(0x22 != 0xF0);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should simplify ===', () => {
|
|
||||||
expect(simplify(noContext, ({ __symbolic: 'binop', operator: '===', left: 0x22, right: 0x22}))).toBe(0x22 === 0x22);
|
|
||||||
expect(simplify(noContext, ({ __symbolic: 'binop', operator: '===', left: 0x22, right: 0xF0}))).toBe(0x22 === 0xF0);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should simplify !==', () => {
|
|
||||||
expect(simplify(noContext, ({ __symbolic: 'binop', operator: '!==', left: 0x22, right: 0x22}))).toBe(0x22 !== 0x22);
|
|
||||||
expect(simplify(noContext, ({ __symbolic: 'binop', operator: '!==', left: 0x22, right: 0xF0}))).toBe(0x22 !== 0xF0);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should simplify >', () => {
|
|
||||||
expect(simplify(noContext, ({ __symbolic: 'binop', operator: '>', left: 1, right: 1}))).toBe(1 > 1);
|
|
||||||
expect(simplify(noContext, ({ __symbolic: 'binop', operator: '>', left: 1, right: 0}))).toBe(1 > 0);
|
|
||||||
expect(simplify(noContext, ({ __symbolic: 'binop', operator: '>', left: 0, right: 1}))).toBe(0 > 1);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should simplify >=', () => {
|
|
||||||
expect(simplify(noContext, ({ __symbolic: 'binop', operator: '>=', left: 1, right: 1}))).toBe(1 >= 1);
|
|
||||||
expect(simplify(noContext, ({ __symbolic: 'binop', operator: '>=', left: 1, right: 0}))).toBe(1 >= 0);
|
|
||||||
expect(simplify(noContext, ({ __symbolic: 'binop', operator: '>=', left: 0, right: 1}))).toBe(0 >= 1);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should simplify <=', () => {
|
|
||||||
expect(simplify(noContext, ({ __symbolic: 'binop', operator: '<=', left: 1, right: 1}))).toBe(1 <= 1);
|
|
||||||
expect(simplify(noContext, ({ __symbolic: 'binop', operator: '<=', left: 1, right: 0}))).toBe(1 <= 0);
|
|
||||||
expect(simplify(noContext, ({ __symbolic: 'binop', operator: '<=', left: 0, right: 1}))).toBe(0 <= 1);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should simplify <', () => {
|
|
||||||
expect(simplify(noContext, ({ __symbolic: 'binop', operator: '<', left: 1, right: 1}))).toBe(1 < 1);
|
|
||||||
expect(simplify(noContext, ({ __symbolic: 'binop', operator: '<', left: 1, right: 0}))).toBe(1 < 0);
|
|
||||||
expect(simplify(noContext, ({ __symbolic: 'binop', operator: '<', left: 0, right: 1}))).toBe(0 < 1);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should simplify <<', () => {
|
|
||||||
expect(simplify(noContext, ({ __symbolic: 'binop', operator: '<<', left: 0x55, right: 2}))).toBe(0x55 << 2);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should simplify >>', () => {
|
|
||||||
expect(simplify(noContext, ({ __symbolic: 'binop', operator: '>>', left: 0x55, right: 2}))).toBe(0x55 >> 2);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should simplify +', () => {
|
|
||||||
expect(simplify(noContext, ({ __symbolic: 'binop', operator: '+', left: 0x55, right: 2}))).toBe(0x55 + 2);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should simplify -', () => {
|
|
||||||
expect(simplify(noContext, ({ __symbolic: 'binop', operator: '-', left: 0x55, right: 2}))).toBe(0x55 - 2);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should simplify *', () => {
|
|
||||||
expect(simplify(noContext, ({ __symbolic: 'binop', operator: '*', left: 0x55, right: 2}))).toBe(0x55 * 2);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should simplify /', () => {
|
|
||||||
expect(simplify(noContext, ({ __symbolic: 'binop', operator: '/', left: 0x55, right: 2}))).toBe(0x55 / 2);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should simplify %', () => {
|
|
||||||
expect(simplify(noContext, ({ __symbolic: 'binop', operator: '%', left: 0x55, right: 2}))).toBe(0x55 % 2);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should simplify prefix -', () => {
|
|
||||||
expect(simplify(noContext, ({ __symbolic: 'pre', operator: '-', operand: 2}))).toBe(-2);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should simplify prefix ~', () => {
|
|
||||||
expect(simplify(noContext, ({ __symbolic: 'pre', operator: '~', operand: 2}))).toBe(~2);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should simplify prefix !', () => {
|
|
||||||
expect(simplify(noContext, ({ __symbolic: 'pre', operator: '!', operand: true}))).toBe(!true);
|
|
||||||
expect(simplify(noContext, ({ __symbolic: 'pre', operator: '!', operand: false}))).toBe(!false);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should simplify an array index', () => {
|
|
||||||
expect(simplify(noContext, ({__symbolic: "index", expression: [1, 2, 3], index: 2}))).toBe(3);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should simplify an object index', () => {
|
|
||||||
let expr = {__symbolic: "select", expression: {a: 1, b: 2, c: 3}, member: "b"};
|
|
||||||
expect(simplify(noContext, expr)).toBe(2);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should simplify a module reference', () => {
|
|
||||||
expect(simplify(new StaticSymbol('', '/src/cases', ''),
|
|
||||||
({__symbolic: "reference", module: "./extern", name: "s"})))
|
|
||||||
.toEqual("s");
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should simplify a non existing reference as a static symbol', () => {
|
|
||||||
expect(simplify(new StaticSymbol('', '/src/cases', ''),
|
|
||||||
({__symbolic: "reference", module: "./extern", name: "nonExisting"})))
|
|
||||||
.toEqual(host.getStaticSymbol('', '/src/extern.d.ts', 'nonExisting'));
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
}
|
|
||||||
|
function simplify(context: StaticSymbol, value: any) {
|
||||||
|
return reflector.simplify(context, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
it('should get annotations for NgFor', () => {
|
||||||
|
let NgFor = host.findDeclaration('angular2/src/common/directives/ng_for', 'NgFor');
|
||||||
|
let annotations = reflector.annotations(NgFor);
|
||||||
|
expect(annotations.length).toEqual(1);
|
||||||
|
let annotation = annotations[0];
|
||||||
|
expect(annotation.selector).toEqual('[ngFor][ngForOf]');
|
||||||
|
expect(annotation.inputs).toEqual(['ngForTrackBy', 'ngForOf', 'ngForTemplate']);
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should get constructor for NgFor', () => {
|
||||||
|
let NgFor = host.findDeclaration('angular2/src/common/directives/ng_for', 'NgFor');
|
||||||
|
let ViewContainerRef =
|
||||||
|
host.findDeclaration('angular2/src/core/linker/view_container_ref', 'ViewContainerRef');
|
||||||
|
let TemplateRef = host.findDeclaration('angular2/src/core/linker/template_ref', 'TemplateRef');
|
||||||
|
let IterableDiffers = host.findDeclaration(
|
||||||
|
'angular2/src/core/change_detection/differs/iterable_differs', 'IterableDiffers');
|
||||||
|
let ChangeDetectorRef = host.findDeclaration(
|
||||||
|
'angular2/src/core/change_detection/change_detector_ref', 'ChangeDetectorRef');
|
||||||
|
|
||||||
|
let parameters = reflector.parameters(NgFor);
|
||||||
|
expect(parameters)
|
||||||
|
.toEqual([[ViewContainerRef], [TemplateRef], [IterableDiffers], [ChangeDetectorRef]]);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should get annotations for HeroDetailComponent', () => {
|
||||||
|
let HeroDetailComponent =
|
||||||
|
host.findDeclaration('src/app/hero-detail.component', 'HeroDetailComponent');
|
||||||
|
let annotations = reflector.annotations(HeroDetailComponent);
|
||||||
|
expect(annotations.length).toEqual(1);
|
||||||
|
let annotation = annotations[0];
|
||||||
|
expect(annotation.selector).toEqual('my-hero-detail');
|
||||||
|
expect(annotation.directives)
|
||||||
|
.toEqual([[host.findDeclaration('angular2/src/common/directives/ng_for', 'NgFor')]]);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should get and empty annotation list for an unknown class', () => {
|
||||||
|
let UnknownClass = host.findDeclaration('src/app/app.component', 'UnknownClass');
|
||||||
|
let annotations = reflector.annotations(UnknownClass);
|
||||||
|
expect(annotations).toEqual([]);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should get propMetadata for HeroDetailComponent', () => {
|
||||||
|
let HeroDetailComponent =
|
||||||
|
host.findDeclaration('src/app/hero-detail.component', 'HeroDetailComponent');
|
||||||
|
let props = reflector.propMetadata(HeroDetailComponent);
|
||||||
|
expect(props['hero']).toBeTruthy();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should get an empty object from propMetadata for an unknown class', () => {
|
||||||
|
let UnknownClass = host.findDeclaration('src/app/app.component', 'UnknownClass');
|
||||||
|
let properties = reflector.propMetadata(UnknownClass);
|
||||||
|
expect(properties).toEqual({});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should get empty parameters list for an unknown class ', () => {
|
||||||
|
let UnknownClass = host.findDeclaration('src/app/app.component', 'UnknownClass');
|
||||||
|
let parameters = reflector.parameters(UnknownClass);
|
||||||
|
expect(parameters).toEqual([]);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should simplify primitive into itself', () => {
|
||||||
|
expect(simplify(noContext, 1)).toBe(1);
|
||||||
|
expect(simplify(noContext, true)).toBe(true);
|
||||||
|
expect(simplify(noContext, "some value")).toBe("some value");
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should simplify an array into a copy of the array',
|
||||||
|
() => { expect(simplify(noContext, [1, 2, 3])).toEqual([1, 2, 3]); });
|
||||||
|
|
||||||
|
it('should simplify an object to a copy of the object', () => {
|
||||||
|
let expr = {a: 1, b: 2, c: 3};
|
||||||
|
expect(simplify(noContext, expr)).toEqual(expr);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should simplify &&', () => {
|
||||||
|
expect(simplify(noContext, ({ __symbolic: 'binop', operator: '&&', left: true, right: true}))).toBe(true);
|
||||||
|
expect(simplify(noContext, ({ __symbolic: 'binop', operator: '&&', left: true, right: false}))).toBe(false);
|
||||||
|
expect(simplify(noContext, ({ __symbolic: 'binop', operator: '&&', left: false, right: true}))).toBe(false);
|
||||||
|
expect(simplify(noContext, ({ __symbolic: 'binop', operator: '&&', left: false, right: false}))).toBe(false);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should simplify ||', () => {
|
||||||
|
expect(simplify(noContext, ({ __symbolic: 'binop', operator: '||', left: true, right: true}))).toBe(true);
|
||||||
|
expect(simplify(noContext, ({ __symbolic: 'binop', operator: '||', left: true, right: false}))).toBe(true);
|
||||||
|
expect(simplify(noContext, ({ __symbolic: 'binop', operator: '||', left: false, right: true}))).toBe(true);
|
||||||
|
expect(simplify(noContext, ({ __symbolic: 'binop', operator: '||', left: false, right: false}))).toBe(false);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should simplify &', () => {
|
||||||
|
expect(simplify(noContext, ({ __symbolic: 'binop', operator: '&', left: 0x22, right: 0x0F}))).toBe(0x22 & 0x0F);
|
||||||
|
expect(simplify(noContext, ({ __symbolic: 'binop', operator: '&', left: 0x22, right: 0xF0}))).toBe(0x22 & 0xF0);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should simplify |', () => {
|
||||||
|
expect(simplify(noContext, ({ __symbolic: 'binop', operator: '|', left: 0x22, right: 0x0F}))).toBe(0x22 | 0x0F);
|
||||||
|
expect(simplify(noContext, ({ __symbolic: 'binop', operator: '|', left: 0x22, right: 0xF0}))).toBe(0x22 | 0xF0);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should simplify ^', () => {
|
||||||
|
expect(simplify(noContext, ({ __symbolic: 'binop', operator: '|', left: 0x22, right: 0x0F}))).toBe(0x22 | 0x0F);
|
||||||
|
expect(simplify(noContext, ({ __symbolic: 'binop', operator: '|', left: 0x22, right: 0xF0}))).toBe(0x22 | 0xF0);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should simplify ==', () => {
|
||||||
|
expect(simplify(noContext, ({ __symbolic: 'binop', operator: '==', left: 0x22, right: 0x22}))).toBe(0x22 == 0x22);
|
||||||
|
expect(simplify(noContext, ({ __symbolic: 'binop', operator: '==', left: 0x22, right: 0xF0}))).toBe(0x22 == 0xF0);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should simplify !=', () => {
|
||||||
|
expect(simplify(noContext, ({ __symbolic: 'binop', operator: '!=', left: 0x22, right: 0x22}))).toBe(0x22 != 0x22);
|
||||||
|
expect(simplify(noContext, ({ __symbolic: 'binop', operator: '!=', left: 0x22, right: 0xF0}))).toBe(0x22 != 0xF0);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should simplify ===', () => {
|
||||||
|
expect(simplify(noContext, ({ __symbolic: 'binop', operator: '===', left: 0x22, right: 0x22}))).toBe(0x22 === 0x22);
|
||||||
|
expect(simplify(noContext, ({ __symbolic: 'binop', operator: '===', left: 0x22, right: 0xF0}))).toBe(0x22 === 0xF0);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should simplify !==', () => {
|
||||||
|
expect(simplify(noContext, ({ __symbolic: 'binop', operator: '!==', left: 0x22, right: 0x22}))).toBe(0x22 !== 0x22);
|
||||||
|
expect(simplify(noContext, ({ __symbolic: 'binop', operator: '!==', left: 0x22, right: 0xF0}))).toBe(0x22 !== 0xF0);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should simplify >', () => {
|
||||||
|
expect(simplify(noContext, ({ __symbolic: 'binop', operator: '>', left: 1, right: 1}))).toBe(1 > 1);
|
||||||
|
expect(simplify(noContext, ({ __symbolic: 'binop', operator: '>', left: 1, right: 0}))).toBe(1 > 0);
|
||||||
|
expect(simplify(noContext, ({ __symbolic: 'binop', operator: '>', left: 0, right: 1}))).toBe(0 > 1);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should simplify >=', () => {
|
||||||
|
expect(simplify(noContext, ({ __symbolic: 'binop', operator: '>=', left: 1, right: 1}))).toBe(1 >= 1);
|
||||||
|
expect(simplify(noContext, ({ __symbolic: 'binop', operator: '>=', left: 1, right: 0}))).toBe(1 >= 0);
|
||||||
|
expect(simplify(noContext, ({ __symbolic: 'binop', operator: '>=', left: 0, right: 1}))).toBe(0 >= 1);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should simplify <=', () => {
|
||||||
|
expect(simplify(noContext, ({ __symbolic: 'binop', operator: '<=', left: 1, right: 1}))).toBe(1 <= 1);
|
||||||
|
expect(simplify(noContext, ({ __symbolic: 'binop', operator: '<=', left: 1, right: 0}))).toBe(1 <= 0);
|
||||||
|
expect(simplify(noContext, ({ __symbolic: 'binop', operator: '<=', left: 0, right: 1}))).toBe(0 <= 1);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should simplify <', () => {
|
||||||
|
expect(simplify(noContext, ({ __symbolic: 'binop', operator: '<', left: 1, right: 1}))).toBe(1 < 1);
|
||||||
|
expect(simplify(noContext, ({ __symbolic: 'binop', operator: '<', left: 1, right: 0}))).toBe(1 < 0);
|
||||||
|
expect(simplify(noContext, ({ __symbolic: 'binop', operator: '<', left: 0, right: 1}))).toBe(0 < 1);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should simplify <<', () => {
|
||||||
|
expect(simplify(noContext, ({ __symbolic: 'binop', operator: '<<', left: 0x55, right: 2}))).toBe(0x55 << 2);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should simplify >>', () => {
|
||||||
|
expect(simplify(noContext, ({ __symbolic: 'binop', operator: '>>', left: 0x55, right: 2}))).toBe(0x55 >> 2);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should simplify +', () => {
|
||||||
|
expect(simplify(noContext, ({ __symbolic: 'binop', operator: '+', left: 0x55, right: 2}))).toBe(0x55 + 2);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should simplify -', () => {
|
||||||
|
expect(simplify(noContext, ({ __symbolic: 'binop', operator: '-', left: 0x55, right: 2}))).toBe(0x55 - 2);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should simplify *', () => {
|
||||||
|
expect(simplify(noContext, ({ __symbolic: 'binop', operator: '*', left: 0x55, right: 2}))).toBe(0x55 * 2);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should simplify /', () => {
|
||||||
|
expect(simplify(noContext, ({ __symbolic: 'binop', operator: '/', left: 0x55, right: 2}))).toBe(0x55 / 2);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should simplify %', () => {
|
||||||
|
expect(simplify(noContext, ({ __symbolic: 'binop', operator: '%', left: 0x55, right: 2}))).toBe(0x55 % 2);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should simplify prefix -', () => {
|
||||||
|
expect(simplify(noContext, ({ __symbolic: 'pre', operator: '-', operand: 2}))).toBe(-2);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should simplify prefix ~', () => {
|
||||||
|
expect(simplify(noContext, ({ __symbolic: 'pre', operator: '~', operand: 2}))).toBe(~2);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should simplify prefix !', () => {
|
||||||
|
expect(simplify(noContext, ({ __symbolic: 'pre', operator: '!', operand: true}))).toBe(!true);
|
||||||
|
expect(simplify(noContext, ({ __symbolic: 'pre', operator: '!', operand: false}))).toBe(!false);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should simplify an array index', () => {
|
||||||
|
expect(simplify(noContext, ({__symbolic: "index", expression: [1, 2, 3], index: 2}))).toBe(3);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should simplify an object index', () => {
|
||||||
|
let expr = {__symbolic: "select", expression: {a: 1, b: 2, c: 3}, member: "b"};
|
||||||
|
expect(simplify(noContext, expr)).toBe(2);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should simplify a module reference', () => {
|
||||||
|
expect(simplify(new StaticSymbol('', '/src/cases', ''),
|
||||||
|
({__symbolic: "reference", module: "./extern", name: "s"})))
|
||||||
|
.toEqual("s");
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should simplify a non existing reference as a static symbol', () => {
|
||||||
|
expect(simplify(new StaticSymbol('', '/src/cases', ''),
|
||||||
|
({__symbolic: "reference", module: "./extern", name: "nonExisting"})))
|
||||||
|
.toEqual(host.getStaticSymbol('', '/src/extern.d.ts', 'nonExisting'));
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
class MockReflectorHost implements StaticReflectorHost {
|
class MockReflectorHost implements StaticReflectorHost {
|
||||||
private staticTypeCache = new Map<string, StaticSymbol>();
|
private staticTypeCache = new Map<string, StaticSymbol>();
|
||||||
@ -258,7 +249,7 @@ class MockReflectorHost implements StaticReflectorHost {
|
|||||||
function splitPath(path: string): string[] { return path.split(/\/|\\/g); }
|
function splitPath(path: string): string[] { return path.split(/\/|\\/g); }
|
||||||
|
|
||||||
function resolvePath(pathParts: string[]): string {
|
function resolvePath(pathParts: string[]): string {
|
||||||
let result = [];
|
let result: string[] = [];
|
||||||
ListWrapper.forEachWithIndex(pathParts, (part, index) => {
|
ListWrapper.forEachWithIndex(pathParts, (part, index) => {
|
||||||
switch (part) {
|
switch (part) {
|
||||||
case '':
|
case '':
|
||||||
@ -293,149 +284,131 @@ class MockReflectorHost implements StaticReflectorHost {
|
|||||||
}
|
}
|
||||||
|
|
||||||
getMetadataFor(moduleId: string): any {
|
getMetadataFor(moduleId: string): any {
|
||||||
return {
|
let data: {[key: string]: any} = {
|
||||||
'/tmp/angular2/src/common/forms/directives.d.ts':
|
'/tmp/angular2/src/common/forms/directives.d.ts': {
|
||||||
{
|
"__symbolic": "module",
|
||||||
"__symbolic": "module",
|
"metadata": {
|
||||||
"metadata": {
|
"FORM_DIRECTIVES": [
|
||||||
"FORM_DIRECTIVES": [
|
{
|
||||||
{
|
"__symbolic": "reference",
|
||||||
|
"name": "NgFor",
|
||||||
|
"module": "angular2/src/common/directives/ng_for"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
'/tmp/angular2/src/common/directives/ng_for.d.ts': {
|
||||||
|
"__symbolic": "module",
|
||||||
|
"metadata": {
|
||||||
|
"NgFor": {
|
||||||
|
"__symbolic": "class",
|
||||||
|
"decorators": [
|
||||||
|
{
|
||||||
|
"__symbolic": "call",
|
||||||
|
"expression": {
|
||||||
"__symbolic": "reference",
|
"__symbolic": "reference",
|
||||||
"name": "NgFor",
|
"name": "Directive",
|
||||||
"module": "angular2/src/common/directives/ng_for"
|
"module": "../../core/metadata"
|
||||||
|
},
|
||||||
|
"arguments": [
|
||||||
|
{
|
||||||
|
"selector": "[ngFor][ngForOf]",
|
||||||
|
"inputs": ["ngForTrackBy", "ngForOf", "ngForTemplate"]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"members": {
|
||||||
|
"__ctor__": [
|
||||||
|
{
|
||||||
|
"__symbolic": "constructor",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"__symbolic": "reference",
|
||||||
|
"module": "../../core/linker/view_container_ref",
|
||||||
|
"name": "ViewContainerRef"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__symbolic": "reference",
|
||||||
|
"module": "../../core/linker/template_ref",
|
||||||
|
"name": "TemplateRef"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__symbolic": "reference",
|
||||||
|
"module": "../../core/change_detection/differs/iterable_differs",
|
||||||
|
"name": "IterableDiffers"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__symbolic": "reference",
|
||||||
|
"module": "../../core/change_detection/change_detector_ref",
|
||||||
|
"name": "ChangeDetectorRef"
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
'/tmp/angular2/src/common/directives/ng_for.d.ts':
|
}
|
||||||
|
},
|
||||||
|
'/tmp/angular2/src/core/linker/view_container_ref.d.ts':
|
||||||
|
{"metadata": {"ViewContainerRef": {"__symbolic": "class"}}},
|
||||||
|
'/tmp/angular2/src/core/linker/template_ref.d.ts':
|
||||||
|
{"module": "./template_ref", "metadata": {"TemplateRef": {"__symbolic": "class"}}},
|
||||||
|
'/tmp/angular2/src/core/change_detection/differs/iterable_differs.d.ts':
|
||||||
|
{"metadata": {"IterableDiffers": {"__symbolic": "class"}}},
|
||||||
|
'/tmp/angular2/src/core/change_detection/change_detector_ref.d.ts':
|
||||||
|
{"metadata": {"ChangeDetectorRef": {"__symbolic": "class"}}},
|
||||||
|
'/tmp/src/app/hero-detail.component.d.ts': {
|
||||||
|
"__symbolic": "module",
|
||||||
|
"metadata": {
|
||||||
|
"HeroDetailComponent": {
|
||||||
|
"__symbolic": "class",
|
||||||
|
"decorators": [
|
||||||
{
|
{
|
||||||
"__symbolic": "module",
|
"__symbolic": "call",
|
||||||
"metadata":
|
"expression": {
|
||||||
|
"__symbolic": "reference",
|
||||||
|
"name": "Component",
|
||||||
|
"module": "angular2/src/core/metadata"
|
||||||
|
},
|
||||||
|
"arguments": [
|
||||||
|
{
|
||||||
|
"selector": "my-hero-detail",
|
||||||
|
"template":
|
||||||
|
"\n <div *ngIf=\"hero\">\n <h2>{{hero.name}} details!</h2>\n <div><label>id: </label>{{hero.id}}</div>\n <div>\n <label>name: </label>\n <input [(ngModel)]=\"hero.name\" placeholder=\"name\"/>\n </div>\n </div>\n",
|
||||||
|
"directives": [
|
||||||
|
{
|
||||||
|
"__symbolic": "reference",
|
||||||
|
"name": "FORM_DIRECTIVES",
|
||||||
|
"module": "angular2/src/common/forms/directives"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"members": {
|
||||||
|
"hero": [
|
||||||
|
{
|
||||||
|
"__symbolic": "property",
|
||||||
|
"decorators": [
|
||||||
{
|
{
|
||||||
"NgFor":
|
"__symbolic": "call",
|
||||||
{
|
"expression": {
|
||||||
"__symbolic": "class",
|
"__symbolic": "reference",
|
||||||
"decorators":
|
"name": "Input",
|
||||||
[
|
"module": "angular2/src/core/metadata"
|
||||||
{
|
}
|
||||||
"__symbolic": "call",
|
|
||||||
"expression": {
|
|
||||||
"__symbolic": "reference",
|
|
||||||
"name": "Directive",
|
|
||||||
"module": "../../core/metadata"
|
|
||||||
},
|
|
||||||
"arguments": [
|
|
||||||
{
|
|
||||||
"selector": "[ngFor][ngForOf]",
|
|
||||||
"inputs": ["ngForTrackBy", "ngForOf", "ngForTemplate"]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"members":
|
|
||||||
{
|
|
||||||
"__ctor__": [
|
|
||||||
{
|
|
||||||
"__symbolic": "constructor",
|
|
||||||
"parameters":
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"__symbolic": "reference",
|
|
||||||
"module": "../../core/linker/view_container_ref",
|
|
||||||
"name": "ViewContainerRef"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"__symbolic": "reference",
|
|
||||||
"module": "../../core/linker/template_ref",
|
|
||||||
"name": "TemplateRef"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"__symbolic": "reference",
|
|
||||||
"module":
|
|
||||||
"../../core/change_detection/differs/iterable_differs",
|
|
||||||
"name": "IterableDiffers"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"__symbolic": "reference",
|
|
||||||
"module":
|
|
||||||
"../../core/change_detection/change_detector_ref",
|
|
||||||
"name": "ChangeDetectorRef"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
]
|
||||||
'/tmp/angular2/src/core/linker/view_container_ref.d.ts':
|
}
|
||||||
{"metadata": {"ViewContainerRef": {"__symbolic": "class"}}},
|
]
|
||||||
'/tmp/angular2/src/core/linker/template_ref.d.ts':
|
}
|
||||||
{"module": "./template_ref", "metadata": {"TemplateRef": {"__symbolic": "class"}}},
|
}
|
||||||
'/tmp/angular2/src/core/change_detection/differs/iterable_differs.d.ts':
|
}
|
||||||
{"metadata": {"IterableDiffers": {"__symbolic": "class"}}},
|
},
|
||||||
'/tmp/angular2/src/core/change_detection/change_detector_ref.d.ts':
|
'/src/extern.d.ts': {"__symbolic": "module", metadata: {s: "s"}}
|
||||||
{"metadata": {"ChangeDetectorRef": {"__symbolic": "class"}}},
|
};
|
||||||
'/tmp/src/app/hero-detail.component.d.ts':
|
return data[moduleId];
|
||||||
{
|
|
||||||
"__symbolic": "module",
|
|
||||||
"metadata":
|
|
||||||
{
|
|
||||||
"HeroDetailComponent":
|
|
||||||
{
|
|
||||||
"__symbolic": "class",
|
|
||||||
"decorators":
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"__symbolic": "call",
|
|
||||||
"expression": {
|
|
||||||
"__symbolic": "reference",
|
|
||||||
"name": "Component",
|
|
||||||
"module": "angular2/src/core/metadata"
|
|
||||||
},
|
|
||||||
"arguments": [
|
|
||||||
{
|
|
||||||
"selector": "my-hero-detail",
|
|
||||||
"template": "\n <div *ngIf=\"hero\">\n <h2>{{hero.name}} details!</h2>\n <div><label>id: </label>{{hero.id}}</div>\n <div>\n <label>name: </label>\n <input [(ngModel)]=\"hero.name\" placeholder=\"name\"/>\n </div>\n </div>\n",
|
|
||||||
"directives":
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"__symbolic": "reference",
|
|
||||||
"name": "FORM_DIRECTIVES",
|
|
||||||
"module": "angular2/src/common/forms/directives"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"members":
|
|
||||||
{
|
|
||||||
"hero": [
|
|
||||||
{
|
|
||||||
"__symbolic": "property",
|
|
||||||
"decorators":
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"__symbolic": "call",
|
|
||||||
"expression":
|
|
||||||
{
|
|
||||||
"__symbolic": "reference",
|
|
||||||
"name": "Input",
|
|
||||||
"module": "angular2/src/core/metadata"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
'/src/extern.d.ts': {
|
|
||||||
"__symbolic": "module", metadata: { s: "s" }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
[moduleId];
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user