0

xmlが正しくフォーマットされているかどうかを検証する単体テストを作成していますが、これは失敗しており、理由がわかりません。

そこで、このブログ投稿のコードをテストし、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>

Windows7でGroovy2.0.7を使用するGrails2.2.1を使用しています。

たぶん、OSの行区切り文字に関連するものですか?

編集

両方の文字列をファイルに保存し、Notepad++で確認しました

解析されたxml(XmlUtils)にはCL+RF行区切り文字がありますが、prettyXmlには。しかありませんLF\n複数行の宣言の代わりに使用してテストしたところ、同じ結果になりました。

CL+RFこれはWindowsの行区切り文字なので、Groovyは常に使用する必要はありませんか?

4

1 に答える 1

0

Groovy String/GString docsでは、複数行のリテラルに関連して次のように述べています。

ホストシステムの行終了規則に関係なく、常に文字 '\n' で表されます。

残念ながら、彼らはその理由を本当に語っていません。

于 2013-03-19T21:40:36.493 に答える