0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai<html>
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai<head>
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai <title>Base Tests</title>
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai <script src="/build/yui/yui.js"></script>
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai <style type="text/css">
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai #console .yui3-console-entry {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai padding:2px;
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai margin:0px;
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai min-height:0;
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai }
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai #console .yui3-console-entry-fail .yui3-console-entry-cat {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai background-color:red;
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai }
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai #console .yui3-console-entry-pass .yui3-console-entry-cat {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai background-color:green;
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai }
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai #console .yui3-console-entry-perf .yui3-console-entry-cat {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai background-color:blue;
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai }
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai #console {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai position:static;
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai }
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai html, body {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai height:100%;
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai }
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai </style>
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai</head>
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai<body class="yui3-skin-sam">
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai<div id="testbed" class="yui3-skin-foo"></div>
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai<script>
1bb9ba7f0e700971d0c04fca23820699348cfd49Satyen DesaiYUI({
1bb9ba7f0e700971d0c04fca23820699348cfd49Satyen Desai useBrowserConsole:false,
1bb9ba7f0e700971d0c04fca23820699348cfd49Satyen Desai filter: (window.location.search.match(/[?&]filter=([^&]+)/) || [])[1] || 'min'
1bb9ba7f0e700971d0c04fca23820699348cfd49Satyen Desai}).use('test', 'base', 'console', function (Y) {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai // NOTE: Attribute's unit tests cover a large section of Base's functionality when it comes to dealing with attributes.
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai function EventTests(config) {
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai EventTests.superclass.constructor.apply(this, arguments);
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai }
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai EventTests.NAME = "eventTestsHost";
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai EventTests.ATTRS = {
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai attr1 : {
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai value: "foo"
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai }
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai };
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai Y.extend(EventTests, Y.Base);
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai var suite = new Y.Test.Suite("Base Tests");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai suite.add(new Y.Test.Case({
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai name : "Base Event Tests",
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai testEventPrefix : function() {
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai var h = new EventTests();
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai Y.Assert.areEqual("eventTestsHost", h._eventPrefix);
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai },
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai testEventRegistrationThroughConstructor : function() {
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai var expectedEvents = ["OnInit", "AfterInit", "OnAttr1Change", "AfterAttr1Change"];
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai var actualEvents = [];
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai var h = new EventTests({
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai on: {
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai "attr1Change" : function() {
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai actualEvents.push("OnAttr1Change");
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai },
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai "init" : function() {
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai actualEvents.push("OnInit");
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai }
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai },
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai after: {
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai "attr1Change" : function() {
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai actualEvents.push("AfterAttr1Change");
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai },
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai "init" : function() {
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai actualEvents.push("AfterInit");
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai }
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai }
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai });
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai h.set("attr1", "bar");
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai Y.ArrayAssert.itemsAreEqual(expectedEvents, actualEvents);
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai },
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai testBubbleTargetsThroughConstructor : function() {
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai var expectedEvents = ["bubbleTargetOne", "bubbleTargetTwo", "bubbleTargetThree"];
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai var actualEvents = [];
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai var bubbleTargetOne = new Y.EventTarget();
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai bubbleTargetOne.on("eventTestsHost:attr1Change", function() {
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai actualEvents.push("bubbleTargetOne");
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai });
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai var bubbleTargetTwo = new Y.EventTarget();
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai bubbleTargetTwo.on("eventTestsHost:attr1Change", function() {
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai actualEvents.push("bubbleTargetTwo");
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai });
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai var bubbleTargetThree = new Y.EventTarget();
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai bubbleTargetThree.on("eventTestsHost:attr1Change", function() {
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai actualEvents.push("bubbleTargetThree");
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai });
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai var h1 = new EventTests({
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai bubbleTargets : [bubbleTargetOne, bubbleTargetTwo]
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai });
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai h1.set("attr1", "bar");
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai var h2 = new EventTests({
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai bubbleTargets : bubbleTargetThree
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai });
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai h2.set("attr1", "foobar");
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai Y.ArrayAssert.itemsAreEqual(expectedEvents, actualEvents);
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai },
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai testInitEvent : function() {
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai var actual = [];
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai var expected = ["onInit", "afterInit"];
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai var h = new EventTests({
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai on : {
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai init : function() {
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai actual.push("onInit");
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai }
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai },
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai after : {
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai init : function() {
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai actual.push("afterInit");
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai }
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai }
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai });
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai Y.ArrayAssert.itemsAreEqual(expected, actual);
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai },
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai testDestroyEvent : function() {
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai var actual = [];
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai var expected = ["onDestroy", "afterDestroy"];
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai var h = new EventTests();
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai h.on("destroy", function() {
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai actual.push("onDestroy");
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai });
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai h.after("destroy", function() {
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai actual.push("afterDestroy");
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai });
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai }
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai }));
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai suite.add(new Y.Test.Case({
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai name : "BaseBuild",
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "test:create-basic": function () {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
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
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls = [];
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai function Ext1() {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("ext1::constructor");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai }
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Ext1.prototype.extOne = function() {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("ext1::extOne");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai };
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai var MyClass = Y.Base.create("myClass", Y.Base, [Ext1], {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai initializer: function() {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("myClass::initializer");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai },
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai methodOne: function() {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("myClass::methodOne");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai }
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai }, {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai STATIC_ONE: "static_one"
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai });
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
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
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
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
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
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
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai o1.methodOne();
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai o2.methodOne();
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai o1.extOne();
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai o2.extOne();
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.ArrayAssert.itemsAreEqual(expectedMethodCalls, actualMethodCalls, "Unexpected method calls");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai },
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "test:mix-basic": function() {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
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
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls = [];
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai function Ext1() {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("ext1::constructor");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai }
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Ext1.prototype.extOne = function() {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("ext1::extOne");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai };
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai function MyClass(config) {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("myClass::constructor");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai MyClass.superclass.constructor.apply(this, arguments);
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai }
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.extend(MyClass, Y.Base, {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai initializer: function() {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("myClass::initializer");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai },
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai methodOne: function() {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("myClass::methodOne");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai }
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai }, {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai STATIC_ONE: "static_one",
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai NAME: "myClass"
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai });
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.Base.mix(MyClass, [Ext1]);
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
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
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
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
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
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai o1.methodOne();
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai o2.methodOne();
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai o1.extOne();
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai o2.extOne();
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.ArrayAssert.itemsAreEqual(expectedMethodCalls, actualMethodCalls, "Unexpected method calls");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai },
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
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
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls = [];
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai function Ext1(cfg) {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("ext1::constructor");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.Assert.isNotUndefined(cfg);
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai }
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Ext1.prototype.initializer = function(cfg) {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("ext1::initializer");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.Assert.isNotUndefined(cfg);
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai };
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai var MyClass = Y.Base.create("myClass", Y.Base, [Ext1], {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai initializer: function(cfg) {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("myClass::initializer");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.Assert.isNotUndefined(cfg);
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai }
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai });
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
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
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.ArrayAssert.itemsAreEqual(expectedMethodCalls, actualMethodCalls, "Unexpected method calls");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai },
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
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
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls = [];
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai function Ext1(cfg) {}
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Ext1.prototype.destructor = function(cfg) {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("ext1::destructor");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai };
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai var MyClass = Y.Base.create("myClass", Y.Base, [Ext1], {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai destructor: function(cfg) {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("myClass::destructor");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai }
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai });
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
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
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai o1.destroy();
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai o2.destroy();
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.ArrayAssert.itemsAreEqual(expectedMethodCalls, actualMethodCalls, "Unexpected method calls");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai },
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "test:attrs" : function() {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
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 ];
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai function Ext1() {}
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Ext1.ATTRS = {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai attr1 : {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai value:"attr1-ext1"
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai },
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai attr2 : {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai value:"attr2-ext1",
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai setter: function(val) {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("ext1::attr2::setter");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai return val;
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai }
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai },
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai attr3: {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai value:"attr3-ext1"
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai }
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai };
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai var MyClass = Y.Base.create("myClass", Y.Base, [Ext1]);
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
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
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai o1.set("attr2", "foo");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai o2.set("attr2", "foo");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
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
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
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
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.ArrayAssert.itemsAreEqual(expectedMethodCalls, actualMethodCalls, "Unexpected method calls");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai },
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
b66fb0b516da11d7d0a3e6151dab92af15eac49cSatyen Desai "test:nonAttrsCfg" : function() {
b66fb0b516da11d7d0a3e6151dab92af15eac49cSatyen Desai
b66fb0b516da11d7d0a3e6151dab92af15eac49cSatyen Desai function Ext1() {}
b66fb0b516da11d7d0a3e6151dab92af15eac49cSatyen Desai Ext1._NON_ATTRS_CFG = ["nonAttrA", "nonAttrB"];
b66fb0b516da11d7d0a3e6151dab92af15eac49cSatyen Desai
b66fb0b516da11d7d0a3e6151dab92af15eac49cSatyen Desai function Ext2() {}
b66fb0b516da11d7d0a3e6151dab92af15eac49cSatyen Desai Ext2._NON_ATTRS_CFG = ["nonAttrC", "nonAttrD"];
b66fb0b516da11d7d0a3e6151dab92af15eac49cSatyen Desai
b66fb0b516da11d7d0a3e6151dab92af15eac49cSatyen Desai var MyClass = Y.Base.create("myClass", Y.Base, [Ext1, Ext2], {
b66fb0b516da11d7d0a3e6151dab92af15eac49cSatyen Desai _allowAdHocAttrs: true
b66fb0b516da11d7d0a3e6151dab92af15eac49cSatyen Desai });
b66fb0b516da11d7d0a3e6151dab92af15eac49cSatyen Desai
b66fb0b516da11d7d0a3e6151dab92af15eac49cSatyen Desai var myClass = new MyClass({
b66fb0b516da11d7d0a3e6151dab92af15eac49cSatyen Desai adHocAttr : "adHoc",
b66fb0b516da11d7d0a3e6151dab92af15eac49cSatyen Desai nonAttrA : 1,
b66fb0b516da11d7d0a3e6151dab92af15eac49cSatyen Desai nonAttrB : 2,
b66fb0b516da11d7d0a3e6151dab92af15eac49cSatyen Desai nonAttrC : 3,
b66fb0b516da11d7d0a3e6151dab92af15eac49cSatyen Desai nonAttrD : 4
b66fb0b516da11d7d0a3e6151dab92af15eac49cSatyen Desai });
b66fb0b516da11d7d0a3e6151dab92af15eac49cSatyen Desai
b66fb0b516da11d7d0a3e6151dab92af15eac49cSatyen Desai Y.Assert.isUndefined(myClass.get("nonAttrA"), "nonAttrA should not have been configured");
b66fb0b516da11d7d0a3e6151dab92af15eac49cSatyen Desai Y.Assert.isUndefined(myClass.get("nonAttrB"), "nonAttrB should not have been configured");
b66fb0b516da11d7d0a3e6151dab92af15eac49cSatyen Desai Y.Assert.isUndefined(myClass.get("nonAttrC"), "nonAttrC should not have been configured");
b66fb0b516da11d7d0a3e6151dab92af15eac49cSatyen Desai Y.Assert.isUndefined(myClass.get("nonAttrD"), "nonAttrD should not have been configured");
b66fb0b516da11d7d0a3e6151dab92af15eac49cSatyen Desai
b66fb0b516da11d7d0a3e6151dab92af15eac49cSatyen Desai Y.Assert.areEqual("adHoc", myClass.get("adHocAttr"), "Show have allows adHoc attrs");
b66fb0b516da11d7d0a3e6151dab92af15eac49cSatyen Desai },
b66fb0b516da11d7d0a3e6151dab92af15eac49cSatyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "test:aggregates" : function() {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai function Ext1() {}
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Ext1.HTML_PARSER = {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai a:"aa",
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai b:"bb"
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai };
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai function MyWidget(config) {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai MyWidget.superclass.constructor.apply(this, arguments);
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai }
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.extend(MyWidget, Y.Base, {}, {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai HTML_PARSER : {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai a:"a"
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai },
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai _buildCfg : {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai aggregates : ["HTML_PARSER"]
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai }
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai });
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai var MyClass = Y.Base.create("myClass", MyWidget, [Ext1]);
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
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
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
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai },
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "test:overrides-ext-wins" : function() {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
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 ];
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai function Ext1() {}
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Ext1.prototype.methodOne = function() {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("ext1::methodOne");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai };
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Ext1.ATTRS = {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai attr1 : {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai value:"attr1-ext1"
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai },
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai attr2 : {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai value:"attr2-ext1",
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai setter: function(val) {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("ext1::attr2::setter");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai return val;
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai }
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai },
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai attr3: {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai value:"attr3-ext1"
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai }
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai };
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai function MyClass() {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai MyClass.superclass.constructor.apply(this, arguments);
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai }
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai MyClass.NAME = "myClass";
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai MyClass.ATTRS = {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai attr1 : {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai value:"attr1-myClass"
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai },
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai attr2 : {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai value:"attr2-myClass",
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai setter: function(val) {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("myClass::attr2::setter");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai return val;
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai }
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai },
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai attr4 : {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai value:"attr4-myClass"
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai }
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai };
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.extend(MyClass, Y.Base, {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai methodOne : function() {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("myClass::methodOne");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai }
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai });
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.Base.mix(MyClass, [Ext1]);
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
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
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai // only set o1
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai o1.set("attr2", "foo");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
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
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
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
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
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai o1.methodOne();
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai o2.methodOne();
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.ArrayAssert.itemsAreEqual(expectedMethodCalls, actualMethodCalls, "Unexpected method calls");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai },
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "test:overrides-host-wins" : function() {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
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 ];
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai function Ext1() {}
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Ext1.prototype.methodOne = function() {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("ext1::methodOne");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai };
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Ext1.ATTRS = {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai attr1 : {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai value:"attr1-ext1"
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai },
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai attr2 : {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai value:"attr2-ext1",
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai setter: function(val) {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("ext1::attr2::setter");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai return val;
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai }
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai },
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai attr3: {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai value:"attr3-ext1"
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai }
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai };
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai var MyClass = Y.Base.create("myClass", Y.Base, [Ext1], {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai methodOne : function() {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("myClass::methodOne");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai }
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai }, {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai ATTRS : {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai attr1 : {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai value:"attr1-myClass"
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai },
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai attr2 : {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai value:"attr2-myClass",
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai setter: function(val) {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("myClass::attr2::setter");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai return val;
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai }
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai },
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai attr4 : {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai value:"attr4-myClass"
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai }
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai }
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai });
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
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
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai // only set o1
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai o1.set("attr2", "foo");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
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
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
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
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
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai o1.methodOne();
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai o2.methodOne();
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.ArrayAssert.itemsAreEqual(expectedMethodCalls, actualMethodCalls, "Unexpected method calls");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai },
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "test:multiext-complex" : function() {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
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 ];
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai function Ext1() {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("ext1::constructor");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai }
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Ext1.prototype.initializer = function() {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("ext1::initializer");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai };
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Ext1.prototype.methodTwo = function() {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("ext1::methodTwo");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai };
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Ext1.prototype.methodThree = function() {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("ext1::methodThree");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai };
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Ext1.ATTRS = {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai attr2 : {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai value:"ext1-attr2"
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai },
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai attr3 : {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai value:"ext1-attr3",
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai setter: function(val) {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("ext1::attr3::setter");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai return val;
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai }
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai },
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai attr4: {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai value:"ext1-attr4"
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai }
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai };
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai function Ext2() {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("ext2::constructor");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai }
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Ext2.prototype.initializer = function() {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("ext2::initializer");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai };
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Ext2.prototype.methodThree = function() {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("ext2::methodThree");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai };
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Ext2.prototype.methodFour = function() {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("ext2::methodFour");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai };
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Ext2.ATTRS = {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai attr3 : {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai value:"ext2-attr3",
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai setter: function(val) {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("ext2::attr3::setter");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai return val;
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai }
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai },
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai attr4 : {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai value:"ext2-attr4"
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai }
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai };
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai var MyClass = Y.Base.create("myClass", Y.Base, [Ext1, Ext2], {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai initializer: function() {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("myClass::initializer");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai },
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai methodOne : function() {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("myClass::methodOne");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai },
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai methodTwo : function() {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("myClass::methodTwo");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai },
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai methodFive : function() {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("myClass::methodFive");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai }
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai }, {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai ATTRS : {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai attr1 : {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai value:"myClass-attr1"
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai },
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai attr5 : {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai value:"myClass-attr5"
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai }
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai }
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai });
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai var o1 = new MyClass();
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai var o2 = new MyClass();
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
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
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
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
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
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
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai o1.methodOne();
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai o2.methodOne();
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai o1.methodTwo();
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai o2.methodTwo();
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai o1.methodThree();
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai o2.methodThree();
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai o1.methodFour();
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai o2.methodFour();
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai o1.methodFive();
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai o2.methodFive();
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.ArrayAssert.itemsAreEqual(expectedMethodCalls, actualMethodCalls, "Unexpected method calls");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai },
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "test:classstructure" : function() {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai function Ext1() {}
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Ext1.prototype.extOne = function() {};
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai function Ext2() {}
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Ext2.prototype.extTwo = function() {};
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai var MyClassTwo = Y.Base.create("myClassTwo", Y.Base, [Ext1, Ext2], {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai initializer: function() {},
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai methodOne: function() {}
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai });
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai var MyClassOne = Y.Base.create("myClassOne", Y.Base, [Ext1], {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai initializer: function() {},
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai methodOne: function() {}
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai });
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai var o1 = new MyClassOne();
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai var o2 = new MyClassTwo();
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
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
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
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
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
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
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
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
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
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai // Make sure Y.Base was untouched.
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai var b = new Y.Base();
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
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");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.Assert.isFalse(MyClassOne === Y.Base);
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.Assert.isFalse(MyClassTwo === Y.Base);
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai },
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
fda0ebbfc3632b3acc0eed183cc58255439e9e02Satyen Desai "test:mutli-inheritance-from-base" : function() {
fda0ebbfc3632b3acc0eed183cc58255439e9e02Satyen Desai
fda0ebbfc3632b3acc0eed183cc58255439e9e02Satyen Desai var actualMethodCalls = [],
fda0ebbfc3632b3acc0eed183cc58255439e9e02Satyen Desai expectedMethodCalls = [
fda0ebbfc3632b3acc0eed183cc58255439e9e02Satyen Desai "myClassOne::initializer",
fda0ebbfc3632b3acc0eed183cc58255439e9e02Satyen Desai 10,
fda0ebbfc3632b3acc0eed183cc58255439e9e02Satyen Desai "myExt::initializer",
fda0ebbfc3632b3acc0eed183cc58255439e9e02Satyen Desai "myClassOne::afterInit"
fda0ebbfc3632b3acc0eed183cc58255439e9e02Satyen Desai ];
fda0ebbfc3632b3acc0eed183cc58255439e9e02Satyen Desai
fda0ebbfc3632b3acc0eed183cc58255439e9e02Satyen Desai var Ext1 = Y.Base.create("myExt", Y.Base, [], {
fda0ebbfc3632b3acc0eed183cc58255439e9e02Satyen Desai
fda0ebbfc3632b3acc0eed183cc58255439e9e02Satyen Desai initializer: function() {
fda0ebbfc3632b3acc0eed183cc58255439e9e02Satyen Desai actualMethodCalls.push("myExt::initializer");
fda0ebbfc3632b3acc0eed183cc58255439e9e02Satyen Desai }
fda0ebbfc3632b3acc0eed183cc58255439e9e02Satyen Desai
fda0ebbfc3632b3acc0eed183cc58255439e9e02Satyen Desai });
fda0ebbfc3632b3acc0eed183cc58255439e9e02Satyen Desai
fda0ebbfc3632b3acc0eed183cc58255439e9e02Satyen Desai var MyClassOne = Y.Base.create("myClassOne", Y.Base, [Ext1], {
fda0ebbfc3632b3acc0eed183cc58255439e9e02Satyen Desai
fda0ebbfc3632b3acc0eed183cc58255439e9e02Satyen Desai initializer: function() {
fda0ebbfc3632b3acc0eed183cc58255439e9e02Satyen Desai actualMethodCalls.push("myClassOne::initializer");
fda0ebbfc3632b3acc0eed183cc58255439e9e02Satyen Desai actualMethodCalls.push(this.get("myAttr"));
fda0ebbfc3632b3acc0eed183cc58255439e9e02Satyen Desai }
fda0ebbfc3632b3acc0eed183cc58255439e9e02Satyen Desai
fda0ebbfc3632b3acc0eed183cc58255439e9e02Satyen Desai }, {
fda0ebbfc3632b3acc0eed183cc58255439e9e02Satyen Desai ATTRS : {
fda0ebbfc3632b3acc0eed183cc58255439e9e02Satyen Desai myAttr: {
fda0ebbfc3632b3acc0eed183cc58255439e9e02Satyen Desai value: 10
fda0ebbfc3632b3acc0eed183cc58255439e9e02Satyen Desai }
fda0ebbfc3632b3acc0eed183cc58255439e9e02Satyen Desai }
fda0ebbfc3632b3acc0eed183cc58255439e9e02Satyen Desai });
fda0ebbfc3632b3acc0eed183cc58255439e9e02Satyen Desai
fda0ebbfc3632b3acc0eed183cc58255439e9e02Satyen Desai var o = new MyClassOne( {
fda0ebbfc3632b3acc0eed183cc58255439e9e02Satyen Desai after: {
fda0ebbfc3632b3acc0eed183cc58255439e9e02Satyen Desai init: function() {
fda0ebbfc3632b3acc0eed183cc58255439e9e02Satyen Desai actualMethodCalls.push("myClassOne::afterInit");
fda0ebbfc3632b3acc0eed183cc58255439e9e02Satyen Desai }
fda0ebbfc3632b3acc0eed183cc58255439e9e02Satyen Desai }
fda0ebbfc3632b3acc0eed183cc58255439e9e02Satyen Desai });
fda0ebbfc3632b3acc0eed183cc58255439e9e02Satyen Desai
fda0ebbfc3632b3acc0eed183cc58255439e9e02Satyen Desai Y.ArrayAssert.itemsAreEqual(expectedMethodCalls, actualMethodCalls, "Unexpected method calls");
fda0ebbfc3632b3acc0eed183cc58255439e9e02Satyen Desai
fda0ebbfc3632b3acc0eed183cc58255439e9e02Satyen Desai },
fda0ebbfc3632b3acc0eed183cc58255439e9e02Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai "test:extend" : function() {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
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 ];
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai function Ext1() {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("ext1::constructor");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai }
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Ext1.prototype.extOne = function() {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("ext1::extOne");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai };
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Ext1.prototype.initializer = function() {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("ext1::initializer");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai };
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai function Ext2() {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("ext2::constructor");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai }
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Ext2.prototype.extTwo = function() {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("ext2::extTwo");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai };
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Ext2.prototype.initializer = function() {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("ext2::initializer");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai };
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai var MyClassOne = Y.Base.create("myClassOne", Y.Base, [Ext1], {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai initializer: function() {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("myClassOne::initializer");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai },
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai methodOne: function() {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("myClassOne::methodOne");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai }
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai });
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai var MyClassTwo = Y.Base.create("myClassTwo", MyClassOne, [Ext2], {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai initializer: function() {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("myClassTwo::initializer");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai },
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai methodTwo: function() {
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai actualMethodCalls.push("myClassTwo::methodTwo");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai }
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai });
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai var o = new MyClassTwo();
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai o.methodOne();
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai o.methodTwo();
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai o.extOne();
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai o.extTwo();
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.ArrayAssert.itemsAreEqual(expectedMethodCalls, actualMethodCalls, "Unexpected method calls");
9f74fe13660a0d9d411c97798c85863de1745bbfSatyen Desai },
9f74fe13660a0d9d411c97798c85863de1745bbfSatyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai "test:mainclass-statics" : function() {
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai function Ext1() {}
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai Ext1.prototype.extOne = function() {};
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai Ext1.prototype.initializer = function() {};
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai Ext1.prototype.methodOne = function() {
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai return "methodOne";
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai };
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai Ext1.STATIC_ONE = "static_one";
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai Ext1.STATIC_TWO = "static_two";
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai Ext1.STATIC_THREE = "static_three";
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai var MyClass = Y.extend(function() {
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai MyClass.superclass.constructor.apply(this, arguments);
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai }, Y.Base, null, {
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai NAME : "myClass",
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai _buildCfg : {
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai statics : ["STATIC_ONE", "STATIC_TWO"]
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai }
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai });
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai var MyBuiltClass = Y.Base.create("myBuiltClass", MyClass, [Ext1]);
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai var o = new MyBuiltClass();
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai Y.Assert.isTrue(o instanceof MyBuiltClass);
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai Y.Assert.isFunction(o.methodOne); // prototype properties copied
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai Y.Assert.isFunction(o.init); // but prototype not switched completely by mistake
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai Y.Assert.areEqual("static_one", MyBuiltClass.STATIC_ONE);
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai Y.Assert.areEqual("static_two", MyBuiltClass.STATIC_TWO);
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai Y.Assert.isFalse("STATIC_THREE" in MyBuiltClass);
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai Y.Assert.isFalse(MyBuiltClass.ATTRS === Ext1.ATTRS, "Ext1.ATTRS shouldn't have been copied over, it should be aggregated");
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai },
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai "test:mainclass-statics" : function() {
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai function Ext1() {}
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai Ext1.prototype.extOne = function() {};
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai Ext1.prototype.initializer = function() {};
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai Ext1.prototype.methodOne = function() {
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai return "methodOne";
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai };
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai Ext1.STATIC_ONE = "static_one";
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai Ext1.STATIC_TWO = "static_two";
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai Ext1.STATIC_THREE = "static_three";
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai var MyClass = Y.extend(function() {
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai MyClass.superclass.constructor.apply(this, arguments);
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai }, Y.Base, null, {
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai NAME : "myClass",
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai _buildCfg : {
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai statics : ["STATIC_ONE", "STATIC_TWO"]
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai }
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai });
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai var MyBuiltClass = Y.Base.create("myBuiltClass", MyClass, [Ext1]);
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai var o = new MyBuiltClass();
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai Y.Assert.isTrue(o instanceof MyBuiltClass);
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai Y.Assert.isFunction(o.methodOne); // prototype properties copied
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai Y.Assert.isFunction(o.init); // but prototype not switched completely by mistake
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai Y.Assert.areEqual("static_one", MyBuiltClass.STATIC_ONE);
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai Y.Assert.areEqual("static_two", MyBuiltClass.STATIC_TWO);
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai Y.Assert.isFalse("STATIC_THREE" in MyBuiltClass);
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai Y.Assert.isFalse(MyBuiltClass.ATTRS === Ext1.ATTRS, "Ext1.ATTRS shouldn't have been copied over, it should be aggregated");
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai },
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai "test:mainclass-aggregates" : function() {
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai function Ext1() {}
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai Ext1.AGG = {
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai "foo": true
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai };
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai function Ext2() {}
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai Ext2.AGG = {
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai "bar": true
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai };
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai var MyClass = Y.extend(function() {
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai MyClass.superclass.constructor.apply(this, arguments);
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai }, Y.Base, null, {
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai NAME : "myClass",
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai _buildCfg : {
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai aggregates : ["AGG"]
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai }
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai });
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai var MyBuiltClass = Y.Base.create("myBuiltClass", MyClass, [Ext1, Ext2]);
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai var o = new MyBuiltClass();
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai Y.ObjectAssert.areEqual({
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai foo:true,
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai bar:true
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai }, MyBuiltClass.AGG);
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai },
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai "test:mainclass-custom" : function() {
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai function Ext1() {}
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai Ext1.prototype.extOne = function() {};
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai Ext1.prototype.methodOne = function() {
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai return "methodOne";
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai };
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai Ext1.CUST = {
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai foo: [1],
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai bar: [1]
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai };
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai function Ext2() {}
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai Ext2.prototype.extTwo = function() {};
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai Ext2.prototype.methodTwo = function() {
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai return "methodOne";
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai };
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai Ext2.CUST = {
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai foo: [2, 3],
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai bar: [2, 3, 4]
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai };
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai // ---
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai var MyClass = Y.extend(function() {
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai MyClass.superclass.constructor.apply(this, arguments);
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai }, Y.Base, null, {
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai NAME : "myClass",
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai _buildCfg : {
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai custom : {
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai CUST : function(p, r, s) {
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai r[p] = r[p] || {
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai foo:[],
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai bar:[]
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai };
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai if (s[p]) {
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai if (s[p].foo) {
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai r[p].foo = r[p].foo.concat(s[p].foo);
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai }
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai if (s[p].bar) {
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai r[p].bar = r[p].bar.concat(s[p].bar);
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai }
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai }
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai }
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai }
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai }
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai });
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai var MyClass1 = Y.Base.create("myClass1", MyClass, [Ext1]);
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai var myclass1 = new MyClass1();
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai Y.Assert.isTrue(myclass1 instanceof MyClass1);
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai Y.Assert.isFunction(myclass1.methodOne);
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai Y.Assert.isFunction(myclass1.init);
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai // ObjectAssert.areEqual doesn't work: values don't == compare
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai Y.ObjectAssert.hasKeys({
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai bar:[1],
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai foo:[1]
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai }, MyClass1.CUST, "Class1 - object assert");
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai Y.ArrayAssert.itemsAreEqual([1], MyClass1.CUST.foo, "Class1 foo assert");
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai Y.ArrayAssert.itemsAreEqual([1], MyClass1.CUST.bar, "Class1 bar assert");
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai Y.Assert.isFalse(MyClass1.CUST === Ext1.CUST, "Ext1.CUST shouldn't have been copied over");
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai // ---
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai var MyClass2 = Y.Base.create("myClass2", MyClass, [Ext1, Ext2]);
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai var myclass2 = new MyClass2();
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai Y.Assert.isTrue(myclass2 instanceof MyClass2);
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai Y.Assert.isFunction(myclass2.methodTwo); // prototype properties copied
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai Y.Assert.isFunction(myclass2.init); // but prototype not switched completely by mistake
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai // ObjectAssert.areEqual doesn't work: values don't == compare
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai Y.ObjectAssert.hasKeys({
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai foo:[1,2,3],
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai bar:[1,2,3,4]
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai }, MyClass2.CUST);
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai Y.ArrayAssert.itemsAreEqual([1,2,3], MyClass2.CUST.foo);
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai Y.ArrayAssert.itemsAreEqual([1,2,3,4], MyClass2.CUST.bar);
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai Y.Assert.isFalse(MyClass2.CUST === Ext1.CUST, "Ext1.CUST shouldn't have been copied over");
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai Y.Assert.isFalse(MyClass2.CUST === Ext2.CUST, "Ext2.CUST shouldn't have been copied over");
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai },
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai "test:extCfg-custom" : function() {
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai function Ext1() {}
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai Ext1.prototype.extOne = function() {};
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai Ext1.prototype.methodOne = function() {
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai return "methodOne";
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai };
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai Ext1.CUST = {
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai foo: [1],
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai bar: [1]
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai };
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai Ext1._buildCfg = {
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai custom : {
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai CUST : function(p, r, s) {
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai r[p] = r[p] || {
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai foo:[],
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai bar:[]
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai };
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai if (s[p]) {
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai if (s[p].foo) {
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai r[p].foo = r[p].foo.concat(s[p].foo);
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai }
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai if (s[p].bar) {
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai r[p].bar = r[p].bar.concat(s[p].bar);
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai }
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai }
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai }
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai }
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai };
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai function Ext2() {}
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai Ext2.prototype.extTwo = function() {};
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai Ext2.prototype.methodTwo = function() {
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai return "methodOne";
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai };
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai Ext2.CUST = {
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai foo: [2, 3],
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai bar: [2, 3, 4]
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai };
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai // ---
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai var MyClass1 = Y.Base.create("myClass1", Y.Base, [Ext1]);
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai var myclass1 = new MyClass1();
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai Y.Assert.isTrue(myclass1 instanceof MyClass1);
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai Y.Assert.isFunction(myclass1.methodOne);
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai Y.Assert.isFunction(myclass1.init);
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai // ObjectAssert.areEqual doesn't work: values don't == compare
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai Y.ObjectAssert.hasKeys({
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai bar:[1],
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai foo:[1]
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai }, MyClass1.CUST, "Class1 - object assert");
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai Y.ArrayAssert.itemsAreEqual([1], MyClass1.CUST.foo, "Class1 foo assert");
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai Y.ArrayAssert.itemsAreEqual([1], MyClass1.CUST.bar, "Class1 bar assert");
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai Y.Assert.isFalse(MyClass1.CUST === Ext1.CUST, "Ext1.CUST shouldn't have been copied over");
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai // ---
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai var MyClass2 = Y.Base.create("myClass2", Y.Base, [Ext1, Ext2]);
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai var myclass2 = new MyClass2();
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai Y.Assert.isTrue(myclass2 instanceof MyClass2);
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai Y.Assert.isFunction(myclass2.methodTwo); // prototype properties copied
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai Y.Assert.isFunction(myclass2.init); // but prototype not switched completely by mistake
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai // ObjectAssert.areEqual doesn't work: values don't == compare
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai Y.ObjectAssert.hasKeys({
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai foo:[1,2,3],
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai bar:[1,2,3,4]
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai }, MyClass2.CUST);
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai Y.ArrayAssert.itemsAreEqual([1,2,3], MyClass2.CUST.foo);
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai Y.ArrayAssert.itemsAreEqual([1,2,3,4], MyClass2.CUST.bar);
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai Y.Assert.isFalse(MyClass2.CUST === Ext1.CUST, "Ext1.CUST shouldn't have been copied over");
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai Y.Assert.isFalse(MyClass2.CUST === Ext2.CUST, "Ext2.CUST shouldn't have been copied over");
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai },
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai "test:extCfg-statics" : function() {
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai function Ext1() {}
9f74fe13660a0d9d411c97798c85863de1745bbfSatyen Desai
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai Ext1.prototype.extOne = function() {};
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai Ext1.prototype.initializer = function() {};
9f74fe13660a0d9d411c97798c85863de1745bbfSatyen Desai Ext1.prototype.methodOne = function() {
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai return "methodOne";
9f74fe13660a0d9d411c97798c85863de1745bbfSatyen Desai };
9f74fe13660a0d9d411c97798c85863de1745bbfSatyen Desai
9f74fe13660a0d9d411c97798c85863de1745bbfSatyen Desai Ext1.STATIC_ONE = "static_one";
9f74fe13660a0d9d411c97798c85863de1745bbfSatyen Desai Ext1.STATIC_TWO = "static_two";
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai Ext1.STATIC_THREE = "static_three";
9f74fe13660a0d9d411c97798c85863de1745bbfSatyen Desai
9f74fe13660a0d9d411c97798c85863de1745bbfSatyen Desai Ext1._buildCfg = {
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai statics: ["STATIC_ONE", "STATIC_TWO"]
9f74fe13660a0d9d411c97798c85863de1745bbfSatyen Desai };
9f74fe13660a0d9d411c97798c85863de1745bbfSatyen Desai
9f74fe13660a0d9d411c97798c85863de1745bbfSatyen Desai var MyClass = Y.Base.create("myClass", Y.Base, [Ext1]);
9f74fe13660a0d9d411c97798c85863de1745bbfSatyen Desai
9f74fe13660a0d9d411c97798c85863de1745bbfSatyen Desai var myclass = new MyClass();
9f74fe13660a0d9d411c97798c85863de1745bbfSatyen Desai
9f74fe13660a0d9d411c97798c85863de1745bbfSatyen Desai Y.Assert.isTrue(myclass instanceof MyClass);
9f74fe13660a0d9d411c97798c85863de1745bbfSatyen Desai
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
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai
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
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai Y.Assert.isFalse(MyClass.ATTRS === Ext1.ATTRS, "Ext1.ATTRS shouldn't have been copied over");
9f74fe13660a0d9d411c97798c85863de1745bbfSatyen Desai },
9f74fe13660a0d9d411c97798c85863de1745bbfSatyen Desai
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai "test:extCfg-aggregates" : function() {
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai function Ext1() {}
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai Ext1.prototype.extOne = function() {};
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai Ext1.prototype.methodOne = function() {
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai return "methodOne";
9f74fe13660a0d9d411c97798c85863de1745bbfSatyen Desai };
9f74fe13660a0d9d411c97798c85863de1745bbfSatyen Desai
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai Ext1.AGGREGATE_ONE = {
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai a: 1,
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai b: 2,
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai c: 3
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai };
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai Ext1._buildCfg = {
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai aggregates: ["AGGREGATE_ONE"]
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai };
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai function Ext2() {}
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai Ext2.prototype.extTwo = function() {};
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai Ext2.prototype.methodTwo = function() {
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai return "methodTwo";
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai };
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai Ext2.AGGREGATE_ONE = {
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai c:33,
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai d:4
9f74fe13660a0d9d411c97798c85863de1745bbfSatyen Desai };
9f74fe13660a0d9d411c97798c85863de1745bbfSatyen Desai
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai var MyClass1 = Y.Base.create("myClass1", Y.Base, [Ext1]);
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai var myclass1 = new MyClass1();
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai Y.Assert.isTrue(myclass1 instanceof MyClass1);
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai
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
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai Y.ObjectAssert.areEqual({
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai a:1,
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai b:2,
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai c:3
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai }, MyClass1.AGGREGATE_ONE);
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai Y.Assert.isFalse(MyClass1.AGGREGATE_ONE === Ext1.AGGREGATE_ONE, "Ext1.AGGREGATE_ONE shouldn't have been copied over");
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai Y.Assert.isFalse(MyClass1.ATTRS === Ext1.ATTRS, "Ext1.ATTRS shouldn't have been copied over with statics:true");
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai var MyClass2 = Y.Base.create("myClass2", Y.Base, [Ext1, Ext2]);
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai var myclass2 = new MyClass2();
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai Y.Assert.isTrue(myclass2 instanceof MyClass2);
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai
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
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai Y.ObjectAssert.areEqual({
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai a:1,
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai b:2,
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai c:33,
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai d:4
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai }, MyClass2.AGGREGATE_ONE);
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai
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 },
b66fb0b516da11d7d0a3e6151dab92af15eac49cSatyen Desai
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai "test:extCfg-custom" : function() {
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai function Ext1() {}
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai Ext1.prototype.extOne = function() {};
9f74fe13660a0d9d411c97798c85863de1745bbfSatyen Desai Ext1.prototype.methodOne = function() {
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai return "methodOne";
9f74fe13660a0d9d411c97798c85863de1745bbfSatyen Desai };
9f74fe13660a0d9d411c97798c85863de1745bbfSatyen Desai
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai Ext1.CUST = {
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai foo: [1],
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai bar: [1]
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai };
9f74fe13660a0d9d411c97798c85863de1745bbfSatyen Desai
9f74fe13660a0d9d411c97798c85863de1745bbfSatyen Desai Ext1._buildCfg = {
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai custom : {
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai CUST : function(p, r, s) {
9f74fe13660a0d9d411c97798c85863de1745bbfSatyen Desai
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai r[p] = r[p] || {
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai foo:[],
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai bar:[]
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai };
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai if (s[p]) {
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai if (s[p].foo) {
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai r[p].foo = r[p].foo.concat(s[p].foo);
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai }
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai if (s[p].bar) {
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai r[p].bar = r[p].bar.concat(s[p].bar);
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai }
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai }
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai }
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai }
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai };
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai function Ext2() {}
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai Ext2.prototype.extTwo = function() {};
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai Ext2.prototype.methodTwo = function() {
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai return "methodOne";
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai };
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai Ext2.CUST = {
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai foo: [2, 3],
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai bar: [2, 3, 4]
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai };
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai // ---
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai var MyClass1 = Y.Base.create("myClass1", Y.Base, [Ext1]);
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai var myclass1 = new MyClass1();
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai Y.Assert.isTrue(myclass1 instanceof MyClass1);
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai Y.Assert.isFunction(myclass1.methodOne);
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai Y.Assert.isFunction(myclass1.init);
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai // ObjectAssert.areEqual doesn't work: values don't == compare
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai Y.ObjectAssert.hasKeys({
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai bar:[1],
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai foo:[1]
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai }, MyClass1.CUST, "Class1 - object assert");
9f74fe13660a0d9d411c97798c85863de1745bbfSatyen Desai
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai Y.ArrayAssert.itemsAreEqual([1], MyClass1.CUST.foo, "Class1 foo assert");
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai Y.ArrayAssert.itemsAreEqual([1], MyClass1.CUST.bar, "Class1 bar assert");
9f74fe13660a0d9d411c97798c85863de1745bbfSatyen Desai
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai Y.Assert.isFalse(MyClass1.CUST === Ext1.CUST, "Ext1.CUST shouldn't have been copied over");
9f74fe13660a0d9d411c97798c85863de1745bbfSatyen Desai
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai // ---
9f74fe13660a0d9d411c97798c85863de1745bbfSatyen Desai
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai var MyClass2 = Y.Base.create("myClass2", Y.Base, [Ext1, Ext2]);
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai var myclass2 = new MyClass2();
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai Y.Assert.isTrue(myclass2 instanceof MyClass2);
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai
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
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai // ObjectAssert.areEqual doesn't work: values don't == compare
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai Y.ObjectAssert.hasKeys({
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai foo:[1,2,3],
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai bar:[1,2,3,4]
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai }, MyClass2.CUST);
52e73635546b2ee315b3d99cc7145a73ebc5b30eSatyen Desai
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
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");
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai },
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai "test:deprecated" : function() {
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai function Ext1() {}
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai Ext1.MY_AGG = {a:1};
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai Ext1.MY_STATICS = "a";
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai Ext1.MY_CUSTOM = "a";
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai function Ext2() {}
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai Ext2.MY_AGG = {b:2};
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai Ext2.MY_STATICS = "b";
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai Ext2.MY_CUSTOM = "b";
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai function Ext3() {}
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai Ext3.MY_AGG = {c:3};
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai Ext3.MY_STATICS = "c";
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai Ext3.MY_CUSTOM = "c";
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai function MyMainClass(cfg) {
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai MyMainClass.superclass.constructor.apply(this, arguments);
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai }
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai var MyBuiltClass = Y.Base.build("foo", MyMainClass, [Ext1, Ext2, Ext3], {
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai dynamic: true,
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai aggregates : ["MY_AGG"],
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai statics : ["MY_STATICS"],
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai custom : {
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai MY_CUSTOM : function(prop, r, s) {
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai r[prop] = r[prop] || "";
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai r[prop] = r[prop] + s[prop];
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai }
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai }
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai });
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai Y.ObjectAssert.areEqual({
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai a:1,
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai b:2,
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai c:3
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai }, MyBuiltClass.MY_AGG);
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai Y.Assert.areEqual("c", MyBuiltClass.MY_STATICS);
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai /* Currently broken. Will fix in 3.6.0pr1. Too late at this point, given the extreme edge caseness. */
9bdfc363ef897a298b7596475f598c1c4fd427b6Satyen Desai // Y.Assert.areEqual("abc", MyBuiltClass.MY_CUSTOM);
db748fdbe02870b4c78302a13fc95ab765d474c0Satyen Desai }
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai }));
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.Test.Runner.setName("Base Tests");
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.Test.Runner.add(suite);
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.Test.Runner.disableLogging();
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.Test.Runner.run();
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai var console;
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
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 '</pre>'
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai }).render();
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai }
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.Test.Runner.enableLogging();
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai Y.Test.Runner.run();
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai });
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai});
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai</script>
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai<p><input type="button" value="Run Tests" id="btnRun" disabled=true></p>
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai</body>
0709cd166604645c5511b892413b44ad6bce6b64Satyen Desai</html>