Author: schor Date: Tue May 6 19:44:49 2014 New Revision: 1592849 URL: http://svn.apache.org/r1592849 Log: [UIMA-3752] findbugs - refactoring
Modified: uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/cas_data/impl/CasComparer.java uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/cas_data/impl/CasComparerViewChange.java Modified: uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/cas_data/impl/CasComparer.java URL: http://svn.apache.org/viewvc/uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/cas_data/impl/CasComparer.java?rev=1592849&r1=1592848&r2=1592849&view=diff ============================================================================== --- uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/cas_data/impl/CasComparer.java (original) +++ uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/cas_data/impl/CasComparer.java Tue May 6 19:44:49 2014 @@ -19,24 +19,30 @@ package org.apache.uima.cas_data.impl; -import java.util.HashMap; +import static junit.framework.Assert.assertTrue; + +import java.util.HashSet; import java.util.List; -import java.util.Map; +import java.util.Set; import junit.framework.Assert; import org.apache.uima.cas.ArrayFS; +import org.apache.uima.cas.BooleanArrayFS; +import org.apache.uima.cas.ByteArrayFS; import org.apache.uima.cas.CAS; +import org.apache.uima.cas.CommonArrayFS; +import org.apache.uima.cas.DoubleArrayFS; import org.apache.uima.cas.FSIterator; import org.apache.uima.cas.Feature; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.FloatArrayFS; import org.apache.uima.cas.IntArrayFS; +import org.apache.uima.cas.LongArrayFS; +import org.apache.uima.cas.ShortArrayFS; import org.apache.uima.cas.SofaFS; import org.apache.uima.cas.StringArrayFS; import org.apache.uima.cas.Type; -import org.apache.uima.cas.impl.CASImpl; -import org.apache.uima.cas.text.AnnotationFS; /** * A non-perfect CAS equality checker for JUnit. @@ -69,7 +75,7 @@ public class CasComparer { } public static void assertEqualViews(CAS c1, CAS c2) { - Map<FeatureStructure, FeatureStructure> visited = new HashMap<FeatureStructure, FeatureStructure>(); + Set<FeatureStructure> visited = new HashSet<FeatureStructure>(); FSIterator<FeatureStructure> it1 = c1.getIndexRepository().getAllIndexedFS(c1.getTypeSystem().getTopType()); FSIterator<FeatureStructure> it2 = c2.getIndexRepository().getAllIndexedFS(c2.getTypeSystem().getTopType()); @@ -86,24 +92,27 @@ public class CasComparer { } public static void assertEquals(FeatureStructure fs1, FeatureStructure fs2) { - assertEquals(fs1, fs2, new HashMap<FeatureStructure, FeatureStructure>()); + assertEquals(fs1, fs2, new HashSet<FeatureStructure>()); } - public static void assertEquals(FeatureStructure fs1, FeatureStructure fs2, Map<FeatureStructure, FeatureStructure> visited) { + public static void assertEquals(FeatureStructure fs1, FeatureStructure fs2, Set<FeatureStructure> visited) { if (fs1 == null) { Assert.assertNull(fs2); return; } else { Assert.assertNotNull(fs2); } - - if (visited.containsKey(fs1)) { + + if (!visited.add(fs1)) { // true if item already in the set return; } - visited.put(fs1, fs1); // System.out.println("Comparing " + fs1.getType().getName()); Assert.assertEquals(fs1.getType().getName(), fs2.getType().getName()); + + if (fs1 instanceof SofaFS) { + return; + } List<Feature> features1 = fs1.getType().getFeatures(); List<Feature> features2 = fs2.getType().getFeatures(); @@ -119,70 +128,106 @@ public class CasComparer { if (fs1.getCAS().getTypeSystem().subsumes( fs1.getCAS().getTypeSystem().getType(CAS.TYPE_NAME_STRING), rangeType1)) { - Assert.assertEquals(fs1.getStringValue(feat1), fs2.getStringValue(feat2)); + assertEqualsNullIsEmpty(fs1.getStringValue(feat1), fs2.getStringValue(feat2)); + } else if (compareArrayFSs(rangeTypeName, fs1, feat1, fs2, feat2, visited)) { + continue; } else if (CAS.TYPE_NAME_INTEGER.equals(rangeTypeName)) { Assert.assertEquals(fs1.getIntValue(feat1), fs2.getIntValue(feat2)); } else if (CAS.TYPE_NAME_FLOAT.equals(rangeTypeName)) { - Assert.assertEquals(fs1.getFloatValue(feat1), fs2.getFloatValue(feat2), 0); - } else if (CAS.TYPE_NAME_STRING_ARRAY.equals(rangeTypeName)) { - StringArrayFS arrayFS1 = (StringArrayFS) fs1.getFeatureValue(feat1); - StringArrayFS arrayFS2 = (StringArrayFS) fs2.getFeatureValue(feat2); - if ((arrayFS1 == null) && (arrayFS2 == null)) { - // ok - } else { - Assert.assertEquals(arrayFS1.size(), arrayFS2.size()); - for (int j = 0; j < arrayFS1.size(); j++) { - // Temporary workaround for UIMA-2490 - null and "" string values - String s1 = arrayFS1.get(j); - String s2 = arrayFS2.get(j); - if ((s1 == null) && (s2 != null) && (s2.length() == 0)) { - continue; - } - if ((s2 == null) && (s1 != null) && (s1.length() == 0)) { - continue; - } - Assert.assertEquals(arrayFS1.get(j), arrayFS2.get(j)); - } - } - } else if (CAS.TYPE_NAME_INTEGER_ARRAY.equals(rangeTypeName)) { - IntArrayFS arrayFS1 = (IntArrayFS) fs1.getFeatureValue(feat1); - IntArrayFS arrayFS2 = (IntArrayFS) fs2.getFeatureValue(feat2); - if ((arrayFS1 == null) && (arrayFS2 == null)) { - // ok - } else { - Assert.assertEquals(arrayFS1.size(), arrayFS2.size()); - for (int j = 0; j < arrayFS1.size(); j++) { - Assert.assertEquals(arrayFS1.get(j), arrayFS2.get(j)); - } - } - } else if (CAS.TYPE_NAME_FLOAT_ARRAY.equals(rangeTypeName)) { - FloatArrayFS arrayFS1 = (FloatArrayFS) fs1.getFeatureValue(feat1); - FloatArrayFS arrayFS2 = (FloatArrayFS) fs2.getFeatureValue(feat2); - if ((arrayFS1 == null) && (arrayFS2 == null)) { - // ok - } else { - Assert.assertEquals(arrayFS1.size(), arrayFS2.size()); - for (int j = 0; j < arrayFS1.size(); j++) { - Assert.assertEquals(arrayFS1.get(j), arrayFS2.get(j), 0); - } - } - } else if (CAS.TYPE_NAME_FS_ARRAY.equals(rangeTypeName)) { - ArrayFS arrayFS1 = (ArrayFS) fs1.getFeatureValue(feat1); - ArrayFS arrayFS2 = (ArrayFS) fs2.getFeatureValue(feat2); - if ((arrayFS1 == null) && (arrayFS2 == null)) { - // ok - } else { - Assert.assertEquals(arrayFS1.size(), arrayFS2.size()); - for (int j = 0; j < arrayFS1.size(); j++) { - assertEquals(arrayFS1.get(j), arrayFS2.get(j), visited); - } - } - } else // single feature value - { + Assert.assertEquals(fs1.getFloatValue(feat1), fs2.getFloatValue(feat2), 0); + } else if (CAS.TYPE_NAME_BYTE.equals(rangeTypeName)) { + Assert.assertEquals(fs1.getByteValue(feat1), fs2.getByteValue(feat2)); + } else if (CAS.TYPE_NAME_SHORT.equals(rangeTypeName)) { + Assert.assertEquals(fs1.getShortValue(feat1), fs2.getShortValue(feat2)); + } else if (CAS.TYPE_NAME_LONG.equals(rangeTypeName)) { + Assert.assertEquals(fs1.getLongValue(feat1), fs2.getLongValue(feat2)); + } else if (CAS.TYPE_NAME_DOUBLE.equals(rangeTypeName)) { + Assert.assertEquals(fs1.getDoubleValue(feat1), fs2.getDoubleValue(feat2)); + } else { // single feature value FeatureStructure fsVal1 = fs1.getFeatureValue(feat1); FeatureStructure fsVal2 = fs2.getFeatureValue(feat2); assertEquals(fsVal1, fsVal2, visited); } } } + + // returns true if the items were arrays + public static boolean compareArrayFSs(String rangeTypeName, FeatureStructure arrayFS1fs, Feature feat1, FeatureStructure arrayFS2fs, Feature feat2, Set<FeatureStructure> visited) { + + if (CAS.TYPE_NAME_STRING_ARRAY.equals(rangeTypeName) || + CAS.TYPE_NAME_SHORT_ARRAY.equals(rangeTypeName) || + CAS.TYPE_NAME_LONG_ARRAY.equals(rangeTypeName) || + CAS.TYPE_NAME_INTEGER_ARRAY.equals(rangeTypeName) || + CAS.TYPE_NAME_FLOAT_ARRAY.equals(rangeTypeName) || + CAS.TYPE_NAME_DOUBLE_ARRAY.equals(rangeTypeName) || + CAS.TYPE_NAME_BYTE_ARRAY.equals(rangeTypeName) || + CAS.TYPE_NAME_BOOLEAN_ARRAY.equals(rangeTypeName) || + CAS.TYPE_NAME_FS_ARRAY.equals(rangeTypeName)) { + + CommonArrayFS arrayFS1 = (CommonArrayFS)arrayFS1fs.getFeatureValue(feat1); + CommonArrayFS arrayFS2 = (CommonArrayFS)arrayFS2fs.getFeatureValue(feat2); + + if ((arrayFS1 == null) && (arrayFS2 == null)) { + return true; // is ok + } else if (arrayFS1 != null && arrayFS2 != null) { + + Assert.assertEquals(arrayFS1.size(), arrayFS2.size()); + + for (int j = 0; j < arrayFS1.size(); j++) { + if (arrayFS1 instanceof ArrayFS) { + Assert.assertTrue(arrayFS2 instanceof ArrayFS); + assertEquals(((ArrayFS)arrayFS1).get(j), ((ArrayFS)arrayFS2).get(j), visited); + } else if (arrayFS1 instanceof BooleanArrayFS) { + assertTrue(arrayFS2 instanceof BooleanArrayFS); + Assert.assertEquals(((BooleanArrayFS)arrayFS1).get(j), ((BooleanArrayFS)arrayFS2).get(j)); + } else if (arrayFS1 instanceof ByteArrayFS) { + assertTrue(arrayFS2 instanceof ByteArrayFS); + Assert.assertEquals(((ByteArrayFS)arrayFS1).get(j), ((ByteArrayFS)arrayFS2).get(j)); + } else if (arrayFS1 instanceof DoubleArrayFS) { + assertTrue(arrayFS2 instanceof DoubleArrayFS); + Assert.assertEquals(((DoubleArrayFS)arrayFS1).get(j), ((DoubleArrayFS)arrayFS2).get(j)); + } else if (arrayFS1 instanceof FloatArrayFS) { + assertTrue(arrayFS2 instanceof FloatArrayFS); + Assert.assertEquals(((FloatArrayFS)arrayFS1).get(j), ((FloatArrayFS)arrayFS2).get(j)); + } else if (arrayFS1 instanceof IntArrayFS) { + assertTrue(arrayFS2 instanceof IntArrayFS); + Assert.assertEquals(((IntArrayFS)arrayFS1).get(j), ((IntArrayFS)arrayFS2).get(j)); + } else if (arrayFS1 instanceof LongArrayFS) { + assertTrue(arrayFS2 instanceof LongArrayFS); + Assert.assertEquals(((LongArrayFS)arrayFS1).get(j), ((LongArrayFS)arrayFS2).get(j)); + } else if (arrayFS1 instanceof ShortArrayFS) { + assertTrue(arrayFS2 instanceof ShortArrayFS); + Assert.assertEquals(((ShortArrayFS)arrayFS1).get(j), ((ShortArrayFS)arrayFS2).get(j)); + } else if (arrayFS1 instanceof StringArrayFS) { + assertTrue(arrayFS2 instanceof StringArrayFS); + // Temporary workaround for UIMA-2490 - null and "" string values + assertEqualsNullIsEmpty(((StringArrayFS)arrayFS1).get(j), ((StringArrayFS)arrayFS2).get(j)); + } + } + } else { + assertTrue(String.format("One array was null, the other not-null%n array1=%s%n array2=%s%n", + arrayFS1fs, arrayFS2fs), + false); + } + return true; + } + return false; + } + + public static void assertEqualsNullIsEmpty(String s1, String s2) { + // override the Assert.assertEquals for strings to make null and "" be equal + if (((s1 == null) && (s2 != null) && (s2.length() == 0)) || + ((s2 == null) && (s1 != null) && (s1.length() == 0))) { + return; + } + if ((s1 != null) && (s2 != null)) { + Assert.assertEquals(s1, s2); + return; + } + if ((s1 == null) && (s2 == null)) { + return; + } + assertTrue(String.format("one string value was null, the other not%n s1=%s%n s2=%s%n", s1, s2), false); + } + } Modified: uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/cas_data/impl/CasComparerViewChange.java URL: http://svn.apache.org/viewvc/uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/cas_data/impl/CasComparerViewChange.java?rev=1592849&r1=1592848&r2=1592849&view=diff ============================================================================== --- uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/cas_data/impl/CasComparerViewChange.java (original) +++ uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/cas_data/impl/CasComparerViewChange.java Tue May 6 19:44:49 2014 @@ -19,27 +19,14 @@ package org.apache.uima.cas_data.impl; -import java.util.HashMap; +import static junit.framework.Assert.assertTrue; + import java.util.HashSet; -import java.util.List; -import java.util.Map; import java.util.Set; -import junit.framework.Assert; -import static junit.framework.Assert.*; - -import org.apache.uima.cas.ArrayFS; import org.apache.uima.cas.CAS; import org.apache.uima.cas.FSIterator; -import org.apache.uima.cas.Feature; import org.apache.uima.cas.FeatureStructure; -import org.apache.uima.cas.FloatArrayFS; -import org.apache.uima.cas.IntArrayFS; -import org.apache.uima.cas.SofaFS; -import org.apache.uima.cas.StringArrayFS; -import org.apache.uima.cas.Type; -import org.apache.uima.cas.impl.CASImpl; -import org.apache.uima.cas.text.AnnotationFS; /** * A non-perfect CAS equality checker for JUnit with different views @@ -50,20 +37,14 @@ public class CasComparerViewChange { private final CAS view1; private final CAS view2; - private final String view1Name; - private final String view2Name; - - private final Set<FeatureStructure> visited = new HashSet<FeatureStructure>(); - + public CasComparerViewChange(CAS view1, CAS view2) { this.view1 = view1; this.view2 = view2; - view1Name = view1.getViewName(); - view2Name = view2.getViewName(); } public void assertEqualViews() { - visited.clear(); + Set<FeatureStructure> visited = new HashSet<FeatureStructure>(); FSIterator<FeatureStructure> it1 = view1.getIndexRepository().getAllIndexedFS(view1.getTypeSystem().getTopType()); FSIterator<FeatureStructure> it2 = view2.getIndexRepository().getAllIndexedFS(view2.getTypeSystem().getTopType()); while (it1.isValid()) { @@ -71,113 +52,12 @@ public class CasComparerViewChange { FeatureStructure fs1 = it1.get(); FeatureStructure fs2 = it2.get(); - assertFsEqual(fs1, fs2); + + CasComparer.assertEquals(fs1, fs2, visited); it1.moveToNext(); it2.moveToNext(); } } - - private void assertFsEqual(FeatureStructure fs1, FeatureStructure fs2) { - if (fs1 == null) { - assertNull(fs2); - } else { - assertNotNull(fs2); - } - - if (visited.contains(fs1) || null == fs1) { - return; - } - visited.add(fs1); - - // System.out.println("Comparing " + fs1.getType().getName()); - assertEquals(fs1.getType().getName(), fs2.getType().getName()); - - if (fs1 instanceof SofaFS && - ((SofaFS)fs1).getSofaID().equals(view1Name) && - ((SofaFS)fs2).getSofaID().equals(view2Name)) { - return; - } - - List<Feature> features1 = fs1.getType().getFeatures(); - List<Feature> features2 = fs2.getType().getFeatures(); - for (int i = 0; i < features1.size(); i++) { - Feature feat1 = features1.get(i); - Feature feat2 = features2.get(i); - // System.out.println("Comparing " + feat1.getName()); - Type rangeType1 = feat1.getRange(); - Type rangeType2 = feat2.getRange(); - Assert.assertEquals(rangeType1.getName(), rangeType2.getName()); - // System.out.println("Range type " + rangeType1); - String rangeTypeName = rangeType1.getName(); - - if (fs1.getCAS().getTypeSystem().subsumes( - fs1.getCAS().getTypeSystem().getType(CAS.TYPE_NAME_STRING), rangeType1)) { - assertEquals(fs1.getStringValue(feat1), fs2.getStringValue(feat2)); - } else if (CAS.TYPE_NAME_INTEGER.equals(rangeTypeName)) { - assertEquals(fs1.getIntValue(feat1), fs2.getIntValue(feat2)); - } else if (CAS.TYPE_NAME_FLOAT.equals(rangeTypeName)) { - assertEquals(fs1.getFloatValue(feat1), fs2.getFloatValue(feat2), 0); - } else if (CAS.TYPE_NAME_STRING_ARRAY.equals(rangeTypeName)) { - StringArrayFS arrayFS1 = (StringArrayFS) fs1.getFeatureValue(feat1); - StringArrayFS arrayFS2 = (StringArrayFS) fs2.getFeatureValue(feat2); - if ((arrayFS1 == null) && (arrayFS2 == null)) { - // ok - } else { - Assert.assertEquals(arrayFS1.size(), arrayFS2.size()); - for (int j = 0; j < arrayFS1.size(); j++) { - // Temporary workaround for UIMA-2490 - null and "" string values - String s1 = arrayFS1.get(j); - String s2 = arrayFS2.get(j); - if ((s1 == null) && (s2 != null) && (s2.length() == 0)) { - continue; - } - if ((s2 == null) && (s1 != null) && (s1.length() == 0)) { - continue; - } - assertEquals(arrayFS1.get(j), arrayFS2.get(j)); - } - } - } else if (CAS.TYPE_NAME_INTEGER_ARRAY.equals(rangeTypeName)) { - IntArrayFS arrayFS1 = (IntArrayFS) fs1.getFeatureValue(feat1); - IntArrayFS arrayFS2 = (IntArrayFS) fs2.getFeatureValue(feat2); - if ((arrayFS1 == null) && (arrayFS2 == null)) { - // ok - } else { - assertEquals(arrayFS1.size(), arrayFS2.size()); - for (int j = 0; j < arrayFS1.size(); j++) { - assertEquals(arrayFS1.get(j), arrayFS2.get(j)); - } - } - } else if (CAS.TYPE_NAME_FLOAT_ARRAY.equals(rangeTypeName)) { - FloatArrayFS arrayFS1 = (FloatArrayFS) fs1.getFeatureValue(feat1); - FloatArrayFS arrayFS2 = (FloatArrayFS) fs2.getFeatureValue(feat2); - if ((arrayFS1 == null) && (arrayFS2 == null)) { - // ok - } else { - assertEquals(arrayFS1.size(), arrayFS2.size()); - for (int j = 0; j < arrayFS1.size(); j++) { - assertEquals(arrayFS1.get(j), arrayFS2.get(j), 0); - } - } - } else if (CAS.TYPE_NAME_FS_ARRAY.equals(rangeTypeName)) { - ArrayFS arrayFS1 = (ArrayFS) fs1.getFeatureValue(feat1); - ArrayFS arrayFS2 = (ArrayFS) fs2.getFeatureValue(feat2); - if ((arrayFS1 == null) && (arrayFS2 == null)) { - // ok - } else { - assertEquals(arrayFS1.size(), arrayFS2.size()); - for (int j = 0; j < arrayFS1.size(); j++) { - assertFsEqual(arrayFS1.get(j), arrayFS2.get(j)); - } - } - } else // single feature value - { - FeatureStructure fsVal1 = fs1.getFeatureValue(feat1); - FeatureStructure fsVal2 = fs2.getFeatureValue(feat2); - assertFsEqual(fsVal1, fsVal2); - } - } - } - + }