#!/usr/bin/perl -w use strict; use Gtk2::TestHelper tests => 46; # $Id$ use Gtk2::Gdk::Keysyms; my $map = Gtk2::Gdk::Keymap -> get_default(); isa_ok($map, "Gtk2::Gdk::Keymap"); SKIP: { skip("GdkDisplay is new in 2.2", 1) unless Gtk2->CHECK_VERSION (2, 2, 0); $map = Gtk2::Gdk::Keymap -> get_for_display (Gtk2::Gdk::Display -> get_default()); isa_ok($map, "Gtk2::Gdk::Keymap"); } my @keys = $map -> get_entries_for_keyval($Gtk2::Gdk::Keysyms{ Escape }); SKIP: { skip 'No key entries for Escape found in the keymap', 41 unless scalar @keys; isa_ok($keys[0], "HASH"); like($keys[0] -> { keycode }, qr/^\d+$/); like($keys[0] -> { group }, qr/^\d+$/); like($keys[0] -> { level }, qr/^\d+$/); @keys = Gtk2::Gdk::Keymap -> get_entries_for_keyval($Gtk2::Gdk::Keysyms{ Escape }); isa_ok($keys[0], "HASH"); like($keys[0] -> { keycode }, qr/^\d+$/); like($keys[0] -> { group }, qr/^\d+$/); like($keys[0] -> { level }, qr/^\d+$/); my ($keyval, $group, $level, $mods) = $map -> translate_keyboard_state($keys[0] -> { keycode }, [qw(shift-mask)], 0); like($keyval, qr/^\d+$/); like($group, qr/^\d+$/); like($level, qr/^\d+$/); isa_ok($mods, "Gtk2::Gdk::ModifierType"); SKIP: { skip("translate_keyboard_state is broken", 4) unless (Gtk2 -> CHECK_VERSION(2, 4, 1)); ($keyval, $group, $level, $mods) = Gtk2::Gdk::Keymap -> translate_keyboard_state($keys[0] -> { keycode }, [qw(shift-mask)], 0); like($keyval, qr/^\d+$/); like($group, qr/^\d+$/); like($level, qr/^\d+$/); isa_ok($mods, "Gtk2::Gdk::ModifierType"); } my $key = { keycode => $keys[0] -> { keycode }, group => $group, level => $level }; like($map -> lookup_key($key), qr/^\d+$/); like(Gtk2::Gdk::Keymap -> lookup_key($key), qr/^\d+$/); my @entries = $map -> get_entries_for_keycode($keys[0] -> { keycode }); isa_ok($entries[0], "HASH"); like($entries[0] -> { keyval }, qr/^\d+$/); isa_ok($entries[0] -> { key }, "HASH"); like($entries[0] -> { key } -> { keycode }, qr/^\d+$/); like($entries[0] -> { key } -> { group }, qr/^\d+$/); like($entries[0] -> { key } -> { level }, qr/^\d+$/); @entries = Gtk2::Gdk::Keymap -> get_entries_for_keycode($keys[0] -> { keycode }); isa_ok($entries[0], "HASH"); like($entries[0] -> { keyval }, qr/^\d+$/); isa_ok($entries[0] -> { key }, "HASH"); like($entries[0] -> { key } -> { keycode }, qr/^\d+$/); like($entries[0] -> { key } -> { group }, qr/^\d+$/); like($entries[0] -> { key } -> { level }, qr/^\d+$/); ok(defined($map -> get_direction())); ok(defined(Gtk2::Gdk::Keymap -> get_direction())); SKIP: { skip "new 2.12 stuff", 1 unless Gtk2 -> CHECK_VERSION(2, 12, 0); ok(defined($map -> have_bidi_layouts())); } SKIP: { skip "new 2.16 stuff", 1 unless Gtk2 -> CHECK_VERSION(2, 16, 0); ok(defined($map -> get_caps_lock_state), 'get_caps_lock_state'); } my $a = $Gtk2::Gdk::Keysyms{ a }; my $A = $Gtk2::Gdk::Keysyms{ A }; is(Gtk2::Gdk -> keyval_name($a), "a"); is(Gtk2::Gdk -> keyval_from_name("a"), $a); is_deeply([Gtk2::Gdk -> keyval_convert_case($a)], [$a, $A]); is(Gtk2::Gdk -> keyval_to_upper($a), $A); is(Gtk2::Gdk -> keyval_to_lower($A), $a); is(Gtk2::Gdk -> keyval_is_upper($A), 1); is(Gtk2::Gdk -> keyval_is_lower($a), 1); my $unicode = Gtk2::Gdk -> keyval_to_unicode($a); is(Gtk2::Gdk -> unicode_to_keyval($unicode), $a); } SKIP: { skip 'new 2.20 stuff', 2 unless Gtk2->CHECK_VERSION(2, 20, 0); my $map = Gtk2::Gdk::Keymap -> get_default(); ok(defined $map -> add_virtual_modifiers([qw/mod1-mask super-mask/])); my ($result, $new_state) = $map -> map_virtual_modifiers([qw/mod1-mask super-mask/]); ok(defined $result && defined $new_state); } __END__ Copyright (C) 2003 by the gtk2-perl team (see the file AUTHORS for the full list). See LICENSE for more information.