diff options
Diffstat (limited to '')
-rw-r--r-- | tests/README.md | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/tests/README.md b/tests/README.md new file mode 100644 index 0000000..1301f6b --- /dev/null +++ b/tests/README.md @@ -0,0 +1,91 @@ +# 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 `<name>.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 + +`<name>.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 + +`<name>.json` — *Test-data to validate the message with* + +```json +{ + "value": true +} +``` + +### pytest + +`test_<name>.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)
\ No newline at end of file |