diff --git a/Lib/test/test_plistlib.py b/Lib/test/test_plistlib.py index 4a2e48d06f5..b2a3b7de3fc 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 = """ + + + + aDate + 2004-10-26T10:33:33Z + aDict + + aFalseValue + + aTrueValue + + aUnicodeValue + M\xc3\xa4ssig, Ma\xc3\x9f + anotherString + <hello & 'hi' there!> + deeperDict + + a + 17 + b + 32.5 + c + + 1 + 2 + text + + + + aFloat + 0.5 + aList + + A + B + 12 + 32.5 + + 1 + 2 + 3 + + + aString + Doodah + anInt + 728 + nestedData + + + PGxvdHMgb2YgYmluYXJ5IGd1bms+AAECAzxsb3RzIG9mIGJpbmFyeSBndW5r + PgABAgM8bG90cyBvZiBiaW5hcnkgZ3Vuaz4AAQIDPGxvdHMgb2YgYmluYXJ5 + IGd1bms+AAECAzxsb3RzIG9mIGJpbmFyeSBndW5rPgABAgM8bG90cyBvZiBi + aW5hcnkgZ3Vuaz4AAQIDPGxvdHMgb2YgYmluYXJ5IGd1bms+AAECAzxsb3Rz + IG9mIGJpbmFyeSBndW5rPgABAgM8bG90cyBvZiBiaW5hcnkgZ3Vuaz4AAQID + PGxvdHMgb2YgYmluYXJ5IGd1bms+AAECAw== + + + someData + + PGJpbmFyeSBndW5rPg== + + someMoreData + + PGxvdHMgb2YgYmluYXJ5IGd1bms+AAECAzxsb3RzIG9mIGJpbmFyeSBndW5rPgABAgM8 + bG90cyBvZiBiaW5hcnkgZ3Vuaz4AAQIDPGxvdHMgb2YgYmluYXJ5IGd1bms+AAECAzxs + b3RzIG9mIGJpbmFyeSBndW5rPgABAgM8bG90cyBvZiBiaW5hcnkgZ3Vuaz4AAQIDPGxv + dHMgb2YgYmluYXJ5IGd1bms+AAECAzxsb3RzIG9mIGJpbmFyeSBndW5rPgABAgM8bG90 + cyBvZiBiaW5hcnkgZ3Vuaz4AAQIDPGxvdHMgb2YgYmluYXJ5IGd1bms+AAECAw== + + \xc3\x85benraa + That was a unicode key. + + +""".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="", + aDict=dict( + anotherString="", aUnicodeValue=u'M\xe4ssig, Ma\xdf', aTrueValue=True, aFalseValue=False, + deeperDict=dict(a=17, b=32.5, c=[1, 2, "text"]), ), someData = plistlib.Data(""), - someMoreData = plistlib.Data("" * 10), + someMoreData = plistlib.Data("\0\1\2\3" * 10), + nestedData = [plistlib.Data("\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()