test/test_searcher.rb in epub-parser-0.2.7 vs test/test_searcher.rb in epub-parser-0.2.8
- old
+ new
@@ -1,8 +1,9 @@
# -*- coding: utf-8 -*-
require_relative 'helper'
require 'epub/searcher'
+require 'epub/parser/cfi'
class TestSearcher < Test::Unit::TestCase
class TestPublication < self
def setup
super
@@ -15,26 +16,66 @@
}
end
end
def test_no_result
- assert_empty EPUB::Searcher::Publication.search(@package, 'no result')
+ assert_empty EPUB::Searcher::Publication.search_text(@package, 'no result')
end
def test_simple
assert_equal(
results([
[[[:element, 2, {:name => 'spine', :id => nil}], [:itemref, 0, {:id => nil}], [:element, 0, {:name => 'head', :id => nil}], [:element, 0, {:name => 'title', :id => nil}], [:text, 0]], [[:character, 9]], [[:character, 16]]],
[[[:element, 2, {:name => 'spine', :id => nil}], [:itemref, 0, {:id => nil}], [:element, 1, {:name => 'body', :id => nil}], [:element, 0, {:name => 'div', :id => nil}], [:element, 0, {:name => 'nav', :id => 'idid'}], [:element, 0, {:name => 'hgroup', :id => nil}], [:element, 1, {:name => 'h1', :id => nil}], [:text, 0]], [[:character, 9]], [[:character, 16]]]
]),
- EPUB::Searcher::Publication.search(@package, 'Content')
+ EPUB::Searcher::Publication.search_text(@package, 'Content')
)
end
+ def test_search_element_xpath_without_namespaces
+ assert_equal(
+ [
+ "epubcfi(/4/2!/4/2/2[idid]/4/2/2)",
+ "epubcfi(/4/2!/4/2/2[idid]/4/4/4/2/2)",
+ "epubcfi(/4/2!/4/2/2[idid]/4/4/4/4/2)",
+ "epubcfi(/4/2!/4/2/2[idid]/4/4/4/6/2)",
+ "epubcfi(/4/2!/4/2/2[idid]/4/4/4/8/2)"
+ ],
+ EPUB::Searcher::Publication.search_element(@package, xpath: './/xhtml:a').collect {|result| result[:location]}.map(&:to_fragment)
+ )
+ end
+
+ def test_search_element_xpath_with_namespaces
+ assert_equal(
+ [
+ "epubcfi(/4/2!/4/2/2[idid]/4/2/2)",
+ "epubcfi(/4/2!/4/2/2[idid]/4/4/4/2/2)",
+ "epubcfi(/4/2!/4/2/2[idid]/4/4/4/4/2)",
+ "epubcfi(/4/2!/4/2/2[idid]/4/4/4/6/2)",
+ "epubcfi(/4/2!/4/2/2[idid]/4/4/4/8/2)"
+ ],
+ EPUB::Searcher::Publication.search_element(@package, xpath: './/customnamespace:a', namespaces: {'customnamespace' => 'http://www.w3.org/1999/xhtml'}).collect {|result| result[:location]}.map(&:to_fragment)
+ )
+ end
+
+ def test_search_element_css_selector
+ assert_equal(
+ [
+ "epubcfi(/4/2!/4/2/2[idid]/4/2)",
+ "epubcfi(/4/2!/4/2/2[idid]/4/4)",
+ "epubcfi(/4/2!/4/2/2[idid]/4/4/4/2)",
+ "epubcfi(/4/2!/4/2/2[idid]/4/4/4/4)",
+ "epubcfi(/4/2!/4/2/2[idid]/4/4/4/6)",
+ "epubcfi(/4/2!/4/2/2[idid]/4/4/4/8)"
+ ],
+ EPUB::Searcher::Publication.search_element(@package, css: 'ol > li').collect {|result| result[:location]}.map(&:to_fragment)
+ )
+ end
+
class TesetResult < self
- def test_to_cfi_s
- assert_equal '/6/2!/4/2/2[idid]/2/4/1,:9,:16', EPUB::Searcher::Publication.search(@package, 'Content').last.to_cfi_s
+ def test_to_cfi
+ assert_equal 'epubcfi(/6/2!/4/2/2[idid]/2/4/1,:9,:16)', EPUB::Searcher::Publication.search_text(@package, 'Content').last.to_cfi.to_fragment
end
end
end
class TestXHTML < self
@@ -46,39 +87,39 @@
@nav = @doc.search('nav').first
end
module TestSearch
def test_no_result
- assert_empty @searcher.search(@h1, 'no result')
+ assert_empty @searcher.search_text(@h1, 'no result')
end
def test_simple
- assert_equal results([[[[:text, 0]], [[:character, 9]], [[:character, 16]]]]), @searcher.search(@h1, 'Content')
+ assert_equal results([[[[:text, 0]], [[:character, 9]], [[:character, 16]]]]), @searcher.search_text(@h1, 'Content')
end
def test_multiple_text_result
- assert_equal results([[[[:text, 0]], [[:character, 6]], [[:character, 7]]], [[[:text, 0]], [[:character, 10]], [[:character, 11]]]]), @searcher.search(@h1, 'o')
+ assert_equal results([[[[:text, 0]], [[:character, 6]], [[:character, 7]]], [[[:text, 0]], [[:character, 10]], [[:character, 11]]]]), @searcher.search_text(@h1, 'o')
end
def test_text_after_element
elem = Nokogiri.XML('<root><elem>inner</elem>after</root>')
- assert_equal results([[[[:text, 1]], [[:character, 0]], [[:character, 5]]]]), @searcher.search(elem, 'after')
+ assert_equal results([[[[:text, 1]], [[:character, 0]], [[:character, 5]]]]), @searcher.search_text(elem, 'after')
end
def test_entity_reference
elem = Nokogiri.XML('<root>before<after</root>')
- assert_equal results([[[[:text, 0]], [[:character, 6]], [[:character, 7]]]]), @searcher.search(elem, '<')
+ assert_equal results([[[[:text, 0]], [[:character, 6]], [[:character, 7]]]]), @searcher.search_text(elem, '<')
end
def test_nested_result
- assert_equal results([[[[:element, 1, {:name => 'ol', :id => nil}], [:element, 1, {:name => 'li', :id => nil}], [:element, 1, {:name => 'ol', :id => nil}], [:element, 1, {:name => 'li', :id => nil}], [:element, 0, {:name => 'a', :id => nil}], [:text, 0]], [[:character, 0]], [[:character, 3]]]]), @searcher.search(@nav, '第二節')
+ assert_equal results([[[[:element, 1, {:name => 'ol', :id => nil}], [:element, 1, {:name => 'li', :id => nil}], [:element, 1, {:name => 'ol', :id => nil}], [:element, 1, {:name => 'li', :id => nil}], [:element, 0, {:name => 'a', :id => nil}], [:text, 0]], [[:character, 0]], [[:character, 3]]]]), @searcher.search_text(@nav, '第二節')
end
def test_img
- assert_equal [result([[[:element, 1, {:name => 'ol', :id => nil}], [:element, 1, {:name => 'li', :id => nil}], [:element, 1, {:name => 'ol', :id => nil}], [:element, 2, {:name => 'li', :id => nil}], [:element, 0, {:name => 'a', :id => nil}], [:element, 0, {:name => 'img', :id => nil}]], nil, nil])], @searcher.search(@nav, '第三節')
+ assert_equal [result([[[:element, 1, {:name => 'ol', :id => nil}], [:element, 1, {:name => 'li', :id => nil}], [:element, 1, {:name => 'ol', :id => nil}], [:element, 2, {:name => 'li', :id => nil}], [:element, 0, {:name => 'a', :id => nil}], [:element, 0, {:name => 'img', :id => nil}]], nil, nil])], @searcher.search_text(@nav, '第三節')
end
end
class TestRestricted < self
include TestSearch
@@ -97,30 +138,25 @@
@searcher = EPUB::Searcher::XHTML::Seamless
end
def test_seamless
elem = Nokogiri.XML('<root>This <em>includes</em> a child element.</root>')
- assert_equal results([[[], [[:text, 0], [:character, 0]], [[:text, 1], [:character, 17]]]]), @searcher.search(elem, 'This includes a child element.')
+ assert_equal results([[[], [[:text, 0], [:character, 0]], [[:text, 1], [:character, 17]]]]), @searcher.search_text(elem, 'This includes a child element.')
end
end
class TestResult < self
def setup
super
- @result = EPUB::Searcher::XHTML::Restricted.search(@doc, '第二節').first
+ @result = EPUB::Searcher::XHTML::Restricted.search_text(@doc, '第二節').first
end
- def test_to_xpath_and_offset
- assert_equal ['./*[2]/*[1]/*[1]/*[2]/*[2]/*[2]/*[2]/*[1]/text()[1]', 0], @result.to_xpath_and_offset
- assert_equal ['./xhtml:*[2]/xhtml:*[1]/xhtml:*[1]/xhtml:*[2]/xhtml:*[2]/xhtml:*[2]/xhtml:*[2]/xhtml:*[1]/text()[1]', 0], @result.to_xpath_and_offset(true)
+ def test_to_cfi
+ assert_equal 'epubcfi(/4/2/2[idid]/4/4/4/4/2/1,:0,:3)', @result.to_cfi.to_fragment
end
- def test_to_cfi_s
- assert_equal '/4/2/2[idid]/4/4/4/4/2/1,:0,:3', @result.to_cfi_s
- end
-
- def test_to_cfi_s_img
- assert_equal '/4/2/2[idid]/4/4/4/6/2/2', EPUB::Searcher::XHTML::Restricted.search(@doc, '第三節').first.to_cfi_s
+ def test_to_cfi_img
+ assert_equal 'epubcfi(/4/2/2[idid]/4/4/4/6/2/2)', EPUB::Searcher::XHTML::Restricted.search_text(@doc, '第三節').first.to_cfi.to_fragment
end
end
end
private