mcpbeat

Skia Add Test

google/skia-add-test

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.

820 tokens
context cost
the whole folder, loaded on every use
2
files
instructions only
0
copies elsewhere
how many repositories repackaged it
10853
stars on the repo
on the repository, not the skill itself

Install

one command, takes just this skill from the repository
npx skills add https://github.com/google/skia --skill skia-add-test

What comes with it

1 066 bytes besides the instruction
assets/test_template.cpp

The instruction itself

10 sections, as written by the author

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.

ninja --quiet -C out/Debug dm

4. Run the Test

Use dm with the --match flag to run your specific test.

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:

{
    skiatest::ReporterContext subtest(reporter, SkString("My Subtest"));
    REPORTER_ASSERT(reporter, condition);
}

If condition fails, the error will include "My Subtest".

How to use it

Copy the folder

Take google/skia-add-test from the repository into ~/.claude/skills for personal use, or into .claude/skills inside a project.

Check the name does not clash

The agent identifies a skill by the name field in its header. Two skills with the same name cannot sit side by side — one of them will be ignored.