From 8bd89770279d6997dc4811b10eb8af6c3d866230 Mon Sep 17 00:00:00 2001 From: Humza Shahid Date: Thu, 9 Oct 2025 06:14:29 +0100 Subject: [PATCH] add tests checking if regex escape sequences are recognised --- test/regex-tests.sml | 56 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/test/regex-tests.sml b/test/regex-tests.sml index 2fcddaa..fdcab26 100644 --- a/test/regex-tests.sml +++ b/test/regex-tests.sml @@ -133,6 +133,20 @@ struct Expect.isTrue (matches = expectedMatches) end + fun doesNotRecogniseUnescaped (regexString, inputString) = + let + (* arrange *) + val dfa = CiDfa.fromString regexString + + (* act *) + val matches = CiDfa.matchString (dfa, inputString) + + (* assert *) + val expectedMatches = [] + in + Expect.isTrue (matches = expectedMatches) + end + val escapeSequenceTests = describe "regex escape sequences" [ test "recognises alert" (fn _ => recogniseEscapeSequence ("\\a", "hello \a world")) @@ -152,10 +166,52 @@ struct recogniseEscapeSequence ("\\\\", "hello \\ world")) ] + val metacharacterEscapeTest = describe "regex metacharacter escape sequences" + [ test "recognises (" (fn _ => + recogniseEscapeSequence ("\\(", "hello ( world")) + , test "recognises )" (fn _ => + recogniseEscapeSequence ("\\)", "hello ) world")) + , test "recognises [" (fn _ => + recogniseEscapeSequence ("\\[", "hello [ world")) + , test "recognises ]" (fn _ => + recogniseEscapeSequence ("\\[", "hello ] world")) + , test "recognises +" (fn _ => + recogniseEscapeSequence ("\\+", "hello + world")) + , test "recognises |" (fn _ => + recogniseEscapeSequence ("\\|", "hello | world")) + , test "recognises ?" (fn _ => + recogniseEscapeSequence ("\\?", "hello ? world")) + , test "recognises ." (fn _ => + recogniseEscapeSequence ("\\.", "hello . world")) + , test "recognises -" (fn _ => + recogniseEscapeSequence ("\\-", "hello - world")) + + (* checking that unescaped metacharacter is not recognised *) + , test "does not recognise (" (fn _ => + doesNotRecogniseUnescaped ("(", "hello ( world")) + , test "does not recognise )" (fn _ => + doesNotRecogniseUnescaped (")", "hello ) world")) + , test "does not recognise [" (fn _ => + doesNotRecogniseUnescaped ("[", "hello [ world")) + , test "does not recognise ]" (fn _ => + doesNotRecogniseUnescaped ("[", "hello ] world")) + , test "does not recognise +" (fn _ => + doesNotRecogniseUnescaped ("+", "hello + world")) + , test "does not recognise |" (fn _ => + doesNotRecogniseUnescaped ("|", "hello | world")) + , test "does not recognise ?" (fn _ => + doesNotRecogniseUnescaped ("?", "hello ? world")) + , test "does not recognise ." (fn _ => + doesNotRecogniseUnescaped (".", "hello . world")) + , test "does not recognise -" (fn _ => + doesNotRecogniseUnescaped ("-", "hello - world")) + ] + val tests = [ caseInsensitiveTests , caseSensitiveTests , endMarkerTests , escapeSequenceTests + , metacharacterEscapeTest ] end