diff options
author | kou <kou@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2010-09-17 13:14:14 +0000 |
---|---|---|
committer | kou <kou@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2010-09-17 13:14:14 +0000 |
commit | 91ed484f92040e5c2006a3a00ec77a54d552cf37 (patch) | |
tree | 03fd6677a85aaad516d0c9464b1273ea107231b7 /test/rexml/test_xpath_pred.rb | |
parent | 045491d5be06b615d66d3f66cca2b5d2bc3c1929 (diff) | |
download | ruby-91ed484f92040e5c2006a3a00ec77a54d552cf37.tar.gz |
* test/rexml/: import REXML tests from
http://www.germane-software.com/repos/rexml/trunk/test/.
Many tests are failed temporary. I'll fix them quickly. Sorry.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@29282 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'test/rexml/test_xpath_pred.rb')
-rw-r--r-- | test/rexml/test_xpath_pred.rb | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/test/rexml/test_xpath_pred.rb b/test/rexml/test_xpath_pred.rb new file mode 100644 index 0000000000..64eab3e3f9 --- /dev/null +++ b/test/rexml/test_xpath_pred.rb @@ -0,0 +1,80 @@ +require "test/unit/testcase" +require "rexml/document" +require "rexml/xpath" +require "rexml/parsers/xpathparser" + +class XPathPredicateTester < Test::Unit::TestCase + include REXML + SRC=<<-EOL + <article> + <section role="subdivision" id="1"> + <para>free flowing text.</para> + </section> + <section role="division"> + <section role="subdivision" id="2"> + <para>free flowing text.</para> + </section> + <section role="division"> + <para>free flowing text.</para> + </section> + </section> + </article> + EOL + + def setup + @doc = REXML::Document.new( SRC ) + @parser = REXML::Parsers::XPathParser.new + + end + + def test_predicates_parent + path = '//section[../self::section[@role="division"]]' + m = do_path( path ) + assert_equal( 2, m.size ) + assert_equal( "2", m[0].attributes["id"] ) + assert_nil( m[1].attributes["id"] ) + end + + def test_predicates_single + path = '//section[@role="subdivision" and not(../self::section[@role="division"])]' + m = do_path( path ) + assert_equal( 1, m.size ) + assert_equal( "1", m[0].attributes["id"] ) + end + + def test_predicates_multi + path = '//section[@role="subdivision"][not(../self::section[@role="division"])]' + m = do_path( path ) + assert_equal( 1, m.size ) + assert_equal( "1", m[0].attributes["id"] ) + end + + def do_path( path ) + m = REXML::XPath.match( @doc, path ) + #puts path, @parser.parse( path ).inspect + return m + end + + def test_get_no_siblings_terminal_nodes + source = <<-XML +<a> + <b number='1' str='abc'>TEXT1</b> + <c number='1'/> + <c number='2' str='def'> + <b number='3'/> + <d number='1' str='abc'>TEXT2</d> + <b number='2'><!--COMMENT--></b> + </c> +</a> +XML + doc = REXML::Document.new(source) + predicate = "count(child::node()|" + + "following-sibling::node()|" + + "preceding-sibling::node())=0" + m = REXML::XPath.match(doc, "/descendant-or-self::node()[#{predicate}]") + assert_equal( [REXML::Text.new("TEXT1"), + REXML::Text.new("TEXT2"), + REXML::Comment.new("COMMENT")], + m ) + end +end |