diff --git a/jvm/src/test/scala/scala/xml/pull/XMLEventReaderTest.scala b/jvm/src/test/scala/scala/xml/pull/XMLEventReaderTest.scala index 6b66326da..49df7d56f 100644 --- a/jvm/src/test/scala/scala/xml/pull/XMLEventReaderTest.scala +++ b/jvm/src/test/scala/scala/xml/pull/XMLEventReaderTest.scala @@ -2,7 +2,7 @@ package scala.xml package pull import org.junit.Test -import org.junit.Assert.{assertFalse, assertTrue} +import org.junit.Assert.{assertEquals,assertFalse, assertTrue} import scala.io.Source import scala.xml.parsing.FatalError @@ -168,4 +168,28 @@ class XMLEventReaderTest { while(er.hasNext) er.next() er.stop() } + + @Test + def entityRefTest: Unit = { // SI-7796 + val source = Source.fromString(""'<>&") + val er = new XMLEventReader(source) + + assertTrue(er.next match { + case EvElemStart(_, "text", _, _) => true + case _ => false + }) + + assertEquals(EvEntityRef("quot"), er.next) + assertEquals(EvEntityRef("apos"), er.next) + assertEquals(EvEntityRef("lt"), er.next) + assertEquals(EvEntityRef("gt"), er.next) + assertEquals(EvEntityRef("amp"), er.next) + + assertTrue(er.next match { + case EvElemEnd(_, "text") => true + case _ => false + }) + + assertTrue(er.isEmpty) + } } diff --git a/shared/src/main/scala/scala/xml/Utility.scala b/shared/src/main/scala/scala/xml/Utility.scala index 467e57af3..57d9291bf 100755 --- a/shared/src/main/scala/scala/xml/Utility.scala +++ b/shared/src/main/scala/scala/xml/Utility.scala @@ -96,13 +96,11 @@ object Utility extends AnyRef with parsing.TokenTests { "lt" -> '<', "gt" -> '>', "amp" -> '&', - "quot" -> '"' - // enigmatic comment explaining why this isn't escaped -- - // is valid xhtml but not html, and IE doesn't know it, says jweb - // "apos" -> '\'' + "quot" -> '"', + "apos" -> '\'' ) - val escMap = pairs map { case (s, c) => c -> ("&%s;" format s) } - val unescMap = pairs ++ Map("apos" -> '\'') + val escMap = (pairs - "apos") map { case (s, c) => c -> ("&%s;" format s) } + val unescMap = pairs } import Escapes.unescMap