1 /* 2 * Copyright (c) 2011, 2018, 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 java.util.Arrays; 29 import java.util.Collections; 30 import java.util.Iterator; 31 import javafx.beans.binding.BooleanBinding; 32 import javafx.beans.property.IntegerProperty; 33 import javafx.beans.property.ListProperty; 34 import javafx.beans.property.SimpleIntegerProperty; 35 import javafx.beans.property.SimpleListProperty; 36 import javafx.collections.FXCollections; 37 import javafx.collections.ObservableList; 38 import test.com.sun.javafx.binding.ErrorLoggingUtiltity; 39 import org.junit.Before; 40 import org.junit.BeforeClass; 41 import org.junit.Test; 42 43 import static org.junit.Assert.*; 44 45 public class ListExpressionTest { 46 47 private static final Integer data1_0 = 7; 48 private static final Integer data2_0 = 42; 49 private static final Integer data2_1 = -3; 50 private static final Integer datax = Integer.MAX_VALUE; 51 52 private ListProperty<Integer> opNull; 53 private ListProperty<Integer> opEmpty; 54 private ListProperty<Integer> op1; 55 private ListProperty<Integer> op2; 56 57 @Before 58 public void setUp() { 59 opNull = new SimpleListProperty<Integer>(); 60 opEmpty = new SimpleListProperty<Integer>(FXCollections.<Integer>observableArrayList()); 61 op1 = new SimpleListProperty<Integer>(FXCollections.observableArrayList(data1_0)); 62 op2 = new SimpleListProperty<Integer>(FXCollections.observableArrayList(data2_0, data2_1)); 63 } 64 65 @BeforeClass 66 public static void setUpClass() { 67 ErrorLoggingUtiltity.reset(); 68 } 69 70 @Test 71 public void testGetSize() { 72 assertEquals(0, opNull.getSize()); 73 assertEquals(0, opEmpty.getSize()); 74 assertEquals(1, op1.getSize()); 75 assertEquals(2, op2.getSize()); 76 } 77 78 @Test 79 public void testValueAt_Constant() { 80 assertNull(opNull.valueAt(0).get()); 81 ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class); 82 assertNull(opEmpty.valueAt(0).get()); 83 ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class); 84 85 assertEquals(data1_0, op1.valueAt(0).get()); 86 assertNull(op1.valueAt(1).get()); 87 ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class); 88 89 assertEquals(data2_0, op2.valueAt(0).get()); 90 assertEquals(data2_1, op2.valueAt(1).get()); 91 assertNull(op2.valueAt(2).get()); 92 ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class); 93 } 94 95 @Test(expected = IllegalArgumentException.class) 96 public void testValueAt_Constant_NegativeIndex() { 97 op1.valueAt(-1); 98 } 99 100 @Test 101 public void testValueAt_Variable() { 102 final IntegerProperty index = new SimpleIntegerProperty(-1); 103 104 assertNull(opNull.valueAt(index).get()); 105 ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class); 106 assertNull(opEmpty.valueAt(index).get()); 107 ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class); 108 assertNull(op1.valueAt(index).get()); 109 ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class); 110 assertNull(op2.valueAt(index).get()); 111 ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class); 112 113 index.set(0); 114 assertNull(opNull.valueAt(index).get()); 115 ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class); 116 assertNull(opEmpty.valueAt(index).get()); 117 ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class); 118 assertEquals(data1_0, op1.valueAt(index).get()); 119 assertEquals(data2_0, op2.valueAt(index).get()); 120 121 index.set(1); 122 assertNull(opNull.valueAt(index).get()); 123 ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class); 124 assertNull(opEmpty.valueAt(index).get()); 125 ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class); 126 assertNull(op1.valueAt(index).get()); 127 ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class); 128 assertEquals(data2_1, op2.valueAt(index).get()); 129 130 index.set(2); 131 assertNull(opNull.valueAt(index).get()); 132 ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class); 133 assertNull(opEmpty.valueAt(index).get()); 134 ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class); 135 assertNull(op1.valueAt(index).get()); 136 ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class); 137 assertNull(op2.valueAt(index).get()); 138 ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class); 139 } 140 141 @Test 142 public void testIsEqualTo() { 143 final ObservableList<Integer> emptyList = FXCollections.emptyObservableList(); 144 final ObservableList<Integer> list1 = FXCollections.observableArrayList(data1_0); 145 final ObservableList<Integer> list2 = FXCollections.observableArrayList(data2_0, data2_1); 146 147 BooleanBinding binding = opNull.isEqualTo(emptyList); 148 assertEquals(false, binding.get()); 149 binding = opNull.isEqualTo(list1); 150 assertEquals(false, binding.get()); 151 binding = opNull.isEqualTo(list2); 152 assertEquals(false, binding.get()); 153 154 binding = opEmpty.isEqualTo(emptyList); 155 assertEquals(true, binding.get()); 156 binding = opEmpty.isEqualTo(list1); 157 assertEquals(false, binding.get()); 158 binding = opEmpty.isEqualTo(list2); 159 assertEquals(false, binding.get()); 160 161 binding = op1.isEqualTo(emptyList); 162 assertEquals(false, binding.get()); 163 binding = op1.isEqualTo(list1); 164 assertEquals(true, binding.get()); 165 binding = op1.isEqualTo(list2); 166 assertEquals(false, binding.get()); 167 168 binding = op2.isEqualTo(emptyList); 169 assertEquals(false, binding.get()); 170 binding = op2.isEqualTo(list1); 171 assertEquals(false, binding.get()); 172 binding = op2.isEqualTo(list2); 173 assertEquals(true, binding.get()); 174 } 175 176 177 @Test 178 public void testIsNotEqualTo() { 179 final ObservableList<Integer> emptyList = FXCollections.emptyObservableList(); 180 final ObservableList<Integer> list1 = FXCollections.observableArrayList(data1_0); 181 final ObservableList<Integer> list2 = FXCollections.observableArrayList(data2_0, data2_1); 182 183 BooleanBinding binding = opNull.isNotEqualTo(emptyList); 184 assertEquals(true, binding.get()); 185 binding = opNull.isNotEqualTo(list1); 186 assertEquals(true, binding.get()); 187 binding = opNull.isNotEqualTo(list2); 188 assertEquals(true, binding.get()); 189 190 binding = opEmpty.isNotEqualTo(emptyList); 191 assertEquals(false, binding.get()); 192 binding = opEmpty.isNotEqualTo(list1); 193 assertEquals(true, binding.get()); 194 binding = opEmpty.isNotEqualTo(list2); 195 assertEquals(true, binding.get()); 196 197 binding = op1.isNotEqualTo(emptyList); 198 assertEquals(true, binding.get()); 199 binding = op1.isNotEqualTo(list1); 200 assertEquals(false, binding.get()); 201 binding = op1.isNotEqualTo(list2); 202 assertEquals(true, binding.get()); 203 204 binding = op2.isNotEqualTo(emptyList); 205 assertEquals(true, binding.get()); 206 binding = op2.isNotEqualTo(list1); 207 assertEquals(true, binding.get()); 208 binding = op2.isNotEqualTo(list2); 209 assertEquals(false, binding.get()); 210 } 211 212 @Test 213 public void testIsNull() { 214 assertTrue(opNull.isNull().get()); 215 assertFalse(opEmpty.isNull().get()); 216 assertFalse(op1.isNull().get()); 217 assertFalse(op2.isNull().get()); 218 } 219 220 @Test 221 public void testIsNotNull() { 222 assertFalse(opNull.isNotNull().get()); 223 assertTrue(opEmpty.isNotNull().get()); 224 assertTrue(op1.isNotNull().get()); 225 assertTrue(op2.isNotNull().get()); 226 } 227 228 @Test 229 public void testAsString() { 230 assertEquals("null", opNull.asString().get()); 231 assertEquals(Collections.emptyList().toString(), opEmpty.asString().get()); 232 assertEquals(Arrays.asList(data1_0).toString(), op1.asString().get()); 233 assertEquals(Arrays.asList(data2_0, data2_1).toString(), op2.asString().get()); 234 } 235 236 @Test 237 public void testSize() { 238 assertEquals(0, opNull.size()); 239 assertEquals(0, opEmpty.size()); 240 assertEquals(1, op1.size()); 241 assertEquals(2, op2.size()); 242 } 243 244 @Test 245 public void testIsEmpty() { 246 assertTrue(opNull.isEmpty()); 247 assertTrue(opEmpty.isEmpty()); 248 assertFalse(op1.isEmpty()); 249 assertFalse(op2.isEmpty()); 250 } 251 252 @Test 253 public void testContains() { 254 assertFalse(opNull.contains(data1_0)); 255 assertFalse(opNull.contains(data2_0)); 256 assertFalse(opNull.contains(data2_1)); 257 258 assertFalse(opEmpty.contains(data1_0)); 259 assertFalse(opEmpty.contains(data2_0)); 260 assertFalse(opEmpty.contains(data2_1)); 261 262 assertTrue(op1.contains(data1_0)); 263 assertFalse(op1.contains(data2_0)); 264 assertFalse(op1.contains(data2_1)); 265 266 assertFalse(op2.contains(data1_0)); 267 assertTrue(op2.contains(data2_0)); 268 assertTrue(op2.contains(data2_1)); 269 } 270 271 @Test 272 public void testIterator() { 273 assertFalse(opNull.iterator().hasNext()); 274 assertFalse(opEmpty.iterator().hasNext()); 275 276 Iterator<Integer> iterator = op1.iterator(); 277 assertTrue(iterator.hasNext()); 278 assertEquals(data1_0, iterator.next()); 279 assertFalse(iterator.hasNext()); 280 281 iterator = op2.iterator(); 282 assertTrue(iterator.hasNext()); 283 assertEquals(data2_0, iterator.next()); 284 assertTrue(iterator.hasNext()); 285 assertEquals(data2_1, iterator.next()); 286 assertFalse(iterator.hasNext()); 287 } 288 289 @Test 290 public void testToArray_NoArg() { 291 assertArrayEquals(new Object[0], opNull.toArray()); 292 assertArrayEquals(new Object[0], opEmpty.toArray()); 293 assertArrayEquals(new Object[] {data1_0}, op1.toArray()); 294 assertArrayEquals(new Object[] {data2_0, data2_1}, op2.toArray()); 295 } 296 297 @Test 298 public void testToArray_WithArg() { 299 Integer[] arrayIn = new Integer[] {datax}; 300 Integer[] arrayOut = opNull.toArray(arrayIn); 301 assertArrayEquals(new Integer[] {null}, arrayIn); 302 assertArrayEquals(new Integer[] {null}, arrayOut); 303 304 arrayIn = new Integer[] {datax}; 305 arrayOut = new Integer[] {datax}; 306 arrayOut = opEmpty.toArray(arrayIn); 307 assertArrayEquals(new Integer[] {null}, arrayIn); 308 assertArrayEquals(new Integer[] {null}, arrayOut); 309 310 arrayIn = new Integer[] {datax}; 311 arrayOut = new Integer[] {datax}; 312 arrayOut = op1.toArray(arrayIn); 313 assertArrayEquals(new Integer[] {data1_0}, arrayIn); 314 assertArrayEquals(new Integer[] {data1_0}, arrayOut); 315 316 arrayIn = new Integer[] {datax}; 317 arrayOut = new Integer[] {datax}; 318 arrayOut = op2.toArray(arrayIn); 319 assertArrayEquals(new Integer[] {datax}, arrayIn); 320 assertArrayEquals(new Integer[] {data2_0, data2_1}, arrayOut); 321 } 322 }