@@ -53,6 +53,30 @@ def mock(name):
5353 return mock
5454
5555
56+ @pytest .fixture
57+ def mock_ios (monkeypatch ):
58+ # Monkeypatch the platform to be iOS
59+ monkeypatch .setattr (sys , "platform" , "ios" )
60+
61+ # Mock a fake architecture that will fit the expected pattern, but
62+ # wont actually be a legal multiarch.
63+ monkeypatch .setattr (
64+ sys .implementation ,
65+ "_multiarch" ,
66+ "gothic-iphoneos" ,
67+ raising = False ,
68+ )
69+
70+ # Mock the return value of platform.ios_ver.
71+ def mock_ios_ver (* args ):
72+ return ("iOS" , "13.2" , "iPhone15,2" , False )
73+
74+ if sys .version_info < (3 , 13 ):
75+ platform .ios_ver = mock_ios_ver
76+ else :
77+ monkeypatch .setattr (platform , "ios_ver" , mock_ios_ver )
78+
79+
5680class TestTag :
5781 def test_lowercasing (self ):
5882 tag = tags .Tag ("PY3" , "None" , "ANY" )
@@ -335,6 +359,84 @@ def test_macos_11(self, major, minor):
335359 assert "macosx_12_0_universal2" in platforms
336360
337361
362+ class TestIOSPlatforms :
363+ def test_version_detection (self , mock_ios ):
364+ platforms = list (tags .ios_platforms (multiarch = "arm64-iphoneos" ))
365+ assert platforms == [
366+ "ios_13_2_arm64_iphoneos" ,
367+ "ios_13_1_arm64_iphoneos" ,
368+ "ios_13_0_arm64_iphoneos" ,
369+ "ios_12_9_arm64_iphoneos" ,
370+ "ios_12_8_arm64_iphoneos" ,
371+ "ios_12_7_arm64_iphoneos" ,
372+ "ios_12_6_arm64_iphoneos" ,
373+ "ios_12_5_arm64_iphoneos" ,
374+ "ios_12_4_arm64_iphoneos" ,
375+ "ios_12_3_arm64_iphoneos" ,
376+ "ios_12_2_arm64_iphoneos" ,
377+ "ios_12_1_arm64_iphoneos" ,
378+ "ios_12_0_arm64_iphoneos" ,
379+ ]
380+
381+ def test_multiarch_detection (self , mock_ios ):
382+ platforms = list (tags .ios_platforms (version = (12 , 0 )))
383+ assert platforms == ["ios_12_0_gothic_iphoneos" ]
384+
385+ def test_ios_platforms (self , mock_ios ):
386+ # Pre-iOS 12.0 releases won't match anything
387+ platforms = list (tags .ios_platforms ((7 , 0 ), "arm64-iphoneos" ))
388+ assert platforms == []
389+
390+ # iOS 12.0 returns exactly 1 match
391+ platforms = list (tags .ios_platforms ((12 , 0 ), "arm64-iphoneos" ))
392+ assert platforms == ["ios_12_0_arm64_iphoneos" ]
393+
394+ # iOS 13.0 returns a match for 13.0, plus every 12.X
395+ platforms = list (tags .ios_platforms ((13 , 0 ), "x86_64-iphonesimulator" ))
396+ assert platforms == [
397+ "ios_13_0_x86_64_iphonesimulator" ,
398+ "ios_12_9_x86_64_iphonesimulator" ,
399+ "ios_12_8_x86_64_iphonesimulator" ,
400+ "ios_12_7_x86_64_iphonesimulator" ,
401+ "ios_12_6_x86_64_iphonesimulator" ,
402+ "ios_12_5_x86_64_iphonesimulator" ,
403+ "ios_12_4_x86_64_iphonesimulator" ,
404+ "ios_12_3_x86_64_iphonesimulator" ,
405+ "ios_12_2_x86_64_iphonesimulator" ,
406+ "ios_12_1_x86_64_iphonesimulator" ,
407+ "ios_12_0_x86_64_iphonesimulator" ,
408+ ]
409+
410+ # iOS 14.3 returns a match for 14.3-14.0, plus every 13.X and every 12.X
411+ platforms = list (tags .ios_platforms ((14 , 3 ), "arm64-iphoneos" ))
412+ assert platforms == [
413+ "ios_14_3_arm64_iphoneos" ,
414+ "ios_14_2_arm64_iphoneos" ,
415+ "ios_14_1_arm64_iphoneos" ,
416+ "ios_14_0_arm64_iphoneos" ,
417+ "ios_13_9_arm64_iphoneos" ,
418+ "ios_13_8_arm64_iphoneos" ,
419+ "ios_13_7_arm64_iphoneos" ,
420+ "ios_13_6_arm64_iphoneos" ,
421+ "ios_13_5_arm64_iphoneos" ,
422+ "ios_13_4_arm64_iphoneos" ,
423+ "ios_13_3_arm64_iphoneos" ,
424+ "ios_13_2_arm64_iphoneos" ,
425+ "ios_13_1_arm64_iphoneos" ,
426+ "ios_13_0_arm64_iphoneos" ,
427+ "ios_12_9_arm64_iphoneos" ,
428+ "ios_12_8_arm64_iphoneos" ,
429+ "ios_12_7_arm64_iphoneos" ,
430+ "ios_12_6_arm64_iphoneos" ,
431+ "ios_12_5_arm64_iphoneos" ,
432+ "ios_12_4_arm64_iphoneos" ,
433+ "ios_12_3_arm64_iphoneos" ,
434+ "ios_12_2_arm64_iphoneos" ,
435+ "ios_12_1_arm64_iphoneos" ,
436+ "ios_12_0_arm64_iphoneos" ,
437+ ]
438+
439+
338440class TestManylinuxPlatform :
339441 def teardown_method (self ):
340442 # Clear the version cache
@@ -619,6 +721,7 @@ def test_linux_not_linux(self, monkeypatch):
619721 "platform_name,dispatch_func" ,
620722 [
621723 ("Darwin" , "mac_platforms" ),
724+ ("iOS" , "ios_platforms" ),
622725 ("Linux" , "_linux_platforms" ),
623726 ("Generic" , "_generic_platforms" ),
624727 ],
0 commit comments