diff options
Diffstat (limited to 'test/rexml/test_document.rb')
-rw-r--r-- | test/rexml/test_document.rb | 416 |
1 files changed, 0 insertions, 416 deletions
diff --git a/test/rexml/test_document.rb b/test/rexml/test_document.rb deleted file mode 100644 index c0faae4ae0..0000000000 --- a/test/rexml/test_document.rb +++ /dev/null @@ -1,416 +0,0 @@ -# -*- coding: utf-8 -*- -# frozen_string_literal: false - -require "rexml/document" -require "test/unit" - -module REXMLTests - class TestDocument < Test::Unit::TestCase - def test_version_attributes_to_s - doc = REXML::Document.new(<<-eoxml) - <?xml version="1.0" encoding="UTF-8" standalone="no"?> - <svg id="svg2" - xmlns:sodipodi="foo" - xmlns:inkscape="bar" - sodipodi:version="0.32" - inkscape:version="0.44.1" - > - </svg> - 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(<<EOF) -<?xml version="1.0" encoding="UTF-8"?> -<message>Hello world!</message> -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 = <<EOF -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE member [ - <!ENTITY a "&b;&b;&b;&b;&b;&b;&b;&b;&b;&b;"> - <!ENTITY b "&c;&c;&c;&c;&c;&c;&c;&c;&c;&c;"> - <!ENTITY c "&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;"> - <!ENTITY d "&e;&e;&e;&e;&e;&e;&e;&e;&e;&e;"> - <!ENTITY e "&f;&f;&f;&f;&f;&f;&f;&f;&f;&f;"> - <!ENTITY f "&g;&g;&g;&g;&g;&g;&g;&g;&g;&g;"> - <!ENTITY g "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"> -]> -<member> -&a; -</member> -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 = <<EOF -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE member [ - <!ENTITY a "&b;&b;&b;&b;&b;&b;&b;&b;&b;&b;"> - <!ENTITY b "&c;&c;&c;&c;&c;&c;&c;&c;&c;&c;"> - <!ENTITY c "&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;"> - <!ENTITY d "&e;&e;&e;&e;&e;&e;&e;&e;&e;&e;"> - <!ENTITY e "&f;&f;&f;&f;&f;&f;&f;&f;&f;&f;"> - <!ENTITY f "&g;&g;&g;&g;&g;&g;&g;&g;&g;&g;"> - <!ENTITY g ""> -]> -<member> -&a; -</member> -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 = <<EOF -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE member [ - <!ENTITY a "a"> - <!ENTITY a2 "&a; &a;"> -]> -<member> -&a; -&a2; -< -</member> -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 -<!DOCTYPE root [ - <!ENTITY % a "BOOM.BOOM.BOOM.BOOM.BOOM.BOOM.BOOM.BOOM.BOOM."> - <!ENTITY % b "%a;%a;%a;%a;%a;%a;%a;%a;%a;%a;%a;%a;%a;%a;%a;"> - <!ENTITY % c "%b;%b;%b;%b;%b;%b;%b;%b;%b;%b;%b;%b;%b;%b;%b;"> - <!ENTITY % d "%c;%c;%c;%c;%c;%c;%c;%c;%c;%c;%c;%c;%c;%c;%c;"> - <!ENTITY % e "%d;%d;%d;%d;%d;%d;%d;%d;%d;%d;%d;%d;%d;%d;%d;"> - <!ENTITY % f "%e;%e;%e;%e;%e;%e;%e;%e;%e;%e;%e;%e;%e;%e;%e;"> - <!ENTITY % g "%f;%f;%f;%f;%f;%f;%f;%f;%f;%f;%f;%f;%f;%f;%f;"> - <!ENTITY test "test %g;"> -]> -<cd></cd> -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 -<!DOCTYPE root [ - <!ENTITY % a ""> - <!ENTITY % b "%a;%a;%a;%a;%a;%a;%a;%a;%a;%a;%a;%a;%a;%a;%a;"> - <!ENTITY % c "%b;%b;%b;%b;%b;%b;%b;%b;%b;%b;%b;%b;%b;%b;%b;"> - <!ENTITY % d "%c;%c;%c;%c;%c;%c;%c;%c;%c;%c;%c;%c;%c;%c;%c;"> - <!ENTITY % e "%d;%d;%d;%d;%d;%d;%d;%d;%d;%d;%d;%d;%d;%d;%d;"> - <!ENTITY % f "%e;%e;%e;%e;%e;%e;%e;%e;%e;%e;%e;%e;%e;%e;%e;"> - <!ENTITY % g "%f;%f;%f;%f;%f;%f;%f;%f;%f;%f;%f;%f;%f;%f;%f;"> - <!ENTITY test "test %g;"> -]> -<cd></cd> -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 = "<b>...</b>" - message = "こんにちは、世界!" # Hello world! in Japanese - xml = <<EOX -<?xml version="1.0" encoding="UTF-8"?> -<message><![CDATA[#{tag}#{message}]]></message> -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('<?xml version="1.0" standalone="no" ?>') - assert_equal('no', doc.stand_alone?, bug2539) - doc = REXML::Document.new('<?xml version="1.0" standalone= "no" ?>') - assert_equal('no', doc.stand_alone?, bug2539) - doc = REXML::Document.new('<?xml version="1.0" standalone= "no" ?>') - assert_equal('no', doc.stand_alone?, bug2539) - end - - class WriteTest < Test::Unit::TestCase - def setup - @document = REXML::Document.new(<<-EOX) -<?xml version="1.0" encoding="UTF-8"?> -<message>Hello world!</message> -EOX - end - - class ArgumentsTest < self - def test_output - output = "" - @document.write(output) - assert_equal(<<-EOX, output) -<?xml version='1.0' encoding='UTF-8'?> -<message>Hello world!</message> -EOX - end - - def test_indent - output = "" - indent = 2 - @document.write(output, indent) - assert_equal(<<-EOX.chomp, output) -<?xml version='1.0' encoding='UTF-8'?> -<message> - Hello world! -</message> -EOX - end - - def test_transitive - output = "" - indent = 2 - transitive = true - @document.write(output, indent, transitive) - assert_equal(<<-EOX, output) -<?xml version='1.0' encoding='UTF-8'?> -<message ->Hello world!</message -> -EOX - end - - def test_ie_hack - output = "" - indent = -1 - transitive = false - ie_hack = true - document = REXML::Document.new("<empty/>") - document.write(output, indent, transitive, ie_hack) - assert_equal("<empty />", 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) -<?xml version='1.0' encoding='SHIFT_JIS'?> -<message>#{japanese_text}</message> -EOX - end - end - - class OptionsTest < self - def test_output - output = "" - @document.write(:output => output) - assert_equal(<<-EOX, output) -<?xml version='1.0' encoding='UTF-8'?> -<message>Hello world!</message> -EOX - end - - def test_indent - output = "" - @document.write(:output => output, :indent => 2) - assert_equal(<<-EOX.chomp, output) -<?xml version='1.0' encoding='UTF-8'?> -<message> - Hello world! -</message> -EOX - end - - def test_transitive - output = "" - @document.write(:output => output, :indent => 2, :transitive => true) - assert_equal(<<-EOX, output) -<?xml version='1.0' encoding='UTF-8'?> -<message ->Hello world!</message -> -EOX - end - - def test_ie_hack - output = "" - document = REXML::Document.new("<empty/>") - document.write(:output => output, :ie_hack => true) - assert_equal("<empty />", 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) -<?xml version='1.0' encoding='SHIFT_JIS'?> -<message>#{japanese_text}</message> -EOX - end - end - end - - class BomTest < Test::Unit::TestCase - class HaveEncodingTest < self - def test_utf_8 - xml = <<-EOX.force_encoding("ASCII-8BIT") -<?xml version="1.0" encoding="UTF-8"?> -<message>Hello world!</message> -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") -<?xml version="1.0" encoding="UTF-16"?> -<message>Hello world!</message> -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") -<?xml version="1.0" encoding="UTF-16"?> -<message>Hello world!</message> -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") -<?xml version="1.0"?> -<message>Hello world!</message> -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") -<?xml version="1.0"?> -<message>Hello world!</message> -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") -<?xml version="1.0"?> -<message>Hello world!</message> -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") -<?xml version="1.0"?> -<message>Hello world!</message> -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<?xml version='1.0' encoding='UTF-16'?> -<message>Hello world!</message> -EOX - assert_equal(expected_xml, actual_xml) - end - end - end - end -end |