An ImplementationStatusModifier allows a user to specify an example's
ImplementationStatus at runtime. The status modifier can be injected via the concordion extensions.
If provided, it will override a declared implementation status via c:status
attribute. The user can
create the conditional logic based on the example element (usually a <div>).
An ImplementationStatusModifier is installed that sets the status of an example to IGNORED if the example name ends in Ignored, a @BeforeExample annotated fixture method which saves the example names in a list, and a @AfterExample annotated fixture method which saves the example names in a different list.
Running a specification containing:
<div concordion:example="aPassingExample"> <span concordion:set="#char">a</span> == <span concordion:assert-equals="#char">a</span> </div> <div concordion:example="aFailingExample"> <span concordion:set="#char">a</span> == <span concordion:assert-equals="#char">b</span> </div> <div concordion:example="expectedToFailExample" concordion:status="ExpectedToFail"> <span concordion:set="#char">c</span> == <span concordion:assert-equals="#char">d</span> </div> <div concordion:example="expectedToFailExampleButIgnored" concordion:status="ExpectedToFail"> <span concordion:set="#char">a</span> == <span concordion:assert-equals="#char">b</span> </div>
Would result in
Example names which executed @BeforeExample method: [[Outer], aPassingExample, aFailingExample, expectedToFailExample]
Example names which executed @AfterExample method: [aPassingExample, aFailingExample, expectedToFailExample] (Note that although the @AfterExample annotated method was also called for [Outer] example this concordion assertion was evaluated prior to that call that's why it is not included in the list)