
MessageTest.pudu
Pudu30 lines1.4 KB
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