@@ -102,7 +102,8 @@ def _test():
102102import sys
103103import traceback
104104import unittest
105- from io import StringIO , IncrementalNewlineDecoder
105+ import importlib .resources
106+ from io import StringIO
106107from collections import namedtuple
107108import _colorize # Used in doctests
108109from _colorize import ANSIColors , can_colorize
@@ -235,25 +236,31 @@ def _normalize_module(module, depth=2):
235236 else :
236237 raise TypeError ("Expected a module, string, or None" )
237238
238- def _newline_convert (data ):
239- # The IO module provides a handy decoder for universal newline conversion
240- return IncrementalNewlineDecoder (None , True ).decode (data , True )
241-
242239def _load_testfile (filename , package , module_relative , encoding ):
243240 if module_relative :
244241 package = _normalize_module (package , 3 )
245242 filename = _module_relative_path (package , filename )
246- if (loader := getattr (package , '__loader__' , None )) is None :
247- try :
248- loader = package .__spec__ .loader
249- except AttributeError :
250- pass
251- if hasattr (loader , 'get_data' ):
252- file_contents = loader .get_data (filename )
253- file_contents = file_contents .decode (encoding )
254- # get_data() opens files as 'rb', so one must do the equivalent
255- # conversion as universal newlines would do.
256- return _newline_convert (file_contents ), filename
243+ try :
244+ loader = package .__loader__
245+ except AttributeError :
246+ pass
247+ else :
248+ if loader is not None :
249+ return (
250+ importlib .resources .read_text (package , filename , encoding = encoding ),
251+ filename ,
252+ )
253+
254+ try :
255+ package .__spec__ .loader
256+ except AttributeError :
257+ pass
258+ else :
259+ return (
260+ importlib .resources .read_text (package , filename , encoding = encoding ),
261+ filename ,
262+ )
263+
257264 with open (filename , encoding = encoding ) as f :
258265 return f .read (), filename
259266
0 commit comments