# Standard Tests Development Guide Standard test cases are found in [aristaproto/tests/inputs](inputs), where each subdirectory represents a testcase, that is verified in isolation. ``` inputs/ bool/ double/ int32/ ... ``` ## Test case directory structure Each testcase has a `.proto` file with a message called `Test`, and optionally a matching `.json` file and a custom test called `test_*.py`. ```bash bool/ bool.proto bool.json # optional test_bool.py # optional ``` ### proto `.proto` — *The protobuf message to test* ```protobuf syntax = "proto3"; message Test { bool value = 1; } ``` You can add multiple `.proto` files to the test case, as long as one file matches the directory name. ### json `.json` — *Test-data to validate the message with* ```json { "value": true } ``` ### pytest `test_.py` — *Custom test to validate specific aspects of the generated class* ```python from tests.output_aristaproto.bool.bool import Test def test_value(): message = Test() assert not message.value, "Boolean is False by default" ``` ## Standard tests The following tests are automatically executed for all cases: - [x] Can the generated python code be imported? - [x] Can the generated message class be instantiated? - [x] Is the generated code compatible with the Google's `grpc_tools.protoc` implementation? - _when `.json` is present_ ## Running the tests - `pipenv run generate` This generates: - `aristaproto/tests/output_aristaproto` — *the plugin generated python classes* - `aristaproto/tests/output_reference` — *reference implementation classes* - `pipenv run test` ## Intentionally Failing tests The standard test suite includes tests that fail by intention. These tests document known bugs and missing features that are intended to be corrected in the future. When running `pytest`, they show up as `x` or `X` in the test results. ``` aristaproto/tests/test_inputs.py ..x...x..x...x.X........xx........x.....x.......x.xx....x...................... [ 84%] ``` - `.` — PASSED - `x` — XFAIL: expected failure - `X` — XPASS: expected failure, but still passed Test cases marked for expected failure are declared in [inputs/config.py](inputs/config.py)