Read-only mirrors. Development, issues and pull requests are on GitHub.

summaryrefslogtreecommitdiffhomepage
path: root/docs/release-notes.md
blob: 4e2dea801d14d015762206fa98202a48a255bf5b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
<a id="top"></a>

# Release notes

These are the releases of Progmasoft Catch3. Its compatibility engine is
based on Catch2 3.16.1; Catch2's own history is in
[its release notes](https://github.com/catchorg/Catch2/blob/devel/docs/release-notes.md).

**Contents**<br>
[0.3.0.2](#0302)<br>
[0.3.0.1](#0301)<br>
[0.3.0](#030)<br>
[0.2.0](#020)<br>
[0.1.0](#010)<br>


## 0.3.0.2

Released 2026-11-01.

### Mocks

* `<Progmasoft/Catch3/Mock.hpp>` adds mocks of virtual interfaces and of free
  functions behind a seam: `CATCH3_MOCK_METHOD`, `CATCH3_EXPECT_CALL`,
  `Sequence` and `ScopedSeam`. Expectations check call counts, arguments and
  order, and failures go through the same assertions as the rest of a test.
  See [Mocking](progmasoft-mocking.md#top).


## 0.3.0.1

Released 2026-11-01.

Versions of Catch3 have four numbers from this release on.

### The Catch3 runner

* `--import=FILE` reads the reports of other test frameworks instead of running
  tests: JUnit, xUnit, TRX, TAP, CTRF, Catch3's own, and a small JSON Lines
  format for anything else. Their tests get the history, flaky detection,
  quarantine, analytics and reports of a run.


## 0.3.0

Released 2026-11-01.

Tags of Catch3 are `catch3-<version>` from this release on.

### Language and license

Catch3 is C++17, and its headers work in C++17 and later. Progmasoft-authored
files move to the Progmasoft Linking Exception, Version 2.0; Catch2-derived code
keeps the Boost Software License.

### The Catch3 runner

Catch3 keeps Catch2's API for writing tests and replaces its session, command
line and reporters with [a runner of its own](progmasoft-runner.md#top):

* Tests run in parallel worker processes; a crash, an exit or a hang ends one
  test, not the run.
* Failures are retried alone to tell deterministic, flaky and order-dependent
  failures apart; the test that leaves state behind is found by bisection.
* A history of verdicts and durations drives quarantine, learned time limits,
  predictive ordering, incremental runs, replay and analytics.
* Tests are selected by change, by past failure or by prediction, and sharded
  by a stable hash or by recorded duration.
* Tags declare serial and isolated tests, shared resources, dependencies,
  time limits and retries.
* Every failure gets a category, a signature, an analysis and a replay command.
* Reports are console, JUnit XML, JSON and a Chrome trace; `--list=json` is a
  versioned discovery format.
* Every test gets a temporary directory of its own.
* A project keeps its options in a
  [`catch3.json`](progmasoft-runner.md#project-configuration), found up to
  the root of the repository; the command line wins over it, and
  `--config=FILE` and `--no-config` choose another file or none.
* JSON is read and written with [yyjson](https://github.com/ibireme/yyjson)
  and JUnit XML is written with [pugixml](https://github.com/zeux/pugixml),
  both MIT and vendored in `third_party/`. They are compiled into Catch3's
  own translation units with internal linkage or a renamed namespace, so a
  project that links its own copy of either library is not affected. The
  amalgamated sources include them from a third file,
  `extras/catch_amalgamated_third_party.hpp`.

### Breaking changes

* Catch3 has its own build and header names, so that it is never mistaken
  for Catch2 and both can be used in one project:
  * CMake: `find_package(Catch3)` with `Catch3::Catch3` and
    `Catch3::Catch3WithMain`, options `CATCH3_*`, and the scripts
    `Catch3.cmake` (`catch3_discover_tests`) and `Catch3ShardTests.cmake`
    (`catch3_add_sharded_tests`). The `Progmasoft::Catch3` target is gone:
    its code is part of `Catch3::Catch3`.
  * Bazel `//:catch3` and `//:catch3_main`, Meson `catch3` and
    `catch3-with-main`, pkg-config `catch3.pc` and `catch3-with-main.pc`.
  * Headers moved from `catch2/` to `Progmasoft/Catch3/` with Progmasoft
    names: `<catch2/catch_test_macros.hpp>` is
    `<Progmasoft/Catch3/TestMacros.hpp>`, `<catch2/matchers/catch_matchers_string.hpp>`
    is `<Progmasoft/Catch3/Matchers/String.hpp>`, and so on. Test bodies do
    not change: the macros and the `Catch::` namespace keep their names.
  * `ParseAndAddCatchTests.cmake`, deprecated upstream, was removed.
* Catch2's command line, reporters, `CATCH_REGISTER_REPORTER` and listing
  were removed; see [the command line](command-line.md#top) and
  [reports](reporters.md#top). Listeners keep working.
* C++17 is the minimum, for the library and for the code that uses it.
* The results model in `Progmasoft/Catch3/Results.hpp` was rewritten around
  tests and attempts.
* Conan packaging was dropped.

### Fixes

* The property engine's example database can be written by several
  processes at once.


## 0.2.0

Released 2026-09-24.

* Snapshot comparison and update APIs.
* Framework-neutral test result summaries and deterministic JUnit XML.
* The Progmasoft additions are a static library in every supported build
  system.


## 0.1.0

Released 2026-09-24.

* The first release: a deterministic property-testing API next to the
  Catch2-compatible engine.
* Bazel module metadata, and CMake, Meson, Xmake and Premake builds.

---

[Home](Readme.md#top)