#!/usr/local/bin/perl -w # test.pl # Copyright (C) 1997 by USC/ISI # $Id: test_parsing.pl,v 1.1 2007/05/15 12:06:30 Daddy Exp $ # # Copyright (c) 1997 University of Southern California. # All rights reserved. # # Redistribution and use in source and binary forms are permitted # provided that the above copyright notice and this paragraph are # duplicated in all such forms and that any documentation, advertising # materials, and other materials related to such distribution and use # acknowledge that the software was developed by the University of # Southern California, Information Sciences Institute. The name of the # University may not be used to endorse or promote products derived from # this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED # WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. sub usage { print STDERR < \$debug, 'e=s' => \$desired_search_engines, 'u' => \$update_saved_files, 'v' => \$verbose, 'i' => \$do_internal, 'x' => \$do_external, ); ($do_internal, $do_external) = (1,1) unless ($do_internal || $do_external); $debug = 1 if (defined($debug) and ($debug < 1)); my $oTest = new WWW::Search::Test($desired_search_engines); $oTest->{debug} = $debug; $oTest->{verbose} = $verbose; &main(); exit 0; sub test_cases { my ($o, $query, $sSE, $sM, $file); my $bogus_query = $WWW::Search::Test::bogus_query; $sSE = 'AltaVista'; $sM = 'John Heidemann '; $file = 'zero_result_no_plus'; $oTest->test($sSE, $sM, $file, $bogus_query, $TEST_EXACTLY); $file = 'zero_result'; $query = '+LSAM +' . $bogus_query; $oTest->test($sSE, $sM, $file, $query, $TEST_EXACTLY); $file = 'one_page_result'; $query = '+LS'.'AM +Aut'.'oSearch'; $oTest->test($sSE, $sM, $file, $query, $TEST_RANGE, 2, 10); $file = 'two_page_result'; $query = '+LS'.'AM +IS'.'I +Heide'.'mann'; $oTest->test($sSE, $sM, $file, $query, $TEST_GREATER_THAN, 10); ###################################################################### $sSE = 'AltaVista::Web'; $sM = 'John Heidemann '; $file = 'zero_result'; $query = '+LSA'.'M +' . $bogus_query; $oTest->test($sSE, $sM, $file, $query, $TEST_EXACTLY); $file = 'one_page_result'; $query = '+LSA'.'M +AutoSea'.'rch'; $oTest->test($sSE, $sM, $file, $query, $TEST_RANGE, 2, 10); $file = 'two_page_result'; $query = '+LSA'.'M +IS'.'I +I'.'B'; $oTest->test($sSE, $sM, $file, $query, $TEST_GREATER_THAN, 10); ###################################################################### $sSE = 'AltaVista::AdvancedWeb'; $sM = 'John Heidemann '; $oTest->not_working($sSE, $sM); # $query = 'LS'.'AM and ' . $bogus_query; # $oTest->test($sSE, $sM, 'zero', $query, $TEST_EXACTLY); # $query = 'LSA'.'M and AutoSea'.'rch'; # $oTest->test($sSE, $sM, 'one', $query, $TEST_RANGE, 2, 11); # $query = 'LSA'.'M and IS'.'I and I'.'B'; # $oTest->test($sSE, $sM, 'two', $query, $TEST_GREATER_THAN, 10); ###################################################################### $sSE = 'AltaVista::News'; $sM = 'John Heidemann '; $oTest->not_working($sSE, $sM); # $query = '+pe'.'rl +' . $bogus_query; # $oTest->test($sSE, $sM, 'zero', $query, $TEST_EXACTLY); # $query = '+Pe'.'rl +CP'.'AN'; # $oTest->test($sSE, $sM, 'multi', $query, $TEST_GREATER_THAN, 30); # 30 hits/page ###################################################################### $sSE = 'AltaVista::AdvancedNews'; $sM = 'John Heidemann '; $oTest->not_working($sSE, $sM); # $query = 'per'.'l and ' . $bogus_query; # $oTest->test($sSE, $sM, 'zero', $query, $TEST_EXACTLY); # $query = 'Per'.'l and CP'.'AN'; # $oTest->test($sSE, $sM, 'multi', $query, $TEST_GREATER_THAN, 70); # 30 hits/page ###################################################################### $oTest->eval_test('AltaVista::Intranet'); ###################################################################### $oTest->no_test('Crawler', 'unsupported'); # $oTest->test($sSE, $sM, 'zero', $bogus_query, $TEST_EXACTLY); # $query = 'Bay'.'reuth Bindl'.'acher Be'.'rg Flu'.'gplatz P'.'ilot'; # $oTest->test($sSE, $sM, 'one', $query, $TEST_RANGE, 2, 10); # # 10 hits/page # $query = 'Fra'.'nkfurter Al'.'lgemeine Sonnt'.'agszeitung Rech'.'erche'; # $oTest->test($sSE, $sM, 'two', $query, $TEST_GREATER_THAN, 10); ###################################################################### $oTest->eval_test('Excite::News'); ###################################################################### $sSE = 'ExciteForWebServers'; $sM = 'Paul Lindner '; $oTest->not_working($sSE, $sM); # &test($sSE, $sM, 'zero', $bogus_query, $TEST_EXACTLY); # $query = 'bur'.'undi'; # &test($sSE, $sM, 'one', $query, $TEST_RANGE, 2, 99); ###################################################################### $oTest->eval_test('Fireball'); ###################################################################### $sSE = 'FolioViews'; $sM = 'Paul Lindner '; $oTest->test($sSE, $sM, 'zero', $bogus_query, $TEST_EXACTLY); $query = 'bur'.'undi'; $oTest->test($sSE, $sM, 'one', $query, $TEST_RANGE, 2, 400); ###################################################################### $oTest->eval_test('Google'); $oTest->no_test('Gopher', 'Paul Lindner '); $oTest->eval_test('GoTo'); $oTest->eval_test('HotFiles'); $oTest->eval_test('Infoseek::Companies'); $oTest->eval_test('Infoseek::Email'); $oTest->eval_test('Infoseek::News'); $oTest->eval_test('Infoseek::Web'); $oTest->no_test('Livelink', 'Paul Lindner '); $oTest->eval_test('LookSmart'); # use WWW::Search::LookSmart; # $oTest->no_test('LookSmart', $WWW::Search::LookSmart::MAINTAINER); $oTest->eval_test('Lycos'); $oTest->eval_test('Magellan'); $oTest->eval_test('MetaCrawler', 'Jim Smyser '); ###################################################################### $sSE = 'Metapedia'; $sM = 'Jim Smyser '; $file = 'zero'; $oTest->test($sSE, $sM, $file, $bogus_query, $TEST_EXACTLY); ###################################################################### $sSE = 'MSIndexServer'; $sM = 'Paul Lindner '; $oTest->not_working($sSE, $sM); # $oTest->test($sSE, $sM, 'zero', $bogus_query, $TEST_EXACTLY); # $query = 'bur'.'undi'; # $oTest->test($sSE, $sM, 'one', $query, $TEST_RANGE, 2, 99); ###################################################################### $oTest->eval_test('NetFind'); $oTest->eval_test('NorthernLight'); ###################################################################### $sSE = 'Null'; $sM = 'Paul Lindner '; $oTest->test($sSE, $sM, 'zero', $bogus_query, $TEST_EXACTLY); ###################################################################### $oTest->eval_test('OpenDirectory'); ###################################################################### $sSE = 'PLweb'; $sM = 'Paul Lindner '; $oTest->not_working($sSE, $sM); # $oTest->test($sSE, $sM, 'zero', $bogus_query, $TEST_EXACTLY); # $query = 'bur'.'undi'; # $oTest->test($sSE, $sM, 'one', $query, $TEST_RANGE, 2, 99); ###################################################################### $sSE = 'Search97'; $sM = 'Paul Lindner '; $oTest->not_working($sSE, $sM); # $file = 'zero'; # $oTest->test($sSE, $sM, $file, $bogus_query, $TEST_EXACTLY); # $file = 'one'; # $query = 'bur'.'undi'; # $oTest->test($sSE, $sM, $file, $query, $TEST_RANGE, 2, 99); ###################################################################### $sSE = 'SFgate'; $sM = 'Paul Lindner '; $oTest->test($sSE, $sM, 'zero', $bogus_query, $TEST_EXACTLY); $query = 'bur'.'undi'; $oTest->test($sSE, $sM, 'one', $query, $TEST_RANGE, 2, 99); ###################################################################### $oTest->no_test('Simple', 'Paul Lindner '); $oTest->eval_test('Snap'); $oTest->no_test('Verity', 'Paul Lindner '); $oTest->eval_test('WebCrawler'); $oTest->eval_test('ZDNet'); } # test_cases sub main { # print "\nVERSION INFO:\n "; # my ($cmd) = &web_search_bin . " --VERSION"; # print `$cmd`; if ($update_saved_files) { print "\nUPDATING.\n\n"; $oTest->mode($MODE_UPDATE); &test_cases(); # Can not do update AND test: return; } # if if ($do_internal) { print "\nTESTING INTERNAL PARSING.\n (Errors here should be reported to the WWW::Search maintainer.)\n\n"; $oTest->reset_error_count; $oTest->mode($MODE_INTERNAL); &test_cases(); print "\n"; if ($oTest->{error_count} <= 0) { print "All ", $oTest->mode, " tests have passed.\n\n"; } else { print "Some ", $oTest->mode, " tests failed. Please check the README file before reporting errors (sometimes back-ends have known failures).\n"; } } # if $do_internal if ($do_external) { print "\n\nTESTING EXTERNAL QUERIES.\n (Errors here suggest search-engine reformatting and should be\n reported to the maintainer of the back-end for the search engine.)\n\n"; $oTest->reset_error_count; $oTest->mode($MODE_EXTERNAL); &test_cases(); print "\n"; if ($oTest->{error_count} <= 0) { print "All ", $oTest->mode, " tests have passed.\n\n"; } else { print "Some ", $oTest->mode, " tests failed. Please check the README file before reporting errors (sometimes back-ends have known failures).\n"; } } # if $do_external } # main =head2 TO DO =over =item No identified needs at the moment... =back =head2 HOW IT WORKS At present there is only one function available, namely &test(). It takes at least 5 arguments. These are: 1) the name of the search engine (string); 2) the maintainer's name (and email address) (string); 3) a filename (unique among tests for this backend) (string); 4) the raw query string; 5) the test method (one of the constants $TEST_EXACTLY, $TEST_RANGE, $TEST_GREATER_THAN, $TEST_BY_COUNTING); optional arguments 6 and 7 are integers to be used when counting the results. The query is sent to the engine, and the results are compared to previously stored results as follows: If the method is $TEST_EXACTLY, the two lists of URLs must match exactly. If the method is $TEST_RANGE, the number of URLs must be between arg6 and arg7. If the method is $TEST_GREATER_THAN, the number of URLs must be greater than arg6. If the method is $TEST_BY_COUNTING, the number of URLs must be exactly arg6 (but we don't care what the URLs are). =cut