base.html revision db748fdbe02870b4c78302a13fc95ab765d474c0
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");
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai "test:extCfg-statics" : function() {
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai function Ext1() {}
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai return "methodOne";
9f74fe13660a0d9d411c97798c85863de1745bbfSatyen Desai Ext1.STATIC_ONE = "static_one";
9f74fe13660a0d9d411c97798c85863de1745bbfSatyen Desai Ext1.STATIC_TWO = "static_two";
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai Ext1.STATIC_THREE = "static_three";
9f74fe13660a0d9d411c97798c85863de1745bbfSatyen Desai Ext1._buildCfg = {
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai statics: ["STATIC_ONE", "STATIC_TWO"]
9f74fe13660a0d9d411c97798c85863de1745bbfSatyen Desai var MyClass = Y.Base.create("myClass", Y.Base, [Ext1]);
9f74fe13660a0d9d411c97798c85863de1745bbfSatyen Desai var myclass = new MyClass();
9f74fe13660a0d9d411c97798c85863de1745bbfSatyen Desai Y.Assert.isTrue(myclass instanceof MyClass);
9f74fe13660a0d9d411c97798c85863de1745bbfSatyen Desai Y.Assert.isFunction(myclass.methodOne); // prototype properties copied
9f74fe13660a0d9d411c97798c85863de1745bbfSatyen Desai Y.Assert.isFunction(myclass.init); // but prototype not switched completely by mistake as part of statics:true
9f74fe13660a0d9d411c97798c85863de1745bbfSatyen Desai Y.Assert.areEqual("static_one", MyClass.STATIC_ONE);
9f74fe13660a0d9d411c97798c85863de1745bbfSatyen Desai Y.Assert.areEqual("static_two", MyClass.STATIC_TWO);
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai Y.Assert.isFalse("STATIC_THREE" in MyClass);
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai Y.Assert.isFalse(MyClass.ATTRS === Ext1.ATTRS, "Ext1.ATTRS shouldn't have been copied over");
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai "test:extCfg-aggregates" : function() {
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai function Ext1() {}
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai return "methodOne";
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai Ext1._buildCfg = {
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai aggregates: ["AGGREGATE_ONE"]
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai function Ext2() {}
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai return "methodTwo";
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai var MyClass1 = Y.Base.create("myClass1", Y.Base, [Ext1]);
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai var myclass1 = new MyClass1();
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai Y.Assert.isTrue(myclass1 instanceof MyClass1);
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai Y.Assert.isFunction(myclass1.methodOne); // prototype properties copied
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai Y.Assert.isFunction(myclass1.init); // but prototype not switched completely by mistake as part of statics:true
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai Y.Assert.isFalse(MyClass1.AGGREGATE_ONE === Ext1.AGGREGATE_ONE, "Ext1.AGGREGATE_ONE shouldn't have been copied over");
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai Y.Assert.isFalse(MyClass1.ATTRS === Ext1.ATTRS, "Ext1.ATTRS shouldn't have been copied over with statics:true");
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai var MyClass2 = Y.Base.create("myClass2", Y.Base, [Ext1, Ext2]);
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai var myclass2 = new MyClass2();
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai Y.Assert.isTrue(myclass2 instanceof MyClass2);
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai Y.Assert.isFunction(myclass2.methodTwo); // prototype properties copied
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai Y.Assert.isFunction(myclass2.init); // but prototype not switched completely by mistake
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai Y.Assert.isFalse(MyClass2.AGGREGATE_ONE === Ext1.AGGREGATE_ONE, "Ext1.AGGREGATE_ONE shouldn't have been copied over");
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai Y.Assert.isFalse(MyClass2.AGGREGATE_ONE === Ext2.AGGREGATE_ONE, "Ext2.AGGREGATE_ONE shouldn't have been copied over");
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai "test:extCfg-custom" : function() {
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai function Ext1() {}
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai return "methodOne";
9f74fe13660a0d9d411c97798c85863de1745bbfSatyen Desai Ext1._buildCfg = {
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai CUST : function(p, r, s) {
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai r[p] = r[p] || {
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai if (s[p].foo) {
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai r[p].foo = r[p].foo.concat(s[p].foo);
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai if (s[p].bar) {
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai r[p].bar = r[p].bar.concat(s[p].bar);
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai function Ext2() {}
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai return "methodOne";
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai foo: [2, 3],
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai bar: [2, 3, 4]
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai var MyClass1 = Y.Base.create("myClass1", Y.Base, [Ext1]);
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai var myclass1 = new MyClass1();
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai Y.Assert.isTrue(myclass1 instanceof MyClass1);
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai // ObjectAssert.areEqual doesn't work: values don't == compare
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai }, MyClass1.CUST, "Class1 - object assert");
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai Y.ArrayAssert.itemsAreEqual([1], MyClass1.CUST.foo, "Class1 foo assert");
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai Y.ArrayAssert.itemsAreEqual([1], MyClass1.CUST.bar, "Class1 bar assert");
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai Y.Assert.isFalse(MyClass1.CUST === Ext1.CUST, "Ext1.CUST shouldn't have been copied over");
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai var MyClass2 = Y.Base.create("myClass2", Y.Base, [Ext1, Ext2]);
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai var myclass2 = new MyClass2();
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai Y.Assert.isTrue(myclass2 instanceof MyClass2);
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai Y.Assert.isFunction(myclass2.methodTwo); // prototype properties copied
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai Y.Assert.isFunction(myclass2.init); // but prototype not switched completely by mistake
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai // ObjectAssert.areEqual doesn't work: values don't == compare
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai foo:[1,2,3],
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai bar:[1,2,3,4]
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai Y.ArrayAssert.itemsAreEqual([1,2,3], MyClass2.CUST.foo);
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai Y.ArrayAssert.itemsAreEqual([1,2,3,4], MyClass2.CUST.bar);
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai Y.Assert.isFalse(MyClass2.CUST === Ext1.CUST, "Ext1.CUST shouldn't have been copied over");
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai Y.Assert.isFalse(MyClass2.CUST === Ext2.CUST, "Ext2.CUST shouldn't have been copied over");
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>