1
0
Fork 0
gobject-generator/Tests/GObjectGeneratorCoreTests/ConfigFileTests.swift

102 lines
4.2 KiB
Swift

import Testing
@testable import GObjectGeneratorCore
@Test("GenerationConfig can be built from TOML dictionary and GIR namespace")
func testConfigFromTOML() throws {
let toml: [String: Any] = [
"girs_directories": ["/usr/share/gir-1.0"],
"target_directory": "Sources/Gtk/Generated",
"external_libraries": ["Gdk-4.0", "Gsk-4.0"],
"generate": ["Gtk.Widget", "Gtk.Window"],
"manual": ["Gtk.Buildable"],
"ignore": ["Gtk.Test"],
"object": [
"Gtk.Widget": ["final_type": false, "concurrency": "mainActor"] as [String: Any],
"Gtk.Window": ["final_type": true],
],
"function": [
"Gtk.Widget": ["show": ["ignore": true] as [String: Any]],
],
]
let ns = Namespace(name: "Gtk", version: "4.0")
let config = try GenerationConfig.from(toml: toml, namespace: ns, defaultTarget: "Sources/Gtk")
#expect(config.library == "Gtk")
#expect(config.version == "4.0")
#expect(config.girsDirectories == ["/usr/share/gir-1.0"])
#expect(config.targetDirectory == "Sources/Gtk/Generated")
#expect(config.externalLibraries == ["Gdk-4.0", "Gsk-4.0"])
#expect(config.generate == ["Gtk.Widget", "Gtk.Window"])
#expect(config.manual == ["Gtk.Buildable"])
#expect(config.ignore == ["Gtk.Test"])
#expect(config.objects.count == 3)
if case .object("Gtk.Widget", let ov) = config.objects[0] {
#expect(ov.finalType == false)
#expect(ov.concurrency == .mainActor)
} else { Issue.record("Expected object override for Gtk.Widget") }
}
@Test("GenerationConfig defaults library/version from namespace when toml omits them")
func testConfigDefaultsFromNamespace() throws {
let toml: [String: Any] = [
"generate": ["GLib.String"],
]
let ns = Namespace(name: "GLib", version: "2.0")
let config = try GenerationConfig.from(toml: toml, namespace: ns, defaultTarget: "Sources/GLib")
#expect(config.library == "GLib")
#expect(config.version == "2.0")
#expect(config.targetDirectory == "Sources/GLib")
#expect(config.generate == ["GLib.String"])
}
@Test("GenerationConfig functions from toml")
func testFunctionOverridesFromTOML() throws {
let toml: [String: Any] = [
"function": [
"Gtk.Button": [
"set_label": [
"ignore": true,
"rename": ["regex": "^set_(.*)", "replacement": "$1"] as [String: String],
"constructor": true,
"visibility": "internal",
"version": "4.2",
"cfg_condition": "os(macOS)",
] as [String: Any],
],
],
]
let ns = Namespace(name: "Gtk", version: "4.0")
let config = try GenerationConfig.from(toml: toml, namespace: ns, defaultTarget: ".")
#expect(config.objects.count == 1)
if case .function("Gtk.Button", "set_label", let fo) = config.objects[0] {
#expect(fo.ignore == true)
#expect(fo.rename?.regex == "^set_(.*)")
#expect(fo.rename?.replacement == "$1")
#expect(fo.constructor == true)
#expect(fo.visibility == .internal)
#expect(fo.version == "4.2")
#expect(fo.cfgCondition == "os(macOS)")
} else { Issue.record("Expected function override") }
}
@Test("GenerationConfig signal and property overrides from toml")
func testSignalPropertyOverridesFromTOML() throws {
let toml: [String: Any] = [
"signal": [
"Gtk.Button": ["clicked": ["ignore": true, "inhibit": true] as [String: Any]],
],
"property": [
"Gtk.Widget": ["name": ["generate": ["get", "set"]] as [String: Any]],
],
]
let ns = Namespace(name: "Gtk", version: "4.0")
let config = try GenerationConfig.from(toml: toml, namespace: ns, defaultTarget: ".")
#expect(config.objects.count == 2)
if case .signal("Gtk.Button", "clicked", let so) = config.objects[0] {
#expect(so.ignore == true)
#expect(so.inhibit == true)
} else { Issue.record("Expected signal override") }
if case .property("Gtk.Widget", "name", let po) = config.objects[1] {
#expect(po.generate == [.get, .set])
} else { Issue.record("Expected property override") }
}