NAME
Test::Without::Gtk2Things - disable selected Gtk2 methods for testing
SYNOPSIS
# perl -MTest::Without::Gtk2Things=insert_with_values foo.t
# or
use Test::Without::Gtk2Things 'insert_with_values';
DESCRIPTION
This module removes or disables selected features from Gtk2 in order to simulate an older version (or other restrictions). It can be used for development or testing to check code which adapts itself to available features or which is meant to run on older Gtk. There's only a couple of "without" things as yet.
Obviously the best way to test application code on older Gtk is to run it on an older Gtk, but making a full environment for that can be difficult.
Usage
From the command line use a -M module load (per perlrun) for a program or test script,
perl -MTest::Without::Gtk2Things=insert_with_values foo.t
Or the same through Test::Harness in a MakeMaker test run
HARNESS_PERL_SWITCHES="-MTest::Without::Gtk2Things=blank_cursor" \
make test
A test script can do the same with a use,
use Test::Without::Gtk2Things 'insert_with_values';
Or an equivalent explicit import,
require Test::Without::Gtk2Things;
Test::Without::Gtk2Things->import('insert_with_values');
In each case generally the "withouts" should be established before loading application code in case it checks features at BEGIN time.
Currently Test::Without::Gtk2Things loads Gtk2 if not already loaded, but don't rely on that. A mangle-after-load instead might be good, if it could be done reliably.
WITHOUT THINGS
verbose-
Have
Test::Without::Gtk2Thingsprint some diagnostic messages toSTDERR. For example,perl -MTest::Without::Gtk2Things=verbose,blank_cursor foo.t Test::Without::Gtk2Things -- without CursorType blank-cursor, per Gtk before 2.16 ... blank_cursor-
Remove
blank-cursorfrom theGtk2::Gdk::CursorTypeenumeration. Currently this means removing fromGlib::Type->list_values, and makingGtk2::Gdk::Cursor->newandnew_for_displaythrow an error if asked for that type.Object properties of type
Gtk2::Gdk::CursorTypeare are not affected (they can still be set toblank-cursor), but perhaps that could be done in the future. Blank cursors within Gtk itself are unaffected.blank-cursoris new in Gtk 2.16. In earlier versions an invisible cursor can be made by applications with a no-pixels-set bitmap as described bygdk_cursor_newin such earlier versions. (See Gtk2::Ex::WidgetCursor for some help with that.) builder-
Remove
Gtk2::Builderand theGtk2::Buildableinterface, as per Gtk before 2.12.The Buildable interface is removed by removing the class and by mangling
UNIVERSAL::isa()to pretend nothing is a Buildable. Actual package@ISAlists are not changed currently. This should mean Buildable still works in C code, but not from Perl (neither currently loaded nor later loaded classes).In a Perl widget implementation it can be fairly easy to support Gtk pre-2.12 by omitting the Buildable interface if not available.
use Glib::Object::Subclass 'Gtk2::DrawingArea', interfaces => [ # Buildable new in Gtk 2.12, omit otherwise Gtk2::Widget->isa('Gtk2::Buildable') ? ('Gtk2::Buildable') : (), ]; cell_layout_get_cells-
Remove the
get_cellsmethod from theGtk2::CellLayoutinterface. That interface method is new in Gtk 2.12 and removal affects all widget classes implementing that interface. In earlier Gtk versionsGtk2::CellViewandGtk2::TreeViewColumnhave individualget_cell_renderersmethods. Those methods are unaffected by this without. draw_as_radio-
Remove the
Gtk2::CheckMenuItemandGtk2::ToggleActiondraw-as-radioproperty and corresponding explicit get/set methods.draw-as-radioon those two classes is new in Gtk 2.4. For prior versions it was only a builtin drawing feature ofGtk2::RadioMenuItem, or some such. Simply skipping it may be good enough in those prior versions. gdkdisplay-
Remove
Gtk2::Gdk::DisplayandGtk2::Gdk::Screenclasses, and the variousget_display,set_screen, etc widget methods, as would be the case in Gtk 2.0.x.In Gtk 2.0.x there was a single implicit screen and display, and some methods for querying their attributes (see Gtk2::Gdk). Most widget code doesn't need to do much with a screen or display object, and it can be reasonably easy to support 2.0.x by checking for a
set_screenmethod etc if say putting a dialog on the same screen as its originating main window. insert_with_values-
Remove the
insert_with_valuesmethod fromGtk2::ListStoreandGtk2::TreeStore. That method is new in Gtk 2.6. In earlier versions separateinsertandsetcalls are necessary. -
Remove from
Gtk2::MenuItemlabelanduse-underlineproperties and corresponding explicitget_label,set_use_underlineetc methods.labelanduse-underlineare new in Gtk 2.16. (For prior versionsnew_with_labelornew_with_mnemoniccreate and set a child label widget.) widget_tooltip-
Remove from
Gtk2::Widgetbase tooltip support new in Gtk 2.12. This means thetooltip-text,tooltip-markupandhas-tooltipproperties, their direct get/set methods such as$widget->set_tooltip_text, and thequery-tooltipsignal.For code supporting both earlier and later than 2.12 it may be enough to just skip the tooltip setups for the earlier versions. See
set_property_maybein Glib::Ex::ObjectBits for some help with that.
SEE ALSO
Gtk2, Test::Without::Module, Test::Weaken::Gtk2
Glib::Ex::ObjectBits set_property_maybe() for skipping non-existent properties.
COPYRIGHT
Copyright 2010, 2011 Kevin Ryde
Gtk2-Ex-WidgetBits is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version.
Gtk2-Ex-WidgetBits is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with Gtk2-Ex-WidgetBits. If not, see http://www.gnu.org/licenses/.