1#============================================================= -*-perl-*- 2# 3# t/universal.t 4# 5# Test script for the query() method. 6# 7# Written by Chelsea Rio/Kevin Kamel, September 24, 2010 8# 9#======================================================================== 10 11use strict; 12use warnings; 13use lib qw( ./lib ../lib ); 14use HTML::TreeBuilder; 15use Badger::Filesystem '$Bin Dir'; 16use Badger::Test 17 tests => 47, 18 debug => 'HTML::Query', 19 args => \@ARGV; 20 21use HTML::Query 'Query'; 22 23our $Query = 'HTML::Query'; 24our $Builder = 'HTML::TreeBuilder'; 25our $test_dir = Dir($Bin); 26our $html_dir = $test_dir->dir('html')->must_exist; 27our $multi = $html_dir->file('universal.html')->must_exist; 28 29my ($query, $tree); 30 31#----------------------------------------------------------------------- 32# load up second test file and create an HTML::Query object for it. 33#----------------------------------------------------------------------- 34 35$tree = $Builder->new; 36$tree->parse_file( $multi->absolute ); 37ok( $tree, 'parsed tree for second test file: ' . $multi->name ); 38$query = Query $tree; 39ok( $query, 'created query' ); 40 41$query->suppress_errors(1); 42 43#----------------------------------------------------------------------- 44# Make sure suppression was stored successfully 45#----------------------------------------------------------------------- 46 47my $test0 = $query->suppress_errors(); 48is ($test0, 1, 'errors suppressed'); 49 50#----------------------------------------------------------------------- 51# look for some basic elements using the * 52#----------------------------------------------------------------------- 53 54my $test1 = $query->query('div.danger *'); 55ok( $test1, 'div.danger *' ); 56is( $test1->size, 4, 'div.danger *' ); #includes javascript and metas 57is( join(', ', $test1->as_trimmed_text), '(div class="green") (div class="yellow") (div class="danger") (div class="green")(/div) (/div) (/div) (/div), (div class="yellow") (div class="danger") (div class="green")(/div) (/div) (/div), (div class="danger") (div class="green")(/div) (/div), (div class="green")(/div)','got var' ); 58 59my $test2 = $query->query('* div.danger'); 60ok( $test2, '* div.danger' ); 61is( $test2->size, 2, '* div.danger' ); #includes javascript and metas 62is( join(', ', $test2->as_trimmed_text), '(div class="danger") (div class="green") (div class="yellow") (div class="danger") (div class="green")(/div) (/div) (/div) (/div) (/div), (div class="danger") (div class="green")(/div) (/div)','got var' ); 63 64my $test22 = $query->query('div.danger *, * div.danger'); 65ok( $test22, 'div.danger *, * div.danger' ); 66is( $test22->size, 5, 'div.danger *, * div.danger' ); #includes javascript and metas 67is( join(', ', $test22->as_trimmed_text), '(div class="danger") (div class="green") (div class="yellow") (div class="danger") (div class="green")(/div) (/div) (/div) (/div) (/div), (div class="green") (div class="yellow") (div class="danger") (div class="green")(/div) (/div) (/div) (/div), (div class="yellow") (div class="danger") (div class="green")(/div) (/div) (/div), (div class="danger") (div class="green")(/div) (/div), (div class="green")(/div)','got var' ); 68 69my $test3 = $query->query('div.green'); 70ok( $test3, 'div.green' ); 71is( $test3->size, 2, 'div.green' ); 72is( join(', ', $test3->as_trimmed_text), '(div class="green") (div class="yellow") (div class="danger") (div class="green")(/div) (/div) (/div) (/div), (div class="green")(/div)','got var' ); 73 74my $test4 = $query->query('div.yellow'); 75ok( $test4, 'div.yellow' ); 76is( $test4->size, 1, 'div.yellow' ); 77is( join(', ', $test4->as_trimmed_text), '(div class="yellow") (div class="danger") (div class="green")(/div) (/div) (/div)','got var' ); 78 79my $test5 = $query->query('div.danger * [class="green"]'); 80ok( $test5, 'div.danger * [class="green"]' ); 81is( $test5->size, 1, 'div.danger * [class="green"]' ); 82is( join(', ', $test5->as_trimmed_text), '(div class="green")(/div)','got var' ); 83 84my $test6 = $query->query('div.danger *[class="green"]'); 85ok( $test6, 'div.danger *[class="green"]' ); 86is( $test6->size, 2, 'div.danger *[class="green"]' ); 87is( join(', ', $test6->as_trimmed_text), '(div class="green") (div class="yellow") (div class="danger") (div class="green")(/div) (/div) (/div) (/div), (div class="green")(/div)','got var' ); 88 89my $test7 = $query->query('div.danger * *[class="green"]'); 90ok( $test7, 'div.danger * *[class="green"]' ); 91is( $test7->size, 1, 'div.danger * *[class="green"]' ); 92is( join(', ', $test7->as_trimmed_text), '(div class="green")(/div)','got var' ); 93 94my $test8 = $query->query('div.danger * * *[class="green"]'); 95ok( $test8, 'div.danger * * *[class="green"]' ); 96is( $test8->size, 1, 'div.danger * * *[class="green"]' ); 97is( join(', ', $test8->as_trimmed_text), '(div class="green")(/div)','got var' ); 98 99my $test9 = $query->query('body * div'); 100ok( $test9, 'body * div' ); 101is( $test9->size, 8, 'body * div' ); 102is( join(', ', $test9->as_trimmed_text), '(div) (div class="danger") (div class="green") (div class="yellow") (div class="danger") (div class="green")(/div) (/div) (/div) (/div) (/div) (div)(/div)(div)(/div) (/div), (div class="danger") (div class="green") (div class="yellow") (div class="danger") (div class="green")(/div) (/div) (/div) (/div) (/div), (div class="green") (div class="yellow") (div class="danger") (div class="green")(/div) (/div) (/div) (/div), (div class="yellow") (div class="danger") (div class="green")(/div) (/div) (/div), (div class="danger") (div class="green")(/div) (/div), (div class="green")(/div), (div)(/div), (div)(/div)','got var' ); 103 104#you must use spaces for this operator 105 106my $test10 = $query->query('body* div'); 107ok( !defined($test10), 'No object returned'); 108is( $query->get_error(), 'Invalid specification "body*" in query: body* div', 'Rejected bad selector' ); 109 110my $test11 = $query->query('body *div'); 111ok( !defined($test11), 'No object returned'); 112is( $query->get_error(), 'Invalid specification "*div" in query: body *div', 'Rejected bad selector' ); 113 114my $test12 = $query->query('body*'); 115ok( !defined($test12), 'No object returned'); 116is( $query->get_error(), 'Invalid specification "body*" in query: body*', 'Rejected bad selector' ); 117 118my $test13 = $query->query('*div'); 119ok( !defined($test13), 'No object returned'); 120is( $query->get_error(), 'Invalid specification "*div" in query: *div', 'Rejected bad selector' ); 121 122my $test14 = $query->query('* div'); 123ok( $test14, '* div' ); 124is( $test14->size, 9, '* div' ); 125is( join(', ', $test14->as_trimmed_text), '(div) (div) (div class="danger") (div class="green") (div class="yellow") (div class="danger") (div class="green")(/div) (/div) (/div) (/div) (/div) (div)(/div)(div)(/div) (/div) (/div), (div) (div class="danger") (div class="green") (div class="yellow") (div class="danger") (div class="green")(/div) (/div) (/div) (/div) (/div) (div)(/div)(div)(/div) (/div), (div class="danger") (div class="green") (div class="yellow") (div class="danger") (div class="green")(/div) (/div) (/div) (/div) (/div), (div class="green") (div class="yellow") (div class="danger") (div class="green")(/div) (/div) (/div) (/div), (div class="yellow") (div class="danger") (div class="green")(/div) (/div) (/div), (div class="danger") (div class="green")(/div) (/div), (div class="green")(/div), (div)(/div), (div)(/div)','got var' ); 126 127#should match the prior test... 128my $test15 = $query->query(' * div'); 129ok( $test15, ' * div' ); 130is( $test15->size, 9, ' * div' ); 131is( join(', ', $test15->as_trimmed_text), '(div) (div) (div class="danger") (div class="green") (div class="yellow") (div class="danger") (div class="green")(/div) (/div) (/div) (/div) (/div) (div)(/div)(div)(/div) (/div) (/div), (div) (div class="danger") (div class="green") (div class="yellow") (div class="danger") (div class="green")(/div) (/div) (/div) (/div) (/div) (div)(/div)(div)(/div) (/div), (div class="danger") (div class="green") (div class="yellow") (div class="danger") (div class="green")(/div) (/div) (/div) (/div) (/div), (div class="green") (div class="yellow") (div class="danger") (div class="green")(/div) (/div) (/div) (/div), (div class="yellow") (div class="danger") (div class="green")(/div) (/div) (/div), (div class="danger") (div class="green")(/div) (/div), (div class="green")(/div), (div)(/div), (div)(/div)','got var' ); 132 1331; 134