@@ -1 +1,2 @@
**/__pycache__
+.pytest_cache/
@@ -47,6 +47,21 @@ environment file or folder (generated via `bitbake -c rootfs_wicenv
- `src/bb/*`: various bitbake helpers that were brought along and used in other parts of wic.
- `src/oe/*`: various oe-core helpers that were brought along and used in other parts of wic.
+## Testing
+
+wic's test suite lives under `tests/` and runs from a plain checkout
+with nothing but `pytest`; it needs no BitBake and no OpenEmbedded
+build. Install the test extras and run it:
+
+```
+pip install -e ".[tests]"
+just tests
+```
+
+The test extras include [just](https://just.systems/), the command
+runner used to drive the suite; run `just` on its own to list the
+available recipes.
+
## Contributing
Please send all patches, comments, or questions to the yocto-patches
new file mode 100644
@@ -0,0 +1,10 @@
+# wic test-suite command runner. Run `just` to list recipes.
+
+# List the available recipes.
+default:
+ @just --list
+
+# Run the test suite. Extra args pass through to pytest
+# (e.g. `just tests -k <expr>` or `just tests tests/unit`).
+tests *args:
+ pytest {{args}}
@@ -21,6 +21,12 @@ classifiers = [
Homepage = "https://git.yoctoproject.org/wic"
Repository = "https://git.yoctoproject.org/wic"
+[project.optional-dependencies]
+tests = [
+ "pytest >= 9.1.1",
+ "rust-just >= 1.55.1",
+]
+
[project.scripts]
wic = "wic.cli:main"
@@ -36,3 +42,11 @@ build-backend = "hatchling.build"
[tool.hatch.version]
path = "src/wic/cli.py"
+
+[tool.pytest.ini_options]
+testpaths = ["tests"]
+# Keep a test's scratch directory only when that test fails, and keep
+# just the most recent failing session, so repeated runs do not pile up
+# leftover directories under the pytest base temp directory.
+tmp_path_retention_policy = "failed"
+tmp_path_retention_count = 1
new file mode 100644
wic has no test mechanism of its own; it relies on the oe-selftest from oe-core, which needs a full bitbake build to exercise even pure-Python logic. This starts a small standalone suite that runs from a plain checkout, with no BitBake and no OpenEmbedded build. This is the skeleton only and adds no tests. It gives pyproject.toml a "tests" extra (pytest and the just command runner) and a pytest config section, adds a justfile with default and tests recipes, creates tests/unit/ with a placeholder .gitkeep, ignores .pytest_cache/, and adds a README Testing section covering install and how to run the suite. AI-Generated: codex/claude-opus 4.8 (xhigh) Signed-off-by: Trevor Woerner <twoerner@gmail.com> --- changes in v4: - drop the tests/docs/ documentation tree; the suite now ships with a short README Testing section only. - add a justfile as the command runner and drop the run-tests.sh wrapper; just joins the tests extra. changes in v3: - no change in this revision. changes in v2: - v1 submitted the entire test suite as a single commit; v2 breaks the work into a reviewable series, and this patch is one step of it. --- .gitignore | 1 + README.md | 15 +++++++++++++++ justfile | 10 ++++++++++ pyproject.toml | 14 ++++++++++++++ tests/unit/.gitkeep | 0 5 files changed, 40 insertions(+) create mode 100644 justfile create mode 100644 tests/unit/.gitkeep