import Testing
import Foundation
@testable import GObjectGeneratorCore
@Test("Parser reads namespace from minimal GIR XML")
func testParsesNamespace() throws {
let xml = """
"""
let parser = GIRParser()
let repo = try parser.parse(xmlString: xml)
#expect(repo.namespaces.count == 1)
#expect(repo.namespaces[0].name == "GLib")
#expect(repo.namespaces[0].version == "2.0")
}
@Test("Parser reads a class with method and property")
func testParsesClass() throws {
let xml = """
"""
let parser = GIRParser()
let repo = try parser.parse(xmlString: xml)
let cls = repo.namespaces[0].classes[0]
#expect(cls.name == "Widget")
#expect(cls.parent == "GObject.Object")
#expect(cls.methods.count == 1)
#expect(cls.methods[0].name == "show")
#expect(cls.properties.count == 1)
#expect(cls.properties[0].name == "name")
}
@Test("Parser reads an enumeration with members")
func testParsesEnumeration() throws {
let xml = """
"""
let parser = GIRParser()
let repo = try parser.parse(xmlString: xml)
let enums = repo.namespaces[0].enumerations
#expect(enums.count == 1)
#expect(enums[0].name == "Align")
#expect(enums[0].members.count == 4)
#expect(enums[0].members[0].name == "fill")
#expect(enums[0].members[3].cIdentifier == "GTK_ALIGN_CENTER")
}
@Test("Parser reads bitfield with members")
func testParsesBitfield() throws {
let xml = """
"""
let parser = GIRParser()
let repo = try parser.parse(xmlString: xml)
let bf = repo.namespaces[0].bitfields[0]
#expect(bf.name == "SizeGroupMode")
#expect(bf.members.count == 4)
#expect(bf.members[0].name == "none")
#expect(bf.members[3].cIdentifier == "GTK_SIZE_GROUP_MODE_BOTH")
}
@Test("Parser reads interface with method")
func testParsesInterface() throws {
let xml = """
"""
let parser = GIRParser()
let repo = try parser.parse(xmlString: xml)
let iface = repo.namespaces[0].interfaces[0]
#expect(iface.name == "Buildable")
#expect(iface.methods.count == 1)
}
@Test("Parser reads global function")
func testParsesGlobalFunction() throws {
let xml = """
"""
let parser = GIRParser()
let repo = try parser.parse(xmlString: xml)
let fn = repo.namespaces[0].functions[0]
#expect(fn.name == "getenv")
#expect(fn.parameters.count == 1)
}
@Test("Parser throws error on missing required attributes")
func testParsingMissingAttributes() {
let xml = """
"""
let parser = GIRParser()
#expect(throws: GIRParserError.self) {
try parser.parse(xmlString: xml)
}
}
@Test("Parser captures interface-level functions")
func testInterfaceFunctions() throws {
let xml = """
"""
let repo = try GIRParser().parse(xmlString: xml)
let iface = repo.namespaces[0].interfaces[0]
#expect(iface.functions.count == 1)
#expect(iface.functions[0].name == "get_id")
#expect(iface.functions[0].cIdentifier == "gtk_buildable_get_id")
}
@Test("Parser rejects invalid XML")
func testParsingError() {
let parser = GIRParser()
#expect(throws: GIRParserError.self) {
try parser.parse(xmlString: "not xml")
}
}