Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,20 @@ This format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/)

---

# [Unreleased]

## ⚠️ Changed

* Project configuration is now resolved with Ceedling’s own `ceedling dumpconfig` instead of the extension parsing and merging `project.yml` (and any mixin) itself. This reflects Ceedling’s actual merge — plugin defaults included — rather than a parallel one the extension maintained on its own.

## 🌟 Added

* The `report_tests_log_factory` plugin’s `cppunit` report — the XML report this extension depends on — is now enabled automatically via a bundled [mixin](README.md#mixins). Manually enabling it in `project.yml` is no longer required.
* New `ceedlingExplorer.mixins` and `ceedlingExplorer.projects[].mixins` settings expose Ceedling’s own mixin mechanism, so you can layer toolchain targets, CI overrides, or other configuration without hand-editing `project.yml`. See [Mixins](README.md#mixins).
* A one-time warning notification when `project.yml` or a configured mixin sets a non-default CppUnit XML report filename, naming the project and the resolved filename.

---

# [2.0.1] — 2026-08-31

## ⚠️ Changed
Expand Down
19 changes: 16 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -53,11 +53,12 @@ Ceedling 1.0.0 also requires test-file preprocessing disabled (`:project` ↳ `:
* Open the workspace or folder containing your Ceedling project.
* Configure your Ceedling project configuration filepath in VS Code’s settings if required [see below](#options).
* Configure the shell path where Ceedling is installed in VS Code’s settings if required (Windows) [see below](#options).
* [Enable and configure][cppunit-plugin] the `report_tests_log_factory` Ceedling plugin with the `cppunit` option in your Ceedling project configuration. This generates an XML test report on which this extension depends.
* Open the Testing view.
* Run your tests using the run/debug icons in VS Code’s _Testing_ view or in your test file’s gutter.

[cppunit-plugin]: https://throwtheswitch.github.io/Ceedling/1.1.0/plugins/report-tests-log-factory/#configuration
The extension resolves your project’s configuration with [`ceedling dumpconfig`][dumpconfig-docs] and always applies its own [mixin](#mixins) enabling the `report_tests_log_factory` plugin’s `cppunit` report — the XML report this extension depends on. No manual plugin setup is required.

[dumpconfig-docs]: https://throwtheswitch.github.io/Ceedling/1.1.0/getting-started/command-line/#ceedling-dumpconfig-filepath-sections

# Running and debugging tests

Expand All @@ -75,7 +76,8 @@ This table of options should be read as `ceedlingExplorer.<property>`.

| `ceedlingExplorer` Property | Description |
|---|---|
| `.projects` | An array of objects with the path to the Ceedling project (or yml-file) to use (relative to the workspace folder). See below for its `path`, `debugLaunchConfig`, and `name` properties. |
| `.projects` | An array of objects with the path to the Ceedling project (or yml-file) to use (relative to the workspace folder). See below for its `path`, `debugLaunchConfig`, `name`, and `mixins` properties. |
| `.mixins` | An array of [Ceedling mixins](#mixins) — names, built-in toolchain targets (e.g. `gcc`, `clang`), or file paths — applied to every project that doesn’t define its own `mixins` (see `.projects` below), lowest to highest priority. By default it is `[]`. |
| `.shellPath` | The path to the shell where Ceedling is installed. By default (or if this option is set to `null`), it uses the OS default shell. |
| `.prettyTestLabel` | Shortens the test label in the _Testing_ explorer by dropping its leading prefix (e.g. inactive `test_BlinkTaskShouldToggleLed` vs. active `BlinkTaskShouldToggleLed`).<br><br>Inactive:<br><img src="img/prettyTestLabelInactive.png" alt="prettyTestLabelInactive" width="420"><br><br> Active:<br><img src="img/prettyTestLabelActive.png" alt="prettyTestLabelActive" width="420">|
| `.prettyTestFileLabel` | Shortens the test file label in the _Testing_ explorer by dropping its path, leading prefix, and file type (e.g. inactive `test/LEDs/test_BlinkTask.c` vs. active `BlinkTask`).<br><br>Inactive:<br><img src="img/prettyTestFileLabelInactive.png" alt="prettyTestFileLabelInactive" width="320"><br><br> Active:<br><img src="img/prettyTestFileLabelActive.png" alt="prettyTestFileLabelActive" width="320"> |
Expand All @@ -90,6 +92,17 @@ This table of options should be read as `ceedlingExplorer.<property>`.
- `path`: can point either to a directory containing a "project.yml" file or directly to another .yml file (with the respective project.yml in the same directory). This path should be relative to the workspace root directory.
- `debugLaunchConfig`: must be the *name* property of the launch config (launch.json) that is used for this project. The `${command:ceedlingExplorer.debugTestExecutable}` must still be used.
- `name` (optional): used as the name for the folder containing the tests in the test explorer.
- `mixins` (optional): this project’s own [mixins](#mixins), lowest to highest priority. When omitted entirely, `ceedlingExplorer.mixins` is used instead; set to `[]` explicitly to opt this project out of that workspace-wide list rather than falling back to it.

## Mixins

A [Ceedling mixin][mixins-docs] is a YAML fragment merged into a project’s configuration at build time — useful for toolchain targets, CI-specific overrides, or any configuration you don’t want duplicated into every `project.yml`. Configure them with `ceedlingExplorer.mixins` and `ceedlingExplorer.projects[].mixins` (see [Options](#options)): later entries win on conflicts, matching Ceedling’s own `--mixin` precedence.

The extension always applies one more mixin after any you configure: it enables the `report_tests_log_factory` plugin’s `cppunit` report, which the Testing view depends on to read results. This mixin is not configurable and always has the highest priority, so nothing you set here can disable test reporting — even if you also enable `report_tests_log_factory` yourself, applying it twice is harmless.

If `project.yml` or one of your own mixins sets `:report_tests_log_factory` ↳ `:cppunit` ↳ `:filename` to something other than Ceedling’s default, the extension shows a one-time warning naming the project and the resolved filename — it still uses that filename correctly, the warning only calls out that the report lives somewhere non-default in case that wasn’t intentional.

[mixins-docs]: https://throwtheswitch.github.io/Ceedling/1.1.0/configuration/mixins/

## Problem matching

Expand Down
16 changes: 16 additions & 0 deletions assets/mixins/report-tests-log-factory.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# Bundled with the extension and always applied as the highest-priority --mixin (see
# buildProjectArgs in src/ceedlingMixinArgs.ts). Guarantees the CppUnit XML report this extension
# parses exists, without requiring a user to hand-edit their own project.yml.
#
# Enabling the plugin alone is not enough - report_tests_log_factory can emit several report
# formats, and :reports: must explicitly select cppunit. See
# https://throwtheswitch.github.io/Ceedling/1.1.0/plugins/report-tests-log-factory/#cppunit-xml-format
#
# :cppunit: :filename: is deliberately left unset. Mixin merge only touches keys a mixin actually
# sets, so a user's own :cppunit: :filename: override (if any) survives untouched.
:plugins:
:enabled:
- report_tests_log_factory
:report_tests_log_factory:
:reports:
- cppunit
2 changes: 2 additions & 0 deletions docs/Development.md
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,8 @@ All steps run against [`tests/manual/`](../tests/manual/), opened as its own fol
- [ ] **Crash handling.** `test_should_crash` in `test_calculator_crash.c` shows as a failed test, at the exact crashing line, on both Ceedling 1.0.0 and 1.1.0.
- [ ] **Crash log link.** With Ceedling 1.1.0 running on a platform that supports `gdb`, set `:use_backtrace:` ⇒ `:gdb` in `project.yml` and re-run `test_should_crash`. Its failure message ends with a clickable link to the gdb log file. Revert the setting after.
- [ ] **Diagnostics don’t go stale.** Introduce a syntax error, run just `test_add_should_ReturnSum` alone from its gutter icon. Confirm the error appears in the Problems panel. Fix the error, then run the whole file (not that same test again). Confirm the Problems panel entry is gone.
- [ ] **No manual plugin setup.** `tests/manual/project.yml` deliberately does not enable `report_tests_log_factory` itself. Discovery and results still work — the bundled mixin enables it. Confirms this on every run of this checklist, not just once.
- [ ] **Configured mixin.** Add `"ceedlingExplorer.mixins": ["gcc"]` (or another [built-in toolchain target](https://throwtheswitch.github.io/Ceedling/1.1.0/configuration/mixins/#built-in-toolchain-mixins)) to `tests/manual/.vscode/settings.json`. Refresh, run all. The run still succeeds; the Ceedling Explorer log (Trace level) shows the extra `--mixin` flag in the invocation, before the extension’s own bundled mixin. Revert the setting after.

## 5. The Sidecar

Expand Down
14 changes: 14 additions & 0 deletions docs/ReleaseNotes.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,20 @@ Complemented by three other documents: [../CHANGELOG.md](../CHANGELOG.md), [Know

---

# Unreleased

## 👀 Highlights

Project configuration is now resolved with Ceedling’s own `ceedling dumpconfig` command instead of the extension parsing and merging `project.yml` by hand — the same merge a real build sees, plugin defaults included.

The `report_tests_log_factory` plugin’s `cppunit` report, which the Testing view depends on to read results, is now enabled automatically via a mixin bundled with the extension. Manually editing `project.yml` to enable it is no longer necessary. New `ceedlingExplorer.mixins` and `ceedlingExplorer.projects[].mixins` settings expose Ceedling’s own mixin mechanism directly, for anyone who wants to layer toolchain targets, CI overrides, or other configuration. See [Mixins](../README.md#mixins).

## 🚨 Important Changes

None — existing `project.yml` files that already enable `report_tests_log_factory` themselves continue to work unchanged; the extension’s mixin is additive.

---

# 2.0.0 — 2026-08-31

## 👀 Highlights
Expand Down
10 changes: 0 additions & 10 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

17 changes: 16 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,6 @@
"@types/semver": "^7.5.4",
"@types/xml2js": "^0.4.3",
"async-mutex": "^0.1.3",
"deepmerge": "^4.3.1",
"js-yaml": "^3.13.1",
"semver": "^7.5.4",
"strip-ansi": "^6.0.0",
Expand Down Expand Up @@ -110,6 +109,13 @@
"name": {
"description": "Name for the project tests folder. If not defined, the yml or folder name is used",
"type": "string"
},
"mixins": {
"markdownDescription": "Ceedling mixins to merge into this project's configuration (mixin names resolved via `:mixins:`/`:load_paths:`, built-in toolchain targets like `gcc`/`clang`, or file paths), lowest to highest priority. When omitted entirely, `ceedlingExplorer.mixins` is used instead for this project; set to `[]` explicitly to opt this project out of that workspace-wide list.",
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
Expand All @@ -126,6 +132,15 @@
"scope": "resource"
}
},
"ceedlingExplorer.mixins": {
"markdownDescription": "Default Ceedling mixins applied to every configured project that does not define its own `mixins` array (see `ceedlingExplorer.projects[].mixins`), lowest to highest priority. The extension's own mixin, which enables the CppUnit XML report this extension depends on, is always applied after these and cannot be overridden.",
"type": "array",
"items": {
"type": "string"
},
"default": [],
"scope": "resource"
},
"ceedlingExplorer.shellPath": {
"description": "Path to the shell where Ceedling is installed",
"type": "string",
Expand Down
Loading