# Chip-Level Test Libraries

# Overview

This subtree contains _test library code_ that could aid in the writing of [chip-level tests](../../tests/README.md).
Test library code consists of two components:
1. `testutils` libraries, and
2. the [on-device test framework](./test_framework/README.md).

Functions in `testutils` libraries are designed to wrap several DIF invocations that are commonly used together across many chip-level tests.
They are _not_ designed to wrap a single DIF call.

The [on-device test framework](./test_framework/README.md) provides a generic platform for writing chip-level tests.

# Style Guide

- All `testutils` libraries should be placed in `sw/device/lib/testing/*`
- The [on-device test framework](./test_framework/README.md)
code will live in: `sw/device/lib/testing/test\_framework`.
- `testutils` libraries will be named: `<IP or functionality name>_testutils.<h,c>`
- All `testutils` function names should take on the following format: `<IP or functionality name>_testutils_<function name>()`.
  This corresponds to the format: `<filename>_<function name>()`.
- There is no strict return typing required, though ideally most `testutils` functions should return **void** or **bool**.
  This is because test errors should be checked in `testutils` functions themselves using the `CHECK()` macros defined in `sw/device/lib/testing/check.h`.
  - Functions that return **bool** to represent an error should be marked with **OT_WARN_UNUSED_RESULT** to avoid mistakenly ignoring errors.
    Return **false** to represent an error.
- Try to keep `testutils` libraries toplevel agnostic (e.g., don’t include `hw/top_earlgrey/sw/autogen/top_earlgrey.h` if you can avoid it).
  This means `dif_<ip>_init()` DIFs should be invoked in chip-level tests, *not* `testutils`, and the DIF handles should be passed in as parameters to `testutils` functions.
- Pass-through `sw/device/lib/dif_base.h` types where appropriate.
  This allows testutils functions to easily mix with DIFs within chip-level tests.
- Avoid defining testutils that call a single DIF, and use the DIF directly.
  If a DIF does not exist for your needs, create one by following the [DIF development guide](../dif/README.md).

{{% sectionContent %}}
