diff --git a/CHANGELOG.md b/CHANGELOG.md index 5c49d23..d438771 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,14 @@ +## [5.0.4](https://github.com/extent-framework/extentreports-java/compare/v5.0.3...v5.0.4) + +#### Issues Resolved +- [#240](/issues/240) Change static URI anchor behavior +- [#246](/issues/246) Collapse all nodes other than failure +- [#252](/issues/252) Nodes were using status color from the parent node +- [#235](/issues/235) [#236](/issues/236) Style updates + +#### New Features +- [#233](/issues/233) ExtentSparkReporter does not show timeline in dashboard view + ## [5.0.3](https://github.com/extent-framework/extentreports-java/compare/v5.0.2...v5.0.3) #### Issues Resolved diff --git a/Readme.md b/Readme.md index f769908..cc2519a 100644 --- a/Readme.md +++ b/Readme.md @@ -5,6 +5,11 @@ * Documentation (still in progress) for ExtentReports 5.x is hosted on GitHub at [ExtentReports Wiki](https://github.com/extent-framework/extentreports-java/wiki). * For versions 4 and below, visit [extentreports.com](http://extentreports.com/). +### Samples ### + +* [Klov](http://klov.herokuapp.com) +* [Spark](http://extentreports.com/docs/v5/wiki/spark/spark.html) from [Wiki:A Complete Example](https://github.com/extent-framework/extentreports-java/wiki/A-Complete-Example) + ### Contributing ### For more information on contributing to the ExtentReports project, please see [CONTRIBUTING.md](https://github.com/extent-framework/extentreports-java/blob/master/Contributing.md). diff --git a/pom.xml b/pom.xml index 491ae45..4ac56a8 100644 --- a/pom.xml +++ b/pom.xml @@ -1,201 +1,174 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - 4.0.0 - com.aventstack - extentreports - 5.0.3 + 4.0.0 + com.aventstack + extentreports + 5.0.4 - ExtentReports - www.extentreports.com - ExtentReports library + ExtentReports + www.extentreports.com + ExtentReports library - - scm:git:https://github.com/extent-framework/extentreports-java.git - scm:git:https://github.com/extent-framework/extentreports-java.git - https://github.com/extent-framework/extentreports-java - + + scm:git:https://github.com/extent-framework/extentreports-java.git + scm:git:https://github.com/extent-framework/extentreports-java.git + https://github.com/extent-framework/extentreports-java + - - - The Apache Software License, Version 2.0 - http://www.apache.org/licenses/LICENSE-2.0.txt - - + + + The Apache Software License, Version 2.0 + http://www.apache.org/licenses/LICENSE-2.0.txt + + - - - Anshoo Arora - https://github.com/anshooarora - anshooarora - - Owner - - - + + + Anshoo Arora + https://github.com/anshooarora + anshooarora + + Owner + + + - - UTF-8 - + + UTF-8 + - - - io.reactivex.rxjava3 - rxjava - 3.0.4 - - - org.freemarker - freemarker - 2.3.30 - - - org.projectlombok - lombok - 1.18.12 - - - com.google.code.gson - gson - 2.8.6 - + + + io.reactivex.rxjava3 + rxjava + 3.0.4 + + + org.freemarker + freemarker + 2.3.30 + + + org.projectlombok + lombok + 1.18.12 + + + com.google.code.gson + gson + 2.8.6 + - - - org.testng - testng - 7.1.0 - test - - + + + org.testng + testng + 7.3.0 + test + + - - - - org.apache.maven.plugins - maven-checkstyle-plugin - 2.16 - - - - checkstyle - - - - - - + + + + org.apache.maven.plugins + maven-checkstyle-plugin + 2.16 + + + + checkstyle + + + + + + - - src/main/java - - - org.apache.maven.plugins - maven-compiler-plugin - 3.6.1 - - 1.8 - 1.8 - - - - org.apache.maven.plugins - maven-resources-plugin - 3.1.0 - - - org.apache.maven.plugins - maven-gpg-plugin - 1.6 - - - sign-artifacts - verify - - sign - - - - - - org.jacoco - jacoco-maven-plugin - 0.8.5 - - - - prepare-agent - - - - report - test - - report - - - - - - + + src/main/java + + + org.apache.maven.plugins + maven-compiler-plugin + 3.6.1 + + 1.8 + 1.8 + + + + org.apache.maven.plugins + maven-resources-plugin + 3.1.0 + + + org.jacoco + jacoco-maven-plugin + 0.8.5 + + + + prepare-agent + + + + report + test + + report + + + + + + - - - release-sign-artifacts - - - performRelease - true - - - - 41414BBD - - anshooarora - - - - - - org.apache.maven.plugins - maven-source-plugin - 3.0.1 - - - attach-sources - - jar - - - - - - org.apache.maven.plugins - maven-javadoc-plugin - 3.0.1 - - - attach-javadocs - - jar - - - - - - - - + + + + + + org.apache.maven.plugins + maven-source-plugin + 3.0.1 + + + attach-sources + + jar + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 3.0.1 + + + attach-javadocs + + jar + + + + + + + + - - - ossrh - https://oss.sonatype.org/content/repositories/snapshots - - - ossrh - https://oss.sonatype.org/service/local/staging/deploy/maven2 - - + + + ossrh + https://oss.sonatype.org/content/repositories/snapshots + + + ossrh + https://oss.sonatype.org/service/local/staging/deploy/maven2 + + diff --git a/reporters/klov/pom.xml b/reporters/klov/pom.xml index cbbaf60..1e4d842 100644 --- a/reporters/klov/pom.xml +++ b/reporters/klov/pom.xml @@ -1,179 +1,152 @@ - 4.0.0 + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + 4.0.0 - com.aventstack - klov-reporter - 5.0.3 - klov-reporter - www.extentreports.com - Reporter for Klov Server - jar + com.aventstack + klov-reporter + 5.0.4 + klov-reporter + www.extentreports.com + Reporter for Klov Server + jar - - scm:git:https://github.com/extent-framework/extentreports-java.git - scm:git:https://github.com/extent-framework/extentreports-java.git - https://github.com/extent-framework/extentreports-java - + + scm:git:https://github.com/extent-framework/extentreports-java.git + scm:git:https://github.com/extent-framework/extentreports-java.git + https://github.com/extent-framework/extentreports-java + - - - The Apache Software License, Version 2.0 - http://www.apache.org/licenses/LICENSE-2.0.txt - - + + + The Apache Software License, Version 2.0 + http://www.apache.org/licenses/LICENSE-2.0.txt + + - - - Anshoo Arora - https://github.com/anshooarora - anshoo.arora - - Owner - - - + + + Anshoo Arora + https://github.com/anshooarora + anshoo.arora + + Owner + + + - - UTF-8 - + + UTF-8 + - - - com.aventstack - extentreports - 5.0.3 - - - org.mongodb - mongodb-driver - 3.6.4 - - - org.mongodb - bson - 3.6.4 - - - org.apache.httpcomponents - httpclient - 4.5.2 - - - org.apache.httpcomponents - httpmime - 4.5.2 - - + + + com.aventstack + extentreports + 5.0.4 + + + org.mongodb + mongodb-driver + 3.6.4 + + + org.mongodb + bson + 3.6.4 + + + org.apache.httpcomponents + httpclient + 4.5.2 + + + org.apache.httpcomponents + httpmime + 4.5.2 + + - - - - org.apache.maven.plugins - maven-checkstyle-plugin - 2.16 - - - - checkstyle - - - - - - + + + + org.apache.maven.plugins + maven-checkstyle-plugin + 2.16 + + + + checkstyle + + + + + + - - src/main/java - - - org.apache.maven.plugins - maven-compiler-plugin - 3.6.1 - - 1.8 - 1.8 - - - - org.apache.maven.plugins - maven-resources-plugin - 3.1.0 - - - org.apache.maven.plugins - maven-gpg-plugin - 1.6 - - - sign-artifacts - verify - - sign - - - - - - + + src/main/java + + + org.apache.maven.plugins + maven-compiler-plugin + 3.6.1 + + 1.8 + 1.8 + + + + org.apache.maven.plugins + maven-resources-plugin + 3.1.0 + + + - - - release-sign-artifacts - - - performRelease - true - - - - 41414BBD - - anshooarora - - - - - - org.apache.maven.plugins - maven-source-plugin - 3.0.1 - - - attach-sources - - jar - - - - - - org.apache.maven.plugins - maven-javadoc-plugin - 3.0.1 - - - attach-javadocs - - jar - - - - - - - - + + + + + + org.apache.maven.plugins + maven-source-plugin + 3.0.1 + + + attach-sources + + jar + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 3.0.1 + + + attach-javadocs + + jar + + + + + + + + - - - ossrh - https://oss.sonatype.org/content/repositories/snapshots - - - ossrh - https://oss.sonatype.org/service/local/staging/deploy/maven2 - - + + + ossrh + https://oss.sonatype.org/content/repositories/snapshots + + + ossrh + https://oss.sonatype.org/service/local/staging/deploy/maven2 + + \ No newline at end of file diff --git a/src/main/java/com/aventstack/extentreports/reporter/AbstractFilterableReporter.java b/src/main/java/com/aventstack/extentreports/reporter/AbstractFilterableReporter.java index cc7dd13..a9c6125 100644 --- a/src/main/java/com/aventstack/extentreports/reporter/AbstractFilterableReporter.java +++ b/src/main/java/com/aventstack/extentreports/reporter/AbstractFilterableReporter.java @@ -6,6 +6,7 @@ import com.aventstack.extentreports.model.Report; import com.aventstack.extentreports.model.service.ReportFilterService; import com.aventstack.extentreports.reporter.filter.StatusFilterable; +import com.aventstack.extentreports.util.Assert; import lombok.Getter; @@ -13,8 +14,7 @@ public class AbstractFilterableReporter extends AbstractReporter implements StatusFilterable { @Override public Report filterAndGet(Report report, Set set) { - if (report == null || report.getTestList().isEmpty()) - return report; + Assert.notNull(report, "Report must not be null"); if (set != null) return ReportFilterService.filter(report, set); return report; diff --git a/src/main/resources/com/aventstack/extentreports/offline/spark/css/spark-style.css b/src/main/resources/com/aventstack/extentreports/offline/spark/css/spark-style.css index 78fbe5a..a83c339 100644 --- a/src/main/resources/com/aventstack/extentreports/offline/spark/css/spark-style.css +++ b/src/main/resources/com/aventstack/extentreports/offline/spark/css/spark-style.css @@ -31,16 +31,17 @@ * MIT Licensed. */ .jstBracket,.jstComma,.jstValue{white-space:pre-wrap}.jstValue{font-size:10px;font-weight:400;font-family:"Lucida Console",Monaco,monospace}.jstProperty{color:#666;word-wrap:break-word}.jstBool{color:#2525CC}.jstNum{color:#D036D0}.jstNull{color:gray}.jstStr{color:#2DB669}.jstFold:after{content:' -';cursor:pointer}.jstExpand{white-space:normal}.jstExpand:after{content:' +';cursor:pointer}.jstFolded{white-space:normal!important}.jstHiddenBlock{display:none} -.test-wrapper{padding:0;margin:0;overflow:auto;min-height:100%;transition:all .3s ease-in-out;-webkit-transition:all .3s ease-in-out;-moz-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;-ms-transition:all .3s ease-in-out;border:1px solid #e9eaec}@media only screen and (max-width:992px){.test-wrapper{position:absolute;left:0;width:100%}}.test-wrapper .test-list{position:relative;padding:0;width:100%;overflow-y:hidden;background-color:#fff}@media only screen and (min-width:992px){.test-wrapper .test-list{width:25%;border-right:1px solid #e9eaec;float:left}.test-wrapper .test-list .test-list-wrapper{height:calc(100vh - 65px - 115px - 41px)}}@media only screen and (min-width:992px) and (max-width:1440px){.test-wrapper .test-list{width:35%}}.test-wrapper .test-list .test-list-tools{padding:5px 15px;border-bottom:1px solid #e9eaec;text-align:right;display:block}.test-wrapper .test-list .test-list-tools .tools{list-style:none;padding:0}.test-wrapper .test-list .test-list-tools .tools>li{display:inline-block;padding:3px 5px}.test-wrapper .test-list .test-list-tools .tools>li>a{font-size:16px;color:#8a8a8a;display:block;transition:all .2s ease-in-out;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;-ms-transition:all .2s ease-in-out}.test-wrapper .test-list .test-list-tools .tools>li>a:focus,.test-wrapper .test-list .test-list-tools .tools>li>a:hover{color:#24d5d8}.test-wrapper .test-list .test-list-wrapper{position:relative;overflow-y:auto}.test-wrapper .test-list .test-list-wrapper .test-list-item{padding-left:0;list-style:none}.test-wrapper .test-list .test-list-wrapper .test-list-item .test-item{position:relative;display:table;width:100%;padding:15px;border-bottom:1px solid #e9eaec;cursor:pointer;transition:all .3s ease-in-out;-webkit-transition:all .3s ease-in-out;-moz-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;-ms-transition:all .3s ease-in-out}.test-wrapper .test-list .test-list-wrapper .test-list-item .test-item:focus,.test-wrapper .test-list .test-list-wrapper .test-list-item .test-item:hover{background-color:#fafafa}@media only screen and (min-width:992px){.test-wrapper .test-list .test-list-wrapper .test-list-item .test-item.active{background-color:#fafafa}}.test-wrapper .test-list .test-list-wrapper .test-list-item .test-item a{color:#8a8a8a}.test-wrapper .test-list .test-list-wrapper .test-list-item .test-item .test-avatar{position:absolute;top:20px}.test-wrapper .test-list .test-list-wrapper .test-list-item .test-item .test-avatar img{width:30px;height:30px;border-radius:50px}.test-wrapper .test-list .test-list-wrapper .test-list-item .test-item .test-detail{vertical-align:top;display:table-cell;width:100%;padding-left:5px}.test-wrapper .test-list .test-list-wrapper .test-list-item .test-item .test-detail p{margin-bottom:0}.test-wrapper .test-list .test-list-wrapper .test-list-item .test-item .test-detail .name{font-size:16px;color:#515365}.test-wrapper .test-list .test-list-wrapper .test-list-item .test-item .test-detail .subject{color:#515365;font-weight:500;margin-bottom:5px}.test-wrapper .test-content{float:left;width:75%;position:relative;padding:0;background-color:#fff;height:calc(100vh - 65px - 115px);overflow:auto;transition:all .3s ease-in-out;-webkit-transition:all .3s ease-in-out;-moz-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;-ms-transition:all .3s ease-in-out}@media only screen and (min-width:992px) and (max-width:1440px){.test-wrapper .test-content{width:65%}}@media only screen and (max-width:992px){.test-wrapper .test-content{position:fixed;width:100%;height:calc(100vh - 65px);top:calc(65px + 20px);left:-100%}.test-wrapper .test-content.open{left:0}}.test-wrapper .test-content .test-content-tools{padding:10px 15px;border-bottom:1px solid #e9eaec}@media only screen and (min-width:992px){.test-wrapper .test-content .test-content-tools{display:none}}.test-wrapper .test-content .test-content-tools ul{list-style:none;padding:0;display:inline-block}.test-wrapper .test-content .test-content-tools ul li{display:inline-block}.test-wrapper .test-content .test-content-tools ul li a{font-size:16px;padding:0 10px;color:#8a8a8a}.test-wrapper .test-content .test-content-tools ul li a:focus,.test-wrapper .test-content .test-content-tools ul li a:hover{color:#24d5d8}.test-wrapper .test-content .test-content-detail{position:relative;padding:10px 20px;max-height:calc(100vh - 65px)}@media only screen and (max-width:992px){.test-wrapper .test-content .test-content-detail{padding:15px}}.test-wrapper .test-content .test-content-detail .detail-head{position:relative}.test-wrapper .test-content .test-content-detail .detail-head .thumb-img{width:50px;height:50px}.test-wrapper .test-content .test-content-detail .detail-head .info{height:50px;padding-left:65px}.test-wrapper .test-content .test-content-detail .detail-head .info .title{padding-top:5px}.test-wrapper .test-content .test-content-detail .detail-head .info .sub-title{max-width:100%}.test-wrapper .test-content .test-content-detail .detail-head .tools{padding:0;list-style:none;float:right;margin-top:15px}.test-wrapper .test-content .test-content-detail .detail-head .tools>li{display:inline-block;padding:10px}.test-wrapper .test-content .test-content-detail .detail-head .tools>li a{color:#8a8a8a}.test-wrapper .test-content .test-content-detail .detail-head .tools>li a:focus,.test-wrapper .test-content .test-content-detail .detail-head .tools>li a:hover{color:#515365}.test-wrapper .test-content .test-content-detail .detail-body{padding:25px 30px;position:relative}@media only screen and (max-width:992px){.test-wrapper{left:200px}} +.test-wrapper{padding:0;margin:0;overflow:auto;min-height:100%;transition:all .3s ease-in-out;-webkit-transition:all .3s ease-in-out;-moz-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;-ms-transition:all .3s ease-in-out;border:1px solid #e9eaec}@media only screen and (max-width:992px){.test-wrapper{position:absolute;left:0;width:100%}}.test-wrapper .test-list{position:relative;padding:0;width:100%;overflow-y:hidden;background-color:#fff}@media only screen and (min-width:992px){.test-wrapper .test-list{width:25%;border-right:1px solid #e9eaec;float:left}.test-wrapper .test-list .test-list-wrapper{height:calc(100vh - 65px - 115px - 41px)}}@media only screen and (min-width:992px) and (max-width:1440px){.test-wrapper .test-list{width:35%}}.test-wrapper .test-list .test-list-tools{padding:5px 15px;border-bottom:1px solid #e9eaec;text-align:right;display:block}.test-wrapper .test-list .test-list-tools .tools{list-style:none;padding:0}.test-wrapper .test-list .test-list-tools .tools>li{display:inline-block;padding:3px 5px}.test-wrapper .test-list .test-list-tools .tools>li>a{font-size:16px;color:#8a8a8a;display:block;transition:all .2s ease-in-out;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;-ms-transition:all .2s ease-in-out}.test-wrapper .test-list .test-list-tools .tools>li>a:focus,.test-wrapper .test-list .test-list-tools .tools>li>a:hover{color:#24d5d8}.test-wrapper .test-list .test-list-wrapper{position:relative;overflow-y:auto}.test-wrapper .test-list .test-list-wrapper .test-list-item{padding-left:0;list-style:none}.test-wrapper .test-list .test-list-wrapper .test-list-item .test-item{position:relative;display:table;width:100%;padding:15px;border-bottom:1px solid #e9eaec;cursor:pointer;transition:all .3s ease-in-out;-webkit-transition:all .3s ease-in-out;-moz-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;-ms-transition:all .3s ease-in-out}.test-wrapper .test-list .test-list-wrapper .test-list-item .test-item:focus,.test-wrapper .test-list .test-list-wrapper .test-list-item .test-item:hover{background-color:#fafafa}@media only screen and (min-width:992px){.test-wrapper .test-list .test-list-wrapper .test-list-item .test-item.active{background-color:#fafafa}}.test-wrapper .test-list .test-list-wrapper .test-list-item .test-item a{color:#8a8a8a}.test-wrapper .test-list .test-list-wrapper .test-list-item .test-item .test-avatar{position:absolute;top:20px}.test-wrapper .test-list .test-list-wrapper .test-list-item .test-item .test-avatar img{width:30px;height:30px;border-radius:50px}.test-wrapper .test-list .test-list-wrapper .test-list-item .test-item .test-detail{vertical-align:top;display:table-cell;width:100%;padding-left:5px}.test-wrapper .test-list .test-list-wrapper .test-list-item .test-item .test-detail p{margin-bottom:0}.test-wrapper .test-list .test-list-wrapper .test-list-item .test-item .test-detail .name{font-size:16px;color:#090909}.test-wrapper .test-list .test-list-wrapper .test-list-item .test-item .test-detail .subject{color:#090909;font-weight:500;margin-bottom:5px}.test-wrapper .test-content{float:left;width:75%;position:relative;padding:0;background-color:#fff;height:calc(100vh - 65px - 115px);overflow:auto;transition:all .3s ease-in-out;-webkit-transition:all .3s ease-in-out;-moz-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;-ms-transition:all .3s ease-in-out}@media only screen and (min-width:992px) and (max-width:1440px){.test-wrapper .test-content{width:65%}}@media only screen and (max-width:992px){.test-wrapper .test-content{position:fixed;width:100%;height:calc(100vh - 65px);top:calc(65px + 20px);left:-100%}.test-wrapper .test-content.open{left:0}}.test-wrapper .test-content .test-content-tools{padding:10px 15px;border-bottom:1px solid #e9eaec}@media only screen and (min-width:992px){.test-wrapper .test-content .test-content-tools{display:none}}.test-wrapper .test-content .test-content-tools ul{list-style:none;padding:0;display:inline-block}.test-wrapper .test-content .test-content-tools ul li{display:inline-block}.test-wrapper .test-content .test-content-tools ul li a{font-size:16px;padding:0 10px;color:#8a8a8a}.test-wrapper .test-content .test-content-tools ul li a:focus,.test-wrapper .test-content .test-content-tools ul li a:hover{color:#24d5d8}.test-wrapper .test-content .test-content-detail{position:relative;padding:10px 20px;max-height:calc(100vh - 65px)}@media only screen and (max-width:992px){.test-wrapper .test-content .test-content-detail{padding:15px}}.test-wrapper .test-content .test-content-detail .detail-head{position:relative}.test-wrapper .test-content .test-content-detail .detail-head .thumb-img{width:50px;height:50px}.test-wrapper .test-content .test-content-detail .detail-head .info{height:50px;padding-left:65px}.test-wrapper .test-content .test-content-detail .detail-head .info .title{padding-top:5px}.test-wrapper .test-content .test-content-detail .detail-head .info .sub-title{max-width:100%}.test-wrapper .test-content .test-content-detail .detail-head .tools{padding:0;list-style:none;float:right;margin-top:15px}.test-wrapper .test-content .test-content-detail .detail-head .tools>li{display:inline-block;padding:10px}.test-wrapper .test-content .test-content-detail .detail-head .tools>li a{color:#8a8a8a}.test-wrapper .test-content .test-content-detail .detail-head .tools>li a:focus,.test-wrapper .test-content .test-content-detail .detail-head .tools>li a:hover{color:#515365}.test-wrapper .test-content .test-content-detail .detail-body{padding:25px 30px;position:relative}@media only screen and (max-width:992px){.test-wrapper{left:200px}} body, p { - font-family: Roboto,-apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", Arial, sans-serif; - color: #585858; - font-size: 13px; + font-family: Roboto,-apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", Arial, sans-serif; + color: #090909; + font-size: 13px; } h5 { - font-size: 16px; - font-weight: 500; + font-size: 16px; + font-weight: 500; + word-break: break-all; } table > thead > tr > th { font-weight: 500 !important; @@ -48,13 +49,18 @@ table > thead > tr > th { text-transform: uppercase; } td { - word-break: break-all; + word-break: break-all; } .small, small { font-size: 85%; } img { - width: 100%; + width: 100%; +} + +/* bootstrap */ +.badge { + font-size: 85%; } /** @@ -62,18 +68,18 @@ img { * **/ .header { - background-color: #334a65; + background-color: #112843; } .header, .header .vheader .nav-left>li>a, .header .vheader .nav-right>li>a { - height: 55px; - min-height: 55px; - line-height: 55px; + height: 55px; + min-height: 55px; + line-height: 55px; } .header .vheader .nav-logo>a .logo { - min-height: 52px; + min-height: 52px; } .header .vheader .nav-left>li>a i { - font-size: 18px; + font-size: 18px; } /** @@ -81,8 +87,8 @@ img { * **/ .side-nav { - top: 55px; - width: 70px; + top: 55px; + width: 70px; } .side-nav-controls { position: absolute; @@ -98,21 +104,21 @@ img { * **/ .vcontainer .main-content { - padding: 55px 0 0; - height: calc(100vh); - min-height: calc(100vh); + padding: 55px 0 0; + height: calc(100vh); + min-height: calc(100vh); } .test-wrapper { - border-left: none !important; + border-left: none !important; } .test-wrapper .test-content { - height: calc(100vh - 64px); + height: calc(100vh - 64px); } .test-list-item { - margin-bottom: 50px; + margin-bottom: 50px; } .side-nav { - background-color: transparent; + background-color: transparent; } @@ -121,16 +127,16 @@ img { * **/ .text-sm { - font-size: 11px; + font-size: 11px; } .form-control, .form-control:focus { - color: #ccc; + color: #ccc; } .dropdown-item .status { - float: right; + float: right; } .dropdown-toggle:after { - display: none; + display: none; } .box-height-150 { height: 150px !important; @@ -143,16 +149,16 @@ img { /* test list */ .test-wrapper .test-list .test-list-wrapper .test-list-item .test-item { - padding: 10px 15px; + padding: 10px 15px; } .test-wrapper .test-list { - background: #fff; + background: #fff; } .test-wrapper .test-list .test-list-wrapper .test-list-item .test-item .test-detail { - display: block; + display: block; } .test-view.test-wrapper .test-detail { - padding-left: 40px !important; + padding-left: 10px !important; } .status-avatar { width: 20px; @@ -162,14 +168,14 @@ img { vertical-align: middle; color: #000; font-size: 11px; - font-weight: 500; - padding-top: 1px; - text-transform: lowercase; + font-weight: 500; + padding-top: 1px; + text-transform: lowercase; } .test-view .status-avatar { - position: absolute; + position: absolute; padding-top: 3px; - top: 18px; + top: 18px; } .accordion .status-avatar { top: 20px; @@ -177,29 +183,37 @@ img { right: 20px; } .test-detail .name { - font-size: 13px !important; - font-weight: 500; - word-break: break-all; - width: 99%; + font-size: 13px !important; + font-weight: 500; + word-break: break-all; + width: 99%; } .test-detail .meta { - float: right; + float: right; } .node-time { - float: right; + float: right; margin-top: 1.2rem; margin-right: 2rem; } +.node-time .badge { + padding: 2px 7px; +} +.node-status { + top: 19px; + position: relative; + right: 20px; +} .badge.log { - font-size: 80%; - padding: 2px 5px; - color: #f6f7f6; - letter-spacing:-0.5px; + font-size: 85%; + padding: 2px 5px; + color: #f6f7f6; + letter-spacing:-0.5px; } /* attributes-view */ .attributes-view .info > span { - cursor: pointer; + cursor: pointer; } /* bdd-report */ @@ -207,86 +221,86 @@ img { right: 0; } .bdd-report .node { - padding: 15px 15px 0; + padding: 15px 15px 0; } .bdd-report .test-view .card .card-body { - padding: 0 16px 20px 16px; + padding: 0 16px 20px 16px; } .bdd-report .accordion .node { - width: 90%; - max-width: 90%; + width: 90%; + max-width: 90%; } .bdd-report .accordion .node-description { - font-weight: 400; - padding-left: 40px; + font-weight: 400; + padding-left: 40px; } .bdd-report .accordion>.card>.card-header { - padding-bottom: 20px; + padding-bottom: 20px; } .given, .when, .then, .and, .asterisk, .but { - font-weight: 400; - padding-top: 10px; + font-weight: 400; + padding-top: 10px; } .bdd-report .alert-icon { - font-size: 11px; - border-radius: 100%; - padding: 0; - height: 20px; - width: 20px; - margin-right: 15px; + font-size: 11px; + border-radius: 100%; + padding: 0; + height: 20px; + width: 20px; + margin-right: 15px; } .bdd-report .alert-icon > i { - padding-left: 4px; - padding-top: 4px; + padding-left: 4px; + padding-top: 4px; } .bdd-report .alert-icon > i.fa-times { - padding-left: 6px; + padding-left: 6px; } .bdd-report .details, .bdd-report .code-block { - margin-top:.5rem; + margin-top:.5rem; } .bdd-report .code-block { - width: 95%; + width: 95%; } .bdd-report .scenario_outline { - padding: 10px 20px 0; + padding: 10px 20px 0; } .bdd-report .scenario_outline .card-header { - padding: 0; - min-height: auto !important; -} + padding: 0; + min-height: auto !important; +} .bdd-report .scenario_outline .card-header .node { - padding: 0; + padding: 0; } .bdd-report .scenario_outline .card-header .status-avatar { - top: 2px; - margin-right: 15px; -} + top: 2px; + margin-right: 15px; +} .bdd-report .scenario { - font-weight: 500; + font-weight: 500; } .bdd-report .card-body.l1 { - border: 1px solid rgba(0,0,0,.125); - margin-bottom: 20px; - padding-top: 15px !important; - padding-bottom: 15px !important; + border: 1px solid rgba(0,0,0,.125); + margin-bottom: 20px; + padding-top: 15px !important; + padding-bottom: 15px !important; } .bdd-report .card-body.l1 .card-body { - padding: 0; + padding: 0; } .bdd-report .step { - padding:2px 10px; + padding:2px 10px; } /* content */ .test-wrapper .test-content .test-content-detail .detail-head .info { - padding-left: 0; + padding-left: 0; } .test-wrapper .test-content .test-content-detail .detail-body { - padding: 0; + padding: 0; } .test-wrapper .test-content .test-content-detail .detail-foot { - padding: 15px 0; + padding: 15px 0; } pre, .code-block { background-color: #f8f9fa; @@ -300,18 +314,18 @@ pre, .code-block { white-space: pre-wrap; } textarea { - resize: auto; - width: 100%; + resize: auto; + width: 100%; } .status-col { - width: 70px; + width: 70px; } .timestamp-col { - width: 110px; + width: 110px; } .detail-body img { - background-color: #f6f7fa; - padding: 1rem; + background-color: #f6f7fa; + padding: 1rem; } .detail-body img+.title { background: #f6f7fa; @@ -319,33 +333,46 @@ textarea { text-align: center; font-size: 90%; } +.detail-body > table th { + border-top: none; +} /* nodes */ .card > .accordion { - margin-left: 20px; - margin-right: 20px; + margin-left: 20px; + margin-right: 20px; } .detail-body + .accordion { - margin-top: -20px; + margin-top: -20px; } .card-header .card-title { - display: block; - cursor: pointer; + display: block; + cursor: pointer; } .card .card-body { - padding: 20px; + padding: 20px; } .node + a { - float: right !important; + float: right !important; } .node { - display: inline-block; - padding: 20px; - font-weight: 500; - max-width: 90%; + display: inline-block; + padding: .75rem; + font-weight: 500; + max-width: 85%; + font-size: 14px; +} +.node-attr { + padding: .75rem; + margin-top: -.5rem; + padding-left: .7rem; + padding-top: 0; +} +.node-attr > .badge { + margin-bottom: 5px; } .accordion > .card > .card-header > .card-title > a:not(.collapsed):after { - display: none; + display: none; } .card-body .description { margin-top: -20px; @@ -355,92 +382,92 @@ textarea { /* status */ .log-status { - border-radius: 100%; + border-radius: 100%; } .item-meta .badge { - font-size: 11px; + font-size: 11px; } .transparent-bg { - background-color:transparent !important; + background-color:transparent !important; } .text-fail,.text-fatal { - color:#ff5722 !important; + color:#ff5722 !important; } .text-error { - color:#ff9800 !important; + color:#ff9800 !important; } .text-warning { - color:#ffc107 !important; + color:#ffc107 !important; } .text-info { - color:#00bcd4 !important; + color:#00bcd4 !important; } .text-skip { - color: #64b5f6 !important; + color: #64b5f6 !important; } .text-pass { - color: #1c965b !important; + color: #1c965b !important; } .info-bg { - background-color: #04a1f4; + background-color: #04a1f4; } .fail-bg, .fatal-bg,.avatar.fail,.avatar.fatal { - background-color: #e57373; + background-color: #e57373; } .step.fail-bg { - background-color: rgba(229,115,115,.5); + background-color: rgba(229,115,115,.5); } .pass-bg,.avatar.pass { - background-color: #9ccc65; + background-color: #9ccc65; } .step.pass-bg { - background-color: rgba(156,204,101,.5); + background-color: rgba(156,204,101,.5); } .skip-bg,.avatar.skip { - background-color: #ff9900; + background-color: #ff9900; } .step.skip-bg { - background-color: rgba(241,180,76,.4); + background-color: rgba(241,180,76,.4); } .error-bg,.avatar.skip { - background-color: #ffd54f; + background-color: #ffd54f; } .warn-bg,.avatar.warn,.warning-bg,.avatar.warning { - background-color: #ffc107; + background-color: #ffc107; } .b-skip { - border-color: #64b5f6; + border-color: #64b5f6; } - .badge-skip { - background-color: #ff9900 !important; - color: #fff; - } + .badge-skip { + background-color: #ff9900 !important; + color: #fff; + } .badge.status { - background: transparent !important; + background: transparent !important; } /* jsonTree */ .jstValue { - font-size: 11px; + font-size: 11px; } .jstProperty, .jstFold { - color: #444; + color: #444; } .dark .jstProperty, .dark .jstFold { - color: #eee; + color: #eee; } .jstStr { - color: #00b300; + color: #00b300; } .dark .jstStr { - color: #7ffaaa; + color: #7ffaaa; } .dark .jstBool { - color: #668cff; + color: #668cff; } .dark .jstNum { - color: #ff66ff; + color: #ff66ff; } /** @@ -448,7 +475,7 @@ textarea { * **/ .dashboard-view .media>.card-header { - padding:0 + padding:0 } @@ -457,68 +484,68 @@ textarea { * **/ .dark .header, body.dark { - background-color: #08111c; - color: #ddd; + background-color: #08111c; + color: #ddd; } .dark .side-nav, .dark .test-list { - background-color: #19222d !important; - border-right: none; + background-color: #19222d !important; + border-right: none; } .dark .test-wrapper { - border: none; + border: none; } .dark .test-list-tools, .dark .header { - border-bottom: 1px solid #19222d !important; + border-bottom: 1px solid #19222d !important; } .dark .test-item, .dark .table>thead>tr>th, .dark .table>tbody>tr>td { - border-bottom: 1px solid #494949 !important; + border-bottom: 1px solid #494949 !important; } .dark .table>thead>tr>th, .dark .table>tbody>tr>td, .dark .card-footer, .dark td, .dark th { - border-top: 1px solid #494949; + border-top: 1px solid #494949; } .dark .test-item.active, .dark .test-item:hover { - background-color: #19221c !important; + background-color: #19221c !important; } .dark .test-detail .name, .dark p { - color: #ddd !important; + color: #ddd !important; } .dark .test-wrapper, .dark .test-content, .dark .dashboard-view .container-fluid { - background-color: #243140; + background-color: #243140; } .dark .card, .dark .media>li, .dark .badge-default, .dark.bdd-report .card-body.l1, .dark .table-bordered td, .dark .table-bordered th, .dark textarea { - color: #ddd !important; - border: 1px solid #494949 !important; + color: #ddd !important; + border: 1px solid #494949 !important; } .dark .card, .dark tr.bg-gray, .dark .table, .dark table, dark tr, .dark th, .dark td, .dark .table-striped>tbody>tr:nth-of-type(odd) { - background-color: transparent !important; + background-color: transparent !important; } .dark .side-nav .side-nav-inner .side-nav-menu, .dark .file-icon, .dark pre, .dark .code-block { - border-right: 1px solid #494949 !important; + border-right: 1px solid #494949 !important; } .dark, .dark .node, .dark .table>thead>tr>th, .dark h1, .dark h2, .dark h3, .dark h4, .dark .font-weight-light, .dark .card-title, .dark .detail-head h4 { - color: #ddd; + color: #ddd; } .dark pre, .dark .code-block { - background: transparent; - color: #ddd !important; + background: transparent; + color: #ddd !important; } .dark .side-nav-menu li a, .dark .step, .dark .step pre, .dark .step textarea { - color: #eee !important; + color: #eee !important; } @media only screen and (min-width: 992px) { - .test-wrapper .test-list .test-list-wrapper { - height: calc(100vh - 106px); - } - .test-wrapper .test-list { - width: 32%; - } - .test-wrapper .test-content { - width: 68%; - } + .test-wrapper .test-list .test-list-wrapper { + height: calc(100vh - 106px); + } + .test-wrapper .test-list { + width: 32%; + } + .test-wrapper .test-content { + width: 68%; + } } @media only screen and (max-width: 992px) { - .test-wrapper .test-content.open { - top: 65px; - } + .test-wrapper .test-content.open { + top: 65px; + } } diff --git a/src/main/resources/com/aventstack/extentreports/offline/spark/js/spark-script.js b/src/main/resources/com/aventstack/extentreports/offline/spark/js/spark-script.js index 9d68b41..299c275 100644 --- a/src/main/resources/com/aventstack/extentreports/offline/spark/js/spark-script.js +++ b/src/main/resources/com/aventstack/extentreports/offline/spark/js/spark-script.js @@ -112,6 +112,13 @@ $(".test-content").click(function(evt) { $(".test-content .tag-test-status").addClass("d-none"); $(".test-content .tag-test-status[status=" + status + "]").removeClass("d-none"); } + + if (target.is('.uri-anchor')) { + var url = window.location.href; + if (url.indexOf('#') > 0) + url = url.split('#')[0]; + window.location = url + $(target).text(); + } }); /* -- [ attr ] -- */ @@ -137,7 +144,6 @@ $('.test-content').click(function(evt) { } }); - /* ------------------------------------ */ /* filters */ /* ------------------------------------ */ @@ -393,3 +399,51 @@ function drawChart(ctx, config) { drawChart(ctx, config); } })(); + +/* -- [ timeline ] -- */ +function getRandomColor() { + var letters = '0123456789ABCDEF'; + var color = '#'; + for (var i = 0; i < 6; i++) { + color += letters[Math.floor(Math.random() * 16)]; + } + return color; +} + +(function drawTimelineChart() { + if (typeof timeline !== "undefined") { + var datasets = []; + for (var key in timeline) { + datasets.push({ label:key, data:[timeline[key]], backgroundColor: getRandomColor(), borderWidth: 1 }); + } + var ctx = document.getElementById('timeline').getContext('2d'); + + new Chart(ctx, { + type: 'horizontalBar', + data: { + datasets: datasets + }, + options: { + responsive: true, + maintainAspectRatio: false, + tooltips: { + mode: 'point' + }, + scales: { + xAxes: [{ + stacked: true, + gridLines: false + }], + yAxes: [{ + stacked: true, + gridLines: false, + barThickness: 25 + }] + }, + legend: { + display: false + } + } + }); + } +})(); diff --git a/src/main/resources/com/aventstack/extentreports/templates/spark/macros/attributes.ftl b/src/main/resources/com/aventstack/extentreports/templates/spark/macros/attributes.ftl index 2972108..0184e3b 100644 --- a/src/main/resources/com/aventstack/extentreports/templates/spark/macros/attributes.ftl +++ b/src/main/resources/com/aventstack/extentreports/templates/spark/macros/attributes.ftl @@ -2,17 +2,17 @@ <#compress> <#if test.hasAuthor()> <#list test.authorSet as author> - ${author.name} + ${author.name} <#if test.hasCategory()> <#list test.categorySet as category> - ${category.name} + ${category.name} <#if test.hasDevice()> <#list test.deviceSet as device> - ${device.name} + ${device.name} diff --git a/src/main/resources/com/aventstack/extentreports/templates/spark/macros/recurse_nodes.ftl b/src/main/resources/com/aventstack/extentreports/templates/spark/macros/recurse_nodes.ftl index 7f6b1ee..aa72823 100644 --- a/src/main/resources/com/aventstack/extentreports/templates/spark/macros/recurse_nodes.ftl +++ b/src/main/resources/com/aventstack/extentreports/templates/spark/macros/recurse_nodes.ftl @@ -7,18 +7,20 @@
${node.name}
-
- +
${node.status}
+
+ ${node.timeTaken()?number_to_time?string("mm:ss:SSS")} +
+
+ <#if node.hasAttributes()><@attributes test=node />
-
${test.timeTaken()?number_to_time?string("mm:ss:SSS")}
- <@attributes test=node /> <#if TestService.testHasScreenCapture(node, true)>
<#if node.hasLog()> -
+
<@log test=node /> <@media node.media /> diff --git a/src/main/resources/com/aventstack/extentreports/templates/spark/partials/dashboard.ftl b/src/main/resources/com/aventstack/extentreports/templates/spark/partials/dashboard.ftl index d98d6b3..24a9058 100644 --- a/src/main/resources/com/aventstack/extentreports/templates/spark/partials/dashboard.ftl +++ b/src/main/resources/com/aventstack/extentreports/templates/spark/partials/dashboard.ftl @@ -117,6 +117,25 @@
+ <#if config.timelineEnabled == true> +
+

Timeline

+
+ +
+
+
+ +
<#if report.authorCtx.set?size != 0>
diff --git a/src/main/resources/com/aventstack/extentreports/templates/spark/partials/head.ftl b/src/main/resources/com/aventstack/extentreports/templates/spark/partials/head.ftl index eb7f745..5f97617 100644 --- a/src/main/resources/com/aventstack/extentreports/templates/spark/partials/head.ftl +++ b/src/main/resources/com/aventstack/extentreports/templates/spark/partials/head.ftl @@ -2,8 +2,8 @@ <#assign resourceCDN=config.resourceCDN cdnURI="cdn.jsdelivr.net/gh/extent-framework/extent-github-cdn@" - csscommit="c30588d3e4865eb6c631664381f105493ff8f21e" - jscommit="5cf22a596531402644b8523470526952516f345f" + csscommit="c43b89d03a7c43dae8bb8f0f078bad1997af6b3b" + jscommit="14e9bb345ef7e2ed3a102f271d84e9f0267c88e7" iconcommit="b00a2d0486596e73dd7326beacf352c639623a0e"> <#if resourceCDN=="extentreports"> <#assign diff --git a/src/main/resources/com/aventstack/extentreports/templates/spark/partials/test.ftl b/src/main/resources/com/aventstack/extentreports/templates/spark/partials/test.ftl index d12a3d4..9cdfd8d 100644 --- a/src/main/resources/com/aventstack/extentreports/templates/spark/partials/test.ftl +++ b/src/main/resources/com/aventstack/extentreports/templates/spark/partials/test.ftl @@ -53,24 +53,23 @@ author="<#list test.authorSet as x>${x.name}<#if x_has_next> " tag="<#list test.categorySet as x>${x.name}<#if x_has_next> " device="<#list test.deviceSet as x>${x.name}<#if x_has_next> "> -
- -
-

${test.name}

-

${test.startTime?string("HH:mm:ss a")} / ${test.timeTaken()?number_to_time?string("mm:ss:SSS")}

+

+ ${test.startTime?string("HH:mm:ss a")} / ${test.timeTaken()?number_to_time?string("mm:ss:SSS")} + ${test.status} +

<#compress>
-
#test-id=${test.getId()}
${test.name}
${test.startTime?string("MM.dd.yyyy HH:mm:ss")} ${test.endTime?string("MM.dd.yyyy HH:mm:ss")} ${test.timeTaken()?number_to_time?string("mm:ss:SSS")} + · #test-id=${test.getId()}
<#if test.hasAttributes()>
<@attributes test=test />
diff --git a/src/test/java/com/aventstack/extentreports/ParallelTest.java b/src/test/java/com/aventstack/extentreports/ParallelTest.java index aa419e4..99eff1b 100644 --- a/src/test/java/com/aventstack/extentreports/ParallelTest.java +++ b/src/test/java/com/aventstack/extentreports/ParallelTest.java @@ -1,5 +1,6 @@ package com.aventstack.extentreports; +import java.util.concurrent.CompletableFuture; import java.util.stream.IntStream; import org.testng.annotations.Test; @@ -19,11 +20,21 @@ public void parallelTestsWithReporter() { extent.attachReporter(new ExtentSparkReporter("")); IntStream.range(0, 10000).parallel().forEach(x -> extent.createTest("Test").info(String.valueOf(x))); } - + @Test public void parallelLogs() { ExtentReports extent = new ExtentReports(); ExtentTest test = extent.createTest("Test"); IntStream.range(0, 10000).parallel().forEach(x -> test.info(String.valueOf(x))); } + + @Test + public void parallelFlush() { + ExtentReports extent = new ExtentReports(); + CompletableFuture + .runAsync(() -> IntStream.range(0, 10000) + .forEach(x -> extent.createTest("Test" + x).info(String.valueOf(x)))); + CompletableFuture + .runAsync(() -> IntStream.range(0, 10000).forEach(x -> extent.flush())); + } }