From cf9544c5f667fdbf8136ee104794b6fd4698b823 Mon Sep 17 00:00:00 2001 From: Jada R Date: Thu, 14 Apr 2022 15:33:34 -0700 Subject: [PATCH 1/3] improved tests --- src/edu/mills/cs180a/StringUtilitiesTester.java | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/edu/mills/cs180a/StringUtilitiesTester.java b/src/edu/mills/cs180a/StringUtilitiesTester.java index dfeabf9..75133fb 100644 --- a/src/edu/mills/cs180a/StringUtilitiesTester.java +++ b/src/edu/mills/cs180a/StringUtilitiesTester.java @@ -1,10 +1,15 @@ package edu.mills.cs180a; +import static org.junit.Assert.assertFalse; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.CsvSource; class StringUtilitiesTester { + + @Test void isSubstringThrowsExceptionForNullArg() { assertThrows(NullPointerException.class, () -> StringUtilities.isSubstring(null, "foo")); @@ -14,11 +19,12 @@ void isSubstringThrowsExceptionForNullArg() { @Test void isSubstringReturnsTrueForEmptySubstring() { - assertTrue(StringUtilities.isSubstring("", "foo")); + assertFalse(StringUtilities.isSubstring(" ", "foo")); } - @Test - void isSubstringReturnsTrueForLengthOneSubstring() { + @ParameterizedTest + @CsvSource(value = {"A:ABC", "a:ABC ","b:ABC ","B:ABC","c:ABC","C:ABC"}, delimiter = ':') + void isSubstringReturnsTrueForLengthOneSubstring(String substring, String text) { assertTrue(StringUtilities.isSubstring("A", "ABC")); // TODO: write rest } From 152a8f7797a9fdc3711abd39c7405320a8853709 Mon Sep 17 00:00:00 2001 From: Jada R Date: Mon, 18 Apr 2022 14:47:49 -0700 Subject: [PATCH 2/3] Add test --- .gitignore | 1 + .../mills/cs180a/StringUtilitiesTester.java | 25 ++++++++++++++++--- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index acec74a..c132588 100644 --- a/.gitignore +++ b/.gitignore @@ -58,3 +58,4 @@ local.properties # Uncomment this line if you wish to ignore the project description file. # Typically, this file would be tracked if it contains build/dependency configurations: #.project +.DS_Store diff --git a/src/edu/mills/cs180a/StringUtilitiesTester.java b/src/edu/mills/cs180a/StringUtilitiesTester.java index 75133fb..c52dfe3 100644 --- a/src/edu/mills/cs180a/StringUtilitiesTester.java +++ b/src/edu/mills/cs180a/StringUtilitiesTester.java @@ -19,13 +19,30 @@ void isSubstringThrowsExceptionForNullArg() { @Test void isSubstringReturnsTrueForEmptySubstring() { - assertFalse(StringUtilities.isSubstring(" ", "foo")); + assertTrue(StringUtilities.isSubstring("", "foo")); } @ParameterizedTest - @CsvSource(value = {"A:ABC", "a:ABC ","b:ABC ","B:ABC","c:ABC","C:ABC"}, delimiter = ':') + @CsvSource(value = {"A:ABC","B:ABC","C:ABC"}, delimiter = ':') void isSubstringReturnsTrueForLengthOneSubstring(String substring, String text) { - assertTrue(StringUtilities.isSubstring("A", "ABC")); - // TODO: write rest + assertTrue(StringUtilities.isSubstring(substring, text)); + } + + @ParameterizedTest + @CsvSource(value = {"D:ABC","B:ABC","A:ABC", "E:ABC"}, delimiter = ':') + void isSubstringReturnsFalseForLengthOneSubstring(String substring, String text) { + assertFalse(StringUtilities.isSubstring(substring, text)); + } + + @ParameterizedTest + @CsvSource(value = {"AB:ABC","BC:ABC","CD:ABCD"}, delimiter = ':') + void isSubstringReturnsTrueForLengthTwoSubstring(String substring, String text) { + assertTrue(StringUtilities.isSubstring(substring, text)); + } + + @ParameterizedTest + @CsvSource(value = {"DE:ABC", "EF:ABCDE"}, delimiter = ':') + void isSubstringReturnsFalseForLengthTwoSubstring(String substring, String text) { + assertFalse(StringUtilities.isSubstring(substring, text)); } } From 3c839e2e374867059b8844b16eac7b73c09ab229 Mon Sep 17 00:00:00 2001 From: Jada R Date: Mon, 18 Apr 2022 15:54:58 -0700 Subject: [PATCH 3/3] Corrected bug --- src/edu/mills/cs180a/StringUtilities.java | 8 ++++++-- src/edu/mills/cs180a/StringUtilitiesTester.java | 4 ++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/edu/mills/cs180a/StringUtilities.java b/src/edu/mills/cs180a/StringUtilities.java index 5f985fd..5e47db3 100644 --- a/src/edu/mills/cs180a/StringUtilities.java +++ b/src/edu/mills/cs180a/StringUtilities.java @@ -42,9 +42,13 @@ public static boolean isSubstring(String substring, String text) { private static boolean isSubstringHelper(String substring, String text, int offset) { // i is used as an index for substring, offset is used for text for (int i = 1; // The character with index 0 has already been tested. - i < substring.length() && offset < text.length(); i++, offset++) { - if (text.charAt(offset) != substring.charAt(i)) + i < substring.length(); i++, offset++) { + if(i < substring.length() && offset == text.length()) + return false; + + if (text.charAt(offset) != substring.charAt(i)) return false; + } return true; } diff --git a/src/edu/mills/cs180a/StringUtilitiesTester.java b/src/edu/mills/cs180a/StringUtilitiesTester.java index c52dfe3..9eb1e5b 100644 --- a/src/edu/mills/cs180a/StringUtilitiesTester.java +++ b/src/edu/mills/cs180a/StringUtilitiesTester.java @@ -29,7 +29,7 @@ void isSubstringReturnsTrueForLengthOneSubstring(String substring, String text) } @ParameterizedTest - @CsvSource(value = {"D:ABC","B:ABC","A:ABC", "E:ABC"}, delimiter = ':') + @CsvSource(value = {"D:ABC", "E:ABC"}, delimiter = ':') void isSubstringReturnsFalseForLengthOneSubstring(String substring, String text) { assertFalse(StringUtilities.isSubstring(substring, text)); } @@ -41,7 +41,7 @@ void isSubstringReturnsTrueForLengthTwoSubstring(String substring, String text) } @ParameterizedTest - @CsvSource(value = {"DE:ABC", "EF:ABCDE"}, delimiter = ':') + @CsvSource(value = { "EF:ABCDE","DE:ABC"}, delimiter = ':') void isSubstringReturnsFalseForLengthTwoSubstring(String substring, String text) { assertFalse(StringUtilities.isSubstring(substring, text)); }