1 /*
   2  * Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.  Oracle designates this
   8  * particular file as subject to the "Classpath" exception as provided
   9  * by Oracle in the LICENSE file that accompanied this code.
  10  *
  11  * This code is distributed in the hope that it will be useful, but WITHOUT
  12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14  * version 2 for more details (a copy is included in the LICENSE file that
  15  * accompanied this code).
  16  *
  17  * You should have received a copy of the GNU General Public License version
  18  * 2 along with this work; if not, write to the Free Software Foundation,
  19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20  *
  21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22  * or visit www.oracle.com if you need additional information or have any
  23  * questions.
  24  */
  25 package test.com.sun.javafx.collections;
  26 
  27 import com.sun.javafx.collections.MappingChange;
  28 import com.sun.javafx.collections.NonIterableChange;
  29 import java.util.Arrays;
  30 import java.util.Collections;
  31 import java.util.List;
  32 import javafx.collections.FXCollections;
  33 import javafx.collections.ListChangeListener.Change;
  34 import javafx.collections.ObservableList;
  35 import org.junit.Before;
  36 import org.junit.Test;
  37 import static org.junit.Assert.*;
  38 
  39 public class MappingChangeTest {
  40 
  41     ObservableList<Integer> originalList;
  42     ObservableList<String> list;
  43 
  44     @Before
  45     public void setUp() {
  46         originalList = FXCollections.observableArrayList(1, 2, 3, 4, 5);
  47         list = FXCollections.observableArrayList("1", "2", "3", "4", "5");
  48     }
  49 
  50     @Test
  51     public void testAddRemove() {
  52         Change<Integer> change = new NonIterableChange.SimpleRemovedChange<Integer>(0, 1, new Integer(5), originalList);
  53         MappingChange<Integer, String> mapChange = new MappingChange<Integer, String>(change,
  54                 e -> e.toString(), list);
  55         
  56         assertTrue(mapChange.next());
  57         assertEquals(0, mapChange.getFrom());
  58         assertEquals(1, mapChange.getTo());
  59         assertEquals(Arrays.asList("5"), mapChange.getRemoved());
  60         assertNotNull(mapChange.toString());
  61         
  62         assertFalse(mapChange.next());
  63     }
  64 
  65     @Test
  66     public void testUpdate() {
  67         Change<Integer> change = new NonIterableChange.SimpleUpdateChange<Integer>(0, 1, originalList);
  68         MappingChange<Integer, String> mapChange = new MappingChange<Integer, String>(change,
  69                 e -> e.toString(), list);
  70         
  71         assertTrue(mapChange.next());
  72         assertEquals(0, mapChange.getFrom());
  73         assertEquals(1, mapChange.getTo());
  74         assertTrue(mapChange.wasUpdated());
  75         assertNotNull(mapChange.toString());
  76         
  77         assertFalse(mapChange.next());
  78     }
  79     
  80     @Test
  81     public void testPermutation() {
  82         Change<Integer> change = new NonIterableChange.SimplePermutationChange<Integer>(0, 2, new int[] {1, 0}, originalList);
  83         MappingChange<Integer, String> mapChange = new MappingChange<Integer, String>(change,
  84                 e -> e.toString(), list);
  85         
  86         assertTrue(mapChange.next());
  87         assertEquals(0, mapChange.getFrom());
  88         assertEquals(2, mapChange.getTo());
  89         assertTrue(mapChange.wasPermutated());
  90         assertNotNull(mapChange.toString());
  91         
  92         assertFalse(mapChange.next());
  93     }
  94     
  95     @Test
  96     public void testComplex() {
  97         Change<Integer> change = new Change(originalList) {
  98             int[][] added= new int[][]{ new int[] {0, 1}, new int[] {2, 3}, new int[] {4, 5}};
  99             
 100             int pointer = -1;
 101             
 102             @Override
 103             public boolean next() {
 104                 if (pointer == added.length - 1) {
 105                     return false;
 106                 }
 107                 ++pointer;
 108                 return true;
 109             }
 110             
 111             @Override
 112             public void reset() {
 113                 pointer = -1;
 114             }
 115             
 116             @Override
 117             public int getFrom() {
 118                 return added[pointer][0];
 119             }
 120             
 121             @Override
 122             public int getTo() {
 123                 return added[pointer][1];
 124             }
 125             
 126             @Override
 127             public List getRemoved() {
 128                 return Collections.EMPTY_LIST;
 129             }
 130             
 131             @Override
 132             protected int[] getPermutation() {
 133                 return new int[0];
 134             }
 135         };
 136         MappingChange<Integer, String> mapChange = new MappingChange<Integer, String>(change,
 137                 e -> e.toString(), list);
 138         
 139         assertTrue(mapChange.next());
 140         assertEquals(0, mapChange.getFrom());
 141         assertEquals(1, mapChange.getTo());
 142         assertTrue(mapChange.wasAdded());
 143         assertNotNull(mapChange.toString());
 144         
 145         assertTrue(mapChange.next());
 146         assertEquals(2, mapChange.getFrom());
 147         assertEquals(3, mapChange.getTo());
 148         assertTrue(mapChange.wasAdded());
 149         assertNotNull(mapChange.toString());
 150         
 151         assertTrue(mapChange.next());
 152         assertEquals(4, mapChange.getFrom());
 153         assertEquals(5, mapChange.getTo());
 154         assertTrue(mapChange.wasAdded());
 155         assertNotNull(mapChange.toString());
 156         
 157         assertFalse(mapChange.next());
 158     }
 159 }