Skip to content

Scenario execution

Understand how your scenario runs

As a test author, you need to know which actions execute and where failures are reported before choosing a scenario interface.

flowchart TD
  Constructors -->|collects actions| BDDTest
  FreeMonad -->|interprets and records teardown| BDDResult
  BDDTest -->|constructor provider| Tasty
  BDDResult -->|free provider| Tasty
  Decorators -->|wrap each leaf, preserving dependencies| TastyTree
  TastyTree -->|schedules| Tasty

Test.BDD.Language constrains preparation and testing phases with types. Its interpreter collects actions without executing them. Test.BDD.LanguageFree provides the do interface and returns a result with recorded teardown. Test.Tasty.Bdd adapts both forms to Tasty.

Recursive beforeEach and afterEach decorators descend through groups, resources, options and Tasty After dependency wrappers. They preserve the dependency wrapper while decorating its children.

Design choices

Choice Alternative Reason
Keep both public interfaces Replace one with the other Existing users depend on their distinct API and teardown behavior.
Preserve released dependency traversal Start from GitHub's older code alone GitLab and Hackage already include the compatibility fix.
Compile the documentation example Show an unchecked snippet Readers receive an example exercised by CI.
Keep runtime semantics stable Redesign resource safety in this update Tooling modernization is not a resource-management API change.

captureStdout redirects process-wide standard output and suppresses action exceptions. It is intended for controlled test execution; concurrent capture is not isolated. The test harness runs serially by default.