1use strict; 2use warnings; 3 4use Test::More tests => 36; 5 6use_ok( 'WWW::OpenSearch::Description' ); 7use_ok( 'WWW::OpenSearch::Url' ); 8 9{ 10 my $description = q(<?xml version="1.0" encoding="UTF-8"?> 11<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/"> 12 <Url type="application/rss+xml" 13 template="http://example.com/?q={searchTerms}&pw={startPage?}&format=rss"/> 14</OpenSearchDescription> 15); 16 17 my $osd = WWW::OpenSearch::Description->new( $description ); 18 isa_ok( $osd, 'WWW::OpenSearch::Description' ); 19 is( $osd->version, '1.1', 'version' ); 20 is( $osd->ns, 'http://a9.com/-/spec/opensearch/1.1/', 'namespace' ); 21 is( $osd->urls, 1, 'number of urls' ); 22 23 my ( $url ) = $osd->urls; 24 isa_ok( $url, 'WWW::OpenSearch::Url' ); 25 is( $url->type, 'application/rss+xml', 'content type' ); 26 is( lc $url->method, 'get', 'method' ); 27 is( $url->template->template, 28 'http://example.com/?q={searchTerms}&pw={startPage}&format=rss', 29 'template' ); 30 my $result 31 = $url->prepare_query( { searchTerms => 'x', startPage => 1 } ); 32 is( $result, 'http://example.com/?q=x&pw=1&format=rss', 'prepare_query' ); 33} 34 35{ 36 my $description = q(<?xml version="1.0" encoding="UTF-8"?> 37<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/"> 38 <Url type="application/rss+xml" 39 template="http://example.com/?q={searchTerms}&pw={startPage}&format=rss"/> 40 <Url type="application/atom+xml" 41 template="http://example.com/?q={searchTerms}&pw={startPage?}&format=atom"/> 42 <Url type="text/html" 43 method="post" 44 template="https://intranet/search?format=html"> 45 <Param name="s" value="{searchTerms}"/> 46 <Param name="o" value="{startIndex?}"/> 47 <Param name="c" value="{itemsPerPage?}"/> 48 <Param name="l" value="{language?}"/> 49 </Url> 50</OpenSearchDescription> 51); 52 53 my $osd = WWW::OpenSearch::Description->new( $description ); 54 isa_ok( $osd, 'WWW::OpenSearch::Description' ); 55 is( $osd->urls, 3, 'number of urls' ); 56 is( $osd->get_best_url, $osd->url->[ 1 ], 'get_best_url' ); 57 58 { 59 my $url = $osd->url->[ 0 ]; 60 isa_ok( $url, 'WWW::OpenSearch::Url' ); 61 is( $url->type, 'application/rss+xml', 'content type' ); 62 is( lc $url->method, 'get', 'method' ); 63 is( $url->template->template, 64 'http://example.com/?q={searchTerms}&pw={startPage}&format=rss', 65 'template' ); 66 } 67 68 { 69 my $url = $osd->url->[ 1 ]; 70 isa_ok( $url, 'WWW::OpenSearch::Url' ); 71 is( $url->type, 'application/atom+xml', 'content type' ); 72 is( lc $url->method, 'get', 'method' ); 73 is( $url->template->template, 74 'http://example.com/?q={searchTerms}&pw={startPage}&format=atom', 75 'template' 76 ); 77 } 78 79 { 80 my $url = $osd->url->[ 2 ]; 81 isa_ok( $url, 'WWW::OpenSearch::Url' ); 82 is( $url->type, 'text/html', 'content type' ); 83 is( lc $url->method, 'post', 'method' ); 84 is( $url->template->template, 'https://intranet/search?format=html', 85 'template' ); 86 is_deeply( 87 $url->params, 88 { s => '{searchTerms}', 89 o => '{startIndex}', 90 c => '{itemsPerPage}', 91 l => '{language}' 92 }, 93 'params' 94 ); 95 my ( $result, $post ) = $url->prepare_query( 96 { searchTerms => 'x', 97 startIndex => '1', 98 itemsPerPage => 1, 99 language => 'en' 100 } 101 ); 102 is( $result, 103 'https://intranet/search?format=html', 104 'prepare_query (uri)' 105 ); 106 $post = { @$post }; 107 is_deeply( 108 $post, 109 { s => 'x', o => 1, c => 1, l => 'en' }, 110 'prepare_query (params)' 111 ); 112 } 113} 114 115{ 116 my $description = q(<?xml version="1.0" encoding="UTF-8"?> 117<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearchdescription/1.0/"> 118 <Url>http://www.unto.net/aws?q={searchTerms}&searchindex=Electronics&flavor=osrss&itempage={startPage}</Url> 119</OpenSearchDescription> 120); 121 122 my $osd = WWW::OpenSearch::Description->new( $description ); 123 isa_ok( $osd, 'WWW::OpenSearch::Description' ); 124 is( $osd->version, '1.0', 'version' ); 125 is( $osd->ns, 'http://a9.com/-/spec/opensearchrss/1.0/', 'namespace' ); 126 is( $osd->urls, 1, 'number of urls' ); 127 128 my ( $url ) = $osd->urls; 129 isa_ok( $url, 'WWW::OpenSearch::Url' ); 130 is( lc $url->method, 'get', 'method' ); 131 is( $url->template->template, 132 'http://www.unto.net/aws?q={searchTerms}&searchindex=Electronics&flavor=osrss&itempage={startPage}', 133 'template' 134 ); 135} 136 137