Home | History | Annotate | Download | only in base
      1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 'use strict';
      6 
      7 base.require('base.properties');
      8 base.require('ui');
      9 
     10 base.unittest.testSuite('base.properties', function() {
     11   test('defineProperties', function() {
     12     var stateChanges = [];
     13 
     14     var ASpan = ui.define('span');
     15     ASpan.prototype = {
     16       __proto__: HTMLSpanElement.prototype,
     17 
     18       jsProp_: [],
     19 
     20       decorate: function() {
     21         this.prop_ = false;
     22         this.addEventListener('propChange', function(event) {
     23           stateChanges.push('Internal ' + event.oldValue +
     24               ' to ' + event.newValue);
     25         }, true);
     26       },
     27 
     28       get prop() {
     29         return this.prop_;
     30       },
     31 
     32       set prop(newValue) {
     33         base.setPropertyAndDispatchChange(this, 'prop', newValue);
     34       }
     35     };
     36 
     37     var aSpan = new ASpan();
     38 
     39     aSpan.addEventListener('propChange', function(event) {
     40       stateChanges.push(event.oldValue + ' to ' + event.newValue);
     41     });
     42 
     43     assertFalse(aSpan.prop);
     44 
     45     aSpan.prop = true;
     46     assertTrue(aSpan.prop);
     47     assertTrue(stateChanges.length === 2);
     48     assertTrue(stateChanges[0] === 'Internal false to true');
     49     assertTrue(stateChanges[1] === 'false to true');
     50 
     51     aSpan.prop = false;
     52     assertFalse(aSpan.prop);
     53     assertTrue(stateChanges[3] === 'true to false');
     54   });
     55 });
     56