summaryrefslogtreecommitdiff
path: root/base
diff options
context:
space:
mode:
authorBen Culkin <scorpress@gmail.com>2020-03-27 16:39:52 -0400
committerBen Culkin <scorpress@gmail.com>2020-03-27 16:39:52 -0400
commit373464d30d87bd8702fe27b920ed1406a0833ef3 (patch)
treec357c0a4fdd8f3f6ea8eb812ddc853f263c6c550 /base
parente99f6c758c9e1ea5601e1076845912db5153e38c (diff)
Refactor test structure
Tests are now in a 'test' sub-package, so it is clear that they are indeed test code, not just disjoint parts of the main code
Diffstat (limited to 'base')
-rw-r--r--base/.classpath1
-rw-r--r--base/.settings/org.eclipse.jdt.core.prefs3
-rw-r--r--base/src/main/java/bjc/utils/funcutils/IteratorUtils.java2
-rw-r--r--base/src/main/java/bjc/utils/ioutils/ReportWriter.java4
-rw-r--r--base/src/main/java/bjc/utils/ioutils/SimpleProperties.java87
-rw-r--r--base/src/main/java/bjc/utils/misc/PropertyDB.java4
-rw-r--r--base/src/test/java/bjc/utils/test/cli/objects/CommandTest.java (renamed from base/src/test/java/bjc/utils/cli/objects/CommandTest.java)4
-rw-r--r--base/src/test/java/bjc/utils/test/data/BooleanToggleTest.java (renamed from base/src/test/java/bjc/utils/data/BooleanToggleTest.java)4
-rw-r--r--base/src/test/java/bjc/utils/test/data/CircularIteratorTest.java (renamed from base/src/test/java/bjc/utils/data/CircularIteratorTest.java)4
-rw-r--r--base/src/test/java/bjc/utils/test/data/QueuedIteratorTest.java (renamed from base/src/test/java/bjc/utils/data/QueuedIteratorTest.java)4
-rw-r--r--base/src/test/java/bjc/utils/test/funcutils/IteratorUtilsTest.java (renamed from base/src/test/java/bjc/utils/funcutils/IteratorUtilsTest.java)2
-rw-r--r--base/src/test/java/bjc/utils/test/funcutils/StringUtilsTest.java (renamed from base/src/test/java/bjc/utils/funcutils/StringUtilsTest.java)2
-rw-r--r--base/src/test/java/bjc/utils/test/ioutils/LevelSplitterTest.java (renamed from base/src/test/java/bjc/utils/ioutils/LevelSplitterTest.java)6
-rw-r--r--base/src/test/java/bjc/utils/test/ioutils/ReportWriterTest.java (renamed from base/src/test/java/bjc/utils/ioutils/ReportWriterTest.java)4
-rw-r--r--base/src/test/java/bjc/utils/test/ioutils/SimplePropertiesTest.java60
-rw-r--r--base/src/test/java/bjc/utils/test/parserutils/TokenUtilsTest.java (renamed from base/src/test/java/bjc/utils/parserutils/TokenUtilsTest.java)2
16 files changed, 163 insertions, 30 deletions
diff --git a/base/.classpath b/base/.classpath
index 3d9f62c..9a48b8b 100644
--- a/base/.classpath
+++ b/base/.classpath
@@ -15,6 +15,7 @@
<attributes>
<attribute name="optional" value="true"/>
<attribute name="maven.pomderived" value="true"/>
+ <attribute name="test" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="src" path="src/examples/java"/>
diff --git a/base/.settings/org.eclipse.jdt.core.prefs b/base/.settings/org.eclipse.jdt.core.prefs
index 907db3b..72a79c3 100644
--- a/base/.settings/org.eclipse.jdt.core.prefs
+++ b/base/.settings/org.eclipse.jdt.core.prefs
@@ -27,6 +27,7 @@ org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=ignore
org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
@@ -72,6 +73,7 @@ org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=igno
org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=info
org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=info
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore
org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
@@ -108,4 +110,5 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=info
org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.release=disabled
org.eclipse.jdt.core.compiler.source=1.8
diff --git a/base/src/main/java/bjc/utils/funcutils/IteratorUtils.java b/base/src/main/java/bjc/utils/funcutils/IteratorUtils.java
index d691bab..732f1e9 100644
--- a/base/src/main/java/bjc/utils/funcutils/IteratorUtils.java
+++ b/base/src/main/java/bjc/utils/funcutils/IteratorUtils.java
@@ -3,7 +3,7 @@ package bjc.utils.funcutils;
import java.util.*;
import java.util.function.*;
-import bjc.utils.data.*;
+import bjc.utils.data.ArrayIterator;
/**
* Utility methods for dealing with iterators.
diff --git a/base/src/main/java/bjc/utils/ioutils/ReportWriter.java b/base/src/main/java/bjc/utils/ioutils/ReportWriter.java
index 4eb5aef..bc9b046 100644
--- a/base/src/main/java/bjc/utils/ioutils/ReportWriter.java
+++ b/base/src/main/java/bjc/utils/ioutils/ReportWriter.java
@@ -1,6 +1,7 @@
package bjc.utils.ioutils;
import java.io.IOException;
+import java.io.StringWriter;
import java.io.Writer;
import bjc.utils.esodata.DefaultList;
@@ -413,6 +414,9 @@ public class ReportWriter extends Writer {
return rw;
}
+ public ReportWriter() {
+ this(new StringWriter());
+ }
/**
* Create a new ReportWriter.
* @param write The place to write to.
diff --git a/base/src/main/java/bjc/utils/ioutils/SimpleProperties.java b/base/src/main/java/bjc/utils/ioutils/SimpleProperties.java
index 4f41c50..35dc47c 100644
--- a/base/src/main/java/bjc/utils/ioutils/SimpleProperties.java
+++ b/base/src/main/java/bjc/utils/ioutils/SimpleProperties.java
@@ -1,10 +1,12 @@
package bjc.utils.ioutils;
import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.PrintStream;
+import java.io.Reader;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
-import java.util.NoSuchElementException;
import java.util.Scanner;
import java.util.Set;
@@ -15,6 +17,33 @@ import java.util.Set;
*
*/
public class SimpleProperties implements Map<String, String> {
+ /**
+ * Exception thrown when there is a duplicate key, when they are forbidden.
+ *
+ * @author 15405
+ *
+ */
+ public static class DuplicateKeys extends RuntimeException {
+ private static final long serialVersionUID = -5521190136366024804L;
+
+ /**
+ * Create a new duplicate key exception.
+ *
+ * @param keyName
+ * The name of the key that has been duplicated.
+ */
+ public DuplicateKeys(String keyName) {
+ super(String.format("Duplicate value encountered for key '%s'", keyName));
+ }
+ }
+
+ public static class InvalidLineFormat extends RuntimeException {
+ private static final long serialVersionUID = 5332131472090792841L;
+
+ public InvalidLineFormat(String lne) {
+ super(String.format("Line '%s' is improperly formatted.\n\tExpected format is a string key, followed by a single space, followed by the value", ""));
+ }
+ }
private final Map<String, String> props;
/**
@@ -23,22 +52,40 @@ public class SimpleProperties implements Map<String, String> {
public SimpleProperties() {
props = new HashMap<>();
}
-
+
/**
- * Load properties from the provided input stream.
+ * Load properties from an input stream.
+ *
+ * Delegates to {@link SimpleProperties#loadFrom(Reader, boolean)} to allow
+ * you to pass a input stream instead of a reader.
+ *
+ * @param is
+ * The stream to read from.
+ * @param allowDuplicates
+ * Whether or not duplicate keys should be allowed.
+ */
+ public void loadFrom(final InputStream is, final boolean allowDuplicates) {
+ loadFrom(new InputStreamReader(is), allowDuplicates);
+ }
+
+ /**
+ * Load properties from the provided input reader.
*
* The format is the name, a space, then the body.
*
* All leading/trailing spaces from the name &amp; body are removed.
*
* @param is
- * The stream to read from.
+ * The reader to read from.
*
* @param allowDuplicates
- * Whether or not duplicate keys should be allowed.
+ * Whether or not duplicate keys should be allowed. If they are,
+ * the end-value of the property will be what the last one was.
+ *
+ * @throws DuplicateKeys If duplicate keys have been found when they are prohibited.
*/
- public void loadFrom(final InputStream is, final boolean allowDuplicates) {
- try(Scanner scn = new Scanner(is)) {
+ public void loadFrom(final Reader rdr, final boolean allowDuplicates) {
+ try(Scanner scn = new Scanner(rdr)) {
while(scn.hasNextLine()) {
final String ln = scn.nextLine().trim();
@@ -55,10 +102,7 @@ public class SimpleProperties implements Map<String, String> {
* Complain about improperly formatted lines.
*/
if(sepIdx == -1) {
- final String fmt = "Properties must be a name, a space, then the body.\n\tOffending line is '%s'";
- final String msg = String.format(fmt, ln);
-
- throw new NoSuchElementException(msg);
+ throw new InvalidLineFormat(ln);
}
final String name = ln.substring(0, sepIdx).trim();
@@ -68,9 +112,7 @@ public class SimpleProperties implements Map<String, String> {
* Complain about duplicates, if that is wanted.
*/
if(!allowDuplicates && containsKey(name)) {
- final String msg = String.format("Duplicate key '%s'", name);
-
- throw new IllegalStateException(msg);
+ throw new DuplicateKeys(name);
}
put(name, body);
@@ -80,15 +122,26 @@ public class SimpleProperties implements Map<String, String> {
/**
* Output the set of read properties.
+ *
+ * Uses System.out, since one isn't specified.
*/
public void outputProperties() {
- System.out.println("Read properties:");
+ outputProperties(System.out);
+ }
+
+ /**
+ * Output the set of read properties.
+ *
+ * @param strim The stream to output properties to.
+ */
+ public void outputProperties(PrintStream strim) {
+ strim.println("Read properties:");
for(final Entry<String, String> entry : entrySet()) {
- System.out.printf("\t'%s'\t'%s'\n", entry.getKey(), entry.getValue());
+ strim.printf("\t'%s'\t'%s'\n", entry.getKey(), entry.getValue());
}
- System.out.println();
+ strim.println();
}
@Override
diff --git a/base/src/main/java/bjc/utils/misc/PropertyDB.java b/base/src/main/java/bjc/utils/misc/PropertyDB.java
index c9434ef..09e1999 100644
--- a/base/src/main/java/bjc/utils/misc/PropertyDB.java
+++ b/base/src/main/java/bjc/utils/misc/PropertyDB.java
@@ -54,7 +54,7 @@ public class PropertyDB {
regexes = new SimpleProperties();
regexes.loadFrom(PropertyDB.class.getResourceAsStream("/regexes.sprop"), false);
if(LOGLOAD) {
- regexes.outputProperties();
+ regexes.outputProperties(System.out);
System.out.println();
}
compiledRegexes = new HashMap<>();
@@ -67,7 +67,7 @@ public class PropertyDB {
formats = new SimpleProperties();
formats.loadFrom(PropertyDB.class.getResourceAsStream("/formats.sprop"), false);
if(LOGLOAD) {
- formats.outputProperties();
+ formats.outputProperties(System.out);
System.out.println();
}
});
diff --git a/base/src/test/java/bjc/utils/cli/objects/CommandTest.java b/base/src/test/java/bjc/utils/test/cli/objects/CommandTest.java
index 2bebaa9..1e253be 100644
--- a/base/src/test/java/bjc/utils/cli/objects/CommandTest.java
+++ b/base/src/test/java/bjc/utils/test/cli/objects/CommandTest.java
@@ -1,9 +1,11 @@
-package bjc.utils.cli.objects;
+package bjc.utils.test.cli.objects;
import static org.junit.Assert.assertEquals;
import org.junit.Test;
+import bjc.utils.cli.objects.Command;
+
/**
* Test that CLI command objects work correctly.
*
diff --git a/base/src/test/java/bjc/utils/data/BooleanToggleTest.java b/base/src/test/java/bjc/utils/test/data/BooleanToggleTest.java
index 66f44c0..1373389 100644
--- a/base/src/test/java/bjc/utils/data/BooleanToggleTest.java
+++ b/base/src/test/java/bjc/utils/test/data/BooleanToggleTest.java
@@ -1,9 +1,11 @@
-package bjc.utils.data;
+package bjc.utils.test.data;
import static org.junit.Assert.assertEquals;
import org.junit.Test;
+import bjc.utils.data.BooleanToggle;
+
/**
* Test for boolean toggles.
* @author bjculkin
diff --git a/base/src/test/java/bjc/utils/data/CircularIteratorTest.java b/base/src/test/java/bjc/utils/test/data/CircularIteratorTest.java
index 5e20a17..7aae211 100644
--- a/base/src/test/java/bjc/utils/data/CircularIteratorTest.java
+++ b/base/src/test/java/bjc/utils/test/data/CircularIteratorTest.java
@@ -1,4 +1,4 @@
-package bjc.utils.data;
+package bjc.utils.test.data;
import static bjc.utils.funcutils.TestUtils.assertIteratorEquals;
@@ -7,6 +7,8 @@ import java.util.List;
import org.junit.Test;
+import bjc.utils.data.CircularIterator;
+
/**
* Test for circular iterators.,
*
diff --git a/base/src/test/java/bjc/utils/data/QueuedIteratorTest.java b/base/src/test/java/bjc/utils/test/data/QueuedIteratorTest.java
index bbbca56..b34723e 100644
--- a/base/src/test/java/bjc/utils/data/QueuedIteratorTest.java
+++ b/base/src/test/java/bjc/utils/test/data/QueuedIteratorTest.java
@@ -1,4 +1,4 @@
-package bjc.utils.data;
+package bjc.utils.test.data;
import static bjc.utils.data.QueuedIterator.queued;
import static bjc.utils.funcutils.TestUtils.assertIteratorEquals;
@@ -6,6 +6,8 @@ import static java.util.Arrays.asList;
import org.junit.Test;
+import bjc.utils.data.QueuedIterator;
+
/**
* Test of QueuedIterator.
*
diff --git a/base/src/test/java/bjc/utils/funcutils/IteratorUtilsTest.java b/base/src/test/java/bjc/utils/test/funcutils/IteratorUtilsTest.java
index bf88038..965582b 100644
--- a/base/src/test/java/bjc/utils/funcutils/IteratorUtilsTest.java
+++ b/base/src/test/java/bjc/utils/test/funcutils/IteratorUtilsTest.java
@@ -1,4 +1,4 @@
-package bjc.utils.funcutils;
+package bjc.utils.test.funcutils;
import org.junit.Test;
diff --git a/base/src/test/java/bjc/utils/funcutils/StringUtilsTest.java b/base/src/test/java/bjc/utils/test/funcutils/StringUtilsTest.java
index 434912c..b53d3e9 100644
--- a/base/src/test/java/bjc/utils/funcutils/StringUtilsTest.java
+++ b/base/src/test/java/bjc/utils/test/funcutils/StringUtilsTest.java
@@ -1,4 +1,4 @@
-package bjc.utils.funcutils;
+package bjc.utils.test.funcutils;
import java.io.StringReader;
diff --git a/base/src/test/java/bjc/utils/ioutils/LevelSplitterTest.java b/base/src/test/java/bjc/utils/test/ioutils/LevelSplitterTest.java
index bdc5d8d..aadea72 100644
--- a/base/src/test/java/bjc/utils/ioutils/LevelSplitterTest.java
+++ b/base/src/test/java/bjc/utils/test/ioutils/LevelSplitterTest.java
@@ -1,10 +1,12 @@
-package bjc.utils.ioutils;
+package bjc.utils.test.ioutils;
import static bjc.utils.funcutils.TestUtils.assertListEquals;
-import static bjc.utils.ioutils.LevelSplitterTest.RXPair.pair;
+import static bjc.utils.test.ioutils.LevelSplitterTest.RXPair.pair;
import org.junit.Test;
+import bjc.utils.ioutils.LevelSplitter;
+
/**
* Test of LevelSplitter.
*
diff --git a/base/src/test/java/bjc/utils/ioutils/ReportWriterTest.java b/base/src/test/java/bjc/utils/test/ioutils/ReportWriterTest.java
index a9f7072..4918b95 100644
--- a/base/src/test/java/bjc/utils/ioutils/ReportWriterTest.java
+++ b/base/src/test/java/bjc/utils/test/ioutils/ReportWriterTest.java
@@ -1,4 +1,4 @@
-package bjc.utils.ioutils;
+package bjc.utils.test.ioutils;
import static org.junit.Assert.assertEquals;
@@ -7,6 +7,8 @@ import java.io.StringWriter;
import org.junit.Test;
+import bjc.utils.ioutils.ReportWriter;
+
/**
* Tests for ReportWriter.
*
diff --git a/base/src/test/java/bjc/utils/test/ioutils/SimplePropertiesTest.java b/base/src/test/java/bjc/utils/test/ioutils/SimplePropertiesTest.java
new file mode 100644
index 0000000..81f7ac8
--- /dev/null
+++ b/base/src/test/java/bjc/utils/test/ioutils/SimplePropertiesTest.java
@@ -0,0 +1,60 @@
+package bjc.utils.test.ioutils;
+
+import static org.junit.Assert.*;
+
+import java.io.StringReader;
+
+import org.junit.Test;
+
+import bjc.utils.ioutils.SimpleProperties;
+import bjc.utils.ioutils.SimpleProperties.DuplicateKeys;
+import bjc.utils.ioutils.SimpleProperties.InvalidLineFormat;
+
+/**
+ * Tests for SimpleProperties.
+ *
+ * @author Ben Culkin
+ *
+ */
+public class SimplePropertiesTest {
+
+ @Test
+ public void testSimpleProperties() {
+ SimpleProperties props = new SimpleProperties();
+
+ assertEquals(0, props.size());
+ assertTrue(props.isEmpty());
+ }
+
+ @Test
+ public void testLoadFrom() {
+ SimpleProperties props = new SimpleProperties();
+
+ StringReader rdr = new StringReader("a a\nb b\nc c1\nc c2\n#c c3");
+
+ props.loadFrom(rdr, true);
+
+ assertEquals(3, props.size());
+ assertEquals("a", props.get("a"));
+ assertEquals("b", props.get("b"));
+ assertEquals("c2", props.get("c"));
+ }
+
+ @Test(expected = DuplicateKeys.class)
+ public void testDuplicateKeys() {
+ SimpleProperties props = new SimpleProperties();
+
+ StringReader rdr = new StringReader("a a\nb b\nb b");
+
+ props.loadFrom(rdr, false);
+ }
+
+ @Test(expected = InvalidLineFormat.class)
+ public void testInvalidFormat() {
+ SimpleProperties props = new SimpleProperties();
+
+ StringReader rdr = new StringReader("a");
+
+ props.loadFrom(rdr, false);
+ }
+} \ No newline at end of file
diff --git a/base/src/test/java/bjc/utils/parserutils/TokenUtilsTest.java b/base/src/test/java/bjc/utils/test/parserutils/TokenUtilsTest.java
index 08606b3..99593ed 100644
--- a/base/src/test/java/bjc/utils/parserutils/TokenUtilsTest.java
+++ b/base/src/test/java/bjc/utils/test/parserutils/TokenUtilsTest.java
@@ -1,4 +1,4 @@
-package bjc.utils.parserutils;
+package bjc.utils.test.parserutils;
import static bjc.utils.parserutils.TokenUtils.descapeString;
import static bjc.utils.parserutils.TokenUtils.removeDQuotedStrings;