@@ -2,19 +2,19 @@ package scala.xml
22package pull
33
44import org .junit .Test
5- import org .junit .Ignore
6- import org .junit .runner .RunWith
7- import org .junit .runners .JUnit4
8- import org .junit .Assert .assertTrue
9- import org .junit .Assert .assertFalse
10- import org .junit .Assert .assertEquals
5+ import org .junit .Assert .{assertFalse , assertTrue }
116
127import scala .io .Source
138
149class XMLEventReaderTest {
1510
1611 val src = Source .fromString(" <hello><world/>!</hello>" )
1712
13+ private def toSource (s : String ) = new Source {
14+ val iter = s.iterator
15+ override def reportError (pos : Int , msg : String , out : java.io.PrintStream = Console .err) {}
16+ }
17+
1818 @ Test
1919 def pull : Unit = {
2020 val er = new XMLEventReader (src)
@@ -44,17 +44,110 @@ class XMLEventReaderTest {
4444 @ Test
4545 def issue35 : Unit = {
4646 val broken = " <broken attribute='is truncated"
47- val x = new Source {
48- val iter = broken.iterator
49- override def reportError (pos : Int , msg : String , out : java.io.PrintStream = Console .err) {}
50- }
51- val r = new XMLEventReader (x)
47+ val r = new XMLEventReader (toSource(broken))
48+
49+ assertTrue(r.next.isInstanceOf [EvElemStart ])
50+ }
51+
52+ @ Test
53+ def malformedCDATA : Unit = {
54+ val data = " <broken><![CDATA[A"
55+ val r = new XMLEventReader (toSource(data))
56+
57+ assertTrue(r.next.isInstanceOf [EvElemStart ])
58+ }
59+
60+ @ Test
61+ def malformedComment1 : Unit = {
62+ val data = " <broken><!"
63+ val r = new XMLEventReader (toSource(data))
64+
5265 assertTrue(r.next.isInstanceOf [EvElemStart ])
5366 }
5467
55- @ Test (expected = classOf [Exception ])
56- def missingTagTest : Unit = {
57- val data =
68+ @ Test
69+ def malformedComment2 : Unit = {
70+ val data = " <broken><!-- comment "
71+ val r = new XMLEventReader (toSource(data))
72+
73+ assertTrue(r.next.isInstanceOf [EvElemStart ])
74+ }
75+
76+ @ Test
77+ def malformedDTD1 : Unit = {
78+ // broken ELEMENT
79+ val data =
80+ """ <?xml version="1.0" encoding="utf-8"?>
81+ |<!DOCTYPE broken [
82+ | <!ELE
83+ """ .stripMargin
84+ val r = new XMLEventReader (toSource(data))
85+
86+ assertFalse(r.hasNext)
87+ }
88+
89+ @ Test
90+ def malformedDTD2 : Unit = {
91+ val data =
92+ """ <!DOCTYPE broken [
93+ | <!ELEMENT data (#PCDATA)>
94+ """ .stripMargin
95+ val r = new XMLEventReader (toSource(data))
96+
97+ assertFalse(r.hasNext)
98+ }
99+
100+ @ Test
101+ def malformedDTD3 : Unit = {
102+ // broken ATTLIST
103+ val data =
104+ """ <!DOCTYPE broken [
105+ | <!ATTL
106+ """ .stripMargin
107+ val r = new XMLEventReader (toSource(data))
108+
109+ assertFalse(r.hasNext)
110+ }
111+
112+ @ Test
113+ def malformedDTD4 : Unit = {
114+ // unexpected declaration
115+ val data =
116+ """ <!DOCTYPE broken [
117+ | <!UNEXPECTED
118+ """ .stripMargin
119+ val r = new XMLEventReader (toSource(data))
120+
121+ assertFalse(r.hasNext)
122+ }
123+
124+ @ Test
125+ def malformedDTD5 : Unit = {
126+ val data =
127+ """ <!DOCTYPE broken [
128+ | <!ENTITY % foo 'INCLUDE'>
129+ | <![%foo;[
130+ """ .stripMargin
131+ val r = new XMLEventReader (toSource(data))
132+
133+ assertFalse(r.hasNext)
134+ }
135+
136+ @ Test
137+ def malformedDTD6 : Unit = {
138+ val data =
139+ """ <!DOCTYPE broken [
140+ | <!ENTITY % foo 'IGNORE'>
141+ | <![%foo;[
142+ """ .stripMargin
143+ val r = new XMLEventReader (toSource(data))
144+
145+ assertFalse(r.hasNext)
146+ }
147+
148+ @ Test (expected = classOf [Exception ])
149+ def missingTagTest : Unit = {
150+ val data =
58151 """ <?xml version="1.0" ?>
59152 |<verbosegc xmlns="http://www.ibm.com/j9/verbosegc">
60153 |
@@ -66,8 +159,8 @@ class XMLEventReaderTest {
66159 |</exclusive-start>
67160 |""" .stripMargin
68161
69- val er = new XMLEventReader (Source .fromString (data))
70- while (er.hasNext) er.next()
71- er.stop()
72- }
162+ val er = new XMLEventReader (toSource (data))
163+ while (er.hasNext) er.next()
164+ er.stop()
165+ }
73166}
0 commit comments