8e8d3e380949b195d02d736622273578246590fe
# Copyright (C) 2003 Python Software Foundation
from test
import test_support
# This test data was generated through Cocoa's NSDictionary class
TESTDATA
= """<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" \
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<date>2004-10-26T10:33:33Z</date>
<string>M\xc3\xa4ssig, Ma\xc3\x9f</string>
<string><hello & 'hi' there!></string>
PGxvdHMgb2YgYmluYXJ5IGd1bms+AAECAzxsb3RzIG9mIGJpbmFyeSBndW5r
PgABAgM8bG90cyBvZiBiaW5hcnkgZ3Vuaz4AAQIDPGxvdHMgb2YgYmluYXJ5
IGd1bms+AAECAzxsb3RzIG9mIGJpbmFyeSBndW5rPgABAgM8bG90cyBvZiBi
aW5hcnkgZ3Vuaz4AAQIDPGxvdHMgb2YgYmluYXJ5IGd1bms+AAECAzxsb3Rz
IG9mIGJpbmFyeSBndW5rPgABAgM8bG90cyBvZiBiaW5hcnkgZ3Vuaz4AAQID
PGxvdHMgb2YgYmluYXJ5IGd1bms+AAECAw==
PGxvdHMgb2YgYmluYXJ5IGd1bms+AAECAzxsb3RzIG9mIGJpbmFyeSBndW5rPgABAgM8
bG90cyBvZiBiaW5hcnkgZ3Vuaz4AAQIDPGxvdHMgb2YgYmluYXJ5IGd1bms+AAECAzxs
b3RzIG9mIGJpbmFyeSBndW5rPgABAgM8bG90cyBvZiBiaW5hcnkgZ3Vuaz4AAQIDPGxv
dHMgb2YgYmluYXJ5IGd1bms+AAECAzxsb3RzIG9mIGJpbmFyeSBndW5rPgABAgM8bG90
cyBvZiBiaW5hcnkgZ3Vuaz4AAQIDPGxvdHMgb2YgYmluYXJ5IGd1bms+AAECAw==
<key>\xc3\x85benraa</key>
<string>That was a unicode key.</string>
""".replace(" " * 8, "\t") # Apple as well as plistlib.py output hard tabs
class TestPlistlib(unittest
.TestCase
):
os
.unlink(test_support
.TESTFN
)
aList
=["A", "B", 12, 32.5, [1, 2, 3]],
anotherString
="<hello & 'hi' there!>",
aUnicodeValue
=u
'M\xe4ssig, Ma\xdf',
deeperDict
=dict(a
=17, b
=32.5, c
=[1, 2, "text"]),
someData
= plistlib
.Data("<binary gunk>"),
someMoreData
= plistlib
.Data("<lots of binary gunk>\0\1\2\3" * 10),
nestedData
= [plistlib
.Data("<lots of binary gunk>\0\1\2\3" * 10)],
aDate
= datetime
.datetime(2004, 10, 26, 10, 33, 33),
pl
[u
'\xc5benraa'] = "That was a unicode key."
self
.assertEqual(pl
["aString"], "Doodah")
self
.assertEqual(pl
["aDict"]["aFalseValue"], False)
plistlib
.writePlist(pl
, test_support
.TESTFN
)
pl2
= plistlib
.readPlist(test_support
.TESTFN
)
self
.assertEqual(dict(pl
), dict(pl2
))
data
= plistlib
.writePlistToString(pl
)
pl2
= plistlib
.readPlistFromString(data
)
self
.assertEqual(dict(pl
), dict(pl2
))
data2
= plistlib
.writePlistToString(pl2
)
self
.assertEqual(data
, data2
)
def test_appleformatting(self
):
pl
= plistlib
.readPlistFromString(TESTDATA
)
data
= plistlib
.writePlistToString(pl
)
self
.assertEqual(data
, TESTDATA
,
"generated data was not identical to Apple's output")
def test_appleformattingfromliteral(self
):
pl2
= plistlib
.readPlistFromString(TESTDATA
)
self
.assertEqual(dict(pl
), dict(pl2
),
"generated data was not identical to Apple's output")
from StringIO
import StringIO
plistlib
.writePlist(pl
, f
)
pl2
= plistlib
.readPlist(StringIO(f
.getvalue()))
self
.assertEqual(dict(pl
), dict(pl2
))
def test_cstringio(self
):
from cStringIO
import StringIO
plistlib
.writePlist(pl
, f
)
pl2
= plistlib
.readPlist(StringIO(f
.getvalue()))
self
.assertEqual(dict(pl
), dict(pl2
))
def test_controlcharacters(self
):
testString
= "string containing %s" % c
if i
>= 32 or c
in "\r\n\t":
# \r, \n and \t are the only legal control chars in XML
plistlib
.writePlistToString(testString
)
self
.assertRaises(ValueError,
plistlib
.writePlistToString
,
def test_nondictroot(self
):
result1
= plistlib
.readPlistFromString(plistlib
.writePlistToString(test1
))
result2
= plistlib
.readPlistFromString(plistlib
.writePlistToString(test2
))
self
.assertEqual(test1
, result1
)
self
.assertEqual(test2
, result2
)
test_support
.run_unittest(TestPlistlib
)
if __name__
== '__main__':