From 9694d0439f05c5ea7c6c97e475c411f1ef3265a0 Mon Sep 17 00:00:00 2001 From: Kingsley Hendrickse Date: Wed, 6 Jun 2012 17:13:02 +0100 Subject: [PATCH] fixed Issue #12 - added workaround for steps that are missing a result section in the json. fixed Issue #15 - fixed issue with feature filenames where feature was only 1 word long --- cucumber-reports.iml | 3 +- pom.xml | 2 +- .../jenkins/CucumberReportPublisher.java | 2 +- .../net/masterthought/jenkins/Runner.java | 3 +- .../net/masterthought/jenkins/TagObject.java | 6 +- .../masterthought/jenkins/json/Feature.java | 6 +- .../net/masterthought/jenkins/json/Step.java | 32 ++++++++--- .../net/masterthought/jenkins/json/Util.java | 22 ++++---- velocity.log | 56 +++++++++---------- 9 files changed, 77 insertions(+), 55 deletions(-) diff --git a/cucumber-reports.iml b/cucumber-reports.iml index 7c8f31f..b66bf52 100644 --- a/cucumber-reports.iml +++ b/cucumber-reports.iml @@ -15,11 +15,10 @@ - - + diff --git a/pom.xml b/pom.xml index 37b46fd..5811403 100644 --- a/pom.xml +++ b/pom.xml @@ -37,7 +37,7 @@ com.google.code.gson gson - 1.7.1 + 2.2.1 maven diff --git a/src/main/java/net/masterthought/jenkins/CucumberReportPublisher.java b/src/main/java/net/masterthought/jenkins/CucumberReportPublisher.java index 703fec8..2ed74cd 100644 --- a/src/main/java/net/masterthought/jenkins/CucumberReportPublisher.java +++ b/src/main/java/net/masterthought/jenkins/CucumberReportPublisher.java @@ -48,7 +48,7 @@ public class CucumberReportPublisher extends Recorder { @Override public boolean perform(AbstractBuild build, Launcher launcher, BuildListener listener) - throws InterruptedException, IOException { + throws IOException, InterruptedException { listener.getLogger().println("[CucumberReportPublisher] Compiling Cucumber Html Reports ..."); diff --git a/src/main/java/net/masterthought/jenkins/Runner.java b/src/main/java/net/masterthought/jenkins/Runner.java index d89df2c..dd72111 100644 --- a/src/main/java/net/masterthought/jenkins/Runner.java +++ b/src/main/java/net/masterthought/jenkins/Runner.java @@ -14,9 +14,10 @@ public class Runner { // list.add("/Users/kings/.jenkins/jobs/aaaaa/builds/15/cucumber-html-reports/co_cucumber.json"); // list.add("/Users/kings/.jenkins/jobs/aaaaa/builds/15/cucumber-html-reports/ccp_cucumber.json"); // list.add("/Users/kings/.jenkins/jobs/aaaaa/builds/15/cucumber-html-reports/ss_cucumber.json"); + list.add("/Users/kings/.jenkins/jobs/cucumber-jvm/builds/7/cucumber-html-reports/cukes.json"); list.add("/Users/kings/.jenkins/jobs/cucumber-jvm/builds/7/cucumber-html-reports/cucumber.json"); - FeatureReportGenerator featureReportGenerator = new FeatureReportGenerator(list,rd,"","7","cucumber-jvm",true,true); + FeatureReportGenerator featureReportGenerator = new FeatureReportGenerator(list,rd,"","7","cucumber-jvm",false,true); featureReportGenerator.generateReports(); // boolean result = featureReportGenerator.getBuildStatus(); // System.out.println("status: " + result); diff --git a/src/main/java/net/masterthought/jenkins/TagObject.java b/src/main/java/net/masterthought/jenkins/TagObject.java index 4cf9e47..d09b19f 100644 --- a/src/main/java/net/masterthought/jenkins/TagObject.java +++ b/src/main/java/net/masterthought/jenkins/TagObject.java @@ -72,15 +72,15 @@ public class TagObject { return Util.findStatusCount(getStatuses(), Util.Status.FAILED); } - public int getNumberOfSkipped() { + public int getNumberOfSkipped() { return Util.findStatusCount(getStatuses(), Util.Status.SKIPPED); } - public int getNumberOfPending() { + public int getNumberOfPending() { return Util.findStatusCount(getStatuses(), Util.Status.UNDEFINED); } - private List getStatuses(){ + private List getStatuses() { List statuses = new ArrayList(); for(ScenarioTag scenarioTag : scenarios){ diff --git a/src/main/java/net/masterthought/jenkins/json/Feature.java b/src/main/java/net/masterthought/jenkins/json/Feature.java index dce131b..7e0ecab 100644 --- a/src/main/java/net/masterthought/jenkins/json/Feature.java +++ b/src/main/java/net/masterthought/jenkins/json/Feature.java @@ -98,7 +98,9 @@ public class Feature { matches.add(modified); } - matches = matches.subList(1, matches.size()); + List sublist = matches.subList(1, matches.size()); + + matches = (sublist.size() == 0) ? matches : sublist; String fileName = Joiner.on("-").join(matches) + ".html"; return fileName; } @@ -119,7 +121,7 @@ public class Feature { return Util.findStatusCount(lookUpSteps(), Util.Status.FAILED); } - public int getNumberOfPending(){ + public int getNumberOfPending() { return Util.findStatusCount(lookUpSteps(), Util.Status.UNDEFINED); } diff --git a/src/main/java/net/masterthought/jenkins/json/Step.java b/src/main/java/net/masterthought/jenkins/json/Step.java index df96701..0283bd5 100644 --- a/src/main/java/net/masterthought/jenkins/json/Step.java +++ b/src/main/java/net/masterthought/jenkins/json/Step.java @@ -9,13 +9,14 @@ public class Step { private String name; private String keyword; + private String line; private Result result; private Row[] rows; - public Step(String name, String keyword) { + public Step(String name, String keyword, String line) { this.name = name; this.keyword = keyword; - + this.line = line; } public Row[] getRows() { @@ -33,16 +34,23 @@ public class Step { } public Long getDuration() { - return result.getDuration(); + if(result == null){ + return 1L; + } else { + return result.getDuration(); + } } private Util.Status getInternalStatus() { + if(result == null){ + System.out.println("[WARNING] Line " + line + " : " + "Step is missing Result: " + keyword + " : " + name); + return Util.Status.MISSING; + } else { return Util.resultMap.get(result.getStatus()); + } } public Util.Status getStatus() { -// return Util.resultMap.get(result.getStatus()); - Util.Status status = getInternalStatus(); Util.Status result = status; @@ -62,7 +70,6 @@ public class Step { result = Util.Status.FAILED; } return result; - } public String getDataTableClass() { @@ -90,11 +97,22 @@ public class Step { if (getInternalStatus() == Util.Status.UNDEFINED) { errorMessage = "Mode: Not Implemented causes Failure
This step is not yet implemented"; } - content = Util.result(getStatus()) + "" + keyword + " " + name + "" + "
" + errorMessage + "
" + Util.closeDiv(); + content = Util.result(getStatus()) + "" + keyword + " " + name + "" + "
" + formatError(errorMessage) + "
" + Util.closeDiv(); + } else if(getStatus() == Util.Status.MISSING){ + String errorMessage = "Result was missing for this step"; + content = Util.result(getStatus()) + "" + keyword + " " + name + "" + "
" + formatError(errorMessage) + "
" + Util.closeDiv(); } else { content = Util.result(getStatus()) + "" + keyword + " " + name + "" + Util.closeDiv(); } return content; } + private String formatError(String errorMessage){ + String result = errorMessage; + if(errorMessage != null || !errorMessage.isEmpty()){ + result = errorMessage.replaceAll("\\\\n","
"); + } + return result; + } + } diff --git a/src/main/java/net/masterthought/jenkins/json/Util.java b/src/main/java/net/masterthought/jenkins/json/Util.java index 2830f14..1e3a9d3 100644 --- a/src/main/java/net/masterthought/jenkins/json/Util.java +++ b/src/main/java/net/masterthought/jenkins/json/Util.java @@ -1,6 +1,5 @@ package net.masterthought.jenkins.json; -import net.masterthought.jenkins.ScenarioTag; import org.joda.time.Period; import org.joda.time.format.PeriodFormatter; import org.joda.time.format.PeriodFormatterBuilder; @@ -41,6 +40,7 @@ public class Util { put("failed", Util.Status.FAILED); put("skipped", Util.Status.SKIPPED); put("undefined", Util.Status.UNDEFINED); + put("missing", Util.Status.MISSING); }}; public static String result(Status status) { @@ -51,14 +51,16 @@ public class Util { result = "
"; } else if (status == Status.SKIPPED) { result = "
"; - } else if (status == Status.UNDEFINED){ + } else if (status == Status.UNDEFINED) { result = "
"; + } else if (status == Status.MISSING) { + result = "
"; } return result; } public static enum Status { - PASSED, FAILED, SKIPPED, UNDEFINED + PASSED, FAILED, SKIPPED, UNDEFINED, MISSING } public static List collectScenarios(Element[] list, Closure clo) { @@ -91,12 +93,12 @@ public class Util { public static int findStatusCount(List statuses, Status statusToFind) { int occurrence = 0; - for(Util.Status status : statuses){ - if(status == statusToFind){ + for (Util.Status status : statuses) { + if (status == statusToFind) { occurrence++; } } - return occurrence; + return occurrence; } public static String readFileAsString(String filePath) throws java.io.IOException { @@ -114,7 +116,7 @@ public class Util { return new String(buffer); } - public static String formatDuration(Long duration){ + public static String formatDuration(Long duration) { PeriodFormatter formatter = new PeriodFormatterBuilder() .appendDays() .appendSuffix(" day", " days") @@ -131,8 +133,8 @@ public class Util { .appendMillis() .appendSuffix(" ms", " ms") .toFormatter(); - return formatter.print(new Period(0, duration/1000000)); - - + return formatter.print(new Period(0, duration / 1000000)); + + } } diff --git a/velocity.log b/velocity.log index e9c325c..bfd1596 100644 --- a/velocity.log +++ b/velocity.log @@ -1,28 +1,28 @@ -Sat May 26 08:06:54 BST 2012 [debug] AvalonLogChute initialized using file 'velocity.log' -Sat May 26 08:06:54 BST 2012 [trace] ******************************************************************* -Sat May 26 08:06:54 BST 2012 [debug] Starting Jakarta Velocity v1.5-SNAPSHOT (compiled: 2006-07-21 06:25:35) -Sat May 26 08:06:54 BST 2012 [trace] RuntimeInstance initializing. -Sat May 26 08:06:54 BST 2012 [debug] Default Properties File: org/apache/velocity/runtime/defaults/velocity.properties -Sat May 26 08:06:54 BST 2012 [debug] Trying to use logger class org.apache.velocity.runtime.log.AvalonLogChute -Sat May 26 08:06:54 BST 2012 [debug] Using logger class org.apache.velocity.runtime.log.AvalonLogChute -Sat May 26 08:06:54 BST 2012 [debug] Default ResourceManager initializing. (class org.apache.velocity.runtime.resource.ResourceManagerImpl) -Sat May 26 08:06:54 BST 2012 [debug] ResourceLoader instantiated: org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader -Sat May 26 08:06:54 BST 2012 [trace] ClasspathResourceLoader : initialization complete. -Sat May 26 08:06:54 BST 2012 [debug] ResourceCache: initialized (class org.apache.velocity.runtime.resource.ResourceCacheImpl) -Sat May 26 08:06:54 BST 2012 [trace] Default ResourceManager initialization complete. -Sat May 26 08:06:54 BST 2012 [debug] Loaded System Directive: org.apache.velocity.runtime.directive.Literal -Sat May 26 08:06:54 BST 2012 [debug] Loaded System Directive: org.apache.velocity.runtime.directive.Macro -Sat May 26 08:06:54 BST 2012 [debug] Loaded System Directive: org.apache.velocity.runtime.directive.Parse -Sat May 26 08:06:54 BST 2012 [debug] Loaded System Directive: org.apache.velocity.runtime.directive.Include -Sat May 26 08:06:54 BST 2012 [debug] Loaded System Directive: org.apache.velocity.runtime.directive.Foreach -Sat May 26 08:06:54 BST 2012 [debug] Created '20' parsers. -Sat May 26 08:06:54 BST 2012 [trace] Velocimacro : initialization starting. -Sat May 26 08:06:54 BST 2012 [debug] Velocimacro : "velocimacro.library" is not set. Trying default library: VM_global_library.vm -Sat May 26 08:06:54 BST 2012 [debug] Velocimacro : Default library not found. -Sat May 26 08:06:54 BST 2012 [debug] Velocimacro : allowInline = true : VMs can be defined inline in templates -Sat May 26 08:06:54 BST 2012 [debug] Velocimacro : allowInlineToOverride = false : VMs defined inline may NOT replace previous VM definitions -Sat May 26 08:06:54 BST 2012 [debug] Velocimacro : allowInlineLocal = false : VMs defined inline will be global in scope if allowed. -Sat May 26 08:06:54 BST 2012 [debug] Velocimacro : autoload off : VM system will not automatically reload global library macros -Sat May 26 08:06:54 BST 2012 [trace] Velocimacro : initialization complete. -Sat May 26 08:06:54 BST 2012 [trace] RuntimeInstance successfully initialized. -Sat May 26 08:06:54 BST 2012 [debug] ResourceManager : found templates/tagOverview.vm with loader org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader +Wed Jun 06 17:10:56 BST 2012 [debug] AvalonLogChute initialized using file 'velocity.log' +Wed Jun 06 17:10:56 BST 2012 [trace] ******************************************************************* +Wed Jun 06 17:10:56 BST 2012 [debug] Starting Jakarta Velocity v1.5-SNAPSHOT (compiled: 2006-07-21 06:25:35) +Wed Jun 06 17:10:56 BST 2012 [trace] RuntimeInstance initializing. +Wed Jun 06 17:10:56 BST 2012 [debug] Default Properties File: org/apache/velocity/runtime/defaults/velocity.properties +Wed Jun 06 17:10:56 BST 2012 [debug] Trying to use logger class org.apache.velocity.runtime.log.AvalonLogChute +Wed Jun 06 17:10:56 BST 2012 [debug] Using logger class org.apache.velocity.runtime.log.AvalonLogChute +Wed Jun 06 17:10:56 BST 2012 [debug] Default ResourceManager initializing. (class org.apache.velocity.runtime.resource.ResourceManagerImpl) +Wed Jun 06 17:10:56 BST 2012 [debug] ResourceLoader instantiated: org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader +Wed Jun 06 17:10:56 BST 2012 [trace] ClasspathResourceLoader : initialization complete. +Wed Jun 06 17:10:56 BST 2012 [debug] ResourceCache: initialized (class org.apache.velocity.runtime.resource.ResourceCacheImpl) +Wed Jun 06 17:10:56 BST 2012 [trace] Default ResourceManager initialization complete. +Wed Jun 06 17:10:56 BST 2012 [debug] Loaded System Directive: org.apache.velocity.runtime.directive.Literal +Wed Jun 06 17:10:56 BST 2012 [debug] Loaded System Directive: org.apache.velocity.runtime.directive.Macro +Wed Jun 06 17:10:56 BST 2012 [debug] Loaded System Directive: org.apache.velocity.runtime.directive.Parse +Wed Jun 06 17:10:56 BST 2012 [debug] Loaded System Directive: org.apache.velocity.runtime.directive.Include +Wed Jun 06 17:10:56 BST 2012 [debug] Loaded System Directive: org.apache.velocity.runtime.directive.Foreach +Wed Jun 06 17:10:56 BST 2012 [debug] Created '20' parsers. +Wed Jun 06 17:10:56 BST 2012 [trace] Velocimacro : initialization starting. +Wed Jun 06 17:10:56 BST 2012 [debug] Velocimacro : "velocimacro.library" is not set. Trying default library: VM_global_library.vm +Wed Jun 06 17:10:56 BST 2012 [debug] Velocimacro : Default library not found. +Wed Jun 06 17:10:56 BST 2012 [debug] Velocimacro : allowInline = true : VMs can be defined inline in templates +Wed Jun 06 17:10:56 BST 2012 [debug] Velocimacro : allowInlineToOverride = false : VMs defined inline may NOT replace previous VM definitions +Wed Jun 06 17:10:56 BST 2012 [debug] Velocimacro : allowInlineLocal = false : VMs defined inline will be global in scope if allowed. +Wed Jun 06 17:10:56 BST 2012 [debug] Velocimacro : autoload off : VM system will not automatically reload global library macros +Wed Jun 06 17:10:56 BST 2012 [trace] Velocimacro : initialization complete. +Wed Jun 06 17:10:56 BST 2012 [trace] RuntimeInstance successfully initialized. +Wed Jun 06 17:10:56 BST 2012 [debug] ResourceManager : found templates/tagOverview.vm with loader org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader