The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl

use strict;
use warnings;
use diagnostics;

use Test::More tests => 6;

# File       : GO-Node.t
# Author     : Gavin Sherlock
# Date Begun : March 9th 2002

# $Id: GO-Node.t,v 1.4 2007/05/02 16:26:12 sherlock Exp $

# This file forms a set of tests for the GO::Node class

use GO::Node;

my $goid = "GO:0008150";
my $term = "biological_process";

my $node = GO::Node->new(goid => $goid,
			 term => $term);

# check that we're the right kind of object

isa_ok($node, "GO::Node");

# check the object implements all the methods in the API

my @methods = qw(addChildNodes addParentNodes addPathToRoot goid term
		 childNodes parentNodes pathsToRoot pathsToAncestor
		 ancestors lengthOfLongestPathToRoot
		 lengthOfShortestPathToRoot meanLengthOfPathsToRoot
		 isValid isAParentOf isAChildOf isAnAncestorOf
		 isADescendantOf isLeaf isRoot);

can_ok($node, @methods);

# now check attribute values

is($node->goid, $goid);

is($node->term, $term);

# now check we get an appropriate error thrown if we miss out a
# required argument

# leave out term

eval {

    $node = GO::Node->new(goid => $goid);

};

like($@, qr/did not provide a value for the 'term' argument/);

# leave out goid

eval {

    $node = GO::Node->new(term => $term);

};

like($@, qr/did not provide a value for the 'goid' argument/);