diff --git a/tests/common/TestRuntime.cs b/tests/common/TestRuntime.cs
index f1f43e0151..4acbfcec60 100644
--- a/tests/common/TestRuntime.cs
+++ b/tests/common/TestRuntime.cs
@@ -141,6 +141,8 @@ partial class TestRuntime
switch (minor) {
case 5:
return CheckiOSSystemVersion (6, 0);
+ case 6:
+ return CheckiOSSystemVersion (6, 1);
default:
throw new NotImplementedException ();
}
diff --git a/tests/introspection/ApiBaseTest.cs b/tests/introspection/ApiBaseTest.cs
index b8ca5d4244..f480567154 100644
--- a/tests/introspection/ApiBaseTest.cs
+++ b/tests/introspection/ApiBaseTest.cs
@@ -217,55 +217,5 @@ namespace Introspection {
return Path.Combine (prefix, libname + ".framework", libname);
}
-
- protected bool IsOSX11OrIOS9 {
- get {
-#if MONOMAC
- return Mac.IsElCapitanOrHigher;
-#elif __WATCHOS__
- return false;
-#else
- return UIDevice.CurrentDevice.CheckSystemVersion (9, 0);
-#endif
- }
- }
-
- protected bool CheckiOSSystemVersion (int major, int minor)
- {
-#if __IOS__
- return UIDevice.CurrentDevice.CheckSystemVersion (major, minor);
-#else
- throw new InvalidOperationException ("Can only check iOS system version on iOS.");
-#endif
- }
-
- // This only works for API introduced in the same numeric version in both iOS and tvOS.
- protected bool CheckiOSOrTVOSSystemVersion (int major, int minor)
- {
-#if __IOS__ || __TVOS__
- return UIDevice.CurrentDevice.CheckSystemVersion (major, minor);
-#else
- throw new InvalidOperationException ("Can only check iOS or tvOS system version on iOS or tvOS.");
-#endif
- }
-
- protected bool CheckWatchOSSystemVersion (int major, int minor)
- {
-#if __WATCHOS__
- throw new NotImplementedException ();
-// return UIDevice.CurrentDevice.CheckSystemVersion (major, minor);
-#else
- throw new InvalidOperationException ("Can only check watchOS system version on watchOS.");
-#endif
- }
-
- protected bool CheckTVOSSystemVersion (int major, int minor)
- {
-#if __TVOS__
- return UIDevice.CurrentDevice.CheckSystemVersion (major, minor);
-#else
- throw new InvalidOperationException ("Can only check tvOS system version on tvOS.");
-#endif
- }
}
}
diff --git a/tests/introspection/ApiSignatureTest.cs b/tests/introspection/ApiSignatureTest.cs
index 2528023438..8ca0ed48d0 100644
--- a/tests/introspection/ApiSignatureTest.cs
+++ b/tests/introspection/ApiSignatureTest.cs
@@ -140,7 +140,7 @@ namespace Introspection {
case "EKSpan":
case "EKRecurrenceFrequency":
case "EKEventAvailability":
- if (!IsOSX11OrIOS9)
+ if (!TestRuntime.CheckXcodeVersion (7, 0))
return 4;
break;
case "MDLAxisAlignedBoundingBox":
@@ -670,7 +670,7 @@ namespace Introspection {
case "EventKit.EKSpan":
case "EventKit.EKAlarmType":
// EventKit.EK* enums are anonymous enums in 10.10 and iOS 8, but an NSInteger in 10.11 and iOS 9.
- if (IsOSX11OrIOS9)
+ if (TestRuntime.CheckXcodeVersion (7, 0))
goto default;
return true;
default:
diff --git a/tests/introspection/iOS/iOSApiCtorInitTest.cs b/tests/introspection/iOS/iOSApiCtorInitTest.cs
index f11dbbc40b..f8ffdfc2c2 100644
--- a/tests/introspection/iOS/iOSApiCtorInitTest.cs
+++ b/tests/introspection/iOS/iOSApiCtorInitTest.cs
@@ -58,7 +58,7 @@ namespace Introspection {
case "Metal":
case "MonoTouch.Metal":
// they works with iOS9 beta 4 (but won't work on older simulators)
- if ((Runtime.Arch == Arch.SIMULATOR) && !CheckiOSOrTVOSSystemVersion (9,0))
+ if ((Runtime.Arch == Arch.SIMULATOR) && !TestRuntime.CheckXcodeVersion (7, 0))
return true;
break;
#if !__WATCHOS__
@@ -69,7 +69,7 @@ namespace Introspection {
if (Runtime.Arch == Arch.SIMULATOR)
return true;
// some devices don't support metal and that crash some API that does not check that, e.g. #33153
- if (!CheckiOSOrTVOSSystemVersion (9,0) || (MTLDevice.SystemDefault == null))
+ if (!TestRuntime.CheckXcodeVersion (7, 0) || (MTLDevice.SystemDefault == null))
return true;
break;
#endif // !__WATCHOS__
@@ -125,7 +125,7 @@ namespace Introspection {
// technically available since 4.1 - however it got a new base class in 6.0
// and that new base class GKGameCenterViewController did not exists before 6.0
// which makes the type unusable in 5.x, ref: https://gist.github.com/spouliot/271b6230a3aa2b58bc6e
- return !CheckiOSSystemVersion (6,0);
+ return !TestRuntime.CheckXcodeVersion (4, 5);
// mistake - we should not have exposed those default ctor and now we must live with them
case "GCControllerElement":
@@ -160,7 +160,7 @@ namespace Introspection {
// Started with iOS8 on simulator (always) but it looks like it can happen on devices too
// NSInvalidArgumentException Use initWithAccessibilityContainer:
case "UIAccessibilityElement":
- return CheckiOSSystemVersion (8,0);
+ return TestRuntime.CheckXcodeVersion (6, 0);
#endif
// in 8.2 beta 1 this crash the app (simulator) without giving any details in the logs
case "WKUserNotificationInterfaceController":
@@ -247,7 +247,7 @@ namespace Introspection {
return;
// iOS9 - the instance was "kind of valid" before
case "PKPaymentAuthorizationViewController":
- if (CheckiOSSystemVersion (9,0))
+ if (TestRuntime.CheckXcodeVersion (7, 0))
return;
break;
}
@@ -276,7 +276,7 @@ namespace Introspection {
case "AVAssetResourceLoadingRequest":
case "GKScoreChallenge": // Objective-C exception thrown. Name: NSInvalidArgumentException Reason: -[GKScoreChallenge challengeID]: unrecognized selector sent to instance 0x18acc340
case "GKAchievementChallenge": // Objective-C exception thrown. Name: NSInvalidArgumentException Reason: -[GKAchievementChallenge challengeID]: unrecognized selector sent to instance 0x160f4840
- if (CheckiOSOrTVOSSystemVersion (6,0))
+ if (TestRuntime.CheckXcodeVersion (4, 5))
return;
break;
// crash (when asking `description`) under iOS5 (only) simulator
@@ -286,7 +286,7 @@ namespace Introspection {
case "WKFrameInfo":
case "WKNavigation":
case "WKNavigationAction":
- if (CheckiOSSystemVersion (9,0))
+ if (TestRuntime.CheckXcodeVersion (7, 0))
return;
break;
default:
@@ -301,7 +301,7 @@ namespace Introspection {
switch (obj.GetType ().Name) {
case "NSString":
// according to bots `isKindOf (null)` returns true before iOS 8, ref: #36726
- if (!CheckiOSOrTVOSSystemVersion (8, 0))
+ if (!TestRuntime.CheckXcodeVersion (6, 0))
return;
break;
}
diff --git a/tests/introspection/iOS/iOSApiFieldTest.cs b/tests/introspection/iOS/iOSApiFieldTest.cs
index cd9eb9183e..e09f94045e 100644
--- a/tests/introspection/iOS/iOSApiFieldTest.cs
+++ b/tests/introspection/iOS/iOSApiFieldTest.cs
@@ -46,7 +46,7 @@ namespace Introspection {
case "Metal":
case "MonoTouch.Metal":
// they works with iOS9 beta 4 (but won't work on older simulators)
- if ((Runtime.Arch == Arch.SIMULATOR) && !CheckiOSSystemVersion (9,0))
+ if ((Runtime.Arch == Arch.SIMULATOR) && !TestRuntime.CheckXcodeVersion (7, 0))
return true;
break;
case "MetalKit":
@@ -83,13 +83,13 @@ namespace Introspection {
case "ExifLensMake":
case "ExifLensModel":
case "ExifLensSerialNumber":
- return !CheckiOSOrTVOSSystemVersion (6,1);
+ return !TestRuntime.CheckXcodeVersion (4, 6);
// ImageIO: new in iOS 8 but returns nil (at least in beta 1) seems fixed in iOS9
case "PNGLoopCount":
case "PNGDelayTime":
case "PNGUnclampedDelayTime":
- return !CheckiOSOrTVOSSystemVersion (9,0);
+ return !TestRuntime.CheckXcodeVersion (7, 0);
// CoreServices.CFHTTPMessage - document in 10.9 but returns null
case "_AuthenticationSchemeOAuth1":
diff --git a/tests/introspection/iOS/iOSApiProtocolTest.cs b/tests/introspection/iOS/iOSApiProtocolTest.cs
index 3b71c8b2f6..9549a6734b 100644
--- a/tests/introspection/iOS/iOSApiProtocolTest.cs
+++ b/tests/introspection/iOS/iOSApiProtocolTest.cs
@@ -57,7 +57,7 @@ namespace Introspection {
return true;
// Requires iOS 8.2 or later in 32-bit mode
- if (!CheckiOSSystemVersion (8, 2) && IntPtr.Size == 4)
+ if (!TestRuntime.CheckXcodeVersion (6, 2) && IntPtr.Size == 4)
return true;
break;
@@ -75,7 +75,7 @@ namespace Introspection {
case "MonoTouch.CoreAudioKit":
case "CoreAudioKit":
// they works with iOS9 beta 4 (but won't work on older simulators)
- if ((Runtime.Arch == Arch.SIMULATOR) && !CheckiOSOrTVOSSystemVersion (9,0))
+ if ((Runtime.Arch == Arch.SIMULATOR) && !TestRuntime.CheckXcodeVersion (7, 0))
return true;
break;
@@ -117,7 +117,7 @@ namespace Introspection {
case "GKLocalPlayer":
// NSSecureCoding is still undocumented, for iOS, and neither is NSCoding for OSX
// and it did not respond before 6.0 (when NSSecureCoding was introduced)
- return !CheckiOSOrTVOSSystemVersion (6,0);
+ return !TestRuntime.CheckXcodeVersion (4, 5);
case "UITableViewDataSource":
// this is a *protocol( and we do not want to force people to conform to (an
// undocumented "requirement") NSCoding - as ObjC do not have to do this
@@ -244,7 +244,7 @@ namespace Introspection {
break;
case "UITextInputTraits":
// UISearchBar conformance fails before 7.1 - reference bug #33333
- if ((type.Name == "UISearchBar") && !CheckiOSOrTVOSSystemVersion (7,1))
+ if ((type.Name == "UISearchBar") && !TestRuntime.CheckXcodeVersion (5, 1))
return true;
break;
#if !XAMCORE_3_0
@@ -258,7 +258,7 @@ namespace Introspection {
case "GKSavedGameListener":
switch (type.Name) {
case "GKLocalPlayerListener": // 37180
- return !CheckiOSOrTVOSSystemVersion (8, 0);
+ return !TestRuntime.CheckXcodeVersion (6, 0);
}
break;
}
@@ -268,8 +268,7 @@ namespace Introspection {
[Test]
public override void SecureCoding ()
{
- if (!CheckiOSOrTVOSSystemVersion (6,0))
- Assert.Inconclusive ("Requires iOS 6+");
+ TestRuntime.AssertXcodeVersion (4, 5);
base.SecureCoding ();
}
@@ -277,8 +276,7 @@ namespace Introspection {
[Test]
public override void SupportsSecureCoding ()
{
- if (!CheckiOSOrTVOSSystemVersion (6,0))
- Assert.Inconclusive ("Requires iOS 6+");
+ TestRuntime.AssertXcodeVersion (4, 5);
base.SupportsSecureCoding ();
}
diff --git a/tests/introspection/iOS/iOSApiSelectorTest.cs b/tests/introspection/iOS/iOSApiSelectorTest.cs
index b7c5736426..b098bc3f53 100644
--- a/tests/introspection/iOS/iOSApiSelectorTest.cs
+++ b/tests/introspection/iOS/iOSApiSelectorTest.cs
@@ -51,7 +51,7 @@ namespace Introspection {
case "Metal":
case "MonoTouch.Metal":
// they works with iOS9 beta 4 (but won't work on older simulators)
- if ((Runtime.Arch == Arch.SIMULATOR) && !CheckiOSOrTVOSSystemVersion (9,0))
+ if ((Runtime.Arch == Arch.SIMULATOR) && !TestRuntime.CheckXcodeVersion (7, 0))
return true;
break;
case "MetalKit":
@@ -110,7 +110,7 @@ namespace Introspection {
case "setSessionDescription:":
case "delegate":
// does not respond anymore but the properties works (see monotouch-test)
- if (CheckiOSOrTVOSSystemVersion (9, 0))
+ if (TestRuntime.CheckXcodeVersion (7, 0))
return true;
break;
}
@@ -130,7 +130,7 @@ namespace Introspection {
case "setTaskDescription:":
case "taskIdentifier":
// does not respond anymore but the properties works (see monotouch-test)
- if (CheckiOSOrTVOSSystemVersion (9, 0))
+ if (TestRuntime.CheckXcodeVersion (7, 0))
return true;
break;
}
@@ -138,7 +138,7 @@ namespace Introspection {
case "NSUrlSessionConfiguration":
case "NSUrlSessionStreamTask":
// does not respond anymore but the properties works (see monotouch-test for a partial list)
- if (CheckiOSOrTVOSSystemVersion (9, 0))
+ if (TestRuntime.CheckXcodeVersion (7, 0))
return true;
break;
@@ -147,7 +147,7 @@ namespace Introspection {
case "currentRequest":
case "originalRequest":
case "response":
- if (CheckiOSOrTVOSSystemVersion (9, 0))
+ if (TestRuntime.CheckXcodeVersion (7, 0))
return true;
break;
}
@@ -159,7 +159,7 @@ namespace Introspection {
// https://trello.com/c/pKLOLjVJ/29-24231250-coremotion-api-removal-without-deprecation
case "accelerometerDataFromDate:toDate:":
case "recordAccelerometerForDuration:":
- if (!CheckiOSOrTVOSSystemVersion (9, 3))
+ if (!TestRuntime.CheckXcodeVersion (7, 3))
return true;
break;
}
@@ -223,7 +223,7 @@ namespace Introspection {
// UITextInputTraits and UITextInputProtocol
if (declaredType.Name == "UITextField" || declaredType.Name == "UITextView")
return true;
- if (CheckiOSOrTVOSSystemVersion (7,1) && declaredType.Name == "UISearchBar")
+ if (TestRuntime.CheckXcodeVersion (5, 1) && declaredType.Name == "UISearchBar")
return true;
break;
case "keyboardAppearance":
@@ -250,7 +250,7 @@ namespace Introspection {
if (declaredType.Name == "UITextField" || declaredType.Name == "UITextView")
return true;
// ignore UISearchBar before iOS8 - it did not really implement UITextInput
- if (declaredType.Name == "UISearchBar" && !CheckiOSSystemVersion (8,0))
+ if (declaredType.Name == "UISearchBar" && !TestRuntime.CheckXcodeVersion (6, 0))
return true;
break;
case "dictationRecognitionFailed":
@@ -293,16 +293,16 @@ namespace Introspection {
case "useApplicationAudioSession":
case "setUseApplicationAudioSession:":
if (declaredType.Name == "MPMoviePlayerController")
- return CheckiOSSystemVersion (6,0);
+ return TestRuntime.CheckXcodeVersion (4, 5);
break;
// iOS6 - headers says readwrite but they do not respond
case "setUUID:":
case "setIsPrimary:":
if (declaredType.Name == "CBMutableService")
- return CheckiOSSystemVersion (6, 0);
+ return TestRuntime.CheckXcodeVersion (4, 5);
if (declaredType.Name == "CBMutableCharacteristic")
- return CheckiOSSystemVersion (9, 0);
+ return TestRuntime.CheckXcodeVersion (7, 0);
break;
// documented since 4.0 - but does not answer on an iPad1 with 5.1.1
@@ -405,7 +405,7 @@ namespace Introspection {
case "scrollViewWillBeginZooming:withView:":
case "scrollViewWillEndDragging:withVelocity:targetContentOffset:":
if (declaredType.Name == "UICollectionViewController")
- return CheckiOSOrTVOSSystemVersion (6,0);
+ return TestRuntime.CheckXcodeVersion (4, 5);
break;
// failing (check why)
@@ -414,7 +414,7 @@ namespace Introspection {
case "finalLayoutAttributesForDeletedItemAtIndexPath:":
case "finalLayoutAttributesForDeletedSupplementaryElementOfKind:atIndexPath:":
if (declaredType.Name == "UICollectionViewLayout")
- return CheckiOSSystemVersion (6,0);
+ return TestRuntime.CheckXcodeVersion (4, 5);
break;
// This is implemented by internal concrete classes of NSFileHandle
@@ -499,25 +499,25 @@ namespace Introspection {
switch (declaredType.Name) {
// not conforming to NSCopying in 5.1 SDK
case "UIFont":
- return !CheckiOSSystemVersion (6,0);
+ return !TestRuntime.CheckXcodeVersion (4, 5);
// not conforming to NSCopying before 7.0 SDK
case "CBPeripheral":
- return !CheckiOSSystemVersion (7,0);
+ return !TestRuntime.CheckXcodeVersion (5, 0);
// not conforming to NSCopying before 8.0 SDK
case "AVMetadataFaceObject":
- return !CheckiOSSystemVersion (8,0);
+ return !TestRuntime.CheckXcodeVersion (6, 0);
// not conforming to NSCopying before 8.2 SDK
case "HKUnit":
- return !CheckiOSSystemVersion (8,2);
+ return !TestRuntime.CheckXcodeVersion (6, 2);
case "HKBiologicalSexObject":
case "HKBloodTypeObject":
- return !CheckiOSSystemVersion (9,0);
+ return !TestRuntime.CheckXcodeVersion (7, 0);
}
break;
// on iOS8.0 this does not work on the simulator (but works on devices)
case "language":
- if (declaredType.Name == "AVSpeechSynthesisVoice" && CheckiOSSystemVersion (8,0) && Runtime.Arch == Arch.SIMULATOR)
+ if (declaredType.Name == "AVSpeechSynthesisVoice" && TestRuntime.CheckXcodeVersion (6, 0) && Runtime.Arch == Arch.SIMULATOR)
return true;
break;
@@ -553,11 +553,11 @@ namespace Introspection {
switch (declaredType.Name) {
// UITextInputMode was added in 4.2 but conformed to NSSecureCoding only from 7.0+
case "UITextInputMode":
- return !CheckiOSSystemVersion (7,0);
+ return !TestRuntime.CheckXcodeVersion (5, 0);
// iOS9
case "HKBiologicalSexObject":
case "HKBloodTypeObject":
- return !CheckiOSSystemVersion (9,0);
+ return !TestRuntime.CheckXcodeVersion (7, 0);
}
break;
#else
@@ -565,7 +565,7 @@ namespace Introspection {
// we'll ignore them for compat - but won't provide them in the new assemblies
case "backgroundImageForBarMetrics:":
case "setBackgroundImage:forBarMetrics:":
- if (declaredType.Name == "UISearchBar" && CheckiOSSystemVersion (8,0))
+ if (declaredType.Name == "UISearchBar" && TestRuntime.CheckXcodeVersion (6, 0))
return true;
break;
#endif
diff --git a/tests/introspection/iOS/iOSApiSignatureTest.cs b/tests/introspection/iOS/iOSApiSignatureTest.cs
index d552c8baab..c805bb3ca1 100644
--- a/tests/introspection/iOS/iOSApiSignatureTest.cs
+++ b/tests/introspection/iOS/iOSApiSignatureTest.cs
@@ -42,7 +42,7 @@ namespace Introspection {
// EventKit.EK* enums are anonymous enums in 10.10 and iOS 8, but an NSInteger in 10.11 and iOS 9.
case "EKCalendarChooserSelectionStyle":
case "EKCalendarChooserDisplayStyle":
- if (!IsOSX11OrIOS9)
+ if (!TestRuntime.CheckXcodeVersion (7, 0))
return 4;
break;
}
@@ -64,7 +64,7 @@ namespace Introspection {
// (they used to return `bool`)
case "beginAppearanceTransition:animated:":
case "endAppearanceTransition":
- if (!CheckiOSOrTVOSSystemVersion (6,0))
+ if (!TestRuntime.CheckXcodeVersion (4, 5))
return true;
break;
}
@@ -74,12 +74,12 @@ namespace Introspection {
// sadly, and even with a bug report with a few exchanges, this was not fixed before iOS8 GM :-(
// 64bits application for iOS 7.x will be uncommon so we prefer to be forward compatible
if (selector == "status")
- return !CheckiOSSystemVersion (8,0);
+ return !TestRuntime.CheckXcodeVersion (6, 0);
break;
case "CMMotionManager":
// iOS 8.3 changed CMMotionManager from 4 to 8 bytes on 64bits CPU and we have to follow that breaking
// change unless Apple revert that before final. [radar 20295259]
- if ((IntPtr.Size == 4) || CheckiOSSystemVersion (8,3))
+ if ((IntPtr.Size == 4) || TestRuntime.CheckXcodeVersion (6, 3))
return false;
// which means iOS 8.2 (and earlier can't match)
switch (selector) {
@@ -140,7 +140,7 @@ namespace Introspection {
case "MonoTouch.EventKitUI.EKCalendarChooserDisplayStyle":
case "EventKitUI.EKCalendarChooserSelectionStyle":
case "EventKitUI.EKCalendarChooserDisplayStyle":
- return (IntPtr.Size == 4) || !IsOSX11OrIOS9;
+ return (IntPtr.Size == 4) || !TestRuntime.CheckXcodeVersion (7, 0);
case "System.UInt32":
// numberOfTouchesRequired was signed before iOS6, unsigned since then
return true;
diff --git a/tests/introspection/iOS/introspection-ios.csproj b/tests/introspection/iOS/introspection-ios.csproj
index 05d52ce049..c56e177b62 100644
--- a/tests/introspection/iOS/introspection-ios.csproj
+++ b/tests/introspection/iOS/introspection-ios.csproj
@@ -159,6 +159,9 @@
PlatformInfo.cs
+
+ TestRuntime.cs
+