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

♻️ WIP: Change some tests to Swift Testing, add TestBundle

This commit is contained in:
2025-08-25 17:45:56 +02:00
parent 8925fc4f90
commit 88b2495c87
5 changed files with 98 additions and 23 deletions

View File

@@ -34,6 +34,8 @@
036C39102E5C8D42008DAEDF /* PackagistError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 036C390E2E5C8D3B008DAEDF /* PackagistError.swift */; };
036C39112E5C8D42008DAEDF /* PackagistError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 036C390E2E5C8D3B008DAEDF /* PackagistError.swift */; };
036C39122E5C8D42008DAEDF /* PackagistError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 036C390E2E5C8D3B008DAEDF /* PackagistError.swift */; };
036C39142E5CB822008DAEDF /* TestBundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 036C39132E5CB820008DAEDF /* TestBundle.swift */; };
036C3A212E5CBBAA008DAEDF /* ValetConfigurationTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4AF9F76275447F100D44ED0 /* ValetConfigurationTest.swift */; };
03BFF5272E312C3D007F96FA /* Startup+Timers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03BFF5262E312C39007F96FA /* Startup+Timers.swift */; };
03BFF5282E312C3D007F96FA /* Startup+Timers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03BFF5262E312C39007F96FA /* Startup+Timers.swift */; };
03BFF5292E312C3D007F96FA /* Startup+Timers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03BFF5262E312C39007F96FA /* Startup+Timers.swift */; };
@@ -691,7 +693,6 @@
C4AD38B228ECD9D300FA8D83 /* TestableFileSystem.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4AD38B128ECD9D300FA8D83 /* TestableFileSystem.swift */; };
C4AD38B328ECD9D300FA8D83 /* TestableFileSystem.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4AD38B128ECD9D300FA8D83 /* TestableFileSystem.swift */; };
C4AF9F72275445FF00D44ED0 /* valet-config.json in Resources */ = {isa = PBXBuildFile; fileRef = C4AF9F70275445FF00D44ED0 /* valet-config.json */; };
C4AF9F78275447F100D44ED0 /* ValetConfigurationTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4AF9F76275447F100D44ED0 /* ValetConfigurationTest.swift */; };
C4AF9F7A2754499000D44ED0 /* Valet.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4AF9F792754499000D44ED0 /* Valet.swift */; };
C4AF9F7B2754499000D44ED0 /* Valet.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4AF9F792754499000D44ED0 /* Valet.swift */; };
C4AF9F7D275454A900D44ED0 /* ValetVersionExtractorTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4AF9F7C275454A900D44ED0 /* ValetVersionExtractorTest.swift */; };
@@ -953,6 +954,7 @@
036C39072E5C88A2008DAEDF /* PackagistTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PackagistTest.swift; sourceTree = "<group>"; };
036C39092E5C8CBD008DAEDF /* PackagistP2Response.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PackagistP2Response.swift; sourceTree = "<group>"; };
036C390E2E5C8D3B008DAEDF /* PackagistError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PackagistError.swift; sourceTree = "<group>"; };
036C39132E5CB820008DAEDF /* TestBundle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestBundle.swift; sourceTree = "<group>"; };
03BFF5262E312C39007F96FA /* Startup+Timers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Startup+Timers.swift"; sourceTree = "<group>"; };
03BFF52B2E313240007F96FA /* StatusMenu+Driver.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "StatusMenu+Driver.swift"; sourceTree = "<group>"; };
03CC1FE42E3D220F0050FC18 /* InstallHomebrew.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InstallHomebrew.swift; sourceTree = "<group>"; };
@@ -1302,12 +1304,30 @@
path = Packagist;
sourceTree = "<group>";
};
036C39062E5C8890008DAEDF /* integration */ = {
036C39062E5C8890008DAEDF /* Integration */ = {
isa = PBXGroup;
children = (
036C39072E5C88A2008DAEDF /* PackagistTest.swift */,
);
path = integration;
path = Integration;
sourceTree = "<group>";
};
036C3A222E5CBC33008DAEDF /* _ST */ = {
isa = PBXGroup;
children = (
C4C1019927C65A4D001FACC2 /* Commands */,
036C3A232E5CBC57008DAEDF /* Parsers */,
036C39062E5C8890008DAEDF /* Integration */,
);
path = _ST;
sourceTree = "<group>";
};
036C3A232E5CBC57008DAEDF /* Parsers */ = {
isa = PBXGroup;
children = (
C4AF9F76275447F100D44ED0 /* ValetConfigurationTest.swift */,
);
path = Parsers;
sourceTree = "<group>";
};
03BFF1D12E3CF4F2004C56A9 /* Provision */ = {
@@ -1879,7 +1899,6 @@
C4F7807A25D7F84B000DBC97 /* unit */,
C471E7AE28F9B4940021E251 /* feature */,
C471E7BD28F9B90F0021E251 /* ui */,
036C39062E5C8890008DAEDF /* integration */,
);
path = tests;
sourceTree = "<group>";
@@ -2104,7 +2123,6 @@
isa = PBXGroup;
children = (
C456A0D02AA6175D0080144F /* Config */,
C4AF9F76275447F100D44ED0 /* ValetConfigurationTest.swift */,
C4F780AD25D80B37000DBC97 /* PhpExtensionTest.swift */,
C43A8A2325D9D20D00591B77 /* HomebrewPackageTest.swift */,
C42CFB1927DFE8BD00862737 /* NginxConfigurationTest.swift */,
@@ -2198,6 +2216,7 @@
children = (
C4E2E86328FC2F1B003B070C /* XCPMApplication.swift */,
C40F505428ECA64E004AD45B /* TestableConfigurations.swift */,
036C39132E5CB820008DAEDF /* TestBundle.swift */,
C43A8A1925D9CD1000591B77 /* Utility.swift */,
);
path = Shared;
@@ -2255,9 +2274,9 @@
C4F7807A25D7F84B000DBC97 /* unit */ = {
isa = PBXGroup;
children = (
036C3A222E5CBC33008DAEDF /* _ST */,
C471E6D928F9AFC20021E251 /* Testables */,
C40C7F1C27720E1400DDDCDC /* Test Files */,
C4C1019927C65A4D001FACC2 /* Commands */,
C4C1019827C65A1A001FACC2 /* Versions */,
C4C1019727C65A11001FACC2 /* Parsers */,
);
@@ -3268,6 +3287,7 @@
C485707728BF455300539B36 /* HeaderView.swift in Sources */,
C4F780B125D80B4D000DBC97 /* PhpExtension.swift in Sources */,
C4D5CFCB27E0F9CD00035329 /* NginxConfigurationFile.swift in Sources */,
036C39142E5CB822008DAEDF /* TestBundle.swift in Sources */,
C4E6840A2AF26B830023ED25 /* BrewTapFormulae.swift in Sources */,
C4068CA827B07A1300544CD5 /* SelectPreferenceView.swift in Sources */,
C4F780CE25D80B75000DBC97 /* LocalNotification.swift in Sources */,
@@ -3351,7 +3371,6 @@
C40FE738282ABA4F00A302C2 /* AppVersion.swift in Sources */,
C415D3E92770F692005EF286 /* AppDelegate+InterApp.swift in Sources */,
C4E49DEE28F764A00026AC4E /* TestableCommand.swift in Sources */,
C4AF9F78275447F100D44ED0 /* ValetConfigurationTest.swift in Sources */,
C4611E612AEAD3110010BE24 /* ByteLimitView.swift in Sources */,
C40175B92903108900763A68 /* ValetInteractor.swift in Sources */,
C4CE3BBC27B324250086CA49 /* ComposerWindow.swift in Sources */,
@@ -3432,6 +3451,7 @@
C485707628BF455100539B36 /* SectionHeaderView.swift in Sources */,
C46EBC4828DB9644007ACC74 /* RealShell.swift in Sources */,
C456A0CC2AA6166F0080144F /* BytePhpPreference.swift in Sources */,
036C3A212E5CBBAA008DAEDF /* ValetConfigurationTest.swift in Sources */,
C48DDD0E29C75C9E00D032D9 /* BlockingOverlayView.swift in Sources */,
C4E4404727C56F4700D225E1 /* ValetSite.swift in Sources */,
C44CCD4A27AFF3BC00CE40E5 /* MainMenu+Async.swift in Sources */,

View File

@@ -0,0 +1,50 @@
//
// BundleHelper.swift
// PHP Monitor
//
// Created by Nico Verbruggen on 25/08/2025.
// Copyright © 2025 Nico Verbruggen. All rights reserved.
//
import Foundation
/**
This file is used to access bundle resources via test structs
that cannot access the bundle via the previous class syntax.
After converting a test to Swift Testing, this is no longer possible:
```swift
class MyTest: XCTestCase {
static var configurationFileUrl: URL {
return Bundle(for: Self.self).url(
forResource: "valet-config",
withExtension: "json"
)!
}
}
```
Normally, we would be able to access the bundle via the class
itself, but we'd prefer _not_ to make this accessible to other
classes. Thankfully, this is where `fileprivate` shines.
The bundle is now accessed via `TestBundleClass`, which is not
accessible outside the scope of this file. `TestBundle` as a
global variable, though, is!
Usage:
```swift
return TestBundle.url(
forResource: "valet-config",
withExtension: "json"
)!
```
*/
fileprivate class TestBundleClass {}
public var TestBundle: Bundle {
return Bundle(for: TestBundleClass.self)
}

View File

@@ -6,21 +6,23 @@
// Copyright © 2023 Nico Verbruggen. All rights reserved.
//
import XCTest
import Testing
class CommandTest: XCTestCase {
@Suite("Commands")
struct CommandTest {
func test_determine_php_version() {
@Test
func determinePhpVersion() {
let version = Command.execute(
path: Paths.php,
arguments: ["-v"],
trimNewlines: false
)
XCTAssert(version.contains("(cli)"))
XCTAssert(version.contains("NTS"))
XCTAssert(version.contains("built"))
XCTAssert(version.contains("Zend"))
#expect(version.contains("(cli)"))
#expect(version.contains("NTS"))
#expect(version.contains("built"))
#expect(version.contains("Zend"))
}
}

View File

@@ -8,6 +8,7 @@
import Testing
@Suite("Integration")
struct PackagistTest {
@Test func packagistRetrieval() async {
let packageToCheck = "laravel/valet"

View File

@@ -6,18 +6,20 @@
// Copyright © 2023 Nico Verbruggen. All rights reserved.
//
import XCTest
class ValetConfigurationTest: XCTestCase {
import Testing
import Foundation
@Suite("Parsers")
struct ValetConfigurationTest {
static var jsonConfigFileUrl: URL {
return Bundle(for: Self.self).url(
return TestBundle.url(
forResource: "valet-config",
withExtension: "json"
)!
}
func test_can_load_config_file() throws {
@Test("Can load config file")
func can_load_config_file() throws {
let json = try? String(
contentsOf: Self.jsonConfigFileUrl,
encoding: .utf8
@@ -27,13 +29,13 @@ class ValetConfigurationTest: XCTestCase {
from: json!.data(using: .utf8)!
)
XCTAssertEqual(config.tld, "test")
XCTAssertEqual(config.paths, [
#expect(config.tld == "test")
#expect(config.paths == [
"/Users/username/.config/valet/Sites",
"/Users/username/Sites"
])
XCTAssertEqual(config.defaultSite, "/Users/username/default-site")
XCTAssertEqual(config.loopback, "127.0.0.1")
#expect(config.defaultSite == "/Users/username/default-site")
#expect(config.loopback == "127.0.0.1")
}
}