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 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 CustomComparators=glob:fitnesse.testsystems.slim.GlobComparator

Library
page driver
echo fixture

import
fitnesse.slim.test

Included page: .FitNesse.UserGuide.WritingAcceptanceTests.SliM.DefineAlias (edit)

The "Define Alias" table is designed to help you to segregate requirements from the implementation.

Normally the table name must be a graceful name of the class name used in your implementation.

This might not be convenient in some situations.
  • your implementation is a generic framework, in this case it is unlikely that classnames match the business names
  • your implementation needs technical configuration parameters which are not important to the business


Below is a dynamic decision table without any alias. This will be used in the following examples with alias definitions

ddt: add up change
# description 1c 5c 10c 25c 50c $1 total cents? $ total?
some simple addition 2 2 4 0 0 0 52 0.52


Use Case 1

The business expects a different name "add change" than your class name "add up change"

Define alias
add change add up change

ddt: add change
# description 1c 5c 10c 25c 50c $1 total cents? $ total?
some simple addition 2 2 4 0 0 1 152 1.52

Use Case 2

The business expects a different name "add up" than your class name "add up change"
and in addition the test case is defined as decision table but you implemented it as dynamic decision table.
You can overwrite the table type and the name.

Define alias
add up ddt: add up change

dt: add up
# description 1c 5c 10c 25c 50c $1 total cents? $ total?
some simple addition 2 2 4 0 1 0 102 1.02

Use Case 3

The names are matching but you need to overwrite the table type.
Note that the DefineTableType table will not overwrite type definitions given in the test.

Define alias
add up change ddt:

dt: add up change
# description 1c 5c 10c 25c 50c $1 total cents? $ total?
some simple addition 2 2 4 0 0 0 52 0.52


Use Case 4

The requirements have been written beforehand with a business name.
Your implementation requires that you prepare the test fixture in a script.

script add up change
$myfixture= get fixture

Define alias
add money $myfixture

ddt: add money
# description 1c 5c 10c 25c 50c $1 total cents? $ total?
some simple addition 2 2 4 4 0 1 252 2.52

It doesn't matters if you define the alias before or after you create the fixture.
Again you can add a table type definition if required

Define alias
add more money ddt: $anotherFixture

script add up change
$anotherFixture= get fixture

add more money
# description 1c 5c 10c 25c 50c $1 total cents? $ total?
some simple addition 2 2 4 4 0 1 252 2.52


Another example with a constructor parameter

script test query 2
show query
$tq= get fixture

Define alias
my query query: $tq

my query
n 2n
1 2
2 4

script test query 3
show query
$tq= get fixture

Define alias
my query subset query: $tq

my query
n 2n
2 4
3 6

Use Case 5

If you can't use an Import[?] statement or you have import conflicts you can't resolve.
The alias can help you to get around these.

Define alias
what is in my pocket ddt: fitnesse.slim.test.AddUpChange


what is in my pocket
# description 1c 5c 10c 25c 50c $1 total cents? $ total?
some simple addition 2 2 4 4 0 1 252 2.52

The alias fixture allows QA people to implement requirements by reusing existing framework functions and without writing new code.
Still your test pages are easy to read, especially for project managers, BA's and Product owners who might not understand how Fitnesse works.

Hint: Try putting the "Define Alias" fixtures in the same place as your "Import" fixtures. The setup pages are a good place for these!

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



tear down