
RegexArgumentTest.pudu
Pudu47 lines2.2 KB
1/** @Test.Validation.RegexArgument.Suite — checks regex message metadata */2module PuduLangValidator.RegexArgumentTest34import Std.Test as Test5import PuduLangValidator.Rule as Rule6import PuduLangValidator.Rules.Text as TextRule7import PuduLangValidator.Validator as Validator89type Model = { text: Str }1011fn validator(pattern: Str) -> Validator.Validator[Model] {12 let built = TextRule.matches(Rule.ruleFor("text", |model: Model| model.text), pattern)13 match built {14 case Ok(rule) => Validator.add(Validator.create(),15 Rule.build(Rule.withMessage(rule, "Pattern \{RegularExpression\} rejected \{PropertyPath\}.")))16 case Err(_problem) => panic("expected valid regex")17 }18}1920fn main() -> Int {21 let substring = validator("ab")22 let anchored = validator("^ab$")23 let quantified = validator("^[A-Z]\{2\}-[0-9]\{4\}$")24 let failed = Validator.validate(&substring, Model{text: "zz"})25 let anchoredFailed = Validator.validate(&anchored, Model{text: "zab"})26 let invalid = TextRule.matches(Rule.ruleFor("text", |model: Model| model.text), "[")27 let invalidPattern = match invalid {28 case Ok(_rule) => false29 case Err(_problem) => true30 }31 let checks = Test.suite("RegexArgument", &[32 Test.that("substring match succeeds", Validator.validate(&substring, Model{text: "zabz"}).isValid),33 Test.that("substring mismatch fails", !failed.isValid),34 Test.equals("pattern argument renders original text", &failed.errors[0].errorMessage,35 &"Pattern ab rejected text."),36 Test.equals("regex rule reports stable code", &failed.errors[0].errorCode, &"Matches"),37 Test.that("anchored exact value succeeds", Validator.validate(&anchored, Model{text: "ab"}).isValid),38 Test.that("anchored rule rejects surrounding text", !anchoredFailed.isValid),39 Test.equals("anchored pattern remains literal in message", &anchoredFailed.errors[0].errorMessage,40 &"Pattern ^ab$ rejected text."),41 Test.that("escaped braces match a quantifier", Validator.validate(&quantified, Model{text: "AB-1234"}).isValid),42 Test.that("escaped braces reject a short code", !Validator.validate(&quantified, Model{text: "A-123"}).isValid),43 Test.that("invalid pattern fails rule construction", invalidPattern)44 ])45 Test.report(&Test.run(&checks))46}47