1# frozen_string_literal: false
2
3require_relative "rexml_test_utils"
4
5module REXMLTests
6  class TextTester < Test::Unit::TestCase
7    include REXML
8
9    def test_new_text_response_whitespace_default
10      text = Text.new("a  b\t\tc", true)
11      assert_equal("a b\tc", Text.new(text).to_s)
12    end
13
14    def test_new_text_response_whitespace_true
15      text = Text.new("a  b\t\tc", true)
16      assert_equal("a  b\t\tc", Text.new(text, true).to_s)
17    end
18
19    def test_new_text_raw_default
20      text = Text.new("&amp;lt;", false, nil, true)
21      assert_equal("&amp;lt;", Text.new(text).to_s)
22    end
23
24    def test_new_text_raw_false
25      text = Text.new("&amp;lt;", false, nil, true)
26      assert_equal("&amp;amp;lt;", Text.new(text, false, nil, false).to_s)
27    end
28
29    def test_new_text_entity_filter_default
30      document = REXML::Document.new(<<-XML)
31<!DOCTYPE root [
32  <!ENTITY a "aaa">
33  <!ENTITY b "bbb">
34]>
35<root/>
36      XML
37      text = Text.new("aaa bbb", false, document.root, nil, ["a"])
38      assert_equal("aaa &b;",
39                   Text.new(text, false, document.root).to_s)
40    end
41
42    def test_new_text_entity_filter_custom
43      document = REXML::Document.new(<<-XML)
44<!DOCTYPE root [
45  <!ENTITY a "aaa">
46  <!ENTITY b "bbb">
47]>
48<root/>
49      XML
50      text = Text.new("aaa bbb", false, document.root, nil, ["a"])
51      assert_equal("&a; bbb",
52                   Text.new(text, false, document.root, nil, ["b"]).to_s)
53    end
54
55    def test_shift_operator_chain
56      text = Text.new("original\r\n")
57      text << "append1\r\n" << "append2\r\n"
58      assert_equal("original\nappend1\nappend2\n", text.to_s)
59    end
60
61    def test_shift_operator_cache
62      text = Text.new("original\r\n")
63      text << "append1\r\n" << "append2\r\n"
64      assert_equal("original\nappend1\nappend2\n", text.to_s)
65      text << "append3\r\n" << "append4\r\n"
66      assert_equal("original\nappend1\nappend2\nappend3\nappend4\n", text.to_s)
67    end
68
69    def test_clone
70      text = Text.new("&amp;lt; <")
71      assert_equal(text.to_s,
72                   text.clone.to_s)
73    end
74  end
75end
76