#!/usr/bin/env perl -w # # Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. # use Test::More qw(no_plan); use Test::Exception; require 'utils.pm'; # verify that qpid is available BEGIN { use_ok( 'qpid' ); } require_ok ('qpid' ); # milliseconds # duration cannot be null { dies_ok (sub {new qpid::messaging::Duration(undef);}, "Durations cannot have null time periods"); } # duration cannot be negative { my $period = 0 - (int(rand(65535)) + 1); dies_ok(sub {new qpid::messaging::Duration($period);}, "Duration times cannot be negative"); } # duration can be an arbitrary value { my $period = int(rand(65535)); my $duration = new qpid::messaging::Duration($period); ok ($duration->get_milliseconds() == $period, "Milliseconds are properly stored and fetched"); } # multiplier # cannot multiply by null dies_ok(sub {qpid::messaging::Duration::FOREVER * undef;}, "Cannot multiply a duration times a null"); # cannot multiply by a negative dies_ok (sub {qpid::messaging::Duration::MINUTE * -2;}, "Duration cannot be multiplied by a negative"); # multiply by zero returns a zero time period { my $result = qpid::messaging::Duration::MINUTE * 0; ok ($result->get_milliseconds() == 0, "Multiplying duration by 0 returns a 0 duration"); } # multiply by arbitrary values works { my $factor = int(1 + rand(100)); my $result = qpid::messaging::Duration::MINUTE * $factor; ok ($result->get_milliseconds() == 60000 * $factor, "Multiplying by a factor returns a new Duration with that period"); } # equality # always fails with null ok (!(qpid::messaging::Duration::MINUTE == undef), "Duration is never equal to null"); # never equal to a non-duration class ok (!(qpid::messaging::Duration::MINUTE == random_string(12)), "Duration is never equal to a non-Duration"); # works with self ok (qpid::messaging::Duration::MINUTE == qpid::messaging::Duration::MINUTE, "Duration is always equal to itself"); # fails with non-equal instance ok (!(qpid::messaging::Duration::MINUTE == qpid::messaging::Duration::SECOND), "Duration non-equality works"); # works with equal instance { my $result = qpid::messaging::Duration::MINUTE * 0; ok ($result == qpid::messaging::Duration::IMMEDIATE, "Equality comparison works correctly"); } # non-equality # always not equal to null ok (qpid::messaging::Duration::MINUTE != undef, "Always unequal to null"); # always not equal to a non-duration class ok (qpid::messaging::Duration::MINUTE != random_string(64), "Always unequal to a non-duration class"); # not unequal to itself ok (!(qpid::messaging::Duration::MINUTE != qpid::messaging::Duration::MINUTE), "Never unequal to itself"); # not unequal to an equal instance { my $duration = qpid::messaging::Duration::MINUTE * 1; ok (!(qpid::messaging::Duration::MINUTE != $duration), "Never unequal to an equal instance"); } # works with unequal instances ok (qpid::messaging::Duration::MINUTE != qpid::messaging::Duration::FOREVER, "Always unequal to a non-equal instance");