Home | History | Annotate | Download | only in ui
      1 <!DOCTYPE html>
      2 <html>
      3 <head>
      4 <script src="http://closure-library.googlecode.com/svn/trunk/closure/goog/base.js"></script>
      5 <script src="../../cr.js"></script>
      6 <script src="../event_target.js"></script>
      7 <script src="array_data_model.js"></script>
      8 <script>
      9 
     10 goog.require('goog.testing.jsunit');
     11 
     12 </script>
     13 
     14 </head>
     15 <body>
     16 
     17 <script>
     18 
     19 function testSlice() {
     20   var m = new cr.ui.ArrayDataModel([0, 1, 2]);
     21   assertArrayEquals([0, 1, 2], m.slice());
     22   assertArrayEquals([1, 2], m.slice(1));
     23   assertArrayEquals([1], m.slice(1, 2));
     24 }
     25 
     26 function testPush() {
     27   var m = new cr.ui.ArrayDataModel([0, 1, 2]);
     28 
     29   var count = 0;
     30   m.addEventListener('splice', function(e) {
     31     count++;
     32     assertEquals(3, e.index);
     33     assertArrayEquals([], e.removed);
     34     assertArrayEquals([3, 4], e.added);
     35   });
     36 
     37   assertEquals(5, m.push(3, 4));
     38   var a = m.slice();
     39   assertArrayEquals([0, 1, 2, 3, 4], a);
     40 
     41   assertEquals('The splice event should only fire once', 1, count);
     42 }
     43 
     44 function testSplice() {
     45   function compare(array, args) {
     46     var m = new cr.ui.ArrayDataModel(array.slice());
     47     var expected = array.slice();
     48     var result = expected.splice.apply(expected, args);
     49     assertArrayEquals(result, m.splice.apply(m, args));
     50     assertArrayEquals(expected, m.slice());
     51   }
     52 
     53   compare([1, 2, 3], []);
     54   compare([1, 2, 3], [0, 0]);
     55   compare([1, 2, 3], [0, 1]);
     56   compare([1, 2, 3], [1, 1]);
     57   compare([1, 2, 3], [0, 3]);
     58   compare([1, 2, 3], [0, 1, 5]);
     59   compare([1, 2, 3], [0, 3, 1, 2, 3]);
     60   compare([1, 2, 3], [5, 3, 1, 2, 3]);
     61 }
     62 
     63 function testPermutation() {
     64   function doTest(sourceArray, spliceArgs) {
     65     var m = new cr.ui.ArrayDataModel(sourceArray.slice());
     66     var permutation;
     67     m.addEventListener('permuted', function(event) {
     68       permutation = event.permutation;
     69     });
     70     m.splice.apply(m, spliceArgs);
     71     var deleted = 0;
     72     for (var i = 0; i < sourceArray.length; i++) {
     73       if (permutation[i] == -1)
     74         deleted++;
     75       else
     76         assertEquals(sourceArray[i], m.item(permutation[i]));
     77     }
     78     assertEquals(deleted, spliceArgs[1]);
     79   }
     80 
     81   doTest([1, 2, 3], [0, 0]);
     82   doTest([1, 2, 3], [0, 1]);
     83   doTest([1, 2, 3], [1, 1]);
     84   doTest([1, 2, 3], [0, 3]);
     85   doTest([1, 2, 3], [0, 1, 5]);
     86   doTest([1, 2, 3], [0, 3, 1, 2, 3]);
     87 }
     88 
     89 </script>
     90 
     91 </body>
     92 </html>
     93