From 7cf2b2b0d6333c073bd6e214fee5e8dc1c989b00 Mon Sep 17 00:00:00 2001 From: mqole Date: Mon, 23 Mar 2026 13:35:36 +1100 Subject: [PATCH 1/3] test & linter debug guide --- .../tips/debugging-tools.md | 20 +++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/en/general-development/tips/debugging-tools.md b/src/en/general-development/tips/debugging-tools.md index 6a217a014e..e09019f6ba 100644 --- a/src/en/general-development/tips/debugging-tools.md +++ b/src/en/general-development/tips/debugging-tools.md @@ -30,11 +30,27 @@ Parameters the `vv` commands take: * Secondary debug console * UI tree view -## Running Tests +## YAML Linter + +YAML linter is a tool that attempts to serialize every prototype defined in a `.yml` file. It will collect information on any prototype it cannot serialize and provide the user with an output of those entities. This makes it incredibly useful for identifying where errors are occuring in your yaml. + +To run YAML linter, you can use the shell command `dotnet run --project Content.YAMLLinter` in your project folder. If you're using an IDE such as Rider or VSCode, you can also use the YAML linter preset to run your project. + +## Running Integration Tests + +Integration tests are extremely minimal simulations of what you need to run SS14 - just a server-client pair, no maps or lobbies or anything - and you can run game system code on these simulations in order to locate issues that can only be found through live game simulation. You can use this to make sure a bit of code works as intended by simulating its effects and comparing them against expected values, for example making sure that when you buckle someone to a chair, then that person can't move. + +To run integration tests, use the shell command `dotnet test` in your project folder. You can also use `dotnet test --filter` followed by the name of a specific test if you don't want to run every test at once. This is recommended as some tests can take a long time to run! IDEs such as Rider or VSCode may also have built-in ways to run tests without using the terminal. + +When you open a PR to the Wizard's Den repository on GitHub, integration tests will run on your PR automatically. If tests fail, you'll need to update your PR before it can get properly reviewed. + +```admonish note +`Content.IntegrationTests` is the directory containing integration tests. It is not the same thing as the similarly-named `Content.Tests` folder. You should run the tests in both of these folders to debug your changes. +``` ### Server GC -I recommend you enable [**server GC**](https://docs.microsoft.com/en-us/dotnet/standard/garbage-collection/workstation-server-gc) to run SS14 tests, *especially* integration tests (it cuts integration test times in *half*). +It's recommended that you enable [**server GC**](https://docs.microsoft.com/en-us/dotnet/standard/garbage-collection/workstation-server-gc) to run SS14 tests, *especially* integration tests (it cuts integration test times in *half*). To enable this in various editors: From bcc59e345d8cab93852542bdd0810a92f17068ec Mon Sep 17 00:00:00 2001 From: mqole Date: Wed, 25 Mar 2026 21:16:39 +1100 Subject: [PATCH 2/3] a few updates --- .../assets/images/integration-test-example.png | Bin 0 -> 77278 bytes .../general-development/tips/debugging-tools.md | 8 +++++--- 2 files changed, 5 insertions(+), 3 deletions(-) create mode 100644 src/en/assets/images/integration-test-example.png diff --git a/src/en/assets/images/integration-test-example.png b/src/en/assets/images/integration-test-example.png new file mode 100644 index 0000000000000000000000000000000000000000..5b251dbcfda4acfc7c92fba984f8eff9165c749c GIT binary patch literal 77278 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 literal 0 HcmV?d00001 diff --git a/src/en/general-development/tips/debugging-tools.md b/src/en/general-development/tips/debugging-tools.md index e09019f6ba..fb5a0da90c 100644 --- a/src/en/general-development/tips/debugging-tools.md +++ b/src/en/general-development/tips/debugging-tools.md @@ -32,15 +32,17 @@ Parameters the `vv` commands take: ## YAML Linter -YAML linter is a tool that attempts to serialize every prototype defined in a `.yml` file. It will collect information on any prototype it cannot serialize and provide the user with an output of those entities. This makes it incredibly useful for identifying where errors are occuring in your yaml. +YAML linter is a tool that attempts to serialize and validate every prototype defined in a `.yml` file, along with prototypes' member fields. It will collect information on any prototype it cannot serialize and provide the user with an output of those entities. This makes it incredibly useful for identifying where errors are occuring in your yaml, particularly typos and elusive inheritance issues. To run YAML linter, you can use the shell command `dotnet run --project Content.YAMLLinter` in your project folder. If you're using an IDE such as Rider or VSCode, you can also use the YAML linter preset to run your project. ## Running Integration Tests -Integration tests are extremely minimal simulations of what you need to run SS14 - just a server-client pair, no maps or lobbies or anything - and you can run game system code on these simulations in order to locate issues that can only be found through live game simulation. You can use this to make sure a bit of code works as intended by simulating its effects and comparing them against expected values, for example making sure that when you buckle someone to a chair, then that person can't move. +Integration tests are extremely minimal simulations of a SS14 environment that are designed to run 'test' code in order to locate issues that can only be found through live game simulation. You can use integration tests to make sure a system works as intended by simulating its effects and comparing them against expected values, for example making sure that when you buckle someone to a chair, then that person can't move. -To run integration tests, use the shell command `dotnet test` in your project folder. You can also use `dotnet test --filter` followed by the name of a specific test if you don't want to run every test at once. This is recommended as some tests can take a long time to run! IDEs such as Rider or VSCode may also have built-in ways to run tests without using the terminal. +To run integration tests, use the shell command `dotnet test` in your project folder. You can also use `dotnet test --filter` followed by the name of a specific test if you don't want to run every test at once. This is recommended as some tests can take a long time to run - see the section below about enabling server GC to make test runs more efficient! IDEs such as Rider or VSCode may also have built-in ways to run tests without using the terminal. + +![](../../assets/images/integration-test-example.png) When you open a PR to the Wizard's Den repository on GitHub, integration tests will run on your PR automatically. If tests fail, you'll need to update your PR before it can get properly reviewed. From 3e4a3b00bd43e3e0d5898c8f016cbf770945cf31 Mon Sep 17 00:00:00 2001 From: mqole Date: Sat, 16 May 2026 22:08:00 +1000 Subject: [PATCH 3/3] unit/integration test clarification, will add image for orks later :p --- src/en/general-development/tips/debugging-tools.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/en/general-development/tips/debugging-tools.md b/src/en/general-development/tips/debugging-tools.md index fb5a0da90c..db96fd0a68 100644 --- a/src/en/general-development/tips/debugging-tools.md +++ b/src/en/general-development/tips/debugging-tools.md @@ -47,7 +47,11 @@ To run integration tests, use the shell command `dotnet test` in your project fo When you open a PR to the Wizard's Den repository on GitHub, integration tests will run on your PR automatically. If tests fail, you'll need to update your PR before it can get properly reviewed. ```admonish note -`Content.IntegrationTests` is the directory containing integration tests. It is not the same thing as the similarly-named `Content.Tests` folder. You should run the tests in both of these folders to debug your changes. +`Content.IntegrationTests` is the directory containing integration tests. It is not the same thing as the similarly-named `Content.Tests` folder. + +Unit tests test a single "unit" without loading data from any other units, while integration tests check all units against each other. For example, a hypothetical unit test of `LocalizedDataset` might have a unit test which uses spoofed data to make sure that all the methods within that class work as expected alone, while an integration test may go through all the instances of that data type in the game (including resource loading, yaml parsing, prototype management, etc.) to make sure they work as expected together. + +Unit/integration tests are used widely in software development outside of SS14, so ask around if you want more information on the distinction! ``` ### Server GC