2016-04-28 17:50:03 -07:00
import { describe , it , expect , beforeEach , ddescribe , iit , xit } from '@angular/core/testing' ;
import { getDOM } from '@angular/platform-browser/src/dom/dom_adapter' ;
import { SelectorMatcher } from '@angular/compiler/src/selector' ;
import { CssSelector } from '@angular/compiler/src/selector' ;
import { el } from '@angular/platform-browser/testing' ;
2014-10-28 14:46:55 -07:00
export function main() {
describe ( 'SelectorMatcher' , () => {
2016-06-08 15:45:15 -07:00
var matcher : any /** TODO #9100 */ , selectableCollector : any /** TODO #9100 */ , s1 : any /** TODO #9100 */ , s2 : any /** TODO #9100 */ , s3 : any /** TODO #9100 */ , s4 : any /** TODO #9100 */ ;
2015-06-17 11:17:21 -07:00
var matched : any [];
2014-10-28 14:46:55 -07:00
2015-06-17 11:17:21 -07:00
function reset() { matched = []; }
2014-10-28 14:46:55 -07:00
beforeEach (() => {
reset ();
2015-02-06 15:41:02 -08:00
s1 = s2 = s3 = s4 = null ;
2016-06-08 15:45:15 -07:00
selectableCollector = ( selector : any /** TODO #9100 */ , context : any /** TODO #9100 */ ) => {
2015-06-17 11:17:21 -07:00
matched . push ( selector );
matched . push ( context );
2015-05-26 09:25:39 -07:00
};
2014-10-28 14:46:55 -07:00
matcher = new SelectorMatcher ();
});
2015-11-23 16:02:19 -08:00
it ( 'should select by element name case sensitive' , () => {
2015-03-19 17:01:42 +01:00
matcher . addSelectables ( s1 = CssSelector . parse ( 'someTag' ), 1 );
2014-10-28 14:46:55 -07:00
2015-05-26 09:25:39 -07:00
expect ( matcher . match ( CssSelector . parse ( 'SOMEOTHERTAG' )[ 0 ], selectableCollector ))
. toEqual ( false );
2014-10-28 14:46:55 -07:00
expect ( matched ). toEqual ([]);
2015-11-23 16:02:19 -08:00
expect ( matcher . match ( CssSelector . parse ( 'SOMETAG' )[ 0 ], selectableCollector )). toEqual ( false );
expect ( matched ). toEqual ([]);
expect ( matcher . match ( CssSelector . parse ( 'someTag' )[ 0 ], selectableCollector )). toEqual ( true );
2015-05-26 09:25:39 -07:00
expect ( matched ). toEqual ([ s1 [ 0 ], 1 ]);
2014-10-28 14:46:55 -07:00
});
it ( 'should select by class name case insensitive' , () => {
2015-03-19 17:01:42 +01:00
matcher . addSelectables ( s1 = CssSelector . parse ( '.someClass' ), 1 );
matcher . addSelectables ( s2 = CssSelector . parse ( '.someClass.class2' ), 2 );
2014-10-28 14:46:55 -07:00
2015-05-26 09:25:39 -07:00
expect ( matcher . match ( CssSelector . parse ( '.SOMEOTHERCLASS' )[ 0 ], selectableCollector ))
. toEqual ( false );
2014-10-28 14:46:55 -07:00
expect ( matched ). toEqual ([]);
2015-03-19 17:01:42 +01:00
expect ( matcher . match ( CssSelector . parse ( '.SOMECLASS' )[ 0 ], selectableCollector )). toEqual ( true );
2015-05-26 09:25:39 -07:00
expect ( matched ). toEqual ([ s1 [ 0 ], 1 ]);
2014-10-28 14:46:55 -07:00
reset ();
2015-05-26 09:25:39 -07:00
expect ( matcher . match ( CssSelector . parse ( '.someClass.class2' )[ 0 ], selectableCollector ))
. toEqual ( true );
expect ( matched ). toEqual ([ s1 [ 0 ], 1 , s2 [ 0 ], 2 ]);
2014-10-28 14:46:55 -07:00
});
2015-11-23 16:02:19 -08:00
it ( 'should select by attr name case sensitive independent of the value' , () => {
2015-03-19 17:01:42 +01:00
matcher . addSelectables ( s1 = CssSelector . parse ( '[someAttr]' ), 1 );
matcher . addSelectables ( s2 = CssSelector . parse ( '[someAttr][someAttr2]' ), 2 );
2014-10-28 14:46:55 -07:00
2015-05-26 09:25:39 -07:00
expect ( matcher . match ( CssSelector . parse ( '[SOMEOTHERATTR]' )[ 0 ], selectableCollector ))
. toEqual ( false );
2014-10-28 14:46:55 -07:00
expect ( matched ). toEqual ([]);
2015-11-23 16:02:19 -08:00
expect ( matcher . match ( CssSelector . parse ( '[SOMEATTR]' )[ 0 ], selectableCollector )). toEqual ( false );
expect ( matched ). toEqual ([]);
2014-10-28 14:46:55 -07:00
2015-05-26 09:25:39 -07:00
expect ( matcher . match ( CssSelector . parse ( '[SOMEATTR=someValue]' )[ 0 ], selectableCollector ))
2015-11-23 16:02:19 -08:00
. toEqual ( false );
expect ( matched ). toEqual ([]);
2014-11-11 17:33:47 -08:00
2015-05-26 09:25:39 -07:00
expect ( matcher . match ( CssSelector . parse ( '[someAttr][someAttr2]' )[ 0 ], selectableCollector ))
. toEqual ( true );
expect ( matched ). toEqual ([ s1 [ 0 ], 1 , s2 [ 0 ], 2 ]);
2015-06-11 11:35:02 -07:00
reset ();
2016-04-12 09:40:37 -07:00
expect ( matcher . match ( CssSelector . parse ( '[someAttr=someValue][someAttr2]' )[ 0 ],
selectableCollector ))
2015-06-11 11:35:02 -07:00
. toEqual ( true );
expect ( matched ). toEqual ([ s1 [ 0 ], 1 , s2 [ 0 ], 2 ]);
reset ();
2016-04-12 09:40:37 -07:00
expect ( matcher . match ( CssSelector . parse ( '[someAttr2][someAttr=someValue]' )[ 0 ],
selectableCollector ))
2015-06-11 11:35:02 -07:00
. toEqual ( true );
expect ( matched ). toEqual ([ s1 [ 0 ], 1 , s2 [ 0 ], 2 ]);
reset ();
2016-04-12 09:40:37 -07:00
expect ( matcher . match ( CssSelector . parse ( '[someAttr2=someValue][someAttr]' )[ 0 ],
selectableCollector ))
2015-06-11 11:35:02 -07:00
. toEqual ( true );
expect ( matched ). toEqual ([ s1 [ 0 ], 1 , s2 [ 0 ], 2 ]);
2014-10-28 14:46:55 -07:00
});
2014-11-11 17:33:47 -08:00
it ( 'should select by attr name only once if the value is from the DOM' , () => {
2015-03-19 17:01:42 +01:00
matcher . addSelectables ( s1 = CssSelector . parse ( '[some-decor]' ), 1 );
2014-11-11 17:33:47 -08:00
var elementSelector = new CssSelector ();
2015-01-08 09:11:33 -08:00
var element = el ( '<div attr></div>' );
2016-04-28 17:50:03 -07:00
var empty = getDOM (). getAttribute ( element , 'attr' );
2014-11-11 17:33:47 -08:00
elementSelector . addAttribute ( 'some-decor' , empty );
matcher . match ( elementSelector , selectableCollector );
2015-05-26 09:25:39 -07:00
expect ( matched ). toEqual ([ s1 [ 0 ], 1 ]);
2014-11-11 17:33:47 -08:00
});
2015-11-23 16:02:19 -08:00
it ( 'should select by attr name case sensitive and value case insensitive' , () => {
2015-03-19 17:01:42 +01:00
matcher . addSelectables ( s1 = CssSelector . parse ( '[someAttr=someValue]' ), 1 );
2014-10-28 14:46:55 -07:00
2015-05-26 09:25:39 -07:00
expect ( matcher . match ( CssSelector . parse ( '[SOMEATTR=SOMEOTHERATTR]' )[ 0 ], selectableCollector ))
. toEqual ( false );
2014-10-28 14:46:55 -07:00
expect ( matched ). toEqual ([]);
2015-05-26 09:25:39 -07:00
expect ( matcher . match ( CssSelector . parse ( '[SOMEATTR=SOMEVALUE]' )[ 0 ], selectableCollector ))
2015-11-23 16:02:19 -08:00
. toEqual ( false );
expect ( matched ). toEqual ([]);
expect ( matcher . match ( CssSelector . parse ( '[someAttr=SOMEVALUE]' )[ 0 ], selectableCollector ))
2015-05-26 09:25:39 -07:00
. toEqual ( true );
expect ( matched ). toEqual ([ s1 [ 0 ], 1 ]);
2014-10-28 14:46:55 -07:00
});
it ( 'should select by element name, class name and attribute name with value' , () => {
2015-03-19 17:01:42 +01:00
matcher . addSelectables ( s1 = CssSelector . parse ( 'someTag.someClass[someAttr=someValue]' ), 1 );
2014-10-28 14:46:55 -07:00
2016-04-12 09:40:37 -07:00
expect ( matcher . match ( CssSelector . parse ( 'someOtherTag.someOtherClass[someOtherAttr]' )[ 0 ],
selectableCollector ))
2015-05-26 09:25:39 -07:00
. toEqual ( false );
2014-10-28 14:46:55 -07:00
expect ( matched ). toEqual ([]);
2016-04-12 09:40:37 -07:00
expect ( matcher . match ( CssSelector . parse ( 'someTag.someOtherClass[someOtherAttr]' )[ 0 ],
selectableCollector ))
2015-05-26 09:25:39 -07:00
. toEqual ( false );
2014-10-28 14:46:55 -07:00
expect ( matched ). toEqual ([]);
2016-04-12 09:40:37 -07:00
expect ( matcher . match ( CssSelector . parse ( 'someTag.someClass[someOtherAttr]' )[ 0 ],
selectableCollector ))
2015-05-26 09:25:39 -07:00
. toEqual ( false );
2014-10-28 14:46:55 -07:00
expect ( matched ). toEqual ([]);
2015-05-26 09:25:39 -07:00
expect (
matcher . match ( CssSelector . parse ( 'someTag.someClass[someAttr]' )[ 0 ], selectableCollector ))
. toEqual ( false );
2014-10-28 14:46:55 -07:00
expect ( matched ). toEqual ([]);
2016-04-12 09:40:37 -07:00
expect ( matcher . match ( CssSelector . parse ( 'someTag.someClass[someAttr=someValue]' )[ 0 ],
selectableCollector ))
2015-05-26 09:25:39 -07:00
. toEqual ( true );
expect ( matched ). toEqual ([ s1 [ 0 ], 1 ]);
2014-10-28 14:46:55 -07:00
});
2015-03-19 23:38:48 +01:00
it ( 'should select by many attributes and independent of the value' , () => {
matcher . addSelectables ( s1 = CssSelector . parse ( 'input[type=text][control]' ), 1 );
var cssSelector = new CssSelector ();
cssSelector . setElement ( 'input' );
cssSelector . addAttribute ( 'type' , 'text' );
cssSelector . addAttribute ( 'control' , 'one' );
expect ( matcher . match ( cssSelector , selectableCollector )). toEqual ( true );
expect ( matched ). toEqual ([ s1 [ 0 ], 1 ]);
});
2014-10-28 14:46:55 -07:00
it ( 'should select independent of the order in the css selector' , () => {
2015-03-19 17:01:42 +01:00
matcher . addSelectables ( s1 = CssSelector . parse ( '[someAttr].someClass' ), 1 );
matcher . addSelectables ( s2 = CssSelector . parse ( '.someClass[someAttr]' ), 2 );
matcher . addSelectables ( s3 = CssSelector . parse ( '.class1.class2' ), 3 );
matcher . addSelectables ( s4 = CssSelector . parse ( '.class2.class1' ), 4 );
2014-10-28 14:46:55 -07:00
2015-05-26 09:25:39 -07:00
expect ( matcher . match ( CssSelector . parse ( '[someAttr].someClass' )[ 0 ], selectableCollector ))
. toEqual ( true );
expect ( matched ). toEqual ([ s1 [ 0 ], 1 , s2 [ 0 ], 2 ]);
2014-10-28 14:46:55 -07:00
reset ();
2015-05-26 09:25:39 -07:00
expect ( matcher . match ( CssSelector . parse ( '.someClass[someAttr]' )[ 0 ], selectableCollector ))
. toEqual ( true );
expect ( matched ). toEqual ([ s1 [ 0 ], 1 , s2 [ 0 ], 2 ]);
2014-10-28 14:46:55 -07:00
reset ();
2015-05-26 09:25:39 -07:00
expect ( matcher . match ( CssSelector . parse ( '.class1.class2' )[ 0 ], selectableCollector ))
. toEqual ( true );
expect ( matched ). toEqual ([ s3 [ 0 ], 3 , s4 [ 0 ], 4 ]);
2014-10-28 14:46:55 -07:00
reset ();
2015-05-26 09:25:39 -07:00
expect ( matcher . match ( CssSelector . parse ( '.class2.class1' )[ 0 ], selectableCollector ))
. toEqual ( true );
expect ( matched ). toEqual ([ s4 [ 0 ], 4 , s3 [ 0 ], 3 ]);
2014-10-28 14:46:55 -07:00
});
2015-03-12 09:44:49 +01:00
it ( 'should not select with a matching :not selector' , () => {
2015-03-19 17:01:42 +01:00
matcher . addSelectables ( CssSelector . parse ( 'p:not(.someClass)' ), 1 );
matcher . addSelectables ( CssSelector . parse ( 'p:not([someAttr])' ), 2 );
matcher . addSelectables ( CssSelector . parse ( ':not(.someClass)' ), 3 );
matcher . addSelectables ( CssSelector . parse ( ':not(p)' ), 4 );
matcher . addSelectables ( CssSelector . parse ( ':not(p[someAttr])' ), 5 );
2015-03-12 09:44:49 +01:00
2015-05-26 09:25:39 -07:00
expect ( matcher . match ( CssSelector . parse ( 'p.someClass[someAttr]' )[ 0 ], selectableCollector ))
. toEqual ( false );
2015-03-12 09:44:49 +01:00
expect ( matched ). toEqual ([]);
});
it ( 'should select with a non matching :not selector' , () => {
2015-03-19 17:01:42 +01:00
matcher . addSelectables ( s1 = CssSelector . parse ( 'p:not(.someClass)' ), 1 );
matcher . addSelectables ( s2 = CssSelector . parse ( 'p:not(.someOtherClass[someAttr])' ), 2 );
matcher . addSelectables ( s3 = CssSelector . parse ( ':not(.someClass)' ), 3 );
matcher . addSelectables ( s4 = CssSelector . parse ( ':not(.someOtherClass[someAttr])' ), 4 );
2015-03-12 09:44:49 +01:00
2016-04-12 09:40:37 -07:00
expect ( matcher . match ( CssSelector . parse ( 'p[someOtherAttr].someOtherClass' )[ 0 ],
selectableCollector ))
2015-05-26 09:25:39 -07:00
. toEqual ( true );
expect ( matched ). toEqual ([ s1 [ 0 ], 1 , s2 [ 0 ], 2 , s3 [ 0 ], 3 , s4 [ 0 ], 4 ]);
2015-03-19 17:01:42 +01:00
});
2015-06-01 14:24:19 -07:00
it ( 'should match with multiple :not selectors' , () => {
matcher . addSelectables ( s1 = CssSelector . parse ( 'div:not([a]):not([b])' ), 1 );
expect ( matcher . match ( CssSelector . parse ( 'div[a]' )[ 0 ], selectableCollector )). toBe ( false );
expect ( matcher . match ( CssSelector . parse ( 'div[b]' )[ 0 ], selectableCollector )). toBe ( false );
expect ( matcher . match ( CssSelector . parse ( 'div[c]' )[ 0 ], selectableCollector )). toBe ( true );
});
2015-03-19 17:01:42 +01:00
it ( 'should select with one match in a list' , () => {
2015-05-26 09:25:39 -07:00
matcher . addSelectables ( s1 = CssSelector . parse ( 'input[type=text], textbox' ), 1 );
2015-03-19 17:01:42 +01:00
2015-05-26 09:25:39 -07:00
expect ( matcher . match ( CssSelector . parse ( 'textbox' )[ 0 ], selectableCollector )). toEqual ( true );
expect ( matched ). toEqual ([ s1 [ 1 ], 1 ]);
2015-03-19 17:01:42 +01:00
2015-05-26 09:25:39 -07:00
reset ();
expect ( matcher . match ( CssSelector . parse ( 'input[type=text]' )[ 0 ], selectableCollector ))
. toEqual ( true );
expect ( matched ). toEqual ([ s1 [ 0 ], 1 ]);
2015-03-19 17:01:42 +01:00
});
it ( 'should not select twice with two matches in a list' , () => {
2015-05-26 09:25:39 -07:00
matcher . addSelectables ( s1 = CssSelector . parse ( 'input, .someClass' ), 1 );
2015-03-19 17:01:42 +01:00
2015-05-26 09:25:39 -07:00
expect ( matcher . match ( CssSelector . parse ( 'input.someclass' )[ 0 ], selectableCollector ))
. toEqual ( true );
expect ( matched . length ). toEqual ( 2 );
expect ( matched ). toEqual ([ s1 [ 0 ], 1 ]);
2015-03-12 09:44:49 +01:00
});
2014-10-28 14:46:55 -07:00
});
describe ( 'CssSelector.parse' , () => {
it ( 'should detect element names' , () => {
2015-03-19 17:01:42 +01:00
var cssSelector = CssSelector . parse ( 'sometag' )[ 0 ];
2014-10-28 14:46:55 -07:00
expect ( cssSelector . element ). toEqual ( 'sometag' );
expect ( cssSelector . toString ()). toEqual ( 'sometag' );
});
it ( 'should detect class names' , () => {
2015-03-19 17:01:42 +01:00
var cssSelector = CssSelector . parse ( '.someClass' )[ 0 ];
2014-10-28 14:46:55 -07:00
expect ( cssSelector . classNames ). toEqual ([ 'someclass' ]);
expect ( cssSelector . toString ()). toEqual ( '.someclass' );
});
it ( 'should detect attr names' , () => {
2015-03-19 17:01:42 +01:00
var cssSelector = CssSelector . parse ( '[attrname]' )[ 0 ];
2014-11-11 17:33:47 -08:00
expect ( cssSelector . attrs ). toEqual ([ 'attrname' , '' ]);
expect ( cssSelector . toString ()). toEqual ( '[attrname]' );
2014-10-28 14:46:55 -07:00
});
it ( 'should detect attr values' , () => {
2015-03-19 17:01:42 +01:00
var cssSelector = CssSelector . parse ( '[attrname=attrvalue]' )[ 0 ];
2014-11-11 17:33:47 -08:00
expect ( cssSelector . attrs ). toEqual ([ 'attrname' , 'attrvalue' ]);
2014-10-28 14:46:55 -07:00
expect ( cssSelector . toString ()). toEqual ( '[attrname=attrvalue]' );
});
it ( 'should detect multiple parts' , () => {
2015-03-19 17:01:42 +01:00
var cssSelector = CssSelector . parse ( 'sometag[attrname=attrvalue].someclass' )[ 0 ];
2014-10-28 14:46:55 -07:00
expect ( cssSelector . element ). toEqual ( 'sometag' );
2014-11-11 17:33:47 -08:00
expect ( cssSelector . attrs ). toEqual ([ 'attrname' , 'attrvalue' ]);
2014-10-28 14:46:55 -07:00
expect ( cssSelector . classNames ). toEqual ([ 'someclass' ]);
expect ( cssSelector . toString ()). toEqual ( 'sometag.someclass[attrname=attrvalue]' );
});
2015-03-12 09:44:49 +01:00
2015-03-19 23:38:48 +01:00
it ( 'should detect multiple attributes' , () => {
var cssSelector = CssSelector . parse ( 'input[type=text][control]' )[ 0 ];
expect ( cssSelector . element ). toEqual ( 'input' );
expect ( cssSelector . attrs ). toEqual ([ 'type' , 'text' , 'control' , '' ]);
expect ( cssSelector . toString ()). toEqual ( 'input[type=text][control]' );
});
2015-03-12 09:44:49 +01:00
it ( 'should detect :not' , () => {
2015-03-19 17:01:42 +01:00
var cssSelector = CssSelector . parse ( 'sometag:not([attrname=attrvalue].someclass)' )[ 0 ];
2015-03-12 09:44:49 +01:00
expect ( cssSelector . element ). toEqual ( 'sometag' );
expect ( cssSelector . attrs . length ). toEqual ( 0 );
expect ( cssSelector . classNames . length ). toEqual ( 0 );
2015-06-01 14:24:19 -07:00
var notSelector = cssSelector . notSelectors [ 0 ];
2015-03-12 09:44:49 +01:00
expect ( notSelector . element ). toEqual ( null );
expect ( notSelector . attrs ). toEqual ([ 'attrname' , 'attrvalue' ]);
expect ( notSelector . classNames ). toEqual ([ 'someclass' ]);
expect ( cssSelector . toString ()). toEqual ( 'sometag:not(.someclass[attrname=attrvalue])' );
});
it ( 'should detect :not without truthy' , () => {
2015-03-19 17:01:42 +01:00
var cssSelector = CssSelector . parse ( ':not([attrname=attrvalue].someclass)' )[ 0 ];
2016-04-12 09:40:37 -07:00
expect ( cssSelector . element ). toEqual ( "*" );
2015-03-12 09:44:49 +01:00
2015-06-01 14:24:19 -07:00
var notSelector = cssSelector . notSelectors [ 0 ];
2015-03-12 09:44:49 +01:00
expect ( notSelector . attrs ). toEqual ([ 'attrname' , 'attrvalue' ]);
expect ( notSelector . classNames ). toEqual ([ 'someclass' ]);
expect ( cssSelector . toString ()). toEqual ( '*:not(.someclass[attrname=attrvalue])' );
});
it ( 'should throw when nested :not' , () => {
2016-04-12 09:40:37 -07:00
expect (() => { CssSelector . parse ( 'sometag:not(:not([attrname=attrvalue].someclass))' )[ 0 ]; })
. toThrowError ( 'Nesting :not is not allowed in a selector' );
2015-03-12 09:44:49 +01:00
});
2015-03-19 17:01:42 +01:00
2015-06-01 14:24:19 -07:00
it ( 'should throw when multiple selectors in :not' , () => {
2016-04-12 09:40:37 -07:00
expect (() => { CssSelector . parse ( 'sometag:not(a,b)' ); })
. toThrowError ( 'Multiple selectors in :not are not supported' );
2015-06-01 14:24:19 -07:00
});
2015-03-19 17:01:42 +01:00
it ( 'should detect lists of selectors' , () => {
var cssSelectors = CssSelector . parse ( '.someclass,[attrname=attrvalue], sometag' );
expect ( cssSelectors . length ). toEqual ( 3 );
expect ( cssSelectors [ 0 ]. classNames ). toEqual ([ 'someclass' ]);
expect ( cssSelectors [ 1 ]. attrs ). toEqual ([ 'attrname' , 'attrvalue' ]);
expect ( cssSelectors [ 2 ]. element ). toEqual ( 'sometag' );
});
it ( 'should detect lists of selectors with :not' , () => {
2015-05-26 09:25:39 -07:00
var cssSelectors =
CssSelector . parse ( 'input[type=text], :not(textarea), textbox:not(.special)' );
2015-03-19 17:01:42 +01:00
expect ( cssSelectors . length ). toEqual ( 3 );
expect ( cssSelectors [ 0 ]. element ). toEqual ( 'input' );
expect ( cssSelectors [ 0 ]. attrs ). toEqual ([ 'type' , 'text' ]);
expect ( cssSelectors [ 1 ]. element ). toEqual ( '*' );
2015-06-01 14:24:19 -07:00
expect ( cssSelectors [ 1 ]. notSelectors [ 0 ]. element ). toEqual ( 'textarea' );
2015-03-19 17:01:42 +01:00
expect ( cssSelectors [ 2 ]. element ). toEqual ( 'textbox' );
2015-06-01 14:24:19 -07:00
expect ( cssSelectors [ 2 ]. notSelectors [ 0 ]. classNames ). toEqual ([ 'special' ]);
2015-03-19 17:01:42 +01:00
});
2014-10-28 14:46:55 -07:00
});
2015-07-28 11:38:40 -07:00
describe ( 'CssSelector.getMatchingElementTemplate' , () => {
2015-11-23 16:02:19 -08:00
it ( 'should create an element with a tagName, classes, and attributes with the correct casing' ,
() => {
let selector = CssSelector . parse ( 'Blink.neon.hotpink[Sweet][Dismissable=false]' )[ 0 ];
let template = selector . getMatchingElementTemplate ();
2015-07-28 11:38:40 -07:00
2015-11-23 16:02:19 -08:00
expect ( template ). toEqual ( '<Blink class="neon hotpink" Sweet Dismissable="false"></Blink>' );
});
2015-07-28 11:38:40 -07:00
it ( 'should create an element without a tag name' , () => {
let selector = CssSelector . parse ( '[fancy]' )[ 0 ];
let template = selector . getMatchingElementTemplate ();
expect ( template ). toEqual ( '<div fancy></div>' );
});
it ( 'should ignore :not selectors' , () => {
let selector = CssSelector . parse ( 'grape:not(.red)' )[ 0 ];
let template = selector . getMatchingElementTemplate ();
expect ( template ). toEqual ( '<grape></grape>' );
});
});
2015-06-01 14:24:19 -07:00
}