File: IndexActionTests.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 (104 lines) | stat: -rw-r--r-- 4,399 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
/*
 This source file is part of the Swift.org open source project

 Copyright (c) 2021 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 XCTest
import Foundation
@testable import SwiftDocC
@testable import SwiftDocCUtilities
import Markdown
import SwiftDocCTestUtilities

class IndexActionTests: XCTestCase {
    #if !os(iOS)
    func testIndexActionOutputIsDeterministic() throws {
        // Convert a test bundle as input for the IndexAction
        let bundleURL = Bundle.module.url(forResource: "TestBundle", withExtension: "docc", subdirectory: "Test Bundles")!
        
        let targetURL = try createTemporaryDirectory()
        let templateURL = try createTemporaryDirectory().appendingPathComponent("template")
        try Folder.emptyHTMLTemplateDirectory.write(to: templateURL)
        
        let targetBundleURL = targetURL.appendingPathComponent("Result.builtdocs")
        
        var action = try ConvertAction(
            documentationBundleURL: bundleURL,
            outOfProcessResolver: nil,
            analyze: false,
            targetDirectory: targetBundleURL,
            htmlTemplateDirectory: templateURL,
            emitDigest: false,
            currentPlatforms: nil,
            temporaryDirectory: createTemporaryDirectory()
        )
        _ = try action.perform(logHandle: .none)
        
        let bundleIdentifier = "org.swift.docc.example"
        
        // Repeatedly index the same bundle and verify that the result is the same every time.
        
        var resultIndexDumps = Set<String>()
        
        for iteration in 1...10 {
            let indexURL = targetURL.appendingPathComponent("index_\(iteration)")
            
            let engine = DiagnosticEngine(filterLevel: .warning)
            
            var indexAction = try IndexAction(
                documentationBundleURL: targetBundleURL,
                outputURL: indexURL,
                bundleIdentifier: bundleIdentifier,
                diagnosticEngine: engine
            )
            _ = try indexAction.perform(logHandle: .none)
            
            let index = try NavigatorIndex.readNavigatorIndex(url: indexURL)
            
            resultIndexDumps.insert(index.navigatorTree.root.dumpTree())
            XCTAssertTrue(engine.problems.isEmpty, "Indexing bundle at \(targetURL) resulted in unexpected issues")
        }
        
        // All dumps should be the same, so there should only be one unique index dump
        XCTAssertEqual(resultIndexDumps.count, 1)
    }
    #endif
    
    func testIndexActionOutputContainsInterfaceLanguageContent() throws {
        // Convert a test bundle as input for the IndexAction
        let bundleURL = Bundle.module.url(
            forResource: "SingleArticleTestBundle", withExtension: "docc", subdirectory: "Test Bundles")!
        let targetURL = try createTemporaryDirectory()
        let templateURL = try createTemporaryDirectory().appendingPathComponent("template")
        try Folder.emptyHTMLTemplateDirectory.write(to: templateURL)
        let targetBundleURL = targetURL.appendingPathComponent("Result.builtdocs")
        var action = try ConvertAction(
            documentationBundleURL: bundleURL,
            outOfProcessResolver: nil,
            analyze: false,
            targetDirectory: targetBundleURL,
            htmlTemplateDirectory: templateURL,
            emitDigest: false,
            currentPlatforms: nil,
            temporaryDirectory: createTemporaryDirectory()
        )
        _ = try action.perform(logHandle: .none)
        let bundleIdentifier = "org.swift.docc.example"
        let indexURL = targetURL.appendingPathComponent("index")
        let engine = DiagnosticEngine(filterLevel: .warning)
        var indexAction = try IndexAction(
            documentationBundleURL: targetBundleURL,
            outputURL: indexURL,
            bundleIdentifier: bundleIdentifier,
            diagnosticEngine: engine
        )
        let indexPerform = try indexAction.perform(logHandle: .none)
        let index = try NavigatorIndex.readNavigatorIndex(url: indexPerform.outputs[0])
        XCTAssertEqual(index.availabilityIndex.interfaceLanguages.count, 1)
    }
}