duster/js/README.md

60 lines
2.4 KiB
Markdown
Raw Normal View History

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
```