2021-08-23 18:22:39 +03:00
#nullable enable
using System ;
using System.IO ;
using System.Linq ;
using Microsoft.Build.Utilities ;
using NUnit.Framework ;
using Xamarin.MacDev ;
using Xamarin.MacDev.Tasks ;
using Xamarin.Utils ;
namespace Xamarin.iOS.Tasks {
[TestFixture]
public class CompileAppManifestTaskTests : TestBase {
CompileAppManifest CreateTask ( string? tmpdir = null , ApplePlatform platform = ApplePlatform . iOS )
{
if ( string . IsNullOrEmpty ( tmpdir ) )
tmpdir = Cache . CreateTemporaryDirectory ( ) ;
var task = CreateTask < CompileAppManifest > ( ) ;
task . AssemblyName = "AssemblyName" ;
task . AppBundleName = "AppBundleName" ;
task . CompiledAppManifest = new TaskItem ( Path . Combine ( tmpdir , "TemporaryAppManifest.plist" ) ) ;
task . DefaultSdkVersion = Sdks . GetAppleSdk ( platform ) . GetInstalledSdkVersions ( false ) . First ( ) . ToString ( ) ;
task . SdkPlatform = PlatformFrameworkHelper . GetSdkPlatform ( platform , false ) ;
task . SdkVersion = task . DefaultSdkVersion ;
task . TargetFrameworkMoniker = TargetFramework . GetTargetFramework ( platform , true ) . ToString ( ) ;
return task ;
}
[Test]
public void DefaultMinimumOSVersion ( )
{
var dir = Cache . CreateTemporaryDirectory ( ) ;
var task = CreateTask ( dir ) ;
ExecuteTask ( task ) ;
var plist = PDictionary . FromFile ( task . CompiledAppManifest . ItemSpec ) ;
Assert . AreEqual ( task . SdkVersion , plist . GetMinimumOSVersion ( ) , "MinimumOSVersion" ) ;
}
[Test]
public void MainMinimumOSVersions ( )
{
var dir = Cache . CreateTemporaryDirectory ( ) ;
var task = CreateTask ( dir ) ;
var mainPath = Path . Combine ( dir , "Info.plist" ) ;
var main = new PDictionary ( ) ;
main . SetMinimumOSVersion ( "14.0" ) ;
main . Save ( mainPath ) ;
2021-09-23 19:46:37 +03:00
task . AppManifest = new TaskItem ( mainPath ) ;
2021-08-23 18:22:39 +03:00
ExecuteTask ( task ) ;
var plist = PDictionary . FromFile ( task . CompiledAppManifest . ItemSpec ) ;
Assert . AreEqual ( "14.0" , plist . GetMinimumOSVersion ( ) , "MinimumOSVersion" ) ;
}
[Test]
public void MultipleMinimumOSVersions ( )
{
var dir = Cache . CreateTemporaryDirectory ( ) ;
var task = CreateTask ( dir ) ;
var mainPath = Path . Combine ( dir , "Info.plist" ) ;
var main = new PDictionary ( ) ;
main . SetMinimumOSVersion ( "14.0" ) ;
main . Save ( mainPath ) ;
// The version in the partial app manifest takes precedence.
var partialPath = Path . Combine ( dir , "PartialAppManifest.plist" ) ;
var partial = new PDictionary ( ) ;
partial . SetMinimumOSVersion ( "13.0" ) ;
partial . Save ( partialPath ) ;
2021-09-23 19:46:37 +03:00
task . AppManifest = new TaskItem ( mainPath ) ;
2021-08-23 18:22:39 +03:00
task . PartialAppManifests = new [ ] { new TaskItem ( partialPath ) } ;
ExecuteTask ( task ) ;
var plist = PDictionary . FromFile ( task . CompiledAppManifest . ItemSpec ) ;
Assert . AreEqual ( "13.0" , plist . GetMinimumOSVersion ( ) , "MinimumOSVersion" ) ;
}
2021-09-08 10:20:05 +03:00
[Test]
public void ErrorWithMismatchedInfoPlistMinimumOSVersion ( )
{
var dir = Cache . CreateTemporaryDirectory ( ) ;
var task = CreateTask ( dir ) ;
var plist = new PDictionary ( ) ;
plist . SetMinimumOSVersion ( "10.0" ) ;
var manifest = Path . Combine ( dir , "Info.plist" ) ;
plist . Save ( manifest ) ;
2021-09-23 19:46:37 +03:00
task . AppManifest = new TaskItem ( manifest ) ;
2021-09-08 10:20:05 +03:00
task . SupportedOSPlatformVersion = "11.0" ;
ExecuteTask ( task , expectedErrorCount : 1 ) ;
2021-09-10 23:02:30 +03:00
Assert . AreEqual ( "The MinimumOSVersion value in the Info.plist (10.0) does not match the SupportedOSPlatformVersion value (11.0) in the project file (if there is no SupportedOSPlatformVersion value in the project file, then a default value has been assumed). Either change the value in the Info.plist to match the SupportedOSPlatformVersion value, or remove the value in the Info.plist (and add a SupportedOSPlatformVersion value to the project file if it doesn't already exist)." , Engine . Logger . ErrorEvents [ 0 ] . Message ) ;
2021-09-08 10:20:05 +03:00
}
[Test]
public void SupportedOSPlatformVersion ( )
{
var dir = Cache . CreateTemporaryDirectory ( ) ;
var task = CreateTask ( dir ) ;
task . SupportedOSPlatformVersion = "11.0" ;
ExecuteTask ( task ) ;
var plist = PDictionary . FromFile ( task . CompiledAppManifest . ItemSpec ) ;
Assert . AreEqual ( "11.0" , plist . GetMinimumOSVersion ( ) , "MinimumOSVersion" ) ;
}
[Test]
public void MacCatalystVersionCheck ( )
{
var task = CreateTask ( platform : ApplePlatform . MacCatalyst ) ;
task . SupportedOSPlatformVersion = "14.2" ;
ExecuteTask ( task ) ;
var plist = PDictionary . FromFile ( task . CompiledAppManifest . ItemSpec ) ;
Assert . AreEqual ( "11.0" , plist . GetMinimumSystemVersion ( ) , "MinimumOSVersion" ) ;
}
[Test]
public void MacCatalystVersionCheckUnmappedError ( )
{
var task = CreateTask ( platform : ApplePlatform . MacCatalyst ) ;
task . SupportedOSPlatformVersion = "10.0" ;
ExecuteTask ( task , expectedErrorCount : 1 ) ;
2021-09-21 17:19:04 +03:00
Assert . That ( Engine . Logger . ErrorEvents [ 0 ] . Message , Does . StartWith ( "Could not map the Mac Catalyst version 10.0 to a corresponding macOS version. Valid Mac Catalyst versions are:" ) ) ;
2021-09-08 10:20:05 +03:00
}
2021-08-23 18:22:39 +03:00
}
}