Skip to content
Merged
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
6 changes: 4 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -101,9 +101,10 @@ jobs:
# through its property tests, and JustDummies through its own contract suite (JustDummies.UnitTests), running on the
# netstandard2.0 asset .NET Framework consumers load — its net8-only tests are conditioned out (issue #215).
# JustDummies.Xunit is floored the same way: it ships netstandard2.0, so a .NET Framework consumer loads that
# asset, and its adapter suite must prove it works there and not only on net10.
# asset, and its adapter suite must prove it works there and not only on net10. JustDummies.PropertyTests
# joins them so the generator INVARIANTS, not just the example-based contract, hold on the floor.
# A per-project loop (not a solution-wide -f net472, which would force the TFM onto the net10-only projects
# and fail) keeps the net472 scope exactly these five.
# and fail) keeps the net472 scope exactly these six.
- name: Test the netstandard2.0 libraries on .NET Framework 4.7.2
shell: bash
run: |
Expand All @@ -113,6 +114,7 @@ jobs:
FirstClassErrors.PropertyTests \
FirstClassErrors.RequestBinder.PropertyTests \
JustDummies.UnitTests \
JustDummies.PropertyTests \
JustDummies.Xunit.UnitTests ; do
echo "::group::$proj (net472)"
dotnet test "$proj/$proj.csproj" -c Release -f net472 -p:EnableNet472Floor=true \
Expand Down
6 changes: 6 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,12 @@ Two roles are covered: **writing code** and **reviewing pull requests**.
- .NET Standard 2.0 library. Errors are first-class, documented, diagnosable concepts.
- Build: `dotnet build FirstClassErrors.sln`
- Test: `dotnet test FirstClassErrors.sln` (analyzer tests: `dotnet test FirstClassErrors.Analyzers.UnitTests`).
- Adding a `JustDummies` test? It belongs to exactly one of two suites:
`JustDummies.PropertyTests` for invariants that hold for every legal constraint
argument, `JustDummies.UnitTests` for specific named cases — message content,
argument validation, structural conventions, dated regressions. Read
[`doc/handwritten/for-maintainers/WritingJustDummiesTests.en.md`](doc/handwritten/for-maintainers/WritingJustDummiesTests.en.md)
first; the decision behind it is ADR-0040.
- Repository language is **English** (code, comments, commits, PRs, issues, and
review comments). French lives only in `doc/handwritten/for-users/README.fr.md` and must stay in sync
with the English README.
Expand Down
7 changes: 7 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,13 @@ errors should stay structured, documented, and close to the code.
* Test: `dotnet test FirstClassErrors.sln`
* Run the analyzer tests when touching analyzers:
`dotnet test FirstClassErrors.Analyzers.UnitTests`
* `JustDummies` has two test suites, and a new test belongs to exactly one of them:
`JustDummies.PropertyTests` owns invariants that hold for every legal constraint
argument, `JustDummies.UnitTests` owns specific named cases (message content,
argument validation, structural conventions, dated regressions). The rule and how
to apply it are in
[`doc/handwritten/for-maintainers/WritingJustDummiesTests.en.md`](doc/handwritten/for-maintainers/WritingJustDummiesTests.en.md)
(decision: ADR-0040). Read it before adding a JustDummies test.
* Only report tests as passing if you actually ran the corresponding command.
* If you did not run a relevant command, say so explicitly.

Expand Down
4 changes: 4 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,10 @@ library produces. This guide defines how commits are written here.
* Build: `dotnet build FirstClassErrors.sln`
* Test: `dotnet test FirstClassErrors.sln`
* Analyzer tests, when touching analyzers: `dotnet test FirstClassErrors.Analyzers.UnitTests`
* `JustDummies` tests are split across two suites — properties for invariants that
hold for every constraint argument, examples for specific named cases. See
[Writing JustDummies tests](doc/handwritten/for-maintainers/WritingJustDummiesTests.en.md)
before adding one.

See [`CLAUDE.md`](CLAUDE.md) for the project layout and the broader change
guidelines.
Expand Down
19 changes: 17 additions & 2 deletions FirstClassErrors.sln
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "JustDummies.Xunit", "JustDu
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "JustDummies.Xunit.UnitTests", "JustDummies.Xunit.UnitTests\JustDummies.Xunit.UnitTests.csproj", "{75FD5E2C-A871-4659-8A01-13461FED84EB}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "JustDummies.PropertyTests", "JustDummies.PropertyTests\JustDummies.PropertyTests.csproj", "{A09FC4C6-1470-4768-A1C0-2D4E42788FCF}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Expand Down Expand Up @@ -359,6 +361,18 @@ Global
{75FD5E2C-A871-4659-8A01-13461FED84EB}.Release|x64.Build.0 = Release|Any CPU
{75FD5E2C-A871-4659-8A01-13461FED84EB}.Release|x86.ActiveCfg = Release|Any CPU
{75FD5E2C-A871-4659-8A01-13461FED84EB}.Release|x86.Build.0 = Release|Any CPU
{A09FC4C6-1470-4768-A1C0-2D4E42788FCF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A09FC4C6-1470-4768-A1C0-2D4E42788FCF}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A09FC4C6-1470-4768-A1C0-2D4E42788FCF}.Debug|x64.ActiveCfg = Debug|Any CPU
{A09FC4C6-1470-4768-A1C0-2D4E42788FCF}.Debug|x64.Build.0 = Debug|Any CPU
{A09FC4C6-1470-4768-A1C0-2D4E42788FCF}.Debug|x86.ActiveCfg = Debug|Any CPU
{A09FC4C6-1470-4768-A1C0-2D4E42788FCF}.Debug|x86.Build.0 = Debug|Any CPU
{A09FC4C6-1470-4768-A1C0-2D4E42788FCF}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A09FC4C6-1470-4768-A1C0-2D4E42788FCF}.Release|Any CPU.Build.0 = Release|Any CPU
{A09FC4C6-1470-4768-A1C0-2D4E42788FCF}.Release|x64.ActiveCfg = Release|Any CPU
{A09FC4C6-1470-4768-A1C0-2D4E42788FCF}.Release|x64.Build.0 = Release|Any CPU
{A09FC4C6-1470-4768-A1C0-2D4E42788FCF}.Release|x86.ActiveCfg = Release|Any CPU
{A09FC4C6-1470-4768-A1C0-2D4E42788FCF}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand All @@ -381,13 +395,14 @@ Global
{75EA57DD-0128-4EB9-ADBE-567BFF602A93} = {B7C3D08D-EFC5-4F5D-8DE4-5B7938354DBB}
{F2C739E7-6F2E-4256-9C87-9D6F1168DF4A} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8}
{BC4F2BE8-55C9-4AA4-90FA-699EC83A8985} = {B7C3D08D-EFC5-4F5D-8DE4-5B7938354DBB}
{BF67DBAE-EBE1-45CE-86E5-B2E9E3D4EF6B} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8}
{75FD5E2C-A871-4659-8A01-13461FED84EB} = {B7C3D08D-EFC5-4F5D-8DE4-5B7938354DBB}
{1FC2C501-8842-4ABE-845E-000ED6575DD6} = {B7C3D08D-EFC5-4F5D-8DE4-5B7938354DBB}
{D12EE45B-78F8-4CD4-8E67-E4A9DDA01AE6} = {B7C3D08D-EFC5-4F5D-8DE4-5B7938354DBB}
{04707ACA-FB2E-43BF-A12C-28E01BF5F60D} = {B7C3D08D-EFC5-4F5D-8DE4-5B7938354DBB}
{1201EA34-8F50-41B8-B829-FCCB62A5F14B} = {B7C3D08D-EFC5-4F5D-8DE4-5B7938354DBB}
{74E68697-7C00-401C-84A9-7BF8DAFD9D34} = {B7C3D08D-EFC5-4F5D-8DE4-5B7938354DBB}
{BF67DBAE-EBE1-45CE-86E5-B2E9E3D4EF6B} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8}
{75FD5E2C-A871-4659-8A01-13461FED84EB} = {B7C3D08D-EFC5-4F5D-8DE4-5B7938354DBB}
{A09FC4C6-1470-4768-A1C0-2D4E42788FCF} = {B7C3D08D-EFC5-4F5D-8DE4-5B7938354DBB}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {4988972E-3E0D-4F48-8656-0E67ECE994BF}
Expand Down
Loading