SuperAPI AI Directory

skia-add-test

Testing & quality

View repository

Updated 10-16 05:49

About this skill

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".