Skip to content

Implement unit tests for utilities, events, and TAP bridge (19 files) #328

@Koan-Bot

Description

@Koan-Bot

Context

Across t/unit/Test2/Harness/, t/unit/Test2/Tools/, t/unit/Test2/EventFacet/, and t/unit/TAP/ there are 19 test stubs with skip_all "write me" placeholders. These cover utility functions, event handling, log processing, file I/O abstractions, and the TAP compatibility bridge.

Modules to test

Utilities (8 files):

  • Util.tTest2::Harness::Util (core utility functions)
  • Util/Deprecated.t, Util/File.t, Util/File/JSON.t, Util/File/JSONL.t, Util/File/Stream.t, Util/File/Value.t, Util/HashBase.t

Log processing (4 files):

  • Log.tTest2::Harness::Log
  • Log/CoverageAggregator.t, Log/CoverageAggregator/ByRun.t, Log/CoverageAggregator/ByTest.t
  • Log/TimeTracker.tTest2::Harness::Log::TimeTracker
  • Util/LogFile.tTest2::Harness::Util::LogFile

Events (1 file):

  • Event.tTest2::Harness::Event
  • Test2/EventFacet/Binary.tTest2::EventFacet::Binary

TAP bridge (2 files):

  • TAP/Harness/Yath.tTAP::Harness::Yath
  • TAP/Harness/Yath/Aggregator.tTAP::Harness::Yath::Aggregator

Test tools (1 file):

  • Test2/Tools/HarnessTester.tTest2::Tools::HarnessTester

Suggested test scenarios

Utility functions (Test2::Harness::Util)

  • clean_path() — path normalization, absolute path handling
  • find_in_updir() — upward directory search
  • is_same_file() — inode comparison
  • mod2file() / file2mod() — module ↔ file path conversion
  • fqmod() — fully-qualified module name resolution
  • parse_exit() — exit code interpretation (signal, core dump, status)
  • open_file() / read_file() / write_file() / write_file_atomic() — file I/O
  • lock_file() / unlock_file() — file locking
  • sanitize_filename() — ANSI stripping, control char escaping

File abstractions

  • File::JSON: JSON file read/write with atomic operations
  • File::JSONL: line-delimited JSON (log files), append, iterate
  • File::Stream: streaming file reader
  • File::Value: single-value file (PID files, status files)

Log processing

  • Log: JSONL log format documentation validation
  • CoverageAggregator: coverage data aggregation (ByRun vs ByTest strategies)
  • TimeTracker: test timing data collection and reporting
  • LogFile: log file reading, event iteration

Events

  • Event: as_json() serialization, trace() accessor, facet_data structure
  • EventFacet::Binary: binary data facet handling

TAP bridge

  • TAP::Harness::Yath: TAP::Harness compatibility wrapper — runtests() method
  • Aggregator: TAP result aggregation

Test tools

  • HarnessTester: test helpers for harness testing — event generation, assertion utilities

Notes

Many of these are excellent good first issue candidates, especially the utility functions and file abstractions — self-contained, well-defined input/output, no complex setup needed.

Test2::Harness::Util already has known edge cases documented:

  • @INC can contain blessed objects and code refs (must filter for JSON encoding)
  • sanitize_filename() must handle ANSI CSI/OSC sequences

Metadata

Metadata

Assignees

No one assigned

    Labels

    2.0TestUnit tests cars

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions