Compliance Tests
================

These tests run my implementation of LinkedIn's Dust and the official implementation of [LinkedIn's DustJS](https://www.dustjs.com) as compares the output to ensure they match.

Running in Docker
=================

Go to the root directory of this repository where there is a `Dockerfile` and run:

``` sh
docker build -t duster . && docker run --rm -i -t duster
```

This command will run through the test cases in `js/test_cases`, comparing the output of the official LinkedIn DustJS implementation against the output of the `duster` implementation. If there are any differences, it will flag the test as a failure.

The tests have a structure of:

``` text
test_cases
└── hello_world
    ├── input1.json
    ├── input2.json
    ├── main.dust
    └── partial.dust
```

The folder name `hello_world` is the name of the test group. For each test group there must be a file named `main.dust`. This file will be the top-level template that gets rendered. All other `*.dust` files will get registered into the dust rendering context as partials, with the same name as their file excluding the file extension. For example, `main.dust` could invoke `partial.dust` with `{>partial/}`. Each `*.json` file is a separate context that will be passed into the dust renderer, making each `*.json` file form a test inside the test group.

Running Manually
================

Individually
------------

If you want to invoke the LinkedIn DustJS manually, the `dustjs_shim` expects the json context to be passed in over stdin, and a list of templates to be passed in as arguments, with the first argument serving as the main template. An example invocation from this folder would therefore be:

``` sh
npm install dustjs-linkedin
cat test_cases/hello_world/input1.json | node dustjs_shim.js test_cases/hello_world/main.dust
```

Unlike the docker variant, there is no requirement for the template to be named `main.dust` since it will render the first argument as the main template. Running the same test case through the `duster` implementation would be:

``` sh
npm install dustjs-linkedin
cat test_cases/hello_world/input1.json | ../target/debug/duster-cli test_cases/hello_world/main.dust
```

Batch
-----

If you instead would like to run the entire compliance test suite manually outside of docker, you can run:

``` sh
npm install dustjs-linkedin
(cd .. && cargo build)
./run_compliance_suite.bash
```