Pudu programming language
Menu
Package

@chrismichaelps / pudu-lang-validator

Typed fluent validation rules for Pudu

0.1.1Apache-2.01

InstallClose

MessageTest.pudu

Pudu30 lines1.4 KB

GitHub ↗
1/** @Test.Validation.Message.Suite — checks rendered built-in bounds */2module PuduLangValidator.MessageTest34import Std.Test as Test5import PuduLangValidator.Rule as Rule6import PuduLangValidator.Rules.Collection as Collection7import PuduLangValidator.Rules.Number as Number8import PuduLangValidator.Rules.Text as Text9import PuduLangValidator.Validator as Validator1011type Sample = { text: Str, number: Int, lines: Array[Str] }1213fn rules() -> Validator.Validator[Sample] {14  let text = Rule.build(Text.length(Rule.ruleFor("text", |sample: Sample| sample.text), 2, 4))15  let number = Rule.build(Number.inclusiveBetween(Rule.ruleFor("number", |sample: Sample| sample.number), 3, 7))16  let lines = Rule.build(Collection.countBetween(Rule.ruleFor("lines", |sample: Sample| sample.lines), 1, 2))17  Validator.add(Validator.add(Validator.add(Validator.create(), text), number), lines)18}1920fn main() -> Int {21  let validator = rules()22  let outcome = Validator.validate(&validator, Sample{text: "x", number: 9, lines: []})23  let checks = Test.suite("Message", &[24      Test.equals("text interval renders", &outcome.errors[0].errorMessage, &"Text must contain between 2 and 4 characters."),25      Test.equals("number interval renders", &outcome.errors[1].errorMessage, &"Number must be from 3 through 7."),26      Test.equals("collection interval renders", &outcome.errors[2].errorMessage, &"The collection must contain from 1 through 2 items.")27    ])28  Test.report(&Test.run(&checks))29}30