@@ -206,3 +206,64 @@ def test_positional_only_arguments(works_ge_py38, param_code):
206206)
207207def test_decorator_expression (works_ge_py39 , expression ):
208208 works_ge_py39 .parse ("@%s\n def x(): pass" % expression )
209+
210+
211+ @pytest .mark .parametrize (
212+ 'code' , [
213+ 'class Foo[T]: pass' ,
214+ 'class Foo[T: str]: pass' ,
215+ 'class Foo[T, U]: pass' ,
216+ 'class Foo[T: str, U: int]: pass' ,
217+ 'class Foo[T](Base): pass' ,
218+ 'class Foo[T: str](Base, Mixin): pass' ,
219+ 'class Foo[*Ts]: pass' ,
220+ 'class Foo[**P]: pass' ,
221+ ]
222+ )
223+ def test_pep695_generic_class (works_ge_py312 , code ):
224+ works_ge_py312 .parse (code )
225+
226+
227+ @pytest .mark .parametrize (
228+ 'code' , [
229+ 'def foo[T](x: T) -> T: pass' ,
230+ 'def foo[T: int](x: T) -> T: pass' ,
231+ 'def foo[T, U](x: T, y: U): pass' ,
232+ 'def foo[*Ts](*args): pass' ,
233+ 'def foo[**P](*args): pass' ,
234+ ]
235+ )
236+ def test_pep695_generic_function (works_ge_py312 , code ):
237+ works_ge_py312 .parse (code )
238+
239+
240+ def test_pep695_class_get_super_arglist (works_ge_py312 ):
241+ module = works_ge_py312 .parse ('class Foo[T](Bar, Baz): pass' )
242+ if module is None :
243+ return
244+ classdef = module .children [0 ]
245+ arglist = classdef .get_super_arglist ()
246+ assert arglist is not None
247+ assert 'Bar' in arglist .get_code ()
248+ assert 'Baz' in arglist .get_code ()
249+
250+
251+ def test_pep695_class_no_bases (works_ge_py312 ):
252+ module = works_ge_py312 .parse ('class Foo[T]: pass' )
253+ if module is None :
254+ return
255+ classdef = module .children [0 ]
256+ assert classdef .get_super_arglist () is None
257+
258+
259+ @pytest .mark .parametrize (
260+ 'code' , [
261+ 'class Foo[T = int]: pass' ,
262+ 'class Foo[T: str = "default"]: pass' ,
263+ 'class Foo[*Ts = tuple[int, ...]]: pass' ,
264+ 'class Foo[**P = None]: pass' ,
265+ 'def foo[T = int](x: T) -> T: pass' ,
266+ ]
267+ )
268+ def test_pep696_type_param_defaults (works_ge_py313 , code ):
269+ works_ge_py313 .parse (code )
0 commit comments