File: test_xinclude.rb

package info (click to toggle)
ruby-nokogiri 1.13.10%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 7,416 kB
  • sloc: ansic: 38,198; xml: 28,086; ruby: 22,271; java: 15,517; cpp: 7,037; yacc: 244; sh: 148; makefile: 136
file content (77 lines) | stat: -rw-r--r-- 2,478 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# frozen_string_literal: true

require "helper"

module Nokogiri
  module XML
    class TestXInclude < Nokogiri::TestCase
      def setup
        super
        @xml = Nokogiri::XML.parse(File.read(XML_XINCLUDE_FILE), XML_XINCLUDE_FILE)
        @included = "this snippet is to be included from xinclude.xml"
      end

      def test_xinclude_on_document_parse
        skip_unless_libxml2("Pure Java version XInlcude has a conflict with NekoDTD setting. This will be fixed later.")
        # first test that xinclude works when requested
        xml_doc = nil

        File.open(XML_XINCLUDE_FILE) do |fp|
          xml_doc = Nokogiri::XML(fp) do |conf|
            conf.strict.dtdload.noent.nocdata.xinclude
          end
        end

        refute_nil(xml_doc)
        refute_nil(included = xml_doc.at_xpath("//included"))
        assert_equal(@included, included.content)

        # no xinclude should happen when not requested
        xml_doc = nil

        File.open(XML_XINCLUDE_FILE) do |fp|
          xml_doc = Nokogiri::XML(fp) do |conf|
            conf.strict.dtdload.noent.nocdata
          end
        end

        refute_nil(xml_doc)
        assert_nil(xml_doc.at_xpath("//included"))
      end

      def test_xinclude_on_document_node
        skip_unless_libxml2("Pure Java version turns XInlcude on against a parser.")
        assert_nil(@xml.at_xpath("//included"))
        @xml.do_xinclude
        refute_nil(included = @xml.at_xpath("//included"))
        assert_equal(@included, included.content)
      end

      def test_xinclude_on_element_subtree
        skip_unless_libxml2("Pure Java version turns XInlcude on against a parser.")
        assert_nil(@xml.at_xpath("//included"))
        @xml.root.do_xinclude
        refute_nil(included = @xml.at_xpath("//included"))
        assert_equal(@included, included.content)
      end

      def test_do_xinclude_accepts_block
        non_default_options = Nokogiri::XML::ParseOptions::NOBLANKS | \
          Nokogiri::XML::ParseOptions::XINCLUDE

        @xml.do_xinclude(non_default_options) do |options|
          assert_equal(non_default_options, options.to_i)
        end
      end

      def test_include_nonexistent_throws_exception
        skip_unless_libxml2("Pure Java version behaves differently")

        @xml.at_xpath("//xi:include")["href"] = "nonexistent.xml"
        assert_raises(Nokogiri::XML::SyntaxError) do
          @xml.do_xinclude(&:nowarning)
        end
      end
    end
  end
end