File: SnippetTests.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 (159 lines) | stat: -rw-r--r-- 4,273 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
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
//===----------------------------------------------------------------------===//
//
// This source file is part of the Swift open source project
//
// Copyright (c) 2014-2021 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See http://swift.org/LICENSE.txt for license information
// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
//
//===----------------------------------------------------------------------===//

import Basics
@testable import PackageModel
import XCTest

class SnippetTests: XCTestCase {
    let fakeSourceFilePath = AbsolutePath("/fake/path/to/test.swift")

    /// Test the contents of the ``Snippet`` model when parsing an empty file.
    /// Currently, no errors are emitted and most things are either nil or empty.
    func testEmptySourceFile() {
        let source = ""
        let snippet = Snippet(parsing: source, path: fakeSourceFilePath)
        XCTAssertEqual(snippet.path, fakeSourceFilePath)
        XCTAssertTrue(snippet.explanation.isEmpty)
        XCTAssertTrue(snippet.presentationCode.isEmpty)
        XCTAssertNil(snippet.groupName)
        XCTAssertEqual("test", snippet.name)
    }

    /// Test the contents of the ``Snippet`` model when parsing a typical
    /// source file.
    func testBasic() {
        let explanation = "This snippet does a foo. Try it when XYZ."
        let presentationCode = """
        import Module

        func foo(x: X) {}
        """

        let source = """

        //! \(explanation)

        \(presentationCode)

        // MARK: HIDE

        print(foo(x: x()))
        """

        let snippet = Snippet(parsing: source, path: fakeSourceFilePath)

        XCTAssertEqual(snippet.path, fakeSourceFilePath)
        XCTAssertEqual(explanation, snippet.explanation)
        XCTAssertEqual(presentationCode, snippet.presentationCode)
        XCTAssertNil(snippet.groupName)
        XCTAssertEqual("test", snippet.name)
    }

    /// Test that multiple consecutive newlines in a snippet's
    /// presentation code is coalesced into no more than two newlines,
    /// and test that newlines at the beginning and end of are stripped.
    func testMultiNewlineCoalescing() {
        let explanation = "This snippet does a foo. Try it when XYZ."
        let presentationCode = """


        import Module




        func foo(x: X) {}


        """

        let source = """

        //!
        //! \(explanation)
        //!

        \(presentationCode)

        // MARK: HIDE

        print(foo(x: x()))
        """

        let expectedPresentationCode = """
        import Module

        func foo(x: X) {}
        """

        let snippet = Snippet(parsing: source, path: fakeSourceFilePath)
        XCTAssertEqual(explanation, snippet.explanation)
        XCTAssertEqual(expectedPresentationCode, snippet.presentationCode)
    }

    /// Test that toggling back and forth with `mark: hide` and `mark: show`
    /// works as intended.
    func testMarkHideShowToggle() {
        let source = """
        shown1

        // mark: hide
        hidden1

        // mark: show
        shown2

        // mark: hide
        hidden2

        // mark: show
        shown3
        """

        let expectedPresentationCode = """
        shown1

        shown2
        
        shown3
        """

        let snippet = Snippet(parsing: source, path: fakeSourceFilePath)
        XCTAssertFalse(snippet.presentationCode.contains("hidden"))
        XCTAssertFalse(snippet.explanation.contains("hidden"))
        XCTAssertEqual(expectedPresentationCode, snippet.presentationCode)
    }

    /// Tests that extra indentation is removed when extracting some inner
    /// part of nested code.
    func testRemoveExtraIndentation() {
        let source = """
        // mark: hide
        struct Outer {
          struct Inner {
            // mark: show
            struct InnerInner {
            }
            // mark: hide
          }
        }
        """

        let expectedPresentationCode = """
        struct InnerInner {
        }
        """
        let snippet = Snippet(parsing: source, path: fakeSourceFilePath)
        XCTAssertEqual(expectedPresentationCode, snippet.presentationCode)
    }
}