README.md

# purerl-test

A toolset for running PureScript tests via `mix purerl.test`.

## Installation

Add `:purerl_test` to your list of dependencies in `mix.exs`:

```elixir
def deps do
  [
    {:purerl_test, "~> 0.1.0"}
  ]
end
```

As well as `purerl-test` to your dependencies in `packages.dhall` & `spago.dhall`:

In `packages.dhall`:

```dhall
let upstream =
      https://github.com/purerl/package-sets/releases/download/erl-0.15.3-20220629/packages.dhall
let purerl-test =
      https://raw.githubusercontent.com/GoNZooo/purerl-test/v0.1.0/spago.dhall
let overrides =
      { purerl-test =
          { repo = "https://github.com/GoNZooo/purerl-test.git"
          , version = "v0.1.0"
          , dependencies = purerl-test.dependencies
          }
      }

in upstream // overrides
```

In `spago.dhall`:

```dhall
{ name = "your-project"
, dependencies = [ "purerl-test" ]
, packages = ./packages.dhall
, sources = [ "src/**/*.purs", "test/**/*.purs" ]
, backend = "purerl"
}
```


## Usage example (CLI)

```bash
$ mix purerl.test
PurerlEx: assuming the project root is `/home/gonz/code/purescript/purerl-ex-unit`
PurerlEx: no non-dep files changed; skipping running spago to save time.
🧪 simple types
  2/2 successes
🧪 comparison assertions
  4/4 successes
🧪 composite types
  2/2 successes
🎉 All done!
```

## Usage example (code)

```purescript
module Test.MainSpec
  ( main
  ) where

import Prelude

import Data.Tuple.Nested ((/\))
import Effect (Effect)
import Erl.Atom as Atom
import Erl.Data.List as List
import Erl.Data.Map as Map
import PurerlTest
  ( assert
  , assertEqual
  , assertGreaterThan
  , assertGreaterThanOrEqual
  , assertLessThan
  , assertLessThanOrEqual
  , assertNotEqual
  , refute
  , runSuites
  , suite
  , test
  )

main :: Effect Unit
main = do
  runSuites do
    suite "simple types" do
      test "`assert` & `refute`" do
        assert true
        refute false

      test "`assertEqual` & `assertNotEqual`" do
        assertEqual 1 1
        assertNotEqual 1 2

    suite "comparison assertions" do
      test "`assertGreaterThan`" do
        assertGreaterThan 1 0
        assertGreaterThan 1.0 0.9

      test "`assertGreaterThanOrEqual`" do
        assertGreaterThanOrEqual 1 0
        assertGreaterThanOrEqual 1 1
        assertGreaterThanOrEqual 1.0 0.9
        assertGreaterThanOrEqual 1.0 1.0

      test "`assertLessThan`" do
        assertLessThan 0 1
        assertLessThan 0.9 1.0

      test "`assertLessThanOrEqual`" do
        assertLessThanOrEqual 0 1
        assertLessThanOrEqual 1 1
        assertLessThanOrEqual 0.9 1.0
        assertLessThanOrEqual 1.0 1.0

    suite "composite types" do
      test "`assertEqual` with maps" do
        assertEqual
          (Map.fromFoldable [ Atom.atom "hello" /\ 42 ])
          (Map.fromFoldable [ Atom.atom "hello" /\ 42 ])

      test "`assertEqual` & `assertNotEqual` with lists" do
        assertEqual (List.fromFoldable [ 1, 2, 3 ]) (List.fromFoldable [ 1, 2, 3 ])
        assertNotEqual (List.fromFoldable [ 1, 2, 3 ]) (List.fromFoldable [ 1, 2, 4 ])
```

Made with [`purerl`](https://github.com/purerl/purerl).