diff --git a/Klausuren/Sd1/Ws2015/Exam/pom.xml b/Klausuren/Sd1/Ws2015/Exam/pom.xml index 96765567d4404e130a88f3f2bb698a2dfea5e3d2..b39707ec41bb82b99fa6b1d9e8b6a3664084140e 100644 --- a/Klausuren/Sd1/Ws2015/Exam/pom.xml +++ b/Klausuren/Sd1/Ws2015/Exam/pom.xml @@ -3,11 +3,11 @@ <modelVersion>4.0.0</modelVersion> <groupId>de.hdm-stuttgart.sw1.klausur</groupId> - <artifactId>sw1Exam</artifactId> - <version>0.8</version> + <artifactId>sw1Solution</artifactId> + <version>0.9</version> <packaging>jar</packaging> - <name>sw1ExamWs2016</name> + <name>sw1Solution</name> <url>http://maven.apache.org</url> <properties> @@ -15,6 +15,51 @@ </properties> <build> <plugins> + + <plugin> + <groupId>org.codehaus.mojo</groupId> + <artifactId>build-helper-maven-plugin</artifactId> + <version>1.9.1</version> + <executions> + + <execution> + <id>add-source</id> + <phase>generate-sources</phase> + <goals> + <goal>add-source</goal> + </goals> + <configuration> + <sources> + <source>${project.basedir}/src/test/java/</source> + </sources> + </configuration> + </execution> + + </executions> + </plugin> + + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-shade-plugin</artifactId> + <version>2.4.1</version> + <executions> + <execution> + <phase>package</phase> + <goals> + <goal>shade</goal> + </goals> + <configuration> + <shadeTestJar>true</shadeTestJar> + <transformers> + <transformer + implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> + <mainClass>de.hdm_stuttgart.mi.bitte_ignorieren.Run</mainClass> + </transformer> + </transformers> + </configuration> + </execution> + </executions> + </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> diff --git a/Klausuren/Sd1/Ws2015/Exam/src/test/java/de/hdm_stuttgart/mi/bitte_ignorieren/ResultCollector.java b/Klausuren/Sd1/Ws2015/Exam/src/test/java/de/hdm_stuttgart/mi/bitte_ignorieren/ResultCollector.java index 63f497581b38077420854d2657e44e705c0e6488..cf5529bdb5c0a2a23e57d4414cd71e71f796b71d 100644 --- a/Klausuren/Sd1/Ws2015/Exam/src/test/java/de/hdm_stuttgart/mi/bitte_ignorieren/ResultCollector.java +++ b/Klausuren/Sd1/Ws2015/Exam/src/test/java/de/hdm_stuttgart/mi/bitte_ignorieren/ResultCollector.java @@ -12,146 +12,161 @@ import org.junit.runner.Description; public class ResultCollector extends TestWatcher { - public final Map<String, List<TestResult>> - failedByDescription = new HashMap<String, List<TestResult>>(), - successByDescription = new HashMap<String, List<TestResult>>(); - - @Override - protected void starting(Description description) { - MarkingTest.currentTestClass = description; - } - - @Override - protected void failed(final Throwable e, final Description description) { - putAppend(failedByDescription, description.getClassName(), new TestResult(description, - getMarking(description), false)); - } - - @Override - protected void succeeded(final Description description) { - putAppend(successByDescription, description.getClassName(), new TestResult(description, - getMarking(description), true)); - } - - private static void putAppend(final Map<String, List<TestResult>> map, final String key, final TestResult testresult) { - List<TestResult> results = map.get(key); - if (null == results) { - results = new Vector<TestResult>(); - map.put(key, results); - } - results.add(testresult); - } - private static Marking getMarking(final Description description) { - - final Marking marking = description.getAnnotation(Marking.class); - if (null == marking) { // Default values: 1 point - return new Marking() { - - @Override - public Class<? extends Annotation> annotationType() { - return Marking.class; - } - - @Override - public int points() { - return 1; - } - }; - - } - return marking; - } - - public String currentToString() { - - final String currentTestClassName = MarkingTest.currentTestClass.getClassName(); - - int reachablePoints = 0, reachedPoints = 0, numSuccessfulTests = 0; - - final List<TestResult> successfulTestResults = successByDescription.get(currentTestClassName); - - if (null != successfulTestResults) { - for (final TestResult t : successfulTestResults) { - reachablePoints += t.marking.points(); - reachedPoints += t.marking.points(); - numSuccessfulTests++; - } - } - - final StringBuffer failBuffer = new StringBuffer(); - - final List<TestResult> failedTestResults = failedByDescription.get(currentTestClassName); - - if (null != failedTestResults) { - for (final TestResult t : failedTestResults) { - reachablePoints += t.marking.points(); - failBuffer.append(" -" + t.testMethodDisplayName + "\n"); - } - } - - final StringBuffer buffer = new StringBuffer(); - - buffer.append(currentTestClassName + ":\nYou have reached " + reachedPoints + " of " - + reachablePoints + " possible points in " + numSuccessfulTests + " successful tests. "); - - if (null != failedTestResults) { - - final int numFailed = failedTestResults.size(); - if (1 == numFailed) { - buffer.append(" The following test still fails:\n"); - } else if (1 < numFailed) { - buffer.append("\n\nThe following " + numFailed + " tests still fail:\n"); - } - buffer.append(failBuffer + "\n"); - } - buffer.append("\n"); - return buffer.toString(); - } - public int getReachedPoints() { - int reachedPoints = 0; - - for (final Entry<String, List<TestResult>> successEntries: successByDescription.entrySet()) { - for (final TestResult t : successEntries.getValue()) { - reachedPoints += t.marking.points(); + public final Map<String, List<TestResult>> + failedByDescription = new HashMap<String, List<TestResult>>(), + successByDescription = new HashMap<String, List<TestResult>>(); + + + + @Override + protected void starting(Description description) { + MarkingTest.currentTestClass = description; + + // Init with empty list: All tests may fail! + // Unfortunately there is no better hook in TestWatcher. + if (null == failedByDescription.get(description.getClassName())) { + failedByDescription.put(description.getClassName(), new Vector<TestResult>()); } - } - return reachedPoints; - } - - @Override - public String toString() { - - int reachablePoints = 0, reachedPoints = 0, successfulTests = 0, failedTests = 0; - - for (final Entry<String, List<TestResult>> successEntries: successByDescription.entrySet()) { - for (final TestResult t : successEntries.getValue()) { - successfulTests++; - reachablePoints += t.marking.points(); - reachedPoints += t.marking.points(); - } - } - - final StringBuffer failBuffer = new StringBuffer(); - for (final Entry<String, List<TestResult>> failEntries: failedByDescription.entrySet()) { - for (final TestResult t : failEntries.getValue()) { - failedTests++; - reachablePoints += t.marking.points(); - failBuffer.append(" -" + t.testMethodDisplayName + "\n"); - } - } - - final StringBuffer buffer = new StringBuffer(); - - buffer.append("You have reached " + reachedPoints + " of " - + reachablePoints + " possible points in " - + successfulTests + " successful tests\n"); - if (1 == failedTests) { - buffer.append("\n\nThe following test still fails:\n"); - } else if (1 < failedTests) { - buffer.append("\n\nThe following " + failedTests - + " tests still fail:\n"); - } - buffer.append(failBuffer + "\n"); - return buffer.toString(); - } + if (null == successByDescription.get(description.getClassName())) { + successByDescription.put(description.getClassName(), new Vector<TestResult>()); + } + } + + @Override + protected void failed(final Throwable e, final Description description) { + putAppend(failedByDescription, description.getClassName(), new TestResult(description, + getMarking(description), false)); + } + + @Override + protected void succeeded(final Description description) { + putAppend(successByDescription, description.getClassName(), new TestResult(description, + getMarking(description), true)); + } + + private static void putAppend(final Map<String, List<TestResult>> map, final String key, final TestResult testresult) { + List<TestResult> results = map.get(key); + if (null == results) { + results = new Vector<TestResult>(); + map.put(key, results); + } + results.add(testresult); + } + private static Marking getMarking(final Description description) { + + final Marking marking = description.getAnnotation(Marking.class); + if (null == marking) { // Default values: 1 point + return new Marking() { + + @Override + public Class<? extends Annotation> annotationType() { + return Marking.class; + } + + @Override + public int points() { + return 1; + } + }; + + } + return marking; + } + + public String currentToString() { + + final String currentTestClassName = MarkingTest.currentTestClass.getClassName(); + + int reachablePoints = 0, reachedPoints = 0, numSuccessfulTests = 0; + + final List<TestResult> successfulTestResults = successByDescription.get(currentTestClassName); + + if (null != successfulTestResults) { + for (final TestResult t : successfulTestResults) { + reachablePoints += t.marking.points(); + reachedPoints += t.marking.points(); + numSuccessfulTests++; + } + } + + final StringBuffer failBuffer = new StringBuffer(); + + final List<TestResult> failedTestResults = failedByDescription.get(currentTestClassName); + + if (null != failedTestResults) { + for (final TestResult t : failedTestResults) { + reachablePoints += t.marking.points(); + failBuffer.append(" -" + t.testMethodDisplayName + "\n"); + } + } + + final StringBuffer buffer = new StringBuffer(); + + buffer.append(currentTestClassName + ":\nYou have reached " + reachedPoints + " of " + + reachablePoints + " possible points in " + numSuccessfulTests + " successful tests. "); + + if (null != failedTestResults) { + + final int numFailed = failedTestResults.size(); + if (1 == numFailed) { + buffer.append(" The following test still fails:\n"); + } else if (1 < numFailed) { + buffer.append("\n\nThe following " + numFailed + " tests still fail:\n"); + } + buffer.append(failBuffer + "\n"); + } + buffer.append("\n"); + return buffer.toString(); + } + + public String getReachedPoints() { + final StringBuffer ret = new StringBuffer(); + + for (final Entry<String, List<TestResult>> successEntries: successByDescription.entrySet()) { + int sum = 0; + for (final TestResult t : successEntries.getValue()) { + sum +=t.marking.points(); + } + + ret.append(successEntries.getKey() + " " + sum + " "); + } + return ret.toString(); + } + + @Override + public String toString() { + + int reachablePoints = 0, reachedPoints = 0, successfulTests = 0, failedTests = 0; + + for (final Entry<String, List<TestResult>> successEntries: successByDescription.entrySet()) { + for (final TestResult t : successEntries.getValue()) { + successfulTests++; + reachablePoints += t.marking.points(); + reachedPoints += t.marking.points(); + } + } + + final StringBuffer failBuffer = new StringBuffer(); + for (final Entry<String, List<TestResult>> failEntries: failedByDescription.entrySet()) { + for (final TestResult t : failEntries.getValue()) { + failedTests++; + reachablePoints += t.marking.points(); + failBuffer.append(" -" + t.testMethodDisplayName + "\n"); + } + } + + final StringBuffer buffer = new StringBuffer(); + + buffer.append("You have reached " + reachedPoints + " of " + + reachablePoints + " possible points in " + + successfulTests + " successful tests\n"); + if (1 == failedTests) { + buffer.append("\n\nThe following test still fails:\n"); + } else if (1 < failedTests) { + buffer.append("\n\nThe following " + failedTests + + " tests still fail:\n"); + } + buffer.append(failBuffer + "\n"); + return buffer.toString(); + } } \ No newline at end of file diff --git a/Klausuren/Sd1/Ws2015/Exam/src/test/java/de/hdm_stuttgart/mi/bitte_ignorieren/Run.java b/Klausuren/Sd1/Ws2015/Exam/src/test/java/de/hdm_stuttgart/mi/bitte_ignorieren/Run.java new file mode 100644 index 0000000000000000000000000000000000000000..d46c24a795aa749de1aaeb8f23a3064f942afa29 --- /dev/null +++ b/Klausuren/Sd1/Ws2015/Exam/src/test/java/de/hdm_stuttgart/mi/bitte_ignorieren/Run.java @@ -0,0 +1,31 @@ +package de.hdm_stuttgart.mi.bitte_ignorieren; + +import java.util.Set; + +import org.junit.runner.JUnitCore; + +import de.hdm_stuttgart.mi.runtests.ReachedPoints; + +public class Run { + public static void main(String[] args) { + JUnitCore.runClasses(ReachedPoints.class); + killStillRunningJUnitTestcaseThreads(); + } + + @SuppressWarnings("deprecation") + private static void killStillRunningJUnitTestcaseThreads() { + Set<Thread> threadSet = Thread.getAllStackTraces().keySet(); + for (Thread thread : threadSet) { + if (!(thread.isDaemon())) { + final StackTraceElement[] threadStackTrace = thread.getStackTrace(); + if (threadStackTrace.length > 1) { + StackTraceElement firstMethodInvocation = threadStackTrace[threadStackTrace.length - 1]; + if (firstMethodInvocation.getClassName().startsWith("org.junit")) { + // HACK: must use deprecated method + thread.stop(); + } + } + } + } + } +} diff --git a/Klausuren/Sd1/Ws2015/Exam/src/test/java/de/hdm_stuttgart/mi/runtests/ReachedPoints.java b/Klausuren/Sd1/Ws2015/Exam/src/test/java/de/hdm_stuttgart/mi/runtests/ReachedPoints.java index 55976ae320a4b866f48229e0d5841dbdab72cee2..02bdb7649e8fcddbbd3e82c06b278adc12a2824d 100644 --- a/Klausuren/Sd1/Ws2015/Exam/src/test/java/de/hdm_stuttgart/mi/runtests/ReachedPoints.java +++ b/Klausuren/Sd1/Ws2015/Exam/src/test/java/de/hdm_stuttgart/mi/runtests/ReachedPoints.java @@ -1,5 +1,9 @@ package de.hdm_stuttgart.mi.runtests; +import java.io.IOException; +import java.io.OutputStream; +import java.io.PrintStream; + import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.runner.RunWith; @@ -19,12 +23,29 @@ import de.hdm_stuttgart.sw1.klausur.test.Test_SpielNaechsteRunde; }) public class ReachedPoints { + + + static final PrintStream dummyStream = new PrintStream(new OutputStream() { + + @Override + public void write(int b) throws IOException {} + + @Override + public void write(byte[] b) throws IOException {} + + @Override + public void write(byte[] b, int off, int len) throws IOException {} + }); + + final static PrintStream systemOutStream = System.out; @BeforeClass public static void init() { + System.setOut(dummyStream); MarkingTest.provideExtraInfo = false; } @AfterClass public static void showResults() { - System.out.println("myGoikKlausurMarker:" + MarkingTest.globalresultCollector.getReachedPoints()); + System.setOut(systemOutStream); + System.out.println(MarkingTest.globalresultCollector.getReachedPoints()); } } diff --git a/Klausuren/Sd1/Ws2015/Exam/src/test/java/de/hdm_stuttgart/sw1/klausur/test/Test_Helper.java b/Klausuren/Sd1/Ws2015/Exam/src/test/java/de/hdm_stuttgart/sw1/klausur/test/Test_Helper.java index 2a2eda216b50429d9bf32f61ee65c036466cad28..a901e51b8c6cc9b61965f3ac94e7fc34c1ce032e 100644 --- a/Klausuren/Sd1/Ws2015/Exam/src/test/java/de/hdm_stuttgart/sw1/klausur/test/Test_Helper.java +++ b/Klausuren/Sd1/Ws2015/Exam/src/test/java/de/hdm_stuttgart/sw1/klausur/test/Test_Helper.java @@ -11,56 +11,56 @@ import static de.hdm_stuttgart.sw1.klausur.Helper.*; public class Test_Helper extends MarkingTest { // Abschnitt getHaeufigkeit - @Test + @Test(timeout=1000) public void test_getHaeufigkeitNullBehandlung () { Assert.assertEquals( 0, getHaeufigkeit(3, null)); } - @Test + @Test(timeout=1000) public void test_getHaeufigkeitLeerBehandlung () { Assert.assertEquals( 0, getHaeufigkeit(3, new int[]{})); } - @Test + @Test(timeout=1000) public void test_getHaeufigkeitEinzelnPositiv () { Assert.assertEquals( 1, getHaeufigkeit(3, new int[]{3})); } - @Test + @Test(timeout=1000) public void test_getHaeufigkeitDreiLinks() { Assert.assertEquals( 1, getHaeufigkeit(2, new int[]{2, -1, 5})); } - @Test + @Test(timeout=1000) public void test_getHaeufigkeitDreiMitte() { Assert.assertEquals( 1, getHaeufigkeit(2, new int[]{-1, 2, 15})); } - @Test + @Test(timeout=1000) public void test_getHaeufigkeitDreiRechts() { Assert.assertEquals( 1, getHaeufigkeit(2, new int[]{-1, -1, 2})); } - @Test + @Test(timeout=1000) public void test_getHaeufigkeitDreiAlle() { Assert.assertEquals( 3, getHaeufigkeit(2, new int[]{2, 2, 2})); } - @Test + @Test(timeout=1000) public void test_getHaeufigkeitZehn() { Assert.assertEquals( 5, @@ -70,32 +70,32 @@ public class Test_Helper extends MarkingTest { // Abschnitt getErstenPaarIndex - @Test + @Test(timeout=1000) public void test_getErstenPaarIndexLeer() { Assert.assertTrue(getErstenGruppenIndex( new int[]{}) < 0); } - @Test + @Test(timeout=1000) public void test_getErstenPaarIndexSingle() { Assert.assertTrue(getErstenGruppenIndex( new int[]{3}) < 0); } - @Test + @Test(timeout=1000) public void test_getErstenPaarIndexZweiNegativ() { Assert.assertTrue(getErstenGruppenIndex( new int[]{3, -1}) < 0); } - @Test + @Test(timeout=1000) public void test_getErstenPaarIndexZweiPositiv() { Assert.assertEquals(0, getErstenGruppenIndex( new int[]{-4, -4})); } - @Test + @Test(timeout=1000) public void test_getErstenPaarIndexA() { Assert.assertTrue(getErstenGruppenIndex( new int[]{1, 2, 3, 4, 3, 2, 1}) < 0); } - @Test + @Test(timeout=1000) public void test_getErstenPaarIndexB() { Assert.assertEquals(2, getErstenGruppenIndex( new int[]{-4, 2, 3, 3, 3, -1, 7, 4, 4, 5})); } @@ -106,49 +106,48 @@ public class Test_Helper extends MarkingTest { Assert.assertEquals(4, getZeichenHaeufigkeit('b', "")); } - @Test + @Test(timeout=1000) public void test_getHaeufigkeitEinsPositiv() { Assert.assertEquals(1, getZeichenHaeufigkeit('a', "Ein Anton")); } - @Test + @Test(timeout=1000) public void test_getHaeufigkeitEinsNegativ() { Assert.assertEquals(0, getZeichenHaeufigkeit('a', "Nix geht!")); } - @Test + @Test(timeout=1000) public void test_getHaeufigkeitMehrfach() { Assert.assertEquals(4, getZeichenHaeufigkeit('b', "Bald bleibt alles beim Alten!")); } // Abschnitt schnittmenge - @Test + @Test(timeout=1000) public void test_schnittmengeLeer1() { Assert.assertArrayEquals( new String[]{}, schnittmenge(new String[]{}, new String[]{})); } - @Test + @Test(timeout=1000) public void test_schnittmengeLeer2() { Assert.assertArrayEquals( new String[]{}, schnittmenge(new String[]{"Bau"}, new String[]{"Urlaub", "Klausur", "Haus", "Esel"})); } - @Test + @Test(timeout=1000) public void test_schnittmenge() { Assert.assertArrayEquals( new String[]{"Haus"}, schnittmenge(new String[]{"Haus", "laufen"}, new String[]{"Urlaub", "Klausur", "Haus", "Esel"})); } - @Test + @Test(timeout=1000) public void test_schnittmengeAll() { final String[] menge = new String[]{"eins", "zwei", "drei", "vier"}; Assert.assertArrayEquals( menge, schnittmenge(menge, menge)); - } - + } } \ No newline at end of file diff --git a/Klausuren/Sd1/Ws2015/Exam/src/test/java/de/hdm_stuttgart/sw1/klausur/test/Test_SpielNaechsteRunde.java b/Klausuren/Sd1/Ws2015/Exam/src/test/java/de/hdm_stuttgart/sw1/klausur/test/Test_SpielNaechsteRunde.java index 1d76ce21c4389b27ba2afbc49817f2ec2f6a5060..32d9e543229dbfd83dd51a038eecdce988b42b7b 100644 --- a/Klausuren/Sd1/Ws2015/Exam/src/test/java/de/hdm_stuttgart/sw1/klausur/test/Test_SpielNaechsteRunde.java +++ b/Klausuren/Sd1/Ws2015/Exam/src/test/java/de/hdm_stuttgart/sw1/klausur/test/Test_SpielNaechsteRunde.java @@ -11,14 +11,14 @@ import static de.hdm_stuttgart.sw1.klausur.Spielen.getTeilnehmerNaechsteRunde; @SuppressWarnings({"javadoc"}) public class Test_SpielNaechsteRunde extends MarkingTest { - @Test + @Test(timeout=1000) public void nullBehandlung () { Assert.assertEquals( null, getTeilnehmerNaechsteRunde(null)); } - @Test + @Test(timeout=1000) public void einzelnerTeilnehmer () { final int[] punkte= {44}; Assert.assertArrayEquals( @@ -26,7 +26,7 @@ public class Test_SpielNaechsteRunde extends MarkingTest { getTeilnehmerNaechsteRunde(punkte)); } - @Test + @Test(timeout=1000) public void zweiSpielerGleich () { final int[] punkte= {2, 2}; Assert.assertArrayEquals( @@ -34,7 +34,7 @@ public class Test_SpielNaechsteRunde extends MarkingTest { getTeilnehmerNaechsteRunde(punkte)); } - @Test + @Test(timeout=1000) public void zweiSpielerUngleich () { final int[] punkte= {2, 1}; Assert.assertArrayEquals( @@ -42,7 +42,7 @@ public class Test_SpielNaechsteRunde extends MarkingTest { getTeilnehmerNaechsteRunde(punkte)); } - @Test + @Test(timeout=1000) public void identischerPunktstand () { final int[] punkte= {2, 2, 2}; Assert.assertArrayEquals( @@ -50,7 +50,7 @@ public class Test_SpielNaechsteRunde extends MarkingTest { getTeilnehmerNaechsteRunde(punkte)); } - @Test + @Test(timeout=1000) public void dreiSpielerZweiGewinnerLinks () { final int[] aktuell = {3, 3, 2}, @@ -58,7 +58,7 @@ public class Test_SpielNaechsteRunde extends MarkingTest { Assert.assertArrayEquals(naechste, getTeilnehmerNaechsteRunde(aktuell)); } - @Test + @Test(timeout=1000) public void dreiSpielerZweiGewinnerRechts () { final int[] aktuell = {2, 3, 3}, @@ -66,7 +66,7 @@ public class Test_SpielNaechsteRunde extends MarkingTest { Assert.assertArrayEquals(naechste, getTeilnehmerNaechsteRunde(aktuell)); } - @Test + @Test(timeout=1000) public void dreiSpielerLinks () { final int[] aktuell = {3, 2, 2}, @@ -74,7 +74,7 @@ public class Test_SpielNaechsteRunde extends MarkingTest { Assert.assertArrayEquals(naechste, getTeilnehmerNaechsteRunde(aktuell)); } - @Test + @Test(timeout=1000) public void dreiSpielerMitte () { final int[] aktuell = {2, 3, 2}, @@ -82,7 +82,7 @@ public class Test_SpielNaechsteRunde extends MarkingTest { Assert.assertArrayEquals(naechste, getTeilnehmerNaechsteRunde(aktuell)); } - @Test + @Test(timeout=1000) public void dreiSpielerRechts () { final int[] aktuell = {2, 2, 3}, @@ -90,7 +90,7 @@ public class Test_SpielNaechsteRunde extends MarkingTest { Assert.assertArrayEquals(naechste, getTeilnehmerNaechsteRunde(aktuell)); } - @Test + @Test(timeout=1000) public void vierSpieler () { final int[] aktuell = {1,2,3,2}, @@ -98,7 +98,7 @@ public class Test_SpielNaechsteRunde extends MarkingTest { Assert.assertArrayEquals(naechste, getTeilnehmerNaechsteRunde(aktuell)); } - @Test + @Test(timeout=1000) @Marking(points=2) public void siebenSpielerDreiGewinner () { final int[] diff --git a/Klausuren/Sd1/Ws2015/Solution/pom.xml b/Klausuren/Sd1/Ws2015/Solution/pom.xml index 3d911ddb9a59d52bf74e5d782e68282c3cc95f1e..b39707ec41bb82b99fa6b1d9e8b6a3664084140e 100644 --- a/Klausuren/Sd1/Ws2015/Solution/pom.xml +++ b/Klausuren/Sd1/Ws2015/Solution/pom.xml @@ -15,6 +15,51 @@ </properties> <build> <plugins> + + <plugin> + <groupId>org.codehaus.mojo</groupId> + <artifactId>build-helper-maven-plugin</artifactId> + <version>1.9.1</version> + <executions> + + <execution> + <id>add-source</id> + <phase>generate-sources</phase> + <goals> + <goal>add-source</goal> + </goals> + <configuration> + <sources> + <source>${project.basedir}/src/test/java/</source> + </sources> + </configuration> + </execution> + + </executions> + </plugin> + + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-shade-plugin</artifactId> + <version>2.4.1</version> + <executions> + <execution> + <phase>package</phase> + <goals> + <goal>shade</goal> + </goals> + <configuration> + <shadeTestJar>true</shadeTestJar> + <transformers> + <transformer + implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> + <mainClass>de.hdm_stuttgart.mi.bitte_ignorieren.Run</mainClass> + </transformer> + </transformers> + </configuration> + </execution> + </executions> + </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> diff --git a/Klausuren/Sd1/Ws2015/Solution/src/test/java/de/hdm_stuttgart/mi/bitte_ignorieren/ResultCollector.java b/Klausuren/Sd1/Ws2015/Solution/src/test/java/de/hdm_stuttgart/mi/bitte_ignorieren/ResultCollector.java index 63f497581b38077420854d2657e44e705c0e6488..cf5529bdb5c0a2a23e57d4414cd71e71f796b71d 100644 --- a/Klausuren/Sd1/Ws2015/Solution/src/test/java/de/hdm_stuttgart/mi/bitte_ignorieren/ResultCollector.java +++ b/Klausuren/Sd1/Ws2015/Solution/src/test/java/de/hdm_stuttgart/mi/bitte_ignorieren/ResultCollector.java @@ -12,146 +12,161 @@ import org.junit.runner.Description; public class ResultCollector extends TestWatcher { - public final Map<String, List<TestResult>> - failedByDescription = new HashMap<String, List<TestResult>>(), - successByDescription = new HashMap<String, List<TestResult>>(); - - @Override - protected void starting(Description description) { - MarkingTest.currentTestClass = description; - } - - @Override - protected void failed(final Throwable e, final Description description) { - putAppend(failedByDescription, description.getClassName(), new TestResult(description, - getMarking(description), false)); - } - - @Override - protected void succeeded(final Description description) { - putAppend(successByDescription, description.getClassName(), new TestResult(description, - getMarking(description), true)); - } - - private static void putAppend(final Map<String, List<TestResult>> map, final String key, final TestResult testresult) { - List<TestResult> results = map.get(key); - if (null == results) { - results = new Vector<TestResult>(); - map.put(key, results); - } - results.add(testresult); - } - private static Marking getMarking(final Description description) { - - final Marking marking = description.getAnnotation(Marking.class); - if (null == marking) { // Default values: 1 point - return new Marking() { - - @Override - public Class<? extends Annotation> annotationType() { - return Marking.class; - } - - @Override - public int points() { - return 1; - } - }; - - } - return marking; - } - - public String currentToString() { - - final String currentTestClassName = MarkingTest.currentTestClass.getClassName(); - - int reachablePoints = 0, reachedPoints = 0, numSuccessfulTests = 0; - - final List<TestResult> successfulTestResults = successByDescription.get(currentTestClassName); - - if (null != successfulTestResults) { - for (final TestResult t : successfulTestResults) { - reachablePoints += t.marking.points(); - reachedPoints += t.marking.points(); - numSuccessfulTests++; - } - } - - final StringBuffer failBuffer = new StringBuffer(); - - final List<TestResult> failedTestResults = failedByDescription.get(currentTestClassName); - - if (null != failedTestResults) { - for (final TestResult t : failedTestResults) { - reachablePoints += t.marking.points(); - failBuffer.append(" -" + t.testMethodDisplayName + "\n"); - } - } - - final StringBuffer buffer = new StringBuffer(); - - buffer.append(currentTestClassName + ":\nYou have reached " + reachedPoints + " of " - + reachablePoints + " possible points in " + numSuccessfulTests + " successful tests. "); - - if (null != failedTestResults) { - - final int numFailed = failedTestResults.size(); - if (1 == numFailed) { - buffer.append(" The following test still fails:\n"); - } else if (1 < numFailed) { - buffer.append("\n\nThe following " + numFailed + " tests still fail:\n"); - } - buffer.append(failBuffer + "\n"); - } - buffer.append("\n"); - return buffer.toString(); - } - public int getReachedPoints() { - int reachedPoints = 0; - - for (final Entry<String, List<TestResult>> successEntries: successByDescription.entrySet()) { - for (final TestResult t : successEntries.getValue()) { - reachedPoints += t.marking.points(); + public final Map<String, List<TestResult>> + failedByDescription = new HashMap<String, List<TestResult>>(), + successByDescription = new HashMap<String, List<TestResult>>(); + + + + @Override + protected void starting(Description description) { + MarkingTest.currentTestClass = description; + + // Init with empty list: All tests may fail! + // Unfortunately there is no better hook in TestWatcher. + if (null == failedByDescription.get(description.getClassName())) { + failedByDescription.put(description.getClassName(), new Vector<TestResult>()); } - } - return reachedPoints; - } - - @Override - public String toString() { - - int reachablePoints = 0, reachedPoints = 0, successfulTests = 0, failedTests = 0; - - for (final Entry<String, List<TestResult>> successEntries: successByDescription.entrySet()) { - for (final TestResult t : successEntries.getValue()) { - successfulTests++; - reachablePoints += t.marking.points(); - reachedPoints += t.marking.points(); - } - } - - final StringBuffer failBuffer = new StringBuffer(); - for (final Entry<String, List<TestResult>> failEntries: failedByDescription.entrySet()) { - for (final TestResult t : failEntries.getValue()) { - failedTests++; - reachablePoints += t.marking.points(); - failBuffer.append(" -" + t.testMethodDisplayName + "\n"); - } - } - - final StringBuffer buffer = new StringBuffer(); - - buffer.append("You have reached " + reachedPoints + " of " - + reachablePoints + " possible points in " - + successfulTests + " successful tests\n"); - if (1 == failedTests) { - buffer.append("\n\nThe following test still fails:\n"); - } else if (1 < failedTests) { - buffer.append("\n\nThe following " + failedTests - + " tests still fail:\n"); - } - buffer.append(failBuffer + "\n"); - return buffer.toString(); - } + if (null == successByDescription.get(description.getClassName())) { + successByDescription.put(description.getClassName(), new Vector<TestResult>()); + } + } + + @Override + protected void failed(final Throwable e, final Description description) { + putAppend(failedByDescription, description.getClassName(), new TestResult(description, + getMarking(description), false)); + } + + @Override + protected void succeeded(final Description description) { + putAppend(successByDescription, description.getClassName(), new TestResult(description, + getMarking(description), true)); + } + + private static void putAppend(final Map<String, List<TestResult>> map, final String key, final TestResult testresult) { + List<TestResult> results = map.get(key); + if (null == results) { + results = new Vector<TestResult>(); + map.put(key, results); + } + results.add(testresult); + } + private static Marking getMarking(final Description description) { + + final Marking marking = description.getAnnotation(Marking.class); + if (null == marking) { // Default values: 1 point + return new Marking() { + + @Override + public Class<? extends Annotation> annotationType() { + return Marking.class; + } + + @Override + public int points() { + return 1; + } + }; + + } + return marking; + } + + public String currentToString() { + + final String currentTestClassName = MarkingTest.currentTestClass.getClassName(); + + int reachablePoints = 0, reachedPoints = 0, numSuccessfulTests = 0; + + final List<TestResult> successfulTestResults = successByDescription.get(currentTestClassName); + + if (null != successfulTestResults) { + for (final TestResult t : successfulTestResults) { + reachablePoints += t.marking.points(); + reachedPoints += t.marking.points(); + numSuccessfulTests++; + } + } + + final StringBuffer failBuffer = new StringBuffer(); + + final List<TestResult> failedTestResults = failedByDescription.get(currentTestClassName); + + if (null != failedTestResults) { + for (final TestResult t : failedTestResults) { + reachablePoints += t.marking.points(); + failBuffer.append(" -" + t.testMethodDisplayName + "\n"); + } + } + + final StringBuffer buffer = new StringBuffer(); + + buffer.append(currentTestClassName + ":\nYou have reached " + reachedPoints + " of " + + reachablePoints + " possible points in " + numSuccessfulTests + " successful tests. "); + + if (null != failedTestResults) { + + final int numFailed = failedTestResults.size(); + if (1 == numFailed) { + buffer.append(" The following test still fails:\n"); + } else if (1 < numFailed) { + buffer.append("\n\nThe following " + numFailed + " tests still fail:\n"); + } + buffer.append(failBuffer + "\n"); + } + buffer.append("\n"); + return buffer.toString(); + } + + public String getReachedPoints() { + final StringBuffer ret = new StringBuffer(); + + for (final Entry<String, List<TestResult>> successEntries: successByDescription.entrySet()) { + int sum = 0; + for (final TestResult t : successEntries.getValue()) { + sum +=t.marking.points(); + } + + ret.append(successEntries.getKey() + " " + sum + " "); + } + return ret.toString(); + } + + @Override + public String toString() { + + int reachablePoints = 0, reachedPoints = 0, successfulTests = 0, failedTests = 0; + + for (final Entry<String, List<TestResult>> successEntries: successByDescription.entrySet()) { + for (final TestResult t : successEntries.getValue()) { + successfulTests++; + reachablePoints += t.marking.points(); + reachedPoints += t.marking.points(); + } + } + + final StringBuffer failBuffer = new StringBuffer(); + for (final Entry<String, List<TestResult>> failEntries: failedByDescription.entrySet()) { + for (final TestResult t : failEntries.getValue()) { + failedTests++; + reachablePoints += t.marking.points(); + failBuffer.append(" -" + t.testMethodDisplayName + "\n"); + } + } + + final StringBuffer buffer = new StringBuffer(); + + buffer.append("You have reached " + reachedPoints + " of " + + reachablePoints + " possible points in " + + successfulTests + " successful tests\n"); + if (1 == failedTests) { + buffer.append("\n\nThe following test still fails:\n"); + } else if (1 < failedTests) { + buffer.append("\n\nThe following " + failedTests + + " tests still fail:\n"); + } + buffer.append(failBuffer + "\n"); + return buffer.toString(); + } } \ No newline at end of file diff --git a/Klausuren/Sd1/Ws2015/Solution/src/test/java/de/hdm_stuttgart/mi/bitte_ignorieren/Run.java b/Klausuren/Sd1/Ws2015/Solution/src/test/java/de/hdm_stuttgart/mi/bitte_ignorieren/Run.java new file mode 100644 index 0000000000000000000000000000000000000000..d46c24a795aa749de1aaeb8f23a3064f942afa29 --- /dev/null +++ b/Klausuren/Sd1/Ws2015/Solution/src/test/java/de/hdm_stuttgart/mi/bitte_ignorieren/Run.java @@ -0,0 +1,31 @@ +package de.hdm_stuttgart.mi.bitte_ignorieren; + +import java.util.Set; + +import org.junit.runner.JUnitCore; + +import de.hdm_stuttgart.mi.runtests.ReachedPoints; + +public class Run { + public static void main(String[] args) { + JUnitCore.runClasses(ReachedPoints.class); + killStillRunningJUnitTestcaseThreads(); + } + + @SuppressWarnings("deprecation") + private static void killStillRunningJUnitTestcaseThreads() { + Set<Thread> threadSet = Thread.getAllStackTraces().keySet(); + for (Thread thread : threadSet) { + if (!(thread.isDaemon())) { + final StackTraceElement[] threadStackTrace = thread.getStackTrace(); + if (threadStackTrace.length > 1) { + StackTraceElement firstMethodInvocation = threadStackTrace[threadStackTrace.length - 1]; + if (firstMethodInvocation.getClassName().startsWith("org.junit")) { + // HACK: must use deprecated method + thread.stop(); + } + } + } + } + } +} diff --git a/Klausuren/Sd1/Ws2015/Solution/src/test/java/de/hdm_stuttgart/mi/runtests/ReachedPoints.java b/Klausuren/Sd1/Ws2015/Solution/src/test/java/de/hdm_stuttgart/mi/runtests/ReachedPoints.java index 55976ae320a4b866f48229e0d5841dbdab72cee2..02bdb7649e8fcddbbd3e82c06b278adc12a2824d 100644 --- a/Klausuren/Sd1/Ws2015/Solution/src/test/java/de/hdm_stuttgart/mi/runtests/ReachedPoints.java +++ b/Klausuren/Sd1/Ws2015/Solution/src/test/java/de/hdm_stuttgart/mi/runtests/ReachedPoints.java @@ -1,5 +1,9 @@ package de.hdm_stuttgart.mi.runtests; +import java.io.IOException; +import java.io.OutputStream; +import java.io.PrintStream; + import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.runner.RunWith; @@ -19,12 +23,29 @@ import de.hdm_stuttgart.sw1.klausur.test.Test_SpielNaechsteRunde; }) public class ReachedPoints { + + + static final PrintStream dummyStream = new PrintStream(new OutputStream() { + + @Override + public void write(int b) throws IOException {} + + @Override + public void write(byte[] b) throws IOException {} + + @Override + public void write(byte[] b, int off, int len) throws IOException {} + }); + + final static PrintStream systemOutStream = System.out; @BeforeClass public static void init() { + System.setOut(dummyStream); MarkingTest.provideExtraInfo = false; } @AfterClass public static void showResults() { - System.out.println("myGoikKlausurMarker:" + MarkingTest.globalresultCollector.getReachedPoints()); + System.setOut(systemOutStream); + System.out.println(MarkingTest.globalresultCollector.getReachedPoints()); } } diff --git a/Klausuren/Sd1/Ws2015/Solution/src/test/java/de/hdm_stuttgart/sw1/klausur/test/Test_Helper.java b/Klausuren/Sd1/Ws2015/Solution/src/test/java/de/hdm_stuttgart/sw1/klausur/test/Test_Helper.java index 2a2eda216b50429d9bf32f61ee65c036466cad28..a901e51b8c6cc9b61965f3ac94e7fc34c1ce032e 100644 --- a/Klausuren/Sd1/Ws2015/Solution/src/test/java/de/hdm_stuttgart/sw1/klausur/test/Test_Helper.java +++ b/Klausuren/Sd1/Ws2015/Solution/src/test/java/de/hdm_stuttgart/sw1/klausur/test/Test_Helper.java @@ -11,56 +11,56 @@ import static de.hdm_stuttgart.sw1.klausur.Helper.*; public class Test_Helper extends MarkingTest { // Abschnitt getHaeufigkeit - @Test + @Test(timeout=1000) public void test_getHaeufigkeitNullBehandlung () { Assert.assertEquals( 0, getHaeufigkeit(3, null)); } - @Test + @Test(timeout=1000) public void test_getHaeufigkeitLeerBehandlung () { Assert.assertEquals( 0, getHaeufigkeit(3, new int[]{})); } - @Test + @Test(timeout=1000) public void test_getHaeufigkeitEinzelnPositiv () { Assert.assertEquals( 1, getHaeufigkeit(3, new int[]{3})); } - @Test + @Test(timeout=1000) public void test_getHaeufigkeitDreiLinks() { Assert.assertEquals( 1, getHaeufigkeit(2, new int[]{2, -1, 5})); } - @Test + @Test(timeout=1000) public void test_getHaeufigkeitDreiMitte() { Assert.assertEquals( 1, getHaeufigkeit(2, new int[]{-1, 2, 15})); } - @Test + @Test(timeout=1000) public void test_getHaeufigkeitDreiRechts() { Assert.assertEquals( 1, getHaeufigkeit(2, new int[]{-1, -1, 2})); } - @Test + @Test(timeout=1000) public void test_getHaeufigkeitDreiAlle() { Assert.assertEquals( 3, getHaeufigkeit(2, new int[]{2, 2, 2})); } - @Test + @Test(timeout=1000) public void test_getHaeufigkeitZehn() { Assert.assertEquals( 5, @@ -70,32 +70,32 @@ public class Test_Helper extends MarkingTest { // Abschnitt getErstenPaarIndex - @Test + @Test(timeout=1000) public void test_getErstenPaarIndexLeer() { Assert.assertTrue(getErstenGruppenIndex( new int[]{}) < 0); } - @Test + @Test(timeout=1000) public void test_getErstenPaarIndexSingle() { Assert.assertTrue(getErstenGruppenIndex( new int[]{3}) < 0); } - @Test + @Test(timeout=1000) public void test_getErstenPaarIndexZweiNegativ() { Assert.assertTrue(getErstenGruppenIndex( new int[]{3, -1}) < 0); } - @Test + @Test(timeout=1000) public void test_getErstenPaarIndexZweiPositiv() { Assert.assertEquals(0, getErstenGruppenIndex( new int[]{-4, -4})); } - @Test + @Test(timeout=1000) public void test_getErstenPaarIndexA() { Assert.assertTrue(getErstenGruppenIndex( new int[]{1, 2, 3, 4, 3, 2, 1}) < 0); } - @Test + @Test(timeout=1000) public void test_getErstenPaarIndexB() { Assert.assertEquals(2, getErstenGruppenIndex( new int[]{-4, 2, 3, 3, 3, -1, 7, 4, 4, 5})); } @@ -106,49 +106,48 @@ public class Test_Helper extends MarkingTest { Assert.assertEquals(4, getZeichenHaeufigkeit('b', "")); } - @Test + @Test(timeout=1000) public void test_getHaeufigkeitEinsPositiv() { Assert.assertEquals(1, getZeichenHaeufigkeit('a', "Ein Anton")); } - @Test + @Test(timeout=1000) public void test_getHaeufigkeitEinsNegativ() { Assert.assertEquals(0, getZeichenHaeufigkeit('a', "Nix geht!")); } - @Test + @Test(timeout=1000) public void test_getHaeufigkeitMehrfach() { Assert.assertEquals(4, getZeichenHaeufigkeit('b', "Bald bleibt alles beim Alten!")); } // Abschnitt schnittmenge - @Test + @Test(timeout=1000) public void test_schnittmengeLeer1() { Assert.assertArrayEquals( new String[]{}, schnittmenge(new String[]{}, new String[]{})); } - @Test + @Test(timeout=1000) public void test_schnittmengeLeer2() { Assert.assertArrayEquals( new String[]{}, schnittmenge(new String[]{"Bau"}, new String[]{"Urlaub", "Klausur", "Haus", "Esel"})); } - @Test + @Test(timeout=1000) public void test_schnittmenge() { Assert.assertArrayEquals( new String[]{"Haus"}, schnittmenge(new String[]{"Haus", "laufen"}, new String[]{"Urlaub", "Klausur", "Haus", "Esel"})); } - @Test + @Test(timeout=1000) public void test_schnittmengeAll() { final String[] menge = new String[]{"eins", "zwei", "drei", "vier"}; Assert.assertArrayEquals( menge, schnittmenge(menge, menge)); - } - + } } \ No newline at end of file diff --git a/Klausuren/Sd1/Ws2015/Solution/src/test/java/de/hdm_stuttgart/sw1/klausur/test/Test_SpielNaechsteRunde.java b/Klausuren/Sd1/Ws2015/Solution/src/test/java/de/hdm_stuttgart/sw1/klausur/test/Test_SpielNaechsteRunde.java index 1d76ce21c4389b27ba2afbc49817f2ec2f6a5060..32d9e543229dbfd83dd51a038eecdce988b42b7b 100644 --- a/Klausuren/Sd1/Ws2015/Solution/src/test/java/de/hdm_stuttgart/sw1/klausur/test/Test_SpielNaechsteRunde.java +++ b/Klausuren/Sd1/Ws2015/Solution/src/test/java/de/hdm_stuttgart/sw1/klausur/test/Test_SpielNaechsteRunde.java @@ -11,14 +11,14 @@ import static de.hdm_stuttgart.sw1.klausur.Spielen.getTeilnehmerNaechsteRunde; @SuppressWarnings({"javadoc"}) public class Test_SpielNaechsteRunde extends MarkingTest { - @Test + @Test(timeout=1000) public void nullBehandlung () { Assert.assertEquals( null, getTeilnehmerNaechsteRunde(null)); } - @Test + @Test(timeout=1000) public void einzelnerTeilnehmer () { final int[] punkte= {44}; Assert.assertArrayEquals( @@ -26,7 +26,7 @@ public class Test_SpielNaechsteRunde extends MarkingTest { getTeilnehmerNaechsteRunde(punkte)); } - @Test + @Test(timeout=1000) public void zweiSpielerGleich () { final int[] punkte= {2, 2}; Assert.assertArrayEquals( @@ -34,7 +34,7 @@ public class Test_SpielNaechsteRunde extends MarkingTest { getTeilnehmerNaechsteRunde(punkte)); } - @Test + @Test(timeout=1000) public void zweiSpielerUngleich () { final int[] punkte= {2, 1}; Assert.assertArrayEquals( @@ -42,7 +42,7 @@ public class Test_SpielNaechsteRunde extends MarkingTest { getTeilnehmerNaechsteRunde(punkte)); } - @Test + @Test(timeout=1000) public void identischerPunktstand () { final int[] punkte= {2, 2, 2}; Assert.assertArrayEquals( @@ -50,7 +50,7 @@ public class Test_SpielNaechsteRunde extends MarkingTest { getTeilnehmerNaechsteRunde(punkte)); } - @Test + @Test(timeout=1000) public void dreiSpielerZweiGewinnerLinks () { final int[] aktuell = {3, 3, 2}, @@ -58,7 +58,7 @@ public class Test_SpielNaechsteRunde extends MarkingTest { Assert.assertArrayEquals(naechste, getTeilnehmerNaechsteRunde(aktuell)); } - @Test + @Test(timeout=1000) public void dreiSpielerZweiGewinnerRechts () { final int[] aktuell = {2, 3, 3}, @@ -66,7 +66,7 @@ public class Test_SpielNaechsteRunde extends MarkingTest { Assert.assertArrayEquals(naechste, getTeilnehmerNaechsteRunde(aktuell)); } - @Test + @Test(timeout=1000) public void dreiSpielerLinks () { final int[] aktuell = {3, 2, 2}, @@ -74,7 +74,7 @@ public class Test_SpielNaechsteRunde extends MarkingTest { Assert.assertArrayEquals(naechste, getTeilnehmerNaechsteRunde(aktuell)); } - @Test + @Test(timeout=1000) public void dreiSpielerMitte () { final int[] aktuell = {2, 3, 2}, @@ -82,7 +82,7 @@ public class Test_SpielNaechsteRunde extends MarkingTest { Assert.assertArrayEquals(naechste, getTeilnehmerNaechsteRunde(aktuell)); } - @Test + @Test(timeout=1000) public void dreiSpielerRechts () { final int[] aktuell = {2, 2, 3}, @@ -90,7 +90,7 @@ public class Test_SpielNaechsteRunde extends MarkingTest { Assert.assertArrayEquals(naechste, getTeilnehmerNaechsteRunde(aktuell)); } - @Test + @Test(timeout=1000) public void vierSpieler () { final int[] aktuell = {1,2,3,2}, @@ -98,7 +98,7 @@ public class Test_SpielNaechsteRunde extends MarkingTest { Assert.assertArrayEquals(naechste, getTeilnehmerNaechsteRunde(aktuell)); } - @Test + @Test(timeout=1000) @Marking(points=2) public void siebenSpielerDreiGewinner () { final int[]