summaryrefslogtreecommitdiff
path: root/TESTING.md
blob: 0befd53831f079224a922dc662530b4f21910bc0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
Testing your Mustache implementation against this specification should be
relatively simple.  If you have a readily available testing framework on your
platform, your task may be even simpler.

In general, the process for each `.yml` file is as follows:

1. Use a YAML parser to load the file.

2. For each test in the `tests` array:

    1. Ensure that each element of the `partials` hash (if it exists) is
       stored in a place where the interpreter will look for it.

    2. If your implementation will not support lambdas, feel free to skip
       over the optional `~lambdas.yml` file.

       Otherwise, ensure that each member of `data` tagged with `!code` is
       properly processed into a language-specific lambda reference.

       * e.g. Given this YAML data hash:

         `{ x: !code { ruby: 'proc { "x" }', perl: 'sub { "x" }' } }`

         a Ruby-based Mustache implementation would process it such that it
         was equivalent to this Ruby hash:

         `{ 'x' => proc { "x" } }`

       * If your implementation language does not currently have lambda
         examples in the spec, feel free to implement them and send a pull
         request.

       * The JSON version of the spec represents these tagged values as a
         hash with a `__tag__` key of `code`.

    3. Render the template (stored in the `template` key) with the given
       `data` hash.

    4. Compare the results of your rendering against the `expected` value;
       any differences should be reported, along with any useful debugging
       information.

       * Of note, the `desc` key contains a rough one-line description of
         the behavior being tested – this is most useful in conjunction with
         the file name and test `name`.