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.
35 lines
1.8 KiB
Swift
35 lines
1.8 KiB
Swift
import Testing
|
|
@testable import SwiftGtkGenCore
|
|
|
|
@Test("Constructor with no parameters generates convenience init")
|
|
func testConstructorNoParams() {
|
|
let ctor = Constructor(name: "new", cIdentifier: "gtk_button_new",
|
|
parameters: [], returnType: .typeRef("Widget"))
|
|
let initMethod = CodeGenerator.generateConstructor(constructor: ctor, className: "Button")
|
|
#expect(initMethod.contains("convenience init"))
|
|
#expect(initMethod.contains("gtk_button_new()"))
|
|
#expect(initMethod.contains("g_object_ref_sink"))
|
|
#expect(initMethod.contains("self.init(pointer:"))
|
|
}
|
|
|
|
@Test("Constructor with string parameter")
|
|
func testConstructorWithStringParam() {
|
|
let ctor = Constructor(name: "newWithLabel", cIdentifier: "gtk_button_new_with_label",
|
|
parameters: [
|
|
Parameter(name: "label", type: .string, transferOwnership: .none)
|
|
], returnType: .typeRef("Widget"))
|
|
let initMethod = CodeGenerator.generateConstructor(constructor: ctor, className: "Button")
|
|
#expect(initMethod.contains("label: String"))
|
|
#expect(initMethod.contains("gtk_button_new_with_label(label)"))
|
|
}
|
|
|
|
@Test("Constructor with GObject parameter uses .pointer")
|
|
func testConstructorWithGObjectParam() {
|
|
let ctor = Constructor(name: "newFromModel", cIdentifier: "gtk_combo_box_new_from_model",
|
|
parameters: [
|
|
Parameter(name: "model", type: .typeRef("TreeModel"), transferOwnership: .none)
|
|
], returnType: .typeRef("Widget"))
|
|
let initMethod = CodeGenerator.generateConstructor(constructor: ctor, className: "ComboBox")
|
|
#expect(initMethod.contains("model: TreeModel"))
|
|
#expect(initMethod.contains("gtk_combo_box_new_from_model(model.pointer)"))
|
|
}
|