mirror of
https://github.com/apple/swift-nio.git
synced 2026-05-20 20:30:36 +00:00
Motivation: We accidentally removed the 'NIOFileSystem' module from the '_NIOFileSystem' product in the last release. Modifications: - Rename 'NIOFileSystem' and 'NIOFileSystemFoundationCompat' to 'NIOFS' and 'NIOFSFoundationCompat' - Add back 'NIOFileSystem' which re-exports '_NIOFileSystem' (there was no publicly available 'NIOFileSystemFoundationCompat' module to remove, only '_NIOFileSystemFoundationCompat'). Result: Fewer breaks
80 lines
2.6 KiB
Swift
80 lines
2.6 KiB
Swift
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This source file is part of the SwiftNIO open source project
|
|
//
|
|
// Copyright (c) 2025 Apple Inc. and the SwiftNIO project authors
|
|
// Licensed under Apache License v2.0
|
|
//
|
|
// See LICENSE.txt for license information
|
|
// See CONTRIBUTORS.txt for the list of SwiftNIO project authors
|
|
//
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
import NIOFS
|
|
import NIOFSFoundationCompat
|
|
import XCTest
|
|
|
|
@available(macOS 10.15, iOS 13.0, watchOS 6.0, tvOS 13.0, *)
|
|
extension FileSystem {
|
|
func temporaryFilePath(
|
|
_ function: String = #function,
|
|
inTemporaryDirectory: Bool = true
|
|
) async throws -> NIOFilePath {
|
|
if inTemporaryDirectory {
|
|
let directory = try await self.temporaryDirectory
|
|
return self.temporaryFilePath(function, inDirectory: directory)
|
|
} else {
|
|
return self.temporaryFilePath(function, inDirectory: nil)
|
|
}
|
|
}
|
|
|
|
func temporaryFilePath(
|
|
_ function: String = #function,
|
|
inDirectory directory: NIOFilePath?
|
|
) -> NIOFilePath {
|
|
let index = function.firstIndex(of: "(")!
|
|
let functionName = function.prefix(upTo: index)
|
|
let random = UInt32.random(in: .min ... .max)
|
|
let fileName = "\(functionName)-\(random)"
|
|
|
|
if let directory = directory {
|
|
return NIOFilePath(FilePath(directory).appending(fileName))
|
|
} else {
|
|
return NIOFilePath(fileName)
|
|
}
|
|
}
|
|
}
|
|
|
|
@available(macOS 10.15, iOS 13.0, watchOS 6.0, tvOS 13.0, *)
|
|
final class FileSystemBytesConformanceTests: XCTestCase {
|
|
func testTimepecToDate() async throws {
|
|
XCTAssertEqual(
|
|
FileInfo.Timespec(seconds: 0, nanoseconds: 0).date,
|
|
Date(timeIntervalSince1970: 0)
|
|
)
|
|
XCTAssertEqual(
|
|
FileInfo.Timespec(seconds: 1, nanoseconds: 0).date,
|
|
Date(timeIntervalSince1970: 1)
|
|
)
|
|
XCTAssertEqual(
|
|
FileInfo.Timespec(seconds: 1, nanoseconds: 1).date,
|
|
Date(timeIntervalSince1970: 1.000000001)
|
|
)
|
|
}
|
|
|
|
func testReadFileIntoData() async throws {
|
|
let fs = FileSystem.shared
|
|
let path = try await fs.temporaryFilePath()
|
|
|
|
try await fs.withFileHandle(forReadingAndWritingAt: path) { fileHandle in
|
|
_ = try await fileHandle.write(contentsOf: [0, 1, 2], toAbsoluteOffset: 0)
|
|
}
|
|
|
|
let contents = try await Data(contentsOf: path, maximumSizeAllowed: .bytes(1024))
|
|
|
|
XCTAssertEqual(contents, Data([0, 1, 2]))
|
|
}
|
|
}
|