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
|
//===----------------------------------------------------------------------===//
//
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2014 - 2023 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
// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
//
//===----------------------------------------------------------------------===//
import SwiftSyntax
import SwiftSyntaxBuilder
import XCTest
final class TriviaTests: XCTestCase {
func testLeadingTrivia() {
let decl = VariableDeclSyntax(
leadingTrivia: """
/// A doc comment
/* An inline comment */ \
""",
modifiers: [DeclModifierSyntax(name: .keyword(.static))],
bindingSpecifier: .keyword(.var)
) {
PatternBindingSyntax(
pattern: PatternSyntax("test"),
typeAnnotation: TypeAnnotationSyntax(type: TypeSyntax("String"))
)
}
assertBuildResult(
decl,
"""
/// A doc comment
/* An inline comment */ static var test: String
"""
)
}
func testTriviaConcatenation() {
let x = Trivia.newline
var y = x
y += .space
XCTAssertEqual(y, x + .space)
XCTAssertEqual(y, [.newlines(1), .spaces(1)])
}
func testAttachedTrivia() {
let testCases: [UInt: (DeclSyntax, String)] = [
#line: (
DeclSyntax("let x: Int").with(\.leadingTrivia, .space),
" let x: Int"
),
#line: (
DeclSyntax("let x: Int").with(\.trailingTrivia, .space),
"let x: Int "
),
]
for (line, testCase) in testCases {
let (builder, expected) = testCase
assertBuildResult(builder, expected, line: line)
}
}
func testAttachedListTrivia() {
let testCases: [UInt: (AttributeListSyntax, String)] = [
#line: (
AttributeListSyntax {
AttributeSyntax(attributeName: TypeSyntax("Test")).with(\.leadingTrivia, .space)
},
" @Test"
),
#line: (
AttributeListSyntax {
AttributeSyntax(attributeName: TypeSyntax("A")).with(\.trailingTrivia, .space)
AttributeSyntax(attributeName: TypeSyntax("B")).with(\.trailingTrivia, .space)
},
"@A @B "
),
]
for (line, testCase) in testCases {
let (builder, expected) = testCase
assertBuildResult(builder, expected, line: line)
}
}
}
|