summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAdrien Hopkins <ahopk127@my.yorku.ca>2021-09-27 17:31:22 -0500
committerAdrien Hopkins <ahopk127@my.yorku.ca>2021-09-27 17:34:21 -0500
commit544ba103f9903bf885e346d34639c05934655f3f (patch)
tree2acb842e36f6098bf4bfd2a397a395af77a62164 /src
parent54e36eda34a508379915b270f4a234693aa1775b (diff)
Added some tests for invalid unitfiles
Diffstat (limited to 'src')
-rw-r--r--src/main/java/sevenUnits/unit/UnitDatabase.java9
-rw-r--r--src/main/java/sevenUnits/utils/ExpressionParser.java8
-rw-r--r--src/test/java/sevenUnits/unit/UnitDatabaseTest.java20
-rw-r--r--src/test/resources/test-unitsfile-invalid1.txt1
-rw-r--r--src/test/resources/test-unitsfile-invalid2.txt1
-rw-r--r--src/test/resources/test-unitsfile-invalid3.txt1
-rw-r--r--src/test/resources/test-unitsfile-invalid4.txt1
-rw-r--r--src/test/resources/test-unitsfile-invalid5.txt1
-rw-r--r--src/test/resources/test-unitsfile-valid1.txt5
9 files changed, 42 insertions, 5 deletions
diff --git a/src/main/java/sevenUnits/unit/UnitDatabase.java b/src/main/java/sevenUnits/unit/UnitDatabase.java
index b45d9cf..a1dbb0a 100644
--- a/src/main/java/sevenUnits/unit/UnitDatabase.java
+++ b/src/main/java/sevenUnits/unit/UnitDatabase.java
@@ -1427,10 +1427,11 @@ public final class UnitDatabase {
final String expression = lineMatcher.group(2);
- if (name.endsWith(" ")) {
- System.err.printf("Warning - line %d's unit name ends in a space",
- lineCounter);
- }
+ // this code should never occur
+ // if (name.endsWith(" ")) {
+ // System.err.printf("Warning - line %d's unit name ends in a space",
+ // lineCounter);
+ // }
// if expression is "!", search for an existing unit
// if no unit found, throw an error
diff --git a/src/main/java/sevenUnits/utils/ExpressionParser.java b/src/main/java/sevenUnits/utils/ExpressionParser.java
index 1d3d44d..3c4abad 100644
--- a/src/main/java/sevenUnits/utils/ExpressionParser.java
+++ b/src/main/java/sevenUnits/utils/ExpressionParser.java
@@ -461,6 +461,8 @@ public final class ExpressionParser<T> {
*
* @param expression expression
* @return expression in RPN
+ * @throws IllegalArgumentException if expression is invalid (e.g.
+ * "{@code 3 *}")
* @since 2019-03-17
* @since v0.2.0
*/
@@ -541,6 +543,9 @@ public final class ExpressionParser<T> {
switch (this
.getTokenType(components.get(highestPriorityOperatorPosition))) {
case UNARY_OPERATOR:
+ if (components.size() < 2)
+ throw new IllegalArgumentException(
+ "Invalid expression \"" + expression + "\"");
final String unaryOperator = components
.remove(highestPriorityOperatorPosition);
final String operand = components
@@ -549,6 +554,9 @@ public final class ExpressionParser<T> {
operand + " " + unaryOperator);
break;
case BINARY_OPERATOR:
+ if (components.size() < 3)
+ throw new IllegalArgumentException(
+ "Invalid expression \"" + expression + "\"");
final String binaryOperator = components
.remove(highestPriorityOperatorPosition);
final String operand1 = components
diff --git a/src/test/java/sevenUnits/unit/UnitDatabaseTest.java b/src/test/java/sevenUnits/unit/UnitDatabaseTest.java
index 15bebcb..31323a7 100644
--- a/src/test/java/sevenUnits/unit/UnitDatabaseTest.java
+++ b/src/test/java/sevenUnits/unit/UnitDatabaseTest.java
@@ -33,6 +33,8 @@ import java.util.NoSuchElementException;
import java.util.Set;
import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.ValueSource;
/**
* A test for the {@link UnitDatabase} class. This is NOT part of this program's
@@ -112,6 +114,22 @@ class UnitDatabaseTest {
}
/**
+ * A bunch of tests for invalid unit files
+ *
+ * @param num which file to test
+ * @since 2021-09-27
+ */
+ @ParameterizedTest
+ @ValueSource(ints = { 1, 2, 3, 4, 5 })
+ public void testLoadingInvalidFile(int num) {
+ final UnitDatabase database = new UnitDatabase();
+ final String filename = String.format("/test-unitsfile-invalid%d.txt",
+ num);
+ assertThrows(IllegalArgumentException.class,
+ () -> loadUnitsFile(database, filename));
+ }
+
+ /**
* Tests loading a valid unitfile with some prefixes and no units.
*
* @since 2021-09-22
@@ -161,6 +179,8 @@ class UnitDatabaseTest {
.times(A.getMultiplier() + C.getMultiplier() - B.getMultiplier());
final Unit actual3 = database.getUnit("test3");
assertEquals(expected3, actual3);
+
+ assertTrue(System.err.toString().length() > 0);
}
/**
diff --git a/src/test/resources/test-unitsfile-invalid1.txt b/src/test/resources/test-unitsfile-invalid1.txt
new file mode 100644
index 0000000..813bf54
--- /dev/null
+++ b/src/test/resources/test-unitsfile-invalid1.txt
@@ -0,0 +1 @@
+justaunit \ No newline at end of file
diff --git a/src/test/resources/test-unitsfile-invalid2.txt b/src/test/resources/test-unitsfile-invalid2.txt
new file mode 100644
index 0000000..890ed13
--- /dev/null
+++ b/src/test/resources/test-unitsfile-invalid2.txt
@@ -0,0 +1 @@
+nonexistent !
diff --git a/src/test/resources/test-unitsfile-invalid3.txt b/src/test/resources/test-unitsfile-invalid3.txt
new file mode 100644
index 0000000..88d3c65
--- /dev/null
+++ b/src/test/resources/test-unitsfile-invalid3.txt
@@ -0,0 +1 @@
+badunit ^
diff --git a/src/test/resources/test-unitsfile-invalid4.txt b/src/test/resources/test-unitsfile-invalid4.txt
new file mode 100644
index 0000000..0fbc514
--- /dev/null
+++ b/src/test/resources/test-unitsfile-invalid4.txt
@@ -0,0 +1 @@
+badprefix- * 35 \ No newline at end of file
diff --git a/src/test/resources/test-unitsfile-invalid5.txt b/src/test/resources/test-unitsfile-invalid5.txt
new file mode 100644
index 0000000..c561393
--- /dev/null
+++ b/src/test/resources/test-unitsfile-invalid5.txt
@@ -0,0 +1 @@
+anotherinvalidunit (3 + 5) * (^) + 57 \ No newline at end of file
diff --git a/src/test/resources/test-unitsfile-valid1.txt b/src/test/resources/test-unitsfile-valid1.txt
index 704fd7c..1ea6cd9 100644
--- a/src/test/resources/test-unitsfile-valid1.txt
+++ b/src/test/resources/test-unitsfile-valid1.txt
@@ -1,3 +1,6 @@
+U !
+V !
+
test1 CBAU
test2 BW CV
-test3 AU + CU - BU \ No newline at end of file
+test3 AU + CU - BU # easily the most complex one yet \ No newline at end of file