77# - https://github.com/uqfoundation/dill/blob/master/LICENSE
88
99import dill
10+ from enum import EnumMeta
1011import sys
1112dill .settings ['recurse' ] = True
1213
@@ -97,6 +98,7 @@ def test_specialtypes():
9798 assert dill .pickles (type (None ))
9899 assert dill .pickles (type (NotImplemented ))
99100 assert dill .pickles (type (Ellipsis ))
101+ assert dill .pickles (type (EnumMeta ))
100102
101103from collections import namedtuple
102104Z = namedtuple ("Z" , ['a' ,'b' ])
@@ -107,13 +109,17 @@ def test_specialtypes():
107109Xi = X (0 ,1 )
108110Bad = namedtuple ("FakeName" , ['a' ,'b' ])
109111Badi = Bad (0 ,1 )
112+ Defaults = namedtuple ('Defaults' , ['x' , 'y' ], defaults = [1 ])
113+ Defaultsi = Defaults (2 )
110114
111115# test namedtuple
112116def test_namedtuple ():
113117 assert Z is dill .loads (dill .dumps (Z ))
114118 assert Zi == dill .loads (dill .dumps (Zi ))
115119 assert X is dill .loads (dill .dumps (X ))
116120 assert Xi == dill .loads (dill .dumps (Xi ))
121+ assert Defaults is dill .loads (dill .dumps (Defaults ))
122+ assert Defaultsi == dill .loads (dill .dumps (Defaultsi ))
117123 assert Bad is not dill .loads (dill .dumps (Bad ))
118124 assert Bad ._fields == dill .loads (dill .dumps (Bad ))._fields
119125 assert tuple (Badi ) == tuple (dill .loads (dill .dumps (Badi )))
@@ -221,11 +227,17 @@ def __init__(self, y):
221227value = 123
222228y = Y (value )
223229
230+ class Y2 (object ):
231+ __slots__ = 'y'
232+ def __init__ (self , y ):
233+ self .y = y
234+
224235def test_slots ():
225236 assert dill .pickles (Y )
226237 assert dill .pickles (y )
227238 assert dill .pickles (Y .y )
228239 assert dill .copy (y ).y == value
240+ assert dill .copy (Y2 (value )).y == value
229241
230242def test_origbases ():
231243 assert dill .copy (customIntList ).__orig_bases__ == customIntList .__orig_bases__
@@ -258,6 +270,12 @@ def __new__(cls):
258270
259271 assert dill .copy (subclass_with_new ())
260272
273+ def test_enummeta ():
274+ from http import HTTPStatus
275+ import enum
276+ assert dill .copy (HTTPStatus .OK ) is HTTPStatus .OK
277+ assert dill .copy (enum .EnumMeta ) is enum .EnumMeta
278+
261279if __name__ == '__main__' :
262280 test_class_instances ()
263281 test_class_objects ()
@@ -270,3 +288,4 @@ def __new__(cls):
270288 test_slots ()
271289 test_origbases ()
272290 test_metaclass ()
291+ test_enummeta ()
0 commit comments