@@ -695,6 +695,77 @@ def test_should_be_able_to_use_integers_as_prerelease_build():
695695 assert VersionInfo (1 , 2 , 3 , 4 , 5 ) == VersionInfo (1 , 2 , 3 , "4" , "5" )
696696
697697
698+ @pytest .mark .parametrize (
699+ "version, index, expected" ,
700+ [
701+ # Simple positive indices
702+ ("1.2.3-rc.0+build.0" , 0 , 1 ),
703+ ("1.2.3-rc.0+build.0" , 1 , 2 ),
704+ ("1.2.3-rc.0+build.0" , 2 , 3 ),
705+ ("1.2.3-rc.0+build.0" , 3 , "rc.0" ),
706+ ("1.2.3-rc.0+build.0" , 4 , "build.0" ),
707+ ("1.2.3-rc.0" , 0 , 1 ),
708+ ("1.2.3-rc.0" , 1 , 2 ),
709+ ("1.2.3-rc.0" , 2 , 3 ),
710+ ("1.2.3-rc.0" , 3 , "rc.0" ),
711+ ("1.2.3" , 0 , 1 ),
712+ ("1.2.3" , 1 , 2 ),
713+ ("1.2.3" , 2 , 3 ),
714+ ],
715+ )
716+ def test_version_info_should_be_accessed_with_index (version , index , expected ):
717+ version_info = VersionInfo .parse (version )
718+ assert version_info [index ] == expected
719+
720+
721+ @pytest .mark .parametrize (
722+ "version, slice_object, expected" ,
723+ [
724+ # Slice indices
725+ ("1.2.3-rc.0+build.0" , slice (0 , 5 ), (1 , 2 , 3 , "rc.0" , "build.0" )),
726+ ("1.2.3-rc.0+build.0" , slice (0 , 4 ), (1 , 2 , 3 , "rc.0" )),
727+ ("1.2.3-rc.0+build.0" , slice (0 , 3 ), (1 , 2 , 3 )),
728+ ("1.2.3-rc.0+build.0" , slice (0 , 2 ), (1 , 2 )),
729+ ("1.2.3-rc.0+build.0" , slice (3 , 5 ), ("rc.0" , "build.0" )),
730+ ("1.2.3-rc.0" , slice (0 , 4 ), (1 , 2 , 3 , "rc.0" )),
731+ ("1.2.3-rc.0" , slice (0 , 3 ), (1 , 2 , 3 )),
732+ ("1.2.3-rc.0" , slice (0 , 2 ), (1 , 2 )),
733+ ("1.2.3" , slice (0 , 10 ), (1 , 2 , 3 )),
734+ ("1.2.3" , slice (0 , 3 ), (1 , 2 , 3 )),
735+ ("1.2.3" , slice (0 , 2 ), (1 , 2 )),
736+ # Special cases
737+ ("1.2.3-rc.0+build.0" , slice (3 ), (1 , 2 , 3 )),
738+ ("1.2.3-rc.0+build.0" , slice (0 , 5 , 2 ), (1 , 3 , "build.0" )),
739+ ("1.2.3-rc.0+build.0" , slice (None , 5 , 2 ), (1 , 3 , "build.0" )),
740+ ("1.2.3-rc.0+build.0" , slice (5 , 0 , - 2 ), ("build.0" , 3 )),
741+ ],
742+ )
743+ def test_version_info_should_be_accessed_with_slice_object (
744+ version , slice_object , expected
745+ ):
746+ version_info = VersionInfo .parse (version )
747+ assert version_info [slice_object ] == expected
748+
749+
750+ @pytest .mark .parametrize (
751+ "version, index" ,
752+ [
753+ ("1.2.3-rc.0+build.0" , - 1 ),
754+ ("1.2.3-rc.0" , - 1 ),
755+ ("1.2.3-rc.0" , 4 ),
756+ ("1.2.3" , - 1 ),
757+ ("1.2.3" , 3 ),
758+ ("1.2.3" , 4 ),
759+ ("1.2.3" , 10 ),
760+ ("1.2.3" , slice (- 3 )),
761+ ],
762+ )
763+ def test_version_info_should_throw_index_error (version , index ):
764+ version_info = VersionInfo .parse (version )
765+ with pytest .raises (IndexError ):
766+ version_info [index ]
767+
768+
698769@pytest .mark .parametrize (
699770 "cli,expected" ,
700771 [
0 commit comments