File: TestSupport.swift

package info (click to toggle)
swiftlang 6.2.3-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 2,856,264 kB
  • sloc: cpp: 9,995,718; ansic: 2,234,019; asm: 1,092,167; python: 313,940; objc: 82,726; f90: 80,126; lisp: 38,373; pascal: 25,580; sh: 20,378; ml: 5,058; perl: 4,751; makefile: 4,725; awk: 3,535; javascript: 3,018; xml: 918; fortran: 664; cs: 573; ruby: 396
file content (68 lines) | stat: -rw-r--r-- 2,332 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
import Foundation

enum TestSupport {
    struct Error: Swift.Error, CustomStringConvertible {
        let description: String

        init(description: String) {
            self.description = description
        }

        init(errno: Int32) {
            self.init(description: String(cString: strerror(errno)))
        }
    }

    class TemporaryDirectory {
        let path: String
        var url: URL { URL(fileURLWithPath: path) }

        init() throws {
            let tempdir = URL(fileURLWithPath: NSTemporaryDirectory())
            let templatePath = tempdir.appendingPathComponent("WasmKit.XXXXXX")
            var template = [UInt8](templatePath.path.utf8).map({ Int8($0) }) + [Int8(0)]

            #if os(Windows)
                if _mktemp_s(&template, template.count) != 0 {
                    throw Error(errno: errno)
                }
                if _mkdir(template) != 0 {
                    throw Error(errno: errno)
                }
            #else
                if mkdtemp(&template) == nil {
                    #if os(Android)
                        throw Error(errno: __errno().pointee)
                    #else
                        throw Error(errno: errno)
                    #endif
                }
            #endif

            self.path = String(cString: template)
        }

        func createDir(at relativePath: String) throws {
            let directoryURL = url.appendingPathComponent(relativePath)
            try FileManager.default.createDirectory(at: directoryURL, withIntermediateDirectories: true, attributes: nil)
        }

        func createFile(at relativePath: String, contents: String) throws {
            let fileURL = url.appendingPathComponent(relativePath)
            guard let data = contents.data(using: .utf8) else { return }
            FileManager.default.createFile(atPath: fileURL.path, contents: data, attributes: nil)
        }

        func createSymlink(at relativePath: String, to target: String) throws {
            let linkURL = url.appendingPathComponent(relativePath)
            try FileManager.default.createSymbolicLink(
                atPath: linkURL.path,
                withDestinationPath: target
            )
        }

        deinit {
            _ = try? FileManager.default.removeItem(atPath: path)
        }
    }
}