Skip to content

Commit

Permalink
add cssClass and color attributes to IsTag
Browse files Browse the repository at this point in the history
  • Loading branch information
Jan Schäfer committed Apr 13, 2015
1 parent 3aa6fbf commit 3af798b
Show file tree
Hide file tree
Showing 6 changed files with 129 additions and 16 deletions.
24 changes: 24 additions & 0 deletions jgiven-core/src/main/java/com/tngtech/jgiven/annotation/IsTag.java
Original file line number Diff line number Diff line change
Expand Up @@ -79,4 +79,28 @@
* Whether the type should be prepended to the tag if the tag has a value.
*/
boolean prependType() default false;

/**
* Sets a CSS class that should be used in HTML reports for this tag.
* <p>
* The default css class is 'tag-<name>' where type is the name of the tag
* <p>
* Non-HTML reports ignore this attribute
*
* @since 0.7.2
*/
String cssClass() default "";

/**
* A color that should be used in reports for this tag.
* <p>
* It depends on the type of the report whether this value is interpreted.
* <p>
* Example values are 'red', '#ff0000', 'rgba(100,0,0,0.5)'
* <p>
* For advanced styling options use the {@link #cssClass()} attribute instead.
*
* @since 0.7.2
*/
String color() default "";
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ public class TagConfiguration {
private boolean prependType;
private String defaultValue = "";
private String description = "";
private String color = "";
private String cssClass = "";
private Class<? extends TagDescriptionGenerator> descriptionGenerator = DefaultTagDescriptionGenerator.class;
private String type = "";

Expand Down Expand Up @@ -59,6 +61,17 @@ public Builder prependType( boolean b ) {
configuration.prependType = b;
return this;
}

public Builder cssClass( String cssClass ) {
configuration.cssClass = cssClass;
return this;
}

public Builder color( String color ) {
configuration.color = color;
return this;
}

}

/**
Expand Down Expand Up @@ -117,6 +130,22 @@ public boolean isPrependType() {
return prependType;
}

/**
* {@link com.tngtech.jgiven.annotation.IsTag#color()}
* @see com.tngtech.jgiven.annotation.IsTag
*/
public String getColor() {
return color;
}

/**
* {@link com.tngtech.jgiven.annotation.IsTag#cssClass()}
* @see com.tngtech.jgiven.annotation.IsTag
*/
public String getCssClass() {
return cssClass;
}

public static TagConfiguration fromIsTag( IsTag isTag ) {
TagConfiguration result = new TagConfiguration();
result.defaultValue = isTag.value();
Expand All @@ -126,6 +155,8 @@ public static TagConfiguration fromIsTag( IsTag isTag ) {
result.prependType = isTag.prependType();
result.type = isTag.type();
result.descriptionGenerator = isTag.descriptionGenerator();
result.cssClass = isTag.cssClass();
result.color = isTag.color();
return result;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
import java.util.List;

import com.google.common.base.Function;
import com.google.common.base.Joiner;
import com.google.common.collect.ImmutableListMultimap;
import com.google.common.collect.Lists;
import com.google.common.collect.Multimaps;
Expand Down Expand Up @@ -159,14 +158,7 @@ private void writeTagLink( Tag tag, List<ScenarioModel> list ) {
}

static String tagToFilename( Tag tag ) {
List<String> fileNameParts = Lists.newArrayList( tag.getName() );
fileNameParts.addAll( tag.getValues() );
String fileName = escape( Joiner.on( '-' ).join( fileNameParts ) );
return fileName.substring( 0, Math.min( fileName.length(), 255 ) ) + ".html";
}

static String escape( String string ) {
return string.replaceAll( "[^\\p{Alnum}-]", "_" );
return tag.toEscapedString() + ".html";
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -81,8 +81,13 @@ private void printTag( Tag tag ) {
}

public static String tagToHtml( Tag tag ) {
return format( "<div class='tag tag-%s'><a href='%s'>%s</a></div>",
tag.getName(), HtmlTocWriter.tagToFilename( tag ), tag.toString() );
return format( "<div class='tag %s'%s><a href='%s'>%s</a></div>",
tag.getCssClassOrDefault(), getColorAttribute( tag ), HtmlTocWriter.tagToFilename( tag ), tag.toString() );
}

private static String getColorAttribute( Tag tag ) {
return tag.getColor() == null ? ""
: " style='background-color: " + tag.getColor() + "'";
}

@Override
Expand Down Expand Up @@ -119,7 +124,7 @@ void printCaseHeader( ScenarioCaseModel scenarioCase ) {
if( scenarioModel.getScenarioCases().size() > 1 ) {
writer.print( format( "<h4 onclick='toggle(\"%s\")'>", getCaseId() ) );
writeStatusIcon( scenarioCase.success );
writer.print( format( " Case %d: ", scenarioCase.getCaseNr()) );
writer.print( format( " Case %d: ", scenarioCase.getCaseNr() ) );

for( int i = 0; i < scenarioCase.getExplicitArguments().size(); i++ ) {
if( scenarioModel.getExplicitParameters().size() > i ) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -354,6 +354,14 @@ public List<Tag> toTags( Annotation annotation ) {
tag.setPrependType( true );
}

if( !Strings.isNullOrEmpty( tagConfig.getCssClass() ) ) {
tag.setCssClass( tagConfig.getCssClass() );
}

if( !Strings.isNullOrEmpty( tagConfig.getColor() ) ) {
tag.setColor( tagConfig.getColor() );
}

Object value = tagConfig.getDefaultValue();
if( !Strings.isNullOrEmpty( tagConfig.getDefaultValue() ) ) {
tag.setValue( tagConfig.getDefaultValue() );
Expand Down Expand Up @@ -414,6 +422,8 @@ private List<Tag> getExplodedTags( Tag originalTag, Object[] values, Annotation
newTag.setDescription( originalTag.getDescription() );
newTag.setPrependType( originalTag.isPrependType() );
newTag.setDescription( getDescriptionFromGenerator( tagConfig, annotation, singleValue ) );
newTag.setColor( originalTag.getColor() );
newTag.setCssClass( originalTag.getCssClass() );
result.add( newTag );
}
return result;
Expand Down
59 changes: 55 additions & 4 deletions jgiven-core/src/main/java/com/tngtech/jgiven/report/model/Tag.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,9 @@
* A tag represents a Java annotation of a scenario-test.
*/
public class Tag {
/**
* The name/type of this tag
*/
private final String name;

/**
Expand All @@ -26,8 +29,20 @@ public class Tag {

/**
* Whether the type should be prepended in the report.
* <p>
* Is either {@code true} or {@code null}
*/
private Boolean prependType;

/**
* An optional color that is used in reports
*/
private String color;

/**
* An optional cssClass used in HTML reports
*/
private boolean prependType;
private String cssClass;

public Tag( String name ) {
this.name = name;
Expand All @@ -43,7 +58,7 @@ public String getName() {
}

public boolean isPrependType() {
return prependType;
return prependType == null ? false : true;
}

public String getDescription() {
Expand All @@ -54,6 +69,26 @@ public void setDescription( String description ) {
this.description = description;
}

public void setColor( String color ) {
this.color = color;
}

public String getColor() {
return color;
}

public void setCssClass( String cssClass ) {
this.cssClass = cssClass;
}

public String getCssClass() {
return cssClass;
}

public String getCssClassOrDefault() {
return cssClass == null ? "tag-" + getName() : cssClass;
}

@SuppressWarnings( "unchecked" )
public List<String> getValues() {
if( value == null ) {
Expand All @@ -74,15 +109,15 @@ public void setValue( String value ) {
}

public Tag setPrependType( boolean prependType ) {
this.prependType = prependType;
this.prependType = prependType ? true : null;
return this;
}

@Override
public String toString() {
if( value != null ) {
String valueString = getValueString();
if( prependType ) {
if( isPrependType() ) {
return getName() + "-" + valueString;
}
return valueString;
Expand Down Expand Up @@ -118,4 +153,20 @@ public boolean equals( Object obj ) {
&& Objects.equal( value, other.value );
}

/**
* Returns a string representation where all non-alphanumeric characters are replaced with an underline (_).
* In addition, the result is cut-off at a length of 255 characters.
*
* @return a string representation without special characters
*/
public String toEscapedString() {
List<String> parts = Lists.newArrayList( getName() );
parts.addAll( getValues() );
String escapedString = escape( Joiner.on( '-' ).join( parts ) );
return escapedString.substring( 0, Math.min( escapedString.length(), 255 ) );
}

static String escape( String string ) {
return string.replaceAll( "[^\\p{Alnum}-]", "_" );
}
}

0 comments on commit 3af798b

Please sign in to comment.