#!/usr/bin/perl -w
use strict;
use Gtk2::TestHelper tests => 202;
# $Id$
#
# pango_color_parse(), pango_color_to_string()
#
my $color = Gtk2::Pango::Color->parse ('white');
isa_ok ($color, 'Gtk2::Pango::Color');
isa_ok ($color, 'ARRAY');
is_deeply ($color, [0xffff, 0xffff, 0xffff]);
SKIP: {
skip 'new 1.16 stuff', 2
unless Gtk2::Pango->CHECK_VERSION (1, 16, 0);
is (Gtk2::Pango::Color->to_string ($color), '#ffffffffffff');
is ($color->to_string, '#ffffffffffff');
}
#
# PangoAttrLanguage
#
my $lang = Gtk2::Pango::Language->from_string ('de-de');
my $attr = Gtk2::Pango::AttrLanguage->new ($lang);
isa_ok ($attr, 'Gtk2::Pango::AttrLanguage');
isa_ok ($attr, 'Gtk2::Pango::Attribute');
is ($attr->value->to_string, 'de-de');
$lang = Gtk2::Pango::Language->from_string ('en-us');
$attr->value ($lang);
is ($attr->value->to_string, 'en-us');
$attr = Gtk2::Pango::AttrLanguage->new ($lang, 23, 42);
is ($attr->start_index, 23);
is ($attr->end_index, 42);
#
# PangoAttrFamily
#
$attr = Gtk2::Pango::AttrFamily->new ('sans');
isa_ok ($attr, 'Gtk2::Pango::AttrFamily');
isa_ok ($attr, 'Gtk2::Pango::AttrString');
isa_ok ($attr, 'Gtk2::Pango::Attribute');
is ($attr->value, 'sans');
is ($attr->value ('sans-serif'), 'sans');
is ($attr->value, 'sans-serif');
$attr = Gtk2::Pango::AttrFamily->new ('sans', 23, 42);
is ($attr->start_index, 23);
is ($attr->end_index, 42);
#
# PangoAttrForeground
#
$attr = Gtk2::Pango::AttrForeground->new (0, 0, 0);
isa_ok ($attr, 'Gtk2::Pango::AttrForeground');
isa_ok ($attr, 'Gtk2::Pango::AttrColor');
isa_ok ($attr, 'Gtk2::Pango::Attribute');
is_deeply ($attr->value, [0, 0, 0]);
is_deeply ($attr->value ([0xffff, 0xffff, 0xffff]), [0, 0, 0]);
is_deeply ($attr->value, [0xffff, 0xffff, 0xffff]);
$attr = Gtk2::Pango::AttrForeground->new (0, 0, 0, 23, 42);
is ($attr->start_index, 23);
is ($attr->end_index, 42);
#
# PangoAttrBackground
#
$attr = Gtk2::Pango::AttrBackground->new (0, 0, 0);
isa_ok ($attr, 'Gtk2::Pango::AttrBackground');
isa_ok ($attr, 'Gtk2::Pango::AttrColor');
isa_ok ($attr, 'Gtk2::Pango::Attribute');
is_deeply ($attr->value, [0, 0, 0]);
$attr->value ([0xffff, 0xffff, 0xffff]);
is_deeply ($attr->value, [0xffff, 0xffff, 0xffff]);
$attr = Gtk2::Pango::AttrBackground->new (0, 0, 0, 23, 42);
is ($attr->start_index, 23);
is ($attr->end_index, 42);
#
# PangoAttrSize
#
$attr = Gtk2::Pango::AttrSize->new (23);
isa_ok ($attr, 'Gtk2::Pango::AttrSize');
isa_ok ($attr, 'Gtk2::Pango::AttrInt');
isa_ok ($attr, 'Gtk2::Pango::Attribute');
is ($attr->value, 23);
$attr->value (42);
is ($attr->value, 42);
$attr = Gtk2::Pango::AttrSize->new (23, 23, 42);
is ($attr->start_index, 23);
is ($attr->end_index, 42);
SKIP: {
skip 'Gtk2::Pango::AttrSize->new_absolute', 7
unless Gtk2::Pango->CHECK_VERSION (1, 8, 0);
$attr = Gtk2::Pango::AttrSize->new_absolute (23);
isa_ok ($attr, 'Gtk2::Pango::AttrSize');
isa_ok ($attr, 'Gtk2::Pango::AttrInt');
isa_ok ($attr, 'Gtk2::Pango::Attribute');
is ($attr->value, 23);
$attr->value (42);
is ($attr->value, 42);
$attr = Gtk2::Pango::AttrSize->new_absolute (23, 23, 42);
is ($attr->start_index, 23);
is ($attr->end_index, 42);
}
#
# PangoAttrStyle
#
$attr = Gtk2::Pango::AttrStyle->new ('normal');
isa_ok ($attr, 'Gtk2::Pango::AttrStyle');
isa_ok ($attr, 'Gtk2::Pango::Attribute');
is ($attr->value, 'normal');
$attr->value ('italic');
is ($attr->value, 'italic');
$attr = Gtk2::Pango::AttrStyle->new ('normal', 23, 42);
is ($attr->start_index, 23);
is ($attr->end_index, 42);
#
# PangoAttrWeight
#
$attr = Gtk2::Pango::AttrWeight->new ('bold');
isa_ok ($attr, 'Gtk2::Pango::AttrWeight');
isa_ok ($attr, 'Gtk2::Pango::Attribute');
is ($attr->value, 'bold');
$attr->value ('heavy');
is ($attr->value, 'heavy');
$attr = Gtk2::Pango::AttrWeight->new ('bold', 23, 42);
is ($attr->start_index, 23);
is ($attr->end_index, 42);
#
# PangoAttrVariant
#
$attr = Gtk2::Pango::AttrVariant->new ('normal');
isa_ok ($attr, 'Gtk2::Pango::AttrVariant');
isa_ok ($attr, 'Gtk2::Pango::Attribute');
is ($attr->value, 'normal');
$attr->value ('small-caps');
is ($attr->value, 'small-caps');
$attr = Gtk2::Pango::AttrVariant->new ('normal', 23, 42);
is ($attr->start_index, 23);
is ($attr->end_index, 42);
#
# PangoAttrStretch
#
$attr = Gtk2::Pango::AttrStretch->new ('normal');
isa_ok ($attr, 'Gtk2::Pango::AttrStretch');
isa_ok ($attr, 'Gtk2::Pango::Attribute');
is ($attr->value, 'normal');
$attr->value ('condensed');
is ($attr->value, 'condensed');
$attr = Gtk2::Pango::AttrStretch->new ('normal', 23, 42);
is ($attr->start_index, 23);
is ($attr->end_index, 42);
#
# PangoAttrUnderline
#
$attr = Gtk2::Pango::AttrUnderline->new ('none');
isa_ok ($attr, 'Gtk2::Pango::AttrUnderline');
isa_ok ($attr, 'Gtk2::Pango::Attribute');
is ($attr->value, 'none');
$attr->value ('double');
is ($attr->value, 'double');
$attr = Gtk2::Pango::AttrUnderline->new ('none', 23, 42);
is ($attr->start_index, 23);
is ($attr->end_index, 42);
#
# PangoAttrStrikethrough
#
$attr = Gtk2::Pango::AttrStrikethrough->new (FALSE);
isa_ok ($attr, 'Gtk2::Pango::AttrStrikethrough');
isa_ok ($attr, 'Gtk2::Pango::Attribute');
ok (!$attr->value);
$attr->value (TRUE);
ok ($attr->value);
$attr = Gtk2::Pango::AttrStrikethrough->new (FALSE, 23, 42);
is ($attr->start_index, 23);
is ($attr->end_index, 42);
#
# PangoAttrFontDesc
#
my $desc = Gtk2::Pango::FontDescription->from_string ('Sans 12');
$attr = Gtk2::Pango::AttrFontDesc->new ($desc);
isa_ok ($attr, 'Gtk2::Pango::AttrFontDesc');
isa_ok ($attr, 'Gtk2::Pango::Attribute');
is ($attr->desc->to_string, 'Sans 12');
$desc = Gtk2::Pango::FontDescription->from_string ('Sans 14');
is ($attr->desc ($desc)->to_string, 'Sans 12');
is ($attr->desc->to_string, 'Sans 14');
$attr = Gtk2::Pango::AttrFontDesc->new ($desc, 23, 42);
is ($attr->start_index, 23);
is ($attr->end_index, 42);
#
# PangoAttrScale
#
$attr = Gtk2::Pango::AttrScale->new (2.0);
isa_ok ($attr, 'Gtk2::Pango::AttrScale');
isa_ok ($attr, 'Gtk2::Pango::Attribute');
is ($attr->value, 2.0);
$attr->value (4.0);
is ($attr->value, 4.0);
$attr = Gtk2::Pango::AttrScale->new (2.0, 23, 42);
is ($attr->start_index, 23);
is ($attr->end_index, 42);
#
# PangoAttrRise
#
$attr = Gtk2::Pango::AttrRise->new (23);
isa_ok ($attr, 'Gtk2::Pango::AttrRise');
isa_ok ($attr, 'Gtk2::Pango::Attribute');
is ($attr->value, 23);
$attr->value (42);
is ($attr->value, 42);
$attr = Gtk2::Pango::AttrRise->new (23, 23, 42);
is ($attr->start_index, 23);
is ($attr->end_index, 42);
#
# PangoAttrShape
#
my $ink = { x => 23, y => 42, width => 10, height => 15 };
my $logical = { x => 42, y => 23, width => 15, height => 10 };
$attr = Gtk2::Pango::AttrShape->new ($ink, $logical);
isa_ok ($attr, 'Gtk2::Pango::AttrShape');
isa_ok ($attr, 'Gtk2::Pango::Attribute');
is_deeply ($attr->ink_rect, $ink);
is_deeply ($attr->logical_rect, $logical);
$attr->ink_rect ($logical);
is_deeply ($attr->ink_rect, $logical);
$attr->logical_rect ($ink);
is_deeply ($attr->logical_rect, $ink);
$attr = Gtk2::Pango::AttrShape->new ($ink, $logical, 23, 42);
is ($attr->start_index, 23);
is ($attr->end_index, 42);
#
# PangoAttrFallback
#
SKIP: {
skip 'Gtk2::Pango::AttrFallback', 6
unless Gtk2::Pango->CHECK_VERSION (1, 4, 0);
$attr = Gtk2::Pango::AttrFallback->new (FALSE);
isa_ok ($attr, 'Gtk2::Pango::AttrFallback');
isa_ok ($attr, 'Gtk2::Pango::Attribute');
ok (!$attr->value);
$attr->value (TRUE);
ok ($attr->value);
$attr = Gtk2::Pango::AttrFallback->new (FALSE, 23, 42);
is ($attr->start_index, 23);
is ($attr->end_index, 42);
}
#
# PangoAttrLetterSpacing
#
SKIP: {
skip 'Gtk2::Pango::AttrLetterSpacing', 7
unless Gtk2::Pango->CHECK_VERSION (1, 6, 0);
$attr = Gtk2::Pango::AttrLetterSpacing->new (23);
isa_ok ($attr, 'Gtk2::Pango::AttrLetterSpacing');
isa_ok ($attr, 'Gtk2::Pango::AttrInt');
isa_ok ($attr, 'Gtk2::Pango::Attribute');
is ($attr->value, 23);
$attr->value (42);
is ($attr->value, 42);
$attr = Gtk2::Pango::AttrLetterSpacing->new (23, 23, 42);
is ($attr->start_index, 23);
is ($attr->end_index, 42);
}
#
# PangoAttrUnderlineColor
#
SKIP: {
skip 'Gtk2::Pango::AttrUnderlineColor', 8
unless Gtk2::Pango->CHECK_VERSION (1, 8, 0);
$attr = Gtk2::Pango::AttrUnderlineColor->new (0, 0, 0);
isa_ok ($attr, 'Gtk2::Pango::AttrUnderlineColor');
isa_ok ($attr, 'Gtk2::Pango::AttrColor');
isa_ok ($attr, 'Gtk2::Pango::Attribute');
is_deeply ($attr->value, [0, 0, 0]);
is_deeply ($attr->value ([0xffff, 0xffff, 0xffff]), [0, 0, 0]);
is_deeply ($attr->value, [0xffff, 0xffff, 0xffff]);
$attr = Gtk2::Pango::AttrUnderlineColor->new (0, 0, 0, 23, 42);
is ($attr->start_index, 23);
is ($attr->end_index, 42);
}
#
# PangoAttrStrikethroughColor
#
SKIP: {
skip 'Gtk2::Pango::AttrStrikethroughColor', 8
unless Gtk2::Pango->CHECK_VERSION (1, 8, 0);
$attr = Gtk2::Pango::AttrStrikethroughColor->new (0, 0, 0);
isa_ok ($attr, 'Gtk2::Pango::AttrStrikethroughColor');
isa_ok ($attr, 'Gtk2::Pango::AttrColor');
isa_ok ($attr, 'Gtk2::Pango::Attribute');
is_deeply ($attr->value, [0, 0, 0]);
is_deeply ($attr->value ([0xffff, 0xffff, 0xffff]), [0, 0, 0]);
is_deeply ($attr->value, [0xffff, 0xffff, 0xffff]);
$attr = Gtk2::Pango::AttrStrikethroughColor->new (0, 0, 0, 23, 42);
is ($attr->start_index, 23);
is ($attr->end_index, 42);
}
#
# PangoAttrGravity, PangoAttrGravityHint
#
SKIP: {
skip 'PangoAttrGravity, PangoAttrGravityHint', 14
unless Gtk2::Pango->CHECK_VERSION (1, 16, 0);
$attr = Gtk2::Pango::AttrGravity->new ('south');
isa_ok ($attr, 'Gtk2::Pango::AttrGravity');
isa_ok ($attr, 'Gtk2::Pango::Attribute');
is ($attr->value, 'south');
is ($attr->value ('north'), 'south');
is ($attr->value, 'north');
$attr = Gtk2::Pango::AttrGravity->new ('south', 23, 42);
is ($attr->start_index, 23);
is ($attr->end_index, 42);
$attr = Gtk2::Pango::AttrGravityHint->new ('strong');
isa_ok ($attr, 'Gtk2::Pango::AttrGravityHint');
isa_ok ($attr, 'Gtk2::Pango::Attribute');
is ($attr->value, 'strong');
is ($attr->value ('line'), 'strong');
is ($attr->value, 'line');
$attr = Gtk2::Pango::AttrGravityHint->new ('strong', 23, 42);
is ($attr->start_index, 23);
is ($attr->end_index, 42);
}
#
# PangoAttrList
#
my $attr_one = Gtk2::Pango::AttrWeight->new ('light', 23, 42);
my $attr_two = Gtk2::Pango::AttrWeight->new ('normal', 23, 42);
my $attr_three = Gtk2::Pango::AttrWeight->new ('bold', 23, 42);
my $list_one = Gtk2::Pango::AttrList->new;
$list_one->insert ($attr_one);
$list_one->insert_before ($attr_two);
$list_one->change ($attr_three);
my $list_two = Gtk2::Pango::AttrList->new;
$list_one->insert ($attr_three);
$list_one->insert_before ($attr_two);
$list_one->change ($attr_one);
$list_one->splice ($list_two, 0, 2);
#
# PangoAttrIterator
#
my $list = Gtk2::Pango::AttrList->new;
my $attr_weight = Gtk2::Pango::AttrWeight->new ('normal', 0, 23);
$list->insert ($attr_weight);
my $attr_variant = Gtk2::Pango::AttrVariant->new ('normal', 0, 42);
$list->insert ($attr_variant);
my $iter = $list->get_iterator;
isa_ok ($iter, 'Gtk2::Pango::AttrIterator');
is_deeply ([$iter->range], [0, 23]);
ok ($iter->get ('weight')->equal ($attr_weight));
my @attrs = $iter->get_attrs;
is (scalar @attrs, 2);
ok ($attrs[1]->equal ($attr_variant));
ok ($iter->next);
ok ($iter->next);
@attrs = $iter->get_attrs;
is (scalar @attrs, 0);
is ($iter->get ('weight'), undef);
# get_font
$list = Gtk2::Pango::AttrList->new;
$lang = Gtk2::Pango::Language->from_string ('de-de');
$attr = Gtk2::Pango::AttrLanguage->new ($lang, 0, 23);
$list->insert($attr);
$attr = Gtk2::Pango::AttrWeight->new ('bold', 0, 23);
$list->insert($attr);
$iter = $list->get_iterator;
my ($desc_new, $lang_new, @extra) = $iter->get_font;
is ($desc_new->get_weight, 'bold');
is ($lang_new->to_string, 'de-de');
is (scalar @extra, 0);
$attr = Gtk2::Pango::AttrBackground->new (0, 0, 0, 0, 23);
$list->insert($attr);
$attr = Gtk2::Pango::AttrForeground->new (0, 0, 0, 0, 23);
$list->insert($attr);
$iter = $list->get_iterator;
($desc_new, $lang_new, @extra) = $iter->get_font;
is ($desc_new->get_weight, 'bold');
is ($lang_new->to_string, 'de-de');
is (scalar @extra, 2);
isa_ok ($extra[0], 'Gtk2::Pango::AttrBackground');
isa_ok ($extra[1], 'Gtk2::Pango::AttrForeground');
# filter
SKIP: {
skip 'filter', 12
unless Gtk2::Pango->CHECK_VERSION (1, 2, 0);
# run four times -> 8 tests
my $callback = sub {
my ($attr, $data) = @_;
isa_ok ($attr, 'Gtk2::Pango::Attribute');
is ($data, 'urgs');
return $attr->isa ('Gtk2::Pango::AttrWeight');
};
my $list_new = $list->filter ($callback, 'urgs');
$iter = $list_new->get_iterator;
@attrs = $iter->get_attrs;
is (scalar @attrs, 1);
isa_ok ($attrs[0], 'Gtk2::Pango::AttrWeight');
ok ($iter->next);
ok (!$iter->next);
}
#
# pango_parse_markup()
#
my ($attr_list, $text, $accel_char) =
Gtk2::Pango->parse_markup
('this text is really cool (no lie)');
isa_ok ($attr_list, 'Gtk2::Pango::AttrList');
is ($text, 'this text is really cool (no lie)', 'text is stripped of tags');
ok ((not defined $accel_char), 'no accel_char if no accel_marker');
{
# first, only
my $iter = $attr_list->get_iterator;
my @attrs = $iter->get_attrs;
is (scalar @attrs, 1);
isa_ok ($attrs[0], 'Gtk2::Pango::AttrScale');
# then, and
$iter->next;
@attrs = $iter->get_attrs;
is (scalar @attrs, 2);
isa_ok ($attrs[0], 'Gtk2::Pango::AttrScale');
isa_ok ($attrs[1], 'Gtk2::Pango::AttrStyle');
# finally, only again
$iter->next;
@attrs = $iter->get_attrs;
is (scalar @attrs, 1);
isa_ok ($attrs[0], 'Gtk2::Pango::AttrScale');
}
($attr_list, $text) = Gtk2::Pango->parse_markup ('no markup here');
isa_ok ($attr_list, 'Gtk2::Pango::AttrList');
is ($text, 'no markup here', 'no tags, nothing stripped');
($attr_list, $text, $accel_char) =
Gtk2::Pango->parse_markup ('Text with _accel__chars', '_');
isa_ok ($attr_list, 'Gtk2::Pango::AttrList');
is ($text, 'Text with accel_chars');
is ($accel_char, 'a');
# invalid markup causes an exception...
eval { Gtk2::Pango->parse_markup ('invalid markup') };
isa_ok ($@, 'Glib::Error');
isa_ok ($@, 'Glib::Markup::Error');
is ($@->domain, 'g-markup-error-quark');
ok ($@->matches ('Glib::Markup::Error', 'unknown-element'),
'invalid markup causes exceptions');
$@ = undef;
__END__
Copyright (C) 2005-2006 by the gtk2-perl team (see the file AUTHORS for the
full list). See LICENSE for more information.