Skip to content

Commit

Permalink
Add swift-testing integration
Browse files Browse the repository at this point in the history
  • Loading branch information
Kyle-Ye committed Apr 8, 2024
1 parent 907674c commit 19fb1c6
Show file tree
Hide file tree
Showing 3 changed files with 128 additions and 8 deletions.
97 changes: 97 additions & 0 deletions [email protected]
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
// swift-tools-version:5.10
/*
This source file is part of the Swift.org open source project

Copyright (c) 2021-2024 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 Swift project authors
*/

import PackageDescription

func envEnable(_ key: String, default defaultValue: Bool = false) -> Bool {
guard let value = Context.environment[key] else {
return defaultValue
}
if value == "1" {
return true
} else if value == "0" {
return false
} else {
return defaultValue
}
}

let isSwiftCI = Context.environment["SWIFTCI_USE_LOCAL_DEPS"] != nil

let cmarkPackageName = isSwiftCI ? "cmark" : "swift-cmark"

let markdownTarget = Target.target(
name: "Markdown",
dependencies: [
"CAtomic",
.product(name: "cmark-gfm", package: cmarkPackageName),
.product(name: "cmark-gfm-extensions", package: cmarkPackageName),
],
exclude: [
"CMakeLists.txt"
]
)
let markdownTestTarget = Target.testTarget(
name: "MarkdownTests",
dependencies: ["Markdown"],
resources: [.process("Visitors/Everything.md")]
)

let package = Package(
name: "swift-markdown",
products: [
.library(
name: "Markdown",
targets: ["Markdown"]),
],
targets: [
.target(name: "CAtomic"),
markdownTarget,
markdownTestTarget,
]
)

// If the `SWIFTCI_USE_LOCAL_DEPS` environment variable is set,
// we're building in the Swift.org CI system alongside other projects in the Swift toolchain and
// we can depend on local versions of our dependencies instead of fetching them remotely.
if !isSwiftCI {
// Building standalone, so fetch all dependencies remotely.
package.dependencies += [
.package(url: "https://github.com/apple/swift-cmark.git", branch: "gfm"),
]

// SwiftPM command plugins are only supported by Swift version 5.6 and later.
#if swift(>=5.6)
package.dependencies += [
.package(url: "https://github.com/apple/swift-docc-plugin", from: "1.1.0"),
]
#endif
} else {
// Building in the Swift.org CI system, so rely on local versions of dependencies.
package.dependencies += [
.package(path: "../cmark"),
]
}

// Enable swift-testing by default on CI environment
let enableSwiftTesting = envEnable("SWIFT_MARKDOWN_SWIFT_TESTING_INTEGRATION", default: true)

if enableSwiftTesting {
package.dependencies += [
.package(url: "https://github.com/apple/swift-testing.git", exact: "0.6.0"),
]
markdownTestTarget.dependencies.append(
.product(name: "Testing", package: "swift-testing")
)
var swiftSettings = markdownTestTarget.swiftSettings ?? []
swiftSettings.append(.define("SWIFT_MARKDOWN_SWIFT_TESTING_INTEGRATION"))
markdownTestTarget.swiftSettings = swiftSettings
}
19 changes: 11 additions & 8 deletions Tests/MarkdownTests/Parsing/BlockDirectiveParserTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -1215,27 +1215,30 @@ class BlockDirectiveArgumentParserTests: XCTestCase {
"""
)
}
}

#if SWIFT_MARKDOWN_SWIFT_TESTING_INTEGRATION
import Testing

// FIXME: swift-testing macro for specifying the relationship between a bug and a test
// Uncomment the following code when we integrate swift-testing
// @Test("Directive MultiLine WithoutContent Parsing", .bug("#152", relationship: .verifiesFix))
struct _BlockDirectiveArgumentParserTests {
@Test("Directive MultiLine WithoutContent Parsing", .bug("#152", relationship: .verifiesFix))
func testDirectiveMultiLineWithoutContentParsing() throws {
let source = """
let source = #"""
@Image(
source: "example.png",
alt: "Example image"
)
"""

"""#
let document = Document(parsing: source, options: .parseBlockDirectives)
_ = try XCTUnwrap(document.child(at: 0) as? BlockDirective)
_ = try #require(document.child(at: 0) as? BlockDirective)
let expected = #"""
Document @1:1-4:2
└─ BlockDirective @1:1-4:2 name: "Image"
├─ Argument text segments:
| @2:1-2:25: " source: \"example.png\","
| @3:1-3:23: " alt: \"Example image\""
"""#
XCTAssertEqual(expected, document.debugDescription(options: .printSourceLocations))
#expect(document.debugDescription(options: .printSourceLocations) == expected)
}
}
#endif
20 changes: 20 additions & 0 deletions Tests/MarkdownTests/Scaffolding.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
/*
This source file is part of the Swift.org open source project

Copyright (c) 2024 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 Swift project authors
*/

#if SWIFT_MARKDOWN_SWIFT_TESTING_INTEGRATION
import Testing
import XCTest

final class AllTests: XCTestCase {
func testAll() async {
await XCTestScaffold.runAllTests(hostedBy: self)
}
}
#endif

0 comments on commit 19fb1c6

Please sign in to comment.