1 /*
   2  * Copyright (c) 2011, 2013, 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 
  26 package test.javafx.binding.expression;
  27 
  28 import javafx.beans.binding.BooleanBinding;
  29 import javafx.beans.property.IntegerProperty;
  30 import javafx.beans.property.MapProperty;
  31 import javafx.beans.property.SimpleIntegerProperty;
  32 import javafx.beans.property.SimpleMapProperty;
  33 import javafx.collections.FXCollections;
  34 import javafx.collections.ObservableMap;
  35 import org.junit.Before;
  36 import org.junit.Test;
  37 
  38 import java.util.Collections;
  39 import java.util.HashMap;
  40 import java.util.Map;
  41 
  42 import static org.junit.Assert.*;
  43 
  44 public class MapExpressionTest {
  45 
  46     private static final Number key1_0 = 4711;
  47     private static final Number key2_0 = 4711;
  48     private static final Number key2_1 = 4712;
  49     private static final Number keyx = 4710;
  50     private static final Integer data1_0 = 7;
  51     private static final Integer data2_0 = 42;
  52     private static final Integer data2_1 = -3;
  53     private static final Integer datax = Integer.MAX_VALUE;
  54     
  55     private MapProperty<Number, Integer> opNull;
  56     private MapProperty<Number, Integer> opEmpty;
  57     private MapProperty<Number, Integer> op1;
  58     private MapProperty<Number, Integer> op2;
  59 
  60     @Before
  61     public void setUp() {
  62         opNull = new SimpleMapProperty<Number, Integer>();
  63         opEmpty = new SimpleMapProperty<Number, Integer>(FXCollections.observableMap(Collections.<Number, Integer>emptyMap()));
  64         op1 = new SimpleMapProperty<Number, Integer>(FXCollections.observableMap(Collections.singletonMap(key1_0, data1_0)));
  65         final Map<Number, Integer> map = new HashMap<Number, Integer>();
  66         map.put(key2_0, data2_0);
  67         map.put(key2_1, data2_1);
  68         op2 = new SimpleMapProperty<Number, Integer>(FXCollections.observableMap(map));
  69     }
  70 
  71     @Test
  72     public void testGetSize() {
  73         assertEquals(0, opNull.getSize());
  74         assertEquals(0, opEmpty.getSize());
  75         assertEquals(1, op1.getSize());
  76         assertEquals(2, op2.getSize());
  77     }
  78 
  79     @Test
  80     public void testValueAt_Constant() {
  81         assertNull(opNull.valueAt(0).get());
  82         assertNull(opEmpty.valueAt(0).get());
  83 
  84         assertEquals(data1_0, op1.valueAt(key1_0).get());
  85         assertNull(op1.valueAt(keyx).get());
  86 
  87         assertEquals(data2_0, op2.valueAt(key2_0).get());
  88         assertEquals(data2_1, op2.valueAt(key2_1).get());
  89         assertNull(op2.valueAt(keyx).get());
  90     }
  91 
  92     @Test
  93     public void testValueAt_Variable() {
  94         final IntegerProperty index = new SimpleIntegerProperty(keyx.intValue());
  95 
  96         assertNull(opNull.valueAt(index).get());
  97         assertNull(opNull.valueAt(index).get());
  98         assertNull(opEmpty.valueAt(index).get());
  99         assertNull(op1.valueAt(index).get());
 100         assertNull(op2.valueAt(index).get());
 101 
 102         index.set(key1_0.intValue());
 103         assertNull(opNull.valueAt(index).get());
 104         assertNull(opEmpty.valueAt(index).get());
 105         assertEquals(data1_0, op1.valueAt(index).get());
 106         assertEquals(data2_0, op2.valueAt(index).get());
 107 
 108         index.set(key2_1.intValue());
 109         assertNull(opNull.valueAt(index).get());
 110         assertNull(opEmpty.valueAt(index).get());
 111         assertNull(op1.valueAt(index).get());
 112         assertEquals(data2_1, op2.valueAt(index).get());
 113     }
 114 
 115     @Test
 116     public void testIsEqualTo() {
 117         final ObservableMap<Number, Integer> emptyMap = FXCollections.observableMap(Collections.<Number, Integer>emptyMap());
 118         final ObservableMap<Number, Integer> map1 = FXCollections.observableMap(Collections.singletonMap(key1_0, data1_0));
 119         final Map<Number, Integer> map = new HashMap<Number, Integer>();
 120         map.put(key2_0, data2_0);
 121         map.put(key2_1, data2_1);
 122         final ObservableMap<Number, Integer> map2= FXCollections.observableMap(map);
 123 
 124         BooleanBinding binding = opNull.isEqualTo(emptyMap);
 125         assertEquals(false, binding.get());
 126         binding = opNull.isEqualTo(map1);
 127         assertEquals(false, binding.get());
 128         binding = opNull.isEqualTo(map2);
 129         assertEquals(false, binding.get());
 130 
 131         binding = opEmpty.isEqualTo(emptyMap);
 132         assertEquals(true, binding.get());
 133         binding = opEmpty.isEqualTo(map1);
 134         assertEquals(false, binding.get());
 135         binding = opEmpty.isEqualTo(map2);
 136         assertEquals(false, binding.get());
 137 
 138         binding = op1.isEqualTo(emptyMap);
 139         assertEquals(false, binding.get());
 140         binding = op1.isEqualTo(map1);
 141         assertEquals(true, binding.get());
 142         binding = op1.isEqualTo(map2);
 143         assertEquals(false, binding.get());
 144 
 145         binding = op2.isEqualTo(emptyMap);
 146         assertEquals(false, binding.get());
 147         binding = op2.isEqualTo(map1);
 148         assertEquals(false, binding.get());
 149         binding = op2.isEqualTo(map2);
 150         assertEquals(true, binding.get());
 151     }
 152 
 153 
 154     @Test
 155     public void testIsNotEqualTo() {
 156         final ObservableMap<Number, Integer> emptyMap = FXCollections.observableMap(Collections.<Number, Integer>emptyMap());
 157         final ObservableMap<Number, Integer> list1 = FXCollections.observableMap(Collections.singletonMap(key1_0, data1_0));
 158         final Map<Number, Integer> map = new HashMap<Number, Integer>();
 159         map.put(key2_0, data2_0);
 160         map.put(key2_1, data2_1);
 161         final ObservableMap<Number, Integer> list2 = FXCollections.observableMap(map);
 162 
 163         BooleanBinding binding = opNull.isNotEqualTo(emptyMap);
 164         assertEquals(true, binding.get());
 165         binding = opNull.isNotEqualTo(list1);
 166         assertEquals(true, binding.get());
 167         binding = opNull.isNotEqualTo(list2);
 168         assertEquals(true, binding.get());
 169 
 170         binding = opEmpty.isNotEqualTo(emptyMap);
 171         assertEquals(false, binding.get());
 172         binding = opEmpty.isNotEqualTo(list1);
 173         assertEquals(true, binding.get());
 174         binding = opEmpty.isNotEqualTo(list2);
 175         assertEquals(true, binding.get());
 176 
 177         binding = op1.isNotEqualTo(emptyMap);
 178         assertEquals(true, binding.get());
 179         binding = op1.isNotEqualTo(list1);
 180         assertEquals(false, binding.get());
 181         binding = op1.isNotEqualTo(list2);
 182         assertEquals(true, binding.get());
 183 
 184         binding = op2.isNotEqualTo(emptyMap);
 185         assertEquals(true, binding.get());
 186         binding = op2.isNotEqualTo(list1);
 187         assertEquals(true, binding.get());
 188         binding = op2.isNotEqualTo(list2);
 189         assertEquals(false, binding.get());
 190     }
 191 
 192     @Test
 193     public void testIsNull() {
 194         assertTrue(opNull.isNull().get());
 195         assertFalse(opEmpty.isNull().get());
 196         assertFalse(op1.isNull().get());
 197         assertFalse(op2.isNull().get());
 198     }
 199 
 200     @Test
 201     public void testIsNotNull() {
 202         assertFalse(opNull.isNotNull().get());
 203         assertTrue(opEmpty.isNotNull().get());
 204         assertTrue(op1.isNotNull().get());
 205         assertTrue(op2.isNotNull().get());
 206     }
 207     
 208     @Test
 209     public void testAsString() {
 210         assertEquals("null", opNull.asString().get());
 211         assertEquals(Collections.emptyMap().toString(), opEmpty.asString().get());
 212         assertEquals(Collections.singletonMap(key1_0, data1_0).toString(), op1.asString().get());
 213     }
 214 
 215     @Test
 216     public void testSize() {
 217         assertEquals(0, opNull.size());
 218         assertEquals(0, opEmpty.size());
 219         assertEquals(1, op1.size());
 220         assertEquals(2, op2.size());
 221     }
 222 
 223     @Test
 224     public void testIsEmpty() {
 225         assertTrue(opNull.isEmpty());
 226         assertTrue(opEmpty.isEmpty());
 227         assertFalse(op1.isEmpty());
 228         assertFalse(op2.isEmpty());
 229     }
 230 
 231     @Test
 232     public void testContainsKey() {
 233         assertFalse(opNull.containsKey(key1_0));
 234         assertFalse(opNull.containsKey(key2_0));
 235         assertFalse(opNull.containsKey(key2_1));
 236 
 237         assertFalse(opEmpty.containsKey(key1_0));
 238         assertFalse(opEmpty.containsKey(key2_0));
 239         assertFalse(opEmpty.containsKey(key2_1));
 240 
 241         assertTrue(op1.containsKey(key1_0));
 242         assertFalse(op1.containsKey(key2_1));
 243 
 244         assertTrue(op2.containsKey(key2_0));
 245         assertTrue(op2.containsKey(key2_1));
 246     }
 247 
 248     @Test
 249     public void testContainsValue() {
 250         assertFalse(opNull.containsValue(data1_0));
 251         assertFalse(opNull.containsValue(data2_0));
 252         assertFalse(opNull.containsValue(data2_1));
 253 
 254         assertFalse(opEmpty.containsValue(data1_0));
 255         assertFalse(opEmpty.containsValue(data2_0));
 256         assertFalse(opEmpty.containsValue(data2_1));
 257 
 258         assertTrue(op1.containsValue(data1_0));
 259         assertFalse(op1.containsValue(data2_0));
 260         assertFalse(op1.containsValue(data2_1));
 261 
 262         assertFalse(op2.containsValue(data1_0));
 263         assertTrue(op2.containsValue(data2_0));
 264         assertTrue(op2.containsValue(data2_1));
 265     }
 266 
 267 
 268 }