File: FileTests.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 (101 lines) | stat: -rw-r--r-- 3,942 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
/*
 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 XCTest
@testable import SwiftDocC
@testable import SwiftDocCUtilities
import SwiftDocCTestUtilities

class FileTests: XCTestCase {
    func testAbsoluteURL() {
        XCTAssertEqual(TextFile(name: "myfile.txt", utf8Content: "").absoluteURL.path, "/myfile.txt")
        XCTAssertEqual(Folder(name: "myDir", content: []).absoluteURL.path, "/myDir")
        XCTAssertEqual(CopyOfFile(original: URL(fileURLWithPath: "myfile.txt")).absoluteURL.path, "/myfile.txt")
        XCTAssertEqual(CopyOfFile(original: URL(fileURLWithPath: "myfile.txt"), newName: "yourfile.txt").absoluteURL.path, "/yourfile.txt")
    }
    
    func testCreateFromDisk() throws {
        let testBundleURL = Bundle.module.url(
            forResource: "TestBundle", withExtension: "docc", subdirectory: "Test Bundles")!
        
        // Generates a list of all paths recursively inside a folder
        func pathsIn(folder: Folder, url: URL) -> [String] {
            var result = [String]()
            for file in folder.content {
                result.append(url.appendingPathComponent(file.name).path)

                switch file {
                    case let folder as Folder:
                        result.append(contentsOf: pathsIn(folder: folder, url: url.appendingPathComponent(file.name)))
                    default: break
                }
            }
            return result
        }

        // Load the contents of a folder on disk
        guard let diskContent = FileManager.default.enumerator(at: testBundleURL, includingPropertiesForKeys: nil, options: .skipsHiddenFiles)?.allObjects as? [URL] else {
            XCTFail("Could not read \(testBundleURL.path)")
            return
        }
        let diskPaths = Set(diskContent.map({ $0.path.replacingOccurrences(of: testBundleURL.path, with: "") })).sorted()
        
        // Load the disk folder in a `Folder` instance
        let folder = try Folder.createFromDisk(url: testBundleURL)
        let folderPaths = pathsIn(folder: folder, url: URL(string: "/")!).sorted()
        
        // Compare the paths from disk and in the `Folder` are identical
        XCTAssertEqual(diskPaths.count, folderPaths.count)
        XCTAssertEqual(diskPaths, folderPaths)
    }
    
    func testMakingDirectoryStructure() throws {
        XCTAssertEqual(Folder.makeStructure(filePaths: ["one/two/a.json", "one/two/b.json"]).first!.dump(), """
        one/
        ╰─ two/
           ├─ a.json
           ╰─ b.json
        """)
        
        XCTAssertEqual(Folder.makeStructure(filePaths: ["one/two.json", "one/two/three.json"]).first!.dump(), """
        one/
        ├─ two.json
        ╰─ two/
           ╰─ three.json
        """)
        
        XCTAssertEqual(Folder.makeStructure(filePaths: [
            "documentation/first/index.html",
            "documentation/first/abc-page/index.html",
            "documentation/first/xyz-page/index.html",
        ]).first!.dump(), """
        documentation/
        ╰─ first/
           ├─ abc-page/
           │  ╰─ index.html
           ├─ index.html
           ╰─ xyz-page/
              ╰─ index.html
        """)
        
        XCTAssertEqual(Folder.makeStructure(filePaths: [
            "data/documentation/first.json",
            "data/documentation/first/abc-page.json",
            "data/documentation/first/xyz-page.json",
        ]).first!.dump(), """
        data/
        ╰─ documentation/
           ├─ first.json
           ╰─ first/
              ├─ abc-page.json
              ╰─ xyz-page.json
        """)
    }
}