Skip to content

Commit 8f69b2a

Browse files
committed
Swift: Add some test cases aimed at regex parsing correctness.
1 parent a8aa335 commit 8f69b2a

File tree

2 files changed

+125
-0
lines changed

2 files changed

+125
-0
lines changed

swift/ql/test/library-tests/regex/parse.expected

Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6381,3 +6381,105 @@ regex.swift:
63816381

63826382
# 172| [RegExpConstant, RegExpNormalChar]
63836383
# 172| bb
6384+
6385+
# 180| [RegExpCharacterClass] [a-z]
6386+
#-----| 0 -> [RegExpCharacterRange] a-z
6387+
6388+
# 180| [RegExpConstant, RegExpNormalChar] a
6389+
6390+
# 180| [RegExpCharacterRange] a-z
6391+
#-----| 0 -> [RegExpConstant, RegExpNormalChar] a
6392+
#-----| 1 -> [RegExpConstant, RegExpNormalChar] z
6393+
6394+
# 180| [RegExpConstant, RegExpNormalChar] z
6395+
6396+
# 181| [RegExpCharacterClass] [a-zA-Z]
6397+
#-----| 0 -> [RegExpCharacterRange] a-z
6398+
#-----| 1 -> [RegExpCharacterRange] A-Z
6399+
6400+
# 181| [RegExpConstant, RegExpNormalChar] a
6401+
6402+
# 181| [RegExpCharacterRange] a-z
6403+
#-----| 0 -> [RegExpConstant, RegExpNormalChar] a
6404+
#-----| 1 -> [RegExpConstant, RegExpNormalChar] z
6405+
6406+
# 181| [RegExpConstant, RegExpNormalChar] z
6407+
6408+
# 181| [RegExpConstant, RegExpNormalChar] A
6409+
6410+
# 181| [RegExpCharacterRange] A-Z
6411+
#-----| 0 -> [RegExpConstant, RegExpNormalChar] A
6412+
#-----| 1 -> [RegExpConstant, RegExpNormalChar] Z
6413+
6414+
# 181| [RegExpConstant, RegExpNormalChar] Z
6415+
6416+
# 184| [RegExpCharacterClass] [a-]
6417+
#-----| 0 -> [RegExpConstant, RegExpNormalChar] a
6418+
#-----| 1 -> [RegExpConstant, RegExpNormalChar] -
6419+
6420+
# 184| [RegExpConstant, RegExpNormalChar] a
6421+
6422+
# 184| [RegExpConstant, RegExpNormalChar] -
6423+
6424+
# 185| [RegExpCharacterClass] [-a]
6425+
#-----| 0 -> [RegExpConstant, RegExpNormalChar] -
6426+
#-----| 1 -> [RegExpConstant, RegExpNormalChar] a
6427+
6428+
# 185| [RegExpConstant, RegExpNormalChar] -
6429+
6430+
# 185| [RegExpConstant, RegExpNormalChar] a
6431+
6432+
# 186| [RegExpCharacterClass] [-]
6433+
#-----| 0 -> [RegExpConstant, RegExpNormalChar] -
6434+
6435+
# 186| [RegExpConstant, RegExpNormalChar] -
6436+
6437+
# 187| [RegExpCharacterClass] [*]
6438+
#-----| 0 -> [RegExpConstant, RegExpNormalChar] *
6439+
6440+
# 187| [RegExpConstant, RegExpNormalChar] *
6441+
6442+
# 188| [RegExpCharacterClass] [^a]
6443+
#-----| 0 -> [RegExpConstant, RegExpNormalChar] a
6444+
6445+
# 188| [RegExpConstant, RegExpNormalChar] a
6446+
6447+
# 189| [RegExpCharacterClass] [a^]
6448+
#-----| 0 -> [RegExpConstant, RegExpNormalChar] a
6449+
#-----| 1 -> [RegExpConstant, RegExpNormalChar] ^
6450+
6451+
# 189| [RegExpConstant, RegExpNormalChar] a
6452+
6453+
# 189| [RegExpConstant, RegExpNormalChar] ^
6454+
6455+
# 190| [RegExpCharacterClass] [\\]
6456+
#-----| 0 -> [RegExpConstant, RegExpEscape] \\
6457+
6458+
# 190| [RegExpConstant, RegExpEscape] \\
6459+
6460+
# 191| [RegExpCharacterClass] [\\\]]
6461+
#-----| 0 -> [RegExpConstant, RegExpEscape] \\
6462+
#-----| 1 -> [RegExpConstant, RegExpEscape] \]
6463+
6464+
# 191| [RegExpConstant, RegExpEscape] \\
6465+
6466+
# 191| [RegExpConstant, RegExpEscape] \]
6467+
6468+
# 192| [RegExpCharacterClass] [:]
6469+
#-----| 0 -> [RegExpConstant, RegExpNormalChar] :
6470+
6471+
# 192| [RegExpConstant, RegExpNormalChar] :
6472+
6473+
# 193| [RegExpNamedCharacterProperty] [:digit:]
6474+
6475+
# 194| [RegExpNamedCharacterProperty] [:alnum:]
6476+
6477+
# 197| [RegExpCharacterClass] []a]
6478+
#-----| 0 -> [RegExpConstant, RegExpNormalChar] ]
6479+
#-----| 1 -> [RegExpConstant, RegExpNormalChar] a
6480+
6481+
# 197| [RegExpConstant, RegExpNormalChar] ]
6482+
6483+
# 197| [RegExpConstant, RegExpNormalChar] a
6484+
6485+
# 198| [RegExpNamedCharacterProperty] [:aaaaa:]

swift/ql/test/library-tests/regex/regex.swift

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,4 +173,27 @@ func myRegexpMethodsTests(b: Bool, str_unknown: String) throws {
173173
aa|
174174
bb
175175
""").firstMatch(in: input) // $ input=input regex=aa|NEWLINEbb
176+
177+
// --- exploring parser correctness ---
178+
179+
// ranges
180+
_ = try Regex("[a-z]").firstMatch(in: input) // $ input=input regex=[a-z]
181+
_ = try Regex("[a-zA-Z]").firstMatch(in: input) // $ input=input regex=[a-zA-Z]
182+
183+
// character classes
184+
_ = try Regex("[a-]").firstMatch(in: input) // $ input=input regex=[a-]
185+
_ = try Regex("[-a]").firstMatch(in: input) // $ input=input regex=[-a]
186+
_ = try Regex("[-]").firstMatch(in: input) // $ input=input regex=[-]
187+
_ = try Regex("[*]").firstMatch(in: input) // $ input=input regex=[*]
188+
_ = try Regex("[^a]").firstMatch(in: input) // $ input=input regex=[^a]
189+
_ = try Regex("[a^]").firstMatch(in: input) // $ input=input regex=[a^]
190+
_ = try Regex(#"[\\]"#).firstMatch(in: input) // $ input=input regex=[\\]
191+
_ = try Regex(#"[\\\]]"#).firstMatch(in: input) // $ input=input regex=[\\\]]
192+
_ = try Regex("[:]").firstMatch(in: input) // $ input=input regex=[:]
193+
_ = try Regex("[:digit:]").firstMatch(in: input) // $ input=input regex=[:digit:] SPURIOUS: $hasParseFailure
194+
_ = try Regex("[:alnum:]").firstMatch(in: input) // $ input=input regex=[:alnum:] SPURIOUS: $hasParseFailure
195+
196+
// invalid (Swift doesn't like these regexs)
197+
_ = try Regex("[]a]").firstMatch(in: input) // this is valid in other regex implementations, and is likely harmless to accept
198+
_ = try Regex("[:aaaaa:]").firstMatch(in: input) // $ hasParseFailure
176199
}

0 commit comments

Comments
 (0)