it('should detect () syntax', () => {
   var results = process(el('<div (click)="b()"></div>'));
   expect(MapWrapper.get(results[0].eventBindings, 'click').source).toEqual('b()');
   // "(click[])" is not an expected syntax and is only used to validate the regexp
   results = process(el('<div (click[])="b()"></div>'));
   expect(MapWrapper.get(results[0].eventBindings, 'click[]').source).toEqual('b()');
 });
    it('should return different styles given different components', () => {
      var styleElement = el('<style>.foo {} :host {}</style>');
      strategy.processStyleElement('someComponent1', 'http://base', styleElement);

      var styleElement2 = el('<style>.foo {} :host {}</style>');
      strategy.processStyleElement('someComponent2', 'http://base', styleElement2);

      expect(DOM.getText(styleElement)).not.toEqual(DOM.getText(styleElement2));
    });
    it('should return the same style given the same component', () => {
      var styleElement = el('<style>.foo {} :host {}</style>');
      strategy.processStyleElement('someComponent', 'http://base', styleElement);

      var styleElement2 = el('<style>.foo {} :host {}</style>');
      strategy.processStyleElement('someComponent', 'http://base', styleElement2);

      expect(DOM.getText(styleElement)).toEqual(DOM.getText(styleElement2));
    });
    it('should attach the view nodes as child of the host element', () => {
      var host = el('<div><span>original content</span></div>');
      var originalChild = DOM.childNodes(host)[0];
      var nodes = el('<div>view</div>');
      var view = new DomView(null, [nodes], [], [], []);

      strategy.attachTemplate(host, view);
      expect(DOM.childNodes(host)[0]).toBe(originalChild);
      expect(DOM.childNodes(host)[1]).toBe(nodes);
    });
Example #5
0
 function createView() {
   var proto = new RenderProtoView({element: el('<div></div>'), isRootView: false, elementBinders: []});
   var rootNodes = [el('<div></div>')];
   var boundTextNodes = [];
   var boundElements = [el('<div></div>')];
   var viewContainers = [];
   var contentTags = [];
   var eventManager = null;
   return new RenderView(proto, rootNodes,
     boundTextNodes, boundElements, viewContainers, contentTags, eventManager);
 }
    it('should insert the same style only once in the style host', () => {
      var styleEls = [
        el('<style>/*css1*/</style>'),
        el('<style>/*css2*/</style>'),
        el('<style>/*css1*/</style>')
      ];
      ListWrapper.forEach(styleEls, (styleEl) => {
        strategy.processStyleElement('someComponent', 'http://base', styleEl);
      });

      expect(styleHost).toHaveText("/*css1*//*css2*/");
    });
 it('should rewrite style urls', () => {
   var styleElement = el('<style>.foo {background-image: url("img.jpg");}</style>');
   strategy.processStyleElement('someComponent', 'http://base', styleElement);
   expect(styleElement).toHaveText(".foo {" +
     "background-image: url('http://base/img.jpg');" +
     "}");
 });
 beforeEach(() => {
   var urlResolver = new UrlResolver();
   var styleUrlResolver = new StyleUrlResolver(urlResolver);
   styleHost = el('<div></div>');
   strategy = new EmulatedUnscopedShadowDomStrategy(styleUrlResolver, styleHost);
   resetShadowDomCache();
 });
 it('should store working property setters', () => {
   var element = el('<input bind-value="1">');
   var results = process(element);
   var setter = MapWrapper.get(results[0].propertySetters, 'value');
   setter(element, 'abc');
   expect(element.value).toEqual('abc');
 });
    it('should move the style element to the style host', () => {
      var compileElement = el('<div><style>.one {}</style></div>');
      var styleElement = DOM.firstChild(compileElement);
      strategy.processStyleElement('someComponent', 'http://base', styleElement);

      expect(compileElement).toHaveText('');
      expect(styleHost).toHaveText('.one {}');
    });
Example #11
0
 it('should bind directive properties from attribute values', () => {
   var results = process(
     el('<div some-decor-props el-prop="someValue"></div>')
   );
   var directiveBinding = results[0].directives[0];
   var simpleProp = MapWrapper.get(directiveBinding.propertyBindings, 'dirProp');
   expect(simpleProp.source).toEqual('someValue');
 });
Example #12
0
 it('should bind directive events', () => {
   var results = process(
     el('<div some-decor-events></div>')
   );
   var directiveBinding = results[0].directives[0];
   expect(MapWrapper.get(directiveBinding.eventBindings, 'click').source)
     .toEqual('doIt()');
 });
Example #13
0
 it('should store working property setters', () => {
   var element = el('<input some-decor-props>');
   var results = process(element);
   var directiveBinding = results[0].directives[0];
   var setter = MapWrapper.get(directiveBinding.propertySetters, 'value');
   setter(element, 'abc');
   expect(element.value).toEqual('abc');
 });
Example #14
0
    it('should select by attr name only once if the value is from the DOM', () => {
      matcher.addSelectables(s1 = CssSelector.parse('[some-decor]'), 1);

      var elementSelector = new CssSelector();
      var element = el('<div attr></div>');
      var empty = DOM.getAttribute(element, 'attr');
      elementSelector.addAttribute('some-decor', empty);
      matcher.match(elementSelector, selectableCollector);
      expect(matched).toEqual([s1[0],1]);
    });
Example #15
0
 it('should bind directive properties from bound properties', () => {
   var results = process(
     el('<div some-decor-props></div>'),
     {
       'elProp': parser.parseBinding('someExpr', '')
     }
   );
   var directiveBinding = results[0].directives[0];
   expect(MapWrapper.get(directiveBinding.propertyBindings, 'dirProp').source)
     .toEqual('someExpr');
 });
    it('should inline @import rules', inject([AsyncTestCompleter], (async) => {
      xhr.reply('http://base/one.css', '.one {}');

      var styleElement = el('<style>@import "one.css";</style>');
      var stylePromise = strategy.processStyleElement('someComponent', 'http://base', styleElement);
      expect(stylePromise).toBePromise();
      expect(styleElement).toHaveText('');

      stylePromise.then((_) => {
        expect(styleElement).toHaveText('.one[_ngcontent-0] {\n\n}');
        async.done();
      });
    }));
Example #17
0
 it('should bind directive properties with pipes', () => {
   var results = process(
     el('<div some-decor-props></div>'),
     {
       'elProp': parser.parseBinding('someExpr', '')
     }
   );
   var directiveBinding = results[0].directives[0];
   var pipedProp = MapWrapper.get(directiveBinding.propertyBindings, 'doubleProp');
   var simpleProp = MapWrapper.get(directiveBinding.propertyBindings, 'dirProp');
   expect(pipedProp.ast.name).toEqual('double');
   expect(pipedProp.ast.exp).toEqual(simpleProp.ast);
   expect(simpleProp.source).toEqual('someExpr');
 });
 it('should parse event handlers using on- syntax as actions', () => {
   var results = process(el('<div on-click="foo=bar"></div>'));
   expect(MapWrapper.get(results[0].eventBindings, 'click').source).toEqual('foo=bar');
 });
 it('should detect variable bindings only if an attribute name starts with #', () => {
   var results = process(el('<p b#george></p>'));
   expect(results[0]).toEqual(null);
 });
 it('should store a variable binding with an implicit value using shorthand syntax', () => {
   var results = process(el('<p #george></p>'));
   expect(MapWrapper.get(results[0].variableBindings, '\$implicit')).toEqual('george');
 });
 it('should store variable binding for a non-template element using shorthand syntax', () => {
   var results = process(el('<p #george="washington"></p>'));
   expect(MapWrapper.get(results[0].variableBindings, 'washington')).toEqual('george');
 });
 it('should store variable binding for a non-template element using shorthand syntax on the nestedProtoView', () => {
   var results = process(el('<template #george="washington"></template>'), true);
   expect(results[0].variableBindings).toEqual(EMPTY_MAP);
   expect(MapWrapper.get(results[0].nestedProtoView.variableBindings, 'washington')).toEqual('george');
 });
 it('should detect var- syntax', () => {
   var results = process(el('<template var-a="b"></template>'));
   expect(MapWrapper.get(results[0].variableBindings, 'b')).toEqual('a');
 });
 it('should detect interpolation syntax', () => {
   var results = process(el('<div a="{{b}}"></div>'));
   expect(MapWrapper.get(results[0].propertyBindings, 'a').source).toEqual('{{b}}');
 });
 it('should detect bind- syntax only if an attribute name starts with bind', () => {
   expect(process(el('<div _bind-a="b"></div>'))[0]).toEqual(null);
 });
 it('should detect bind- syntax', () => {
   var results = process(el('<div bind-a="b"></div>'));
   expect(MapWrapper.get(results[0].propertyBindings, 'a').source).toEqual('b');
 });
 it('should detect [] syntax only if an attribute name starts and ends with []', () => {
   expect(process(el('<div z[a]="b"></div>'))[0]).toBe(null);
   expect(process(el('<div [a]v="b"></div>'))[0]).toBe(null);
 });
 new MockStep((parent, current, control) => {
   if (hasNestedProtoView) {
     current.bindElement().bindNestedProtoView(el('<template></template>'));
   }
 }),
 it('should store property setters as camel case', () => {
   var element = el('<div bind-some-prop="1">');
   var results = process(element);
   expect(MapWrapper.get(results[0].propertySetters, 'someProp')).toBeTruthy();
 });
 it('should store variables as temporal attributes', () => {
   var results = createPipeline().process(el('<div var-a="b" #c="d"></div>'));
   expect(MapWrapper.get(results[0].attrs(), 'a')).toEqual('b');
   expect(MapWrapper.get(results[0].attrs(), 'c')).toEqual('d');
 });