array.html revision cb4f4f79feb7498d1f3406b88fb62209e5f5a444
eb86457f85638a9eb7c4d5f84eb367d24061abfbAdam Moore<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
eb86457f85638a9eb7c4d5f84eb367d24061abfbAdam Moore<html>
eb86457f85638a9eb7c4d5f84eb367d24061abfbAdam Moore<head>
eb86457f85638a9eb7c4d5f84eb367d24061abfbAdam Moore<title>YUI Array Tests</title>
eb86457f85638a9eb7c4d5f84eb367d24061abfbAdam Moore</head>
eb86457f85638a9eb7c4d5f84eb367d24061abfbAdam Moore
cb4f4f79feb7498d1f3406b88fb62209e5f5a444Adam Moore<body class="yui3-skin-sam">
eb86457f85638a9eb7c4d5f84eb367d24061abfbAdam Moore<h1>Array Tests</h1>
dd3bb831f7d6a07193f48da84225f0df74f059adAdam Moore<span>test</span>
dd3bb831f7d6a07193f48da84225f0df74f059adAdam Moore<span>test</span>
dd3bb831f7d6a07193f48da84225f0df74f059adAdam Moore<span>test</span>
eb86457f85638a9eb7c4d5f84eb367d24061abfbAdam Moore<p><input type="button" value="Run Tests" id="btnRun" disabled="true" /></p>
eb86457f85638a9eb7c4d5f84eb367d24061abfbAdam Moore
dd3bb831f7d6a07193f48da84225f0df74f059adAdam Moore<script type="text/javascript" src="/build/yui/yui.js"></script>
eb86457f85638a9eb7c4d5f84eb367d24061abfbAdam Moore<script type="text/javascript">
eb86457f85638a9eb7c4d5f84eb367d24061abfbAdam Moore
eb86457f85638a9eb7c4d5f84eb367d24061abfbAdam Moore(function() {
52671ce4f644d565b2acd71a8ce4f6d20829a67cAdam Moore
eb86457f85638a9eb7c4d5f84eb367d24061abfbAdam Moore YUI({
eb86457f85638a9eb7c4d5f84eb367d24061abfbAdam Moore base: "/build/",
35cf6dd5c2320d93c353e64d1b4aa8c50ebf7722Adam Moore logExclude: {
35cf6dd5c2320d93c353e64d1b4aa8c50ebf7722Adam Moore attribute: true,
35cf6dd5c2320d93c353e64d1b4aa8c50ebf7722Adam Moore dom: true,
35cf6dd5c2320d93c353e64d1b4aa8c50ebf7722Adam Moore node: true,
35cf6dd5c2320d93c353e64d1b4aa8c50ebf7722Adam Moore event: true,
35cf6dd5c2320d93c353e64d1b4aa8c50ebf7722Adam Moore base: true,
35cf6dd5c2320d93c353e64d1b4aa8c50ebf7722Adam Moore widget: true,
35cf6dd5c2320d93c353e64d1b4aa8c50ebf7722Adam Moore selector: true
35cf6dd5c2320d93c353e64d1b4aa8c50ebf7722Adam Moore },
eb86457f85638a9eb7c4d5f84eb367d24061abfbAdam Moore useConsole: true
eb86457f85638a9eb7c4d5f84eb367d24061abfbAdam Moore }).use("dump", "test", "console", "event-custom", function(Y) {
eb86457f85638a9eb7c4d5f84eb367d24061abfbAdam Moore
eb86457f85638a9eb7c4d5f84eb367d24061abfbAdam Moore var button = Y.get('#btnRun');
eb86457f85638a9eb7c4d5f84eb367d24061abfbAdam Moore
eb86457f85638a9eb7c4d5f84eb367d24061abfbAdam Moore // Set up the page
eb86457f85638a9eb7c4d5f84eb367d24061abfbAdam Moore button.set("disabled", false);
eb86457f85638a9eb7c4d5f84eb367d24061abfbAdam Moore Y.on("click", function() {
eb86457f85638a9eb7c4d5f84eb367d24061abfbAdam Moore Y.Test.Runner.run();
eb86457f85638a9eb7c4d5f84eb367d24061abfbAdam Moore }, button);
eb86457f85638a9eb7c4d5f84eb367d24061abfbAdam Moore
dd3bb831f7d6a07193f48da84225f0df74f059adAdam Moore var myConsole = new Y.Console().render();
eb86457f85638a9eb7c4d5f84eb367d24061abfbAdam Moore
35cf6dd5c2320d93c353e64d1b4aa8c50ebf7722Adam Moore var testArray = new Y.Test.Case({
eb86457f85638a9eb7c4d5f84eb367d24061abfbAdam Moore name: "Array tests",
eb86457f85638a9eb7c4d5f84eb367d24061abfbAdam Moore
35cf6dd5c2320d93c353e64d1b4aa8c50ebf7722Adam Moore '[3, 100, 1, 2] should produce [1, 2, 3, 100] when sorted': function() {
35cf6dd5c2320d93c353e64d1b4aa8c50ebf7722Adam Moore
35cf6dd5c2320d93c353e64d1b4aa8c50ebf7722Adam Moore // the stock sort behavior should fail to produce desired result
35cf6dd5c2320d93c353e64d1b4aa8c50ebf7722Adam Moore Y.ArrayAssert.itemsAreEqual([1, 100, 2, 3], [3, 100, 1, 2].sort());
35cf6dd5c2320d93c353e64d1b4aa8c50ebf7722Adam Moore
35cf6dd5c2320d93c353e64d1b4aa8c50ebf7722Adam Moore Y.ArrayAssert.itemsAreEqual([1, 2, 3, 100], [3, 100, 1, 2].sort(Y.Array.numericSort));
35cf6dd5c2320d93c353e64d1b4aa8c50ebf7722Adam Moore
85aaf0eb33da296a9926dd03b903d23c1e3a9381Adam Moore },
85aaf0eb33da296a9926dd03b903d23c1e3a9381Adam Moore
85aaf0eb33da296a9926dd03b903d23c1e3a9381Adam Moore test_some: function() {
85aaf0eb33da296a9926dd03b903d23c1e3a9381Adam Moore var a = [1, 2, 3];
85aaf0eb33da296a9926dd03b903d23c1e3a9381Adam Moore
85aaf0eb33da296a9926dd03b903d23c1e3a9381Adam Moore Y.Array.some(a, function(v) {
85aaf0eb33da296a9926dd03b903d23c1e3a9381Adam Moore if (v == 2) {
85aaf0eb33da296a9926dd03b903d23c1e3a9381Adam Moore return 'truthy';
85aaf0eb33da296a9926dd03b903d23c1e3a9381Adam Moore }
85aaf0eb33da296a9926dd03b903d23c1e3a9381Adam Moore
85aaf0eb33da296a9926dd03b903d23c1e3a9381Adam Moore if (v == 3) {
85aaf0eb33da296a9926dd03b903d23c1e3a9381Adam Moore Y.fail('truthy value did not stop iteration');
85aaf0eb33da296a9926dd03b903d23c1e3a9381Adam Moore }
85aaf0eb33da296a9926dd03b903d23c1e3a9381Adam Moore });
85aaf0eb33da296a9926dd03b903d23c1e3a9381Adam Moore
85aaf0eb33da296a9926dd03b903d23c1e3a9381Adam Moore if (a.some) {
85aaf0eb33da296a9926dd03b903d23c1e3a9381Adam Moore Y.log('Using native Array.some support.');
85aaf0eb33da296a9926dd03b903d23c1e3a9381Adam Moore a.some(function(v) {
85aaf0eb33da296a9926dd03b903d23c1e3a9381Adam Moore if (v == 2) {
85aaf0eb33da296a9926dd03b903d23c1e3a9381Adam Moore return v;
85aaf0eb33da296a9926dd03b903d23c1e3a9381Adam Moore }
85aaf0eb33da296a9926dd03b903d23c1e3a9381Adam Moore
85aaf0eb33da296a9926dd03b903d23c1e3a9381Adam Moore if (v == 3) {
85aaf0eb33da296a9926dd03b903d23c1e3a9381Adam Moore Y.fail('truthy value did not stop iteration');
85aaf0eb33da296a9926dd03b903d23c1e3a9381Adam Moore }
85aaf0eb33da296a9926dd03b903d23c1e3a9381Adam Moore });
85aaf0eb33da296a9926dd03b903d23c1e3a9381Adam Moore } else {
85aaf0eb33da296a9926dd03b903d23c1e3a9381Adam Moore Y.log('No native Array.some support.');
85aaf0eb33da296a9926dd03b903d23c1e3a9381Adam Moore }
dd3bb831f7d6a07193f48da84225f0df74f059adAdam Moore },
dd3bb831f7d6a07193f48da84225f0df74f059adAdam Moore
dd3bb831f7d6a07193f48da84225f0df74f059adAdam Moore test_array: function() {
dd3bb831f7d6a07193f48da84225f0df74f059adAdam Moore
dd3bb831f7d6a07193f48da84225f0df74f059adAdam Moore var els = document.getElementsByTagName('span'),
43692b3f865f1b1c970aedb2b96392482bd1fe3eAdam Moore a = Y.Array(els, 1),
43692b3f865f1b1c970aedb2b96392482bd1fe3eAdam Moore nodes = Y.all('span'),
43692b3f865f1b1c970aedb2b96392482bd1fe3eAdam Moore b = Y.Array(nodes, 1);
dd3bb831f7d6a07193f48da84225f0df74f059adAdam Moore
dd3bb831f7d6a07193f48da84225f0df74f059adAdam Moore Y.log('els length:' + els.length);
dd3bb831f7d6a07193f48da84225f0df74f059adAdam Moore Y.log('a length:' + a.length);
dd3bb831f7d6a07193f48da84225f0df74f059adAdam Moore Y.log('els tagName:' + els.tagName);
dd3bb831f7d6a07193f48da84225f0df74f059adAdam Moore Y.log('els alert:' + els.alert);
dd3bb831f7d6a07193f48da84225f0df74f059adAdam Moore Y.log('els size:' + els.size);
dd3bb831f7d6a07193f48da84225f0df74f059adAdam Moore Y.log('els array test:' + Y.Array.test(els));
7dc268cc10f78c1c8a5df1d94ce93680e20a6f09Adam Moore
7dc268cc10f78c1c8a5df1d94ce93680e20a6f09Adam Moore // Y.Lang.type is broken for HTMLElementCollections in Safari. isObject
7dc268cc10f78c1c8a5df1d94ce93680e20a6f09Adam Moore // returns false because typeof returns function
7dc268cc10f78c1c8a5df1d94ce93680e20a6f09Adam Moore
dd3bb831f7d6a07193f48da84225f0df74f059adAdam Moore Y.log('els isObject:' + Y.Lang.isObject(els)); // false in Safari
7dc268cc10f78c1c8a5df1d94ce93680e20a6f09Adam Moore Y.log('els type:' + Y.Lang.type(els) + '+'); // object
7dc268cc10f78c1c8a5df1d94ce93680e20a6f09Adam Moore Y.log('els typeof:' + typeof els); // function
7dc268cc10f78c1c8a5df1d94ce93680e20a6f09Adam Moore Y.log('els isFunction:' + Y.Lang.isFunction(els)); // false
7dc268cc10f78c1c8a5df1d94ce93680e20a6f09Adam Moore Y.log('els.call:' + els.call);
7dc268cc10f78c1c8a5df1d94ce93680e20a6f09Adam Moore Y.log('els.apply:' + els.apply);
dd3bb831f7d6a07193f48da84225f0df74f059adAdam Moore
dd3bb831f7d6a07193f48da84225f0df74f059adAdam Moore Y.Assert.areEqual(2, a.length);
dd3bb831f7d6a07193f48da84225f0df74f059adAdam Moore
43692b3f865f1b1c970aedb2b96392482bd1fe3eAdam Moore // @TODO NodeList will be wrapped rather than have the items coerced into an
43692b3f865f1b1c970aedb2b96392482bd1fe3eAdam Moore // array. If Array.test is adapted to handle NodeLists this could be made to
43692b3f865f1b1c970aedb2b96392482bd1fe3eAdam Moore // work.
43692b3f865f1b1c970aedb2b96392482bd1fe3eAdam Moore // Y.Assert.areEqual(2, b.length);
7dc268cc10f78c1c8a5df1d94ce93680e20a6f09Adam Moore
43692b3f865f1b1c970aedb2b96392482bd1fe3eAdam Moore },
7dc268cc10f78c1c8a5df1d94ce93680e20a6f09Adam Moore
43692b3f865f1b1c970aedb2b96392482bd1fe3eAdam Moore test_array_test: function(arg1, arg2) {
43692b3f865f1b1c970aedb2b96392482bd1fe3eAdam Moore
43692b3f865f1b1c970aedb2b96392482bd1fe3eAdam Moore Y.Assert.areEqual(0, Y.Array.test(function(){})); // functions should fail
43692b3f865f1b1c970aedb2b96392482bd1fe3eAdam Moore Y.Assert.areEqual(0, Y.Array.test(Y.one('#btnRun'))); // single nodes should fail
43692b3f865f1b1c970aedb2b96392482bd1fe3eAdam Moore Y.Assert.areEqual(0, Y.Array.test('string'));
43692b3f865f1b1c970aedb2b96392482bd1fe3eAdam Moore Y.Assert.areEqual(0, Y.Array.test(12345));
43692b3f865f1b1c970aedb2b96392482bd1fe3eAdam Moore Y.Assert.areEqual(0, Y.Array.test(null));
43692b3f865f1b1c970aedb2b96392482bd1fe3eAdam Moore Y.Assert.areEqual(0, Y.Array.test(undefined));
43692b3f865f1b1c970aedb2b96392482bd1fe3eAdam Moore Y.Assert.areEqual(0, Y.Array.test(/regexp/));
43692b3f865f1b1c970aedb2b96392482bd1fe3eAdam Moore Y.Assert.areEqual(0, Y.Array.test(new Date()));
43692b3f865f1b1c970aedb2b96392482bd1fe3eAdam Moore Y.Assert.areEqual(1, Y.Array.test([1, 2]));
43692b3f865f1b1c970aedb2b96392482bd1fe3eAdam Moore Y.Assert.areEqual(1, Y.Array.test([]));
43692b3f865f1b1c970aedb2b96392482bd1fe3eAdam Moore // Y.Assert.areEqual(1, Y.Array.test('string'.toCharArray()));
43692b3f865f1b1c970aedb2b96392482bd1fe3eAdam Moore Y.Assert.areEqual(2, Y.Array.test(arguments), 'arguments should be arraylike'); // arguments collection
43692b3f865f1b1c970aedb2b96392482bd1fe3eAdam Moore Y.Assert.areEqual(2, Y.Array.test(document.getElementsByTagName('span')), 'htmlelement collections should be arraylike'); // HTMLElementsCollection
43692b3f865f1b1c970aedb2b96392482bd1fe3eAdam Moore
43692b3f865f1b1c970aedb2b96392482bd1fe3eAdam Moore // @TODO figure out what to do with this. A NodeList does not contain a collection of Nodes; it
43692b3f865f1b1c970aedb2b96392482bd1fe3eAdam Moore // contains a collection of HTMLElements.
43692b3f865f1b1c970aedb2b96392482bd1fe3eAdam Moore // Y.Assert.areEqual(3, Y.Array.test(Y.all('#btnRun')), 'nodelists should be specifically identified as a special collection'); // NodeList
43692b3f865f1b1c970aedb2b96392482bd1fe3eAdam Moore Y.Assert.areEqual(0, Y.Array.test(Y.all('span')), 'nodelists are not currently considered arraylike'); // NodeList
eb86457f85638a9eb7c4d5f84eb367d24061abfbAdam Moore }
dd3bb831f7d6a07193f48da84225f0df74f059adAdam Moore
eb86457f85638a9eb7c4d5f84eb367d24061abfbAdam Moore });
eb86457f85638a9eb7c4d5f84eb367d24061abfbAdam Moore
eb86457f85638a9eb7c4d5f84eb367d24061abfbAdam Moore
35cf6dd5c2320d93c353e64d1b4aa8c50ebf7722Adam Moore Y.Test.Runner.add(testArray);
eb86457f85638a9eb7c4d5f84eb367d24061abfbAdam Moore Y.Test.Runner.run();
eb86457f85638a9eb7c4d5f84eb367d24061abfbAdam Moore });
eb86457f85638a9eb7c4d5f84eb367d24061abfbAdam Moore})();
eb86457f85638a9eb7c4d5f84eb367d24061abfbAdam Moore</script>
eb86457f85638a9eb7c4d5f84eb367d24061abfbAdam Moore</body>
eb86457f85638a9eb7c4d5f84eb367d24061abfbAdam Moore</html>