@@ -413,6 +413,121 @@ def _test_system_interpreter_must_be_absolute_impl(env, target):
413413
414414_tests .append (_test_system_interpreter_must_be_absolute )
415415
416+ def _interpreter_version_info_test (name , interpreter_version_info , impl , expect_failure = True ):
417+ if config .enable_pystar :
418+ py_runtime_kwargs = {
419+ "interpreter_version_info" : interpreter_version_info ,
420+ }
421+ attr_values = {}
422+ else :
423+ py_runtime_kwargs = {}
424+ attr_values = _SKIP_TEST
425+
426+ rt_util .helper_target (
427+ py_runtime ,
428+ name = name + "_subject" ,
429+ python_version = "PY3" ,
430+ interpreter_path = "/py" ,
431+ ** py_runtime_kwargs
432+ )
433+ analysis_test (
434+ name = name ,
435+ target = name + "_subject" ,
436+ impl = impl ,
437+ expect_failure = expect_failure ,
438+ attr_values = attr_values ,
439+ )
440+
441+ def _test_interpreter_version_info_must_define_major_and_minor_only_major (name ):
442+ _interpreter_version_info_test (
443+ name ,
444+ {
445+ "major" : "3" ,
446+ },
447+ lambda env , target : (
448+ env .expect .that_target (target ).failures ().contains_predicate (
449+ matching .str_matches ("must have at least two keys, 'major' and 'minor'" ),
450+ )
451+ ),
452+ )
453+
454+ _tests .append (_test_interpreter_version_info_must_define_major_and_minor_only_major )
455+
456+ def _test_interpreter_version_info_must_define_major_and_minor_only_minor (name ):
457+ _interpreter_version_info_test (
458+ name ,
459+ {
460+ "minor" : "3" ,
461+ },
462+ lambda env , target : (
463+ env .expect .that_target (target ).failures ().contains_predicate (
464+ matching .str_matches ("must have at least two keys, 'major' and 'minor'" ),
465+ )
466+ ),
467+ )
468+
469+ _tests .append (_test_interpreter_version_info_must_define_major_and_minor_only_minor )
470+
471+ def _test_interpreter_version_info_no_extraneous_keys (name ):
472+ _interpreter_version_info_test (
473+ name ,
474+ {
475+ "major" : "3" ,
476+ "minor" : "3" ,
477+ "something" : "foo" ,
478+ },
479+ lambda env , target : (
480+ env .expect .that_target (target ).failures ().contains_predicate (
481+ matching .str_matches ("unexpected keys [\" something\" ]" ),
482+ )
483+ ),
484+ )
485+
486+ _tests .append (_test_interpreter_version_info_no_extraneous_keys )
487+
488+ def _test_interpreter_version_info_sets_values_to_none_if_not_given (name ):
489+ _interpreter_version_info_test (
490+ name ,
491+ {
492+ "major" : "3" ,
493+ "micro" : "10" ,
494+ "minor" : "3" ,
495+ },
496+ lambda env , target : (
497+ env .expect .that_target (target ).provider (
498+ PyRuntimeInfo ,
499+ factory = py_runtime_info_subject ,
500+ ).interpreter_version_info ().serial ().equals (None )
501+ ),
502+ expect_failure = False ,
503+ )
504+
505+ _tests .append (_test_interpreter_version_info_sets_values_to_none_if_not_given )
506+
507+ def _test_interpreter_version_info_parses_values_to_struct (name ):
508+ _interpreter_version_info_test (
509+ name ,
510+ {
511+ "major" : "3" ,
512+ "micro" : "10" ,
513+ "minor" : "6" ,
514+ "releaselevel" : "alpha" ,
515+ "serial" : "1" ,
516+ },
517+ impl = _test_interpreter_version_info_parses_values_to_struct_impl ,
518+ expect_failure = False ,
519+ )
520+
521+ def _test_interpreter_version_info_parses_values_to_struct_impl (env , target ):
522+ version_info = env .expect .that_target (target ).provider (PyRuntimeInfo , factory = py_runtime_info_subject ).interpreter_version_info ()
523+ version_info .major ().equals (3 )
524+ version_info .minor ().equals (6 )
525+ version_info .micro ().equals (10 )
526+ version_info .releaselevel ().equals ("alpha" )
527+ version_info .serial ().equals (1 )
528+
529+ _tests .append (_test_interpreter_version_info_parses_values_to_struct )
530+
416531def py_runtime_test_suite (name ):
417532 test_suite (
418533 name = name ,
0 commit comments