Skip to content

Commit 89ba99c

Browse files
committed
Add regex parsing tests
1 parent ddfe838 commit 89ba99c

File tree

3 files changed

+27
-1
lines changed

3 files changed

+27
-1
lines changed

src/Shared/Regular.fs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ module Regexp =
120120
let space = set [ ' '; '\t'; '\r'; '\n'; '\v'; '\f' ]
121121
let all = set [ '\x20' .. '\x7E' ] + space
122122
let digit = set [ '0' .. '9' ]
123-
let letter = set [ 'A' .. 'z' ]
123+
let letter = set [ 'A' .. 'Z' ] + set [ 'a' .. 'z' ]
124124
let word = letter + digit + set [ '_' ]
125125
let w = ofSet word
126126
let W = ofSet (all - word)

tests/Client/Client.Tests.fs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ module Client.Tests
22

33
open Fable.Mocha
44

5+
open Shared.Tests
6+
57

68
let client = testList "Client" []
79

tests/Shared/Regular.Tests.fs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,30 @@ module Regexp =
117117
Expect.equal (Regexp.maybe a) (!? a) "maybe should be an alias of (!?)"
118118
Expect.equal (Regexp.many a) (!+ a) "many should be an alias of (!+)"
119119
Expect.equal (Regexp.init 3 a) (a ** 3) "init should be an alterantive for (**)"
120+
121+
testCase "Regex parsing" <| fun _ ->
122+
let inline (=?) actual expected = Expect.equal actual expected "should have been equal"
123+
let parse str = str |> Regexp.tryParse |> Option.get
124+
let fail str = Regexp.tryParse str =? None
125+
let a = Regexp.singleton 'a'
126+
let b = Regexp.singleton 'b'
127+
let c = Regexp.singleton 'c'
128+
parse "a|bb|cc" =? a + (b * b) + (c * c)
129+
parse "a|b(b|c)c" =? a + (b * (b + c) * c)
130+
parse "a|b(b|c)c*" =? a + (b * (b + c) * (!* c))
131+
parse "(a|b(b|c)c)*" =? !* (a + (b * (b + c) * c))
132+
parse "" =? Regexp.empty
133+
parse "()" =? Regexp.empty
134+
parse "(())" =? parse "()"
135+
parse "[]" =? Regexp.none
136+
parse "[A-Za-z_]" + Regexp.digit =? Regexp.word
137+
parse "." =? Regexp.dot
138+
parse @"[!--\.]" =? Regexp.ofSet [ '!' .. '-' ] + Regexp.singleton '.'
139+
parse @"\(\)" =? Regexp.ofSeq "()"
140+
fail "("
141+
fail ")"
142+
fail "())"
143+
fail "{}"
120144
]
121145

122146

0 commit comments

Comments
 (0)