base.html revision fda0ebbfc3632b3acc0eed183cc58255439e9e02
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai #console .yui3-console-entry {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai padding:2px;
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai min-height:0;
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai #console .yui3-console-entry-fail .yui3-console-entry-cat {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai background-color:red;
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai #console .yui3-console-entry-pass .yui3-console-entry-cat {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai background-color:green;
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai #console .yui3-console-entry-perf .yui3-console-entry-cat {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai background-color:blue;
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai position:static;
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai html, body {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai height:100%;
1bb9ba7f0e700971d0c04fca23820699348cfd49Satyen Desai useBrowserConsole:false,
1bb9ba7f0e700971d0c04fca23820699348cfd49Satyen Desai filter: (window.location.search.match(/[?&]filter=([^&]+)/) || [])[1] || 'min'
1bb9ba7f0e700971d0c04fca23820699348cfd49Satyen Desai}).use('test', 'base', 'console', function (Y) {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai // NOTE: Attribute's unit tests cover a large section of Base's functionality when it comes to dealing with attributes.
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai var suite = new Y.Test.Suite("Base Tests");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai name : "BaseBuild",
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "test:create-basic": function () {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai var expectedMethodCalls = [
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "ext1::constructor",
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "myClass::initializer",
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "ext1::constructor",
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "myClass::initializer",
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "myClass::methodOne",
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "myClass::methodOne",
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "ext1::extOne",
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "ext1::extOne"],
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls = [];
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai function Ext1() {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("ext1::constructor");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai var MyClass = Y.Base.create("myClass", Y.Base, [Ext1], {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai initializer: function() {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("myClass::initializer");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai methodOne: function() {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("myClass::methodOne");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai STATIC_ONE: "static_one"
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai // using 2 instances, just to make sure nothing static/prototype related gets broken by the 1st instance
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai var o1 = new MyClass({foo:true});
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai var o2 = new MyClass({foo:true});
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.Assert.isFunction(o1.extOne, "Extension method extOne not found on o1");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.Assert.isFunction(o2.extOne, "Extension method extOne not found on o2");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.Assert.isFunction(o1.methodOne, "Prototype method methodOne not found on o1");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.Assert.isFunction(o2.methodOne, "Prototype method methodOne not found on o2");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.Assert.areEqual(o1.constructor.STATIC_ONE, "static_one", "STATIC_ONE not found on o1's constructor");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.Assert.areEqual(o2.constructor.STATIC_ONE, "static_one", "STATIC_ONE not found on o2's constructor");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.Assert.areEqual(o1.constructor.NAME, "myClass", "NAME not found on o1's constructor");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.Assert.areEqual(o2.constructor.NAME, "myClass", "NAME not found on o2's constructor");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.ArrayAssert.itemsAreEqual(expectedMethodCalls, actualMethodCalls, "Unexpected method calls");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "test:mix-basic": function() {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai var expectedMethodCalls = [
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "myClass::constructor",
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "ext1::constructor",
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "myClass::initializer",
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "myClass::constructor",
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "ext1::constructor",
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "myClass::initializer",
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "myClass::methodOne",
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "myClass::methodOne",
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "ext1::extOne",
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "ext1::extOne"],
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls = [];
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai function Ext1() {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("ext1::constructor");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai function MyClass(config) {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("myClass::constructor");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai MyClass.superclass.constructor.apply(this, arguments);
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai initializer: function() {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("myClass::initializer");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai methodOne: function() {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("myClass::methodOne");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai STATIC_ONE: "static_one",
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai NAME: "myClass"
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.Base.mix(MyClass, [Ext1]);
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai // using 2 instances, just to make sure nothing static/prototype related gets broken by the 1st instance
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai var o1 = new MyClass();
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai var o2 = new MyClass();
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.Assert.isFunction(o1.extOne, "Extension method extOne not found on o1");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.Assert.isFunction(o2.extOne, "Extension method extOne not found on o2");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.Assert.isFunction(o1.methodOne, "Prototype method methodOne not found on o1");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.Assert.isFunction(o2.methodOne, "Prototype method methodOne not found on o2");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.Assert.areEqual(o1.constructor.STATIC_ONE, "static_one", "STATIC_ONE not found on o1's constructor");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.Assert.areEqual(o2.constructor.STATIC_ONE, "static_one", "STATIC_ONE not found on o2's constructor");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.ArrayAssert.itemsAreEqual(expectedMethodCalls, actualMethodCalls, "Unexpected method calls");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "test:initializer": function() {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai var expectedMethodCalls = [
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "ext1::constructor",
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "myClass::initializer",
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "ext1::initializer",
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "ext1::constructor",
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "myClass::initializer",
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "ext1::initializer"],
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls = [];
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai function Ext1(cfg) {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("ext1::constructor");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("ext1::initializer");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai var MyClass = Y.Base.create("myClass", Y.Base, [Ext1], {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai initializer: function(cfg) {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("myClass::initializer");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai // using 2 instances, just to make sure nothing static/prototype related gets broken by the 1st instance
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai var o1 = new MyClass({foo:true});
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai var o2 = new MyClass({foo:true});
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.ArrayAssert.itemsAreEqual(expectedMethodCalls, actualMethodCalls, "Unexpected method calls");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "test:destructor": function() {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai var expectedMethodCalls = [
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "ext1::destructor",
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "myClass::destructor",
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "ext1::destructor",
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "myClass::destructor"],
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls = [];
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai function Ext1(cfg) {}
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("ext1::destructor");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai var MyClass = Y.Base.create("myClass", Y.Base, [Ext1], {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai destructor: function(cfg) {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("myClass::destructor");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai // using 2 instances, just to make sure nothing static/prototype related gets broken by the 1st instance
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai var o1 = new MyClass({foo:true});
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai var o2 = new MyClass({foo:true});
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.ArrayAssert.itemsAreEqual(expectedMethodCalls, actualMethodCalls, "Unexpected method calls");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "test:attrs" : function() {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai var actualMethodCalls = [],
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai expectedMethodCalls = [
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "ext1::attr2::setter", // once for lazy o1 - This was news to me: we should optimize it as part off Attr performance
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "ext1::attr2::setter", // once for set o1
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "ext1::attr2::setter", // once for lazy o2
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "ext1::attr2::setter" // once for set o2
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai function Ext1() {}
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai value:"attr1-ext1"
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai value:"attr2-ext1",
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai setter: function(val) {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("ext1::attr2::setter");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai value:"attr3-ext1"
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai var MyClass = Y.Base.create("myClass", Y.Base, [Ext1]);
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai // using 2 instances, just to make sure nothing static/prototype related gets broken by the 1st instance
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai var o1 = new MyClass();
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai var o2 = new MyClass();
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai o1.set("attr2", "foo");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai o2.set("attr2", "foo");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.Assert.areEqual("attr1-ext1", o1.get("attr1"), "o1 attr1 incorrect");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.Assert.areEqual("attr1-ext1", o2.get("attr1"), "o2 attr1 incorrect");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.Assert.areEqual("foo", o1.get("attr2"), "o1 attr2 incorrect");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.Assert.areEqual("foo", o2.get("attr2"), "o2 attr2 incorrect");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.Assert.areEqual("attr3-ext1", o1.get("attr3"), "o1 attr3 incorrect");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.Assert.areEqual("attr3-ext1", o2.get("attr3"), "o2 attr3 incorrect");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.ArrayAssert.itemsAreEqual(expectedMethodCalls, actualMethodCalls, "Unexpected method calls");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "test:aggregates" : function() {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai function Ext1() {}
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai function MyWidget(config) {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai MyWidget.superclass.constructor.apply(this, arguments);
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai HTML_PARSER : {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai _buildCfg : {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai aggregates : ["HTML_PARSER"]
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai var MyClass = Y.Base.create("myClass", MyWidget, [Ext1]);
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai // using 2 instances, just to make sure nothing static/prototype related gets broken by the 1st instance
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai var o1 = new MyClass();
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai var o2 = new MyClass();
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.ObjectAssert.areEqual({a:"aa", b:"bb"}, o1.constructor.HTML_PARSER, "o1 HTML_PARSER not aggregated correctly");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.ObjectAssert.areEqual({a:"aa", b:"bb"}, o2.constructor.HTML_PARSER, "o2 HTML_PARSER not aggregated correctly");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "test:overrides-ext-wins" : function() {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai var actualMethodCalls = [],
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai expectedMethodCalls = [
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "ext1::attr2::setter", // once for lazy o1
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "ext1::attr2::setter", // once for set o1
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "ext1::attr2::setter", // once for lazy o2
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "ext1::methodOne",
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "ext1::methodOne"
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai function Ext1() {}
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("ext1::methodOne");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai value:"attr1-ext1"
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai value:"attr2-ext1",
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai setter: function(val) {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("ext1::attr2::setter");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai value:"attr3-ext1"
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai function MyClass() {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai MyClass.superclass.constructor.apply(this, arguments);
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai value:"attr1-myClass"
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai value:"attr2-myClass",
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai setter: function(val) {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("myClass::attr2::setter");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai value:"attr4-myClass"
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai methodOne : function() {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("myClass::methodOne");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.Base.mix(MyClass, [Ext1]);
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai // using 2 instances, just to make sure nothing static/prototype related gets broken by the 1st instance
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai var o1 = new MyClass();
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai var o2 = new MyClass();
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai // only set o1
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai o1.set("attr2", "foo");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.Assert.areEqual("attr1-ext1", o1.get("attr1"), "o1 attr1 incorrect");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.Assert.areEqual("attr1-ext1", o2.get("attr1"), "o2 attr1 incorrect");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.Assert.areEqual("foo", o1.get("attr2"), "o1 attr2 incorrect");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.Assert.areEqual("attr2-ext1", o2.get("attr2"), "o2 attr2 incorrect");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.Assert.areEqual("attr3-ext1", o1.get("attr3"), "o1 attr3 incorrect");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.Assert.areEqual("attr3-ext1", o2.get("attr3"), "o2 attr3 incorrect");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.Assert.areEqual("attr4-myClass", o1.get("attr4"), "o1 attr4 incorrect");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.Assert.areEqual("attr4-myClass", o2.get("attr4"), "o2 attr4 incorrect");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.ArrayAssert.itemsAreEqual(expectedMethodCalls, actualMethodCalls, "Unexpected method calls");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "test:overrides-host-wins" : function() {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai var actualMethodCalls = [],
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai expectedMethodCalls = [
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "myClass::attr2::setter", // once for lazy o1
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "myClass::attr2::setter", // once for set o1
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "myClass::attr2::setter", // once for lazy o2
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "myClass::methodOne",
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "myClass::methodOne"
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai function Ext1() {}
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("ext1::methodOne");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai value:"attr1-ext1"
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai value:"attr2-ext1",
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai setter: function(val) {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("ext1::attr2::setter");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai value:"attr3-ext1"
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai var MyClass = Y.Base.create("myClass", Y.Base, [Ext1], {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai methodOne : function() {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("myClass::methodOne");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai value:"attr1-myClass"
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai value:"attr2-myClass",
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai setter: function(val) {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("myClass::attr2::setter");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai value:"attr4-myClass"
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai // Using 2 instances, just to make sure nothing static/prototype related gets broken by the 1st instance
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai var o1 = new MyClass();
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai var o2 = new MyClass();
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai // only set o1
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai o1.set("attr2", "foo");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.Assert.areEqual("attr1-myClass", o1.get("attr1"), "o1 attr1 incorrect");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.Assert.areEqual("attr1-myClass", o2.get("attr1"), "o2 attr1 incorrect");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.Assert.areEqual("foo", o1.get("attr2"), "o1 attr2 incorrect");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.Assert.areEqual("attr2-myClass", o2.get("attr2"), "o2 attr2 incorrect");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.Assert.areEqual("attr3-ext1", o1.get("attr3"), "o1 attr3 incorrect");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.Assert.areEqual("attr3-ext1", o2.get("attr3"), "o2 attr3 incorrect");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.Assert.areEqual("attr4-myClass", o1.get("attr4"), "o1 attr4 incorrect");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.Assert.areEqual("attr4-myClass", o2.get("attr4"), "o2 attr4 incorrect");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.ArrayAssert.itemsAreEqual(expectedMethodCalls, actualMethodCalls, "Unexpected method calls");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "test:multiext-complex" : function() {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai var actualMethodCalls = [],
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai expectedMethodCalls = [
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "ext1::constructor",
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "ext2::constructor",
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "myClass::initializer",
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "ext1::initializer",
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "ext2::initializer",
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "ext1::constructor",
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "ext2::constructor",
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "myClass::initializer",
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "ext1::initializer",
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "ext2::initializer",
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "ext2::attr3::setter",
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "ext2::attr3::setter",
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "myClass::methodOne",
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "myClass::methodOne",
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "myClass::methodTwo",
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "myClass::methodTwo",
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "ext2::methodThree",
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "ext2::methodThree",
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "ext2::methodFour",
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "ext2::methodFour",
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "myClass::methodFive",
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "myClass::methodFive"
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai function Ext1() {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("ext1::constructor");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("ext1::initializer");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("ext1::methodTwo");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("ext1::methodThree");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai value:"ext1-attr2"
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai value:"ext1-attr3",
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai setter: function(val) {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("ext1::attr3::setter");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai value:"ext1-attr4"
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai function Ext2() {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("ext2::constructor");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("ext2::initializer");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("ext2::methodThree");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("ext2::methodFour");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai value:"ext2-attr3",
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai setter: function(val) {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("ext2::attr3::setter");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai value:"ext2-attr4"
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai var MyClass = Y.Base.create("myClass", Y.Base, [Ext1, Ext2], {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai initializer: function() {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("myClass::initializer");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai methodOne : function() {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("myClass::methodOne");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai methodTwo : function() {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("myClass::methodTwo");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai methodFive : function() {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("myClass::methodFive");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai value:"myClass-attr1"
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai value:"myClass-attr5"
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai var o1 = new MyClass();
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai var o2 = new MyClass();
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.Assert.areEqual("myClass-attr1", o1.get("attr1"), "o1 attr1 incorrect");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.Assert.areEqual("myClass-attr1", o2.get("attr1"), "o2 attr1 incorrect");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.Assert.areEqual("ext1-attr2", o1.get("attr2"), "o1 attr2 incorrect");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.Assert.areEqual("ext1-attr2", o2.get("attr2"), "o2 attr2 incorrect");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.Assert.areEqual("ext2-attr3", o1.get("attr3"), "o1 attr3 incorrect");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.Assert.areEqual("ext2-attr3", o2.get("attr3"), "o2 attr3 incorrect");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.Assert.areEqual("ext2-attr4", o1.get("attr4"), "o1 attr4 incorrect");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.Assert.areEqual("ext2-attr4", o2.get("attr4"), "o2 attr4 incorrect");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.Assert.areEqual("myClass-attr5", o1.get("attr5"), "o1 attr5 incorrect");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.Assert.areEqual("myClass-attr5", o2.get("attr5"), "o2 attr5 incorrect");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.ArrayAssert.itemsAreEqual(expectedMethodCalls, actualMethodCalls, "Unexpected method calls");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "test:classstructure" : function() {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai function Ext1() {}
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai function Ext2() {}
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai var MyClassTwo = Y.Base.create("myClassTwo", Y.Base, [Ext1, Ext2], {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai initializer: function() {},
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai methodOne: function() {}
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai var MyClassOne = Y.Base.create("myClassOne", Y.Base, [Ext1], {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai initializer: function() {},
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai methodOne: function() {}
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai var o1 = new MyClassOne();
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai var o2 = new MyClassTwo();
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.Assert.isTrue(o1.hasImpl(Ext1), "o1 should pass hasImpl(Ext1)");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.Assert.isFalse(o1.hasImpl(Ext2), "o1 should fail hasImpl(Ext2)");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.Assert.isTrue(o2.hasImpl(Ext1), "o2 should pass hasImpl(Ext1)");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.Assert.isTrue(o2.hasImpl(Ext2), "o2 should pass hasImpl(Ext1)");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.Assert.isTrue(o1 instanceof MyClassOne, "o1 should be an instanceof MyClassOne");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.Assert.isTrue(o1 instanceof Y.Base, "o1 should be an instanceof Base");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.Assert.isTrue(o2 instanceof MyClassTwo, "o2 should be an instanceof MyClassTwo");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.Assert.isTrue(o2 instanceof Y.Base, "o2 should be an instanceof Base");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.Assert.isFalse(o1 instanceof MyClassTwo, "o1 should NOT be an instanceof MyClassTwo");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.Assert.isFalse(o2 instanceof MyClassOne, "o2 should NOT be an instanceof MyClassOne");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.Assert.isFunction(o1.methodOne, "o1 should have a methodOne method");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.Assert.isFunction(o1.extOne, "o1 should have an extOne method");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.Assert.isUndefined(o1.extTwo, "o1 should not have an extTwo method");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.Assert.isFunction(o2.methodOne, "o2 should have a methodOne method");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.Assert.isFunction(o2.extOne, "o2 should have an extOne method");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.Assert.isFunction(o2.extTwo, "o2 should have an extTwo method");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.Assert.isTrue(MyClassOne.superclass.constructor === Y.Base, "MyClassOne should have superclass set to Base");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.Assert.isTrue(MyClassTwo.superclass.constructor === Y.Base, "MyClassTwo should have superclass set to Base");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai // Make sure Y.Base was untouched.
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai var b = new Y.Base();
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.Assert.isUndefined(b.methodOne, "Base should not have extension methods");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.Assert.isUndefined(b.extOne, "Base should not have extension methods");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.Assert.isUndefined(b.extTwo, "Base should not have extension methods");
fda0ebbfc3632b3acc0eed183cc58255439e9e02Satyen Desai "test:mutli-inheritance-from-base" : function() {
fda0ebbfc3632b3acc0eed183cc58255439e9e02Satyen Desai var actualMethodCalls = [],
fda0ebbfc3632b3acc0eed183cc58255439e9e02Satyen Desai expectedMethodCalls = [
fda0ebbfc3632b3acc0eed183cc58255439e9e02Satyen Desai "myClassOne::initializer",
fda0ebbfc3632b3acc0eed183cc58255439e9e02Satyen Desai "myExt::initializer",
fda0ebbfc3632b3acc0eed183cc58255439e9e02Satyen Desai "myClassOne::afterInit"
fda0ebbfc3632b3acc0eed183cc58255439e9e02Satyen Desai var Ext1 = Y.Base.create("myExt", Y.Base, [], {
fda0ebbfc3632b3acc0eed183cc58255439e9e02Satyen Desai initializer: function() {
fda0ebbfc3632b3acc0eed183cc58255439e9e02Satyen Desai actualMethodCalls.push("myExt::initializer");
fda0ebbfc3632b3acc0eed183cc58255439e9e02Satyen Desai var MyClassOne = Y.Base.create("myClassOne", Y.Base, [Ext1], {
fda0ebbfc3632b3acc0eed183cc58255439e9e02Satyen Desai initializer: function() {
fda0ebbfc3632b3acc0eed183cc58255439e9e02Satyen Desai actualMethodCalls.push("myClassOne::initializer");
fda0ebbfc3632b3acc0eed183cc58255439e9e02Satyen Desai var o = new MyClassOne( {
fda0ebbfc3632b3acc0eed183cc58255439e9e02Satyen Desai init: function() {
fda0ebbfc3632b3acc0eed183cc58255439e9e02Satyen Desai actualMethodCalls.push("myClassOne::afterInit");
fda0ebbfc3632b3acc0eed183cc58255439e9e02Satyen Desai Y.ArrayAssert.itemsAreEqual(expectedMethodCalls, actualMethodCalls, "Unexpected method calls");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "test:extend" : function() {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai var actualMethodCalls = [],
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai expectedMethodCalls = [
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "ext1::constructor",
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "myClassOne::initializer",
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "ext1::initializer",
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "ext2::constructor",
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "myClassTwo::initializer",
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "ext2::initializer",
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "myClassOne::methodOne",
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "myClassTwo::methodTwo",
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "ext1::extOne",
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "ext2::extTwo"
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai function Ext1() {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("ext1::constructor");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("ext1::initializer");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai function Ext2() {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("ext2::constructor");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("ext2::initializer");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai var MyClassOne = Y.Base.create("myClassOne", Y.Base, [Ext1], {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai initializer: function() {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("myClassOne::initializer");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai methodOne: function() {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("myClassOne::methodOne");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai var MyClassTwo = Y.Base.create("myClassTwo", MyClassOne, [Ext2], {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai initializer: function() {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("myClassTwo::initializer");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai methodTwo: function() {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("myClassTwo::methodTwo");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai var o = new MyClassTwo();
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.ArrayAssert.itemsAreEqual(expectedMethodCalls, actualMethodCalls, "Unexpected method calls");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai var console;
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.one("#btnRun").set("disabled", false).on("click", function() {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai if (!console) {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai console = new Y.Console({
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai id:"console",
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai width:"100%",
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai height:"90%",
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai verbose : false,
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai printTimeout: 0,
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai newestOnTop : false,
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai entryTemplate: '<pre class="{entry_class} {cat_class} {src_class}">'+
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai '<span class="{entry_cat_class}">{label}</span>'+
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai '<span class="{entry_content_class}">{message}</span>'+
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai }).render();
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai<p><input type="button" value="Run Tests" id="btnRun" disabled=true></p>