blob: efd542ca0c0da268c0ed725264322907253c3e5f [file] [log] [blame]
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2014 - 2016 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
//
#if DEPLOYMENT_RUNTIME_OBJC || os(Linux)
import Foundation
import XCTest
#else
import SwiftFoundation
import SwiftXCTest
#endif
class TestProcessInfo : XCTestCase {
static var allTests: [(String, (TestProcessInfo) -> () throws -> Void)] {
return [
("test_operatingSystemVersion", test_operatingSystemVersion ),
("test_processName", test_processName ),
("test_globallyUniqueString", test_globallyUniqueString ),
("test_environment", test_environment),
]
}
func test_operatingSystemVersion() {
let processInfo = ProcessInfo.processInfo
let versionString = processInfo.operatingSystemVersionString
XCTAssertFalse(versionString.isEmpty)
let version = processInfo.operatingSystemVersion
XCTAssertNotNil(version.majorVersion != 0)
}
func test_processName() {
// Assert that the original process name is "TestFoundation". This test
// will fail if the test target ever gets renamed, so maybe it should
// just test that the initial name is not empty or something?
let processInfo = ProcessInfo.processInfo
let targetName = "TestFoundation"
let originalProcessName = processInfo.processName
XCTAssertEqual(originalProcessName, targetName, "\"\(originalProcessName)\" not equal to \"TestFoundation\"")
// Try assigning a new process name.
let newProcessName = "TestProcessName"
processInfo.processName = newProcessName
XCTAssertEqual(processInfo.processName, newProcessName, "\"\(processInfo.processName)\" not equal to \"\(newProcessName)\"")
// Assign back to the original process name.
processInfo.processName = originalProcessName
XCTAssertEqual(processInfo.processName, originalProcessName, "\"\(processInfo.processName)\" not equal to \"\(originalProcessName)\"")
}
func test_globallyUniqueString() {
let uuid = ProcessInfo.processInfo.globallyUniqueString
let parts = uuid.components(separatedBy: "-")
XCTAssertEqual(parts.count, 5)
XCTAssertEqual(parts[0].utf16.count, 8)
XCTAssertEqual(parts[1].utf16.count, 4)
XCTAssertEqual(parts[2].utf16.count, 4)
XCTAssertEqual(parts[3].utf16.count, 4)
XCTAssertEqual(parts[4].utf16.count, 12)
}
func test_environment() {
let preset = ProcessInfo.processInfo.environment["test"]
setenv("test", "worked", 1)
let postset = ProcessInfo.processInfo.environment["test"]
XCTAssertNil(preset)
XCTAssertEqual(postset, "worked")
// Bad values that wont be stored
XCTAssertEqual(setenv("", "", 1), -1)
XCTAssertEqual(setenv("bad1=", "", 1), -1)
XCTAssertEqual(setenv("bad2=", "1", 1) ,-1)
XCTAssertEqual(setenv("bad3=", "=2", 1), -1)
// Good values that will be, check splitting on '='
XCTAssertEqual(setenv("var1", "",1 ), 0)
XCTAssertEqual(setenv("var2", "=", 1), 0)
XCTAssertEqual(setenv("var3", "=x", 1), 0)
XCTAssertEqual(setenv("var4", "x=", 1), 0)
XCTAssertEqual(setenv("var5", "=x=", 1), 0)
let env = ProcessInfo.processInfo.environment
XCTAssertNil(env[""])
XCTAssertNil(env["bad1"])
XCTAssertNil(env["bad1="])
XCTAssertNil(env["bad2"])
XCTAssertNil(env["bad2="])
XCTAssertNil(env["bad3"])
XCTAssertNil(env["bad3="])
XCTAssertEqual(env["var1"], "")
XCTAssertEqual(env["var2"], "=")
XCTAssertEqual(env["var3"], "=x")
XCTAssertEqual(env["var4"], "x=")
XCTAssertEqual(env["var5"], "=x=")
}
}