- Added tests for the string load/dump function.
- Added a chunk of plist data as generated by Cocoa's NSDictionary and verify we output the same (including formatting) - Changed the "literal" plist code to match the raw test data
This commit is contained in:
parent
1f74ef0fa3
commit
fc93e17598
@ -3,8 +3,91 @@
|
|||||||
import unittest
|
import unittest
|
||||||
import plistlib
|
import plistlib
|
||||||
import os
|
import os
|
||||||
|
import time
|
||||||
|
import datetime
|
||||||
from test import test_support
|
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">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>aDate</key>
|
||||||
|
<date>2004-10-26T10:33:33Z</date>
|
||||||
|
<key>aDict</key>
|
||||||
|
<dict>
|
||||||
|
<key>aFalseValue</key>
|
||||||
|
<false/>
|
||||||
|
<key>aTrueValue</key>
|
||||||
|
<true/>
|
||||||
|
<key>aUnicodeValue</key>
|
||||||
|
<string>M\xc3\xa4ssig, Ma\xc3\x9f</string>
|
||||||
|
<key>anotherString</key>
|
||||||
|
<string><hello & 'hi' there!></string>
|
||||||
|
<key>deeperDict</key>
|
||||||
|
<dict>
|
||||||
|
<key>a</key>
|
||||||
|
<integer>17</integer>
|
||||||
|
<key>b</key>
|
||||||
|
<real>32.5</real>
|
||||||
|
<key>c</key>
|
||||||
|
<array>
|
||||||
|
<integer>1</integer>
|
||||||
|
<integer>2</integer>
|
||||||
|
<string>text</string>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<key>aFloat</key>
|
||||||
|
<real>0.5</real>
|
||||||
|
<key>aList</key>
|
||||||
|
<array>
|
||||||
|
<string>A</string>
|
||||||
|
<string>B</string>
|
||||||
|
<integer>12</integer>
|
||||||
|
<real>32.5</real>
|
||||||
|
<array>
|
||||||
|
<integer>1</integer>
|
||||||
|
<integer>2</integer>
|
||||||
|
<integer>3</integer>
|
||||||
|
</array>
|
||||||
|
</array>
|
||||||
|
<key>aString</key>
|
||||||
|
<string>Doodah</string>
|
||||||
|
<key>anInt</key>
|
||||||
|
<integer>728</integer>
|
||||||
|
<key>nestedData</key>
|
||||||
|
<array>
|
||||||
|
<data>
|
||||||
|
PGxvdHMgb2YgYmluYXJ5IGd1bms+AAECAzxsb3RzIG9mIGJpbmFyeSBndW5r
|
||||||
|
PgABAgM8bG90cyBvZiBiaW5hcnkgZ3Vuaz4AAQIDPGxvdHMgb2YgYmluYXJ5
|
||||||
|
IGd1bms+AAECAzxsb3RzIG9mIGJpbmFyeSBndW5rPgABAgM8bG90cyBvZiBi
|
||||||
|
aW5hcnkgZ3Vuaz4AAQIDPGxvdHMgb2YgYmluYXJ5IGd1bms+AAECAzxsb3Rz
|
||||||
|
IG9mIGJpbmFyeSBndW5rPgABAgM8bG90cyBvZiBiaW5hcnkgZ3Vuaz4AAQID
|
||||||
|
PGxvdHMgb2YgYmluYXJ5IGd1bms+AAECAw==
|
||||||
|
</data>
|
||||||
|
</array>
|
||||||
|
<key>someData</key>
|
||||||
|
<data>
|
||||||
|
PGJpbmFyeSBndW5rPg==
|
||||||
|
</data>
|
||||||
|
<key>someMoreData</key>
|
||||||
|
<data>
|
||||||
|
PGxvdHMgb2YgYmluYXJ5IGd1bms+AAECAzxsb3RzIG9mIGJpbmFyeSBndW5rPgABAgM8
|
||||||
|
bG90cyBvZiBiaW5hcnkgZ3Vuaz4AAQIDPGxvdHMgb2YgYmluYXJ5IGd1bms+AAECAzxs
|
||||||
|
b3RzIG9mIGJpbmFyeSBndW5rPgABAgM8bG90cyBvZiBiaW5hcnkgZ3Vuaz4AAQIDPGxv
|
||||||
|
dHMgb2YgYmluYXJ5IGd1bms+AAECAzxsb3RzIG9mIGJpbmFyeSBndW5rPgABAgM8bG90
|
||||||
|
cyBvZiBiaW5hcnkgZ3Vuaz4AAQIDPGxvdHMgb2YgYmluYXJ5IGd1bms+AAECAw==
|
||||||
|
</data>
|
||||||
|
<key>\xc3\x85benraa</key>
|
||||||
|
<string>That was a unicode key.</string>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
|
""".replace(" " * 8, "\t") # Apple as well as plistlib.py output hard tabs
|
||||||
|
|
||||||
|
|
||||||
class TestPlistlib(unittest.TestCase):
|
class TestPlistlib(unittest.TestCase):
|
||||||
|
|
||||||
def tearDown(self):
|
def tearDown(self):
|
||||||
@ -14,28 +97,24 @@ class TestPlistlib(unittest.TestCase):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
def _create(self):
|
def _create(self):
|
||||||
pl = plistlib.Dict(
|
pl = dict(
|
||||||
aString="Doodah",
|
aString="Doodah",
|
||||||
aList=["A", "B", 12, 32.1, [1, 2, 3]],
|
aList=["A", "B", 12, 32.5, [1, 2, 3]],
|
||||||
aFloat = 0.1,
|
aFloat = 0.5,
|
||||||
anInt = 728,
|
anInt = 728,
|
||||||
aDict=plistlib.Dict(
|
aDict=dict(
|
||||||
anotherString="<hello & hi there!>",
|
anotherString="<hello & 'hi' there!>",
|
||||||
aUnicodeValue=u'M\xe4ssig, Ma\xdf',
|
aUnicodeValue=u'M\xe4ssig, Ma\xdf',
|
||||||
aTrueValue=True,
|
aTrueValue=True,
|
||||||
aFalseValue=False,
|
aFalseValue=False,
|
||||||
|
deeperDict=dict(a=17, b=32.5, c=[1, 2, "text"]),
|
||||||
),
|
),
|
||||||
someData = plistlib.Data("<binary gunk>"),
|
someData = plistlib.Data("<binary gunk>"),
|
||||||
someMoreData = plistlib.Data("<lots of binary gunk>" * 10),
|
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['anotherInt'] = 42
|
pl[u'\xc5benraa'] = "That was a unicode key."
|
||||||
try:
|
|
||||||
from xml.utils.iso8601 import parse
|
|
||||||
import time
|
|
||||||
except ImportError:
|
|
||||||
pass
|
|
||||||
else:
|
|
||||||
pl['aDate'] = plistlib.Date(time.mktime(time.gmtime()))
|
|
||||||
return pl
|
return pl
|
||||||
|
|
||||||
def test_create(self):
|
def test_create(self):
|
||||||
@ -49,6 +128,26 @@ class TestPlistlib(unittest.TestCase):
|
|||||||
pl2 = plistlib.readPlist(test_support.TESTFN)
|
pl2 = plistlib.readPlist(test_support.TESTFN)
|
||||||
self.assertEqual(dict(pl), dict(pl2))
|
self.assertEqual(dict(pl), dict(pl2))
|
||||||
|
|
||||||
|
def test_string(self):
|
||||||
|
pl = self._create()
|
||||||
|
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):
|
||||||
|
pl = self._create()
|
||||||
|
pl2 = plistlib.readPlistFromString(TESTDATA)
|
||||||
|
self.assertEqual(dict(pl), dict(pl2),
|
||||||
|
"generated data was not identical to Apple's output")
|
||||||
|
|
||||||
def test_stringio(self):
|
def test_stringio(self):
|
||||||
from StringIO import StringIO
|
from StringIO import StringIO
|
||||||
f = StringIO()
|
f = StringIO()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user