File: RenderHierarchyTranslatorTests.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 (128 lines) | stat: -rw-r--r-- 6,756 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
/*
 This source file is part of the Swift.org open source project

 Copyright (c) 2021-2022 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
*/

@testable import SwiftDocC
import XCTest

class RenderHierarchyTranslatorTests: XCTestCase {
    func test() throws {
        let (bundle, context) = try testBundleAndContext(named: "TestBundle")
        let technologyReference = ResolvedTopicReference(bundleIdentifier: bundle.identifier, path: "/tutorials/TestOverview", sourceLanguage: .swift)
        
        var translator = RenderHierarchyTranslator(context: context, bundle: bundle)
        let renderHierarchy = translator.visitTechnologyNode(technologyReference)?.hierarchy

        // Verify that the hierarchy translator has collected all topic references from the hierarchy
        XCTAssertEqual(translator.collectedTopicReferences.sorted(by: { $0.absoluteString <= $1.absoluteString }).map{ $0.absoluteString }, [
            "doc://org.swift.docc.example/tutorials/Test-Bundle/TestTutorial",
            "doc://org.swift.docc.example/tutorials/Test-Bundle/TestTutorial#Create-a-New-AR-Project-%F0%9F%92%BB",
            "doc://org.swift.docc.example/tutorials/Test-Bundle/TestTutorial#Duplicate",
            "doc://org.swift.docc.example/tutorials/Test-Bundle/TestTutorial#Initiate-ARKit-Plane-Detection",
            "doc://org.swift.docc.example/tutorials/Test-Bundle/TestTutorial2",
            "doc://org.swift.docc.example/tutorials/Test-Bundle/TestTutorial2#Create-a-New-AR-Project",
            "doc://org.swift.docc.example/tutorials/Test-Bundle/TestTutorialArticle",
            "doc://org.swift.docc.example/tutorials/Test-Bundle/TestTutorialArticle#A-Section",
            "doc://org.swift.docc.example/tutorials/Test-Bundle/TestTutorialArticle#This-is-an-H2",
            "doc://org.swift.docc.example/tutorials/Test-Bundle/TestTutorialArticle#This-is-an-H3",
            "doc://org.swift.docc.example/tutorials/Test-Bundle/TutorialMediaWithSpaces",
            "doc://org.swift.docc.example/tutorials/Test-Bundle/TutorialMediaWithSpaces#Create-a-New-AR-Project",
            "doc://org.swift.docc.example/tutorials/TestOverview",
            "doc://org.swift.docc.example/tutorials/TestOverview/Chapter-1",
        ])
        
        let pending = translator.linkReferences
            .map({ pair -> String in
                return pair.value.title + ", " + pair.value.url
            })
            .sorted()

        // Verify that the hierarchy translator has collected all "fake" references
        // & their titles that need to be added to the node
        XCTAssertEqual(pending, [
            "Check Your Understanding, /tutorials/test-bundle/testtutorial#Check-Your-Understanding",
            "Check Your Understanding, /tutorials/test-bundle/testtutorial2#Check-Your-Understanding",
            "Check Your Understanding, /tutorials/test-bundle/tutorialmediawithspaces#Check-Your-Understanding",
        ])
        
        guard case .tutorials(let technologyHierarchy)? = renderHierarchy else {
            XCTFail("Unexpected hierarchy type")
            return
        }

        XCTAssertEqual(technologyHierarchy.modules?.count, 1)
        
        guard let modules = technologyHierarchy.modules, !modules.isEmpty else {
            XCTFail("Could not find modules")
            return
        }
        let chapter = modules[0]
        
        XCTAssertEqual(chapter.reference.identifier, "doc://org.swift.docc.example/tutorials/TestOverview/Chapter-1")
        
        XCTAssertEqual(chapter.tutorials.count, 4)
        
        let tutorial = chapter.tutorials[0]
        
        XCTAssertEqual(tutorial.reference.identifier, "doc://org.swift.docc.example/tutorials/Test-Bundle/TestTutorial")
        
        XCTAssertEqual(tutorial.landmarks.count, 4)
        
        let section1 = tutorial.landmarks[0]
        let section2 = tutorial.landmarks[1]
        let section3 = tutorial.landmarks[2]
        let assessments = tutorial.landmarks[3]
        
        XCTAssertEqual(section1.reference.identifier, "doc://org.swift.docc.example/tutorials/Test-Bundle/TestTutorial#Create-a-New-AR-Project-%F0%9F%92%BB")
        XCTAssertEqual(section2.reference.identifier, "doc://org.swift.docc.example/tutorials/Test-Bundle/TestTutorial#Initiate-ARKit-Plane-Detection")
        XCTAssertEqual(section3.reference.identifier, "doc://org.swift.docc.example/tutorials/Test-Bundle/TestTutorial#Duplicate")
        XCTAssertEqual(assessments.reference.identifier, "doc://org.swift.docc.example/tutorials/Test-Bundle/TestTutorial#Check-Your-Understanding")
    }
    
    func testMultiplePaths() throws {
        // Curate "TestTutorial" under MyKit as well as TechnologyX.
        let (_, bundle, context) = try testBundleAndContext(copying: "TestBundle") { root in
            let myKitURL = root.appendingPathComponent("documentation/mykit.md")
            let text = try String(contentsOf: myKitURL).replacingOccurrences(of: "## Topics", with: """
            ## Topics

            ### Tutorials
             - <doc:/tutorials/Test-Bundle/TestTutorial>
             - <doc:/tutorials/Test-Bundle/TestTutorial2>
            """)
            try text.write(to: myKitURL, atomically: true, encoding: .utf8)
        }
        
        // Get a translated render node
        let identifier = ResolvedTopicReference(bundleIdentifier: "org.swift.docc.example", path: "/tutorials/Test-Bundle/TestTutorial", sourceLanguage: .swift)
        let node = try context.entity(with: identifier)
        var translator = RenderNodeTranslator(context: context, bundle: bundle, identifier: identifier, source: nil)
        let renderNode = translator.visit(node.semantic) as! RenderNode

        guard let renderHierarchy = renderNode.hierarchy, case RenderHierarchy.tutorials(let hierarchy) = renderHierarchy else {
            XCTFail("Did not find the node hierarchy")
            return
        }
        
        XCTAssertEqual(hierarchy.paths.sorted(by: { $0.count < $1.count }), [
            [
                "doc://org.swift.docc.example/documentation/MyKit",
            ],
            [
                "doc://org.swift.docc.example/documentation/MyKit",
                "doc://org.swift.docc.example/documentation/Test-Bundle/article",
            ],
            [
                "doc://org.swift.docc.example/tutorials/TestOverview",
                "doc://org.swift.docc.example/tutorials/TestOverview/$volume",
                "doc://org.swift.docc.example/tutorials/TestOverview/Chapter-1",
            ],
        ])
    }
}