@@ -77,6 +77,111 @@ def test_notations
7777 end
7878 end
7979
80+ class TestDocType < Test ::Unit ::TestCase
81+ class TestExternalID < self
82+ class TestSystem < self
83+ class TestSystemLiteral < self
84+ def test_to_s
85+ doctype = REXML ::DocType . new ( [ "root" , "SYSTEM" , nil , "root.dtd" ] )
86+ assert_equal ( "<!DOCTYPE root SYSTEM \" root.dtd\" >" ,
87+ doctype . to_s )
88+ end
89+
90+ def test_to_s_apostrophe
91+ doctype = REXML ::DocType . new ( [ "root" , "SYSTEM" , nil , "root.dtd" ] )
92+ doc = REXML ::Document . new
93+ doc << doctype
94+ doctype . parent . context [ :prologue_quote ] = :apostrophe
95+ assert_equal ( "<!DOCTYPE root SYSTEM 'root.dtd'>" ,
96+ doctype . to_s )
97+ end
98+
99+ def test_to_s_single_quote_apostrophe
100+ doctype = REXML ::DocType . new ( [ "root" , "SYSTEM" , nil , "root'.dtd" ] )
101+ doc = REXML ::Document . new
102+ doc << doctype
103+ # This isn't used.
104+ doctype . parent . context [ :prologue_quote ] = :apostrophe
105+ assert_equal ( "<!DOCTYPE root SYSTEM \" root'.dtd\" >" ,
106+ doctype . to_s )
107+ end
108+
109+ def test_to_s_double_quote
110+ doctype = REXML ::DocType . new ( [ "root" , "SYSTEM" , nil , "root\" .dtd" ] )
111+ doc = REXML ::Document . new
112+ doc << doctype
113+ # This isn't used.
114+ doctype . parent . context [ :prologue_quote ] = :apostrophe
115+ assert_equal ( "<!DOCTYPE root SYSTEM 'root\" .dtd'>" ,
116+ doctype . to_s )
117+ end
118+ end
119+ end
120+
121+ class TestPublic < self
122+ class TestPublicIDLiteral < self
123+ def test_to_s
124+ doctype = REXML ::DocType . new ( [ "root" , "PUBLIC" , "pub" , "root.dtd" ] )
125+ assert_equal ( "<!DOCTYPE root PUBLIC \" pub\" \" root.dtd\" >" ,
126+ doctype . to_s )
127+ end
128+
129+ def test_to_s_apostrophe
130+ doctype = REXML ::DocType . new ( [ "root" , "PUBLIC" , "pub" , "root.dtd" ] )
131+ doc = REXML ::Document . new
132+ doc << doctype
133+ doctype . parent . context [ :prologue_quote ] = :apostrophe
134+ assert_equal ( "<!DOCTYPE root PUBLIC 'pub' 'root.dtd'>" ,
135+ doctype . to_s )
136+ end
137+
138+ def test_to_s_apostrophe_include_apostrophe
139+ doctype = REXML ::DocType . new ( [ "root" , "PUBLIC" , "pub'" , "root.dtd" ] )
140+ doc = REXML ::Document . new
141+ doc << doctype
142+ # This isn't used.
143+ doctype . parent . context [ :prologue_quote ] = :apostrophe
144+ assert_equal ( "<!DOCTYPE root PUBLIC \" pub'\" 'root.dtd'>" ,
145+ doctype . to_s )
146+ end
147+ end
148+
149+ class TestSystemLiteral < self
150+ def test_to_s
151+ doctype = REXML ::DocType . new ( [ "root" , "PUBLIC" , "pub" , "root.dtd" ] )
152+ assert_equal ( "<!DOCTYPE root PUBLIC \" pub\" \" root.dtd\" >" ,
153+ doctype . to_s )
154+ end
155+
156+ def test_to_s_apostrophe
157+ doctype = REXML ::DocType . new ( [ "root" , "PUBLIC" , "pub" , "root.dtd" ] )
158+ doc = REXML ::Document . new
159+ doc << doctype
160+ doctype . parent . context [ :prologue_quote ] = :apostrophe
161+ assert_equal ( "<!DOCTYPE root PUBLIC 'pub' 'root.dtd'>" ,
162+ doctype . to_s )
163+ end
164+
165+ def test_to_s_apostrophe_include_apostrophe
166+ doctype = REXML ::DocType . new ( [ "root" , "PUBLIC" , "pub" , "root'.dtd" ] )
167+ doc = REXML ::Document . new
168+ doc << doctype
169+ # This isn't used.
170+ doctype . parent . context [ :prologue_quote ] = :apostrophe
171+ assert_equal ( "<!DOCTYPE root PUBLIC 'pub' \" root'.dtd\" >" ,
172+ doctype . to_s )
173+ end
174+
175+ def test_to_s_double_quote
176+ doctype = REXML ::DocType . new ( [ "root" , "PUBLIC" , "pub" , "root\" .dtd" ] )
177+ assert_equal ( "<!DOCTYPE root PUBLIC \" pub\" 'root\" .dtd'>" ,
178+ doctype . to_s )
179+ end
180+ end
181+ end
182+ end
183+ end
184+
80185 class TestNotationDeclPublic < Test ::Unit ::TestCase
81186 def setup
82187 @name = "vrml"
0 commit comments