From 54e36eda34a508379915b270f4a234693aa1775b Mon Sep 17 00:00:00 2001 From: Adrien Hopkins Date: Wed, 22 Sep 2021 16:51:02 -0500 Subject: Added a test to test loading unitfiles --- src/test/resources/test-unitsfile-valid1.txt | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 src/test/resources/test-unitsfile-valid1.txt (limited to 'src/test/resources/test-unitsfile-valid1.txt') diff --git a/src/test/resources/test-unitsfile-valid1.txt b/src/test/resources/test-unitsfile-valid1.txt new file mode 100644 index 0000000..704fd7c --- /dev/null +++ b/src/test/resources/test-unitsfile-valid1.txt @@ -0,0 +1,3 @@ +test1 CBAU +test2 BW CV +test3 AU + CU - BU \ No newline at end of file -- cgit v1.2.3 From 544ba103f9903bf885e346d34639c05934655f3f Mon Sep 17 00:00:00 2001 From: Adrien Hopkins Date: Mon, 27 Sep 2021 17:31:22 -0500 Subject: Added some tests for invalid unitfiles --- src/main/java/sevenUnits/unit/UnitDatabase.java | 9 +++++---- src/main/java/sevenUnits/utils/ExpressionParser.java | 8 ++++++++ src/test/java/sevenUnits/unit/UnitDatabaseTest.java | 20 ++++++++++++++++++++ src/test/resources/test-unitsfile-invalid1.txt | 1 + src/test/resources/test-unitsfile-invalid2.txt | 1 + src/test/resources/test-unitsfile-invalid3.txt | 1 + src/test/resources/test-unitsfile-invalid4.txt | 1 + src/test/resources/test-unitsfile-invalid5.txt | 1 + src/test/resources/test-unitsfile-valid1.txt | 5 ++++- 9 files changed, 42 insertions(+), 5 deletions(-) create mode 100644 src/test/resources/test-unitsfile-invalid1.txt create mode 100644 src/test/resources/test-unitsfile-invalid2.txt create mode 100644 src/test/resources/test-unitsfile-invalid3.txt create mode 100644 src/test/resources/test-unitsfile-invalid4.txt create mode 100644 src/test/resources/test-unitsfile-invalid5.txt (limited to 'src/test/resources/test-unitsfile-valid1.txt') 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 { * * @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 { 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 { 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 @@ -111,6 +113,22 @@ class UnitDatabaseTest { assertThrows(IllegalStateException.class, () -> keySet.toArray()); } + /** + * 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. * @@ -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 -- cgit v1.2.3