1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
|
suite 'Document Type Declaration:', ->
test 'SYSTEM dtd from create()', ->
eq(
xml('root', { sysID: 'hello.dtd' }).ele('node').txt('test').end()
'<?xml version="1.0"?><!DOCTYPE root SYSTEM "hello.dtd"><root><node>test</node></root>'
)
test 'Public dtd from create()', ->
eq(
xml('HTML', {
pubID: '-//W3C//DTD HTML 4.01//EN'
sysID: 'http://www.w3.org/TR/html4/strict.dtd'
}).end()
'<?xml version="1.0"?>' +
'<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" ' +
'"http://www.w3.org/TR/html4/strict.dtd">' +
'<HTML/>'
)
test 'Empty dtd from create()', ->
eq(
xml('root', { sysID: '' }).ele('node').txt('test').end()
'<?xml version="1.0"?><!DOCTYPE root><root><node>test</node></root>'
)
test 'Replace dtd', ->
eq(
xml('root').dtd('hello.dtd').up().ele('node').txt('test').dtd('bye.dtd').end()
'<?xml version="1.0"?><!DOCTYPE root SYSTEM "bye.dtd"><root><node>test</node></root>'
)
test 'Internal and external dtd', ->
eq(
xml('root')
.dtd('hello.dtd')
.ins('pub_border', 'thin')
.ele('img', 'EMPTY')
.com('Image attributes follow')
.att('img', 'height', 'CDATA', '#REQUIRED')
.att('img', 'visible', '(yes|no)', '#DEFAULT', "yes")
.not('fs', { sysID: 'http://my.fs.com/reader' })
.not('fs-nt', { pubID: 'FS Network Reader 1.0' })
.not('fs-nt', { pubID: 'FS Network Reader 1.0', sysID: 'http://my.fs.com/reader' })
.att('img', 'src', 'NOTATION (fs|fs-nt)', '#REQUIRED')
.dat('<owner>John</owner>')
.ele('node')
.ent('ent', 'my val')
.ent('ent', { sysID: 'http://www.myspec.com/ent' })
.ent('ent', { pubID: '-//MY//SPEC ENT//EN', sysID: 'http://www.myspec.com/ent' })
.ent('ent', { sysID: 'http://www.myspec.com/ent', nData: 'entprg' })
.ent('ent', { pubID: '-//MY//SPEC ENT//EN', sysID: 'http://www.myspec.com/ent', nData: 'entprg' })
.pent('ent', 'my val')
.pent('ent', { sysID: 'http://www.myspec.com/ent' })
.pent('ent', { pubID: '-//MY//SPEC ENT//EN', sysID: 'http://www.myspec.com/ent' })
.ele('nodearr', ['a', 'b'])
.root()
.ele('node').txt('test')
.end()
'<?xml version="1.0"?>' +
'<!DOCTYPE root SYSTEM "hello.dtd" [' +
'<?pub_border thin?>' +
'<!ELEMENT img EMPTY>' +
'<!-- Image attributes follow -->' +
'<!ATTLIST img height CDATA #REQUIRED>' +
'<!ATTLIST img visible (yes|no) "yes">' +
'<!NOTATION fs SYSTEM "http://my.fs.com/reader">' +
'<!NOTATION fs-nt PUBLIC "FS Network Reader 1.0">' +
'<!NOTATION fs-nt PUBLIC "FS Network Reader 1.0" "http://my.fs.com/reader">' +
'<!ATTLIST img src NOTATION (fs|fs-nt) #REQUIRED>' +
'<![CDATA[<owner>John</owner>]]>' +
'<!ELEMENT node (#PCDATA)>' +
'<!ENTITY ent "my val">' +
'<!ENTITY ent SYSTEM "http://www.myspec.com/ent">' +
'<!ENTITY ent PUBLIC "-//MY//SPEC ENT//EN" "http://www.myspec.com/ent">' +
'<!ENTITY ent SYSTEM "http://www.myspec.com/ent" NDATA entprg>' +
'<!ENTITY ent PUBLIC "-//MY//SPEC ENT//EN" "http://www.myspec.com/ent" NDATA entprg>' +
'<!ENTITY % ent "my val">' +
'<!ENTITY % ent SYSTEM "http://www.myspec.com/ent">' +
'<!ENTITY % ent PUBLIC "-//MY//SPEC ENT//EN" "http://www.myspec.com/ent">' +
'<!ELEMENT nodearr (a,b)>' +
']>' +
'<root><node>test</node></root>'
)
test 'Internal and external dtd (pretty print)', ->
eq(
xml('root')
.dtd('hello.dtd')
.ins('pub_border', 'thin')
.ele('img', 'EMPTY')
.com('Image attributes follow')
.att('img', 'height', 'CDATA', '#REQUIRED')
.att('img', 'visible', '(yes|no)', '#DEFAULT', "yes")
.not('fs', { sysID: 'http://my.fs.com/reader' })
.not('fs-nt', { pubID: 'FS Network Reader 1.0', sysID: 'http://my.fs.com/reader' })
.att('img', 'src', 'NOTATION (fs|fs-nt)', '#REQUIRED')
.dat('<owner>John</owner>')
.ele('node')
.ent('ent', 'my val')
.ent('ent', { sysID: 'http://www.myspec.com/ent' })
.ent('ent', { pubID: '-//MY//SPEC ENT//EN', sysID: 'http://www.myspec.com/ent' })
.ent('ent', { sysID: 'http://www.myspec.com/ent', nData: 'entprg' })
.ent('ent', { pubID: '-//MY//SPEC ENT//EN', sysID: 'http://www.myspec.com/ent', nData: 'entprg' })
.pent('ent', 'my val')
.pent('ent', { sysID: 'http://www.myspec.com/ent' })
.pent('ent', { pubID: '-//MY//SPEC ENT//EN', sysID: 'http://www.myspec.com/ent' })
.root()
.ele('node').txt('test')
.end({ pretty: true })
"""
<?xml version="1.0"?>
<!DOCTYPE root SYSTEM "hello.dtd" [
<?pub_border thin?>
<!ELEMENT img EMPTY>
<!-- Image attributes follow -->
<!ATTLIST img height CDATA #REQUIRED>
<!ATTLIST img visible (yes|no) "yes">
<!NOTATION fs SYSTEM "http://my.fs.com/reader">
<!NOTATION fs-nt PUBLIC "FS Network Reader 1.0" "http://my.fs.com/reader">
<!ATTLIST img src NOTATION (fs|fs-nt) #REQUIRED>
<![CDATA[<owner>John</owner>]]>
<!ELEMENT node (#PCDATA)>
<!ENTITY ent "my val">
<!ENTITY ent SYSTEM "http://www.myspec.com/ent">
<!ENTITY ent PUBLIC "-//MY//SPEC ENT//EN" "http://www.myspec.com/ent">
<!ENTITY ent SYSTEM "http://www.myspec.com/ent" NDATA entprg>
<!ENTITY ent PUBLIC "-//MY//SPEC ENT//EN" "http://www.myspec.com/ent" NDATA entprg>
<!ENTITY % ent "my val">
<!ENTITY % ent SYSTEM "http://www.myspec.com/ent">
<!ENTITY % ent PUBLIC "-//MY//SPEC ENT//EN" "http://www.myspec.com/ent">
]>
<root>
<node>test</node>
</root>
"""
)
|