~ubuntu-branches/ubuntu/saucy/whoopsie-daisy/saucy

« back to all changes in this revision

Viewing changes to backend/stats/static/js/yui/3.4.1/tests/dom/tests/selector.html

  • Committer: Package Import Robot
  • Author(s): Evan Dandrea
  • Date: 2012-04-18 13:04:36 UTC
  • Revision ID: package-import@ubuntu.com-20120418130436-vmt93p8fds516lws
Tags: 0.1.32
Fix failing tests on powerpc and ARM.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
2
 
<html>
3
 
<head>
4
 
<title>Selector Test Suite</title>
5
 
 
6
 
<style type="text/css">
7
 
.yui-skin-sam .yui-console-entry-pass .yui-console-entry-cat {
8
 
    background: #070;
9
 
    color: #fff;
10
 
}
11
 
.yui-skin-sam .yui-console-entry-fail .yui-console-entry-cat {
12
 
    background: #700;
13
 
    color: #fff;
14
 
}
15
 
</style>
16
 
<script type="text/javascript" src="../../../build/yui/yui.js"></script>
17
 
 
18
 
<script>
19
 
onload = function() {
20
 
    var SELECTOR_MODULE = 'selector-css3';
21
 
    YUI({filter: 'raw'}).use('node', SELECTOR_MODULE, 'console', 'test', 'dom-deprecated', function(Y) {
22
 
        String.prototype.test = function() {
23
 
            // simulate Moo monkey-patch
24
 
            return false;
25
 
 
26
 
        };
27
 
 
28
 
        Y.Test.Runner.setName('Selector Tests');
29
 
 
30
 
        Y.Dom = {
31
 
            get: function (id) {
32
 
                return document.getElementById(id);
33
 
            },
34
 
            getChildren: function (el) {
35
 
                el = typeof el === 'string' ? document.getElementById(el) : el;
36
 
 
37
 
                var children = [],
38
 
                    i, len;
39
 
 
40
 
                for (i = 0, len = el.childNodes.length; i < len; ++i) {
41
 
                    if (el.childNodes[i].nodeType === 1) {
42
 
                        children.push(el.childNodes[i]);
43
 
                    }
44
 
                }
45
 
                
46
 
                return children;
47
 
            },
48
 
            getElementsByClassName: function (clz, tag, root) {
49
 
                root = typeof root === 'string' ?
50
 
                            document.getElementById(root) : root || document;
51
 
 
52
 
                var els = root.getElementsByTagName(tag || '*'),
53
 
                    nodes = [],
54
 
                    S = ' ',
55
 
                    i, len;
56
 
 
57
 
                clz = S + clz + S;
58
 
 
59
 
                for (i = 0, len = els.length; i < len; ++i) {
60
 
                    if ((S + els[i].className + S).indexOf(clz)) {
61
 
                        nodes.push(els[i]);
62
 
                    }
63
 
                }
64
 
 
65
 
                return nodes;
66
 
            },
67
 
            getFirstChild: function (el) {
68
 
                el = typeof el === 'string' ? document.getElementById(el) : el;
69
 
 
70
 
                var node = el.firstChild;
71
 
                while (node && node.nodeType !== 1) {
72
 
                    node = node.nextSibling;
73
 
                }
74
 
                return node;
75
 
            },
76
 
            getLastChild: function (el) {
77
 
                el = typeof el === 'string' ? document.getElementById(el) : el;
78
 
 
79
 
                var node = el.lastChild;
80
 
                while (node && node.nodeType !== 1) {
81
 
                    node = node.previousSibling;
82
 
                }
83
 
                return node;
84
 
            },
85
 
            addClass: function (els, clz) {
86
 
                var S = ' ',
87
 
                    i, len;
88
 
 
89
 
                if (typeof els === 'string') {
90
 
                    els = [ document.getElementById( els ) ];
91
 
                } else if (els.nodeType === 1) {
92
 
                    els = [ els ];
93
 
                } else if (({}).toString.call(els) === '[object Array]') {
94
 
                    for (i = els.length - 1; i >= 0; --i) {
95
 
                        if (typeof els[i] === 'string') {
96
 
                            els[i] = document.getElementById(els[i]);
97
 
                            if (!els[i]) {
98
 
                                els.splice(i,1);
99
 
                            }
100
 
                        }
101
 
                    }
102
 
                } else {
103
 
                    els = [];
104
 
                }
105
 
 
106
 
                clz = S + clz + S;
107
 
 
108
 
                for (i = 0, len = els.length; i < len; ++i) {
109
 
                    if ((S + els[i].className + S).indexOf(clz)) {
110
 
                        els[i].className += clz.replace(/\s+$/,'');
111
 
                    }
112
 
                }
113
 
            }
114
 
        };
115
 
 
116
 
        new Y.Console({height:'50em'}).render();
117
 
 
118
 
        var suite = new Y.Test.Suite("Selector Suite");
119
 
        var Selector = Y.Selector;
120
 
        var Assert = Y.Assert;
121
 
        var ArrayAssert = Y.ArrayAssert;
122
 
 
123
 
        var $ = Selector.query;
124
 
        var demo = Y.Dom.get('demo');
125
 
        children = Y.Dom.getChildren(demo);
126
 
        var demoFirstChild = children[0];
127
 
        var demoLastChild = children[children.length - 1];
128
 
 
129
 
        var selectorQueryAll = new Y.Test.Case({
130
 
            name: 'Query All',
131
 
 
132
 
            testFilter: function() {
133
 
                var all = Y.Dom.get('test-inputs').getElementsByTagName('input');
134
 
                ArrayAssert.itemsAreEqual([all[0], all[1], all[2]], Selector.filter(all, '[type=checkbox]'), '[type=checkbox]');
135
 
                ArrayAssert.itemsAreEqual([], Selector.filter(null, '[type=checkbox]'), 'null input');
136
 
                //ArrayAssert.itemsAreEqual([document.getElementById('test-inputs')], Selector.filter(['root-test', 'test-inputs'], 'form'), 'form (string inputs)');
137
 
                // no longer supporting string input for element
138
 
                //ArrayAssert.itemsAreEqual([document.getElementById('test-inputs')], Selector.filter(['root-test', document.getElementById('test-inputs'), document.createTextNode('foo')], 'form'), 'form (mixed inputs)');
139
 
            },
140
 
            testTest: function() {
141
 
                Assert.isTrue(Selector.test(Y.Dom.get('checkbox-unchecked'), '[type=checkbox], button'), '[type=checkbox], button');
142
 
                Assert.isTrue(Selector.test(Y.Dom.get('checkbox-unchecked'), 'button, [type=checkbox]'), 'button, [type=checkbox]');
143
 
                Assert.isFalse(Selector.test(Y.Dom.get('checkbox-unchecked'), 'foo, button'), 'foo, button');
144
 
                Assert.isFalse(Selector.test(null, '#foo'), ';ull input');
145
 
                Assert.isFalse(Selector.test(document.createTextNode('foo'), '#foo'), 'textNode input');
146
 
                Assert.isTrue(Selector.test(Y.Dom.get('test-lang-en-us'), '[lang|=en]'), '[lang|=en] (lang="en-us")');
147
 
                Assert.isTrue(Selector.test(Y.Dom.get('test-lang-en'), '[lang|=en]'), '[lang|=en] (lang="en")');
148
 
                Assert.isFalse(Selector.test(Y.Dom.get('test-lang-none'), '[lang|=en]'), '[lang|=en] false pos');
149
 
                Assert.isFalse(Selector.test(Y.Dom.get('checkbox-unchecked'), 'for [type=checkbox]'), 'for [type=checkbox] false pos');
150
 
                Assert.isTrue(Selector.test(Y.Dom.get('checkbox-unchecked'), 'form [type=checkbox]'), 'form [type=checkbox]');
151
 
                Assert.isFalse(Selector.test(Y.Dom.get('checkbox-unchecked'), 'for [type=checkbox]'), 'for [type=checkbox] false pos');
152
 
 
153
 
                Assert.isTrue(Selector.test(Y.Dom.get('checkbox-checked'), '[type=checkbox]:checked'), 'type=checkbox:checked');
154
 
                Assert.isTrue(Selector.test(Y.Dom.get('radio-checked'), ':checked'), ':checked (radio)');
155
 
                Assert.isFalse(Selector.test(Y.Dom.get('radio-unchecked'), ':checked'), ':checked (radio) false pos');
156
 
                Assert.isFalse(Selector.test(Y.Dom.get('checkbox-unchecked'), '[type=checkbox]:checked'), 'type=checkbox:checked false pos');
157
 
                Assert.isTrue(Selector.test(Y.Dom.get('checkbox-unchecked'), '[type=checkbox]:not(:checked)'), 'type=checkbox:not(:checked)');
158
 
 
159
 
                Assert.isTrue(Selector.test(document.getElementsByTagName('dd')[0], 'dd'), 'dd (dd1)');
160
 
                Assert.isTrue(Selector.test(document.getElementsByTagName('dd')[1], 'dd'), 'dd (dd2)');
161
 
 
162
 
                Assert.isFalse(Selector.test(document.getElementsByTagName('dd')[0], '.test-dd2'), '.test-dd2 (dd1)');
163
 
                Assert.isFalse(Selector.test(document.getElementsByTagName('dd')[1], '.test-dd1'), '.test-dd1 (dd2)');
164
 
 
165
 
                Assert.isTrue(Selector.test(document.getElementsByTagName('dd')[0], '.test-dd1'), '.test-dd1');
166
 
                Assert.isTrue(Selector.test(document.getElementsByTagName('dd')[1], '.test-dd2'), '.test-dd2');
167
 
 
168
 
                Assert.isTrue(Selector.test(document.getElementsByTagName('dd')[0], 'dd'), 'dd (dd1)');
169
 
                Assert.isTrue(Selector.test(document.getElementsByTagName('dd')[1], 'dd'), 'dd (dd2)');
170
 
 
171
 
                // with optional root arg
172
 
                var form = Y.DOM.byId('form-root');
173
 
                var input = form.getElementsByTagName('input')[0];
174
 
                Assert.isTrue(Selector.test(input, 'input', form));
175
 
                Assert.isFalse(Selector.test(Y.DOM.byId('foo-bar'), 'input#foo-bar', form));
176
 
 
177
 
                var form = Y.DOM.byId('test-inputs');
178
 
                Assert.isFalse(Selector.test(input, 'input', form));
179
 
                Assert.isFalse(Selector.test(form, 'form', form));
180
 
                Assert.isTrue(Selector.test(form, 'form', form.parentNode));
181
 
                Assert.isTrue(Selector.test(Y.DOM.byId('foo-bar'), 'input#foo-bar', form));
182
 
                Assert.isFalse(Selector.test(Y.DOM.byId('foo-bar'), '#test-inputs input#foo-bar', form));
183
 
                Assert.isTrue(Selector.test(Y.DOM.byId('foo-bar'), '#test-inputs input#foo-bar', form.parentNode));
184
 
            },
185
 
 
186
 
            testRootQuery: function() {
187
 
                var all = Y.Dom.get('nth-test').getElementsByTagName('li');
188
 
 
189
 
                ArrayAssert.itemsAreEqual(all, $('li', document), 'document');
190
 
                ArrayAssert.itemsAreEqual(all, $('#root-test li'), 'document');
191
 
                ArrayAssert.itemsAreEqual([], $('#root-tes li', Y.DOM.byId('demo')), 'false id document');
192
 
 
193
 
                Assert.areEqual(
194
 
                    $('a span, a', Y.DOM.byId('mod1')).length,
195
 
                    $('a, a span', Y.DOM.byId('mod1')).length,
196
 
                    "$('a, a span') === $('a span, a')"); 
197
 
 
198
 
                var node = document.createElement('div');
199
 
                node.innerHTML = '<li><em>foo</em></li>';
200
 
                Assert.areEqual(node.getElementsByTagName('em')[0], $('li em', node, true), 'off-dom: li em');
201
 
                Assert.isNull($('div li em', node, true), 'off-dom: div li em');
202
 
 
203
 
                Assert.areEqual(Y.DOM.byId('test:colon').getElementsByTagName('h2')[0], 
204
 
                    $('h2', Y.DOM.byId('test:colon'), true),
205
 
                    "$('h2', Y.DOM.byId('test:colon'), true)");
206
 
 
207
 
 
208
 
                Assert.areEqual(Y.DOM.byId('demo-last-child'), $('.foo #demo-last-child', document.body, true), 
209
 
                    "$('.foo #demo-last-child', true, document.body)");
210
 
 
211
 
                // standard: no element-scoped query
212
 
                //ArrayAssert.itemsAreEqual(document.body.getElementsByTagName('p'), $('body p', document.body), "$('body p', document.body)");
213
 
 
214
 
                // based on non-standard behavior
215
 
                ArrayAssert.itemsAreEqual([], $('body p', document.body), "$('body p', document.body)");
216
 
                ArrayAssert.itemsAreEqual([], $('#root-test li', Y.Dom.get('nth-test')), 'id selector w/root false pos');
217
 
 
218
 
            },
219
 
            /*
220
 
            testNthLastChild: function() {
221
 
                var all = Y.Dom.get('nth-test').getElementsByTagName('li');
222
 
                var odd = Y.Dom.getElementsByClassName('even', 'li', 'nth-test');
223
 
                var even = Y.Dom.getElementsByClassName('odd', 'li', 'nth-test');
224
 
                var four1 = Y.Dom.getElementsByClassName('last-four-1', 'li', 'nth-test');
225
 
 
226
 
                ArrayAssert.itemsAreEqual(odd, $('li:nth-last-child(odd)'), 'odd');
227
 
                ArrayAssert.itemsAreEqual(even, $('li:nth-last-child(2n)'), '2n');
228
 
                ArrayAssert.itemsAreEqual(even, $('li:nth-last-child(even)'), 'even');
229
 
                ArrayAssert.itemsAreEqual(even, $('li:nth-last-child(2n+0)'), '2n+0');
230
 
                ArrayAssert.itemsAreEqual(odd, $('li:nth-last-child(2n+1)'), '2n+1');
231
 
                ArrayAssert.itemsAreEqual(four1, $('li:nth-last-child(4n+1)'), '4n+1');
232
 
            },
233
 
            */
234
 
            testNthType: function() {
235
 
                var all = Y.Dom.get('nth-test').getElementsByTagName('li');
236
 
                var odd = Y.Dom.getElementsByClassName('odd', 'li', 'nth-test');
237
 
                var even = Y.Dom.getElementsByClassName('even', 'li', 'nth-test');
238
 
                var three1 = Y.Dom.getElementsByClassName('three-1', 'li', 'nth-test');
239
 
                var four1 = Y.Dom.getElementsByClassName('four-1', 'li', 'nth-test');
240
 
                var four2 = Y.Dom.getElementsByClassName('four-2', 'li', 'nth-test');
241
 
                var four3 = Y.Dom.getElementsByClassName('four-3', 'li', 'nth-test');
242
 
                var four4 = Y.Dom.getElementsByClassName('four-4', 'li', 'nth-test');
243
 
                //ArrayAssert.itemsAreEqual(odd, $('li:nth-of-type(odd)'), 'odd');
244
 
 
245
 
                all = Y.Dom.get('nth-type-test').getElementsByTagName('div');
246
 
                even = Y.Dom.getElementsByClassName('even', 'div', 'nth-type-test');
247
 
 
248
 
                //ArrayAssert.itemsAreEqual(all[2], $('#nth-type-test div:nth-of-type(3)'),
249
 
                    //"$('#nth-type-test div:nth-of-type(3)')");
250
 
 
251
 
                //ArrayAssert.itemsAreEqual(even, $('#nth-type-test div:nth-of-type(even)'),
252
 
                    //"$('#nth-type-test div:nth-of-type(even)')");
253
 
 
254
 
                //ArrayAssert.itemsAreEqual(even, $('#nth-type-test div:nth-of-type(2n)'),
255
 
                    //"$('#nth-type-test div:nth-of-type(2n)')");
256
 
 
257
 
            },
258
 
            testNthChild: function() {
259
 
                var all = Y.Dom.get('nth-test').getElementsByTagName('li');
260
 
                var odd = Y.Dom.getElementsByClassName('odd', 'li', 'nth-test');
261
 
                var even = Y.Dom.getElementsByClassName('even', 'li', 'nth-test');
262
 
                var three1 = Y.Dom.getElementsByClassName('three-1', 'li', 'nth-test');
263
 
                var four1 = Y.Dom.getElementsByClassName('four-1', 'li', 'nth-test');
264
 
                var four2 = Y.Dom.getElementsByClassName('four-2', 'li', 'nth-test');
265
 
                var four3 = Y.Dom.getElementsByClassName('four-3', 'li', 'nth-test');
266
 
                var four4 = Y.Dom.getElementsByClassName('four-4', 'li', 'nth-test');
267
 
 
268
 
                //ArrayAssert.itemsAreEqual(even[1], $('li:nth-child(2)'), '2');
269
 
                //ArrayAssert.itemsAreEqual(even[1], $('li:nth-child(0n+2)'), '0n+2');
270
 
                //ArrayAssert.itemsAreEqual(three1, $('li:nth-child(3n+1)'), '3n+1');
271
 
                ArrayAssert.itemsAreEqual(all, $('li:nth-child(n+1)'), 'n+1');
272
 
 
273
 
                //from http://www.w3.org/TR/css3-selectors/#nth-child-pseudo examples
274
 
                /*
275
 
                ArrayAssert.itemsAreEqual(odd, $('li:nth-child(2n+1)'), '2n+1');
276
 
                ArrayAssert.itemsAreEqual(odd, $('li:nth-child(odd)'), 'odd');
277
 
                ArrayAssert.itemsAreEqual(even, $('li:nth-child(2n+0)'), '2n+0');
278
 
                ArrayAssert.itemsAreEqual(even, $('li:nth-child(2n)'), '2n');
279
 
                ArrayAssert.itemsAreEqual(even, $('li:nth-child(even)'), 'even');
280
 
                ArrayAssert.itemsAreEqual(four1, $('li:nth-child(4n+1)'), '4n+1');
281
 
                ArrayAssert.itemsAreEqual(four2, $('li:nth-child(4n+2)'), '4n+2');
282
 
                ArrayAssert.itemsAreEqual(four3, $('li:nth-child(4n+3)'), '4n+3');
283
 
                ArrayAssert.itemsAreEqual(four4, $('li:nth-child(4n+4)'), '4n+4');
284
 
                ArrayAssert.itemsAreEqual(even[0], $('li:nth-child(0n+1)'), '0n+1');
285
 
                ArrayAssert.itemsAreEqual(even[0], $('li:nth-child(1)'), '1');
286
 
                ArrayAssert.itemsAreEqual(all, $('li:nth-child(1n+0)'), '1n+0');
287
 
                ArrayAssert.itemsAreEqual(all, $('li:nth-child(n+0)'), 'n+0');
288
 
                */
289
 
 
290
 
            },
291
 
 
292
 
            testQuery: function() {
293
 
                ArrayAssert.itemsAreEqual(document.getElementsByTagName('p'), $('p, p'), 'p, p');
294
 
                Assert.areEqual(document.getElementsByTagName('p')[0], $('p', null, true), 'p (firstOnly)');
295
 
                ArrayAssert.itemsAreEqual([], $('.Foo'), '.Foo');
296
 
                ArrayAssert.itemsAreEqual([document.getElementById('root-test')], $('#root-test'), 'id only');
297
 
                ArrayAssert.itemsAreEqual([], $('#demo.bar p'), '#demo.bar p');
298
 
                ArrayAssert.itemsAreEqual(Y.Dom.get('demo').getElementsByTagName('p'), $('#demo.foo p'), '#demo.foo p');
299
 
                ArrayAssert.itemsAreEqual(Y.Dom.get('demo').getElementsByTagName('p'), $('.foo p'), '.foo p');
300
 
                ArrayAssert.itemsAreEqual(Y.Dom.get('demo').getElementsByTagName('p'), $('#demo p'), '#demo p');
301
 
                ArrayAssert.itemsAreEqual($('p > em'), [Y.Dom.getFirstChild('demo-first-child')], 'p > em');
302
 
                //ArrayAssert.itemsAreEqual(Y.Dom.getElementsByClassName('para'), $('[class~=para]'), '[class~=para]');
303
 
                //ArrayAssert.itemsAreEqual(Y.Dom.getElementsByClassName('para'), $('[class~="para"]'), '[class~="para"]');
304
 
                ArrayAssert.itemsAreEqual(document.body.getElementsByTagName('p'), $('body div p'), 'body div p');
305
 
                ArrayAssert.itemsAreEqual([], $('#demo .madeup'), '#demo .madeup');
306
 
                //ArrayAssert.itemsAreEqual(Y.Dom.getElementsByClassName('para', 'p'), $('div .para'), 'div .para');
307
 
                //ArrayAssert.itemsAreEqual(Y.Dom.getElementsByClassName('first', null, Y.DOM.byId(demo)), $('#demo .first'), '#demo .first');
308
 
                //ArrayAssert.itemsAreEqual(document.getElementsByTagName('div'), $('div'), 'div');
309
 
                ArrayAssert.itemsAreEqual(document.body.getElementsByTagName('div'), $('body div'), 'body div');
310
 
                ArrayAssert.itemsAreEqual([Y.Dom.get('class-bar')], $('.Bar'), '.Bar');
311
 
                //ArrayAssert.itemsAreEqual([], $(null), 'null input');
312
 
                ArrayAssert.itemsAreEqual([], $('#fake-id-not-in-doc'), 'id false positive');
313
 
                Y.Dom.addClass($('li'), 'first-child');
314
 
                Assert.areEqual(document.getElementById('label-checkbox-unchecked'), $('label[for=checkbox-unchecked]', null, true), 'for attribute');
315
 
                var root = Y.DOM.byId('test-inputs');
316
 
                Assert.areEqual($('.not-button', root).length, $('input:not([type=button])', root).length, '.not-button = input:not([type=button]) - root query');
317
 
                //ArrayAssert.itemsAreEqual(Y.Dom.get('demo2').getElementsByTagName('div'), $('div:contains(child of demo2)', Y.DOM.byId('demo2')), 'div:contains:(child of demo2) ');
318
 
                //Assert.areEqual(document.getElementById('contains-special'), $(':contains(contains "\' & ])'), 'contains "\' & ]');
319
 
                Assert.areEqual(Y.DOM.byId('test-select'), $('#test-select', null, true), "($('#test-select'), null, true)");
320
 
                Assert.areEqual(document.getElementsByTagName('link')[0], $('[rel^=style]', null, true), "($('[rel^=style]), null, true)");
321
 
                Assert.areEqual(Y.DOM.byId('test-rel-div'), $('div[rel^=foo2]', null, true), "($('[rel^=foo2]), null, true)");
322
 
                Assert.areEqual(Y.DOM.byId('test-rel-div'), $("div[rel^='foo2']", null, true), "($('[rel^=\'foo2\']), null, true)");
323
 
                Assert.areEqual(Y.DOM.byId('foo-bar'), $("input[name='foo.bar']", null, true), "input[name='foo.bar'], null, true)");
324
 
 
325
 
                ArrayAssert.itemsAreEqual([demoFirstChild, Y.DOM.next(demoFirstChild)], $('#demo > p:not(.last)'), '#demo > p:not(.last)');
326
 
                Assert.areEqual(Y.DOM.byId('foo-bar'), $("[id^='foo-']", null, true), "[id^='foo-'], null, true");
327
 
                Assert.areEqual(Y.DOM.byId('test-custom-attr'), $("#test-custom-attr[foo=bar]", null, true), "#test-custom-attr[foo=bar], null, true");
328
 
                Assert.areEqual(Y.DOM.byId('test-custom-attr'), $("div[foo=bar]", null, true), "div[foo=bar], null, true");
329
 
                Assert.areEqual(Y.DOM.byId('test-custom-attr'), $("div#test-custom-attr[foo=bar]", null, true), "div#test-custom-attr[foo=bar], null, true");
330
 
 
331
 
                Assert.areEqual(Y.DOM.byId('test-custom-attr'), $("div[foo]", null, true), "div[foo], null, true");
332
 
                ArrayAssert.itemsAreEqual([Y.DOM.byId('test-custom-attr')], $("[foo]"), "[foo]");
333
 
 
334
 
                Assert.areEqual(document.body, $('body, div', null, true), "$('body, div', null, true)");
335
 
 
336
 
                Assert.areEqual(document.getElementById('foo-bar'),
337
 
                    $('[id=foo-bar]', null, true),
338
 
                    "$('[id=foo-bar]', null, true)");
339
 
 
340
 
                Assert.areEqual(document.getElementById('test-custom-attr'),
341
 
                    $('[foo-bar]', null, true),
342
 
                    "$('[foo-bar]', null, true)");
343
 
 
344
 
                Assert.areEqual(document.getElementById('foo-bar'),
345
 
                    $('[aria-controls]', null, true),
346
 
                    "$('[aria-controls]', null, true)");
347
 
 
348
 
                Assert.areEqual(document.getElementById('foo-bar'),
349
 
                    $('[-hyphen-start]', null, true),
350
 
                    "$('[-hyphen-start]', null, true)");
351
 
 
352
 
                Assert.areEqual(Y.DOM.byId('test-lang-en-us'), $('[lang|=en]', null, true), "$('[lang|=en]')");
353
 
 
354
 
                Assert.areEqual(Y.DOM.byId('href-test'), $('[href$=".html"]', null, true), "$('[href$=\".html\"]')");
355
 
                Assert.isNull($('[href$="?html"]', null, true), "$('[href$=\?html\]')");
356
 
 
357
 
                /* failing in brute (ticket 2528057)
358
 
                Assert.areEqual(Y.DOM.byId('test:colon'), 
359
 
                    $('#test\\:colon', null, true),
360
 
                    "$('#test\\:colon', null, true)");
361
 
                */
362
 
            }
363
 
 
364
 
        });
365
 
 
366
 
        var simpleTest = new Y.Test.Case({
367
 
            name: 'Simple Node Test',
368
 
 
369
 
            testPseudo: function() {
370
 
                Assert.isTrue(Selector.test(Y.Dom.getLastChild('demo'), ':last-child'), 'last-child');
371
 
                Assert.isTrue(Selector.test(Y.Dom.getFirstChild('demo'), 'p:first-child'), 'first-child tag');
372
 
                Assert.isTrue(Selector.test(Y.Dom.getFirstChild('demo'), ':first-child'), 'first-child');
373
 
                Assert.isFalse(Selector.test(Y.Dom.getFirstChild('demo'), ':first-child.last'), 'first-child class false pos');
374
 
                Assert.isTrue(Selector.test(Y.Dom.getFirstChild('demo'), ':first-child.first'), 'first-child class');
375
 
                Assert.isFalse(Selector.test(Y.Dom.getFirstChild('demo'), ':only-child'), 'only-child');
376
 
                Assert.isTrue(Selector.test(Y.Dom.get('demo'), ':not(p)'), 'not(p)');
377
 
                Assert.isTrue(Selector.test(demoFirstChild, ':not(.last)'), 'not(.last)');
378
 
                Assert.isTrue(Selector.test(Y.Dom.getFirstChild('demo'), ':first-of-type'), 'first-of-type');
379
 
                Assert.isTrue(Selector.test(Y.Dom.getLastChild('demo'), ':last-of-type'), 'last-of-type');
380
 
                Assert.isFalse(Selector.test(Y.Dom.getFirstChild('demo'), ':only-of-type'), 'only-of-type false pos');
381
 
                Assert.isFalse(Selector.test(Y.Dom.get('demo2'), ':empty'), 'empty false pos');
382
 
                Assert.isTrue(Selector.test(Y.Dom.get('empty'), ':empty'), 'empty');
383
 
                Assert.isFalse(Selector.test(Y.Dom.get('demo'), ':not(.foo)'), 'not(.foo)');
384
 
 
385
 
                /* non-standard
386
 
                Assert.isTrue(Selector.test(Y.Dom.get('demo2'), ':contains(demo2)'), 'contains(demo2)');
387
 
                Assert.isFalse(Selector.test(Y.Dom.get('demo2'), ':not(:contains(demo2))'), ':not(:contains(demo2))');
388
 
                Assert.isTrue(Selector.test(Y.Dom.get('demo2'), ':not(:contains(demo1))'), ':not(:contains(demo1))');
389
 
                Assert.isTrue(Selector.test(Y.Dom.get('demo2'), ':contains(child of demo2)'), 'contains(child of demo2)');
390
 
                */
391
 
            },
392
 
 
393
 
            testAttr: function() {
394
 
                Assert.isTrue(Selector.test(Y.Dom.get('demo'), '[title]'), 'title exists');
395
 
                Assert.isFalse(Selector.test(Y.Dom.getFirstChild('demo'), '[title]'), 'title exists false pos');
396
 
                Assert.isTrue(Selector.test(Y.Dom.get('demo'), '[id=demo]'), 'id equality');
397
 
                Assert.isFalse(Selector.test(Y.Dom.get('demo'), '[id|=me]'), 'id starts with false pos');
398
 
                Assert.isTrue(Selector.test(Y.Dom.get('demo'), '[id~=demo]'), 'id includes');
399
 
                Assert.isTrue(Selector.test(Y.Dom.get('demo'), '[title~=demo]'), 'title includes');
400
 
                Assert.isTrue(Selector.test(Y.Dom.get('demo'), '[id^=de]'), 'id starts with');
401
 
                Assert.isTrue(Selector.test(Y.Dom.get('demo'), '[id$=mo]'), 'id ends with');
402
 
                Assert.isFalse(Selector.test(Y.Dom.get('demo'), '[id$=m]'), 'id ends with false pos');
403
 
                Assert.isTrue(Selector.test(Y.Dom.get('demo'), '[id*=em]'), 'id substr');
404
 
                Assert.isFalse(Selector.test(Y.Dom.get('demo'), '[id*=ex]'), 'id substr false pos');
405
 
                Assert.isTrue(Selector.test(Y.Dom.get('demo'), '[id=demo][title~=demo]'), 'multiple attributes');
406
 
                Assert.isTrue(Selector.test(Y.Dom.get('demo'), 'div[id=demo][title~=demo]'), 'tag & multiple attributes');
407
 
                Assert.isTrue(Selector.test(Y.Dom.get('demo'), 'div[title="this is a demo"]'), 'quoted attribute with spaces');
408
 
                Assert.isTrue(Selector.test(Y.Dom.get('demo'), "div[title='this is a demo']"), 'single quoted attribute with spaces');
409
 
                Assert.isTrue(Selector.test(Y.Dom.get('href-test'), '[href="foo.html"]'), 'href="foo.html"');
410
 
                Assert.isTrue(Selector.test(Y.Dom.get('href-test'), '[href$=".html"]'), 'href$=".html"');
411
 
                Assert.isFalse(Selector.test(Y.Dom.get('demo'), '[id=demo][title=demo]'), 'multiple attributes false pos');
412
 
 
413
 
                /* non-standard
414
 
                alert(Y.Dom.get('demo').querySelector('[id!=bar]'));
415
 
                Assert.isTrue(Selector.test(Y.Dom.get('href-test'), '[href=foo.html]'), 'href=foo.html');
416
 
                Assert.isTrue(Selector.test(Y.Dom.get('demo'), 'div[title=this is a demo]'), 'attribute with spaces');
417
 
                */
418
 
            },
419
 
 
420
 
            testClass: function() {
421
 
                Assert.isTrue(Selector.test(Y.Dom.get('demo'), '.foo'), 'class match');
422
 
                Assert.isTrue(Selector.test(Y.Dom.get('demo'), 'div.foo'), 'tag match');
423
 
                Assert.isFalse(Selector.test(Y.Dom.get('demo'), 'span.foo'), 'tag false positive');
424
 
                Assert.isTrue(Selector.test(Y.Dom.get('demo'), '#demo.foo'), 'id match');
425
 
                Assert.isFalse(Selector.test(Y.Dom.get('demo'), '.baz'), 'class false positive');
426
 
                Assert.isTrue(Selector.test(Y.Dom.getFirstChild('demo'), '.first.para'), 'multiple class match');
427
 
                Assert.isTrue(Selector.test(Y.Dom.getFirstChild('demo'), 'p.first.para'), 'tag & multiple class match');
428
 
                Assert.isFalse(Selector.test(Y.Dom.get('demo'), '.foo.bar'), 'multiple class false pos');
429
 
            },
430
 
 
431
 
            testId: function() {
432
 
                Assert.isTrue(Selector.test(Y.Dom.get('demo'), '#demo'), 'id match');
433
 
                Assert.isTrue(Selector.test(Y.Dom.get('demo'), 'div#demo'), 'tag match');
434
 
                Assert.isFalse(Selector.test(Y.Dom.get('demo'), 'div#dmo'), 'id false positive');
435
 
                Assert.isFalse(Selector.test(Y.Dom.get('demo'), 'span#demo'), 'tag false positive');
436
 
            },
437
 
 
438
 
            testTag: function() {
439
 
                Assert.isTrue(Selector.test(Y.Dom.get('demo'), 'div'), 'div');
440
 
                Assert.isTrue(Selector.test(Y.Dom.get('demo'), 'body div'), 'body div');
441
 
                Assert.isFalse(Selector.test(Y.Dom.get('demo'), 'span'), 'tag false positive');
442
 
                Assert.isTrue(Selector.test(Y.Dom.get('demo'), '*'), 'universal tag');
443
 
            },
444
 
 
445
 
            testDisabled: function() {
446
 
                Assert.areEqual(Y.DOM.byId('disabled-button'), $('#test-inputs :disabled', null, true), "$('#test-inputs :disabled')");
447
 
            },
448
 
 
449
 
            testEnabled: function() {
450
 
                Assert.areEqual(Y.DOM.byId('checkbox-unchecked'), $('#test-inputs input:enabled', null, true), "$('#test-inputs input:enabled')");
451
 
            },
452
 
 
453
 
            testIframe: function() {
454
 
                var frameDoc = Y.DOM.byId('test-frame').contentWindow.document;
455
 
                Assert.areEqual('iframe foo', Y.Lang.trim($('#demo li', frameDoc, true).innerHTML), "Y.get('#demo li', frameDoc, true)");
456
 
            },
457
 
 
458
 
 
459
 
            // to support:
460
 
            // $('> p', myNode) === ('#my-node-id > p');
461
 
            // $('+ p', myNode) === ('#my-node-id + p');
462
 
            // $('~ p', myNode) === ('#my-node-id ~ p');
463
 
            testScoped: function() {
464
 
                var demo = Y.DOM.byId('demo'),
465
 
                    paraChildren = [];
466
 
                Y.each(demo.getElementsByTagName('p'), function(el) {
467
 
                    if (el.parentNode === demo) {
468
 
                        paraChildren.push(el);
469
 
                    }
470
 
                });
471
 
 
472
 
                ArrayAssert.itemsAreEqual(paraChildren, $('> p', Y.DOM.byId('demo')), '#demo > p');
473
 
                ArrayAssert.itemsAreEqual($('#demo > p'), $('foo, > p', Y.DOM.byId('demo')), '#demo foo, #demo > p');
474
 
 
475
 
                //ArrayAssert.itemsAreEqual([Y.Dom.get('demo2')], $('+ div', Y.DOM.byId('demo')), '#demo + div');
476
 
                //ArrayAssert.itemsAreEqual($('#demo-first-child ~ p'), $('~ p', Y.DOM.byId('demo-first-child')), '#demo-first-child ~ div');
477
 
            },
478
 
 
479
 
            testAncestor: function() {
480
 
                var node = Y.DOM.byId('demo-first-child');
481
 
                Assert.isNull(Y.Selector.ancestor(node, 'p'));
482
 
                Assert.areEqual(node, Y.Selector.ancestor(node, 'p', true));
483
 
                Assert.areEqual(document.body, Y.Selector.ancestor(node, 'body', true));
484
 
                Assert.areEqual(node.parentNode, Y.Selector.ancestor(node, 'div'));
485
 
            },
486
 
 
487
 
            testChecked: function() {
488
 
                Assert.areEqual(4, Y.all('#test-inputs :checked').size(), "Y.all('#test-inputs :checked').size()");
489
 
            },
490
 
 
491
 
            'should apply function for filter test': function() {
492
 
                var nodes = document.getElementsByTagName('div'),
493
 
                    filtered = Y.Selector.filter(nodes, function(n) {
494
 
                        return n.tagName == 'SPAN';
495
 
                    });
496
 
 
497
 
                ArrayAssert.itemsAreEqual([], filtered);
498
 
            },
499
 
 
500
 
            'should find element with quoted number ID': function() {
501
 
                var node = document.getElementById('1');
502
 
 
503
 
                Assert.isNotNull(node);
504
 
                Assert.areEqual(node, Y.Selector.query('[id="1"]', null, true));
505
 
            },
506
 
 
507
 
            'should find element with number ID': function() {
508
 
                var node = document.getElementById('1');
509
 
 
510
 
                Assert.isNotNull(node);
511
 
                Assert.areEqual(node, Y.Selector.query('[id=1]', null, true));
512
 
            },
513
 
 
514
 
            'should find element with colon in quoted ID': function() {
515
 
                var node = document.getElementById('foo:bar');
516
 
 
517
 
                Assert.isNotNull(node);
518
 
                Assert.areEqual(node, Y.Selector.query('[id="foo:bar"]', null, true));
519
 
            },
520
 
 
521
 
            'should find element with colon in ID': function() {
522
 
                var node = document.getElementById('foo:bar');
523
 
 
524
 
                Assert.isNotNull(node);
525
 
                Assert.areEqual(node, Y.Selector.query('[id=foo:bar]', null, true));
526
 
            },
527
 
 
528
 
            'should find element with colon in ID shorthand': function() {
529
 
                var node = document.getElementById('foo:bar');
530
 
 
531
 
                Assert.isNotNull(node);
532
 
                Assert.areEqual(node, Y.Selector.query('#foo\\:bar', null, true));
533
 
            },
534
 
 
535
 
            'should find element with number ID shorthand': function() {
536
 
                var node = document.getElementById('1');
537
 
 
538
 
                Assert.isNotNull(node);
539
 
                Assert.areEqual(node, Y.Selector.query('#1', null, true));
540
 
            }
541
 
 
542
 
        });
543
 
 
544
 
        suite.add(selectorQueryAll);
545
 
        suite.add(simpleTest);
546
 
        Y.Test.Runner.add(suite);
547
 
        Y.Test.Runner.run();
548
 
    });
549
 
};
550
 
</script>
551
 
<style type="text/css">
552
 
 
553
 
</style>
554
 
</head>
555
 
<body class="yui3-skin-sam">
556
 
    <div id="demo" class="foo" title="this is a demo">
557
 
        <p class="para first" id="demo-first-child"><em>lorem ipsum</em></p>
558
 
        <p class="para">lorem ipsum</p>
559
 
        <p class="para last">lorem ipsum</p>
560
 
        <div><p>div lorem</p></div>
561
 
        <div id="demo-last-child"><p>last child</p></div>
562
 
    </div>
563
 
 
564
 
    <div id="demo2">
565
 
        <div>child of demo2</div>
566
 
    </div>
567
 
 
568
 
    <div id="empty"></div>
569
 
 
570
 
    <select id="test-select" name="test-select"> 
571
 
        <option value="0">foo</option> 
572
 
        <option value="1">bar</option> 
573
 
        <option>baz</option> 
574
 
    </select> 
575
 
    <div id="root-test">
576
 
        <ol id="nth-test">
577
 
            <li class="odd three-1 four-1">foo</li>
578
 
            <li class="even four-2 last-four-1">foo</li>
579
 
            <li class="odd four-3">foo</li>
580
 
            <li class="even three-1 four-4">foo</li>
581
 
            <li class="odd four-1">foo</li>
582
 
            <li class="even four-2 last-four-1">foo</li>
583
 
            <li class="odd three-1 four-3">foo</li>
584
 
            <li class="even four-4" id="test-lang-none">foo</li>
585
 
            <li class="odd four-1" lang="en-US" id="test-lang-en-us">foo</li>
586
 
            <li class="even three-1 four-2 last-four-1" lang="en" id="test-lang-en">foo</li>
587
 
        </ol>
588
 
    </div>
589
 
    <div id="nth-type-test">
590
 
        <span>span</span>
591
 
        <div>first div</div>
592
 
        <span>span</span>
593
 
        <div class="even">second div</div>
594
 
        <div>third div</div>
595
 
        <div class="even">fourth div</div> 
596
 
        <span>span</span>
597
 
    </div>
598
 
    <a id="href-test" href="foo.html">foo</a>
599
 
    <form id="test-inputs">
600
 
        <label for="checkbox-unchecked" id="label-checkbox-unchecked">label</label>
601
 
        <input type="checkbox" id="checkbox-unchecked" class="not-button">
602
 
        <input type="checkbox" checked id="checkbox-checked-noval" class="not-button">
603
 
        <input type="checkbox" checked="true" id="checkbox-checked" class="not-button">
604
 
        <input type="radio" id="radio-unchecked" class="not-button">
605
 
        <input type="radio" checked="true" id="radio-checked" class="not-button">
606
 
        <input type="button" value="foo" disabled id="disabled-button">
607
 
        <input id="foo-bar" name="foo.bar" class="not-button" aria-controls="foo-bar" -hyphen-start="true">
608
 
        <select>
609
 
            <option>foo</option>
610
 
            <option selected>bar</option>
611
 
        </select>
612
 
    </form>
613
 
 
614
 
    <form id="form-root">
615
 
        <input type="button" value="foo">
616
 
        <input name="foo" class="text-input">
617
 
    </form>
618
 
 
619
 
    <div id="mod1">
620
 
            <div><h3>H3 - Title</h3></div>
621
 
            <div><p>lorem ipsum dolor sit <a href="#"><span>link</span></a></p></div>
622
 
    </div>
623
 
 
624
 
    <div class="Bar" id="class-bar"></div>
625
 
    <div id="contains-special">contains "' & ]</div>
626
 
    <div id="test-rel-div" rel="foo2"></div>
627
 
    <iframe src="test-frame.html" id="test-frame"></iframe>
628
 
 
629
 
    <dl id="test-dl">
630
 
        <dt>Window size</dt>
631
 
        <dd class="test-dd1">dd1</dd>
632
 
        <dt>Document size</dt>
633
 
        <dd class="test-dd2">dd2</dd>
634
 
 
635
 
    </dl>
636
 
    <div id="test:colon"><h2>test</h2></div>
637
 
    <div id="test-custom-attr" foo="bar" foo-bar="bar">custom attribute</div>
638
 
    <div id="1"></div>
639
 
    <div id="foo:bar"></div>
640
 
 
641
 
</body>
642
 
</html>