Home | History | Annotate | Download | only in js
      1 <!DOCTYPE html>
      2 <html>
      3 <head>
      4 <title></title>
      5 <style>
      6 
      7 </style>
      8 <script src="http://closure-library.googlecode.com/svn/trunk/closure/goog/base.js"></script>
      9 <script src="cr.js"></script>
     10 <script src="cr/event_target.js"></script>
     11 <script>
     12 
     13 goog.require('goog.testing.jsunit');
     14 
     15 </script>
     16 
     17 </head>
     18 <body>
     19 
     20 <script>
     21 
     22 const EventTarget = cr.EventTarget;
     23 
     24 function testDefineProperty() {
     25   var obj = new EventTarget;
     26   cr.defineProperty(obj, 'test');
     27 
     28   obj.test = 1;
     29   assertEquals(1, obj.test);
     30   assertEquals(1, obj.test_);
     31 }
     32 
     33 function testDefinePropertyOnClass() {
     34   function C() {}
     35   C.prototype = {
     36     __proto__: EventTarget.prototype
     37   };
     38 
     39   cr.defineProperty(C, 'test');
     40 
     41   var obj = new C;
     42   assertUndefined(obj.test);
     43 
     44   obj.test = 1;
     45   assertEquals(1, obj.test);
     46   assertEquals(1, obj.test_);
     47 }
     48 
     49 function testDefinePropertyWithSetter() {
     50   var obj = new EventTarget;
     51 
     52   var hit = false;
     53   function onTestSet(value, oldValue) {
     54     assertEquals(obj, this);
     55     assertEquals(2, this.test);
     56     assertUndefined(oldValue);
     57     assertEquals(2, value);
     58     hit = true;
     59   }
     60   cr.defineProperty(obj, 'test', cr.PropertyKind.JS, onTestSet); 
     61   obj.test = 2;
     62   assertTrue(hit);
     63 }
     64 
     65 function testDefinePropertyEvent() {
     66   var obj = new EventTarget;
     67   cr.defineProperty(obj, 'test');
     68   obj.test = 1;
     69 
     70   var count = 0;
     71   function f(e) {
     72     assertEquals('testChange', e.type);
     73     assertEquals('test', e.propertyName);
     74     assertEquals(1, e.oldValue);
     75     assertEquals(2, e.newValue);
     76     count++;
     77   }
     78 
     79   obj.addEventListener('testChange', f);
     80   obj.test = 2;
     81   assertEquals(2, obj.test);
     82   assertEquals('Should have called the property change listener', 1, count);
     83 
     84   obj.test = 2;
     85   assertEquals(1, count);
     86 }
     87 
     88 function testDefinePropertyEventWithDefault() {
     89   var obj = new EventTarget;
     90   cr.defineProperty(obj, 'test', cr.PropertyKind.JS);
     91 
     92   var count = 0;
     93   function f(e) {
     94     assertEquals('testChange', e.type);
     95     assertEquals('test', e.propertyName);
     96     assertUndefined(e.oldValue);
     97     assertEquals(2, e.newValue);
     98     count++;
     99   }
    100 
    101   obj.addEventListener('testChange', f);
    102 
    103   obj.test = undefined;
    104   assertEquals('Should not have called the property change listener', 0, count);
    105 
    106   obj.test = 2;
    107   assertEquals(2, obj.test);
    108   assertEquals('Should have called the property change listener', 1, count);
    109 
    110   obj.test = 2;
    111   assertEquals(1, count);
    112 }
    113 
    114 function testDefinePropertyAttr() {
    115   var obj = document.createElement('div');
    116   cr.defineProperty(obj, 'test', cr.PropertyKind.ATTR);
    117 
    118   obj.test = 'a';
    119   assertEquals('a', obj.test);
    120   assertEquals('a', obj.getAttribute('test'));
    121 
    122   obj.test = undefined;
    123   assertEquals(undefined, obj.test);
    124   assertFalse(obj.hasAttribute('test'));
    125 }
    126 
    127 function testDefinePropertyAttrOnClass() {
    128   var obj = document.createElement('button');
    129   cr.defineProperty(HTMLButtonElement, 'test', cr.PropertyKind.ATTR);
    130 
    131   assertEquals(null, obj.test);
    132 
    133   obj.test = 'a';
    134   assertEquals('a', obj.test);
    135   assertEquals('a', obj.getAttribute('test'));
    136 
    137   obj.test = undefined;
    138   assertEquals(undefined, obj.test);
    139   assertFalse(obj.hasAttribute('test'));
    140 }
    141 
    142 function testDefinePropertyAttrWithSetter() {
    143   var obj = document.createElement('div');
    144 
    145   var hit = false;
    146   function onTestSet(value, oldValue) {
    147     assertEquals(obj, this);
    148     assertEquals(null, oldValue);
    149     assertEquals('b', value);
    150     assertEquals('b', this.test);
    151     hit = true;
    152   }
    153   cr.defineProperty(obj, 'test', cr.PropertyKind.ATTR, onTestSet);
    154   obj.test = 'b';
    155   assertTrue(hit);
    156 }
    157 
    158 function testDefinePropertyAttrEvent() {
    159   var obj = document.createElement('div');
    160   cr.defineProperty(obj, 'test', cr.PropertyKind.ATTR);
    161 
    162   var count = 0;
    163   function f(e) {
    164     assertEquals('testChange', e.type);
    165     assertEquals('test', e.propertyName);
    166     assertEquals(null, e.oldValue);
    167     assertEquals('b', e.newValue);
    168     count++;
    169   }
    170 
    171   obj.addEventListener('testChange', f);
    172 
    173   obj.test = null;
    174   assertEquals('Should not have called the property change listener', 0, count);
    175 
    176   obj.test = 'b';
    177   assertEquals('b', obj.test);
    178   assertEquals('Should have called the property change listener', 1, count);
    179 
    180   obj.test = 'b';
    181   assertEquals(1, count);
    182 }
    183 
    184 function testDefinePropertyBoolAttr() {
    185   var obj = document.createElement('div');
    186   cr.defineProperty(obj, 'test', cr.PropertyKind.BOOL_ATTR);
    187 
    188   assertFalse(obj.test);
    189   assertFalse(obj.hasAttribute('test'));
    190 
    191   obj.test = true;
    192   assertTrue(obj.test);
    193   assertTrue(obj.hasAttribute('test'));
    194 
    195   obj.test = false;
    196   assertFalse(obj.test);
    197   assertFalse(obj.hasAttribute('test'));
    198 }
    199 
    200 function testDefinePropertyBoolAttrEvent() {
    201   var obj = document.createElement('div');
    202   cr.defineProperty(obj, 'test', cr.PropertyKind.BOOL_ATTR);
    203 
    204   var count = 0;
    205   function f(e) {
    206     assertEquals('testChange', e.type);
    207     assertEquals('test', e.propertyName);
    208     assertEquals(false, e.oldValue);
    209     assertEquals(true, e.newValue);
    210     count++;
    211   }
    212 
    213   obj.addEventListener('testChange', f);
    214   obj.test = true;
    215   assertTrue(obj.test);
    216   assertEquals('Should have called the property change listener', 1, count);
    217 
    218   obj.test = true;
    219   assertEquals(1, count);
    220 }
    221 
    222 function testDefinePropertyBoolAttrEvent() {
    223   var obj = document.createElement('div');
    224   var hit = false;
    225   function onTestSet(value, oldValue) {
    226     assertEquals(obj, this);
    227     assertTrue(this.test);
    228     assertFalse(oldValue);
    229     assertTrue(value);
    230     hit = true;
    231   }
    232   cr.defineProperty(obj, 'test', cr.PropertyKind.BOOL_ATTR, onTestSet);
    233   obj.test = true;
    234   assertTrue(hit);
    235 }
    236 
    237 function testAddSingletonGetter() {
    238   function Foo() {};
    239   cr.addSingletonGetter(Foo);
    240 
    241   assertNotNull('Should add get instance function', Foo.getInstance);
    242 
    243   var x = Foo.getInstance();
    244   assertNotNull('Should successfully create an object', x);
    245 
    246   var y = Foo.getInstance();
    247   assertEquals('Should return the same object', x, y);
    248 
    249   delete Foo.instance_;
    250 
    251   var z = Foo.getInstance();
    252   assertNotNull('Should work after clearing for testing', z);
    253 
    254   assertNotEquals('Should return a different object after clearing for testing',
    255       x, z);
    256 }
    257 
    258 function testWithDoc() {
    259   var d = {};
    260 
    261   assertEquals(document, cr.doc);
    262 
    263   cr.withDoc(d, function() {
    264     assertEquals(d, cr.doc);
    265   });
    266 
    267   assertEquals(document, cr.doc);
    268 }
    269 
    270 function testDefineWithGetter() {
    271   var v = 0;
    272   cr.define('foo', function() {
    273     return {
    274       get v() {
    275         return v;
    276       }
    277     }
    278   });
    279 
    280   assertEquals(0, foo.v);
    281 
    282   v = 1;
    283   assertEquals(1, foo.v);
    284 }
    285 
    286 </script>
    287 
    288 </body>
    289 </html>
    290