#============================================================= -*-perl-*- # # t/construct.t # # Test script which works through the various different ways to construct # HTML::Query objects, checks for correctness, errors, etc. # # Written by Andy Wardley, October 2008 # #======================================================================== use strict; use warnings; use lib qw( ./lib ../lib ); use HTML::TreeBuilder; use Badger::Filesystem '$Bin Dir'; use Badger::Test tests => 34, debug => 'HTML::Query', args => \@ARGV; use HTML::Query 'Query'; our $Query = 'HTML::Query'; our $Builder = 'HTML::TreeBuilder'; our $test_dir = Dir($Bin); our $html_dir = $test_dir->dir('html')->must_exist; our $test1 = $html_dir->file('test1.html')->must_exist; my ($query, $tree); #----------------------------------------------------------------------- # load up first test file #----------------------------------------------------------------------- $tree = $Builder->new; $tree->parse_file( $test1->absolute ); ok( $tree, 'parsed tree for first test file: ' . $test1->name ); #----------------------------------------------------------------------- # create a an object via the regular constructor #----------------------------------------------------------------------- $query = $Query->new($tree); ok( $query, 'got html query via constructor method' ); is( ref $query, $Query, "got $Query object from constructor method" ); is( $query->size, 1, 'got one element in query from constructor method' ); #----------------------------------------------------------------------- # test the Query() constructor subroutine #----------------------------------------------------------------------- # explicit parens $query = Query($tree); ok( $query, 'got html query' ); is( ref $query, $Query, "got $Query object for html from constructor sub" ); is( $query->size, 1, 'got one element in query' ); # no parens, single argument $query = Query $tree->look_down( _tag => 'body' ); ok( $query, 'got body query' ); is( ref $query, $Query, "got $Query object for body" ); is( $query->size, 1, 'got one element in query' ); # no parens, multiple arguments $query = Query $tree->look_down( _tag => 'p' ); ok( $query, 'got p query' ); is( ref $query, $Query, "got $Query object for p" ); is( $query->size, 2, 'got two

elements in query' ); # no parens, multiple arguments as single list ref $query = Query [$tree->look_down( _tag => 'p' )]; ok( $query, 'got p query again' ); is( ref $query, $Query, "got $Query object for p again" ); is( $query->size, 2, 'got two

elements in query again' ); # no arguments $query = Query; ok( $query, 'got query with no args' ); is( $query->size, 0, 'no items in query' ); #----------------------------------------------------------------------- # test we can construct trees using named arguments #----------------------------------------------------------------------- $query = Query( text => $test1->text ); ok( $query, 'got query from text' ); $query = Query( file => $test1->absolute ); ok( $query, 'got query from file' ); $query = Query( tree => $tree ); ok( $query, 'got query from tree' ); $query = Query( query => $query ); ok( $query, 'got query from query' ); $query = Query( file => $test1->absolute, 'p' ); ok( $query, 'got query from file' ); is( $query->size, 2, 'got two paras from file' ); $query = Query( tree => $tree, 'p' ); ok( $query, 'got query from file' ); is( $query->size, 2, 'got two paras from tree' ); $query = Query( query => Query( tree => $tree ), 'p' ); ok( $query, 'got query from query' ); is( $query->size, 2, 'got two paras from query' ); $query = Query( text => $test1->text, file => $test1->absolute, tree => $tree, 'p' ); ok( $query, 'got query from file' ); is( $query->size, 6, 'got six paras from composite query' ); #----------------------------------------------------------------------- # multiple named params #----------------------------------------------------------------------- #----------------------------------------------------------------------- # test errors being thrown #----------------------------------------------------------------------- $query = eval { Query 'hello' }; ok( ! $query, 'no query' ); is( $@, 'html.query error - Invalid element specified: hello', 'got bad element error message' ); # should be able to do the same thing using try() $query = $Query->try( new => 'goodbye' ); ok( ! $query, 'no query using try' ); is( $Query->reason, 'html.query error - Invalid element specified: goodbye', 'got bad element error message via reason' );