fitnesse.testsystems.slim.results.SlimExceptionResult

Included page: .FitNesse.SuiteAcceptanceTests.ScenarioLibrary (edit)

scenario given page page with content content
create page @page with content @content
$IT= echo @page

scenario given page page
given page @page with content nothing
$CONTENT= echo

scenario given test page page
given page @page
make @page a test page

scenario given slim test page page
given page @page with content !define TEST_SYSTEM {slim}
make @page a test page

scenario page source should have link to target
check request page @source 200
ensure content contains <a href="@target"
$IT= echo @source

scenario it should have link to target
page $IT should have link to @target

scenario and it should have link to target
page $IT should have link to @target

scenario page source should have creating link to target
check request page @source 200
ensure content contains @target<a title="create page" href="@target?edit&nonExistent=true">[?]</a>

scenario it should have creating link to target
page $IT should have creating link to @target

scenario page source should contain text
check request page @source 200
ensure content contains @text
show content

scenario page source should not contain text
check request page @source 200
reject content contains @text
show content

scenario page source should match text
check request page @source 200
ensure content matches @text
show content

scenario it should contain text
page $IT should contain @text

scenario it should not contain text
page $IT should not contain @text

scenario it should contain text in line symbol
check request page $IT 200
$@symbol= line number containing @text

scenario it should match text
page $IT should match @text

scenario test results for page source should contain text
check request page @source?test 200
ensure content contains @text
show content

scenario test results for page in debug mode source should contain text
check request page @source?test&debug 200
ensure content contains @text
show content

scenario test results for suite source should contain text
check request page @source?suite 200
ensure content contains @text
show content

scenario its test results should contain text
test results for page $IT should contain @text

scenario test ressults for page source should not contain text
check request page @source?test 200
reject content contains @text
show content

scenario and should contain text
ensure content contains @text
show content

scenario and should match text
ensure content matches @text
show content

scenario and should not contain text
reject content contains @text
show content

scenario widget wikiText should render htmlText
create page WidgetPage with content @wikiText
check request page WidgetPage 200
ensure content matches @htmlText
show content

scenario the line after should come after before
check echo int $@before < $@after

scenario pass
check echo pass pass

scenario show collapsed content
show @content

scenario show Symbol result

scenario then pass assertions pass, fail fail, ignore are ignored exception exceptions thrown
ensure content matches Assertions:<[^<]*@pass right, @fail wrong, @ignore ignored, @exception exceptions
show extract match; Assertions:<[^<]*exceptions contents 0

scenario and cell text has result result
ensure content matches class="@result">@text<
show extract match; class="[^"]+">@text< contents 0

variable defined: TestSTART=@@@START: Test specific content
variable defined: TestEND=@@@END: Test specific content

scenario and TestSystem setup is content
$CONTENT= echo $CONTENT @content

scenario and setup content is content
$CONTENT= echo $CONTENT @content

scenario and test content is content
given page $IT with content $CONTENT @@@START: Test specific content@content@@@END: Test specific content
make $IT a test page

scenario get HTML result
start Response Examiner.
setType contents
setPattern @@@START: Test specific content[^<]*(.*>)\s*@@@END: Test specific content
setGroup 1
$HTML_Result= found

scenario get HTML input
start Response Examiner.
setType pageHtml
setPattern @@@START: Test specific content[^<]*(.*>)\s*@@@END: Test specific content
setGroup 1
$HTML_Input= found
show collapsed get value


scenario get collapsed executon log for page source
check request page @source?executionLog 200
show content

scenario when page source is tested
check request page @source?test 200
show collapsed content

scenario when page source is tested and HTML is extracted
when page @source is tested
get HTML result
get HTML input

Included page: .FitNesse.SuiteAcceptanceTests.SuiteSlimTests.SetUp (edit)

Import
fitnesse.fixtures

SetUp Plugins=fitnesse.testsystems.slim.CustomTableAliasPlugin Plugins=fitnesse.testsystems.slim.CustomScriptTableRenderingPlugin CustomComparators=glob:fitnesse.testsystems.slim.GlobComparator

Library
page driver
echo fixture

Scenario


scenario Transform Exception with StackTrace to Message exception message? isNoInstanceException? isNoMethodInClassException?
start SlimExceptionResult; NOT IMPORTANT @exception
$message= getMessage
$isNoInstanceException= isNoInstanceException
$isNoMethodInClassException= isNoMethodInClassException
$isStopSuiteException= isStopSuiteException
$isStopTestException= isStopTestException
$getExecutionResult= getExecutionResult

import
fitnesse.testsystems.slim.results


Given a SlimExceptionResult

When the exception message has a message tag

Then the exception message is shortened

Else it is null



Transform Exception with StackTrace to Message
#Case exception message?
no message tags Hello FitNesse null
has message tags message:<<Hello FitNesse>> Hello FitNesse
has message tags with HTML message:<<<div>Bad things<br/><span><b>happened</b></span></div>>> <div>Bad things<br/><span><b>happened</b></span></div>
multi line message ignored ignored message:<<Line 1 Line 2 Line 3>> ignored ignored Line 1 Line 2 Line 3
has message tags __EXCEPTION__:ABORT_SLIM_TEST:message:<<fitnesse.slim.test.StopTestException: stop test>> at fitnesse.slim.test.ConstructorThrows.(ConstructorThrows.java:6) [file:/home/six42/git/fitnesse/build/classes/java/main/] at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) [rt.jar:1.8.0_222] at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) [rt.jar:1.8.0_222] at fitnesse.slim.SlimService.main(SlimService.java:57) [file:/home/six42/git/fitnesse/build/classes/java/main/]] fitnesse.slim.test.StopTestException: stop test
no message tag fitnesse.slim.SlimError: SETX_THROWS at fitnesse.slim.test.DecisionTableExecuteThrows.setX(DecisionTableExecuteThrows.java:35) [file:/home/six42/git/fitnesse/build/classes/java/main/] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.8.0_222] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) [rt.jar:1.8.0_222] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [rt.jar:1.8.0_222] at fitnesse.slim.SlimService.main(SlimService.java:57) [file:/home/six42/git/fitnesse/build/classes/java/main/] null
messages in caused by exceptions might overwrite the latest exception text and information can be lost java.lang.InstantiationException: Failed to call static method 'java.time.Instant.ofEpochSecond': Caused by: fitnesse.slim.SlimError: message:<<Can't convert Hello to long.>> at fitnesse.slim.converters.LongConverter.getObject(LongConverter.java:12) [file:/home/six42/git/fitnesse/bin/main/] at java.lang.Thread.run(Thread.java:748) [rt.jar:1.8.0_222] Caused by: java.lang.NumberFormatException: For input string: "Hello" at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) [rt.jar:1.8.0_222] at java.lang.Long.parseLong(Long.java:589) [rt.jar:1.8.0_222] at java.lang.Long.valueOf(Long.java:803) [rt.jar:1.8.0_222] at java.lang.Thread.run(Thread.java:748) [rt.jar:1.8.0_222] Can't convert Hello to long.

Given a SlimExceptionResult

When the exception message has two message tags

Then the exception message is shortened

AND only the first message is printed



Transform Exception with StackTrace to Message
#Case exception message?
two messages ignored ignored message:<<Top Message!>> Line 2 Caused by: fitnesse.slim.SlimError: message:<<Causing Message.>> Line 3>> ignored ignored Top Message!

Given a SlimExceptionResult

AND it has a message

When the message has a FLAG/TAG defined in fitnesse.slim.SlimServer

Then the exception message is split on each space

AND a transformation of the text happens


Transform Exception with StackTrace to Message
#flag exception message?
NO_CONVERTER_FOR_ARGUMENT_NUMBER fitnesse.slim.SlimError: message:<<NO_CONVERTER_FOR_ARGUMENT_NUMBER java.time.temporal.TemporalAccessor. ignores everything after second space>> at fitnesse.slim.ConverterSupport.convertArg(ConverterSupport.java:36) [file:/home/six42/git/fitnesse/bin/main/] at fitnesse.slim.ConverterSupport.convertArgs(ConverterSupport.java:17) [file:/home/six42/git/fitnesse/bin/main/] at fitnesse.slim.fixtureInteraction.SimpleInteraction.convertArgs(SimpleInteraction.java:306) [file:/home/six42/git/fitnesse/bin/main/] at fitnesse.slim.SlimService$1.run(SlimService.java:158) [file:/home/six42/git/fitnesse/bin/main/] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [rt.jar:1.8.0_222] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [rt.jar:1.8.0_222] at java.lang.Thread.run(Thread.java:748) [rt.jar:1.8.0_222] No converter for java.time.temporal.TemporalAccessor.
COULD_NOT_INVOKE_CONSTRUCTOR message:<<COULD_NOT_INVOKE_CONSTRUCTOR TestSlim[1] ignores everything after second space>> at fitnesse.slim.converters.IntConverter.getObject(IntConverter.java:14) [file:/home/six42/git/fitnesse/bin/main/] at fitnesse.slim.converters.IntConverter.getObject(IntConverter.java:1) [file:/home/six42/git/fitnesse/bin/main/] at fitnesse.slim.ConverterSupport.convertArgs(ConverterSupport.java:17) [file:/home/six42/git/fitnesse/bin/main/] Caused by: java.lang.NumberFormatException: For input string: "five" at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) [rt.jar:1.8.0_222] at java.lang.Integer.parseInt(Integer.java:580) [rt.jar:1.8.0_222] at java.lang.Integer.valueOf(Integer.java:766) [rt.jar:1.8.0_222] Could not invoke constructor for TestSlim[1]
classic translation NO_METHOD_IN_CLASS used when only two spaces in the message fitnesse.slim.SlimError: message:<<NO_METHOD_IN_CLASS nonExistingMethod[1] fitnesse.slim.test.TestSlim.>> at fitnesse.slim.MethodExecutionResult$NoMethod.returnValue(MethodExecutionResult.java:34) [file:/home/six42/git/fitnesse/bin/main/] at fitnesse.slim.StatementExecutor.call(StatementExecutor.java:112) [file:/home/six42/git/fitnesse/bin/main/] at fitnesse.slim.instructions.CallAndOptionalAssignInstruction.executeInternal(CallAndOptionalAssignInstruction.java:30) [file:/home/six42/git/fitnesse/bin/main/] at fitnesse.slim.SlimService.access$0(SlimService.java:167) [file:/home/six42/git/fitnesse/bin/main/] Method nonExistingMethod[1] not found in fitnesse.slim.test.TestSlim.
modern translation NO_METHOD_IN_CLASS allows to gives hints to the user fitnesse.slim.SlimError: message:<<NO_METHOD_IN_CLASS No Method nonExistingMethod[1] in class fitnesse.slim.test.TestSlim. Available methods: addTo(int, int) -> int concatenateThreeArgs(java.lang.String, java.lang.String, java.lang.String) -> class java.lang.String createTestSlimWithString(java.lang.String) -> class fitnesse.slim.test.TestSlim die() -> void echoBoolean(boolean) -> boolean echoDouble(double) -> double echoInt(int) -> int echoList(java.util.List) -> interface java.util.List echoString(java.lang.String) -> class java.lang.String equals(java.lang.Object) -> boolean>> at fitnesse.slim.MethodExecutionResult$NoMethod.returnValue(MethodExecutionResult.java:34) [file:/home/six42/git/fitnesse/bin/main/] at fitnesse.slim.StatementExecutor.call(StatementExecutor.java:112) [file:/home/six42/git/fitnesse/bin/main/] at fitnesse.slim.instructions.CallAndOptionalAssignInstruction.executeInternal(CallAndOptionalAssignInstruction.java:30) [file:/home/six42/git/fitnesse/bin/main/] at fitnesse.slim.SlimService.access$0(SlimService.java:167) [file:/home/six42/git/fitnesse/bin/main/] No Method nonExistingMethod[1] in class fitnesse.slim.test.TestSlim. Available methods: addTo(int, int) -> int concatenateThreeArgs(java.lang.String, java.lang.String, java.lang.String) -> class java.lang.String createTestSlimWithString(java.lang.String) -> class fitnesse.slim.test.TestSlim die() -> void echoBoolean(boolean) -> boolean echoDouble(double) -> double echoInt(int) -> int echoList(java.util.List) -> interface java.util.List echoString(java.lang.String) -> class java.lang.String equals(java.lang.Object) -> boolean

Given a SlimExceptionResult

AND it has a message

When the message has a NO_METHOD_IN_CLASS or NO_INSTANCE flag

Then status flags are set on the object


baseline: Transform Exception with StackTrace to Message
#flag exception isNoInstanceException? isNoMethodInClassException?
COULD_NOT_INVOKE_CONSTRUCTOR message:<<COULD_NOT_INVOKE_CONSTRUCTOR TestSlim[1] ignores everything after second space>> at fitnesse.slim.converters.IntConverter.getObject(IntConverter.java:14) [file:/home/six42/git/fitnesse/bin/main/] at fitnesse.slim.converters.IntConverter.getObject(IntConverter.java:1) [file:/home/six42/git/fitnesse/bin/main/] at fitnesse.slim.ConverterSupport.convertArgs(ConverterSupport.java:17) [file:/home/six42/git/fitnesse/bin/main/] Caused by: java.lang.NumberFormatException: For input string: "five" at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) [rt.jar:1.8.0_222] at java.lang.Integer.parseInt(Integer.java:580) [rt.jar:1.8.0_222] at java.lang.Integer.valueOf(Integer.java:766) [rt.jar:1.8.0_222] false false
classic translation NO_METHOD_IN_CLASS used when only two spaces in themessage fitnesse.slim.SlimError: message:<<NO_METHOD_IN_CLASS nonExistingMethod[1] fitnesse.slim.test.TestSlim.>> at fitnesse.slim.MethodExecutionResult$NoMethod.returnValue(MethodExecutionResult.java:34) [file:/home/six42/git/fitnesse/bin/main/] at fitnesse.slim.StatementExecutor.call(StatementExecutor.java:112) [file:/home/six42/git/fitnesse/bin/main/] at fitnesse.slim.instructions.CallAndOptionalAssignInstruction.executeInternal(CallAndOptionalAssignInstruction.java:30) [file:/home/six42/git/fitnesse/bin/main/] at fitnesse.slim.SlimService.access$0(SlimService.java:167) [file:/home/six42/git/fitnesse/bin/main/] true
modern translation NO_METHOD_IN_CLASS allows to gives hints to the user fitnesse.slim.SlimError: message:<<NO_METHOD_IN_CLASS No Method nonExistingMethod[1] in class fitnesse.slim.test.TestSlim. Available methods: addTo(int, int) -> int concatenateThreeArgs(java.lang.String, java.lang.String, java.lang.String) -> class java.lang.String createTestSlimWithString(java.lang.String) -> class fitnesse.slim.test.TestSlim die() -> void echoBoolean(boolean) -> boolean echoDouble(double) -> double echoInt(int) -> int echoList(java.util.List) -> interface java.util.List echoString(java.lang.String) -> class java.lang.String equals(java.lang.Object) -> boolean>> at fitnesse.slim.MethodExecutionResult$NoMethod.returnValue(MethodExecutionResult.java:34) [file:/home/six42/git/fitnesse/bin/main/] at fitnesse.slim.StatementExecutor.call(StatementExecutor.java:112) [file:/home/six42/git/fitnesse/bin/main/] at fitnesse.slim.instructions.CallAndOptionalAssignInstruction.executeInternal(CallAndOptionalAssignInstruction.java:30) [file:/home/six42/git/fitnesse/bin/main/] at fitnesse.slim.SlimService.access$0(SlimService.java:167) [file:/home/six42/git/fitnesse/bin/main/] true
NO_INSTANCE message:<<NO_INSTANCE TestSlim ignores everything after second space>> at fitnesse.slim.converters.IntConverter.getObject(IntConverter.java:14) [file:/home/six42/git/fitnesse/bin/main/] at java.lang.Integer.valueOf(Integer.java:766) [rt.jar:1.8.0_222] true
NO_METHOD_IN_CLASS but no message fitnesse.slim.SlimError: NO_METHOD_IN_CLASS No Method nonExistingMethod[1] in class fitnesse.slim.test.TestSlim. Available methods: addTo(int, int) -> int at fitnesse.slim.MethodExecutionResult$NoMethod.returnValue(MethodExecutionResult.java:34) [file:/home/six42/git/fitnesse/bin/main/] at fitnesse.slim.StatementExecutor.call(StatementExecutor.java:112) [file:/home/six42/git/fitnesse/bin/main/] at fitnesse.slim.instructions.CallAndOptionalAssignInstruction.executeInternal(CallAndOptionalAssignInstruction.java:30) [file:/home/six42/git/fitnesse/bin/main/] at fitnesse.slim.SlimService.access$0(SlimService.java:167) [file:/home/six42/git/fitnesse/bin/main/]
NO_INSTANCE but no message NO_INSTANCE TestSlim at fitnesse.slim.converters.IntConverter.getObject(IntConverter.java:14) [file:/home/six42/git/fitnesse/bin/main/] at java.lang.Integer.valueOf(Integer.java:766) [rt.jar:1.8.0_222]

Included page: .FitNesse.SuiteAcceptanceTests.TearDown (edit)



tear down