Concordion > Extension >


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 concordion:example="aFailingExample">
    <span concordion:set="#char">a</span> == <span concordion:assert-equals="#char">b</span>
<div concordion:example="expectedToFailExample" concordion:status="ExpectedToFail">
    <span concordion:set="#char">c</span> == <span concordion:assert-equals="#char">d</span>
<div concordion:example="expectedToFailExampleButIgnored" concordion:status="ExpectedToFail">
    <span concordion:set="#char">a</span> == <span concordion:assert-equals="#char">b</span>

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)