# ShEx testsuite

This module contains the code that runs the ShEx testsuite for the ShEx implementation written in Rust.

It has a command line interface that can be used to run some specific tests.

# Usage

```
Usage: shex_testsuite [OPTIONS]

Options:
  -m, --manifest <Manifest FILE (.jsonld)>
          Name of Manifest file [default: shex_testsuite/shexTest/validation/manifest.jsonld]
  -c, --config <Config file>
          [default: shex_testsuite/config.toml]
  -x, --run_mode <MANIFEST_RUN_MODE>
          [default: collect-errors] [possible values: collect-errors, fail-first-error]
  -f, --manifest_mode <MANIFEST_MODE>
          [possible values: schemas, validation, negative-syntax, negative-structure]
  -p, --print_result_mode <PRINT_RESULT_MODE>
          [default: basic] [possible values: basic, failed, passed, not-implemented, all]
  -e, --entry <Entry names>

  -t, --trait <Trait names>

  -h, --help
          Print help
  -V, --version
          Print version
```

### Validation tests

By default it runs the validation tests and shows some statistics

```sh
cargo run -p shex_testsuite
Passed: 1062, Failed: 82, Skipped: 22, Not implemented: 0
```

### Check that the well-formed schemas are read

```sh
cargo run -p shex_testsuite -- -p failed -m shex_testsuite/shexTest/schemas/manifest.jsonld -f schemas
```

### Run a concrete test by name

```sh
cargo run -p shex_testsuite -- -m shex_testsuite/shexTest/validation/manifest.jsonld -e nPlus1
```


### Run tests of some specific trait

```sh
cargo run -p shex_testsuite -- -m shex_testsuite/shexTest/validation/manifest.jsonld -t sht:TriplePattern
```

### To choose between running the tests with JSON-LD or Compact syntax

ShExC syntax

```sh
cargo run -p shex_testsuite -- -m shex_testsuite/shexTest/validation/manifest.jsonld -p failed-simple --shex_syntax shexc
. . .
Passed: 1063, Failed: 81, Skipped: 22, Not implemented: 0
```

JSON-LD syntax

```sh
cargo run -p shex_testsuite -- -m shex_testsuite/shexTest/validation/manifest.jsonld -p failed-simple --shex_syntax shexj
. . .
Passed: 1062, Failed: 82, Skipped: 22, Not implemented: 0
```

At this moment the main difference between both is:

```
nPlus1
```
