1
0
Fork 0
gobject-generator/Tests/SwiftGtkGenCoreTests/ScaffoldingTests.swift
Brendan Szymanski 1330f2bd25 Initial commit: SwiftGtkGen GIR-to-Swift binding generator
Extracted from gtk-swift monorepo. Previous history
contains 38 commits across the full Phase 1 development
including GIR XML parsing, IR model, analysis engine,
code generation, CLI, plugins, and documentation.
2026-07-01 03:27:41 -04:00

98 lines
4.5 KiB
Swift

import Testing
@testable import SwiftGtkGenCore
@Test("generatePackageScaffolding produces Package.swift")
func testPackageScaffolding() {
let config = GenerationConfig(library: "Gtk", version: "4.0", girsDirectories: [],
targetDirectory: "", externalLibraries: [],
generate: ["Gtk.Widget"], manual: [], ignore: [], objects: [])
let repo = Repository(
namespaces: [
Namespace(name: "Gtk", version: "4.0", cSharedLibrary: "libgtk-4.so.1", cIdentifierPrefix: "Gtk")
],
cHeaderPath: "gtk/gtk.h",
includedLibraryLinks: ["gdk-4", "gsk-4"]
)
let scaffolding = CodeGenerator.generatePackageScaffolding(config: config, repository: repo)
#expect(scaffolding.keys.contains("Package.swift"))
#expect(scaffolding["Package.swift"]?.contains("name: \"Gtk\"") == true)
#expect(scaffolding["Package.swift"]?.contains("pkgConfig: \"gtk-4\"") == true)
}
@Test("generatePackageScaffolding produces module map")
func testModuleMapScaffolding() {
let config = GenerationConfig(library: "Gtk", version: "4.0", girsDirectories: [],
targetDirectory: "", externalLibraries: [],
generate: ["Gtk.Widget"], manual: [], ignore: [], objects: [])
let repo = Repository(
namespaces: [
Namespace(name: "Gtk", version: "4.0", cSharedLibrary: "libgtk-4.so.1", cIdentifierPrefix: "Gtk")
],
cHeaderPath: "gtk/gtk.h",
includedLibraryLinks: ["gdk-4", "gsk-4"]
)
let scaffolding = CodeGenerator.generatePackageScaffolding(config: config, repository: repo)
let moduleMapName = "Sources/CGtk/module.modulemap"
#expect(scaffolding.keys.contains(moduleMapName))
#expect(scaffolding[moduleMapName]?.contains("module CGtk [system]") == true)
#expect(scaffolding[moduleMapName]?.contains("link \"gdk-4\"") == true)
}
@Test("generatePackageScaffolding produces umbrella header")
func testUmbrellaHeader() {
let config = GenerationConfig(library: "Gtk", version: "4.0", girsDirectories: [],
targetDirectory: "", externalLibraries: [],
generate: ["Gtk.Widget"], manual: [], ignore: [], objects: [])
let repo = Repository(
namespaces: [
Namespace(name: "Gtk", version: "4.0", cSharedLibrary: "libgtk-4.so.1", cIdentifierPrefix: "Gtk")
],
cHeaderPath: "gtk/gtk.h",
includedLibraryLinks: ["gdk-4", "gsk-4"]
)
let scaffolding = CodeGenerator.generatePackageScaffolding(config: config, repository: repo)
let headerName = "Sources/CGtk/CGtk.h"
#expect(scaffolding.keys.contains(headerName))
#expect(scaffolding[headerName]?.contains("#include <gtk/gtk.h>") == true)
}
@Test("generatePackageScaffolding works for GLib")
func testPackageScaffoldingGLib() {
let config = GenerationConfig(library: "GLib", version: "2.0", girsDirectories: [],
targetDirectory: "", externalLibraries: [],
generate: ["GLib.String"], manual: [], ignore: [], objects: [])
let repo = Repository(
namespaces: [
Namespace(name: "GLib", version: "2.0", cSharedLibrary: "libglib-2.0.so.0", cIdentifierPrefix: "G")
],
cHeaderPath: "glib.h"
)
let scaffolding = CodeGenerator.generatePackageScaffolding(config: config, repository: repo)
#expect(scaffolding["Package.swift"]?.contains("name: \"GLib\"") == true)
#expect(scaffolding["Package.swift"]?.contains("pkgConfig: \"glib-2.0\"") == true)
#expect(scaffolding["Sources/CGLib/module.modulemap"]?.contains("link \"glib-2.0\"") == true)
#expect(scaffolding["Sources/CGLib/CGLib.h"]?.contains("#include <glib.h>") == true)
}
@Test("generatePackageScaffolding works for Adw")
func testPackageScaffoldingAdw() {
let config = GenerationConfig(library: "Adw", version: "1", girsDirectories: [],
targetDirectory: "", externalLibraries: [],
generate: ["Adw.Window"], manual: [], ignore: [], objects: [])
let repo = Repository(
namespaces: [
Namespace(name: "Adw", version: "1", cSharedLibrary: "libadwaita-1.so.0", cIdentifierPrefix: "Adw")
],
cHeaderPath: "adwaita.h",
includedLibraryLinks: ["gio-2", "gtk-4"]
)
let scaffolding = CodeGenerator.generatePackageScaffolding(config: config, repository: repo)
#expect(scaffolding["Package.swift"]?.contains("pkgConfig: \"adwaita-1\"") == true)
#expect(scaffolding["Sources/CAdw/module.modulemap"]?.contains("link \"adwaita-1\"") == true)
#expect(scaffolding["Sources/CAdw/CAdw.h"]?.contains("#include <adwaita.h>") == true)
}