mirror of
https://github.com/vlang/v.git
synced 2025-08-10 21:28:03 -04:00
90 lines
2.5 KiB
V
90 lines
2.5 KiB
V
module main
|
|
|
|
import encoding.xml
|
|
import os
|
|
|
|
fn test_large_gtk_file() ! {
|
|
// Note: If you are contributing to this project, you should download the
|
|
// GIR file from https://raw.githubusercontent.com/gtk-rs/gir-files/master/Gtk-4.0.gir
|
|
// and place it in the same directory as this file.
|
|
path := os.join_path(os.dir(@FILE), 'Gtk-4.0.gir')
|
|
if !os.exists(path) {
|
|
println('Skipping test_large_gtk_file because file does not exist.')
|
|
return
|
|
}
|
|
|
|
actual := xml.XMLDocument.from_file(path) or {
|
|
return error('Failed to parse large GTK XML file')
|
|
}
|
|
|
|
mut valid := false
|
|
for elm in actual.get_elements_by_tag('class') {
|
|
if 'c:type' in elm.attributes && elm.attributes['c:type'] == 'GtkWindow' {
|
|
assert elm.attributes['parent'] == 'Widget'
|
|
assert elm.attributes['c:symbol-prefix'] == 'window'
|
|
valid = true
|
|
}
|
|
}
|
|
assert valid, 'GtkWindow class not found!'
|
|
|
|
valid = false
|
|
for elm in actual.get_elements_by_tag('constructor') {
|
|
if 'c:identifier' in elm.attributes && elm.attributes['c:identifier'] == 'gtk_window_new' {
|
|
assert elm == xml.XMLNode{
|
|
name: 'constructor'
|
|
attributes: {
|
|
'name': 'new'
|
|
'c:identifier': 'gtk_window_new'
|
|
}
|
|
children: [
|
|
xml.XMLNodeContents(xml.XMLNode{
|
|
name: 'doc'
|
|
attributes: {
|
|
'xml:space': 'preserve'
|
|
}
|
|
children: [
|
|
xml.XMLNodeContents('Creates a new `GtkWindow`.
|
|
|
|
To get an undecorated window (no window borders), use
|
|
[method@Gtk.Window.set_decorated].
|
|
|
|
All top-level windows created by gtk_window_new() are stored
|
|
in an internal top-level window list. This list can be obtained
|
|
from [func@Gtk.Window.list_toplevels]. Due to GTK keeping a
|
|
reference to the window internally, gtk_window_new() does not
|
|
return a reference to the caller.
|
|
|
|
To delete a `GtkWindow`, call [method@Gtk.Window.destroy].'),
|
|
]
|
|
}),
|
|
xml.XMLNodeContents(xml.XMLNode{
|
|
name: 'return-value'
|
|
attributes: {
|
|
'transfer-ownership': 'none'
|
|
}
|
|
children: [
|
|
xml.XMLNodeContents(xml.XMLNode{
|
|
name: 'doc'
|
|
attributes: {
|
|
'xml:space': 'preserve'
|
|
}
|
|
children: [xml.XMLNodeContents('a new `GtkWindow`.')]
|
|
}),
|
|
xml.XMLNodeContents(xml.XMLNode{
|
|
name: 'type'
|
|
attributes: {
|
|
'name': 'Widget'
|
|
'c:type': 'GtkWidget*'
|
|
}
|
|
children: []
|
|
}),
|
|
]
|
|
}),
|
|
]
|
|
}
|
|
valid = true
|
|
}
|
|
}
|
|
assert valid, 'gtk_window_new constructor not found!'
|
|
}
|