1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125
|
//===----------------------------------------------------------------------===//
//
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2021-2022 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See https://swift.org/LICENSE.txt for license information
//
//===----------------------------------------------------------------------===//
@testable import _RegexParser
@testable import _StringProcessing
import XCTest
private let dplus = oneOrMore(
of: atom(.escaped(.decimalDigit)))
private let dotAST = concat(
dplus, ".", dplus, ".", dplus, ".", dplus)
private let dotASTQuoted = concat(
dplus, quote("."), dplus, quote("."), dplus, quote("."), dplus)
extension RegexTests {
func testSemanticWhitespace() {
parseTest(
#"\d+\.\d+\.\d+\.\d+"#,
dotAST, syntax: .traditional)
parseTest(
#" \d+ \. \d+ \. \d+ \. \d+ "#,
dotAST, syntax: .experimental)
parseTest(#"a b c"#, concat("a", " ", "b", " ", "c"), syntax: .traditional)
}
func testExperimentalQuotes() {
let quoteAST = concat(
"a", quote(" ."), "b")
parseTest(
#"a\Q .\Eb"#,
quoteAST, syntax: .traditional)
parseTest(
#"a \Q .\E b"#,
quoteAST, syntax: .experimental)
parseTest(
#"a" ."b"#,
quoteAST, syntax: .experimentalQuotes)
parseTest(
#"a " ." b"#,
quoteAST, syntax: .experimental)
parseTest(
#" \d+ \. \d+ \. \d+ \. \d+ "#,
dotAST, syntax: .experimental)
parseTest(
#" \d+ "." \d+ "." \d+ "." \d+ "#,
dotASTQuoted, syntax: .experimental)
}
func testExperimentalRanges() {
parseTest(
#"a{1,2}"#,
quantRange(1...2, of: "a"))
parseTest(
#"a{1...2}"#,
quantRange(1...2, of: "a"),
syntax: .experimentalRanges)
parseTest(
#"a{1..<3}"#,
quantRange(1...2, of: "a"),
syntax: .experimentalRanges)
parseTest(
#"a{,2}"#,
upToN(2, of: "a"))
parseTest(
#"a{...2}"#,
upToN(2, of: "a"),
syntax: .experimental)
parseTest(
#"a{..<3}"#,
upToN(2, of: "a"),
syntax: .experimental)
parseTest(
#"a{1,}"#,
nOrMore(1, of: "a"))
parseTest(
#"a{1...}"#,
nOrMore(1, of: "a"),
syntax: .experimental)
}
func testExperimentalCaptures() {
parseTest(
#"a(?:b)c"#,
concat("a", nonCapture("b"), "c"))
parseTest(
#"a(_:b)c"#,
concat("a", nonCapture("b"), "c"),
syntax: .experimentalCaptures)
// TODO: `(name: .*)`
}
func testExperimentalComments() {
// lexTest(
// #"(?#. network ) \d+ \. \d+"#,
// .comment(" network "), esc("d"), .plus,
// esc("."), esc("d"), .plus,
// syntax: .nonSemanticWhitespace)
// lexTest(
// #"/* network */ \d+ \. \d+"#,
// .comment(" network "), esc("d"), .plus,
// esc("."), esc("d"), .plus,
// syntax: .experimental)
//
// // TODO: better trivia stuff
// parseTest(
// "(?#. comment)b",
// concat(trivia(), "b")
// )
}
}
|