1
0
mirror of https://github.com/nicoverbruggen/phpmon.git synced 2025-11-07 05:10:06 +01:00

Added more tests, added to fake & real FS

This commit is contained in:
2022-11-01 17:02:26 +01:00
parent 5caca85d7a
commit ce44166b48
3 changed files with 65 additions and 12 deletions

View File

@@ -41,23 +41,21 @@ class RealFileSystem: FileSystemProtocol {
}
func getShallowContentsOfDirectory(_ path: String) throws -> [String] {
todo()
return []
return try FileManager.default.contentsOfDirectory(atPath: path)
}
func getDestinationOfSymlink(_ path: String) throws -> String {
todo()
return ""
return try FileManager.default.destinationOfSymbolicLink(atPath: path)
}
// MARK: - Move & Delete Files
func move(from path: String, to newPath: String) throws {
// TODO
try FileManager.default.moveItem(atPath: path, toPath: newPath)
}
func remove(_ path: String) throws {
// TODO
try FileManager.default.removeItem(atPath: path)
}
// MARK: FS Attributes

View File

@@ -9,23 +9,41 @@
import Foundation
class TestableFileSystem: FileSystemProtocol {
/**
Initialize a fake filesystem with a bunch of files.
You do not need to specify directories (unless symlinks), those will be created automatically.
*/
init(files: [String: FakeFile]) {
self.files = files
for key in files.keys where key.contains("~") {
// Ensure that each of the ~ characters are replaced with the home directory path
for key in self.files.keys where key.contains("~") {
self.files.renameKey(
fromKey: key,
toKey: key.replacingOccurrences(of: "~", with: self.homeDirectory)
)
}
// Ensure that intermediate directories are created
for file in self.files {
self.createIntermediateDirectories(file.key)
}
}
var files: [String: FakeFile]
/**
Internal file handling of the fake filesystem.
You can easily dump what's in here by using:
```
let fs = FileSystem as! TestableFileSystem
fs.printContents()
```
*/
private(set) var files: [String: FakeFile]
/**
The home directory for the fake filesystem.
*/
private(set) var homeDirectory = "/Users/fake"
// MARK: - Basics
@@ -104,12 +122,27 @@ class TestableFileSystem: FileSystemProtocol {
let path = path.replacingTildeWithHomeDirectory
let newPath = newPath.replacingTildeWithHomeDirectory
// TODO
self.files.keys.forEach { key in
if key.hasPrefix(path) {
self.files.renameKey(
fromKey: key,
toKey: key.replacingOccurrences(of: path, with: newPath)
)
}
}
self.files.renameKey(fromKey: path, toKey: newPath)
}
func remove(_ path: String) throws {
let path = path.replacingTildeWithHomeDirectory
// TODO
// Remove recursively
self.files.keys.forEach { key in
if key.hasPrefix(path) {
self.files.removeValue(forKey: key)
}
}
self.files.removeValue(forKey: path)
}
// MARK: Attributes