All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Unreleased
0.2.1 - 2026-04-23
Fixed
- ExDoc warnings for missing
LICENSEandCLAUDE.mdreferences in the README.LICENSEandCHANGELOG.mdare now indocs: [extras: ...]so they render on hexdocs; the README links toCLAUDE.mdon GitHub (project-internal convention, not useful to package consumers). - ExDoc now configures
:source_urland:source_ref, so code references in the generated docs link back to the tagged version on GitHub.
0.2.0 - 2026-04-23
Added
mix cucumber.initas a dedicated task (extracted frommix cucumber --init).mix cucumber.gen.feature NAMEgenerates an empty feature file.mix cucumber.gen.steps NAMEgenerates a step definition module..formatter.exsexportslocals_without_parensfor all DSL and hook macros. Consumers addimport_deps: [:cucumberex]to their.formatter.exsto avoidmix formatmangling step definitions.
Changed
- Breaking:
mix cucumber --initis removed; usemix cucumber.init. This is the only breaking change versus 0.1.0.
Fixed
- README hook examples and phase table now use the actual macro names
(
before_,after_,before_step_,after_step_,before_all_,after_all_,around_).
0.1.0 - 2026-04-23
Initial release.
Added
- DSL (
Cucumberex.DSL):given_/2,when_/2,then_/2,step/2macros for registering step definitions against Cucumber Expressions or regular expressions.pending/0marks a step pending at runtime.world_module/1andparameter_type/3for scenario-scoped composition. - Hooks (
Cucumberex.Hooks.DSL):before_/1,2,after_/1,2,before_step/1,2,after_step/1,2,before_all/0,1,after_all/0,1, with optional tag expression filters. - Cucumber Expressions: built-in
{int},{float},{word},{string},{bigdecimal},{double},{byte},{short},{long}parameter types; custom types registered viaparameter_type/3. - Gherkin: full
Feature/Rule/Scenario/Background/Scenario Outline/Examplessupport viacucumber_gherkin, including data tables and doc strings. - Data tables (
Cucumberex.DataTable):raw/1,hashes/1,rows/1,rows_hash/1,symbolic_hashes/1,transpose/1,map_headers/2,map_column/3,diff!/2,verify_column!/2,verify_table_width!/2. - Doc strings (
Cucumberex.DocString): multi-line step arguments with optional media type; implementsString.Chars. - Tag expressions (
Cucumberex.Filter.TagExpression):and,or,not, and parenthesized grouping. AlsoCucumberex.Filter.NameFilter(substring / regex) andCucumberex.Filter.LineFilter(file:linetargeting). - Formatters (
Cucumberex.Formatter): GenServer-based behaviour with built-inPretty,Progress,JSON,HTML,JUnit, andRerun. - Event bus (
Cucumberex.Events.Bus): broadcastsTestRunStarted,TestRunFinished,FeatureLoaded,TestCaseStarted,TestCaseFinished,TestStepStarted,TestStepFinished,HookStarted,HookFinished,UndefinedStep,AmbiguousStep.drain/1provides a sync barrier for shutdown. - Runner (
Cucumberex.Runner): filter by tag / name / line, order (:defined,:random,:reverse), retry failed scenarios, fail-fast, WIP mode, dry run, strict mode for undefined / pending / both. - Configuration (
Cucumberex.Config.Loader): layered precedence — defaults,mix.exsconfig,cucumber.ymlprofile, CLI args (highest). - Mix task (
mix cucumber): CLI with short and long option forms;--initscaffolds a project;--version;--i18n-languages/--i18n-keywordssurface Gherkin's language support. - World (
Cucumberex.World): scenario-isolated state map with optional global factory viaCucumberex.World.Registry. - Snippets (
Cucumberex.StepDefinition.Snippet): undefined-step skeletons in Cucumber Expression or regexp form. - Tooling:
mix format,mix credo --strict(clean),mix dialyzer(clean), 78 doctests + 31 unit tests.