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 
  26 package com.sun.javafx.binding;
  27 
  28 import static org.junit.Assert.*;
  29 
  30 import javafx.beans.WeakListener;
  31 import org.junit.Test;
  32 
  33 public class ExpressionHelperBaseTest {
  34     
  35     private static final Object listener = new Object();
  36     private static final Object listener2 = new Object();
  37     
  38     private static final WeakListener validWeakListener = () -> false;
  39     
  40     private static final WeakListener gcedWeakListener = () -> true;
  41     
  42     @Test
  43     public void testEmptyArray() {
  44         Object[] array = new Object[0];
  45         assertEquals(0, ExpressionHelperBase.trim(0, array));
  46         assertArrayEquals(new Object[0], array);
  47         
  48         array = new Object[1];
  49         assertEquals(0, ExpressionHelperBase.trim(0, array));
  50         assertArrayEquals(new Object[1], array);
  51     }
  52     
  53     @Test
  54     public void testSingleElement() {
  55         Object[] array = new Object[] {listener};
  56         assertEquals(1, ExpressionHelperBase.trim(1, array));
  57         assertArrayEquals(new Object[] {listener}, array);
  58         
  59         array = new Object[] {validWeakListener};
  60         assertEquals(1, ExpressionHelperBase.trim(1, array));
  61         assertArrayEquals(new Object[] {validWeakListener}, array);
  62         
  63         array = new Object[] {gcedWeakListener};
  64         assertEquals(0, ExpressionHelperBase.trim(1, array));
  65         assertArrayEquals(new Object[] {null}, array);
  66         
  67         array = new Object[] {listener, null};
  68         assertEquals(1, ExpressionHelperBase.trim(1, array));
  69         assertArrayEquals(new Object[] {listener, null}, array);
  70         
  71         array = new Object[] {validWeakListener, null};
  72         assertEquals(1, ExpressionHelperBase.trim(1, array));
  73         assertArrayEquals(new Object[] {validWeakListener, null}, array);
  74         
  75         array = new Object[] {gcedWeakListener, null};
  76         assertEquals(0, ExpressionHelperBase.trim(1, array));
  77         assertArrayEquals(new Object[] {null, null}, array);
  78     }
  79     
  80     @Test
  81     public void testMultipleElements() {
  82         Object[] array = new Object[] {validWeakListener, listener, listener2};
  83         assertEquals(3, ExpressionHelperBase.trim(3, array));
  84         assertArrayEquals(new Object[] {validWeakListener, listener, listener2}, array);
  85         
  86         array = new Object[] {listener, validWeakListener, listener2};
  87         assertEquals(3, ExpressionHelperBase.trim(3, array));
  88         assertArrayEquals(new Object[] {listener, validWeakListener, listener2}, array);
  89         
  90         array = new Object[] {listener, listener2, validWeakListener};
  91         assertEquals(3, ExpressionHelperBase.trim(3, array));
  92         assertArrayEquals(new Object[] {listener, listener2, validWeakListener}, array);
  93         
  94         array = new Object[] {validWeakListener, listener, listener2, null};
  95         assertEquals(3, ExpressionHelperBase.trim(3, array));
  96         assertArrayEquals(new Object[] {validWeakListener, listener, listener2, null}, array);
  97         
  98         array = new Object[] {listener, validWeakListener, listener2, null};
  99         assertEquals(3, ExpressionHelperBase.trim(3, array));
 100         assertArrayEquals(new Object[] {listener, validWeakListener, listener2, null}, array);
 101         
 102         array = new Object[] {listener, listener2, validWeakListener, null};
 103         assertEquals(3, ExpressionHelperBase.trim(3, array));
 104         assertArrayEquals(new Object[] {listener, listener2, validWeakListener, null}, array);
 105 
 106 
 107         array = new Object[] {gcedWeakListener, validWeakListener, listener};
 108         assertEquals(2, ExpressionHelperBase.trim(3, array));
 109         assertArrayEquals(new Object[] {validWeakListener, listener, null}, array);
 110         
 111         array = new Object[] {gcedWeakListener, listener, validWeakListener};
 112         assertEquals(2, ExpressionHelperBase.trim(3, array));
 113         assertArrayEquals(new Object[] {listener, validWeakListener, null}, array);
 114         
 115         array = new Object[] {gcedWeakListener, validWeakListener, listener, null};
 116         assertEquals(2, ExpressionHelperBase.trim(3, array));
 117         assertArrayEquals(new Object[] {validWeakListener, listener, null, null}, array);
 118         
 119         array = new Object[] {gcedWeakListener, listener, validWeakListener, null};
 120         assertEquals(2, ExpressionHelperBase.trim(3, array));
 121         assertArrayEquals(new Object[] {listener, validWeakListener, null, null}, array);
 122         
 123 
 124         array = new Object[] {validWeakListener, gcedWeakListener, listener};
 125         assertEquals(2, ExpressionHelperBase.trim(3, array));
 126         assertArrayEquals(new Object[] {validWeakListener, listener, null}, array);
 127         
 128         array = new Object[] {listener, gcedWeakListener, validWeakListener};
 129         assertEquals(2, ExpressionHelperBase.trim(3, array));
 130         assertArrayEquals(new Object[] {listener, validWeakListener, null}, array);
 131         
 132         array = new Object[] {validWeakListener, gcedWeakListener, listener, null};
 133         assertEquals(2, ExpressionHelperBase.trim(3, array));
 134         assertArrayEquals(new Object[] {validWeakListener, listener, null, null}, array);
 135         
 136         array = new Object[] {listener, gcedWeakListener, validWeakListener, null};
 137         assertEquals(2, ExpressionHelperBase.trim(3, array));
 138         assertArrayEquals(new Object[] {listener, validWeakListener, null, null}, array);
 139         
 140 
 141         array = new Object[] {validWeakListener, listener, gcedWeakListener};
 142         assertEquals(2, ExpressionHelperBase.trim(3, array));
 143         assertArrayEquals(new Object[] {validWeakListener, listener, null}, array);
 144         
 145         array = new Object[] {listener, validWeakListener, gcedWeakListener};
 146         assertEquals(2, ExpressionHelperBase.trim(3, array));
 147         assertArrayEquals(new Object[] {listener, validWeakListener, null}, array);
 148         
 149         array = new Object[] {validWeakListener, listener, gcedWeakListener, null};
 150         assertEquals(2, ExpressionHelperBase.trim(3, array));
 151         assertArrayEquals(new Object[] {validWeakListener, listener, null, null}, array);
 152         
 153         array = new Object[] {listener, validWeakListener, gcedWeakListener, null};
 154         assertEquals(2, ExpressionHelperBase.trim(3, array));
 155         assertArrayEquals(new Object[] {listener, validWeakListener, null, null}, array);
 156         
 157         
 158         array = new Object[] {gcedWeakListener, gcedWeakListener};
 159         assertEquals(0, ExpressionHelperBase.trim(2, array));
 160         assertArrayEquals(new Object[] {null, null}, array);
 161         
 162         array = new Object[] {gcedWeakListener, gcedWeakListener, null};
 163         assertEquals(0, ExpressionHelperBase.trim(2, array));
 164         assertArrayEquals(new Object[] {null, null, null}, array);
 165     }
 166     
 167     
 168 }