/* * GeoTools - The Open Source Java GIS Toolkit * http://geotools.org * * (C) 2003-2008, Open Source Geospatial Foundation (OSGeo) * * 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; * version 2.1 of the License. * * 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. */ package org.geotools.feature.visitor; import junit.framework.TestCase; /* So far CalcResult contains the following conversion methods which call getValue() and then convert to the type we want. The ones marked below with a "!" haven't really found an implementation yet and no tests have been written. They should work under normal circumstances, but will likely explode: public int toInt() public double toDouble(); public String toString(); public long toLong(); public float toFloat(); ! public Geometry toGeometry(); ! public Point toPoint(); ! public Set toSet(); ! public List toList(); ! public Object[] toArray(); ! public Map toMap(); */ //TODO: add more tests as needed /** * Purpose: these tests ensure that the output of CalcResult converts as expected. * * @source $URL$ */ public class CalcResultTest extends TestCase { MockCalcResult result = new MockCalcResult(); Integer val1 = new Integer(4); Long val2 = new Long(5); Float val3 = new Float(6.0); Double val4 = new Double(7.0); String val5 = new String("8"); String val6 = new String("Random text of arbitrary complexity."); public void testInt() { //int --> int result.setValue(val1); assertEquals((int) 4, result.toInt()); //long --> int result.setValue(val2); assertEquals((int) 5, result.toInt()); //float --> int result.setValue(val3); assertEquals((int) 6, result.toInt()); //double --> int result.setValue(val4); assertEquals((int) 7, result.toInt()); //string --> int (a string that looks like a number, should we add this functionality?) result.setValue(val5); assertEquals((int) 0, result.toInt()); //string --> int (a real string which clearly isn't an int, so we expect nothing good) result.setValue(val6); assertEquals((int) 0, result.toInt()); } public void testLong() { //int --> long result.setValue(val1); assertEquals((long) 4, result.toLong()); //long --> long result.setValue(val2); assertEquals((long) 5, result.toLong()); //float --> long result.setValue(val3); assertEquals((long) 6, result.toLong()); //double --> long result.setValue(val4); assertEquals((long) 7, result.toLong()); //string --> long (a string that looks like a number, should we add this functionality?) result.setValue(val5); assertEquals((long) 0, result.toLong()); //string --> long (a real string which clearly isn't an int, so we expect nothing good) result.setValue(val6); assertEquals((long) 0, result.toLong()); } public void testFloat() { //int --> float result.setValue(val1); assertEquals((float) 4, result.toFloat(), 0); //long --> float result.setValue(val2); assertEquals((float) 5, result.toFloat(), 0); //float --> float result.setValue(val3); assertEquals((float) 6, result.toFloat(), 0); //double --> float result.setValue(val4); assertEquals((float) 7, result.toFloat(), 0); //string --> float (a string that looks like a number, should we add this functionality?) result.setValue(val5); assertEquals((float) 0, result.toFloat(), 0); //string --> float (a real string which clearly isn't an int, so we expect nothing good) result.setValue(val6); assertEquals((float) 0, result.toFloat(), 0); } public void testDouble() { //int --> double result.setValue(val1); assertEquals((double) 4, result.toDouble(), 0); //long --> double result.setValue(val2); assertEquals((double) 5, result.toDouble(), 0); //float --> double result.setValue(val3); assertEquals((double) 6, result.toDouble(), 0); //double --> double result.setValue(val4); assertEquals((double) 7, result.toDouble(), 0); //string --> double (a string that looks like a number, should we add this functionality?) result.setValue(val5); assertEquals((double) 0, result.toDouble(), 0); //string --> double (a real string which clearly isn't an int, so we expect nothing good) result.setValue(val6); assertEquals((double) 0, result.toDouble(), 0); } public void testString() { //int --> string result.setValue(val1); assertEquals("4", result.toString()); //long --> string result.setValue(val2); assertEquals("5", result.toString()); //float --> string result.setValue(val3); assertEquals("6.0", result.toString()); //double --> string result.setValue(val4); assertEquals("7.0", result.toString()); //string --> string result.setValue(val5); assertEquals("8", result.toString()); //string --> string result.setValue(val6); assertEquals("Random text of arbitrary complexity.", result.toString()); } /** * A simple results set which allows us to test the AbstractCalcResult type * conversions */ public class MockCalcResult extends AbstractCalcResult { Object value; public MockCalcResult() { } public Object getValue() { return value; } public void setValue(Object value) { this.value = value; } } }