Started to add unit tests.

Refactored IntegerArrayList, which is now not needed anymore (who implemented this in the first place?)
Auto-Formatted DPointSetMultiIcon -> it was just so badly formatted I had to do auto formatting to make it readable.

Added test for eva2.tools.StringTools (partly at least)
This commit is contained in:
Fabian Becker 2012-04-20 09:13:21 +00:00
parent dcbb488bb9
commit af82e0e5a2
4 changed files with 386 additions and 475 deletions

View File

@ -8,7 +8,6 @@ import java.awt.Point;
import java.awt.Stroke; import java.awt.Stroke;
import java.util.ArrayList; import java.util.ArrayList;
import eva2.tools.IntegerArrayList;
import eva2.tools.chart2d.DArray; import eva2.tools.chart2d.DArray;
import eva2.tools.chart2d.DBorder; import eva2.tools.chart2d.DBorder;
import eva2.tools.chart2d.DComponent; import eva2.tools.chart2d.DComponent;
@ -37,7 +36,7 @@ public class DPointSetMultiIcon extends DComponent
class JumpManager class JumpManager
{ {
protected int index = -1; protected int index = -1;
protected IntegerArrayList jumps = new IntegerArrayList(); protected ArrayList<Integer> jumps = new ArrayList<Integer>();
public void addJump() public void addJump()
{ {

View File

@ -1,161 +0,0 @@
/**
* Filename: $RCSfile: IntegerArrayList.java,v $
* Purpose: This class is similar to 'java.util.ArrayList', except that it can
* only hold and manage integer values.
* Language: Java
* Compiler: JDK 1.2
* Authors: Fred Rapp
* Version: $Revision: 1.1.1.1 $
* $Date: 2003/07/03 14:59:40 $
* $Author: ulmerh $
* Copyright (c) Dept. Computer Architecture, University of Tuebingen, Germany
*/
package eva2.tools;
/*==========================================================================*
* CLASS DECLARATION
*==========================================================================*/
/**
* This class is similar to 'java.util.ArrayList', except that it can
* only hold and manage integer values.
*/
public class IntegerArrayList
{
/*-------------------------------------------------------------------------*
* private member variables
*-------------------------------------------------------------------------*/
private int[] integerArray = null;
private int integerCount = 0;
private int initialSize;
private int incrementFactor;
/*------------------------------------------------------------------------*
* constructor
*------------------------------------------------------------------------*/
public IntegerArrayList()
{
// call other constructor with default values
this(100, 3);
}
public IntegerArrayList(int initialSize, int incrementFactor)
{
this.initialSize = initialSize;
this.incrementFactor = incrementFactor;
// create new integer array of initial size
integerArray = new int[initialSize];
}
public void destroy() { integerArray = null; integerCount = 0; }
/*-------------------------------------------------------------------------*
* public methods
*-------------------------------------------------------------------------*/
/**
* Clears the contents of this integer list and sets it back to it's initial state.
*/
public void clear() { integerArray = new int[initialSize]; integerCount = 0; }
/**
* Returns the number of components in this list.
*/
public int size() { return integerCount; }
/**
* Parses given string to integer and adds it to the integer list.
* @return true if parsing was successful, false if an error occured.
*/
public boolean add(String stringValue)
{
boolean success = false;
try {
int value = Integer.parseInt(stringValue);
add(value);
success = true;
}
catch (Exception e) {}
return success;
}
/**
* Adds a new integer value to the integer list.
*/
public void add(int value)
{
// check integer array size
if (integerCount == integerArray.length)
{
// increase size of int array
int old_length = integerArray.length;
int new_length = incrementFactor * old_length;
int[] new_array = new int[new_length];
for (int i=0; i<old_length; i++) {
new_array[i] = integerArray[i];
}
integerArray = new_array;
}
// add given value to array
integerArray[integerCount++] = value;
}
/**
* Returns the integer value at the given position or 'min-value' if out of array bounds.
*/
public int get(int index)
{
if ((index < 0) || (index >= integerCount)) { return Integer.MIN_VALUE; }
return integerArray[index];
}
/**
* Returns the contents of this list as an array of integer values.
* @param exactLength determines if the returned array should have the exactly right length, or if longer arrays are allowed
*/
public int[] getIntegerArray(boolean exactLength)
{
// check if we can simply return our internal integer array
if (!exactLength || (integerArray.length == integerCount)) { return integerArray; }
// make a copy of the array with the exactly right length
int size = integerCount;
int[] new_array = new int[ size];
for (int i=0; i< size; i++) { new_array[i] = integerArray[i]; }
return new_array;
}
/**
* Returns the contents of this list as an array of double values.
*/
public double[] getDoubleArray()
{
// make a copy of the array
int size = integerCount;
double[] new_array = new double[ size];
for (int i=0; i< size; i++) { new_array[i] = integerArray[i]; }
return new_array;
}
/**
* Returns the contents of this list as an array of strings.
*/
public String[] getStringArray()
{
// make a copy of the array
int size = integerCount;
String[] new_array = new String[ size];
for (int i=0; i<size; i++) { new_array[i] = "" + integerArray[i]; }
return new_array;
}
}
/****************************************************************************
* END OF FILE
****************************************************************************/

View File

@ -1,51 +1,41 @@
/** /**
* Filename: $RCSfile: DPointSet.java,v $ * Filename: $RCSfile: DPointSet.java,v $ Purpose: Language: Java Compiler: JDK 1.3 Authors: Fabian
* Purpose: * Hennecke Version: $Revision: 1.1.1.1 $ $Date: 2003/07/03 14:59:42 $ $Author: ulmerh $ Copyright
* Language: Java * (c) Dept. Computer Architecture, University of Tuebingen, Germany
* Compiler: JDK 1.3
* Authors: Fabian Hennecke
* Version: $Revision: 1.1.1.1 $
* $Date: 2003/07/03 14:59:42 $
* $Author: ulmerh $
* Copyright (c) Dept. Computer Architecture, University of Tuebingen, Germany
*/ */
package eva2.tools.chart2d; package eva2.tools.chart2d;
/*==========================================================================* /*
* IMPORTS * ==========================================================================* IMPORTS
*==========================================================================*/ *==========================================================================
*/
import java.awt.*; import java.awt.*;
import eva2.tools.IntegerArrayList;
import eva2.tools.math.Mathematics; import eva2.tools.math.Mathematics;
import java.util.ArrayList;
/*==========================================================================* public class DPointSet extends DComponent {
* CLASS DECLARATION
*==========================================================================*/
public class DPointSet extends DComponent
{
protected DPointIcon icon = null; protected DPointIcon icon = null;
/*-------------------------------------------------------------------------* /*
* private member variables * -------------------------------------------------------------------------* private member
*-------------------------------------------------------------------------*/ * variables
*-------------------------------------------------------------------------
*/
protected DIntDoubleMap x, y; protected DIntDoubleMap x, y;
protected boolean connected; protected boolean connected;
protected Stroke stroke = new BasicStroke(); protected Stroke stroke = new BasicStroke();
protected JumpManager jumper = new JumpManager(); protected JumpManager jumper = new JumpManager();
/*-------------------------------------------------------------------------* /*
* constructor * -------------------------------------------------------------------------* constructor
*-------------------------------------------------------------------------*/ *-------------------------------------------------------------------------
*/
public DPointSet() { public DPointSet() {
this(10, 2); this(10, 2);
} }
public DPointSet(int initial_capacity) { public DPointSet(int initial_capacity) {
this(initial_capacity, 2); this(initial_capacity, 2);
} }
@ -56,24 +46,26 @@ public class DPointSet extends DComponent
} }
public DPointSet(DIntDoubleMap x_values, DIntDoubleMap y_values) { public DPointSet(DIntDoubleMap x_values, DIntDoubleMap y_values) {
if( x_values.getSize() != y_values.getSize() ) throw if (x_values.getSize() != y_values.getSize()) {
new IllegalArgumentException( throw new IllegalArgumentException(
"The number of x-values has to be the same than the number of y-values" "The number of x-values has to be the same than the number of y-values");
); }
x = x_values; x = x_values;
y = y_values; y = y_values;
restore(); restore();
setDBorder(new DBorder(1, 1, 1, 1)); setDBorder(new DBorder(1, 1, 1, 1));
} }
/*-------------------------------------------------------------------------* /*
* public methods * -------------------------------------------------------------------------* public methods
*-------------------------------------------------------------------------*/ *-------------------------------------------------------------------------
*/
public void paint(DMeasures m) { public void paint(DMeasures m) {
Graphics2D g = (Graphics2D) m.getGraphics(); Graphics2D g = (Graphics2D) m.getGraphics();
g.setStroke(stroke); g.setStroke(stroke);
if( color != null ) g.setColor( color ); if (color != null) {
g.setColor(color);
}
int size = getSize(); int size = getSize();
if (connected && size > 1) { if (connected && size > 1) {
jumper.restore(); jumper.restore();
@ -82,8 +74,9 @@ public class DPointSet extends DComponent
Point p1 = null, p2; Point p1 = null, p2;
for (int i = interval[0]; i < interval[1]; i++) { for (int i = interval[0]; i < interval[1]; i++) {
p2 = m.getPoint(x.getImage(i), y.getImage(i)); p2 = m.getPoint(x.getImage(i), y.getImage(i));
if( p1 != null) if (p1 != null) {
g.drawLine(p1.x, p1.y, p2.x, p2.y); g.drawLine(p1.x, p1.y, p2.x, p2.y);
}
if (icon != null) { if (icon != null) {
g.setStroke(new BasicStroke()); g.setStroke(new BasicStroke());
g.translate(p2.x, p2.y); g.translate(p2.x, p2.y);
@ -94,16 +87,14 @@ public class DPointSet extends DComponent
p1 = p2; p1 = p2;
} }
} }
} } else {
else{
Point p; Point p;
for (int i = 0; i < size; i++) { for (int i = 0; i < size; i++) {
p = m.getPoint(x.getImage(i), y.getImage(i)); p = m.getPoint(x.getImage(i), y.getImage(i));
if (icon == null) { if (icon == null) {
g.drawLine(p.x - 1, p.y - 1, p.x + 1, p.y + 1); g.drawLine(p.x - 1, p.y - 1, p.x + 1, p.y + 1);
g.drawLine(p.x + 1, p.y - 1, p.x - 1, p.y + 1); g.drawLine(p.x + 1, p.y - 1, p.x - 1, p.y + 1);
} } else {
else{
g.setStroke(new BasicStroke()); g.setStroke(new BasicStroke());
g.translate(p.x, p.y); g.translate(p.x, p.y);
icon.paint(g); icon.paint(g);
@ -126,17 +117,15 @@ public class DPointSet extends DComponent
} }
/** /**
* method causes the DPointSet to interupt the connected painting at the * method causes the DPointSet to interupt the connected painting at the current position
* current position
*/ */
public void jump() { public void jump() {
jumper.addJump(); jumper.addJump();
} }
/** /**
* method removes all jump positions * method removes all jump positions if the DPointSet is connected, all points will be painted
* if the DPointSet is connected, all points will be painted connected to * connected to their following point
* their following point
*/ */
public void removeJumps() { public void removeJumps() {
jumper.reset(); jumper.reset();
@ -167,7 +156,9 @@ public class DPointSet extends DComponent
* @param p the point to insert * @param p the point to insert
*/ */
public void setDPoint(int index, DPoint p) { public void setDPoint(int index, DPoint p) {
if( index >= x.getSize() ) throw new ArrayIndexOutOfBoundsException(index); if (index >= x.getSize()) {
throw new ArrayIndexOutOfBoundsException(index);
}
rectangle.insert(p); rectangle.insert(p);
x.setImage(index, p.x); x.setImage(index, p.x);
y.setImage(index, p.y); y.setImage(index, p.y);
@ -182,8 +173,11 @@ public class DPointSet extends DComponent
*/ */
public void setIcon(DPointIcon icon) { public void setIcon(DPointIcon icon) {
this.icon = icon; this.icon = icon;
if( icon == null ) setDBorder(new DBorder(1,1,1,1)); if (icon == null) {
else setDBorder( icon.getDBorder() ); setDBorder(new DBorder(1, 1, 1, 1));
} else {
setDBorder(icon.getDBorder());
}
} }
/** /**
@ -196,13 +190,15 @@ public class DPointSet extends DComponent
} }
/** /**
* method sets the stroke of the line * method sets the stroke of the line if the points were not connected, they now will be
* if the points were not connected, they now will be connected * connected
* *
* @param s the new stroke * @param s the new stroke
*/ */
public void setStroke(Stroke s) { public void setStroke(Stroke s) {
if( s == null ) s = new BasicStroke(); if (s == null) {
s = new BasicStroke();
}
stroke = s; stroke = s;
repaint(); repaint();
} }
@ -232,11 +228,15 @@ public class DPointSet extends DComponent
public void setConnected(boolean aFlag) { public void setConnected(boolean aFlag) {
boolean changed = !(aFlag == connected); boolean changed = !(aFlag == connected);
connected = aFlag; connected = aFlag;
if( changed ) repaint(); if (changed) {
repaint();
}
} }
public void removeAllPoints() { public void removeAllPoints() {
if( x.getSize() == 0 ) return; if (x.getSize() == 0) {
return;
}
x.reset(); x.reset();
y.reset(); y.reset();
jumper.reset(); jumper.reset();
@ -246,16 +246,21 @@ public class DPointSet extends DComponent
public String toString() { public String toString() {
String text = "eva2.tools.chart2d.DPointSet[size:" + getSize(); String text = "eva2.tools.chart2d.DPointSet[size:" + getSize();
for( int i=0; i<x.getSize(); i++ ) for (int i = 0; i < x.getSize(); i++) {
text += ",(" + x.getImage(i) + "," + y.getImage(i) + ")"; text += ",(" + x.getImage(i) + "," + y.getImage(i) + ")";
}
text += "]"; text += "]";
return text; return text;
} }
/** /**
* method returns the index to the nearest <code>DPoint</code> in this <code>DPointSet</code>. * method returns the index to the nearest
* <code>DPoint</code> in this
* <code>DPointSet</code>.
* *
* @return the index to the nearest <code>DPoint</code>. -1 if no nearest <code>DPoint</code> was found. * @return the index to the nearest
* <code>DPoint</code>. -1 if no nearest
* <code>DPoint</code> was found.
*/ */
public int getNearestDPointIndex(DPoint point) { public int getNearestDPointIndex(DPoint point) {
double minValue = Double.MAX_VALUE; double minValue = Double.MAX_VALUE;
@ -273,15 +278,21 @@ public class DPointSet extends DComponent
} }
/** /**
* method returns the nearest <code>DPoint</code> in this <code>DPointSet</code>. * method returns the nearest
* <code>DPoint</code> in this
* <code>DPointSet</code>.
* *
* @return the nearest <code>DPoint</code> * @return the nearest
* <code>DPoint</code>
*/ */
public DPoint getNearestDPoint(DPoint point) { public DPoint getNearestDPoint(DPoint point) {
int minIndex = getNearestDPointIndex(point); int minIndex = getNearestDPointIndex(point);
if(minIndex == -1) return null; if (minIndex == -1) {
else return new DPoint(x.getImage(minIndex), y.getImage(minIndex)); return null;
} else {
return new DPoint(x.getImage(minIndex), y.getImage(minIndex));
}
} }
// public int getSize(){ // public int getSize(){
@ -298,12 +309,12 @@ public class DPointSet extends DComponent
*/ */
public int getSize() { // testhu public int getSize() { // testhu
int size = x.getSize(); int size = x.getSize();
if( size <= y.getSize() ) if (size <= y.getSize()) {
return size; return size;
}
return x.getSize(); return x.getSize();
} }
protected void restore() { protected void restore() {
if (getSize() == 0) { if (getSize() == 0) {
rectangle = DRectangle.getEmpty(); rectangle = DRectangle.getEmpty();
@ -313,17 +324,17 @@ public class DPointSet extends DComponent
max_x = x.getMaxImageValue(), max_x = x.getMaxImageValue(),
min_y = y.getMinImageValue(), min_y = y.getMinImageValue(),
max_y = y.getMaxImageValue(); max_y = y.getMaxImageValue();
if (Mathematics.areFinite(min_x, max_x, min_y, max_y) == -1) if (Mathematics.areFinite(min_x, max_x, min_y, max_y) == -1) {
rectangle = new DRectangle(min_x, min_y, max_x - min_x, max_y - min_y); rectangle = new DRectangle(min_x, min_y, max_x - min_x, max_y - min_y);
// else }
// System.err.println("Warning, rectangle not restored due to invalid (infinite/NaN) values.");
} }
/** /**
* this class stores the jump positions (see this.jump) * this class stores the jump positions (see this.jump)
*/ */
class JumpManager { class JumpManager {
protected IntegerArrayList jumps = new IntegerArrayList();
protected ArrayList<Integer> jumps = new ArrayList<Integer>();
protected int index = -1; protected int index = -1;
public void addJump() { public void addJump() {
@ -331,19 +342,26 @@ public class DPointSet extends DComponent
} }
public int[] nextInterval() { public int[] nextInterval() {
int no_jumps = jumps.size(); int noJumps = jumps.size();
if( index >= no_jumps ) throw if (index >= noJumps) {
new ArrayIndexOutOfBoundsException("No more intervals in JumpManager"); throw new ArrayIndexOutOfBoundsException("No more intervals in JumpManager");
}
int[] inter = new int[2]; int[] inter = new int[2];
if( index == -1 ) inter[0] = 0; if (index == -1) {
else inter[0] = jumps.get(index); inter[0] = 0;
} else {
inter[0] = jumps.get(index);
}
index++; index++;
if( index < no_jumps ) inter[1] = jumps.get(index); if (index < noJumps) {
else inter[1] = getSize(); inter[1] = jumps.get(index);
} else {
inter[1] = getSize();
}
return inter; return inter;
} }
@ -362,7 +380,3 @@ public class DPointSet extends DComponent
} }
} }
} }
/****************************************************************************
* END OF FILE
****************************************************************************/

View File

@ -0,0 +1,59 @@
package eva2.tools;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import org.junit.After;
import static org.junit.Assert.assertEquals;
import org.junit.Before;
import org.junit.Test;
/**
*
* @author becker
*/
public class StringToolsTest {
public StringToolsTest() {
}
@Before
public void setUp() {
}
@After
public void tearDown() {
}
/**
* Test of humaniseCamelCase method, of class StringTools.
*/
@Test
public void testHumaniseCamelCase() {
HashMap<String, String> map = new HashMap<String, String>();
map.put("camelCase", "Camel Case");
map.put("Camel Case", "Camel Case");
map.put("thisIsAwesome", "This Is Awesome");
map.put("THQIsNice", "THQ Is Nice");
map.put("iLikeABC", "I Like ABC");
String key, value;
Iterator iter = map.entrySet().iterator();
while (iter.hasNext()) {
Map.Entry pairs = (Map.Entry) iter.next();
key = (String) pairs.getKey();
value = (String) pairs.getValue();
String result = StringTools.humaniseCamelCase(key);
assertEquals(value, result);
}
}
/**
* Test of upcaseFirst method, of class StringTools.
*/
@Test
public void testUpcaseFirst() {
assertEquals("Camel", StringTools.upcaseFirst("camel"));
assertEquals("UpWeGo", StringTools.upcaseFirst("upWeGo"));
}
}