Add libwx-perl
[pkg-perl] / deb-src / libwx-perl / libwx-perl-0.96 / t / 04_userdata.t
diff --git a/deb-src/libwx-perl/libwx-perl-0.96/t/04_userdata.t b/deb-src/libwx-perl/libwx-perl-0.96/t/04_userdata.t
new file mode 100755 (executable)
index 0000000..30c23de
--- /dev/null
@@ -0,0 +1,190 @@
+#!/usr/bin/perl -w
+
+# test for client data handling in various controls
+
+use strict;
+use Wx;
+use lib './t';
+use Tests_Helper qw(in_frame);
+use Wx::Event qw(EVT_BUTTON);
+
+package MyClass;
+
+sub new {
+  my $class = shift;
+  my $code = shift;
+  die "want a CODE reference" unless ref $code eq 'CODE';
+
+  return bless [ $code ], $class;
+}
+
+sub DESTROY { &{$_[0][0]} }
+
+package main;
+
+use Test::More 'tests' => 53;
+
+use strict;
+#use base 'Wx::Frame';
+use vars '$TODO';
+
+sub tdata($) { Wx::TreeItemData->new( MyClass->new( $_[0] ) ) }
+sub cdata($) { MyClass->new( $_[0] ) }
+
+sub tests {
+  my $this = shift;
+
+  ############################################################################
+  # wxTreeCtrl
+  ############################################################################
+
+  my $tree = Wx::TreeCtrl->new( $this, -1 );
+  my $root = $tree->AddRoot( 'Root', -1, -1,
+                             Wx::TreeItemData->new( 'Frobnicate' ) );
+
+  my $trdata = $tree->GetItemData( $root );
+  my $data = $trdata->GetData();
+  is( $data, 'Frobnicate', "Wx::TreeItemData::GetData" );
+  $data = $trdata->GetData();
+
+  is( $data, 'Frobnicate', "Wx::TreeItemData::GetData (again)" );
+  $data = $tree->GetPlData( $root );
+  is( $data, 'Frobnicate', "Wx::TreeCtrl::GetPlData" );
+
+  $trdata = $tree->GetItemData( $root );
+  $trdata->SetData( 'Baz' );
+  $trdata = $tree->GetItemData( $root );
+  $data = $trdata->GetData();
+  is( $data, 'Baz', "Wx::TreeItemData::SetData" );
+  $tree->SetItemData( $root, Wx::TreeItemData->new( 'Boo' ) );
+  $data = $tree->GetPlData( $root );
+  is( $data, 'Boo', "Wx::TreeCtrl::SetItemData" );
+  $tree->SetPlData( $root, 'XyZ' );
+  $data = $tree->GetPlData( $root );
+  is( $data, 'XyZ', "Wx::TreeCtrl::SetPlData" );
+
+  # test deleting and setting again
+  my( $deleting, $setting, $ctrldelete ) = ( 0, 0, 0 );
+
+  my $item1 = $tree->AppendItem( $root, 'An item', -1, -1,
+                                 tdata sub { $deleting = 1 } );
+  my $item2 = $tree->AppendItem( $root, 'An item', -1, -1,
+                                 tdata sub { $setting = 1 } );
+  my $item3 = $tree->AppendItem( $root, 'An item', -1, -1,
+                                 tdata sub { $ctrldelete = 1 } );
+
+  $tree->Delete( $item1 );
+  ok( $deleting, 'WxTreeCtrl: deleting an item deletes the data' );
+  $tree->SetItemData( $item2, Wx::TreeItemData->new( 'foo' ) );
+  ok( $setting, 'Wx::TreeCtrl: setting again item data deletes old data' );
+  # and hope the tree is deleted NOW
+  $tree->Destroy;
+  ok( $ctrldelete, 'Wx::TreeCtrl: deleting the tree deletes the data' );
+
+  ############################################################################
+  # wxListBox & co.
+  ############################################################################
+
+  my $list = Wx::ListBox->new( $this, -1 );
+  my $combo = Wx::ComboBox->new( $this, -1, 'foo' );
+  my $choice = Wx::Choice->new( $this, -1 );
+  my $checklist = Wx::CheckListBox->new( $this, -1, [-1, -1], [-1, -1], [1] );
+  my $odncombo = undef;
+
+  if( defined &Wx::PlOwnerDrawnComboBox::new ) {
+      $odncombo = Wx::PlOwnerDrawnComboBox->new( $this, -1, 'foo', [-1, -1],
+                                                 [-1, -1], [] );
+  }
+
+  # test deleting and setting again
+  for my $x ( [ $list, 'Wx::ListBox' ],
+              [ $choice, 'Wx::Choice' ],
+              [ $combo, 'Wx::ComboBox' ],
+              [ $checklist, 'Wx::CheckListBox' ],
+              [ $odncombo, 'Wx::OwnerDrawnComboBox' ],
+              ) {
+  SKIP: {
+      my( $list, $name ) = @$x;
+      ( $deleting, $setting, $ctrldelete ) = ( 0, 0, 0 );
+
+      skip( $x->[1] . ": not available", 8 )
+        if !defined $x->[0];
+      skip( "wxMSW wxCheckListBox can't store client data yet", 8 )
+        if Wx::wxMSW && $name eq 'Wx::CheckListBox';
+
+      $list->Clear;
+
+      # diag "starting tests for $name";
+      my $data = 'Foo';
+
+      $list->Append( 'An item', $data );
+      $list->SetClientData( 0, $data ); # workaround bug in HEAD
+      $list->Append( 'An item' );
+
+      $data = 'Frobnication';
+
+      is( $list->GetClientData( 0 ), 'Foo', "$name: some client data" );
+      is( $list->GetClientData( 1 ), undef, "$name: no client data" );
+      $list->SetClientData( 0, 'Bar' );
+      $list->SetClientData( 1, 'Baz' );
+      is( $list->GetClientData( 0 ), 'Bar', "$name: setting client data" );
+      is( $list->GetClientData( 1 ), 'Baz',
+          "$name: setting client data (again)" );
+
+      my $x = 1;
+      $list->SetClientData( 0, \$x );
+      $x = 2;
+      is( ${$list->GetClientData( 0 )}, 2,
+          "$name: client data is a reference" );
+
+      $list->Append( 'An item', cdata sub { $setting = 1 } );
+      $list->Append( 'An item', cdata sub { $ctrldelete = 1 } );
+      $list->Append( 'An item', cdata sub { $deleting = 1 } );
+
+      SKIP: {
+        skip "delayed on Mac", 1 if Wx::wxMAC && $list->isa( 'Wx::ListBox' );
+        $list->Delete( 4 );
+        ok( $deleting, "$name: deleting an item deletes the data" );
+      }
+      $list->SetClientData( 2, 'foo' );
+      ok( $setting, "$name: setting again item data deletes old data" );
+      SKIP: {
+        # and hope the control is deleted NOW
+        $list->Destroy;
+        skip "delayed on Mac/MSW", 1 if ( Wx::wxMAC || Wx::wxMSW ) && $list->isa( 'Wx::ListBox' );
+        ok( $ctrldelete, "$name: deleting the control deletes the data" );
+    }
+    }
+  }
+
+  ############################################################################
+  # wxListCtrl
+  ############################################################################
+
+  my $listctrl = Wx::ListCtrl->new( $this, -1, [-1, -1], [-1, -1],
+                                    Wx::wxLC_REPORT() );
+  $listctrl->InsertColumn( 1, "Type" );
+
+  $listctrl->InsertStringItem( 0, 'text0' );
+  $listctrl->InsertStringItem( 1, 'text1' );
+  $listctrl->InsertStringItem( 2, 'text2' );
+
+  $listctrl->SetItemData( 0, 123 );
+  $listctrl->SetItemData( 1, 456 );
+  $listctrl->SetItemData( 2, 789 );
+
+  is( $listctrl->GetItemData( 0 ), 123, "Wx::ListCtrl first item data" );
+  is( $listctrl->GetItemData( 1 ), 456, "Wx::ListCtrl second item data" );
+  is( $listctrl->GetItemData( 2 ), 789, "Wx::ListCtrl third item data" );
+
+  $listctrl->SetItemData( 1, 135 );
+
+  is( $listctrl->GetItemData( 1 ), 135, "Wx::ListCtrl, changing item data" );
+}
+
+in_frame( \&tests );
+
+# local variables:
+# mode: cperl
+# end:
+