App-Test-Generator

 view release on metacpan or  search on metacpan

Changes  view on Meta::CPAN

Revision history for App-Test-Generator

0.33	Tue Apr 21 16:09:24 EDT 2026

    - Fixed NumericBoundary mutator incorrectly identifying the '<' in
      open() mode strings and readline operators (<$fh>) as numeric
      comparison operators, producing invalid mutants that caused
      compilation errors in the mutated code. Two guards added to
      mutate(): skip any operator whose next sibling is a PPI symbol
      token (catching <$fh>), and skip operators not parented by a
      PPI::Statement, PPI::Structure::Condition, or
      PPI::Structure::Block (catching quoted mode strings in open()
      argument lists). The same readline guard is also applied inside
      the transform closure to prevent mutation at apply time if PPI
      tokenisation differs between the analysis and mutation documents.
    - Rationalised program names so that they can be used in other modules
      without the need to have copies
    - Added detect_prereq_version_cliffs() to cross-reference declared
      prerequisites from the MetaCPAN API against installed module
      versions reported by CPAN Testers. Flags cases where failing
      reports have an installed version below the declared minimum,
      surfacing dependency version mismatches (e.g. Test::Mockingbird
      0.02 installed where >= 0.03 is required) that the existing
      detect_version_cliffs() misses because it only examines prereq
      metadata within the reports themselves. Falls back to scanning
      raw CPAN Testers report output for version complaint patterns if
      the MetaCPAN API is unavailable. Results are merged into the
      existing Dependency Version Cliffs section alongside findings
      from detect_version_cliffs(). Added report HTML caching in
      fetch_report_html() to avoid fetching the same report twice when
      both aggregate_dependency_stats() and detect_prereq_version_cliffs()
      process the same GUIDs.
    - bin/fuzz-harness-generator: fixed shell injection risk in final
      system() call, replaced string eval with block eval for JSON
      module loading, added explicit use File::Spec, normalised if()
      spacing throughout, added structured comment blocks for all four
      helper functions, added YAML input validation before calling
      generate()
    - bin/generate-test-dashboard: removed duplicate cover -report json
      step that was running twice per dashboard build
    - bin/test-generator-index: added structured comment blocks for six
      private analysis functions; fixed detect_universal_failure() to
      partition genuine FAILs from NAs before counting, returning undef
      when all reports are NA so detect_perl_version_cliff() can
      diagnose correctly
    - SchemaExtractor.pm: added structured comment blocks for all private
      methods (Pass 3)
    - App::Test::Generator: added relationships_code emission so schemas
      containing relationship metadata produced by SchemaExtractor are
      serialised into the generated test file
    - Template test.tt: added semantic type test cases for filepath
      (including Windows paths, reserved device names, UNC paths),
      email, date_string, and iso8601_string; added relationship test
      loop covering all six relationship types (mutually_exclusive,
      required_group, conditional_requirement, dependency,
      value_constraint, value_conditional); added float edge cases for
      Inf, -Inf, and NaN with correct status handling based on whether
      max is defined

0.32	Sun Apr 12 08:16:47 EDT 2026

    - Added detect_scattered_failures() root cause detector. Surfaces a
      weak-confidence advisory when failures and passes coexist across
      2 or more common Perl series with no detectable version cliff or
      OS pattern, suggesting flaky tests, optional dependency
      differences, or CGI environment assumptions rather than a
      compatibility issue. Complements detect_universal_failure() which
      handles the opposite case of near-total failure. Confidence is
      intentionally set to 0.40 (Weak) since this is a catch-all
      signal rather than a precise diagnosis, ensuring it appears below
      stronger signals in the root causes table when multiple detectors
      fire simultaneously.
    - Added detect_universal_failure() root cause detector. Surfaces a
      high-confidence warning when failures occur across 3 or more
      distinct Perl versions and 2 or more OS types with fewer than
      10% passing reports, indicating a likely broken release rather
      than a version- or platform-specific compatibility issue. Likely
      causes listed in evidence: missing file in tarball, broken
      Makefile.PL, or undeclared dependency. Integrated into
      detect_root_causes() where it is evaluated first and sorted by
      confidence alongside the existing OS, locale, and Perl version
      cliff detectors.
    - Fixed blib/ paths appearing in coverage table instead of lib/
      paths. Devel::Cover instruments blib/ during testing; paths are
      now normalised to lib/ for display, with deduplication against
      any native lib/ entry.
    - Fixed structural coverage percentages in Executive Summary and
      Structural Coverage sections showing ~24% instead of ~93%.
      _coverage_totals now aggregates from individual own-project files
      rather than Devel::Cover's pre-aggregated Total key which
      includes all instrumented CPAN dependencies.
    - Fixed cyclomatic complexity badge colour and tooltip inverted.
      High complexity now correctly shows red/Needs improvement;
      low complexity shows green/Good. Second condition also fixed
      to use $complexity rather than $score.

0.31	Fri Apr 10 08:07:40 EDT 2026

    - Added TER3 (LCSAJ path coverage) column to mutation files table in
      the test dashboard index, showing percentage and raw fraction
      (e.g. "71.8% (352/491)")
    - Added TER1, TER2 and TER3 metrics to per-file mutation report pages,
      replacing the plain "Statement" and "Branch" labels with their
      formal Test Effectiveness Ratio names
    - Renamed the LCSAJ column header in the mutation files table to TER3
    - With min set to zero on an integer, sometimes negative or floats could be created - added abs() and int() calls as needed
    - Added --generate_mutant_tests=DIR option to generate_index.pl to
      produce a timestamped test stub file (t/mutant_YYYYMMDD_HHMMSS.t)
      for surviving mutants. High/Medium difficulty survivors get TODO
      test stubs; Low difficulty survivors get comment-only hints.
      Multiple mutations on the same source line are deduplicated into
      one stub listing all variants — one good test kills them all.
      Boundary value suggestions are generated for numeric mutations,
      clamped and deduplicated for non-negative contexts such as
      scalar() and length(). Environment variable hints are added where
      the source line references $ENV{...}. The enclosing subroutine
      name is shown in each stub for navigation context. File is skipped



( run in 1.113 second using v1.01-cache-2.11-cpan-39bf76dae61 )