diff options
author | Kouhei Sutou <kou@clear-code.com> | 2019-05-25 18:28:00 +0900 |
---|---|---|
committer | Hiroshi SHIBATA <hsbt@ruby-lang.org> | 2019-08-04 11:55:55 +0900 |
commit | 310a2a98601168aae8c071749b5cb572b55d5046 (patch) | |
tree | 16b3e9ba7d8ca26e389eec34f91eda549810df86 /test/rexml/xpath | |
parent | 39f275edf7284ef0c0f9b9391038ae9f2c019731 (diff) | |
download | ruby-310a2a98601168aae8c071749b5cb572b55d5046.tar.gz |
[ruby/rexml] xpath: add missing value conversions for equality and relational expressions
GitHub: fix #18
Reported by Mirko Budszuhn. Thanks!!!
https://github.com/ruby/rexml/commit/0dca2a2ba0
Diffstat (limited to 'test/rexml/xpath')
-rw-r--r-- | test/rexml/xpath/test_compare.rb | 256 | ||||
-rw-r--r-- | test/rexml/xpath/test_node_set.rb | 84 |
2 files changed, 256 insertions, 84 deletions
diff --git a/test/rexml/xpath/test_compare.rb b/test/rexml/xpath/test_compare.rb new file mode 100644 index 0000000000..bb666c9b12 --- /dev/null +++ b/test/rexml/xpath/test_compare.rb @@ -0,0 +1,256 @@ +# frozen_string_literal: false + +require_relative "../rexml_test_utils" + +require "rexml/document" + +module REXMLTests + class TestXPathCompare < Test::Unit::TestCase + def match(xml, xpath) + document = REXML::Document.new(xml) + REXML::XPath.match(document, xpath) + end + + class TestEqual < self + class TestNodeSet < self + def test_boolean_true + xml = <<-XML +<?xml version="1.0" encoding="UTF-8"?> +<root> + <child/> + <child/> +</root> + XML + assert_equal([true], + match(xml, "/root/child=true()")) + end + + def test_boolean_false + xml = <<-XML +<?xml version="1.0" encoding="UTF-8"?> +<root> +</root> + XML + assert_equal([false], + match(xml, "/root/child=true()")) + end + + def test_number_true + xml = <<-XML +<?xml version="1.0" encoding="UTF-8"?> +<root> + <child>100</child> + <child>200</child> +</root> + XML + assert_equal([true], + match(xml, "/root/child=100")) + end + + def test_number_false + xml = <<-XML +<?xml version="1.0" encoding="UTF-8"?> +<root> + <child>100</child> + <child>200</child> +</root> + XML + assert_equal([false], + match(xml, "/root/child=300")) + end + + def test_string_true + xml = <<-XML +<?xml version="1.0" encoding="UTF-8"?> +<root> + <child>text</child> + <child>string</child> +</root> + XML + assert_equal([true], + match(xml, "/root/child='string'")) + end + + def test_string_false + xml = <<-XML +<?xml version="1.0" encoding="UTF-8"?> +<root> + <child>text</child> + <child>string</child> +</root> + XML + assert_equal([false], + match(xml, "/root/child='nonexistent'")) + end + end + + class TestBoolean < self + def test_number_true + xml = "<root/>" + assert_equal([true], + match(xml, "true()=1")) + end + + def test_number_false + xml = "<root/>" + assert_equal([false], + match(xml, "true()=0")) + end + + def test_string_true + xml = "<root/>" + assert_equal([true], + match(xml, "true()='string'")) + end + + def test_string_false + xml = "<root/>" + assert_equal([false], + match(xml, "true()=''")) + end + end + + class TestNumber < self + def test_string_true + xml = "<root/>" + assert_equal([true], + match(xml, "1='1'")) + end + + def test_string_false + xml = "<root/>" + assert_equal([false], + match(xml, "1='2'")) + end + end + end + + class TestGreaterThan < self + class TestNodeSet < self + def test_boolean_truex + xml = <<-XML +<?xml version="1.0" encoding="UTF-8"?> +<root> + <child/> +</root> + XML + assert_equal([true], + match(xml, "/root/child>false()")) + end + + def test_boolean_false + xml = <<-XML +<?xml version="1.0" encoding="UTF-8"?> +<root> + <child/> +</root> + XML + assert_equal([false], + match(xml, "/root/child>true()")) + end + + def test_number_true + xml = <<-XML +<?xml version="1.0" encoding="UTF-8"?> +<root> + <child>100</child> + <child>200</child> +</root> + XML + assert_equal([true], + match(xml, "/root/child>199")) + end + + def test_number_false + xml = <<-XML +<?xml version="1.0" encoding="UTF-8"?> +<root> + <child>100</child> + <child>200</child> +</root> + XML + assert_equal([false], + match(xml, "/root/child>200")) + end + + def test_string_true + xml = <<-XML +<?xml version="1.0" encoding="UTF-8"?> +<root> + <child>100</child> + <child>200</child> +</root> + XML + assert_equal([true], + match(xml, "/root/child>'199'")) + end + + def test_string_false + xml = <<-XML +<?xml version="1.0" encoding="UTF-8"?> +<root> + <child>100</child> + <child>200</child> +</root> + XML + assert_equal([false], + match(xml, "/root/child>'200'")) + end + end + + class TestBoolean < self + def test_string_true + xml = "<root/>" + assert_equal([true], + match(xml, "true()>'0'")) + end + + def test_string_false + xml = "<root/>" + assert_equal([false], + match(xml, "true()>'1'")) + end + end + + class TestNumber < self + def test_boolean_true + xml = "<root/>" + assert_equal([true], + match(xml, "true()>0")) + end + + def test_number_false + xml = "<root/>" + assert_equal([false], + match(xml, "true()>1")) + end + + def test_string_true + xml = "<root/>" + assert_equal([true], + match(xml, "1>'0'")) + end + + def test_string_false + xml = "<root/>" + assert_equal([false], + match(xml, "1>'1'")) + end + end + + class TestString < self + def test_string_true + xml = "<root/>" + assert_equal([true], + match(xml, "'1'>'0'")) + end + + def test_string_false + xml = "<root/>" + assert_equal([false], + match(xml, "'1'>'1'")) + end + end + end + end +end diff --git a/test/rexml/xpath/test_node_set.rb b/test/rexml/xpath/test_node_set.rb deleted file mode 100644 index 77f26f7a6d..0000000000 --- a/test/rexml/xpath/test_node_set.rb +++ /dev/null @@ -1,84 +0,0 @@ -# frozen_string_literal: false - -require_relative "../rexml_test_utils" - -require "rexml/document" - -module REXMLTests - class TestXPathNodeSet < Test::Unit::TestCase - def match(xml, xpath) - document = REXML::Document.new(xml) - REXML::XPath.match(document, xpath) - end - - def test_boolean_true - xml = <<-XML -<?xml version="1.0" encoding="UTF-8"?> -<root> - <child/> - <child/> -</root> - XML - assert_equal([true], - match(xml, "/root/child=true()")) - end - - def test_boolean_false - xml = <<-XML -<?xml version="1.0" encoding="UTF-8"?> -<root> -</root> - XML - assert_equal([false], - match(xml, "/root/child=true()")) - end - - def test_number_true - xml = <<-XML -<?xml version="1.0" encoding="UTF-8"?> -<root> - <child>100</child> - <child>200</child> -</root> - XML - assert_equal([true], - match(xml, "/root/child=100")) - end - - def test_number_false - xml = <<-XML -<?xml version="1.0" encoding="UTF-8"?> -<root> - <child>100</child> - <child>200</child> -</root> - XML - assert_equal([false], - match(xml, "/root/child=300")) - end - - def test_string_true - xml = <<-XML -<?xml version="1.0" encoding="UTF-8"?> -<root> - <child>text</child> - <child>string</child> -</root> - XML - assert_equal([true], - match(xml, "/root/child='string'")) - end - - def test_string_false - xml = <<-XML -<?xml version="1.0" encoding="UTF-8"?> -<root> - <child>text</child> - <child>string</child> -</root> - XML - assert_equal([false], - match(xml, "/root/child='nonexistent'")) - end - end -end |