Current section
Files
Jump to
Current section
Files
src/showtime/tests/should.gleam
import gleam/option.{None, Option, Some}
import showtime/tests/meta.{Meta}
pub type Assertion(t, e) {
Eq(a: t, b: t, meta: Option(Meta))
NotEq(a: t, b: t, meta: Option(Meta))
IsOk(a: Result(t, e), meta: Option(Meta))
IsError(a: Result(t, e), meta: Option(Meta))
Fail(meta: Option(Meta))
}
pub fn equal(a: t, b: t) {
evaluate(Eq(a, b, None))
}
pub fn equal_meta(a: t, b: t, meta: Meta) {
evaluate(Eq(a, b, Some(meta)))
}
pub fn not_equal(a: t, b: t) {
evaluate(NotEq(a, b, None))
}
pub fn not_equal_meta(a: t, b: t, meta: Meta) {
evaluate(NotEq(a, b, Some(meta)))
}
pub fn be_ok(a: Result(o, e)) {
evaluate(IsOk(a, None))
}
pub fn be_ok_meta(a: Result(o, e), meta: Meta) {
evaluate(IsOk(a, Some(meta)))
}
pub fn be_error(a: Result(o, e)) {
evaluate(IsError(a, None))
}
pub fn be_error_meta(a: Result(o, e), meta: Meta) {
evaluate(IsError(a, Some(meta)))
}
pub fn fail() {
evaluate(Fail(None))
}
pub fn fail_meta(meta: Meta) {
evaluate(Fail(Some(meta)))
}
pub fn be_true(a: Bool) {
a
|> equal(True)
}
pub fn be_true_meta(a: Bool, meta: Meta) {
a
|> equal_meta(True, meta)
}
pub fn be_false(a: Bool) {
a
|> equal(False)
}
pub fn be_false_meta(a: Bool, meta: Meta) {
a
|> equal_meta(False, meta)
}
pub fn evaluate(assertion) -> Nil {
case assertion {
Eq(a, b, _meta) ->
case a == b {
True -> Ok(assertion)
False -> {
assert Ok(_assertion) = Error(assertion)
}
}
NotEq(a, b, _meta) ->
case a != b {
True -> Ok(assertion)
False -> {
assert Ok(_assertion) = Error(assertion)
}
}
IsOk(a, _meta) ->
case a {
Ok(_) -> Ok(assertion)
Error(_) -> {
assert Ok(_assertion) = Error(assertion)
}
}
IsError(a, _meta) ->
case a {
Error(_) -> Ok(assertion)
Ok(_) -> {
assert Ok(_assertion) = Error(assertion)
}
}
Fail(_meta) -> {
assert Ok(_assertion) = Error(assertion)
}
}
Nil
}