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 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142
|
require "helper"
module Nokogiri
module XML
class TestSchema < Nokogiri::TestCase
def setup
assert @xsd = Nokogiri::XML::Schema(File.read(PO_SCHEMA_FILE))
end
def test_schema_from_document
doc = Nokogiri::XML(File.open(PO_SCHEMA_FILE))
assert doc
xsd = Nokogiri::XML::Schema.from_document doc
assert_instance_of Nokogiri::XML::Schema, xsd
end
def test_invalid_schema_do_not_raise_exceptions
xsd = Nokogiri::XML::Schema.new <<EOF
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:group name="foo1">
<xs:sequence>
<xs:element name="bar" type="xs:boolean" />
</xs:sequence>
</xs:group>
<xs:group name="foo2">
<xs:sequence>
<xs:element name="bar" type="xs:string" />
</xs:sequence>
</xs:group>
<xs:element name="foo">
<xs:complexType>
<xs:choice>
<xs:group ref="foo1"/>
<xs:group ref="foo2"/>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
EOF
assert_instance_of Nokogiri::XML::Schema, xsd
end
def test_schema_from_document_node
doc = Nokogiri::XML(File.open(PO_SCHEMA_FILE))
assert doc
xsd = Nokogiri::XML::Schema.from_document doc.root
assert_instance_of Nokogiri::XML::Schema, xsd
end
def test_schema_validates_with_relative_paths
xsd = File.join(ASSETS_DIR, 'foo', 'foo.xsd')
xml = File.join(ASSETS_DIR, 'valid_bar.xml')
doc = Nokogiri::XML(File.open(xsd))
xsd = Nokogiri::XML::Schema.from_document doc
doc = Nokogiri::XML(File.open(xml))
assert xsd.valid?(doc)
end
def test_parse_with_memory
assert_instance_of Nokogiri::XML::Schema, @xsd
assert_equal 0, @xsd.errors.length
end
def test_new
assert xsd = Nokogiri::XML::Schema.new(File.read(PO_SCHEMA_FILE))
assert_instance_of Nokogiri::XML::Schema, xsd
end
def test_parse_with_io
xsd = nil
File.open(PO_SCHEMA_FILE, 'rb') { |f|
assert xsd = Nokogiri::XML::Schema(f)
}
assert_equal 0, xsd.errors.length
end
def test_parse_with_errors
xml = File.read(PO_SCHEMA_FILE).sub(/name="/, 'name=')
assert_raises(Nokogiri::XML::SyntaxError) {
Nokogiri::XML::Schema(xml)
}
end
def test_validate_document
doc = Nokogiri::XML(File.read(PO_XML_FILE))
assert errors = @xsd.validate(doc)
assert_equal 0, errors.length
end
def test_validate_file
assert errors = @xsd.validate(PO_XML_FILE)
assert_equal 0, errors.length
end
def test_validate_invalid_document
doc = Nokogiri::XML File.read(PO_XML_FILE)
doc.css("city").unlink
assert errors = @xsd.validate(doc)
assert_equal 2, errors.length
end
def test_validate_invalid_file
tempfile = Tempfile.new("xml")
doc = Nokogiri::XML File.read(PO_XML_FILE)
doc.css("city").unlink
tempfile.write doc.to_xml
tempfile.close
assert errors = @xsd.validate(tempfile.path)
assert_equal 2, errors.length
end
def test_validate_non_document
string = File.read(PO_XML_FILE)
assert_raise(ArgumentError) {@xsd.validate(string)}
end
def test_valid?
valid_doc = Nokogiri::XML(File.read(PO_XML_FILE))
invalid_doc = Nokogiri::XML(
File.read(PO_XML_FILE).gsub(/<city>[^<]*<\/city>/, '')
)
assert(@xsd.valid?(valid_doc))
assert(!@xsd.valid?(invalid_doc))
end
def test_xsd_with_dtd
Dir.chdir(File.join(ASSETS_DIR, 'saml')) do
# works
Nokogiri::XML::Schema(IO.read('xmldsig_schema.xsd'))
# was not working
Nokogiri::XML::Schema(IO.read('saml20protocol_schema.xsd'))
end
end
end
end
end
|