From b2ed91df45aa2b79c3fa7743387f53b3a95ca26c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Sch=C3=A4fer?= Date: Fri, 19 Sep 2014 15:18:08 +0200 Subject: [PATCH] Further improved handling the handling of derived parameter (#15) --- .../jgiven/impl/util/ResourceUtil.java | 4 +- .../html/DataTableScenarioHtmlWriter.java | 4 +- .../jgiven/report/html/HtmlWriter.java | 6 +- .../report/html/ScenarioHtmlWriter.java | 23 +-- .../report/impl/CaseArgumentAnalyser.java | 167 +++++++++++++----- .../jgiven/report/model/ArgumentInfo.java | 14 ++ .../report/model/ReportModelBuilder.java | 10 +- .../report/model/ScenarioCaseModel.java | 45 ++++- .../jgiven/report/model/ScenarioModel.java | 22 ++- .../jgiven/report/model/StepFormatter.java | 21 ++- .../jgiven/report/model/StepModel.java | 2 +- .../com/tngtech/jgiven/report/model/Word.java | 53 ++++-- .../DataTablePlainTextScenarioWriter.java | 12 +- .../report/text/PlainTextScenarioWriter.java | 20 +-- .../tngtech/jgiven/report/html/default.css | 2 +- .../jgiven/format/StepFormatterTest.java | 11 +- .../report/model/ReportModelBuilderTest.java | 8 +- .../coffeemachine/ServeCoffeeTest.java | 11 +- .../coffeemachine/steps/GivenCoffee.java | 1 + .../coffeemachine/steps/ThenCoffee.java | 4 +- .../jgiven/junit/DataProviderTest.java | 6 +- .../tngtech/jgiven/junit/JUnitParamsTest.java | 2 +- .../jgiven/junit/StepsAreReported.java | 4 +- .../testng/ParameterizedTestNgTest.java | 12 +- .../com/tngtech/jgiven/testng/TestNgTest.java | 4 +- .../jgiven/impl/ScenarioExecutorTest.java | 2 +- .../report/html/HtmlWriterScenarioTest.java | 87 ++++++--- .../jgiven/report/html/ThenHtmlOutput.java | 30 +++- .../jgiven/report/model/GivenReportModel.java | 32 ++-- .../text/PlainTextScenarioWriterTest.java | 34 ++-- 30 files changed, 454 insertions(+), 199 deletions(-) diff --git a/jgiven-core/src/main/java/com/tngtech/jgiven/impl/util/ResourceUtil.java b/jgiven-core/src/main/java/com/tngtech/jgiven/impl/util/ResourceUtil.java index 3ea478225b..f6a5a85ee3 100644 --- a/jgiven-core/src/main/java/com/tngtech/jgiven/impl/util/ResourceUtil.java +++ b/jgiven-core/src/main/java/com/tngtech/jgiven/impl/util/ResourceUtil.java @@ -9,7 +9,9 @@ public static void close( Closeable... closeables ) { Exception t = null; for( Closeable c : closeables ) { try { - c.close(); + if( c != null ) { + c.close(); + } } catch( Exception e ) { t = e; } diff --git a/jgiven-core/src/main/java/com/tngtech/jgiven/report/html/DataTableScenarioHtmlWriter.java b/jgiven-core/src/main/java/com/tngtech/jgiven/report/html/DataTableScenarioHtmlWriter.java index 9a5e18fb3f..e57101b6b1 100644 --- a/jgiven-core/src/main/java/com/tngtech/jgiven/report/html/DataTableScenarioHtmlWriter.java +++ b/jgiven-core/src/main/java/com/tngtech/jgiven/report/html/DataTableScenarioHtmlWriter.java @@ -33,7 +33,7 @@ public void visitEnd( ScenarioCaseModel scenarioCase ) { writer.println( "" ); writer.println( "" ); writer.print( "" ); - for( String param : scenarioModel.parameterNames ) { + for( String param : scenarioModel.getDerivedParameters() ) { writer.print( "" ); } writer.print( "" ); @@ -42,7 +42,7 @@ public void visitEnd( ScenarioCaseModel scenarioCase ) { writer.println( "" ); writer.print( "" ); - for( String arg : scenarioCase.arguments ) { + for( String arg : scenarioCase.getDerivedArguments() ) { writer.print( "" ); } writer.print( "" ); + patternBuilder.append( "\\s*\\s*" ); + for( String arg : explicitArguments ) { + patternBuilder.append( "\\s*\\s*" ); + } + patternBuilder.append( "\\s*\\s*" ); + patternBuilder.append( "\\s*" ); + return patternBuilder; + } + public ThenHtmlOutput the_HTML_report_contains_pattern( String patternString ) { Pattern pattern = Pattern.compile( ".*" + patternString + ".*", Pattern.MULTILINE | Pattern.DOTALL ); Assertions.assertThat( html ).matches( pattern ); diff --git a/jgiven-tests/src/test/java/com/tngtech/jgiven/report/model/GivenReportModel.java b/jgiven-tests/src/test/java/com/tngtech/jgiven/report/model/GivenReportModel.java index ae11791592..220febf05e 100644 --- a/jgiven-tests/src/test/java/com/tngtech/jgiven/report/model/GivenReportModel.java +++ b/jgiven-tests/src/test/java/com/tngtech/jgiven/report/model/GivenReportModel.java @@ -3,7 +3,6 @@ import static java.util.Arrays.asList; import java.util.Arrays; -import java.util.List; import com.tngtech.jgiven.Stage; import com.tngtech.jgiven.annotation.AfterStage; @@ -35,22 +34,22 @@ private void createScenarioModel( String description, String testMethodName ) { scenarioModel.description = description; scenarioModel.testMethodName = testMethodName; - addCase( scenarioModel ); + addDefaultCase( scenarioModel ); reportModel.getScenarios().add( scenarioModel ); } - private void addCase( ScenarioModel scenarioModel ) { + private void addDefaultCase( ScenarioModel scenarioModel ) { ScenarioCaseModel scenarioCaseModel = new ScenarioCaseModel(); scenarioModel.addCase( scenarioCaseModel ); int i = 0; - for( String param : scenarioModel.parameterNames ) { - scenarioCaseModel.addArguments( "arg" + scenarioCaseModel.caseNr + i++ ); + for( String param : scenarioModel.getExplicitParameters() ) { + scenarioCaseModel.addExplicitArguments( "arg" + scenarioCaseModel.caseNr + i++ ); } scenarioCaseModel.addStep( "something_happens", Arrays.asList( Word.introWord( "given" ), new Word( "something" ) ), InvocationMode.NORMAL ); i = 0; - for( String arg : scenarioCaseModel.arguments ) { + for( String arg : scenarioCaseModel.getExplicitArguments() ) { scenarioCaseModel.addStep( "something_happens", asList( Word.introWord( "when" ), Word.argWord( "stepArg" + i++, arg ) ), InvocationMode.NORMAL ); } @@ -87,9 +86,18 @@ public SELF the_scenario_has_parameters( String... params ) { } public SELF the_scenario_has_$_cases( int ncases ) { + ScenarioModel scenarioModel = reportModel.getLastScenarioModel(); + scenarioModel.clearCases(); + for( int i = 0; i < ncases; i++ ) { + scenarioModel.addCase( new ScenarioCaseModel() ); + } + return self(); + } + + public SELF the_scenario_has_$_default_cases( int ncases ) { reportModel.getLastScenarioModel().clearCases(); for( int i = 0; i < ncases; i++ ) { - addCase( reportModel.getLastScenarioModel() ); + addDefaultCase( reportModel.getLastScenarioModel() ); } return self(); } @@ -101,9 +109,7 @@ public SELF the_scenario_has_parameters( String... params ) { } public SELF case_$_has_arguments( int ncase, String... args ) { - List arguments = getCase( ncase ).arguments; - arguments.clear(); - arguments.addAll( Arrays.asList( args ) ); + getCase( ncase ).setExplicitArguments( Arrays.asList( args ) ); return self(); } @@ -115,6 +121,12 @@ public SELF the_scenario_has_parameters( String... params ) { return self(); } + public SELF case_$_has_a_step_$( int ncase, String name ) { + getCase( ncase ).addStep( name, Arrays.asList( Word.introWord( "when" ), new Word( name ) ), + InvocationMode.NORMAL ); + return self(); + } + public SELF case_$_has_a_step_$_with_argument( int i, String name, String arg ) { return case_$_has_a_when_step_$_with_argument( i, name, arg ); } diff --git a/jgiven-tests/src/test/java/com/tngtech/jgiven/report/text/PlainTextScenarioWriterTest.java b/jgiven-tests/src/test/java/com/tngtech/jgiven/report/text/PlainTextScenarioWriterTest.java index 20fec2049c..23fa1e4ed6 100644 --- a/jgiven-tests/src/test/java/com/tngtech/jgiven/report/text/PlainTextScenarioWriterTest.java +++ b/jgiven-tests/src/test/java/com/tngtech/jgiven/report/text/PlainTextScenarioWriterTest.java @@ -49,7 +49,7 @@ public void ignored_steps_marked_in_text_reports( StepStatus status, String expe public void cases_are_generated_in_text_reports() throws UnsupportedEncodingException { given() .a_report_model_with_one_scenario() - .and().the_scenario_has_$_cases( 2 ) + .and().the_scenario_has_$_default_cases( 2 ) .and().case_$_has_a_when_step_$_with_argument( 1, "some step", "someArg" ); when().the_plain_text_report_is_generated(); @@ -66,11 +66,11 @@ public void arguments_are_correctly_printed_in_text_reports_for_data_tables() th given() .a_report_model_with_one_scenario() .and().the_scenario_has_parameters( "param1" ) - .and().the_scenario_has_$_cases( 2 ) + .and().the_scenario_has_$_default_cases( 2 ) .and().case_$_has_arguments( 1, "arg10" ) - .and().case_$_has_a_step_$_with_argument( 1, "some arg step", "arg10" ) + .and().case_$_has_a_when_step_$_with_argument_$_and_argument_name_$( 1, "some arg step", "arg10", "aArg" ) .and().case_$_has_arguments( 2, "arg20" ) - .and().case_$_has_a_step_$_with_argument( 2, "some arg step", "arg20" ) + .and().case_$_has_a_when_step_$_with_argument_$_and_argument_name_$( 2, "some arg step", "arg20", "aArg" ) .and().all_cases_have_a_step_$_with_argument( "some step", "someArg" ); when().the_plain_text_report_is_generated(); @@ -84,21 +84,23 @@ public void arguments_are_correctly_printed_in_text_reports_for_data_tables() th public void data_tables_are_generated_in_text_reports() throws UnsupportedEncodingException { given() .a_report_model_with_one_scenario() - .and().the_scenario_has_parameters( "param1", "param2" ) - .and().the_scenario_has_$_cases( 3 ) - .and().case_$_has_arguments( 1, "arg10", "arg11" ) - .and().case_$_has_arguments( 2, "arg20", "arg21" ) - .and().case_$_has_arguments( 3, "arg30", "arg31" ); + .and().the_scenario_has_$_default_cases( 3 ) + .and().case_$_has_a_when_step_$_with_argument_$_and_argument_name_$( 1, "some arg step", "arg10", "aArg1" ) + .and().case_$_has_a_when_step_$_with_argument_$_and_argument_name_$( 1, "another arg step", "arg11", "aArg2" ) + .and().case_$_has_a_when_step_$_with_argument_$_and_argument_name_$( 2, "some arg step", "arg20", "aArg1" ) + .and().case_$_has_a_when_step_$_with_argument_$_and_argument_name_$( 2, "another arg step", "arg21", "aArg2" ) + .and().case_$_has_a_when_step_$_with_argument_$_and_argument_name_$( 3, "some arg step", "arg30", "aArg1" ) + .and().case_$_has_a_when_step_$_with_argument_$_and_argument_name_$( 3, "another arg step", "arg31", "aArg2" ); when().the_plain_text_report_is_generated(); - then().the_report_contains_text( "" ) - .and().the_report_contains_text( "" ) + then().the_report_contains_text( "" ) + .and().the_report_contains_text( "" ) .and().the_report_contains_text( "\n" + - " | param1 | param2 |\n" + - " +--------+--------+\n" + - " | arg10 | arg11 |\n" + - " | arg20 | arg21 |\n" + - " | arg30 | arg31 |\n" ); + " | aArg1 | aArg2 |\n" + + " +-------+-------+\n" + + " | arg10 | arg11 |\n" + + " | arg20 | arg21 |\n" + + " | arg30 | arg31 |\n" ); } }
#" + param + "Status
" + scenarioCase.caseNr + "" + arg + "" ); diff --git a/jgiven-core/src/main/java/com/tngtech/jgiven/report/html/HtmlWriter.java b/jgiven-core/src/main/java/com/tngtech/jgiven/report/html/HtmlWriter.java index 3952d1b58a..e7de8b2042 100644 --- a/jgiven-core/src/main/java/com/tngtech/jgiven/report/html/HtmlWriter.java +++ b/jgiven-core/src/main/java/com/tngtech/jgiven/report/html/HtmlWriter.java @@ -17,6 +17,7 @@ import com.google.common.base.Throwables; import com.google.common.io.Files; import com.tngtech.jgiven.impl.util.ResourceUtil; +import com.tngtech.jgiven.impl.util.Version; import com.tngtech.jgiven.report.impl.CommonReportHelper; import com.tngtech.jgiven.report.model.ReportModel; import com.tngtech.jgiven.report.model.ReportModelVisitor; @@ -48,8 +49,9 @@ public void writeHtmlFooter() { } private void writeJGivenFooter() { - writer.print( "
" + caseNr + "" + arg + ".*icon-ok.*