summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJust van Rossum <just@letterror.com>2004-10-26 11:02:08 (GMT)
committerJust van Rossum <just@letterror.com>2004-10-26 11:02:08 (GMT)
commitfc93e17598f80a5362ef6096cbb4571e64d46381 (patch)
tree86031734237fa6e3698acd4d196193551c23d187
parent1f74ef0fa3f2eb3a4a9f77724ce958309bc252a6 (diff)
downloadcpython-fc93e17598f80a5362ef6096cbb4571e64d46381.zip
cpython-fc93e17598f80a5362ef6096cbb4571e64d46381.tar.gz
cpython-fc93e17598f80a5362ef6096cbb4571e64d46381.tar.bz2
- 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
-rw-r--r--Lib/test/test_plistlib.py127
1 files changed, 113 insertions, 14 deletions
diff --git a/Lib/test/test_plistlib.py b/Lib/test/test_plistlib.py
index 4a2e48d..b2a3b7d 100644
--- a/Lib/test/test_plistlib.py
+++ b/Lib/test/test_plistlib.py
@@ -3,8 +3,91 @@
import unittest
import plistlib
import os
+import time
+import datetime
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>&lt;hello &amp; 'hi' there!&gt;</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):
def tearDown(self):
@@ -14,28 +97,24 @@ class TestPlistlib(unittest.TestCase):
pass
def _create(self):
- pl = plistlib.Dict(
+ pl = dict(
aString="Doodah",
- aList=["A", "B", 12, 32.1, [1, 2, 3]],
- aFloat = 0.1,
+ aList=["A", "B", 12, 32.5, [1, 2, 3]],
+ aFloat = 0.5,
anInt = 728,
- aDict=plistlib.Dict(
- anotherString="<hello & hi there!>",
+ aDict=dict(
+ anotherString="<hello & 'hi' there!>",
aUnicodeValue=u'M\xe4ssig, Ma\xdf',
aTrueValue=True,
aFalseValue=False,
+ deeperDict=dict(a=17, b=32.5, c=[1, 2, "text"]),
),
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
- try:
- from xml.utils.iso8601 import parse
- import time
- except ImportError:
- pass
- else:
- pl['aDate'] = plistlib.Date(time.mktime(time.gmtime()))
+ pl[u'\xc5benraa'] = "That was a unicode key."
return pl
def test_create(self):
@@ -49,6 +128,26 @@ class TestPlistlib(unittest.TestCase):
pl2 = plistlib.readPlist(test_support.TESTFN)
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):
from StringIO import StringIO
f = StringIO()