92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt SweeneyYUI.add('node-traversal-test', function(Y) {
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney var Assert = Y.Assert,
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney ArrayAssert = Y.ArrayAssert;
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney Y.Test.Runner.add(new Y.Test.Case({
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney name: 'Y.Node.ancestor',
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney 'should return the parent node': function() {
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney Assert.areEqual(document.documentElement,
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney Y.one(document.body).ancestor()._node);
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney },
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney 'should return the same node': function() {
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney Assert.areEqual(document.body,
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney Y.one(document.body).ancestor('body', true)._node);
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney },
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney 'should return the matching ancestor': function() {
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney var root = document.getElementById('test-element-by-axis'),
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney node = root.getElementsByTagName('EM')[0],
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney fn = function(node) {
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney return node._node.tagName === 'BODY';
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney };
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney Assert.areEqual(document.body, Y.one(node).ancestor(fn)._node);
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney },
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney 'should return the matching ancestor via selector': function() {
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney var root = document.getElementById('test-element-by-axis'),
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney node = root.getElementsByTagName('EM')[0];
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney Assert.areEqual(document.body, Y.one(node).ancestor('body')._node);
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney },
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney 'should return the matching ancestor (test self match)': function() {
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney var root = document.getElementById('test-element-by-axis'),
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney node = root.getElementsByTagName('EM')[0],
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney fn = function(node) {
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney return node.get('tagName') === 'EM';
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney };
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney Assert.areEqual(node, Y.one(node).ancestor(fn, true)._node);
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney },
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney 'should return the matching ancestor (test self match) via selector': function() {
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney var root = document.getElementById('test-element-by-axis'),
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney node = root.getElementsByTagName('EM')[0];
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney Assert.areEqual(node, Y.one(node).ancestor('em', true)._node);
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney },
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney 'should return the matching ancestor (test self not matched)': function() {
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney var root = document.getElementById('test-element-by-axis'),
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney node = root.getElementsByTagName('EM')[0],
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney fn = function(node) {
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney return node.get('tagName') === 'BODY';
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney };
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney Assert.areEqual(document.body, Y.one(node).ancestor(fn, true)._node);
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney },
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney 'should return the matching ancestor (test self not matched) via selector': function() {
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney var root = document.getElementById('test-element-by-axis'),
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney node = root.getElementsByTagName('EM')[0];
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney Assert.areEqual(document.body, Y.one(node).ancestor('body', true)._node);
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney },
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney 'should stop when the stop function returns true': function() {
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney var root = document.getElementById('test-element-by-axis'),
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney node = root.getElementsByTagName('EM')[0],
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney fn = function(node) {
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney node = node._node;
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney return node.tagName === 'BODY';
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney },
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney stopFn = function(node) {
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney node = node._node;
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney return node.id === 'test-ancestor-stop';
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney };
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney Assert.isNull(Y.one(node).ancestor(fn, null, stopFn));
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney },
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney 'should stop when the stop function returns true via selector': function() {
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney var root = document.getElementById('test-element-by-axis'),
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney node = root.getElementsByTagName('EM')[0];
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney Assert.isNull(Y.one(node).ancestor('body', null, '#test-ancestor-stop'));
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney },
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney 'should stop when the stop function returns true via selector as 2nd arg': function() {
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney var root = document.getElementById('test-element-by-axis'),
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney node = root.getElementsByTagName('EM')[0];
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney Assert.isNull(Y.one(node).ancestor('body', '#test-ancestor-stop'));
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney },
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney 'should find ancestor before stop': function() {
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney var root = document.getElementById('test-element-by-axis'),
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney node = root.getElementsByTagName('EM')[0],
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney fn = function(node) {
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney node = node._node;
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney return node.id === 'test-ancestor-stop';
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney },
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney stopFn = function(node) {
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney node = node._node;
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney return node.tagName === 'BODY';
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney };
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney Assert.areEqual('test-ancestor-stop',
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney Y.one(node).ancestor(fn, null, stopFn)._node.id);
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney },
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney 'should find ancestor before stop fn as 2nd arg': function() {
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney var root = document.getElementById('test-element-by-axis'),
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney node = root.getElementsByTagName('EM')[0],
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney fn = function(node) {
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney node = node._node;
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney return node.id === 'test-ancestor-stop';
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney },
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney stopFn = function(node) {
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney node = node._node;
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney return node.tagName === 'BODY';
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney };
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney Assert.areEqual('test-ancestor-stop',
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney Y.one(node).ancestor(fn, stopFn)._node.id);
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney },
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney 'should find ancestor before stop via selector': function() {
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney var root = document.getElementById('test-element-by-axis'),
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney node = root.getElementsByTagName('EM')[0],
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney fn = function(node) {
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney node = node._node;
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney return node.id === 'test-ancestor-stop';
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney };
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney Assert.areEqual('test-ancestor-stop',
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney Y.one(node).ancestor(fn, null, 'body')._node.id);
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney },
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney 'should find ancestor before stop via selector as 2nd arg': function() {
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney var root = document.getElementById('test-element-by-axis'),
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney node = root.getElementsByTagName('EM')[0],
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney fn = function(node) {
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney node = node._node;
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney return node.id === 'test-ancestor-stop';
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney };
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney Assert.areEqual('test-ancestor-stop',
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney Y.one(node).ancestor(fn, 'body')._node.id);
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney },
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney 'should find ancestor via selector before stop via selector': function() {
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney var root = document.getElementById('test-element-by-axis'),
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney node = root.getElementsByTagName('EM')[0];
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney Assert.areEqual('test-ancestor-stop',
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney Y.one(node).ancestor('#test-ancestor-stop', null, 'body')._node.id);
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney },
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney 'should find ancestor when both test and stop return true': function() {
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney var root = document.getElementById('test-element-by-axis'),
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney node = root.getElementsByTagName('EM')[0],
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney fn = function(node) {
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney node = node._node;
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney return node.id === 'test-ancestor-stop';
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney },
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney stopFn = function(node) {
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney node = node._node;
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney return node.id === 'test-ancestor-stop';
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney };
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney Assert.areEqual('test-ancestor-stop',
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney Y.one(node).ancestor(fn, null, stopFn)._node.id);
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney },
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney 'should find ancestor when testFn and stop via selector both pass': function() {
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney var root = document.getElementById('test-element-by-axis'),
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney node = root.getElementsByTagName('EM')[0],
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney fn = function(node) {
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney node = node._node;
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney return node.id === 'test-ancestor-stop';
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney };
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney Assert.areEqual('test-ancestor-stop',
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney Y.one(node).ancestor(fn, null, '#test-ancestor-stop')._node.id);
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney },
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney 'should find ancestor when test and stop via selector both pass': function() {
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney var root = document.getElementById('test-element-by-axis'),
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney node = root.getElementsByTagName('EM')[0];
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney Assert.areEqual('test-ancestor-stop',
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney Y.one(node).ancestor('#test-ancestor-stop', null, '#test-ancestor-stop')._node.id);
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney },
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney 'should find TD ancestor': function() {
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney var node = Y.one('#test-table div div').ancestor('td');
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney Y.Assert.areEqual(document.getElementById('test-td'), node._node);
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney }
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney }));
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney Y.Test.Runner.add(new Y.Test.Case({
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney name: 'Y.Node.ancestors',
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney 'should return an array of one (documentElement)': function() {
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney ArrayAssert.itemsAreEqual([document.documentElement],
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney Y.one(document.body).ancestors()._nodes);
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney },
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney 'should include the starting node': function() {
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney var node = document.createElement('div');
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney document.body.appendChild(node);
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney ArrayAssert.itemsAreEqual([document.documentElement, document.body, node],
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney Y.one(node).ancestors(null, true)._nodes);
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney document.body.removeChild(node);
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney },
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney 'should omit the starting node': function() {
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney var node = document.createElement('div');
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney document.body.appendChild(node);
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney ArrayAssert.itemsAreEqual([document.documentElement, document.body],
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney Y.one(node).ancestors()._nodes);
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney document.body.removeChild(node);
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney },
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney 'should return the matching ancestors': function() {
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney var node = document.createElement('div'),
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney fn = function(node) {
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney node = node._node;
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney return node.tagName !== 'HTML';
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney };
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney document.body.appendChild(node);
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney ArrayAssert.itemsAreEqual([document.body], Y.one(node).ancestors(fn)._nodes);
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney document.body.removeChild(node);
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney },
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney 'should return the matching ancestors via selector': function() {
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney var node = document.createElement('div');
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney document.body.appendChild(node);
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney ArrayAssert.itemsAreEqual([document.body], Y.one(node).ancestors(':not(html)')._nodes);
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney document.body.removeChild(node);
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney },
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney 'should return the matching ancestors (test self match)': function() {
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney var root = document.getElementById('test-element-by-axis'),
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney node = root.getElementsByTagName('EM')[0],
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney fn = function(node) {
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney node = node._node;
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney return node.tagName === 'EM';
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney };
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney ArrayAssert.itemsAreEqual([node], Y.one(node).ancestors(fn, true)._nodes);
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney },
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney 'should return the matching ancestors (test self not matched)': function() {
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney var root = document.getElementById('test-element-by-axis'),
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney node = root.getElementsByTagName('EM')[0],
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney fn = function(node) {
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney node = node._node;
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney return node.tagName === 'BODY';
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney };
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney ArrayAssert.itemsAreEqual([document.body], Y.one(node).ancestors(fn, true)._nodes);
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney },
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney 'should stop when the stop function returns true': function() {
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney var root = document.getElementById('test-element-by-axis'),
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney node = root.getElementsByTagName('EM')[0],
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney fn = function(node) {
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney node = node._node;
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney return node.tagName === 'BODY';
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney },
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney stopFn = function(node) {
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney node = node._node;
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney return node.id === 'test-ancestor-stop';
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney };
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney ArrayAssert.itemsAreEqual([], Y.one(node).ancestors(fn, null, stopFn)._nodes);
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney },
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney 'should find ancestor before stop': function() {
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney var root = document.getElementById('test-element-by-axis'),
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney node = root.getElementsByTagName('EM')[0],
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney fn = function(node) {
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney node = node._node;
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney return node.tagName === 'DIV';
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney },
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney stopFn = function(node) {
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney node = node._node;
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney return node.tagName === 'BODY';
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney };
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney ArrayAssert.itemsAreEqual([
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney node.parentNode.parentNode.parentNode,
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney node.parentNode.parentNode,
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney node.parentNode
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney ],
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney Y.one(node).ancestors(fn, null, stopFn)._nodes);
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney },
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney 'should find ancestor when both test and stop return true': function() {
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney var root = document.getElementById('test-element-by-axis'),
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney node = root.getElementsByTagName('EM')[0],
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney fn = function(node) {
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney node = node._node;
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney return node.tagName === 'DIV';
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney },
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney stopFn = function(node) {
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney node = node._node;
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney return node.tagName === 'DIV';
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney };
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney Assert.areEqual(1,
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney Y.one(node).ancestors(fn, null, stopFn).size());
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney },
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney 'should stop when the stop function returns true as 2nd arg': function() {
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney var root = document.getElementById('test-element-by-axis'),
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney node = root.getElementsByTagName('EM')[0],
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney fn = function(node) {
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney node = node._node;
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney return node.tagName === 'BODY';
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney },
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney stopFn = function(node) {
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney node = node._node;
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney return node.id === 'test-ancestor-stop';
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney };
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney Assert.areEqual(0, Y.one(node).ancestors(fn, stopFn).size());
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney }
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney }));
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney Y.Test.Runner.add(new Y.Test.Case({
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney name: 'Y.Node.siblings',
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney setUp: function() {
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney this._testNodes = Y.one('#test-nodes > ol').get('children');
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney },
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney tearDown: function() {
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney delete this._testNodes;
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney },
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney 'should return all siblings': function() {
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney var children = this._testNodes;
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney ArrayAssert.itemsAreEqual(
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney [children.item(0)._node, children.item(1)._node, children.item(3)._node],
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney children.item(2).siblings()._nodes);
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney },
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney 'should return all LI siblings': function() {
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney var children = this._testNodes;
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney ArrayAssert.itemsAreEqual(
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney [children.item(0)._node, children.item(1)._node, children.item(3)._node],
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney children.item(2).siblings('li')._nodes);
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney },
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney 'should return all LI.bar siblings': function() {
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney var children = this._testNodes;
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney ArrayAssert.itemsAreEqual(
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney [children.item(0)._node, children.item(3)._node],
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney children.item(2).siblings('li.bar')._nodes);
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney }
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney }));
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney Y.Test.Runner.add(new Y.Test.Case({
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney name: 'Y.Node.previous',
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney setUp: function() {
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney this._testNode = Y.one('#test-prop');
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney },
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney 'should return the correct previous element': function() {
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney Assert.areEqual('test-class', Y.one('#test-prop').previous().get('id'));
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney }
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney }));
92f0160a7d6fdb2b1521115725c8f8555b721ee1Matt Sweeney}, '@VERSION@' ,{requires:['node-base']});