File: SyntaxOptionsTests.swift

package info (click to toggle)
swiftlang 6.0.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,519,992 kB
  • sloc: cpp: 9,107,863; ansic: 2,040,022; asm: 1,135,751; python: 296,500; objc: 82,456; f90: 60,502; lisp: 34,951; pascal: 19,946; sh: 18,133; perl: 7,482; ml: 4,937; javascript: 4,117; makefile: 3,840; awk: 3,535; xml: 914; fortran: 619; cs: 573; ruby: 573
file content (125 lines) | stat: -rw-r--r-- 3,122 bytes parent folder | download
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")
//    )
  }
}