- Notifications
You must be signed in to change notification settings - Fork 31.7k
/
Copy pathplistlib_generate_testdata.py
executable file
·106 lines (81 loc) · 4.1 KB
/
plistlib_generate_testdata.py
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
#!/usr/bin/env python3
fromCocoaimportNSMutableDictionary, NSMutableArray, NSString, NSDate, NSNumber
fromCocoaimportNSPropertyListSerialization, NSPropertyListOpenStepFormat
fromCocoaimportNSPropertyListXMLFormat_v1_0, NSPropertyListBinaryFormat_v1_0
fromCocoaimportCFUUIDCreateFromString, NSNull, NSUUID, CFPropertyListCreateData
fromCocoaimportNSURL
fromCocoaimportNSKeyedArchiver
importdatetime
fromcollectionsimportOrderedDict
importbinascii
FORMATS=[
# ('openstep', NSPropertyListOpenStepFormat),
('plistlib.FMT_XML', NSPropertyListXMLFormat_v1_0),
('plistlib.FMT_BINARY', NSPropertyListBinaryFormat_v1_0),
]
defnsstr(value):
returnNSString.alloc().initWithString_(value)
defmain():
pl=OrderedDict()
# Note: pl is an OrderedDict to control the order
# of keys, and hence have some control on the structure
# of the output file.
# New keys should be added in alphabetical order.
seconds=datetime.datetime(2004, 10, 26, 10, 33, 33, tzinfo=datetime.timezone(datetime.timedelta(0))).timestamp()
pl[nsstr('aBigInt')] =2**63-44
pl[nsstr('aBigInt2')] =NSNumber.numberWithUnsignedLongLong_(2**63+44)
pl[nsstr('aDate')] =NSDate.dateWithTimeIntervalSince1970_(seconds)
pl[nsstr('aDict')] =d=OrderedDict()
d[nsstr('aFalseValue')] =False
d[nsstr('aTrueValue')] =True
d[nsstr('aUnicodeValue')] ="M\xe4ssig, Ma\xdf"
d[nsstr('anotherString')] ="<hello & 'hi' there!>"
d[nsstr('deeperDict')] =dd=OrderedDict()
dd[nsstr('a')] =17
dd[nsstr('b')] =32.5
dd[nsstr('c')] =a=NSMutableArray.alloc().init()
a.append(1)
a.append(2)
a.append(nsstr('text'))
pl[nsstr('aFloat')] =0.5
pl[nsstr('aList')] =a=NSMutableArray.alloc().init()
a.append(nsstr('A'))
a.append(nsstr('B'))
a.append(12)
a.append(32.5)
aa=NSMutableArray.alloc().init()
a.append(aa)
aa.append(1)
aa.append(2)
aa.append(3)
pl[nsstr('aNegativeBigInt')] =-80000000000
pl[nsstr('aNegativeInt')] =-5
pl[nsstr('aString')] =nsstr('Doodah')
pl[nsstr('anEmptyDict')] =NSMutableDictionary.alloc().init()
pl[nsstr('anEmptyList')] =NSMutableArray.alloc().init()
pl[nsstr('anInt')] =728
pl[nsstr('nestedData')] =a=NSMutableArray.alloc().init()
a.append(b'''<lots of binary gunk>\x00\x01\x02\x03<lots of binary gunk>\x00\x01\x02\x03<lots of binary gunk>\x00\x01\x02\x03<lots of binary gunk>\x00\x01\x02\x03<lots of binary gunk>\x00\x01\x02\x03<lots of binary gunk>\x00\x01\x02\x03<lots of binary gunk>\x00\x01\x02\x03<lots of binary gunk>\x00\x01\x02\x03<lots of binary gunk>\x00\x01\x02\x03<lots of binary gunk>\x00\x01\x02\x03''')
pl[nsstr('someData')] =b'<binary gunk>'
pl[nsstr('someMoreData')] =b'''<lots of binary gunk>\x00\x01\x02\x03<lots of binary gunk>\x00\x01\x02\x03<lots of binary gunk>\x00\x01\x02\x03<lots of binary gunk>\x00\x01\x02\x03<lots of binary gunk>\x00\x01\x02\x03<lots of binary gunk>\x00\x01\x02\x03<lots of binary gunk>\x00\x01\x02\x03<lots of binary gunk>\x00\x01\x02\x03<lots of binary gunk>\x00\x01\x02\x03<lots of binary gunk>\x00\x01\x02\x03'''
pl[nsstr('\xc5benraa')] =nsstr("That was a unicode key.")
print("TESTDATA={")
forfmt_name, fmt_keyinFORMATS:
data, error=NSPropertyListSerialization.dataWithPropertyList_format_options_error_(
pl, fmt_key, 0, None)
ifdataisNone:
print("Cannot serialize", fmt_name, error)
else:
print(" %s: binascii.a2b_base64(b'''\n %s'''),"%(fmt_name, _encode_base64(bytes(data)).decode('ascii')[:-1]))
keyed_archive_data=NSKeyedArchiver.archivedDataWithRootObject_("KeyArchive UID Test")
print(" 'KEYED_ARCHIVE': binascii.a2b_base64(b'''\n %s'''),"% (_encode_base64(bytes(keyed_archive_data)).decode('ascii')[:-1]))
print("}")
print()
def_encode_base64(s, maxlinelength=60):
maxbinsize= (maxlinelength//4)*3
pieces= []
foriinrange(0, len(s), maxbinsize):
chunk=s[i : i+maxbinsize]
pieces.append(binascii.b2a_base64(chunk))
returnb' '.join(pieces)
main()