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)
}
}
|