@@ -2,19 +2,20 @@ package scala.xml
2
2
package pull
3
3
4
4
import 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 }
11
6
12
7
import scala .io .Source
8
+ import scala .xml .parsing .FatalError
13
9
14
10
class XMLEventReaderTest {
15
11
16
12
val src = Source .fromString(" <hello><world/>!</hello>" )
17
13
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
+
18
19
@ Test
19
20
def pull : Unit = {
20
21
val er = new XMLEventReader (src)
@@ -44,17 +45,114 @@ class XMLEventReaderTest {
44
45
@ Test
45
46
def issue35 : Unit = {
46
47
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
+
52
58
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)
53
127
}
54
128
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 =
58
156
""" <?xml version="1.0" ?>
59
157
|<verbosegc xmlns="http://www.ibm.com/j9/verbosegc">
60
158
|
@@ -66,8 +164,8 @@ class XMLEventReaderTest {
66
164
|</exclusive-start>
67
165
|""" .stripMargin
68
166
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
+ }
73
171
}
0 commit comments