pmpx-testkit
Test helpers for plugin authors
A plugin's PackageManager::command is a pure function, so it can be tested without a project, a host or a process. pmpx-testkit is the three ways of doing that: context() builds a Context by hand, Fixture writes a real directory and runs the real detection over it, and capture() installs a fake host so a test can assert the lines a plugin wrote.
API
context() -> pmpx_plugin::ContextBuilder— the builder a plugin's own tests use.Fixture::new()— one project on a real temporary directory.Fixture::file(name, contents),Fixture::plugin(name, family, strong, weak),Fixture::pin(family, plugin),Fixture::prefer(families),Fixture::declares(names)— describe that project.Fixture::path(),Fixture::context() -> Context<'static>— where it is, and what the host would hand over.capture() -> Captured— installs the fake host, dropping whatever was recorded before.Captured::take(),Captured::take_levels()— drain the recorded lines.Captured::level(u32),Captured::trace(),Captured::normal(),Captured::info(),Captured::quiet()— pick the level to capture.
Notes
- It is meant for plugin authors'
[dev-dependencies]; nothing in this workspace depends on it. - The fixture runs the real
pmpx_detect::select, so a test fails when a plugin's declared markers stop matching. Fixture::declares(...)is the allowlist: a file the test wrote but did not declare never reaches the context.- Panicking is part of the interface — there is no error type, and a fixture that detects nothing panics with the listing.
Tests: unit tests in src/fixture.rs and src/host.rs; there is no tests/ directory.
License: same as the workspace (see the repository root).