From 1ad7afc5902210a8d3e3b1a1bde38b3f870d74f7 Mon Sep 17 00:00:00 2001 From: Andrew Roskuski Date: Wed, 19 Aug 2015 23:31:50 -0400 Subject: [PATCH 01/12] Convert passed and skipped tests to function similarly to failed tests in the TestResult class --- .../hudson/tasks/junit/PackageResult.java | 4 +-- .../java/hudson/tasks/junit/TestResult.java | 28 +++++++++++++------ 2 files changed, 21 insertions(+), 11 deletions(-) diff --git a/src/main/java/hudson/tasks/junit/PackageResult.java b/src/main/java/hudson/tasks/junit/PackageResult.java index 3e0cc2bdf..c2188397c 100644 --- a/src/main/java/hudson/tasks/junit/PackageResult.java +++ b/src/main/java/hudson/tasks/junit/PackageResult.java @@ -201,7 +201,7 @@ public List getFailedTestsSortedByAge() { * @return the children of this test result, if any, or an empty collection */ @Override - public Collection getPassedTests() { + public List getPassedTests() { List r = new ArrayList(); for (ClassResult clr : classes.values()) { for (CaseResult cr : clr.getChildren()) { @@ -220,7 +220,7 @@ public Collection getPassedTests() { * @return the children of this test result, if any, or an empty list */ @Override - public Collection getSkippedTests() { + public List getSkippedTests() { List r = new ArrayList(); for (ClassResult clr : classes.values()) { for (CaseResult cr : clr.getChildren()) { diff --git a/src/main/java/hudson/tasks/junit/TestResult.java b/src/main/java/hudson/tasks/junit/TestResult.java index 5e0bbbc22..919633dc8 100644 --- a/src/main/java/hudson/tasks/junit/TestResult.java +++ b/src/main/java/hudson/tasks/junit/TestResult.java @@ -81,7 +81,9 @@ public final class TestResult extends MetaTabulatedResult { */ private transient int totalTests; - private transient int skippedTests; + private transient List passedTests; + + private transient List skippedTests; private float duration; @@ -389,7 +391,7 @@ public int getFailCount() { @Exported(visibility=999) @Override public int getSkipCount() { - return skippedTests; + return skippedTests.size(); } /** @@ -413,7 +415,7 @@ public List getFailedTests() { */ @Override public Collection getPassedTests() { - throw new UnsupportedOperationException(); // TODO: implement!(FIXME: generated) + return passedTests; } /** @@ -423,7 +425,7 @@ public Collection getPassedTests() { */ @Override public Collection getSkippedTests() { - throw new UnsupportedOperationException(); // TODO: implement!(FIXME: generated) + return skippedTests; } /** @@ -574,10 +576,12 @@ public void tally() { // TODO: free children? memmory leak? suitesByName = new HashMap(); failedTests = new ArrayList(); + skippedTests = new ArrayList(); + passedTests = new ArrayList(); byPackages = new TreeMap(); totalTests = 0; - skippedTests = 0; + //skippedTests = 0; // Ask all of our children to tally themselves for (SuiteResult s : suites) { @@ -599,8 +603,9 @@ public void tally() { for (PackageResult pr : byPackages.values()) { pr.tally(); - skippedTests += pr.getSkipCount(); + skippedTests.addAll(pr.getSkippedTests()); failedTests.addAll(pr.getFailedTests()); + passedTests.addAll(pr.getPassedTests()); totalTests += pr.getTotalCount(); } } @@ -631,10 +636,13 @@ public void freeze(TestResultAction parent) { totalTests += s.getCases().size(); for(CaseResult cr : s.getCases()) { - if(cr.isSkipped()) - skippedTests++; - else if(!cr.isPassed()) + if(cr.isSkipped()) { + skippedTests.add(cr); + } else if(!cr.isPassed()) { failedTests.add(cr); + } else { + passedTests.add(cr); + } String pkg = cr.getPackageName(), spkg = safe(pkg); PackageResult pr = byPackage(spkg); @@ -644,7 +652,9 @@ else if(!cr.isPassed()) } } + Collections.sort(skippedTests,CaseResult.BY_AGE); Collections.sort(failedTests,CaseResult.BY_AGE); + Collections.sort(passedTests,CaseResult.BY_AGE); for (PackageResult pr : byPackages.values()) pr.freeze(); From 1043b871d1f3abbd2f0c6d7f513fe2e46cbeb9fd Mon Sep 17 00:00:00 2001 From: Andrew Roskuski Date: Wed, 19 Aug 2015 23:39:30 -0400 Subject: [PATCH 02/12] fix NPE in freeze() --- src/main/java/hudson/tasks/junit/TestResult.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/hudson/tasks/junit/TestResult.java b/src/main/java/hudson/tasks/junit/TestResult.java index 919633dc8..9c8d705d1 100644 --- a/src/main/java/hudson/tasks/junit/TestResult.java +++ b/src/main/java/hudson/tasks/junit/TestResult.java @@ -625,6 +625,8 @@ public void freeze(TestResultAction parent) { suitesByName = new HashMap(); totalTests = 0; failedTests = new ArrayList(); + skippedTests = new ArrayList(); + passedTests = new ArrayList(); byPackages = new TreeMap(); } From c71181ec365df38725561d0adadd36df1b983f36 Mon Sep 17 00:00:00 2001 From: Andrew Roskuski Date: Thu, 20 Aug 2015 01:07:41 -0400 Subject: [PATCH 03/12] handle the case where skippedTests==null --- src/main/java/hudson/tasks/junit/TestResult.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/hudson/tasks/junit/TestResult.java b/src/main/java/hudson/tasks/junit/TestResult.java index 9c8d705d1..2b3e6a557 100644 --- a/src/main/java/hudson/tasks/junit/TestResult.java +++ b/src/main/java/hudson/tasks/junit/TestResult.java @@ -391,6 +391,9 @@ public int getFailCount() { @Exported(visibility=999) @Override public int getSkipCount() { + if(skippedTests==null) + return 0; + else return skippedTests.size(); } From 4909096e68fc5e4700496f559d41647bfa564f99 Mon Sep 17 00:00:00 2001 From: Andrew Roskuski Date: Thu, 20 Aug 2015 01:19:57 -0400 Subject: [PATCH 04/12] Added getPassedTests() and getSkippedTests() to AbstractTestResultAction and TestResultAction --- .../hudson/tasks/junit/TestResultAction.java | 11 +++++++++++ .../tasks/test/AbstractTestResultAction.java | 18 ++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/src/main/java/hudson/tasks/junit/TestResultAction.java b/src/main/java/hudson/tasks/junit/TestResultAction.java index 8f3c65100..222f66a82 100644 --- a/src/main/java/hudson/tasks/junit/TestResultAction.java +++ b/src/main/java/hudson/tasks/junit/TestResultAction.java @@ -186,6 +186,17 @@ public List getFailedTests() { return getResult().getFailedTests(); } + @Override + public List getPassedTests() { + return getResult().getPassedTests(); + } + + @Override + public List getSkippedTests() { + return getResult().getSkippedTests(); + } + + /** * Loads a {@link TestResult} from disk. */ diff --git a/src/main/java/hudson/tasks/test/AbstractTestResultAction.java b/src/main/java/hudson/tasks/test/AbstractTestResultAction.java index 4f4d6b1f6..671a0a9fc 100644 --- a/src/main/java/hudson/tasks/test/AbstractTestResultAction.java +++ b/src/main/java/hudson/tasks/test/AbstractTestResultAction.java @@ -256,6 +256,24 @@ public List getFailedTests() { return Collections.emptyList(); } + /** + * A shortcut for scripting + * + * @return List of passed tests from associated test result. + */ + public List getPassedTests() { + return Collections.emptyList(); + } + + /** + * A shortcut for scripting + * + * @return List of skipped tests from associated test result. + */ + public List getSkippedTests() { + return Collections.emptyList(); + } + /** * Generates a PNG image for the test result trend. */ From bb163c089d1719a7cee9ab18c5f0083a6778f791 Mon Sep 17 00:00:00 2001 From: Andrew Roskuski Date: Thu, 20 Aug 2015 01:23:35 -0400 Subject: [PATCH 05/12] Fix compile errors --- src/main/java/hudson/tasks/junit/TestResult.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/hudson/tasks/junit/TestResult.java b/src/main/java/hudson/tasks/junit/TestResult.java index 2b3e6a557..3ad3520f3 100644 --- a/src/main/java/hudson/tasks/junit/TestResult.java +++ b/src/main/java/hudson/tasks/junit/TestResult.java @@ -417,7 +417,7 @@ public List getFailedTests() { * @return the children of this test result, if any, or an empty collection */ @Override - public Collection getPassedTests() { + public List getPassedTests() { return passedTests; } @@ -427,7 +427,7 @@ public Collection getPassedTests() { * @return the children of this test result, if any, or an empty list */ @Override - public Collection getSkippedTests() { + public List getSkippedTests() { return skippedTests; } From bb403732bc89c95198f8c220f31e423860dac791 Mon Sep 17 00:00:00 2001 From: Andrew Roskuski Date: Thu, 20 Aug 2015 20:13:59 -0400 Subject: [PATCH 06/12] Remove unnecessary comment --- src/main/java/hudson/tasks/junit/TestResult.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/hudson/tasks/junit/TestResult.java b/src/main/java/hudson/tasks/junit/TestResult.java index 3ad3520f3..53f0e1482 100644 --- a/src/main/java/hudson/tasks/junit/TestResult.java +++ b/src/main/java/hudson/tasks/junit/TestResult.java @@ -584,7 +584,6 @@ public void tally() { byPackages = new TreeMap(); totalTests = 0; - //skippedTests = 0; // Ask all of our children to tally themselves for (SuiteResult s : suites) { From 9b5e096deaf0a9479eeb69436ee96413d1bb3da6 Mon Sep 17 00:00:00 2001 From: Andrew Roskuski Date: Fri, 21 Aug 2015 19:26:55 -0400 Subject: [PATCH 07/12] Added annotation and Javadoc as requested --- src/main/java/hudson/tasks/test/AbstractTestResultAction.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/hudson/tasks/test/AbstractTestResultAction.java b/src/main/java/hudson/tasks/test/AbstractTestResultAction.java index 671a0a9fc..e4b49be43 100644 --- a/src/main/java/hudson/tasks/test/AbstractTestResultAction.java +++ b/src/main/java/hudson/tasks/test/AbstractTestResultAction.java @@ -260,7 +260,9 @@ public List getFailedTests() { * A shortcut for scripting * * @return List of passed tests from associated test result. + * @since TODO */ + @NonNull public List getPassedTests() { return Collections.emptyList(); } @@ -269,7 +271,9 @@ public List getPassedTests() { * A shortcut for scripting * * @return List of skipped tests from associated test result. + * @since TODO */ + @NonNull public List getSkippedTests() { return Collections.emptyList(); } From 0fcfa6aa77b88d8509bbe10acc0e26d09663769e Mon Sep 17 00:00:00 2001 From: Andrew Roskuski Date: Fri, 21 Aug 2015 20:02:55 -0400 Subject: [PATCH 08/12] Only generate lists of passed and skipped tests on-demand --- .../java/hudson/tasks/junit/TestResult.java | 60 ++++++++++++++----- 1 file changed, 46 insertions(+), 14 deletions(-) diff --git a/src/main/java/hudson/tasks/junit/TestResult.java b/src/main/java/hudson/tasks/junit/TestResult.java index 53f0e1482..41dc3e986 100644 --- a/src/main/java/hudson/tasks/junit/TestResult.java +++ b/src/main/java/hudson/tasks/junit/TestResult.java @@ -85,6 +85,8 @@ public final class TestResult extends MetaTabulatedResult { private transient List skippedTests; + private transient int skippedTestsCounter; + private float duration; /** @@ -391,10 +393,7 @@ public int getFailCount() { @Exported(visibility=999) @Override public int getSkipCount() { - if(skippedTests==null) - return 0; - else - return skippedTests.size(); + return skippedTestsCounter; } /** @@ -418,6 +417,17 @@ public List getFailedTests() { */ @Override public List getPassedTests() { + if(passedTests == null){ + passedTests = new ArrayList(); + for(SuiteResult s : suites) { + for(CaseResult cr : s.getCases()) { + if (cr.isPassed()) { + passedTests.add(cr); + } + } + } + } + return passedTests; } @@ -428,6 +438,17 @@ public List getPassedTests() { */ @Override public List getSkippedTests() { + if(skippedTests == null){ + skippedTests = new ArrayList(); + for(SuiteResult s : suites) { + for(CaseResult cr : s.getCases()) { + if (cr.isSkipped()) { + skippedTests.add(cr); + } + } + } + } + return skippedTests; } @@ -579,11 +600,12 @@ public void tally() { // TODO: free children? memmory leak? suitesByName = new HashMap(); failedTests = new ArrayList(); - skippedTests = new ArrayList(); - passedTests = new ArrayList(); + skippedTests = null; + passedTests = null; byPackages = new TreeMap(); totalTests = 0; + skippedTestsCounter = 0; // Ask all of our children to tally themselves for (SuiteResult s : suites) { @@ -605,9 +627,8 @@ public void tally() { for (PackageResult pr : byPackages.values()) { pr.tally(); - skippedTests.addAll(pr.getSkippedTests()); + skippedTestsCounter += pr.getSkipCount(); failedTests.addAll(pr.getFailedTests()); - passedTests.addAll(pr.getPassedTests()); totalTests += pr.getTotalCount(); } } @@ -627,8 +648,8 @@ public void freeze(TestResultAction parent) { suitesByName = new HashMap(); totalTests = 0; failedTests = new ArrayList(); - skippedTests = new ArrayList(); - passedTests = new ArrayList(); + skippedTests = null; + passedTests = null; byPackages = new TreeMap(); } @@ -641,11 +662,16 @@ public void freeze(TestResultAction parent) { totalTests += s.getCases().size(); for(CaseResult cr : s.getCases()) { if(cr.isSkipped()) { - skippedTests.add(cr); + skippedTestsCounter++; + if (skippedTests != null) { + skippedTests.add(cr) + } } else if(!cr.isPassed()) { failedTests.add(cr); } else { - passedTests.add(cr); + if(passedTests != null) { + passedTests.add(cr) + } } String pkg = cr.getPackageName(), spkg = safe(pkg); @@ -656,9 +682,15 @@ public void freeze(TestResultAction parent) { } } - Collections.sort(skippedTests,CaseResult.BY_AGE); Collections.sort(failedTests,CaseResult.BY_AGE); - Collections.sort(passedTests,CaseResult.BY_AGE); + + if(passedTests != null) { + Collections.sort(passedTests,CaseResult.BY_AGE); + } + + if(skippedTests != null) { + Collections.sort(skippedTests,CaseResult.BY_AGE); + } for (PackageResult pr : byPackages.values()) pr.freeze(); From e0b30b0665d15ffe805d8ed465bc3f820bdcd13f Mon Sep 17 00:00:00 2001 From: Andrew Roskuski Date: Fri, 21 Aug 2015 20:09:31 -0400 Subject: [PATCH 09/12] Added proper import for @NotNull --- .../java/hudson/tasks/test/AbstractTestResultAction.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/hudson/tasks/test/AbstractTestResultAction.java b/src/main/java/hudson/tasks/test/AbstractTestResultAction.java index e4b49be43..7aa0d143f 100644 --- a/src/main/java/hudson/tasks/test/AbstractTestResultAction.java +++ b/src/main/java/hudson/tasks/test/AbstractTestResultAction.java @@ -36,6 +36,7 @@ import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; +import javax.validation.constraints.NotNull; import jenkins.model.RunAction2; import jenkins.model.lazy.LazyBuildMixIn; import org.jfree.chart.ChartFactory; @@ -262,7 +263,7 @@ public List getFailedTests() { * @return List of passed tests from associated test result. * @since TODO */ - @NonNull + @NotNull public List getPassedTests() { return Collections.emptyList(); } @@ -273,7 +274,7 @@ public List getPassedTests() { * @return List of skipped tests from associated test result. * @since TODO */ - @NonNull + @NotNull public List getSkippedTests() { return Collections.emptyList(); } From 518825eefb347ed54f75a522c9fc95a5a0bdab2f Mon Sep 17 00:00:00 2001 From: Andrew Roskuski Date: Fri, 21 Aug 2015 20:09:52 -0400 Subject: [PATCH 10/12] Added missing semicolons --- src/main/java/hudson/tasks/junit/TestResult.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/hudson/tasks/junit/TestResult.java b/src/main/java/hudson/tasks/junit/TestResult.java index 41dc3e986..eed6d2c14 100644 --- a/src/main/java/hudson/tasks/junit/TestResult.java +++ b/src/main/java/hudson/tasks/junit/TestResult.java @@ -664,13 +664,13 @@ public void freeze(TestResultAction parent) { if(cr.isSkipped()) { skippedTestsCounter++; if (skippedTests != null) { - skippedTests.add(cr) + skippedTests.add(cr); } } else if(!cr.isPassed()) { failedTests.add(cr); } else { if(passedTests != null) { - passedTests.add(cr) + passedTests.add(cr); } } From c19eeaa17a9372c00f5c6eae36d185275b73f485 Mon Sep 17 00:00:00 2001 From: Andrew Roskuski Date: Fri, 21 Aug 2015 20:14:54 -0400 Subject: [PATCH 11/12] Probably use correct @Nonnull this time --- .../java/hudson/tasks/test/AbstractTestResultAction.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/hudson/tasks/test/AbstractTestResultAction.java b/src/main/java/hudson/tasks/test/AbstractTestResultAction.java index 7aa0d143f..88b871922 100644 --- a/src/main/java/hudson/tasks/test/AbstractTestResultAction.java +++ b/src/main/java/hudson/tasks/test/AbstractTestResultAction.java @@ -36,7 +36,7 @@ import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; -import javax.validation.constraints.NotNull; +import javax.annotation.Nonnull; import jenkins.model.RunAction2; import jenkins.model.lazy.LazyBuildMixIn; import org.jfree.chart.ChartFactory; @@ -263,7 +263,7 @@ public List getFailedTests() { * @return List of passed tests from associated test result. * @since TODO */ - @NotNull + @Nonnull public List getPassedTests() { return Collections.emptyList(); } @@ -274,7 +274,7 @@ public List getPassedTests() { * @return List of skipped tests from associated test result. * @since TODO */ - @NotNull + @Nonnull public List getSkippedTests() { return Collections.emptyList(); } From 8d34063d030f80b1ff80a644a9c93fc6855cfcaf Mon Sep 17 00:00:00 2001 From: Andrew Roskuski Date: Sun, 30 Aug 2015 11:09:42 -0400 Subject: [PATCH 12/12] Made getPassedTests() and getSkippedTests() synchronized --- src/main/java/hudson/tasks/junit/TestResult.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/hudson/tasks/junit/TestResult.java b/src/main/java/hudson/tasks/junit/TestResult.java index eed6d2c14..c20926173 100644 --- a/src/main/java/hudson/tasks/junit/TestResult.java +++ b/src/main/java/hudson/tasks/junit/TestResult.java @@ -416,7 +416,7 @@ public List getFailedTests() { * @return the children of this test result, if any, or an empty collection */ @Override - public List getPassedTests() { + public synchronized List getPassedTests() { if(passedTests == null){ passedTests = new ArrayList(); for(SuiteResult s : suites) { @@ -437,7 +437,7 @@ public List getPassedTests() { * @return the children of this test result, if any, or an empty list */ @Override - public List getSkippedTests() { + public synchronized List getSkippedTests() { if(skippedTests == null){ skippedTests = new ArrayList(); for(SuiteResult s : suites) {