diff --git a/.gitignore b/.gitignore index c2bb0b7aa631e1bd1026b0069e886e60279a1e9e..02abba30803e18608e87c10701bb7c5d86b8e9de 100644 --- a/.gitignore +++ b/.gitignore @@ -65,4 +65,5 @@ api.svg !docs/sample/api.svg coca_reporter *.coverprofile -bug \ No newline at end of file +bug +_fixtures/tbs/tbs \ No newline at end of file diff --git a/README.md b/README.md index a617d36da9b7916670499a023a2c0882a540d3f9..bd9b30d7e9dae5bd44df4ddff603275660bf7f91 100644 --- a/README.md +++ b/README.md @@ -473,6 +473,8 @@ Arch based on [Tequila](https://github.com/newlee/tequila) Git Analysis inspired by [Code Maat](https://github.com/adamtornhill/code-maat) +Test bad smells inspired by [Test Smell Examples](https://testsmells.github.io/pages/testsmellexamples.html) + [![Phodal's Idea](http://brand.phodal.com/shields/idea-small.svg)](http://ideas.phodal.com/) @ 2019 A [Phodal Huang](https://www.phodal.com)'s [Idea](http://github.com/phodal/ideas). This code is distributed under the MPL license. See `LICENSE` in this directory. diff --git a/_fixtures/tbs/code/AssertionRoulette.java b/_fixtures/tbs/code/AssertionRoulette.java new file mode 100644 index 0000000000000000000000000000000000000000..dcc93180ddd1bae8f2e5154f69cb5958a97916c6 --- /dev/null +++ b/_fixtures/tbs/code/AssertionRoulette.java @@ -0,0 +1,20 @@ +package tbs; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertThat; + +public class AssertionRoulette { + @Test + public void testCloneNonBareRepoFromLocalTestServer() throws Exception { + Calculate calculate = new Calculate(); + int result = calculate.add(7, 8); + int success = 15; + assertEquals(success, result); + + int subResult = calculate.sub(9, 2); + int subSuccess = 7; + assertEquals(subSuccess, subResult); + } +} diff --git a/_fixtures/tbs/code/ConditionalTest.java b/_fixtures/tbs/code/ConditionalTest.java new file mode 100644 index 0000000000000000000000000000000000000000..c5a7efcb1b3b8c149e5c7b36bf13890a3d070188 --- /dev/null +++ b/_fixtures/tbs/code/ConditionalTest.java @@ -0,0 +1,19 @@ +package tbs; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +public class ConditionalTest { + @Test + public void byGod() { + Calculate calculate = new Calculate(); + // just examples + if (calculate.add(7, 9) == 16) { + if (calculate.sub(12, 9) == 3) { + int subSuccess = 7; + assertEquals(subSuccess, calculate.sub(9, 2)); + } + } + } +} diff --git a/_fixtures/tbs/code/ConstructorInitialization.java b/_fixtures/tbs/code/ConstructorInitialization.java new file mode 100644 index 0000000000000000000000000000000000000000..a902e532ff9a32fd0fa233c3e72a0e7e35f38972 --- /dev/null +++ b/_fixtures/tbs/code/ConstructorInitialization.java @@ -0,0 +1,21 @@ +package tbs; + +import org.junit.Before; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +public class ConstructorInitialization { + @Before + public void init() throws Exception { + + } + + @Test + public void name() { + Calculate calculate = new Calculate(); + int result = calculate.add(7, 8); + int success = 15; + assertEquals(success, result); + } +} diff --git a/_fixtures/tbs/code/DuplicateAssert.java b/_fixtures/tbs/code/DuplicateAssert.java new file mode 100644 index 0000000000000000000000000000000000000000..8077b87a7d4476b058e35fa1afa4cac0c757b8a4 --- /dev/null +++ b/_fixtures/tbs/code/DuplicateAssert.java @@ -0,0 +1,22 @@ +package tbs; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +public class DuplicateAssert { + @Test + public void testXmlSanitizer() { + boolean valid = XmlSanitizer.isValid("Fritzbox"); + assertEquals("Fritzbox is valid", true, valid); + + valid = XmlSanitizer.isValid("Fritz Box"); + assertEquals("Spaces are valid", true, valid); + + valid = XmlSanitizer.isValid("Frützbüx"); + assertEquals("Frützbüx is invalid", false, valid); + + valid = XmlSanitizer.isValid("Fritz!box"); + assertEquals("Exclamation mark is valid", true, valid); + } +} diff --git a/_fixtures/tbs/code/EmptyTest.java b/_fixtures/tbs/code/EmptyTest.java new file mode 100644 index 0000000000000000000000000000000000000000..44b64645b6e556fda3d48363bc8198b3d126058c --- /dev/null +++ b/_fixtures/tbs/code/EmptyTest.java @@ -0,0 +1,13 @@ +package tbs; + +import org.junit.Test; + +public class EmptyTest { + + @Test + public void testCredGetFullSampleV1() throws Throwable { +// ScrapedCredentials credentials = innerCredTest(FULL_SAMPLE_v1); +// assertEquals("p4ssw0rd", credentials.pass); +// assertEquals("user@example.com",credentials.user); + } +} diff --git a/_fixtures/tbs/code/IgnoreTest.java b/_fixtures/tbs/code/IgnoreTest.java new file mode 100644 index 0000000000000000000000000000000000000000..24efbd64a4ea5b07d30b943b7f476f7a87c9c3c4 --- /dev/null +++ b/_fixtures/tbs/code/IgnoreTest.java @@ -0,0 +1,10 @@ +package tbs; + +import org.junit.Ignore; + +public class IgnoreTest { + @Ignore("Oops, Not Time fix it") + public void peerPriority() throws Exception { + + } +} diff --git a/_fixtures/tbs/code/MagicNumberTest.java b/_fixtures/tbs/code/MagicNumberTest.java new file mode 100644 index 0000000000000000000000000000000000000000..428722a151ac0551aa540ea29534569a00392931 --- /dev/null +++ b/_fixtures/tbs/code/MagicNumberTest.java @@ -0,0 +1,15 @@ +package tbs; + +import org.junit.Test; + +import java.util.Calendar; + +import static org.junit.Assert.assertEquals; + +public class MagicNumberTest { + @Test + public void testGetLocalTimeAsCalendar() { + int result = 7 + 8; + assertEquals(15, result); + } +} diff --git a/_fixtures/tbs/code/MysteryGuest.java b/_fixtures/tbs/code/MysteryGuest.java new file mode 100644 index 0000000000000000000000000000000000000000..ffbac2ca0ed703af15fc7704174508e98b396800 --- /dev/null +++ b/_fixtures/tbs/code/MysteryGuest.java @@ -0,0 +1,21 @@ +package tbs; + +import org.junit.Test; + +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; + +public class MysteryGuest { + @Test + public void testPersistence() throws Exception { + try (FileOutputStream out = new FileOutputStream("people.bin");) { + int result = 5; + out.write(result); + } catch (FileNotFoundException e) { + // blabla + } catch (IOException e) { + // blabla + } + } +} diff --git a/_fixtures/tbs/code/RedundantAssertionTest.java b/_fixtures/tbs/code/RedundantAssertionTest.java new file mode 100644 index 0000000000000000000000000000000000000000..3e5488be2227126cbf19b7477a33c35ef00e95bd --- /dev/null +++ b/_fixtures/tbs/code/RedundantAssertionTest.java @@ -0,0 +1,12 @@ +package tbs; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +public class RedundantAssertionTest { + @Test + public void testTrue() { + assertEquals(true, true); + } +} diff --git a/_fixtures/tbs/code/RedundantPrint.java b/_fixtures/tbs/code/RedundantPrint.java new file mode 100644 index 0000000000000000000000000000000000000000..88ef5d162b5582ad14947309e5dd0bd620e7f175 --- /dev/null +++ b/_fixtures/tbs/code/RedundantPrint.java @@ -0,0 +1,11 @@ +package tbs; + +import org.junit.Test; + +public class RedundantPrint { + @Test + public void testTransform10mNEUAndBack() { + String result = "a, b, c"; + System.out.println("result = " + result); + } +} diff --git a/_fixtures/tbs/code/SleepyTest.java b/_fixtures/tbs/code/SleepyTest.java new file mode 100644 index 0000000000000000000000000000000000000000..a4005e4c47be2dda48de228465631051ac8bac55 --- /dev/null +++ b/_fixtures/tbs/code/SleepyTest.java @@ -0,0 +1,10 @@ +package tbs; + +import org.junit.Test; + +public class SleepyTest { + @Test + public void testEdictExternSearch() throws Exception { + Thread.sleep(500); + } +} diff --git a/_fixtures/tbs/code/UnknownTest.java b/_fixtures/tbs/code/UnknownTest.java new file mode 100644 index 0000000000000000000000000000000000000000..e20fefdbc3d73bbacd7605c9367e38aa6d76b661 --- /dev/null +++ b/_fixtures/tbs/code/UnknownTest.java @@ -0,0 +1,12 @@ +package tbs; + +import org.junit.Test; + +public class UnknownTest { + @Test + public void hitGetPOICategoriesApi() throws Exception { + String a = "blabla"; + String b = "blablac"; + String c = a + b; + } +} diff --git a/_fixtures/tbs/tbs/src/main/java/tbs/Calculate.java b/_fixtures/tbs/tbs/src/main/java/tbs/Calculate.java new file mode 100644 index 0000000000000000000000000000000000000000..c532df73c9109286d8534331659204ab7cbeb510 --- /dev/null +++ b/_fixtures/tbs/tbs/src/main/java/tbs/Calculate.java @@ -0,0 +1,11 @@ +package tbs; + +public class Calculate { + public int add(int i, int i1) { + return i + i1; + } + + public int sub(int i, int i1) { + return i - i1; + } +} diff --git a/_fixtures/tbs/tbs/src/main/java/tbs/XmlSanitizer.java b/_fixtures/tbs/tbs/src/main/java/tbs/XmlSanitizer.java new file mode 100644 index 0000000000000000000000000000000000000000..510063c87c224d8f0575687cd71418fc7290c272 --- /dev/null +++ b/_fixtures/tbs/tbs/src/main/java/tbs/XmlSanitizer.java @@ -0,0 +1,31 @@ +package tbs; + +import java.util.regex.Pattern; + +/** + * Replaces critical characters in xml files + */ +public final class XmlSanitizer { + + private static final Pattern PURE_ASCII_STRING = Pattern.compile("^\\p{ASCII}*$"); // "[^\\p{ASCII}]+" + + /** + * Checks if string contains &, <, >, ", ', non-ascii characters or anything other than A-Z, 0-9 + * + * @param test String to test + * @return true, if string only contains valid chars + */ + public static boolean isValid(final String test) { + // check we don't have xml chars in it + boolean result = !test.contains("&") && !test.contains("<") && !test.contains(">") && !test.contains("\"") && !test.contains("'"); + // assure we only have ASCII chars + result = result && PURE_ASCII_STRING.matcher(test).matches(); + // assure we really only A-Z and numbers in it + result = result && (test.replaceAll("[^a-zA-Z0-9-+.!_\\s]", "").length() == test.length()); + return result; + } + + private XmlSanitizer() { + + } +} diff --git a/_fixtures/tbs/tbs/src/test/java/tbs/AssertionRoulette.java b/_fixtures/tbs/tbs/src/test/java/tbs/AssertionRoulette.java new file mode 100644 index 0000000000000000000000000000000000000000..dcc93180ddd1bae8f2e5154f69cb5958a97916c6 --- /dev/null +++ b/_fixtures/tbs/tbs/src/test/java/tbs/AssertionRoulette.java @@ -0,0 +1,20 @@ +package tbs; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertThat; + +public class AssertionRoulette { + @Test + public void testCloneNonBareRepoFromLocalTestServer() throws Exception { + Calculate calculate = new Calculate(); + int result = calculate.add(7, 8); + int success = 15; + assertEquals(success, result); + + int subResult = calculate.sub(9, 2); + int subSuccess = 7; + assertEquals(subSuccess, subResult); + } +} diff --git a/_fixtures/tbs/tbs/src/test/java/tbs/ConditionalTest.java b/_fixtures/tbs/tbs/src/test/java/tbs/ConditionalTest.java new file mode 100644 index 0000000000000000000000000000000000000000..c5a7efcb1b3b8c149e5c7b36bf13890a3d070188 --- /dev/null +++ b/_fixtures/tbs/tbs/src/test/java/tbs/ConditionalTest.java @@ -0,0 +1,19 @@ +package tbs; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +public class ConditionalTest { + @Test + public void byGod() { + Calculate calculate = new Calculate(); + // just examples + if (calculate.add(7, 9) == 16) { + if (calculate.sub(12, 9) == 3) { + int subSuccess = 7; + assertEquals(subSuccess, calculate.sub(9, 2)); + } + } + } +} diff --git a/_fixtures/tbs/tbs/src/test/java/tbs/ConstructorInitialization.java b/_fixtures/tbs/tbs/src/test/java/tbs/ConstructorInitialization.java new file mode 100644 index 0000000000000000000000000000000000000000..a902e532ff9a32fd0fa233c3e72a0e7e35f38972 --- /dev/null +++ b/_fixtures/tbs/tbs/src/test/java/tbs/ConstructorInitialization.java @@ -0,0 +1,21 @@ +package tbs; + +import org.junit.Before; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +public class ConstructorInitialization { + @Before + public void init() throws Exception { + + } + + @Test + public void name() { + Calculate calculate = new Calculate(); + int result = calculate.add(7, 8); + int success = 15; + assertEquals(success, result); + } +} diff --git a/_fixtures/tbs/tbs/src/test/java/tbs/DuplicateAssert.java b/_fixtures/tbs/tbs/src/test/java/tbs/DuplicateAssert.java new file mode 100644 index 0000000000000000000000000000000000000000..8077b87a7d4476b058e35fa1afa4cac0c757b8a4 --- /dev/null +++ b/_fixtures/tbs/tbs/src/test/java/tbs/DuplicateAssert.java @@ -0,0 +1,22 @@ +package tbs; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +public class DuplicateAssert { + @Test + public void testXmlSanitizer() { + boolean valid = XmlSanitizer.isValid("Fritzbox"); + assertEquals("Fritzbox is valid", true, valid); + + valid = XmlSanitizer.isValid("Fritz Box"); + assertEquals("Spaces are valid", true, valid); + + valid = XmlSanitizer.isValid("Frützbüx"); + assertEquals("Frützbüx is invalid", false, valid); + + valid = XmlSanitizer.isValid("Fritz!box"); + assertEquals("Exclamation mark is valid", true, valid); + } +} diff --git a/_fixtures/tbs/tbs/src/test/java/tbs/EmptyTest.java b/_fixtures/tbs/tbs/src/test/java/tbs/EmptyTest.java new file mode 100644 index 0000000000000000000000000000000000000000..44b64645b6e556fda3d48363bc8198b3d126058c --- /dev/null +++ b/_fixtures/tbs/tbs/src/test/java/tbs/EmptyTest.java @@ -0,0 +1,13 @@ +package tbs; + +import org.junit.Test; + +public class EmptyTest { + + @Test + public void testCredGetFullSampleV1() throws Throwable { +// ScrapedCredentials credentials = innerCredTest(FULL_SAMPLE_v1); +// assertEquals("p4ssw0rd", credentials.pass); +// assertEquals("user@example.com",credentials.user); + } +} diff --git a/_fixtures/tbs/tbs/src/test/java/tbs/IgnoreTest.java b/_fixtures/tbs/tbs/src/test/java/tbs/IgnoreTest.java new file mode 100644 index 0000000000000000000000000000000000000000..24efbd64a4ea5b07d30b943b7f476f7a87c9c3c4 --- /dev/null +++ b/_fixtures/tbs/tbs/src/test/java/tbs/IgnoreTest.java @@ -0,0 +1,10 @@ +package tbs; + +import org.junit.Ignore; + +public class IgnoreTest { + @Ignore("Oops, Not Time fix it") + public void peerPriority() throws Exception { + + } +} diff --git a/_fixtures/tbs/tbs/src/test/java/tbs/MagicNumberTest.java b/_fixtures/tbs/tbs/src/test/java/tbs/MagicNumberTest.java new file mode 100644 index 0000000000000000000000000000000000000000..428722a151ac0551aa540ea29534569a00392931 --- /dev/null +++ b/_fixtures/tbs/tbs/src/test/java/tbs/MagicNumberTest.java @@ -0,0 +1,15 @@ +package tbs; + +import org.junit.Test; + +import java.util.Calendar; + +import static org.junit.Assert.assertEquals; + +public class MagicNumberTest { + @Test + public void testGetLocalTimeAsCalendar() { + int result = 7 + 8; + assertEquals(15, result); + } +} diff --git a/_fixtures/tbs/tbs/src/test/java/tbs/MysteryGuest.java b/_fixtures/tbs/tbs/src/test/java/tbs/MysteryGuest.java new file mode 100644 index 0000000000000000000000000000000000000000..ffbac2ca0ed703af15fc7704174508e98b396800 --- /dev/null +++ b/_fixtures/tbs/tbs/src/test/java/tbs/MysteryGuest.java @@ -0,0 +1,21 @@ +package tbs; + +import org.junit.Test; + +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; + +public class MysteryGuest { + @Test + public void testPersistence() throws Exception { + try (FileOutputStream out = new FileOutputStream("people.bin");) { + int result = 5; + out.write(result); + } catch (FileNotFoundException e) { + // blabla + } catch (IOException e) { + // blabla + } + } +} diff --git a/_fixtures/tbs/tbs/src/test/java/tbs/RedundantAssertionTest.java b/_fixtures/tbs/tbs/src/test/java/tbs/RedundantAssertionTest.java new file mode 100644 index 0000000000000000000000000000000000000000..3e5488be2227126cbf19b7477a33c35ef00e95bd --- /dev/null +++ b/_fixtures/tbs/tbs/src/test/java/tbs/RedundantAssertionTest.java @@ -0,0 +1,12 @@ +package tbs; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +public class RedundantAssertionTest { + @Test + public void testTrue() { + assertEquals(true, true); + } +} diff --git a/_fixtures/tbs/tbs/src/test/java/tbs/RedundantPrint.java b/_fixtures/tbs/tbs/src/test/java/tbs/RedundantPrint.java new file mode 100644 index 0000000000000000000000000000000000000000..88ef5d162b5582ad14947309e5dd0bd620e7f175 --- /dev/null +++ b/_fixtures/tbs/tbs/src/test/java/tbs/RedundantPrint.java @@ -0,0 +1,11 @@ +package tbs; + +import org.junit.Test; + +public class RedundantPrint { + @Test + public void testTransform10mNEUAndBack() { + String result = "a, b, c"; + System.out.println("result = " + result); + } +} diff --git a/_fixtures/tbs/tbs/src/test/java/tbs/SleepyTest.java b/_fixtures/tbs/tbs/src/test/java/tbs/SleepyTest.java new file mode 100644 index 0000000000000000000000000000000000000000..a4005e4c47be2dda48de228465631051ac8bac55 --- /dev/null +++ b/_fixtures/tbs/tbs/src/test/java/tbs/SleepyTest.java @@ -0,0 +1,10 @@ +package tbs; + +import org.junit.Test; + +public class SleepyTest { + @Test + public void testEdictExternSearch() throws Exception { + Thread.sleep(500); + } +} diff --git a/_fixtures/tbs/tbs/src/test/java/tbs/UnknownTest.java b/_fixtures/tbs/tbs/src/test/java/tbs/UnknownTest.java new file mode 100644 index 0000000000000000000000000000000000000000..e20fefdbc3d73bbacd7605c9367e38aa6d76b661 --- /dev/null +++ b/_fixtures/tbs/tbs/src/test/java/tbs/UnknownTest.java @@ -0,0 +1,12 @@ +package tbs; + +import org.junit.Test; + +public class UnknownTest { + @Test + public void hitGetPOICategoriesApi() throws Exception { + String a = "blabla"; + String b = "blablac"; + String c = a + b; + } +}