44from test import support
55
66
7- class BasicTestMappingProtocol (unittest .TestCase ):
7+ class BasicTestImmutableMappingProtocol (unittest .TestCase ):
88 # This base class can be used to check that an object conforms to the
99 # mapping protocol
1010
@@ -22,10 +22,7 @@ def _empty_mapping(self):
2222 def _full_mapping (self , data ):
2323 """Return a mapping object with the value contained in data
2424 dictionary"""
25- x = self ._empty_mapping ()
26- for key , value in data .items ():
27- x [key ] = value
28- return x
25+ return self .type2test (data )
2926
3027 def __init__ (self , * args , ** kw ):
3128 unittest .TestCase .__init__ (self , * args , ** kw )
@@ -88,6 +85,64 @@ def check_iterandlist(iter, lst, ref):
8885 self .assertEqual (d .get (knownkey , knownvalue ), knownvalue )
8986 self .assertNotIn (knownkey , d )
9087
88+ def test_constructor (self ):
89+ self .assertEqual (self ._empty_mapping (), self ._empty_mapping ())
90+
91+ def test_bool (self ):
92+ self .assertTrue (not self ._empty_mapping ())
93+ self .assertTrue (self .reference )
94+ self .assertTrue (bool (self ._empty_mapping ()) is False )
95+ self .assertTrue (bool (self .reference ) is True )
96+
97+ def test_keys (self ):
98+ d = self ._empty_mapping ()
99+ self .assertEqual (list (d .keys ()), [])
100+ d = self .reference
101+ self .assertIn (list (self .inmapping .keys ())[0 ], d .keys ())
102+ self .assertNotIn (list (self .other .keys ())[0 ], d .keys ())
103+ self .assertRaises (TypeError , d .keys , None )
104+
105+ def test_values (self ):
106+ d = self ._empty_mapping ()
107+ self .assertEqual (list (d .values ()), [])
108+
109+ self .assertRaises (TypeError , d .values , None )
110+
111+ def test_items (self ):
112+ d = self ._empty_mapping ()
113+ self .assertEqual (list (d .items ()), [])
114+
115+ self .assertRaises (TypeError , d .items , None )
116+
117+ def test_len (self ):
118+ d = self ._empty_mapping ()
119+ self .assertEqual (len (d ), 0 )
120+
121+ def test_getitem (self ):
122+ d = self .reference
123+ self .assertEqual (d [list (self .inmapping .keys ())[0 ]],
124+ list (self .inmapping .values ())[0 ])
125+
126+ self .assertRaises (TypeError , d .__getitem__ )
127+
128+ # no test_fromkeys or test_copy as both os.environ and selves don't support it
129+
130+ def test_get (self ):
131+ d = self ._empty_mapping ()
132+ self .assertTrue (d .get (list (self .other .keys ())[0 ]) is None )
133+ self .assertEqual (d .get (list (self .other .keys ())[0 ], 3 ), 3 )
134+ d = self .reference
135+ self .assertTrue (d .get (list (self .other .keys ())[0 ]) is None )
136+ self .assertEqual (d .get (list (self .other .keys ())[0 ], 3 ), 3 )
137+ self .assertEqual (d .get (list (self .inmapping .keys ())[0 ]),
138+ list (self .inmapping .values ())[0 ])
139+ self .assertEqual (d .get (list (self .inmapping .keys ())[0 ], 3 ),
140+ list (self .inmapping .values ())[0 ])
141+ self .assertRaises (TypeError , d .get )
142+ self .assertRaises (TypeError , d .get , None , None , None )
143+
144+
145+ class BasicTestMappingProtocol (BasicTestImmutableMappingProtocol ):
91146 def test_write (self ):
92147 # Test for write operations on mapping
93148 p = self ._empty_mapping ()
@@ -130,46 +185,6 @@ def test_write(self):
130185 p = self ._empty_mapping ()
131186 self .assertRaises (KeyError , p .popitem )
132187
133- def test_constructor (self ):
134- self .assertEqual (self ._empty_mapping (), self ._empty_mapping ())
135-
136- def test_bool (self ):
137- self .assertTrue (not self ._empty_mapping ())
138- self .assertTrue (self .reference )
139- self .assertTrue (bool (self ._empty_mapping ()) is False )
140- self .assertTrue (bool (self .reference ) is True )
141-
142- def test_keys (self ):
143- d = self ._empty_mapping ()
144- self .assertEqual (list (d .keys ()), [])
145- d = self .reference
146- self .assertIn (list (self .inmapping .keys ())[0 ], d .keys ())
147- self .assertNotIn (list (self .other .keys ())[0 ], d .keys ())
148- self .assertRaises (TypeError , d .keys , None )
149-
150- def test_values (self ):
151- d = self ._empty_mapping ()
152- self .assertEqual (list (d .values ()), [])
153-
154- self .assertRaises (TypeError , d .values , None )
155-
156- def test_items (self ):
157- d = self ._empty_mapping ()
158- self .assertEqual (list (d .items ()), [])
159-
160- self .assertRaises (TypeError , d .items , None )
161-
162- def test_len (self ):
163- d = self ._empty_mapping ()
164- self .assertEqual (len (d ), 0 )
165-
166- def test_getitem (self ):
167- d = self .reference
168- self .assertEqual (d [list (self .inmapping .keys ())[0 ]],
169- list (self .inmapping .values ())[0 ])
170-
171- self .assertRaises (TypeError , d .__getitem__ )
172-
173188 def test_update (self ):
174189 # mapping argument
175190 d = self ._empty_mapping ()
@@ -265,22 +280,6 @@ def __next__(self):
265280
266281 self .assertRaises (ValueError , d .update , [(1 , 2 , 3 )])
267282
268- # no test_fromkeys or test_copy as both os.environ and selves don't support it
269-
270- def test_get (self ):
271- d = self ._empty_mapping ()
272- self .assertTrue (d .get (list (self .other .keys ())[0 ]) is None )
273- self .assertEqual (d .get (list (self .other .keys ())[0 ], 3 ), 3 )
274- d = self .reference
275- self .assertTrue (d .get (list (self .other .keys ())[0 ]) is None )
276- self .assertEqual (d .get (list (self .other .keys ())[0 ], 3 ), 3 )
277- self .assertEqual (d .get (list (self .inmapping .keys ())[0 ]),
278- list (self .inmapping .values ())[0 ])
279- self .assertEqual (d .get (list (self .inmapping .keys ())[0 ], 3 ),
280- list (self .inmapping .values ())[0 ])
281- self .assertRaises (TypeError , d .get )
282- self .assertRaises (TypeError , d .get , None , None , None )
283-
284283 def test_setdefault (self ):
285284 d = self ._empty_mapping ()
286285 self .assertRaises (TypeError , d .setdefault )
0 commit comments