@@ -2,19 +2,20 @@ 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
8+ import scala .xml .parsing .FatalError
139
1410class XMLEventReaderTest {
1511
1612 val src = Source .fromString(" <hello><world/>!</hello>" )
1713
14+ private def toSource (s : String ) = new Source {
15+ val iter = s.iterator
16+ override def reportError (pos : Int , msg : String , out : java.io.PrintStream = Console .err) {}
17+ }
18+
1819 @ Test
1920 def pull : Unit = {
2021 val er = new XMLEventReader (src)
@@ -44,17 +45,114 @@ class XMLEventReaderTest {
4445 @ Test
4546 def issue35 : Unit = {
4647 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)
48+ val r = new XMLEventReader (toSource(broken))
49+
50+ assertTrue(r.next.isInstanceOf [EvElemStart ])
51+ }
52+
53+ @ Test (expected = classOf [FatalError ])
54+ def malformedCDATA : Unit = {
55+ val data = " <broken><![CDATA[A"
56+ val r = new XMLEventReader (toSource(data))
57+
5258 assertTrue(r.next.isInstanceOf [EvElemStart ])
59+ // error when returning EvText of CDATA
60+ r.next
61+ }
62+
63+ @ Test (expected = classOf [FatalError ])
64+ def malformedComment1 : Unit = {
65+ val data = " <!"
66+ val r = new XMLEventReader (toSource(data))
67+
68+ // error when returning EvComment
69+ r.next
70+ }
71+
72+ @ Test (expected = classOf [FatalError ])
73+ def malformedComment2 : Unit = {
74+ val data = " <!-- comment "
75+ val r = new XMLEventReader (toSource(data))
76+
77+ // error when returning EvComment
78+ r.next
79+ }
80+
81+ @ Test
82+ def malformedDTD1 : Unit = {
83+ // broken ELEMENT
84+ val data =
85+ """ <?xml version="1.0" encoding="utf-8"?>
86+ |<!DOCTYPE broken [
87+ | <!ELE
88+ """ .stripMargin
89+ val r = new XMLEventReader (toSource(data))
90+
91+ assertFalse(r.hasNext)
92+ }
93+
94+ @ Test
95+ def malformedDTD2 : Unit = {
96+ val data =
97+ """ <!DOCTYPE broken [
98+ | <!ELEMENT data (#PCDATA)>
99+ """ .stripMargin
100+ val r = new XMLEventReader (toSource(data))
101+
102+ assertFalse(r.hasNext)
103+ }
104+
105+ @ Test
106+ def malformedDTD3 : Unit = {
107+ // broken ATTLIST
108+ val data =
109+ """ <!DOCTYPE broken [
110+ | <!ATTL
111+ """ .stripMargin
112+ val r = new XMLEventReader (toSource(data))
113+
114+ assertFalse(r.hasNext)
115+ }
116+
117+ @ Test
118+ def malformedDTD4 : Unit = {
119+ // unexpected declaration
120+ val data =
121+ """ <!DOCTYPE broken [
122+ | <!UNEXPECTED
123+ """ .stripMargin
124+ val r = new XMLEventReader (toSource(data))
125+
126+ assertFalse(r.hasNext)
53127 }
54128
55- @ Test (expected = classOf [Exception ])
56- def missingTagTest : Unit = {
57- val data =
129+ @ Test
130+ def malformedDTD5 : Unit = {
131+ val data =
132+ """ <!DOCTYPE broken [
133+ | <!ENTITY % foo 'INCLUDE'>
134+ | <![%foo;[
135+ """ .stripMargin
136+ val r = new XMLEventReader (toSource(data))
137+
138+ assertFalse(r.hasNext)
139+ }
140+
141+ @ Test
142+ def malformedDTD6 : Unit = {
143+ val data =
144+ """ <!DOCTYPE broken [
145+ | <!ENTITY % foo 'IGNORE'>
146+ | <![%foo;[
147+ """ .stripMargin
148+ val r = new XMLEventReader (toSource(data))
149+
150+ assertFalse(r.hasNext)
151+ }
152+
153+ @ Test (expected = classOf [Exception ])
154+ def missingTagTest : Unit = {
155+ val data =
58156 """ <?xml version="1.0" ?>
59157 |<verbosegc xmlns="http://www.ibm.com/j9/verbosegc">
60158 |
@@ -66,8 +164,8 @@ class XMLEventReaderTest {
66164 |</exclusive-start>
67165 |""" .stripMargin
68166
69- val er = new XMLEventReader (Source .fromString (data))
70- while (er.hasNext) er.next()
71- er.stop()
72- }
167+ val er = new XMLEventReader (toSource (data))
168+ while (er.hasNext) er.next()
169+ er.stop()
170+ }
73171}
0 commit comments