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.
40 lines
1.8 KiB
Swift
40 lines
1.8 KiB
Swift
import Testing
|
|
@testable import SwiftGtkGenCore
|
|
|
|
@Test("Analysis resolves class hierarchy")
|
|
func testClassHierarchy() {
|
|
let repo = Repository(namespaces: [
|
|
Namespace(name: "Gtk", version: "4.0", classes: [
|
|
Class(name: "Widget", cType: "GtkWidget", parent: "GObject.Object"),
|
|
Class(name: "Window", cType: "GtkWindow", parent: "Widget"),
|
|
Class(name: "ApplicationWindow", cType: "GtkApplicationWindow", parent: "Window"),
|
|
])
|
|
])
|
|
let analyzer = Analyzer(config: GenerationConfig(
|
|
library: "Gtk", version: "4.0", girsDirectories: [], targetDirectory: "",
|
|
externalLibraries: [], generate: ["Gtk.Window"], manual: [], ignore: [], objects: []
|
|
))
|
|
let result = analyzer.analyze(repository: repo)
|
|
#expect(result.classHierarchy["Gtk.Window"] == "Gtk.Widget")
|
|
#expect(result.classHierarchy["Gtk.ApplicationWindow"] == "Gtk.Window")
|
|
}
|
|
|
|
@Test("Analysis filters types by generate list")
|
|
func testTypeFiltering() {
|
|
let repo = Repository(namespaces: [
|
|
Namespace(name: "Gtk", version: "4.0", classes: [
|
|
Class(name: "Widget", cType: "GtkWidget", parent: "GObject.Object"),
|
|
Class(name: "Window", cType: "GtkWindow", parent: "Widget"),
|
|
Class(name: "Button", cType: "GtkButton", parent: "Widget"),
|
|
])
|
|
])
|
|
let config = GenerationConfig(library: "Gtk", version: "4.0", girsDirectories: [],
|
|
targetDirectory: "", externalLibraries: [],
|
|
generate: ["Gtk.Widget", "Gtk.Button"], manual: [], ignore: ["Gtk.Window"], objects: [])
|
|
let analyzer = Analyzer(config: config)
|
|
let result = analyzer.analyze(repository: repo)
|
|
#expect(result.generatedTypes.contains("Gtk.Widget"))
|
|
#expect(result.generatedTypes.contains("Gtk.Button"))
|
|
#expect(!result.generatedTypes.contains("Gtk.Window"))
|
|
#expect(result.manualTypes.isEmpty)
|
|
}
|