/* * JBoss, Home of Professional Open Source. * See the COPYRIGHT.txt file distributed with this work for information * regarding copyright ownership. Some portions may be licensed * to Red Hat, Inc. under one or more contributor license agreements. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301 USA. */ package org.teiid.query.sql.symbol; import static org.junit.Assert.*; import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.List; import org.junit.Test; import org.teiid.core.types.DataTypeManager; import org.teiid.core.util.UnitTestUtil; @SuppressWarnings("nls") public class TestConstant { // ################################## TEST HELPERS ################################ public static final Constant sample1() { String s = "the string"; //$NON-NLS-1$ return new Constant(s); } public static final Constant sample2() { Integer i = new Integer(5); return new Constant(i); } // ################################## ACTUAL TESTS ################################ @Test public void testString() { String s = "the string"; //$NON-NLS-1$ Constant c = new Constant(s); assertEquals("Value is incorrect: ", s, c.getValue()); //$NON-NLS-1$ assertEquals("Type is incorrect: ", DataTypeManager.DefaultDataClasses.STRING, c.getType()); //$NON-NLS-1$ assertEquals("Should be non-null: ", false, c.isNull()); //$NON-NLS-1$ assertEquals("Object does not equal itself", c, c); //$NON-NLS-1$ Constant c2 = new Constant(s); assertEquals("Constants for same object aren't equal: ", c, c2); //$NON-NLS-1$ Constant cc = (Constant) c.clone(); assertEquals("Cloned object not equal to original: ", c, cc); //$NON-NLS-1$ } @Test public void testInteger() { Integer i = new Integer(5); Constant c = new Constant(i); assertEquals("Value is incorrect: ", i, c.getValue()); //$NON-NLS-1$ assertEquals("Type is incorrect: ", DataTypeManager.DefaultDataClasses.INTEGER, c.getType()); //$NON-NLS-1$ assertEquals("Should be non-null: ", false, c.isNull()); //$NON-NLS-1$ assertEquals("Object does not equal itself", c, c); //$NON-NLS-1$ Constant c2 = new Constant(i); assertEquals("Constants for same object aren't equal: ", c, c2); //$NON-NLS-1$ Constant cc = (Constant) c.clone(); assertEquals("Cloned object not equal to original: ", c, cc); //$NON-NLS-1$ } @Test public void testNoTypeNull() { Constant c = new Constant(null); assertEquals("Value is incorrect: ", null, c.getValue()); //$NON-NLS-1$ assertEquals("Type is incorrect: ", DataTypeManager.DefaultDataClasses.NULL, c.getType()); //$NON-NLS-1$ assertEquals("Should be null: ", true, c.isNull()); //$NON-NLS-1$ assertEquals("Object does not equal itself", c, c); //$NON-NLS-1$ Constant c2 = new Constant(null); assertEquals("Constants for same object aren't equal: ", c, c2); //$NON-NLS-1$ Constant cc = (Constant) c.clone(); assertEquals("Cloned object not equal to original: ", c, cc); //$NON-NLS-1$ } @Test public void testTypedNull() { Constant c = new Constant(null, DataTypeManager.DefaultDataClasses.STRING); assertEquals("Value is incorrect: ", null, c.getValue()); //$NON-NLS-1$ assertEquals("Type is incorrect: ", DataTypeManager.DefaultDataClasses.STRING, c.getType()); //$NON-NLS-1$ assertEquals("Should be null: ", true, c.isNull()); //$NON-NLS-1$ assertEquals("Object does not equal itself", c, c); //$NON-NLS-1$ Constant c2 = new Constant(null, DataTypeManager.DefaultDataClasses.STRING); assertEquals("Constants for same object aren't equal: ", c, c2); //$NON-NLS-1$ Constant cc = (Constant) c.clone(); assertEquals("Cloned object not equal to original: ", c, cc); //$NON-NLS-1$ Constant c3 = new Constant(null); assertEquals("Typed null not equal to non-typed null: ", c, c3); //$NON-NLS-1$ } @Test public void testClone() { // Use this object as the "object"-type value for c1 StringBuffer value = new StringBuffer("x"); //$NON-NLS-1$ Constant c1 = new Constant(value, DataTypeManager.DefaultDataClasses.OBJECT); Constant copy = (Constant) c1.clone(); // Check equality assertEquals("Cloned object not equal to original: ", c1, copy); //$NON-NLS-1$ // Check that modifying original value changes c1 and clone - this is expected as Constant // uses a shallow clone value.append("y"); //$NON-NLS-1$ assertTrue("Original object has not changed, but should have", ((StringBuffer)c1.getValue()).toString().equals("xy")); //$NON-NLS-1$ //$NON-NLS-2$ assertTrue("Cloned object has not changed, but should have", ((StringBuffer)copy.getValue()).toString().equals("xy")); //$NON-NLS-1$ //$NON-NLS-2$ } @Test public void testSelfEquivalence(){ Object s1 = sample1(); int equals = 0; UnitTestUtil.helpTestEquivalence(equals, s1, s1); } @Test public void testEquivalence(){ Object s1 = sample1(); Object s1a = sample1(); int equals = 0; UnitTestUtil.helpTestEquivalence(equals, s1, s1a); } @Test public void testNonEquivalence(){ Object s1 = sample1(); Object s2 = sample2(); int equals = -1; try{ UnitTestUtil.helpTestEquivalence(equals, s1, s2); }catch(ClassCastException e) { // do nothing - this is caught because the method above compares two different objects // this exception should be thrown } } @Test public void testPaddedStringComparison(){ assertEquals(1, Constant.comparePadded("a", "")); assertEquals(0, Constant.comparePadded("a", "a ")); assertEquals(-24, Constant.comparePadded("ab ", "az ")); assertEquals(66, Constant.comparePadded("ab ", "a ")); assertEquals(0, Constant.comparePadded("a1 ", "a1")); } @Test public void testCollation() { Comparator<Object> c = Constant.getComparator("es", true); List<String> vals = Arrays.asList("ñ", "n", "o"); Collections.sort(vals, c); assertEquals("ñ", vals.get(1)); assertEquals(0, c.compare("a ", "a")); } }