Files
swift-nio/Tests/NIOFSFoundationCompatTests/FileSystemFoundationCompatTests.swift
George Barnett a18bddb0ac Add back NIOFileSystem (#3380)
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
2025-09-23 17:29:01 +01:00

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]))
}
}