#!/usr/bin/perl -w use Gtk2::TestHelper tests => 47; # $Id$ ############################################################################### my $model = Gtk2::ListStore -> new("Glib::String", "Glib::Int"); isa_ok($model, "Gtk2::ListStore"); ginterfaces_ok($model); $model -> set_column_types("Glib::String", "Glib::Int"); is($model -> get_column_type(0), "Glib::String"); is($model -> get_column_type(1), "Glib::Int"); foreach (qw(bla blee bliii bloooo)) { my $iter = $model -> append(); isa_ok($iter, "Gtk2::TreeIter"); $model -> set($iter, 0 => $_, 1 => length($_)); $model -> set_value($iter, 0 => $_, 1 => length($_)); } ############################################################################### my $path_model = Gtk2::TreePath -> new_from_string("0"); my $iter_model; # boolean return even in gtk 2.0.0 ok($model -> remove($model -> get_iter($path_model))); is($model -> get($model -> get_iter($path_model), 0), "blee"); $model -> clear(); $iter_model = $model -> prepend(); $model -> set($iter_model, 0 => "bla", 1 => 3); is($model -> get($iter_model, 0), "bla"); $iter_model = $model -> insert(1); $model -> set($iter_model, 0 => "ble", 1 => 3); is($model -> get($iter_model, 0), "ble"); $iter_model = $model -> insert_before($model -> get_iter_from_string("1")); $model -> set($iter_model, 0 => "bli", 1 => 3); is($model -> get($iter_model, 0), "bli"); $iter_model = $model -> insert_after($model -> get_iter_from_string("1")); $model -> set($iter_model, 0 => "blo", 1 => 3); is($model -> get($iter_model, 0), "blo"); ############################################################################### SKIP: { skip("swap, move_before, move_after and reorder are new in 2.2.x", 11) unless Gtk2->CHECK_VERSION (2, 2, 0); $model -> swap($model -> get_iter_from_string("1"), $model -> get_iter_from_string("2")); is($model -> get($model -> get_iter_from_string("1"), 0), "blo"); is($model -> get($model -> get_iter_from_string("2"), 0), "bli"); $model -> move_before($model -> get_iter_from_string("1"), $model -> get_iter_from_string("3")); is($model -> get($model -> get_iter_from_string("2"), 0), "blo"); $model -> move_after($model -> get_iter_from_string("3"), $model -> get_iter_from_string("0")); is($model -> get($model -> get_iter_from_string("1"), 0), "ble"); eval { $model -> reorder(3, 2, 1); }; like($@, qr/wrong number of positions passed/); my $tag = $model -> signal_connect(rows_reordered => sub { my $new_order = $_[3]; isa_ok($new_order, "ARRAY", "new index order"); is_deeply($new_order, [3, 2, 1, 0]); }); $model -> reorder(3, 2, 1, 0); $model -> signal_handler_disconnect ($tag); is($model -> get($model -> get_iter_from_string("0"), 0), "blo"); is($model -> get($model -> get_iter_from_string("1"), 0), "bli"); is($model -> get($model -> get_iter_from_string("2"), 0), "ble"); is($model -> get($model -> get_iter_from_string("3"), 0), "bla"); $model -> move_before($model -> get_iter_from_string("0"), undef); $model -> move_after($model -> get_iter_from_string("3"), undef); } ############################################################################### # Ross' 05.GtkListStore-etc.t. I did not have the heart to simply merge both # tests. my @cols = ( { title => 'Author', type => 'Glib::String', }, { title => 'Work', type => 'Glib::String', }, { title => 'Sold', type => 'Glib::Uint', }, { title => 'Print', type => 'Glib::Boolean', }, ); ok (my $store = Gtk2::ListStore->new (map {$_->{type}} @cols), 'new liststore'); $store->set_column_types (map {$_->{type}} @cols); ok (1, '$store->set_column_types'); my @data = ( { Author => 'John Doe', Work => 'Who am I', Sold => '32', Print => 0 }, { Author => 'John Doe', Work => 'Who am I', Sold => '44', Print => 1 }, ); foreach (@data) { my $iter = $store->append; $store->set($iter, 1, $_->{Work}, 0, $_->{Author}, 2, $_->{Sold}, 3, $_->{Print} ); ok (eq_array ([$store->get ($iter)], [$_->{Author}, $_->{Work}, $_->{Sold}, $_->{Print},]), '$store->set/get'); } my $iter; ok ($iter = $store->insert (0), '$store->insert (5)'); ok ($iter = $store->insert (0), '$store->insert (0)'); ok ($iter = $store->insert_before ($iter), '$store->insert_before'); ok ($iter = $store->insert_after ($iter), '$store->insert_after'); ok ($iter = $store->get_iter_first, '$store->get_iter_first, treemodel'); ok ($store->remove ($iter), '$store->remove 1'); ok ($iter = $store->prepend, '$store->prepend'); ok ($store->remove ($iter), '$store->remove 2'); SKIP: { # on RH8 with 2.0.6, i get a crash from pango xft, complaining that # there's no display. xft does require an x server... later versions # don't use xft and appear to be fine without a display. skip "can't create a treeview on 2.0.x without a display", 7 unless Gtk2->CHECK_VERSION (2, 2, 0) or Gtk2->init_check; ok (my $tree = Gtk2::TreeView->new_with_model($store), 'new treeview'); my $renderer; my $column; my $i = 0; foreach (@cols) { if( $_->{type} =~ /Glib::String/ ) { $renderer = Gtk2::CellRendererText->new; $column = Gtk2::TreeViewColumn->new_with_attributes( $_->{title}, $renderer, text => $i ); $tree->append_column($column); } elsif( $_->{type} =~ /Glib::Uint/ ) { $renderer = Gtk2::CellRendererText->new; $column = Gtk2::TreeViewColumn->new_with_attributes( $_->{title}, $renderer, text => $i ); $tree->append_column($column); } elsif( $_->{type} =~ /Glib::Boolean/ ) { $renderer = Gtk2::CellRendererToggle->new; $column = Gtk2::TreeViewColumn->new_with_attributes( $_->{title}, $renderer, active => $i ); $tree->append_column($column); } $i++; } run_main sub { SKIP: { skip 'function only in version > 2.2', 5 unless Gtk2->CHECK_VERSION (2, 2, 0); $store->reorder(4, 3, 2, 1, 0); $iter = $store->get_iter_first; ok ($store->iter_is_valid ($iter), '$store->iter_is_valid'); is_deeply ([$store->get ($iter), $store->get ($store->iter_next($iter))], ['John Doe', 'Who am I', 44, 1, 'John Doe', 'Who am I', 32, 0], '$store->reorder worked'); $store->swap ($iter, $store->iter_next($iter)); $iter = $store->get_iter_first; is_deeply ([$store->get ($iter), $store->get ($store->iter_next($iter))], ['John Doe', 'Who am I', 32, 0, 'John Doe', 'Who am I', 44, 1], '$store->swap worked'); $iter = $store->get_iter_first; $store->move_before ($iter, undef); is_deeply ([$store->get ($store->iter_nth_child(undef, 4))], ['John Doe', 'Who am I', 32, 0], '$store->move_before worked'); $store->move_after ($iter, $store->get_iter_first); is_deeply ([$store->get ($store->iter_nth_child(undef, 1))], ['John Doe', 'Who am I', 32, 0], '$store->move_after worked'); } $store->clear; ok ($store->iter_n_children == 0, '$store->clear/iter_n_children'); }; } SKIP: { skip "new stuff in gtk+ 2.6", 3 unless Gtk2->CHECK_VERSION (2, 6, 0); my $nrows_before = $store->iter_n_children; my $iter = $store->insert_with_values (-1); isa_ok ($iter, 'Gtk2::TreeIter', 'insert_with_values with no values'); $iter = $store->insert_with_values (-1, 0, 'foo', 3, TRUE, 2, 42); isa_ok ($iter, 'Gtk2::TreeIter', 'insert_with_values with values'); is ($store->iter_n_children, $nrows_before + 2, 'added expected number of rows'); } __END__ Copyright (C) 2003-2005, 2009 by the gtk2-perl team (see the file AUTHORS for the full list). See LICENSE for more information.