otsune's SnakeOil RSSフィード

python -c "print''.join([chr(x) for x in 111&1101,110+~-~11,10^11*11,110+~-~11,-~101,-~11^11*11,~-110,111&11*11,11+11+10,11|~-0110,1-~11^11*11,10^11*11,-~11^11*11,110,101])"

2008-04-24

Web::ScraperのCSS SelectorかXPathかを判定する正規表現用のテスト書いた

| Web::ScraperのCSS SelectorかXPathかを判定する正規表現用のテスト書いた - otsune's SnakeOil  を含むブックマーク はてなブックマーク - Web::ScraperのCSS SelectorかXPathかを判定する正規表現用のテスト書いた - otsune's SnakeOil  Web::ScraperのCSS SelectorかXPathかを判定する正規表現用のテスト書いた - otsune's SnakeOil  のブックマークコメント

XPath式は先頭に(が来る事も有るから、Web::Scraper

sub create_process {
    my($first, $tree, $stash, $uri) = @_;

    sub {
        my($exp, @attr) = @_;

        my $xpath = $exp =~ m!^(?:/|id\()! ? $exp : HTML::Selector::XPath::selector_to_xpath($exp);

における m!^(?:/|id\()! が m!^(?:/|(?:id)?\()! でもいいんじゃねーか的な事をIRC #plagger-ja で言ったら

miyagawa: failing test をください

とネタフリされたのでテスト書いた。

t/11_xpath.t

use strict;
use Test::Base;

use Web::Scraper;
plan tests => 1 * blocks;


filters {
    selector => 'chomp',
    expected => 'yaml',
};

run {
    my $block = shift;
    my $s = scraper {
        process $block->selector, 'text[]' => 'TEXT';
        result 'text';
    };
    my $texts = $s->scrape($block->html);
    is_deeply $texts, $block->expected, $block->name;
};

__DATA__

===
--- html
<ul>
<li class="foo">bar1</li>
<li class="bar">bar2</li>
<li class="foo">bar3</li>
<li class="foo ham eggs">bar4</li>
<li class="bar" id="baz">bar5</li>
</ul>
--- selector
//li[@class="foo"]
--- expected
- bar1
- bar3

===
--- html
<ul>
<li class="foo">bar1</li>
<li class="bar">bar2</li>
<li class="foo">bar3</li>
<li class="foo ham eggs">bar4</li>
<li class="bar" id="baz">bar5</li>
</ul>
--- selector
//li[contains(concat(" ", normalize-space(@class), " "), " foo ")]
--- expected
- bar1
- bar3
- bar4

===
--- html
<ul>
<li class="foo">bar1</li>
<li class="bar">bar2</li>
<li class="foo">bar3</li>
<li class="foo ham eggs">bar4</li>
<li class="bar" id="baz">bar5</li>
</ul>
--- selector
(//li[contains(concat(" ", normalize-space(@class), " "), " foo ")] | id("baz"))
--- expected
- bar1
- bar3
- bar4
- bar5

んでWeb-Scraper/trunkのソースをcheckoutしたディレクトリで

prove -I ./lib -v t/11_xpath.t

して失敗確認。

トラックバック - http://subtech.g.hatena.ne.jp/otsune/20080424