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
|
/*
This source file is part of the Swift.org open source project
Copyright (c) 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 Swift project authors
*/
import Foundation
import Markdown
import XCTest
@testable import SwiftDocC
class PageKindTests: XCTestCase {
private func generateRenderNodeFromBundle(bundleName: String, resolvedTopicPath: String) throws -> RenderNode {
let (bundle, context) = try testBundleAndContext(named: bundleName)
let reference = ResolvedTopicReference(
bundleIdentifier: bundle.identifier,
path: resolvedTopicPath,
sourceLanguage: .swift
)
let article = try XCTUnwrap(context.entity(with: reference).semantic as? Article)
var translator = RenderNodeTranslator(
context: context,
bundle: bundle,
identifier: reference,
source: nil
)
return try XCTUnwrap(translator.visitArticle(article) as? RenderNode)
}
func testPageKindSampleCode() throws {
let renderNode = try generateRenderNodeFromBundle(
bundleName: "SampleBundle",
resolvedTopicPath: "/documentation/SampleBundle/MyLocalSample"
)
XCTAssertEqual(renderNode.metadata.role, RenderMetadata.Role.sampleCode.rawValue)
XCTAssertEqual(renderNode.metadata.roleHeading, Metadata.PageKind.Kind.sampleCode.titleHeading)
}
func testPageKindArticle() throws {
let renderNode = try generateRenderNodeFromBundle(
bundleName: "SampleBundle",
resolvedTopicPath: "/documentation/SampleBundle/MySample"
)
XCTAssertEqual(renderNode.metadata.role, RenderMetadata.Role.article.rawValue)
XCTAssertEqual(renderNode.metadata.roleHeading, Metadata.PageKind.Kind.article.titleHeading)
}
func testPageKindDefault() throws {
let renderNode = try generateRenderNodeFromBundle(
bundleName: "AvailabilityBundle",
resolvedTopicPath: "/documentation/AvailabilityBundle/ComplexAvailable"
)
XCTAssertEqual(renderNode.metadata.role, "article")
XCTAssertEqual(renderNode.metadata.roleHeading, "Article")
}
func testPageKindReference() throws {
let renderNode = try generateRenderNodeFromBundle(
bundleName: "SampleBundle",
resolvedTopicPath: "/documentation/SomeSample"
)
let sampleReference = try XCTUnwrap(renderNode.references["doc://org.swift.docc.sample/documentation/SampleBundle/MyLocalSample"] as? TopicRenderReference)
XCTAssertEqual(sampleReference.role, RenderMetadata.Role.sampleCode.rawValue)
}
func testValidMetadataWithOnlyPageKind() throws {
let source = """
@Metadata {
@PageKind(article)
}
"""
let document = Document(parsing: source, options: .parseBlockDirectives)
let directive = document.child(at: 0) as? BlockDirective
XCTAssertNotNil(directive)
let (bundle, context) = try testBundleAndContext(named: "SampleBundle")
directive.map { directive in
var problems = [Problem]()
XCTAssertEqual(Metadata.directiveName, directive.name)
let metadata = Metadata(from: directive, source: nil, for: bundle, in: context, problems: &problems)
XCTAssertNotNil(metadata)
XCTAssertNotNil(metadata?.pageKind)
XCTAssertEqual(metadata?.pageKind?.kind, .article)
XCTAssert(problems.isEmpty)
}
}
// Verify that we assign the `Collection` role to the root article of a
// documentation catalog that contains only one article.
func testRoleForSingleArticleCatalog() throws {
let renderNode = try generateRenderNodeFromBundle(
bundleName: "BundleWithSingleArticle",
resolvedTopicPath: "/documentation/Article"
)
XCTAssertEqual(renderNode.metadata.role, RenderMetadata.Role.collection.rawValue)
}
// Verify we assign the `Collection` role to the root article of an article-only
// documentation catalog that doesn't include manual curation
func testRoleForArticleOnlyCatalogWithNoCuration() throws {
let renderNode = try generateRenderNodeFromBundle(
bundleName: "BundleWithArticlesNoCurated",
resolvedTopicPath: "/documentation/Article"
)
XCTAssertEqual(renderNode.metadata.role, RenderMetadata.Role.collection.rawValue)
}
}
|