v/vlib/encoding/xml/test/gtk/gtk_test.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!'
}