Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/stoeffel/elm-verify-examples
https://github.com/stoeffel/elm-verify-examples
doctest elm elm-test verify
Last synced: about 1 month ago
JSON representation
- Host: GitHub
- URL: https://github.com/stoeffel/elm-verify-examples
- Owner: stoeffel
- License: bsd-3-clause
- Created: 2016-11-18T11:17:58.000Z (about 8 years ago)
- Default Branch: master
- Last Pushed: 2024-04-16T07:59:35.000Z (8 months ago)
- Last Synced: 2024-11-09T19:12:11.236Z (about 1 month ago)
- Topics: doctest, elm, elm-test, verify
- Language: Elm
- Size: 18.4 MB
- Stars: 167
- Watchers: 8
- Forks: 14
- Open Issues: 15
-
Metadata Files:
- Readme: Readme.md
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
Awesome Lists containing this project
README
# elm-verify-examples [![Build Status](https://travis-ci.org/stoeffel/elm-verify-examples.svg?branch=master)](https://travis-ci.org/stoeffel/elm-verify-examples)
> Verify examples in your docs.
:information_source: This was formerly known as `elm-doc-test`.
:warning: This is not a replacement for tests, this tool should be used for improving your documentation.
## Install
```bash
$ npm i elm-test -g
$ npm i elm-verify-examples -g
$ elm-test init
```## Setup
There is no need for any configuration. elm-verify-examples will run on all elm files in the specified `source-directories` (`elm.json`). It's possible to create a config file if you want to run it on only a subset of files or on additional markdown files.
```bash
$ touch tests/elm-verify-examples.json
````elm-verify-examples.json` contains information on which files contain verified examples and where to find them.
```json
{
"tests": ["Mock", "Mock.Foo.Bar.Moo", "./README.md"]
}
```Alternatively you can run elm-verify-examples on all elm files in your source directories:
```json
{
"tests": "all"
}
```or
```json
{
"tests": ["all", "Some.md"]
}
```It's recommended to add `./tests/VerifyExamples` to your `.gitignore`.
If you are building a _package_, you can pass the string `"exposed"` instead of an explicit list of modules,
this will cause all the documented modules in your package to be verified. This makes it easier to keep these in
sync.## Writing Verified Examples
Verified examples look like normal code examples in doc-comments. \
Code needs to be indented by 4 spaces.
You can specify the expected result of an expression, by adding a comment `-->` (the `>` is important) and an expected expression.```elm
{-| returns the sum of two int.-- You can write the expected result on the next line,
add 41 1
--> 42-- or on the same line.
add 3 3 --> 6
-}
add : Int -> Int -> Int
add =
(+)
```### Multiline Examples
You can write examples on multiple lines.
```elm
{-| reverses the listrev
[ 41
, 1
]
--> [ 1
--> , 41
--> ]rev [1, 2, 3]
|> List.map toString
|> String.concat
--> "321"-}
rev : List a -> List a
rev =
List.reverse
```### Imports
You can specify imports, if you want to use a module or a special test util.
```elm
{-|import Dict
myWeirdFunc (Dict.fromList [(1, "a"), (2, "b")]) [2, 1]
--> "ba"-}
```### Intermediate Definitions
You can use intermediate definitions in your example.
:information: Unused functions don't get added to the test. This is useful if you wanna add incomplete examples to your docs.
:warning: Intermediate definitions need a type signature!```elm
{-|isEven : Int -> Bool
isEven n =
remainderBy 2 n == 0List.Extra.filterNot isEven [1,2,3,4] --> [1,3]
-}
filterNot : (a -> Bool) -> List a -> List a
```### Types in Examples
You can define union types and type aliases in your examples.
```elm
{-| With a union type in the example.
type Animal
= Dog
| Catdouble Dog
--> (Dog, Dog)-}
double : a -> ( a, a )
double a =
( a, a )
``````elm
{-| With a type alias in the example.customTypeAlias defaultUser "?"
--> "?Luke"type alias User =
{ id: Int -- ID
, name: String
}defaultUser : User
defaultUser =
{ id = 1
, name = "Luke"
}customTypeAlias defaultUser "_"
--> "_Luke"-}
customTypeAlias : { a | name : String } -> String -> String
customTypeAlias { name } prefix =
prefix ++ name
```### Examples in markdown files
You can also verify code example in markdown files (such as your README). To do so, add the file's path to your `elm-verify-examples.json` file and write your example using the sames rules as above (no need for 4-space indentation here).
````
This is my README!
It explains how the `Documented` module works:```elm
import DocumentedDocumented.two --> 2
```
````## Verify Examples
`elm-verify-examples` converts your verify-examples into elm-tests, and optionally runs them using `elm-test`. To only generate the test files in `tests/VerifyExamples/`:
```bash
$ elm-verify-examples
```This is useful if you want to run your tests using different runner than `elm-test`, e.g. `elm-coverage`. If you also want to run the generated tests:
```bash
$ elm-verify-examples --run-tests
```Note that this way the test files will be removed after they are ran.
By default, this command looks for the config file at `tests/elm-verify-examples.json`. If you want it to load a specific config file use the `--config` argument (e.g. `elm-verify-examples --config my/custom/path/elm-verify-examples.json` will read the config from `my/custom/path/elm-verify-examples.json`).
You can run elm-verify-examples for one or more modules explicitly. They don't have to be specified in `tests/elm-verify-examples.json`.
```bash
$ elm-verify-examples ./src/Foo.elm ./src/Foo/Bar.elm
```You can pass a custom path to elm-test if necessary.
```bash
$ elm-verify-examples --elm-test=./node_modules/.bin/elm-test
$ # or add it to your elm-verify-examples.json `elmTest: "../node....`
$ # you can also pass arguments to elm-test with --elm-test-args
```It will use the elm-test installed with this package.