Changes for version 0.34 - 2026-05-03
- Bug fixes
- Emitter::Perl: _emit_void_test() generated ok(!defined $result || 1, ...) which is a tautology and always passes regardless of return value. Fixed to ok(!defined $result, '$method returns nothing (void)').
- Generator: schema files named after Perl builtins (e.g. abs.yml) caused generated tests to emit "use abs" which fails to compile. Added _is_perl_builtin() guard to prevent builtin names being used as module names in use_ok() calls.
- bin/test-generator-index: mutant stub generator incorrectly called new_ok() for class methods such as App::Test::Generator::generate(). Added _is_class_method() helper to detect $class vs $self and emit the correct calling convention in generated stubs.
- bin/test-generator-index: CPAN Testers failure table showed all expected NA rows for Perl < 5.036 as noise. Rows below the detected Perl version cliff are now omitted with a count notice, leaving only unexpected failures visible.
- CoverageGuidedFuzzer: _load_json_module() used require $mod where $mod contained '::' which Perl does not convert to path separators for variable require. Fixed with s{::}{/}g conversion before require.
- Enhancements
- Comprehensive test suite added across all modules:
- Function tests (white-box) for all private helpers
- Black-box unit tests for every public method against POD API spec
- Integration tests covering 10 end-to-end pipelines
- Edge case / destructive / boundary-condition tests
- Extended tests targeting surviving mutants and coverage gaps
- mutate.yml and dashboard.yml are now portable to any CPAN module. Copying both files to another module's .github/workflows/ directory will produce a working mutation test run and coverage dashboard without modification. ATG-specific behaviour is gated on github.repository = nigelhorne/App-Test-Generator.
- dashboard.yml: added missing local/bin PATH setup so installed ATG scripts are found correctly on non-ATG modules.
- mutate.yml: Sample/Module.pm excluded from mutation scoring to remove 30 artificial survivors from the overall score.
- Emitter::Perl mutation score improved from 37.5% to 100% through targeted direct assertions on all _emit_*() helper return values.
- t/test-generator-index.t: 33 new tests for detect_perl_version_cliff(), parse_version(), extract_perl_versions(), make_key(), confidence_score(), and perldelta_url().
- Comprehensive test suite added across all modules:
Documentation
Demonstrate the schema extractor
Extract test schemas from Perl modules
Extract schemas and optionally emit Perl tests
Generate fuzzing + corpus-based test harnesses from test schemas
Test coverage dashboard generator
Run mutation testing against a Perl test suite
Modules
Fuzz Testing, Mutation Testing, LCSAJ Metrics and Test Dashboard for Perl modules
AFL-style coverage-guided fuzzing for App::Test::Generator
Static LCSAJ extraction for Perl
Merge LCSAJ path data with runtime hits
Negate boolean return expressions to expose missing assertion coverage
Replace return expressions with undef to expose missing undef-return checks in the test suite
Generate and apply mutation tests
Example module for schema extraction testing
Extract test schemas from Perl modules
Template for the test files generated by App::Test::Generator
Debugger backend for LCSAJ coverage
Provides
in lib/App/Test/Generator/Analyzer/Complexity.pm
in lib/App/Test/Generator/Analyzer/Return.pm
in lib/App/Test/Generator/Analyzer/ReturnMeta.pm
in lib/App/Test/Generator/Analyzer/SideEffect.pm
in lib/App/Test/Generator/Emitter/Perl.pm
in lib/App/Test/Generator/Model/Method.pm
in lib/App/Test/Generator/Mutant.pm
in lib/App/Test/Generator/Mutation/Base.pm
in lib/App/Test/Generator/Mutation/ConditionalInversion.pm
in lib/App/Test/Generator/Mutation/NumericBoundary.pm
in lib/App/Test/Generator/Planner.pm
in lib/App/Test/Generator/Planner/Fixture.pm
in lib/App/Test/Generator/Planner/Grouping.pm
in lib/App/Test/Generator/Planner/Isolation.pm
in lib/App/Test/Generator/Planner/Mock.pm
in lib/App/Test/Generator/TestStrategy.pm