11from __future__ import annotations
22
33from io import BytesIO
4+ from typing import Any
45
56import pytest
67
@@ -201,12 +202,22 @@ def test_broken_datastream_without_errors(self) -> None:
201202
202203
203204class MockPyDecoder (ImageFile .PyDecoder ):
205+ def __init__ (self , mode : str , * args : Any ) -> None :
206+ MockPyDecoder .last = self
207+
208+ super ().__init__ (mode , * args )
209+
204210 def decode (self , buffer ):
205211 # eof
206212 return - 1 , 0
207213
208214
209215class MockPyEncoder (ImageFile .PyEncoder ):
216+ def __init__ (self , mode : str , * args : Any ) -> None :
217+ MockPyEncoder .last = self
218+
219+ super ().__init__ (mode , * args )
220+
210221 def encode (self , buffer ):
211222 return 1 , 1 , b""
212223
@@ -228,19 +239,8 @@ def _open(self) -> None:
228239class CodecsTest :
229240 @classmethod
230241 def setup_class (cls ) -> None :
231- cls .decoder = MockPyDecoder (None )
232- cls .encoder = MockPyEncoder (None )
233-
234- def decoder_closure (mode , * args ):
235- cls .decoder .__init__ (mode , * args )
236- return cls .decoder
237-
238- def encoder_closure (mode , * args ):
239- cls .encoder .__init__ (mode , * args )
240- return cls .encoder
241-
242- Image .register_decoder ("MOCK" , decoder_closure )
243- Image .register_encoder ("MOCK" , encoder_closure )
242+ Image .register_decoder ("MOCK" , MockPyDecoder )
243+ Image .register_encoder ("MOCK" , MockPyEncoder )
244244
245245
246246class TestPyDecoder (CodecsTest ):
@@ -251,13 +251,13 @@ def test_setimage(self) -> None:
251251
252252 im .load ()
253253
254- assert self . decoder .state .xoff == xoff
255- assert self . decoder .state .yoff == yoff
256- assert self . decoder .state .xsize == xsize
257- assert self . decoder .state .ysize == ysize
254+ assert MockPyDecoder . last .state .xoff == xoff
255+ assert MockPyDecoder . last .state .yoff == yoff
256+ assert MockPyDecoder . last .state .xsize == xsize
257+ assert MockPyDecoder . last .state .ysize == ysize
258258
259259 with pytest .raises (ValueError ):
260- self . decoder .set_as_raw (b"\x00 " )
260+ MockPyDecoder . last .set_as_raw (b"\x00 " )
261261
262262 def test_extents_none (self ) -> None :
263263 buf = BytesIO (b"\x00 " * 255 )
@@ -267,10 +267,10 @@ def test_extents_none(self) -> None:
267267
268268 im .load ()
269269
270- assert self . decoder .state .xoff == 0
271- assert self . decoder .state .yoff == 0
272- assert self . decoder .state .xsize == 200
273- assert self . decoder .state .ysize == 200
270+ assert MockPyDecoder . last .state .xoff == 0
271+ assert MockPyDecoder . last .state .yoff == 0
272+ assert MockPyDecoder . last .state .xsize == 200
273+ assert MockPyDecoder . last .state .ysize == 200
274274
275275 def test_negsize (self ) -> None :
276276 buf = BytesIO (b"\x00 " * 255 )
@@ -315,10 +315,10 @@ def test_setimage(self) -> None:
315315 im , fp , [("MOCK" , (xoff , yoff , xoff + xsize , yoff + ysize ), 0 , "RGB" )]
316316 )
317317
318- assert self . encoder .state .xoff == xoff
319- assert self . encoder .state .yoff == yoff
320- assert self . encoder .state .xsize == xsize
321- assert self . encoder .state .ysize == ysize
318+ assert MockPyEncoder . last .state .xoff == xoff
319+ assert MockPyEncoder . last .state .yoff == yoff
320+ assert MockPyEncoder . last .state .xsize == xsize
321+ assert MockPyEncoder . last .state .ysize == ysize
322322
323323 def test_extents_none (self ) -> None :
324324 buf = BytesIO (b"\x00 " * 255 )
@@ -329,23 +329,23 @@ def test_extents_none(self) -> None:
329329 fp = BytesIO ()
330330 ImageFile ._save (im , fp , [("MOCK" , None , 0 , "RGB" )])
331331
332- assert self . encoder .state .xoff == 0
333- assert self . encoder .state .yoff == 0
334- assert self . encoder .state .xsize == 200
335- assert self . encoder .state .ysize == 200
332+ assert MockPyEncoder . last .state .xoff == 0
333+ assert MockPyEncoder . last .state .yoff == 0
334+ assert MockPyEncoder . last .state .xsize == 200
335+ assert MockPyEncoder . last .state .ysize == 200
336336
337337 def test_negsize (self ) -> None :
338338 buf = BytesIO (b"\x00 " * 255 )
339339
340340 im = MockImageFile (buf )
341341
342342 fp = BytesIO ()
343- self . encoder . cleanup_called = False
343+ MockPyEncoder . last = None
344344 with pytest .raises (ValueError ):
345345 ImageFile ._save (
346346 im , fp , [("MOCK" , (xoff , yoff , - 10 , yoff + ysize ), 0 , "RGB" )]
347347 )
348- assert self . encoder .cleanup_called
348+ assert MockPyEncoder . last .cleanup_called
349349
350350 with pytest .raises (ValueError ):
351351 ImageFile ._save (
0 commit comments