# -*- coding: utf-8 -*-
class TestGtkBuilder < Test::Unit::TestCase
include GtkTestUtils
def test_constants
assert_const_defined(Gtk::BuilderError, :INVALID_TAG)
end
sub_test_case ".new" do
test "no argument" do
builder = Gtk::Builder.new
assert_equal([], builder.objects)
end
test "file" do
only_gtk_version(3, 10, 0)
builder = Gtk::Builder.new(:file => ui_definition_file.path)
assert_kind_of(Gtk::Dialog, builder["dialog1"])
end
test "path" do
only_gtk_version(3, 10, 0)
builder = Gtk::Builder.new(:path => ui_definition_file.path)
assert_kind_of(Gtk::Dialog, builder["dialog1"])
end
test "resource" do
only_gtk_version(3, 10, 0)
register_resource(fixture_path("simple_window.gresource")) do
resource_path = "/simple_window/simple_window.ui"
builder = Gtk::Builder.new(:resource => resource_path)
assert_kind_of(Gtk::Window, builder["window"])
end
end
test "string" do
only_gtk_version(3, 10, 0)
builder = Gtk::Builder.new(:string => ui_definition_simple)
assert_kind_of(Gtk::Window, builder["main-window"])
end
end
sub_test_case "#add" do
sub_test_case ":file" do
test "all" do
builder = Gtk::Builder.new
builder.add(:file => ui_definition_file.path)
assert_kind_of(Gtk::Dialog, builder["dialog1"])
end
test ":object_ids" do
builder = Gtk::Builder.new
builder.add(:file => ui_definition_file.path,
:object_ids => ["ok_button"])
assert_equal(["ok_button"],
builder.objects.collect(&:builder_name).sort)
end
end
sub_test_case ":path" do
test "all" do
builder = Gtk::Builder.new
builder.add(:path => ui_definition_file.path)
assert_kind_of(Gtk::Dialog, builder["dialog1"])
end
test ":object_ids" do
builder = Gtk::Builder.new
builder.add(:path => ui_definition_file.path,
:object_ids => ["ok_button"])
assert_equal(["ok_button"],
builder.objects.collect(&:builder_name).sort)
end
end
test "path" do
builder = Gtk::Builder.new
builder.add(ui_definition_file.path)
assert_kind_of(Gtk::ButtonBox, builder["hbuttonbox1"])
end
sub_test_case ":resource" do
setup do
only_gtk_version(3, 12, 0)
end
test "all" do
builder = Gtk::Builder.new
register_resource(fixture_path("simple_window.gresource")) do
resource_path = "/simple_window/simple_window.ui"
builder.add(:resource => resource_path)
assert_kind_of(Gtk::Window, builder["window"])
end
end
test ":object_ids" do
builder = Gtk::Builder.new
register_resource(fixture_path("simple_window.gresource")) do
resource_path = "/simple_window/simple_window.ui"
builder.add(:resource => resource_path,
:object_ids => ["label"])
assert_equal(["label"],
builder.objects.collect(&:builder_name).sort)
end
end
end
test "resource" do
only_gtk_version(3, 12, 0)
builder = Gtk::Builder.new
register_resource(fixture_path("simple_window.gresource")) do
resource_path = "/simple_window/simple_window.ui"
builder.add(resource_path)
assert_kind_of(Gtk::Window, builder["window"])
end
end
sub_test_case ":string" do
test "ascii only" do
builder = Gtk::Builder.new
builder.add(:string => ui_definition_simple)
assert_kind_of(Gtk::Window, builder["main-window"])
end
test "multibyte characters" do
builder = Gtk::Builder.new
comment = "\n" * 100
builder.add(:string => "#{comment}#{ui_definition_simple}")
assert_kind_of(Gtk::Window, builder["main-window"])
end
test ":object_ids" do
builder = Gtk::Builder.new
builder.add(:string => ui_definition,
:object_ids => ["ok_button"])
assert_equal(["ok_button"],
builder.objects.collect(&:builder_name).sort)
end
end
test "string" do
builder = Gtk::Builder.new
builder.add(ui_definition)
assert_kind_of(Gtk::Button, builder["ok_button"])
end
end
def test_add_chain
builder = Gtk::Builder.new
assert_nothing_raised do
builder << ui_definition_file.path << ui_definition_simple
end
assert_kind_of(Gtk::Dialog, builder["dialog1"])
assert_kind_of(Gtk::Window, builder["main-window"])
end
def test_objects
builder = Gtk::Builder.new
assert_nothing_raised do
builder << ui_definition_file.path << ui_definition_simple
end
assert_equal(["dialog1", "vbox1", "hbuttonbox1", "ok_button",
"main-window"].sort,
builder.objects.collect {|object| object.builder_name}.sort)
end
def test_translation_domain
builder = Gtk::Builder.new
assert_nil(builder.translation_domain)
builder.translation_domain = "ruby-gnome2"
assert_equal("ruby-gnome2", builder.translation_domain)
end
def test_connect_signals
handler_names = []
builder = Gtk::Builder.new
builder.connect_signals do |name|
handler_names << name
Proc.new {}
end
assert_equal([].sort, handler_names.sort)
builder << ui_definition
builder.connect_signals do |name|
handler_names << name
Proc.new {}
end
assert_equal(["ok_button_clicked"].sort, handler_names.sort)
end
def test_connect_signals_with_no_signal_ui_definition
handler_names = []
builder = Gtk::Builder.new
builder.connect_signals do |name|
handler_names << name
Proc.new {}
end
assert_equal([].sort, handler_names.sort)
builder << ui_definition_simple
builder.connect_signals do |name|
handler_names << name
Proc.new {}
end
assert_equal([].sort, handler_names.sort)
end
def test_get_type_from_name
builder = Gtk::Builder.new
assert_nil(builder.get_type("XXX"))
assert_equal(Gtk::Box.gtype, builder.get_type("GtkBox"))
end
private
def ui_definition
<<-EOX
EOX
end
def ui_definition_simple
<<-EOX
EOX
end
def ui_definition_with_signal
<<-EOX
EOX
end
def ui_definition_file
xml = Tempfile.new("Gtk::Builder")
xml.print(ui_definition)
xml.close
xml
end
def register_resource(path)
resource = Gio::Resource.load(path)
Gio::Resources.register(resource)
begin
yield
ensure
Gio::Resources.unregister(resource)
end
end
end