base-core.html revision 4cd36cd90f40231cd88acf6c0ab9d2fa89041bf0
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
2a40fdc2d34adb8a5c72a748449699666032d461Mark Andrews <script type="text/javascript" src="/build/yui/yui.js"></script>
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews #console .yui3-console-entry {
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews min-height:0;
c718d15a9a95054ee3c71540c02335426071fc6dMark Andrews #console .yui3-console-entry-fail .yui3-console-entry-cat {
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews background-color:red;
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews #console .yui3-console-entry-pass .yui3-console-entry-cat {
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews background-color:green;
c718d15a9a95054ee3c71540c02335426071fc6dMark Andrews #console .yui3-console-entry-perf .yui3-console-entry-cat {
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews background-color:blue;
91216cff91b34c9ff6e846dc23f248219cafe660Andreas Gustafsson position:static;
b6617c5adad7f12e5fcde1e873f7b982d247fe05Mark Andrews height:100%;
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews useBrowserConsole:false,
c718d15a9a95054ee3c71540c02335426071fc6dMark Andrews filter: (window.location.search.match(/[?&]filter=([^&]+)/) || [])[1] || 'min'
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews }).use("dump", "base-core", "console", "test", function(Y) {
ed178efa9ab8f813538fce4ff603b81ded9f1799Mark Andrews function areObjectsReallyEqual(o1, o2) {
1eb1e1e838d2ea00b166c918bf50764a95826be8Mark Andrews function Test(cfg, lazy, silentInit) {
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews this._lazyAddAttrs = lazy;
efb0e886f18894a1d2489f1ad74ad14b579e11c7Mark Andrews this._silentInit = silentInit;
91216cff91b34c9ff6e846dc23f248219cafe660Andreas Gustafsson Test.superclass.constructor.apply(this, arguments);
992616aaf75643a0c9f84826f0a1ed5a27e84328Mark Andrews setter: function(n) {
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews value: "Bar",
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews setter: function(n) {
45eca3a5d46ed15aee14d81f6cb6c9fb6f365344Mark Andrews value: false,
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews setter: function(lock) {
46e873c835bf7d9ec3e1097e0aceb8db5b1ae93aMark Andrews return lock;
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews value: false
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews value: false
6b5c57e52ac8c3e0af1547be3140ebbfb41a85b3Mark Andrews value: false
6b5c57e52ac8c3e0af1547be3140ebbfb41a85b3Mark Andrews value: false
6b5c57e52ac8c3e0af1547be3140ebbfb41a85b3Mark Andrews value: false,
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews setter: function(val) {
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews value: null,
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews setter: function(val) {
6b5c57e52ac8c3e0af1547be3140ebbfb41a85b3Mark Andrews return false;
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews value: ['default'],
46e873c835bf7d9ec3e1097e0aceb8db5b1ae93aMark Andrews getter: function() {
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews return false;
0d3490f93bb980fde704055e74c1b508987a5fe4Mark Andrews setter: function(g) {
605bd686e437162b5ab65ac4e7c1be0bba1886ddMark Andrews value: null,
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington setter: function(g) {
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews writeOnce: true,
992616aaf75643a0c9f84826f0a1ed5a27e84328Mark Andrews writeOnce: true,
1eb1e1e838d2ea00b166c918bf50764a95826be8Mark Andrews writeOnce: true,
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews foo: function() {}
992616aaf75643a0c9f84826f0a1ed5a27e84328Mark Andrews function AttrHost(config) {
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington AttrHost.superclass.constructor.apply(this, arguments);
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews value:"AVal",
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews validator: function(value) {
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews return (value === undefined || Y.Lang.isString(value) || Y.Lang.isNumber(value));
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews writeOnce: true
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews value:"DVal",
efb0e886f18894a1d2489f1ad74ad14b579e11c7Mark Andrews readOnly: true
efb0e886f18894a1d2489f1ad74ad14b579e11c7Mark Andrews value:"EVal",
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington writeOnce: true
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews valueFn: function() {
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington writeOnce:"initOnly"
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington function ExtendedAttrHost(config) {
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington AttrHost.superclass.constructor.apply(this, arguments);
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington ExtendedAttrHost.NAME = "extendedAttrHost";
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington value:"ExtAVal"
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington value:"ExtBVal",
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington validator: function(value) {
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington return ((value == undefined) || Y.Lang.isString(value));
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington value:"ExtDVal",
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington setter: function(val) {
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington return (Y.Lang.isString(val)) ? val.toUpperCase() : val;
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington value:"ExtEVal",
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington getter: function(val) {
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington return (Y.Lang.isString(val)) ? val.toLowerCase() : val;
eaccf5e805405de257b5a4840256c580fefe00e3Mark Andrews value:"ExtFVal",
0d3490f93bb980fde704055e74c1b508987a5fe4Mark Andrews setter: function(val) {
d4ef65050feac78554addf6e16a06c6e2e0bd331Brian Wellington return (Y.Lang.isString(val)) ? val : Y.AttributeCore.INVALID_VALUE;
0d3490f93bb980fde704055e74c1b508987a5fe4Mark Andrews setter: function(val) { // Should be ignored. Can't set setters for complex sub vals
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington return val + 10000;
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington valueFn:function(val) {
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington // Referring to H before it's set up
bf54ac86eeddce16b67c525d38d1096cc956f478Mark Andrews return this.get("H") + 10;
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews getter: function(val) {
68baa2d193672c482b7ea07ece349e7b1ceb96e6Mark Andrews return val*5;
eaccf5e805405de257b5a4840256c580fefe00e3Mark Andrews getter: "_getI",
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews setter: "_setI",
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington validator: "_validateI"
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington PassThrough : {
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington value: "passthrough",
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington getter: function(val) {
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington return this._passthrough;
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington setter: function(val) {
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington this._passthrough = val;
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington getter: function(val) {
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.extend(ExtendedAttrHost, AttrHost, {
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington _validateI : function(val, name) {
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington if (name.indexOf(".") == -1) {
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews return true;
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews _getI : function(val, name) {
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington if (name.indexOf(".") == -1) {
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington _setI : function(val, name) {
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington if (name.indexOf(".") == -1) {
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington var basicTemplate = {
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington name: "Core Base Class Tests",
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington createHost : function(cfg) {
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington return new AttrHost(cfg);
b7aab05edae933e169d5f83c653935b17c7f0a8bMark Andrews setUp : function() {},
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington tearDown : function() {},
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington testDefault : function() {
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews Y.Assert.areEqual("DVal", h.get("D")); // Readonly
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews Y.Assert.areEqual("EVal", h.get("E")); // Write once, but not twice
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews testConstructor : function() {
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews var h = this.createHost({A:"MyAVal", B:"MyBVal", C:"MyCVal", D:"MyDVal", E:"MyEVal", DE:"MyDEVal"});
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews h.set("C", "MyNewCVal");
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews h.set("D", "MyNewDVal");
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews h.set("E", "MyNewEVal");
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.Assert.areEqual("MyCVal", h.get("C")); // Write Once, set in constructor
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.Assert.areEqual("DVal", h.get("D")); // Read Only
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.Assert.areEqual("MyEVal", h.get("E")); // Write Once, set in constructor
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington testSet : function() {
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington h.set("A", "MyNewAVal");
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington h.set("B", "MyNewBVal");
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington h.set("C", "MyNewCVal");
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington h.set("D", "MyNewDVal");
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington h.set("E", "MyNewEVal");
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington h.set("DE", "MyNewDEVal");
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.Assert.areEqual("MyNewAVal", h.get("A"));
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.Assert.areEqual("MyNewBVal", h.get("B"));
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.Assert.areEqual("MyNewCVal", h.get("C")); // Write once, set on first set.
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.Assert.areEqual("DVal", h.get("D")); // Read Only
bf54ac86eeddce16b67c525d38d1096cc956f478Mark Andrews Y.Assert.areEqual("EVal", h.get("E")); // Write Once
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.Assert.areEqual("MyNewDEVal", h.get("DE"));
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews testWriteOncePostInit : function() {
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews h.set("E", "MyNewEVal");
eaccf5e805405de257b5a4840256c580fefe00e3Mark Andrews h.set("C", "MyNewCVal");
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.Assert.areEqual("MyNewCVal", h.get("C")); // Write Once, default value
75216e007570b8ea36b3ac9cca096bf70c0ca6f6Mark Andrews Y.Assert.areEqual("EVal", h.get("E")); // Write Once, default value
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington testWriteOnce : function() {
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews var h = this.createHost({E:"MyEVal"});
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews h.set("E", "MyNewEVal");
d4ef65050feac78554addf6e16a06c6e2e0bd331Brian Wellington Y.Assert.areEqual("MyEVal", h.get("E")); // Write Once, on init
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews testWriteOnceInitOnly : function() {
83a810eba60ae87341a2d177ff60d834e26d7a90Mark Andrews var h = this.createHost({ initOnly: "initOnlyVal"});
d4ef65050feac78554addf6e16a06c6e2e0bd331Brian Wellington h.set("initOnly", "NewInitOnlyVal");
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews Y.Assert.areEqual("initOnlyVal", h.get("initOnly"));
2bef3713093349af52ba61eaab07adf3207da873Mark Andrews testWriteOnceInitOnlyNotProvided : function() {
75216e007570b8ea36b3ac9cca096bf70c0ca6f6Mark Andrews h1.set("initOnly", "InitOnlyVal");
75216e007570b8ea36b3ac9cca096bf70c0ca6f6Mark Andrews Y.Assert.areEqual(undefined, h1.get("initOnly"));
83a810eba60ae87341a2d177ff60d834e26d7a90Mark Andrews testAdHocGetSet : function() {
75216e007570b8ea36b3ac9cca096bf70c0ca6f6Mark Andrews h.set("AdHoc", "TestAdHoc");
75216e007570b8ea36b3ac9cca096bf70c0ca6f6Mark Andrews Y.Assert.areEqual("TestAdHoc", h.get("AdHoc"));
75216e007570b8ea36b3ac9cca096bf70c0ca6f6Mark Andrews setter: function(val) {
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews h.set("AdHoc", "TestAdHocConfigured");
7e1a8f402e3881388db37152f71c698cb1f1c426Mark Andrews Y.Assert.areEqual("TESTADHOCCONFIGURED", h.get("AdHoc"));
75216e007570b8ea36b3ac9cca096bf70c0ca6f6Mark Andrews testAdHocConstructorEnabled : function() {
75216e007570b8ea36b3ac9cca096bf70c0ca6f6Mark Andrews A: "MyAVal",
75216e007570b8ea36b3ac9cca096bf70c0ca6f6Mark Andrews plugins : ["not"]
6fac7ff1f9ec9c3873d3b55c5079fa79aba1f146Mark Andrews // Only add AdHoc Attrs
6fac7ff1f9ec9c3873d3b55c5079fa79aba1f146Mark Andrews // Configured Attrs
6fac7ff1f9ec9c3873d3b55c5079fa79aba1f146Mark Andrews // Not _NON_ATTRS_CFG
6fac7ff1f9ec9c3873d3b55c5079fa79aba1f146Mark Andrews testAdHocConstructorDisabled : function() {
3a9a66b32adf379e680d18e92428058910880119Mark Andrews A: "MyAVal",
48b492d73ae5328c5efef4b9e0f22063e0ab058aMark Andrews plugins : ["not"]
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews // Only add AdHoc Attrs
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.Assert.areEqual(undefined, h.get("foo"));
7e5b2100ea65658a7ec3795919b4ecd29a6f118aMark Andrews // Configured attributes
75216e007570b8ea36b3ac9cca096bf70c0ca6f6Mark Andrews // Not _NON_ATTRS_CFG
2da2220fe7af2c45724b50b0187523b1fab0cf08Rob Austein testMassSetGet : function() {
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews "A" : "MyNewAVal",
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews "B": "MyNewBVal",
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews "C": "MyNewCVal",
3a9a66b32adf379e680d18e92428058910880119Mark Andrews "D": "MyNewDVal",
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews "E": "MyNewEVal",
7e5b2100ea65658a7ec3795919b4ecd29a6f118aMark Andrews "DE": "MyNewDEVal",
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington complex: "MyNewComplexVal"
3a9a66b32adf379e680d18e92428058910880119Mark Andrews var expectedVals = {
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews A: "MyNewAVal",
3a9a66b32adf379e680d18e92428058910880119Mark Andrews B: "MyNewBVal",
7e5b2100ea65658a7ec3795919b4ecd29a6f118aMark Andrews C: "MyNewCVal",
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews DE: "MyNewDEVal",
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington complex: "MyNewComplexVal",
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington initialized: true,
75216e007570b8ea36b3ac9cca096bf70c0ca6f6Mark Andrews destroyed: false
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.Assert.areEqual(expectedVals.A, h.get("A"));
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews Y.Assert.areEqual(expectedVals.C, h.get("C")); // Write once, set on first set.
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.Assert.areEqual(expectedVals.D, h.get("D")); // Read Only
75216e007570b8ea36b3ac9cca096bf70c0ca6f6Mark Andrews Y.Assert.areEqual(expectedVals.E, h.get("E")); // Write Once
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews Y.Assert.areEqual(expectedVals.DE, h.get("DE"));
75216e007570b8ea36b3ac9cca096bf70c0ca6f6Mark Andrews areObjectsReallyEqual(expectedVals, h.getAttrs());
75216e007570b8ea36b3ac9cca096bf70c0ca6f6Mark Andrews testModifiedAttrs : function() {
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington A: "MyNewAVal",
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews C: "MyNewCVal",
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews D: "MyNewDVal"
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews var expectedVals = {
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews A: "MyNewAVal",
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews initialized:true
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington areObjectsReallyEqual(expectedVals, h.getAttrs(true));
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews testValidation : function() {
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews h.set("A", "MyAVal");
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.Assert.areEqual("MyAVal", h.get("A")); // Validation should prevent the attribute from being set
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews Y.Assert.areEqual(2, h.get("B")); // Validation should prevent the attribute from being set
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington testPrivateSet : function() {
75216e007570b8ea36b3ac9cca096bf70c0ca6f6Mark Andrews h.set("D", "MyNewDVal");
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington h.set("E", "MyNewEVal");
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews h._set("D", "TryDAgain");
3a9a66b32adf379e680d18e92428058910880119Mark Andrews h._set("E", "TryEAgain");
e076d0c88be69de7c190ab924d095e69d2e11f7aAndreas Gustafsson testComplexDefault : function() {
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.Assert.areEqual(2, h.get("complex.Y.A"));
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington areObjectsReallyEqual({A:1}, h.get("complex.X"));
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews areObjectsReallyEqual({A:2}, h.get("complex.Y"));
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews areObjectsReallyEqual({A:3}, h.get("complex.Z"));
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews var val = h.get("complex");
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.each(val, function(v, k) {
75216e007570b8ea36b3ac9cca096bf70c0ca6f6Mark Andrews areObjectsReallyEqual(v, o[k]);
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews testComplexSet : function() {
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.Assert.areEqual(111, h.get("complex.X.A"));
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.Assert.areEqual(112, h.get("complex.X.B"));
75216e007570b8ea36b3ac9cca096bf70c0ca6f6Mark Andrews areObjectsReallyEqual({A:111, B:112}, h.get("complex.X"));
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews Y.Assert.areEqual(undefined, h.get("complex.W"));
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews Y.Assert.areEqual(undefined, h.get("complex.W.B"));
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews Y.Assert.areEqual(undefined, h.get("complex.Y.A"));
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews testInitialValidation: function() {
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews var h = this.createHost({A:5});
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews Y.Assert.areEqual("AVal", h.get("A")); // Numerical value validation failure should revert to default value
75216e007570b8ea36b3ac9cca096bf70c0ca6f6Mark Andrews testProtect : function() {
75216e007570b8ea36b3ac9cca096bf70c0ca6f6Mark Andrews var q = h._protectAttrs(AttrHost.ATTRS);
53aed64e0f8553762fc0c380ee41cb42f514c7d5Brian Wellington Y.Assert.areEqual(Y.dump(AttrHost.ATTRS), Y.dump(q));
53aed64e0f8553762fc0c380ee41cb42f514c7d5Brian Wellington q.A.newprop = "new prop value";
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews q.A.value = "modified value";
75216e007570b8ea36b3ac9cca096bf70c0ca6f6Mark Andrews Y.Assert.areNotEqual(Y.dump(AttrHost.ATTRS), Y.dump(q));
7e1a8f402e3881388db37152f71c698cb1f1c426Mark Andrews var extendedTemplate = {
7e1a8f402e3881388db37152f71c698cb1f1c426Mark Andrews name: "Core Extended Class Tests",
7e1a8f402e3881388db37152f71c698cb1f1c426Mark Andrews createHost : function(cfg) {
7e1a8f402e3881388db37152f71c698cb1f1c426Mark Andrews return new ExtendedAttrHost(cfg);
7e1a8f402e3881388db37152f71c698cb1f1c426Mark Andrews setUp : function() {},
7e1a8f402e3881388db37152f71c698cb1f1c426Mark Andrews tearDown : function() {},
7e1a8f402e3881388db37152f71c698cb1f1c426Mark Andrews testDefault : function() {
7e1a8f402e3881388db37152f71c698cb1f1c426Mark Andrews Y.Assert.areEqual("EXTDVALexteval", h.get("DE"));
7e1a8f402e3881388db37152f71c698cb1f1c426Mark Andrews testConstructor : function() {
7e1a8f402e3881388db37152f71c698cb1f1c426Mark Andrews var h = this.createHost({A:"MyAVal", B:"MyBVal", C:"MyCVal", D:"MyDVal", E:"MyEVal", F:"MyFVal"});
7e1a8f402e3881388db37152f71c698cb1f1c426Mark Andrews h.set("C", "MyNewCVal");
7e1a8f402e3881388db37152f71c698cb1f1c426Mark Andrews h.set("D", "MyNewDVal");
7e1a8f402e3881388db37152f71c698cb1f1c426Mark Andrews h.set("E", "MyNewEVal");
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews Y.Assert.areEqual("EXTDVALmyeval", h.get("DE"));
75216e007570b8ea36b3ac9cca096bf70c0ca6f6Mark Andrews testSet : function() {
7e1a8f402e3881388db37152f71c698cb1f1c426Mark Andrews h.set("A", "MyNewAVal");
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews h.set("B", "MyNewBVal");
7e1a8f402e3881388db37152f71c698cb1f1c426Mark Andrews h.set("C", "MyNewCVal");
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews h.set("D", "MyNewDVal");
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews h.set("E", "MyNewEVal");
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington h.set("F", "MyNewFVal");
75216e007570b8ea36b3ac9cca096bf70c0ca6f6Mark Andrews h.set("DE", "MyNewDEVal");
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.Assert.areEqual("MyNewBVal", h.get("B"));
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews testAdHocGetSet : function() {
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.Assert.areEqual(undefined, h.get("AdHoc"));
75216e007570b8ea36b3ac9cca096bf70c0ca6f6Mark Andrews h.set("AdHoc", "TestAdHoc");
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews Y.Assert.areEqual("TestAdHoc", h.get("AdHoc"));
75216e007570b8ea36b3ac9cca096bf70c0ca6f6Mark Andrews testMassSetGet : function() {
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews "A" : "MyNewAVal",
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews "B": "MyNewBVal",
73eb75dc212911e4da58a3ce0a4672d3910193ebBrian Wellington "C": "MyNewCVal",
75216e007570b8ea36b3ac9cca096bf70c0ca6f6Mark Andrews "D": "MyNewDVal",
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews "E": "MyNewEVal",
bf54ac86eeddce16b67c525d38d1096cc956f478Mark Andrews "F": "MyNewFVal",
bf54ac86eeddce16b67c525d38d1096cc956f478Mark Andrews "DE": "MyNewDEVal",
73eb75dc212911e4da58a3ce0a4672d3910193ebBrian Wellington complex: "MyNewComplexVal",
75216e007570b8ea36b3ac9cca096bf70c0ca6f6Mark Andrews "I" : "MyNewIVal",
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews "PassThrough" : "MyPassThrough",
c6d4f781529d2f28693546b25b2967d44ec89e60Mark Andrews var expectedVals = {
c6d4f781529d2f28693546b25b2967d44ec89e60Mark Andrews A: "MyNewAVal",
c6d4f781529d2f28693546b25b2967d44ec89e60Mark Andrews B: "MyNewBVal",
605bd686e437162b5ab65ac4e7c1be0bba1886ddMark Andrews C: "MyNewCVal",
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews D: "EXTDVAL",
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington E: "exteval",
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews F: "MyNewFVal",
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews DE: "MyNewDEVal",
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews complex: "MyNewComplexVal",
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews I: "MyNewIVal",
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews PassThrough: "MyPassThrough",
75216e007570b8ea36b3ac9cca096bf70c0ca6f6Mark Andrews initialized:true,
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews destroyed:false
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.Assert.areEqual(expectedVals.A, h.get("A"));
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.Assert.areEqual(expectedVals.B, h.get("B"));
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.Assert.areEqual(expectedVals.C, h.get("C")); // Write once, set on first set.
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.Assert.areEqual(expectedVals.D, h.get("D")); // Read Only
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews Y.Assert.areEqual(expectedVals.E, h.get("E")); // Write Once
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.Assert.areEqual(expectedVals.DE, h.get("DE"));
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington areObjectsReallyEqual(expectedVals, h.getAttrs());
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews testModifiedAttrs : function() {
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews A: "MyNewAVal",
8227257b1c0224a7991e04bb79dc5059d5062dfbAndreas Gustafsson C: "MyNewCVal",
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews D: "MyNewDVal",
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews F: "MyNewFVal"
8227257b1c0224a7991e04bb79dc5059d5062dfbAndreas Gustafsson var expectedVals = {
75216e007570b8ea36b3ac9cca096bf70c0ca6f6Mark Andrews A: "MyNewAVal",
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews F: "MyNewFVal",
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington initialized:true
75216e007570b8ea36b3ac9cca096bf70c0ca6f6Mark Andrews areObjectsReallyEqual(expectedVals, h.getAttrs(true));
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews testValidation : function() {
75216e007570b8ea36b3ac9cca096bf70c0ca6f6Mark Andrews h.set("A", "MyAVal");
75216e007570b8ea36b3ac9cca096bf70c0ca6f6Mark Andrews Y.Assert.areEqual("MyAVal", h.get("A")); // Validation should prevent the attribute from being set
99f467f016d9354c7548b7d24b65ac986b118a52Andreas Gustafsson Y.Assert.areEqual("two", h.get("B")); // Validation should prevent the attribute from being set
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews Y.Assert.areEqual("two", h.get("B")); // Validation should prevent the attribute from being set
83a810eba60ae87341a2d177ff60d834e26d7a90Mark Andrews h.set("F", "MyNewFVal");
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.Assert.areEqual("MyNewFVal", h.get("F"));
b0804b92737de82fc15fb44e35f70797b4ee166fMark Andrews Y.Assert.areEqual("MyNewFVal", h.get("F")); // Validation should prevent the attribute from being set
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews testPrivateSet : function() {
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews h.set("D", "MyNewDVal");
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington h.set("E", "MyNewEVal");
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews h._set("D", "TryDAgain");
832cebe0cbc843785897f1c124ae54958028c4e7Mark Andrews h._set("E", "TryEAgain");
832cebe0cbc843785897f1c124ae54958028c4e7Mark Andrews testComplexDefault : function() {
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.Assert.areEqual(1111, h.get("complex.X.A"));
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews areObjectsReallyEqual({A:1111}, h.get("complex.X"));
91216cff91b34c9ff6e846dc23f248219cafe660Andreas Gustafsson areObjectsReallyEqual({A:2222}, h.get("complex.Y"));
91216cff91b34c9ff6e846dc23f248219cafe660Andreas Gustafsson areObjectsReallyEqual({A:3}, h.get("complex.Z"));
992616aaf75643a0c9f84826f0a1ed5a27e84328Mark Andrews var val = h.get("complex");
113aa279d1f5dbe77dfaa5a7f35623d49c85b77fMark Andrews Y.each(val, function(v, k) {
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews areObjectsReallyEqual(v, o[k]);
3341c8b653577f2f0cb8b72702ea6197035334ffMark Andrews testComplexSet : function() {
91216cff91b34c9ff6e846dc23f248219cafe660Andreas Gustafsson Y.Assert.areEqual(111, h.get("complex.X.A"));
1b0a1b6d994d736ccb243886c3ba188978003641Mark Andrews areObjectsReallyEqual({A:111, B:112}, h.get("complex.X"));
46e873c835bf7d9ec3e1097e0aceb8db5b1ae93aMark Andrews Y.Assert.areEqual(undefined, h.get("complex.W"));
46e873c835bf7d9ec3e1097e0aceb8db5b1ae93aMark Andrews Y.Assert.areEqual(undefined, h.get("complex.W.B"));
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews Y.Assert.areEqual(undefined, h.get("complex.Y.A"));
8fca573ba41a1669fff64f234275e956551eb6e5Mark Andrews testOnDemandInit : function() {
0ca8fddd5b5e26d8a05f0936fc4b2666a025b9c0Mark Andrews testGetterSetterValidatorNameArg : function() {
8fca573ba41a1669fff64f234275e956551eb6e5Mark Andrews h.set("I", {a:7, b:8});
821d2613356f81e5bb5c107288d6d5cf35c2a1e8Mark Andrews var perfTemplate = {
821d2613356f81e5bb5c107288d6d5cf35c2a1e8Mark Andrews name: "Performance Tests",
821d2613356f81e5bb5c107288d6d5cf35c2a1e8Mark Andrews testTimeConstruction: function() {
821d2613356f81e5bb5c107288d6d5cf35c2a1e8Mark Andrews var start, end, n = 20, t, i;
821d2613356f81e5bb5c107288d6d5cf35c2a1e8Mark Andrews start = new Date().getTime();
821d2613356f81e5bb5c107288d6d5cf35c2a1e8Mark Andrews Y.log("Construction Time Populated (upfront): " + ((end-start)/n), "perf");
821d2613356f81e5bb5c107288d6d5cf35c2a1e8Mark Andrews t = new Test();
821d2613356f81e5bb5c107288d6d5cf35c2a1e8Mark Andrews end = new Date().getTime();
821d2613356f81e5bb5c107288d6d5cf35c2a1e8Mark Andrews Y.log("Construction Time Populated (lazy): " + ((end-start)/n), "perf");
821d2613356f81e5bb5c107288d6d5cf35c2a1e8Mark Andrews start = new Date().getTime();
4f087942583014b241adca1bc78c6db89ed96e94Mark Andrews Y.log("Construction Time (upfront): " + ((end-start)/n), "perf");
4f087942583014b241adca1bc78c6db89ed96e94Mark Andrews t = new Test();
4f087942583014b241adca1bc78c6db89ed96e94Mark Andrews end = new Date().getTime();
4f087942583014b241adca1bc78c6db89ed96e94Mark Andrews var time = (end-start)/n;
4f087942583014b241adca1bc78c6db89ed96e94Mark Andrews var expectedTime = (Y.UA.ie && Y.UA.ie <= 6) ? 15 : 10;
4f087942583014b241adca1bc78c6db89ed96e94Mark Andrews Y.log("Construction Time (lazy): " + time, "perf");
4f087942583014b241adca1bc78c6db89ed96e94Mark Andrews t = new Test(null, true, true);
4f087942583014b241adca1bc78c6db89ed96e94Mark Andrews end = new Date().getTime();
4f087942583014b241adca1bc78c6db89ed96e94Mark Andrews Y.log("Construction Time (lazy and silent init): " + ((end-start)/n), "perf");
4f087942583014b241adca1bc78c6db89ed96e94Mark Andrews Y.Assert.areEqual(Y.dump(x), Y.dump(y), "Lazy vs. Upfront: attr state is not equal");
4f087942583014b241adca1bc78c6db89ed96e94Mark Andrews Y.Assert.areEqual(Y.dump(y), Y.dump(z), "Upfront vs. Lazy and Silent: attr state is not equal");
4f087942583014b241adca1bc78c6db89ed96e94Mark Andrews var suite = new Y.Test.Suite({name:"Base Core Unit Tests"});
4f087942583014b241adca1bc78c6db89ed96e94Mark Andrews Y.one("#btnRun").set("disabled", false).on("click", function() {
4f087942583014b241adca1bc78c6db89ed96e94Mark Andrews entryTemplate: '<pre class="{entry_class} {cat_class} {src_class}">'+
4f087942583014b241adca1bc78c6db89ed96e94Mark Andrews '<span class="{entry_cat_class}">{label}</span>'+
4f087942583014b241adca1bc78c6db89ed96e94Mark Andrews '<span class="{entry_content_class}">{message}</span>'+
4f087942583014b241adca1bc78c6db89ed96e94Mark Andrews var perfSuite = new Y.Test.Suite({name:"Attribute Performance Tests"});
4f087942583014b241adca1bc78c6db89ed96e94Mark Andrews <p><input type="button" value="Run Tests" id="btnRun" disabled=true></p>