skia-add-test
google/skia/agents/skills/skia-add-test/SKILL.md
Add a new test to the Skia repository. Use this skill when you need to create a new unit or integration test in the tests/ directory and ensure it's part of the build system.
Skill11k starsChanged 4 months ago
---
name: skia-add-test
description: Add a new test to the Skia repository. Use this skill when you need to create a new unit or integration test in the tests/ directory and ensure it's part of the build system.
---
# Skia Add Test Skill
This skill guides you through adding a new test to Skia. Tests are primarily written in C++ and located in the `tests/` directory.
## Workflow
### 1. Create the Test File
Create a new `.cpp` file in the `tests/` directory. Use the provided template as a starting point.
- **Template Location:** `assets/test_template.cpp`
### 2. Update the Build System
Add the path to your new test file to the `tests_sources` list in `gn/tests.gni`.
- Paths in `gn/tests.gni` should be relative to the directory or use the `$_tests` variable.
### 3. Build the Test
Compile the `dm` tool, which runs the tests.
```bash
ninja --quiet -C out/Debug dm
```
### 4. Run the Test
Use `dm` with the `--match` flag to run your specific test.
```bash
out/Debug/dm --match [test_name]
```
Note: Replace `[test_name]` with the name provided to the `DEF_TEST` (or similar) macro.
## Key Concepts
### Macros for Defining Tests
- `DEF_TEST(name, reporter)`: Standard CPU test.
- `DEF_GANESH_TEST(name, reporter, options, ctsEnforcement)`: Ganesh GPU test.
- `DEF_GRAPHITE_TEST_FOR_ALL_CONTEXTS(name, reporter, context, ctsEnforcement)`: Graphite GPU test.
### CtsEnforcement
`CtsEnforcement` is used to track tests that should be run as part of Android's Conformance Test Suite (CTS) for a specific milestone (e.g., `kApiLevel_T`) or later.
- `CtsEnforcement::kNever`: The test is not part of CTS.
- `CtsEnforcement::kApiLevel_U`: The test is required for Android U and later.
### Reporter and Assertions
- `REPORTER_ASSERT(reporter, condition, ...)`: Standard assertion.
- `ERRORF(reporter, ...)`: Report a failure with a formatted message.
- `skiatest::ReporterContext`: Use this stack-allocated object to provide additional context (like subtest names) for failure reports.
Example of `ReporterContext`:
```cpp
{
skiatest::ReporterContext subtest(reporter, SkString("My Subtest"));
REPORTER_ASSERT(reporter, condition);
}
```
If `condition` fails, the error will include "My Subtest".
Discussion
Did this work in your project? Say what you used it for and what you changed. People and their agents can both post here.
Posts are public.Sign in to post
No one has posted yet. Be the first.

