Home | History | Annotate | Download | only in GetSet
      1 /*
      2 * The contents of this file are subject to the Netscape Public
      3 * License Version 1.1 (the "License"); you may not use this file
      4 * except in compliance with the License. You may obtain a copy of
      5 * the License at http://www.mozilla.org/NPL/
      6 *
      7 * Software distributed under the License is distributed on an "AS IS"
      8 * basis, WITHOUT WARRANTY OF ANY KIND, either expressed
      9 * or implied. See the License for the specific language governing
     10 * rights and limitations under the License.
     11 *
     12 * The Original Code is mozilla.org code.
     13 *
     14 * The Initial Developer of the Original Code is Netscape
     15 * Communications Corporation.  Portions created by Netscape are
     16 * Copyright (C) 1998 Netscape Communications Corporation. All
     17 * Rights Reserved.
     18 *
     19 * Contributor(s): pschwartau (at) netscape.com
     20 * Date: 14 April 2001
     21 *
     22 * SUMMARY: Testing obj.prop getter/setter
     23 * Note: this is a non-ECMA extension to the language.
     24 */
     25 //-------------------------------------------------------------------------------------------------
     26 var UBound = 0;
     27 var bug = '(none)';
     28 var summary = 'Testing obj.prop getter/setter';
     29 var statprefix = 'Status: ';
     30 var status = '';
     31 var statusitems = [ ];
     32 var actual = '';
     33 var actualvalues = [ ];
     34 var expect= '';
     35 var expectedvalues = [ ];
     36 var cnDEFAULT = 'default name';
     37 var cnFRED = 'Fred';
     38 var obj = {};
     39 var obj2 = {};
     40 var s = '';
     41 
     42 
     43 // SECTION1: define getter/setter directly on an object (not its prototype)
     44 obj = new Object();
     45 obj.nameSETS = 0;
     46 obj.nameGETS = 0;
     47 obj.name setter = function(newValue) {this._name=newValue; this.nameSETS++;}
     48 obj.name getter = function() {this.nameGETS++; return this._name;}
     49 
     50 status = 'In SECTION1 of test after 0 sets, 0 gets';
     51 actual = [obj.nameSETS,obj.nameGETS];
     52 expect = [0,0];
     53 addThis();
     54 
     55 s = obj.name;
     56 status = 'In SECTION1 of test after 0 sets, 1 get';
     57 actual = [obj.nameSETS,obj.nameGETS];
     58 expect = [0,1];
     59 addThis();
     60 
     61 obj.name = cnFRED;
     62 status = 'In SECTION1 of test after 1 set, 1 get';
     63 actual = [obj.nameSETS,obj.nameGETS];
     64 expect = [1,1];
     65 addThis();
     66 
     67 obj.name = obj.name;
     68 status = 'In SECTION1 of test after 2 sets, 2 gets';
     69 actual = [obj.nameSETS,obj.nameGETS];
     70 expect = [2,2];
     71 addThis();
     72 
     73 
     74 // SECTION2: define getter/setter in Object.prototype
     75 Object.prototype.nameSETS = 0;
     76 Object.prototype.nameGETS = 0;
     77 Object.prototype.name setter = function(newValue) {this._name=newValue; this.nameSETS++;}
     78 Object.prototype.name getter = function() {this.nameGETS++; return this._name;}
     79 
     80 obj = new Object();
     81 status = 'In SECTION2 of test after 0 sets, 0 gets';
     82 actual = [obj.nameSETS,obj.nameGETS];
     83 expect = [0,0];
     84 addThis();
     85 
     86 s = obj.name;
     87 status = 'In SECTION2 of test after 0 sets, 1 get';
     88 actual = [obj.nameSETS,obj.nameGETS];
     89 expect = [0,1];
     90 addThis();
     91 
     92 obj.name = cnFRED;
     93 status = 'In SECTION2 of test after 1 set, 1 get';
     94 actual = [obj.nameSETS,obj.nameGETS];
     95 expect = [1,1];
     96 addThis();
     97 
     98 obj.name = obj.name;
     99 status = 'In SECTION2 of test after 2 sets, 2 gets';
    100 actual = [obj.nameSETS,obj.nameGETS];
    101 expect = [2,2];
    102 addThis();
    103 
    104 
    105 // SECTION 3: define getter/setter in prototype of user-defined constructor
    106 function TestObject()
    107 {
    108 }
    109 TestObject.prototype.nameSETS = 0;
    110 TestObject.prototype.nameGETS = 0;
    111 TestObject.prototype.name setter = function(newValue) {this._name=newValue; this.nameSETS++;}
    112 TestObject.prototype.name getter = function() {this.nameGETS++; return this._name;}
    113 TestObject.prototype.name = cnDEFAULT;
    114 
    115 obj = new TestObject();
    116 status = 'In SECTION3 of test after 1 set, 0 gets'; // (we set a default value in the prototype)
    117 actual = [obj.nameSETS,obj.nameGETS];
    118 expect = [1,0];
    119 addThis();
    120 
    121 s = obj.name;
    122 status = 'In SECTION3 of test after 1 set, 1 get';
    123 actual = [obj.nameSETS,obj.nameGETS];
    124 expect = [1,1];
    125 addThis();
    126 
    127 obj.name = cnFRED;
    128 status = 'In SECTION3 of test after 2 sets, 1 get';
    129 actual = [obj.nameSETS,obj.nameGETS];
    130 expect = [2,1];
    131 addThis();
    132 
    133 obj.name = obj.name;
    134 status = 'In SECTION3 of test after 3 sets, 2 gets';
    135 actual = [obj.nameSETS,obj.nameGETS];
    136 expect = [3,2];
    137 addThis();
    138 
    139 obj2 = new TestObject();
    140 status = 'obj2 = new TestObject() after 1 set, 0 gets';
    141 actual = [obj2.nameSETS,obj2.nameGETS];
    142 expect = [1,0]; // we set a default value in the prototype -
    143 addThis();
    144 
    145 // Use both obj and obj2  -
    146 obj2.name = obj.name +  obj2.name;
    147   status = 'obj2 = new TestObject() after 2 sets, 1 get';
    148   actual = [obj2.nameSETS,obj2.nameGETS];
    149   expect = [2,1];
    150   addThis();
    151 
    152   status = 'In SECTION3 of test after 3 sets, 3 gets';
    153   actual = [obj.nameSETS,obj.nameGETS];
    154   expect = [3,3];  // we left off at [3,2] above -
    155   addThis();
    156 
    157 
    158 //---------------------------------------------------------------------------------
    159 test();
    160 //---------------------------------------------------------------------------------
    161 
    162 
    163 function addThis()
    164 {
    165   statusitems[UBound] = status;
    166   actualvalues[UBound] = actual.toString();
    167   expectedvalues[UBound] = expect.toString();
    168   UBound++;
    169 }
    170 
    171 
    172 function test()
    173 {
    174   enterFunc ('test');
    175   printBugNumber (bug);
    176   printStatus (summary);
    177 
    178   for (var i = 0; i < UBound; i++)
    179   {
    180     reportCompare(expectedvalues[i], actualvalues[i], getStatus(i));
    181   }
    182 
    183   exitFunc ('test');
    184 }
    185 
    186 
    187 function getStatus(i)
    188 {
    189   return statprefix + statusitems[i];
    190 }
    191