File: SettingsBasedTests.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 (48 lines) | stat: -rw-r--r-- 2,868 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
//===----------------------------------------------------------------------===//
//
// This source file is part of the Swift open source project
//
// Copyright (c) 2025 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See http://swift.org/LICENSE.txt for license information
// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
//
//===----------------------------------------------------------------------===//

package import SWBCore
package import SWBUtil
import Testing

extension CoreBasedTests {
    /// Create a context for test project data.
    ///
    /// - Parameter files: A mapping of file paths to test data to use for those file paths. This is useful for supplying the contents of external files (e.g., xcconfig files) which will be used by the settings construction.
    package func contextForTestData(_ workspace: SWBCore.Workspace, core: Core? = nil, fs: (any FSProxy)? = nil, systemInfo: SystemInfo? = nil, environment: [String: String] = [:], files: [Path: String] = [:], symlinks: [Path: String] = [:]) async throws -> WorkspaceContext {
        let fs = fs ?? PseudoFS()
        for (file, contents) in files {
            try fs.createDirectory(file.dirname, recursive: true)
            try fs.write(file, contents: ByteString(encodingAsUTF8: contents))
        }
        for (file, contents) in symlinks {
            try fs.createDirectory(file.dirname, recursive: true)
            try fs.symlink(file, target: Path(contents))
        }

        let context = try await WorkspaceContext(core: core.or(await getCore()), workspace: workspace, fs: fs, processExecutionCache: .sharedForTesting)

        // Configure fake user and system info.
        context.updateUserInfo(UserInfo(user: "exampleUser", group: "exampleGroup", uid: 1234, gid:12345, home: Path.root.join("Users").join("exampleUser"), environment: environment))
        context.updateSystemInfo(systemInfo ?? SystemInfo(operatingSystemVersion: Version(99, 98, 97), productBuildVersion: "99A98", nativeArchitecture: "x86_64"))

        return context
    }

    /// Create a context for test project data.
    ///
    /// - Parameter files: A mapping of file paths to test data to use for those file paths. This is useful for supplying the contents of external files (e.g., xcconfig files) which will be used by the settings construction.
    package func contextForTestData(_ workspace: TestWorkspace, core: Core? = nil, systemInfo: SystemInfo? = nil, environment: [String: String] = [:], files: [Path: String] = [:]) async throws -> WorkspaceContext {
        let effectiveCore = try await core.or(await getCore())
        return try await contextForTestData(workspace.load(effectiveCore), core: effectiveCore, systemInfo: systemInfo, environment: environment, files: files)
    }
}