# -*- perl -*- use Test::More tests => 33; use strict; use warnings; BEGIN { use_ok('Net::DBus::Binding::Iterator'); use_ok('Net::DBus::Binding::Message::Signal'); use_ok('Net::DBus::Binding::Message::MethodCall'); use_ok('Net::DBus::Binding::Message::MethodReturn'); use_ok('Net::DBus::Binding::Message::Error'); }; my $msg = Net::DBus::Binding::Message::Signal->new(object_path => "/foo/bar/Wizz", interface => "com.blah.Example", signal_name => "Eeek"); my $iter = $msg->iterator(1); $iter->append_boolean(1); $iter->append_byte(43); $iter->append_int16(123); $iter->append_uint16(456); $iter->append_int32(123); $iter->append_uint32(456); $iter->append_int64("12345645645"); $iter->append_uint64("12312312312"); $iter->append_int64("12345645645123456"); $iter->append_uint64("12312312312123456"); $iter->append_string("Hello world"); $iter->append_double(1.424141); $iter->append_array(["one", "two", "three"], [&Net::DBus::Binding::Message::TYPE_STRING]); $iter->append_dict({ "one" => "foo", "two" => "bar"}, [&Net::DBus::Binding::Message::TYPE_STRING, &Net::DBus::Binding::Message::TYPE_STRING]); $iter = $msg->iterator(); ok($iter->get_boolean() == 1, "boolean"); ok($iter->next(), "next"); ok($iter->get_byte() == 43, "byte"); ok($iter->next(), "next"); ok($iter->get_int16() == 123, "int16"); ok($iter->next(), "next"); ok($iter->get_uint16() == 456, "uint16"); ok($iter->next(), "next"); ok($iter->get_int32() == 123, "int32"); ok($iter->next(), "next"); ok($iter->get_uint32() == 456, "uint32"); ok($iter->next(), "next"); ok($iter->get_int64() == "12345645645", "int64"); ok($iter->next(), "next"); ok($iter->get_uint64() == "12312312312", "uint64"); ok($iter->next(), "next"); ok($iter->get_int64() == "12345645645123456", "int64"); ok($iter->next(), "next"); ok($iter->get_uint64() == "12312312312123456", "uint64"); ok($iter->next(), "next"); ok($iter->get_string() eq "Hello world", "string"); ok($iter->next(), "next"); # Don't test precise equality, because floating point arithmetic # is not an exact science. (see RT #37707) my $d = $iter->get_double(); ok($d > 1.424100 && $d < 1.424200, "double"); ok($iter->next(), "next"); is_deeply($iter->get_array(&Net::DBus::Binding::Message::TYPE_STRING), ["one", "two", "three"], "array"); ok($iter->next(), "next"); is_deeply($iter->get_dict(), {"one" => "foo", "two" => "bar"}, "dict"); ok(!$iter->next(), "next");