123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175 |
- goog.setTestOnly('query_test');
- goog.require('goog.dom');
- goog.require('goog.dom.query');
- goog.require('goog.testing.asserts');
- goog.require('goog.userAgent');
- function testBasicSelectors() {
- assertQuery(4, 'h3');
- assertQuery(1, 'h1:first-child');
- assertQuery(2, 'h3:first-child');
- assertQuery(1, '#t');
- assertQuery(1, '#bug');
- assertQuery(4, '#t h3');
- assertQuery(1, 'div#t');
- assertQuery(4, 'div#t h3');
- assertQuery(0, 'span#t');
- assertQuery(1, '#t div > h3');
- assertQuery(2, '.foo');
- assertQuery(1, '.foo.bar');
- assertQuery(2, '.baz');
- assertQuery(3, '#t > h3');
- }
- function testSyntacticEquivalents() {
- // syntactic equivalents
- assertQuery(12, '#t > *');
- assertQuery(12, '#t >');
- assertQuery(3, '.foo > *');
- assertQuery(3, '.foo >');
- }
- function testWithARootById() {
- // Broken in latest chrome.
- if (goog.userAgent.WEBKIT) {
- return;
- }
- // with a root, by ID
- assertQuery(3, '> *', 'container');
- assertQuery(3, '> h3', 't');
- }
- function testCompoundQueries() {
- // compound queries
- assertQuery(2, '.foo, .bar');
- assertQuery(2, '.foo,.bar');
- }
- function testMultipleClassAttributes() {
- // multiple class attribute
- assertQuery(1, '.foo.bar');
- assertQuery(2, '.foo');
- assertQuery(2, '.baz');
- }
- function testCaseSensitivity() {
- // case sensitivity
- assertQuery(1, 'span.baz');
- assertQuery(1, 'sPaN.baz');
- assertQuery(1, 'SPAN.baz');
- assertQuery(1, '[class = \"foo bar\"]');
- assertQuery(2, '[foo~=\"bar\"]');
- assertQuery(2, '[ foo ~= \"bar\" ]');
- }
- function testAttributes() {
- assertQuery(3, '[foo]');
- assertQuery(1, '[foo$=\"thud\"]');
- assertQuery(1, '[foo$=thud]');
- assertQuery(1, '[foo$=\"thudish\"]');
- assertQuery(1, '#t [foo$=thud]');
- assertQuery(1, '#t [ title $= thud ]');
- assertQuery(0, '#t span[ title $= thud ]');
- assertQuery(2, '[foo|=\"bar\"]');
- assertQuery(1, '[foo|=\"bar-baz\"]');
- assertQuery(0, '[foo|=\"baz\"]');
- }
- function testDescendantSelectors() {
- // Broken in latest chrome.
- if (goog.userAgent.WEBKIT) {
- return;
- }
- assertQuery(3, '>', 'container');
- assertQuery(3, '> *', 'container');
- assertQuery(2, '> [qux]', 'container');
- assertEquals('child1', goog.dom.query('> [qux]', 'container')[0].id);
- assertEquals('child3', goog.dom.query('> [qux]', 'container')[1].id);
- assertQuery(3, '>', 'container');
- assertQuery(3, '> *', 'container');
- }
- function testSiblingSelectors() {
- assertQuery(1, '+', 'container');
- assertQuery(3, '~', 'container');
- assertQuery(1, '.foo + span');
- assertQuery(4, '.foo ~ span');
- assertQuery(1, '#foo ~ *');
- assertQuery(1, '#foo ~');
- }
- function testSubSelectors() {
- // sub-selector parsing
- assertQuery(1, '#t span.foo:not(span:first-child)');
- assertQuery(1, '#t span.foo:not(:first-child)');
- }
- function testNthChild() {
- assertEquals(goog.dom.$('_foo'), goog.dom.query('.foo:nth-child(2)')[0]);
- assertQuery(2, '#t > h3:nth-child(odd)');
- assertQuery(3, '#t h3:nth-child(odd)');
- assertQuery(3, '#t h3:nth-child(2n+1)');
- assertQuery(1, '#t h3:nth-child(even)');
- assertQuery(1, '#t h3:nth-child(2n)');
- assertQuery(1, '#t h3:nth-child(2n+3)');
- assertQuery(2, '#t h3:nth-child(1)');
- assertQuery(1, '#t > h3:nth-child(1)');
- assertQuery(3, '#t :nth-child(3)');
- assertQuery(0, '#t > div:nth-child(1)');
- assertQuery(7, '#t span');
- assertQuery(3, '#t > *:nth-child(n+10)');
- assertQuery(1, '#t > *:nth-child(n+12)');
- assertQuery(10, '#t > *:nth-child(-n+10)');
- assertQuery(5, '#t > *:nth-child(-2n+10)');
- assertQuery(6, '#t > *:nth-child(2n+2)');
- assertQuery(5, '#t > *:nth-child(2n+4)');
- assertQuery(5, '#t > *:nth-child(2n+4)');
- assertQuery(12, '#t > *:nth-child(n-5)');
- assertQuery(6, '#t > *:nth-child(2n-5)');
- }
- function testEmptyPseudoSelector() {
- assertQuery(4, '#t > span:empty');
- assertQuery(6, '#t span:empty');
- assertQuery(0, 'h3 span:empty');
- assertQuery(1, 'h3 :not(:empty)');
- }
- function testIdsWithColons() {
- assertQuery(1, '#silly\\:id\\:\\:with\\:colons');
- }
- function testOrder() {
- var els = goog.dom.query('.myupperclass .myclass input');
- assertEquals('myid1', els[0].id);
- assertEquals('myid2', els[1].id);
- }
- function testCorrectDocumentInFrame() {
- var frameDocument = window.frames['ifr'].document;
- frameDocument.body.innerHTML =
- document.getElementById('iframe-test').innerHTML;
- var els = goog.dom.query('#if1 .if2 div', document);
- var frameEls = goog.dom.query('#if1 .if2 div', frameDocument);
- assertEquals(els.length, frameEls.length);
- assertEquals(1, frameEls.length);
- assertNotEquals(document.getElementById('if3'),
- frameDocument.getElementById('if3'));
- }
- /**
- * @param {number} expectedNumberOfNodes
- * @param {...*} var_args
- */
- function assertQuery(expectedNumberOfNodes, var_args) {
- var args = Array.prototype.slice.call(arguments, 1);
- assertEquals(expectedNumberOfNodes,
- goog.dom.query.apply(null, args).length);
- }
|