From fcbf63e62c627deae76c1b8cb8c0876c536ed811 Mon Sep 17 00:00:00 2001 From: Jari Vetoniemi Date: Mon, 16 Mar 2020 18:49:26 +0900 Subject: Fresh start --- jni/ruby/test/rexml/test_document.rb | 415 +++++++++++++++++++++++++++++++++++ 1 file changed, 415 insertions(+) create mode 100644 jni/ruby/test/rexml/test_document.rb (limited to 'jni/ruby/test/rexml/test_document.rb') diff --git a/jni/ruby/test/rexml/test_document.rb b/jni/ruby/test/rexml/test_document.rb new file mode 100644 index 0000000..46cd6f7 --- /dev/null +++ b/jni/ruby/test/rexml/test_document.rb @@ -0,0 +1,415 @@ +# -*- coding: utf-8 -*- + +require "rexml/document" +require "test/unit" + +module REXMLTests + class TestDocument < Test::Unit::TestCase + def test_version_attributes_to_s + doc = REXML::Document.new(<<-eoxml) + + + + eoxml + + string = doc.to_s + assert_match('xmlns:sodipodi', string) + assert_match('xmlns:inkscape', string) + assert_match('sodipodi:version', string) + assert_match('inkscape:version', string) + end + + def test_new + doc = REXML::Document.new(< +Hello world! +EOF + assert_equal("Hello world!", doc.root.children.first.value) + end + + class EntityExpansionLimitTest < Test::Unit::TestCase + def setup + @default_entity_expansion_limit = REXML::Security.entity_expansion_limit + end + + def teardown + REXML::Security.entity_expansion_limit = @default_entity_expansion_limit + end + + class GeneralEntityTest < self + def test_have_value + xml = < + + + + + + + +]> + +&a; + +EOF + + doc = REXML::Document.new(xml) + assert_raise(RuntimeError) do + doc.root.children.first.value + end + REXML::Security.entity_expansion_limit = 100 + assert_equal(100, REXML::Security.entity_expansion_limit) + doc = REXML::Document.new(xml) + assert_raise(RuntimeError) do + doc.root.children.first.value + end + assert_equal(101, doc.entity_expansion_count) + end + + def test_empty_value + xml = < + + + + + + + +]> + +&a; + +EOF + + doc = REXML::Document.new(xml) + assert_raise(RuntimeError) do + doc.root.children.first.value + end + REXML::Security.entity_expansion_limit = 100 + assert_equal(100, REXML::Security.entity_expansion_limit) + doc = REXML::Document.new(xml) + assert_raise(RuntimeError) do + doc.root.children.first.value + end + assert_equal(101, doc.entity_expansion_count) + end + + def test_with_default_entity + xml = < + + +]> + +&a; +&a2; +< + +EOF + + REXML::Security.entity_expansion_limit = 4 + doc = REXML::Document.new(xml) + assert_equal("\na\na a\n<\n", doc.root.children.first.value) + REXML::Security.entity_expansion_limit = 3 + doc = REXML::Document.new(xml) + assert_raise(RuntimeError) do + doc.root.children.first.value + end + end + end + + class ParameterEntityTest < self + def test_have_value + xml = < + + + + + + + +]> + +EOF + + assert_raise(REXML::ParseException) do + REXML::Document.new(xml) + end + REXML::Security.entity_expansion_limit = 100 + assert_equal(100, REXML::Security.entity_expansion_limit) + assert_raise(REXML::ParseException) do + REXML::Document.new(xml) + end + end + + def test_empty_value + xml = < + + + + + + + +]> + +EOF + + assert_raise(REXML::ParseException) do + REXML::Document.new(xml) + end + REXML::Security.entity_expansion_limit = 100 + assert_equal(100, REXML::Security.entity_expansion_limit) + assert_raise(REXML::ParseException) do + REXML::Document.new(xml) + end + end + end + end + + def test_tag_in_cdata_with_not_ascii_only_but_ascii8bit_encoding_source + tag = "..." + message = "こんにちは、世界!" # Hello world! in Japanese + xml = < + +EOX + xml.force_encoding(Encoding::ASCII_8BIT) + doc = REXML::Document.new(xml) + assert_equal("#{tag}#{message}", doc.root.children.first.value) + end + + def test_xml_declaration_standalone + bug2539 = '[ruby-core:27345]' + doc = REXML::Document.new('') + assert_equal('no', doc.stand_alone?, bug2539) + doc = REXML::Document.new('') + assert_equal('no', doc.stand_alone?, bug2539) + doc = REXML::Document.new('') + assert_equal('no', doc.stand_alone?, bug2539) + end + + class WriteTest < Test::Unit::TestCase + def setup + @document = REXML::Document.new(<<-EOX) + +Hello world! +EOX + end + + class ArgumentsTest < self + def test_output + output = "" + @document.write(output) + assert_equal(<<-EOX, output) + +Hello world! +EOX + end + + def test_indent + output = "" + indent = 2 + @document.write(output, indent) + assert_equal(<<-EOX.chomp, output) + + + Hello world! + +EOX + end + + def test_transitive + output = "" + indent = 2 + transitive = true + @document.write(output, indent, transitive) + assert_equal(<<-EOX, output) + +Hello world! +EOX + end + + def test_ie_hack + output = "" + indent = -1 + transitive = false + ie_hack = true + document = REXML::Document.new("") + document.write(output, indent, transitive, ie_hack) + assert_equal("", output) + end + + def test_encoding + output = "" + indent = -1 + transitive = false + ie_hack = false + encoding = "Windows-31J" + + @document.xml_decl.encoding = "Shift_JIS" + japanese_text = "こんにちは" + @document.root.text = japanese_text + @document.write(output, indent, transitive, ie_hack, encoding) + assert_equal(<<-EOX.encode(encoding), output) + +#{japanese_text} +EOX + end + end + + class OptionsTest < self + def test_output + output = "" + @document.write(:output => output) + assert_equal(<<-EOX, output) + +Hello world! +EOX + end + + def test_indent + output = "" + @document.write(:output => output, :indent => 2) + assert_equal(<<-EOX.chomp, output) + + + Hello world! + +EOX + end + + def test_transitive + output = "" + @document.write(:output => output, :indent => 2, :transitive => true) + assert_equal(<<-EOX, output) + +Hello world! +EOX + end + + def test_ie_hack + output = "" + document = REXML::Document.new("") + document.write(:output => output, :ie_hack => true) + assert_equal("", output) + end + + def test_encoding + output = "" + encoding = "Windows-31J" + @document.xml_decl.encoding = "Shift_JIS" + japanese_text = "こんにちは" + @document.root.text = japanese_text + @document.write(:output => output, :encoding => encoding) + assert_equal(<<-EOX.encode(encoding), output) + +#{japanese_text} +EOX + end + end + end + + class BomTest < Test::Unit::TestCase + class HaveEncodingTest < self + def test_utf_8 + xml = <<-EOX.force_encoding("ASCII-8BIT") + +Hello world! +EOX + bom = "\ufeff".force_encoding("ASCII-8BIT") + document = REXML::Document.new(bom + xml) + assert_equal("UTF-8", document.encoding) + end + + def test_utf_16le + xml = <<-EOX.encode("UTF-16LE").force_encoding("ASCII-8BIT") + +Hello world! +EOX + bom = "\ufeff".encode("UTF-16LE").force_encoding("ASCII-8BIT") + document = REXML::Document.new(bom + xml) + assert_equal("UTF-16", document.encoding) + end + + def test_utf_16be + xml = <<-EOX.encode("UTF-16BE").force_encoding("ASCII-8BIT") + +Hello world! +EOX + bom = "\ufeff".encode("UTF-16BE").force_encoding("ASCII-8BIT") + document = REXML::Document.new(bom + xml) + assert_equal("UTF-16", document.encoding) + end + end + + class NoEncodingTest < self + def test_utf_8 + xml = <<-EOX.force_encoding("ASCII-8BIT") + +Hello world! +EOX + bom = "\ufeff".force_encoding("ASCII-8BIT") + document = REXML::Document.new(bom + xml) + assert_equal("UTF-8", document.encoding) + end + + def test_utf_16le + xml = <<-EOX.encode("UTF-16LE").force_encoding("ASCII-8BIT") + +Hello world! +EOX + bom = "\ufeff".encode("UTF-16LE").force_encoding("ASCII-8BIT") + document = REXML::Document.new(bom + xml) + assert_equal("UTF-16", document.encoding) + end + + def test_utf_16be + xml = <<-EOX.encode("UTF-16BE").force_encoding("ASCII-8BIT") + +Hello world! +EOX + bom = "\ufeff".encode("UTF-16BE").force_encoding("ASCII-8BIT") + document = REXML::Document.new(bom + xml) + assert_equal("UTF-16", document.encoding) + end + end + + class WriteTest < self + def test_utf_16 + xml = <<-EOX.encode("UTF-16LE").force_encoding("ASCII-8BIT") + +Hello world! +EOX + bom = "\ufeff".encode("UTF-16LE").force_encoding("ASCII-8BIT") + document = REXML::Document.new(bom + xml) + + actual_xml = "" + document.write(actual_xml) + expected_xml = <<-EOX.encode("UTF-16BE") +\ufeff +Hello world! +EOX + assert_equal(expected_xml, actual_xml) + end + end + end + end +end -- cgit v1.2.3