Groovy Pretty Print XML断言失败

时间:2013-03-19 19:06:58

标签: grails groovy

我正在编写一个单元测试来验证xml是否格式正确,但这是失败的,我无法弄清楚原因。

所以我决定测试this blog post的代码并在Grails控制台中测试,它也失败了。

import groovy.xml.*

def prettyXml = '''\
<?xml version="1.0" encoding="UTF-8"?>
<languages>
  <language id="1">Groovy</language>
  <language id="2">Java</language>
  <language id="3">Scala</language>
</languages>
'''


// Pretty print a non-formatted XML String.
def xmlString = '<languages><language id="1">Groovy</language><language id="2">Java</language><language id="3">Scala</language></languages>'
assert XmlUtil.serialize(xmlString) == prettyXml

断言失败了:

Assertion failed: 

assert XmlUtil.serialize(xmlString) == prettyXml
               |         |          |  |
               |         |          |  <?xml version="1.0" encoding="UTF-8"?>
               |         |          |  <languages>
               |         |          |    <language id="1">Groovy</language>
               |         |          |    <language id="2">Java</language>
               |         |          |    <language id="3">Scala</language>
               |         |          |  </languages>
               |         |          false
               |         <languages><language id="1">Groovy</language><language id="2">Java</language><language id="3">Scala</language></languages>
               <?xml version="1.0" encoding="UTF-8"?>
               <languages>
                 <language id="1">Groovy</language>
                 <language id="2">Java</language>
                 <language id="3">Scala</language>
               </languages>

我正在使用Grails 2.2.1,它在Windows 7上使用Groovy 2.0.7。

可能与OS行分隔符有关吗?

修改

我将两个字符串保存到文件中,并使用Notepad ++检查

解析后的xml(XmlUtils)将CL+RF作为行分隔符,但prettyXml只有LF。我还使用\n而不是多行声明进行了测试,结果相同!

Groovy不应该总是使用CL+RF,因为这是Windows行分隔符吗?

1 个答案:

答案 0 :(得分:0)

Groovy String/GString docs中,它与多行文字相关:

  

[sic]始终由字符'\ n'表示,无论如何   主机系统的行终止约定。

不幸的是,他们并没有真正说出原因。