diff --git a/msbuild/tests/Xamarin.iOS.Tasks.Tests/ProjectsTests/BindingProject.cs b/msbuild/tests/Xamarin.iOS.Tasks.Tests/ProjectsTests/BindingProject.cs index a30ebf880834..6f431baee16c 100644 --- a/msbuild/tests/Xamarin.iOS.Tasks.Tests/ProjectsTests/BindingProject.cs +++ b/msbuild/tests/Xamarin.iOS.Tasks.Tests/ProjectsTests/BindingProject.cs @@ -24,7 +24,7 @@ public void BuildTest () AppBundlePath = mtouchPaths.AppBundlePath; var dllPath = Path.Combine(mtouchPaths.ProjectBinPath, "bindings-test.dll"); - Engine.GlobalProperties.SetProperty ("Platform", Platform); + Engine.ProjectCollection.SetGlobalProperty ("Platform", Platform); RunTarget (proj, "Build", 0); Assert.IsTrue (File.Exists (dllPath), "{1} binding dll does not exist: {0} ", dllPath, Platform); @@ -43,7 +43,7 @@ public void FrameworkTest () AppBundlePath = mtouchPaths.AppBundlePath; var dllPath = Path.Combine(mtouchPaths.ProjectBinPath, "bindings-test.dll"); - Engine.GlobalProperties.SetProperty ("Platform", Platform); + Engine.ProjectCollection.SetGlobalProperty ("Platform", Platform); RunTarget (proj, "Build", 0); Assert.IsTrue (File.Exists (dllPath), "{1} binding dll does not exist: {0} ", dllPath, Platform); diff --git a/msbuild/tests/Xamarin.iOS.Tasks.Tests/ProjectsTests/Bug60536.cs b/msbuild/tests/Xamarin.iOS.Tasks.Tests/ProjectsTests/Bug60536.cs index 4d3cecea167d..8140a93d611b 100644 --- a/msbuild/tests/Xamarin.iOS.Tasks.Tests/ProjectsTests/Bug60536.cs +++ b/msbuild/tests/Xamarin.iOS.Tasks.Tests/ProjectsTests/Bug60536.cs @@ -3,9 +3,9 @@ using System.Linq; using System.Collections; -using NUnit.Framework; +using Microsoft.Build.Evaluation; -using Microsoft.Build.BuildEngine; +using NUnit.Framework; namespace Xamarin.iOS.Tasks { @@ -30,8 +30,8 @@ public void TestACToolTaskCatchesJsonException () var project = SetupProject (Engine, csproj); AppBundlePath = mtouchPaths ["app_bundlepath"]; - Engine.GlobalProperties.SetProperty("Platform", platform); - Engine.GlobalProperties.SetProperty("Configuration", config); + Engine.ProjectCollection.SetGlobalProperty("Platform", platform); + Engine.ProjectCollection.SetGlobalProperty("Configuration", config); if (clean) { RunTarget (project, "Clean"); @@ -56,8 +56,9 @@ public void TestACToolTaskCatchesJsonException () } project = SetupProject (Engine, mtouchPaths.ProjectCSProjPath); + var projectInstance = project.CreateProjectInstance (); - Engine.BuildProject (project, new [] { target }, new Hashtable { {"Platform", "iPhone"} }, BuildSettings.None); + Engine.BuildProject (projectInstance, new [] { target }, new Hashtable { {"Platform", "iPhone"} }); if (Engine.Logger.ErrorEvents.Count != 1) { string messages = string.Empty; if (Engine.Logger.ErrorEvents.Count > 0) diff --git a/msbuild/tests/Xamarin.iOS.Tasks.Tests/ProjectsTests/Extensions/ExtensionTestBase.cs b/msbuild/tests/Xamarin.iOS.Tasks.Tests/ProjectsTests/Extensions/ExtensionTestBase.cs index 289ddbe10280..d638f2505827 100644 --- a/msbuild/tests/Xamarin.iOS.Tasks.Tests/ProjectsTests/Extensions/ExtensionTestBase.cs +++ b/msbuild/tests/Xamarin.iOS.Tasks.Tests/ProjectsTests/Extensions/ExtensionTestBase.cs @@ -35,8 +35,8 @@ public void BuildExtension (string hostAppName, string extensionName, string bun AppBundlePath = mtouchPaths ["app_bundlepath"]; string extensionPath = Path.Combine(AppBundlePath, "PlugIns", extensionName + ".appex"); - Engine.GlobalProperties.SetProperty ("Platform", platform); - Engine.GlobalProperties.SetProperty ("Configuration", config); + Engine.ProjectCollection.SetGlobalProperty ("Platform", platform); + Engine.ProjectCollection.SetGlobalProperty ("Configuration", config); RunTarget (proj, "Clean"); Assert.IsFalse (Directory.Exists (AppBundlePath), "{1}: App bundle exists after cleanup: {0} ", AppBundlePath, bundlePath); diff --git a/msbuild/tests/Xamarin.iOS.Tasks.Tests/ProjectsTests/Extensions/WatchKit.cs b/msbuild/tests/Xamarin.iOS.Tasks.Tests/ProjectsTests/Extensions/WatchKit.cs index 9ed2f5725853..1a2c591aadf6 100644 --- a/msbuild/tests/Xamarin.iOS.Tasks.Tests/ProjectsTests/Extensions/WatchKit.cs +++ b/msbuild/tests/Xamarin.iOS.Tasks.Tests/ProjectsTests/Extensions/WatchKit.cs @@ -38,7 +38,7 @@ public void InvalidBundleIdTest () File.WriteAllText (appInfoPath, appInfoContents.Replace ("com.xamarin.MyWatchApp", "com.xamarin.MyWatchAppX")); var proj = SetupProject (Engine, mtouchPaths.ProjectCSProjPath); - Engine.GlobalProperties.SetProperty ("Platform", Platform); + Engine.ProjectCollection.SetGlobalProperty ("Platform", Platform); AppBundlePath = mtouchPaths ["app_bundlepath"]; RunTarget (proj, "Build", 2); Assert.AreEqual ("The App Extension 'WatchExtension' has an invalid CFBundleIdentifier (com.xamarin.MyWatchApp.WatchExtension), it does not begin with the main app bundle's CFBundleIdentifier (com.xamarin.MyWatchAppX).", Engine.Logger.ErrorEvents [0].Message, "#1"); @@ -61,12 +61,12 @@ public void CreateIpa () AppBundlePath = mtouchPaths.AppBundlePath; - Engine.GlobalProperties.SetProperty ("Platform", Platform); - Engine.GlobalProperties.SetProperty ("BuildIpa", "true"); - Engine.GlobalProperties.SetProperty ("IpaIncludeArtwork", "true"); - Engine.GlobalProperties.SetProperty ("CodesignProvision", "Automatic"); // Provisioning profile - Engine.GlobalProperties.SetProperty ("CodesignKey", "iPhone Developer"); - Engine.GlobalProperties.SetProperty ("Configuration", configuration); + Engine.ProjectCollection.SetGlobalProperty ("Platform", Platform); + Engine.ProjectCollection.SetGlobalProperty ("BuildIpa", "true"); + Engine.ProjectCollection.SetGlobalProperty ("IpaIncludeArtwork", "true"); + Engine.ProjectCollection.SetGlobalProperty ("CodesignProvision", "Automatic"); // Provisioning profile + Engine.ProjectCollection.SetGlobalProperty ("CodesignKey", "iPhone Developer"); + Engine.ProjectCollection.SetGlobalProperty ("Configuration", configuration); RunTarget (proj, "Clean"); Assert.IsFalse (Directory.Exists (AppBundlePath), "{1}: App bundle exists after cleanup: {0} ", AppBundlePath, Platform); @@ -103,7 +103,7 @@ public void CreateIpa () string wkPath = "WatchKitSupport/WK"; Assert.Contains (wkPath, lines, wkPath + " does not exist"); - var ipaIncludeArtwork = proj.GetEvaluatedProperty ("IpaIncludeArtwork"); + var ipaIncludeArtwork = proj.GetPropertyValue ("IpaIncludeArtwork"); Assert.IsTrue (output.Contains ("iTunesMetadata.plist"), string.Format ("The ipa should contain at least one iTunesMetadata.plist file if we are using an AppStore config and IpaIncludeArtwork is true. IpaIncludeArtwork: {0}", ipaIncludeArtwork)); RunTarget (proj, "Clean"); diff --git a/msbuild/tests/Xamarin.iOS.Tasks.Tests/ProjectsTests/NativeReferences.cs b/msbuild/tests/Xamarin.iOS.Tasks.Tests/ProjectsTests/NativeReferences.cs index c74924a3b190..13dbd4ca404b 100644 --- a/msbuild/tests/Xamarin.iOS.Tasks.Tests/ProjectsTests/NativeReferences.cs +++ b/msbuild/tests/Xamarin.iOS.Tasks.Tests/ProjectsTests/NativeReferences.cs @@ -1,5 +1,6 @@ using System; using System.IO; +using System.Linq; using NUnit.Framework; namespace Xamarin.iOS.Tasks { @@ -16,12 +17,12 @@ public void BasicTest () { var mtouchPaths = SetupProjectPaths ("MyTabbedApplication", "../", true, Platform); - Engine.GlobalProperties.SetProperty ("Platform", Platform); + Engine.ProjectCollection.SetGlobalProperty ("Platform", Platform); var proj = SetupProject (Engine, mtouchPaths.ProjectCSProjPath); - var nr = proj.AddNewItem ("NativeReference", Path.Combine (".", "..", "..", "..", "tests", "test-libraries", ".libs", "ios", "XTest.framework")); - nr.SetMetadata ("IsCxx", "False"); - nr.SetMetadata ("Kind", "Framework"); + var nr = proj.AddItem ("NativeReference", Path.Combine (".", "..", "..", "..", "tests", "test-libraries", ".libs", "ios", "XTest.framework")).First (); + nr.SetMetadataValue ("IsCxx", "False"); + nr.SetMetadataValue ("Kind", "Framework"); AppBundlePath = mtouchPaths.AppBundlePath; @@ -40,14 +41,14 @@ public void WithIncrementalBuilds () var mtouchPaths = SetupProjectPaths ("MyiOSAppWithBinding", "../", true, Platform); - Engine.GlobalProperties.SetProperty ("Platform", Platform); + Engine.ProjectCollection.SetGlobalProperty ("Platform", Platform); var proj = SetupProject (Engine, mtouchPaths.ProjectCSProjPath); - proj.GlobalProperties.SetProperty ("MtouchFastDev", "true"); - proj.GlobalProperties.SetProperty ("MtouchExtraArgs", "-vvvv"); - proj.GlobalProperties.SetProperty ("MtouchArch", "ARM64"); // only use ARM64 to speed up the build. - proj.GlobalProperties.SetProperty ("MtouchLink", "Full"); // also to speed up the build. + proj.SetGlobalProperty ("MtouchFastDev", "true"); + proj.SetGlobalProperty ("MtouchExtraArgs", "-vvvv"); + proj.SetGlobalProperty ("MtouchArch", "ARM64"); // only use ARM64 to speed up the build. + proj.SetGlobalProperty ("MtouchLink", "Full"); // also to speed up the build. AppBundlePath = mtouchPaths.AppBundlePath; diff --git a/msbuild/tests/Xamarin.iOS.Tasks.Tests/ProjectsTests/ProjectTest.cs b/msbuild/tests/Xamarin.iOS.Tasks.Tests/ProjectsTests/ProjectTest.cs index dc401e2840b8..00609a9cc2c2 100644 --- a/msbuild/tests/Xamarin.iOS.Tasks.Tests/ProjectsTests/ProjectTest.cs +++ b/msbuild/tests/Xamarin.iOS.Tasks.Tests/ProjectsTests/ProjectTest.cs @@ -42,8 +42,8 @@ public string BuildProject (string appName, string platform, string config, int var proj = SetupProject (Engine, csproj); AppBundlePath = mtouchPaths ["app_bundlepath"]; - Engine.GlobalProperties.SetProperty("Platform", platform); - Engine.GlobalProperties.SetProperty("Configuration", config); + Engine.ProjectCollection.SetGlobalProperty("Platform", platform); + Engine.ProjectCollection.SetGlobalProperty("Configuration", config); if (clean) { RunTarget (proj, "Clean"); diff --git a/msbuild/tests/Xamarin.iOS.Tasks.Tests/TargetTests/TargetTests.cs b/msbuild/tests/Xamarin.iOS.Tasks.Tests/TargetTests/TargetTests.cs index 39cabef0af1e..f22df5697988 100644 --- a/msbuild/tests/Xamarin.iOS.Tasks.Tests/TargetTests/TargetTests.cs +++ b/msbuild/tests/Xamarin.iOS.Tasks.Tests/TargetTests/TargetTests.cs @@ -1,3 +1,4 @@ +using System; using System.Collections.Generic; using System.IO; using System.Linq; @@ -5,6 +6,7 @@ using Mono.Cecil; using NUnit.Framework; using Xamarin.MacDev; +using Microsoft.Build.Execution; namespace Xamarin.iOS.Tasks { @@ -135,30 +137,30 @@ static bool BundleResourceExists (string path, ref int extra) [Test] public void GetReferencedAssemblies_Executable () { - RunTarget (MonoTouchProject, TargetName.ResolveReferences); - var references = MonoTouchProject.GetEvaluatedItemsByName ("ReferencePath").ToArray (); + RunTargetOnInstance (MonoTouchProjectInstance, TargetName.ResolveReferences); + var references = MonoTouchProjectInstance.GetItems ("ReferencePath").ToArray (); Assert.AreEqual (6, references.Length, "#1"); - Assert.IsTrue (references.Any (t => t.Include.Contains ("MyLibrary")), "#2"); - Assert.IsTrue (references.Any (t => t.Include.Contains ("System")), "#3a"); - Assert.IsTrue (references.Any (t => t.Include.Contains ("System.Xml")), "#3b"); - Assert.IsTrue (references.Any (t => t.Include.Contains ("System.Core")), "#3c"); - Assert.IsTrue (references.Any (t => t.Include.Contains ("mscorlib")), "#3d"); - Assert.IsTrue (references.Any (t => t.Include.Contains ("Xamarin.iOS")), "#3e"); + Assert.IsTrue (references.Any (t => t.EvaluatedInclude.Contains ("MyLibrary")), "#2"); + Assert.IsTrue (references.Any (t => t.EvaluatedInclude.Contains ("System")), "#3a"); + Assert.IsTrue (references.Any (t => t.EvaluatedInclude.Contains ("System.Xml")), "#3b"); + Assert.IsTrue (references.Any (t => t.EvaluatedInclude.Contains ("System.Core")), "#3c"); + Assert.IsTrue (references.Any (t => t.EvaluatedInclude.Contains ("mscorlib")), "#3d"); + Assert.IsTrue (references.Any (t => t.EvaluatedInclude.Contains ("Xamarin.iOS")), "#3e"); } [Test] public void GetReferencedAssemblies_Library () { - RunTarget (LibraryProject, TargetName.ResolveReferences); - var references = LibraryProject.GetEvaluatedItemsByName ("ReferencePath").ToArray (); + RunTargetOnInstance (LibraryProjectInstance, TargetName.ResolveReferences); + var references = LibraryProjectInstance.GetItems ("ReferencePath").ToArray (); Assert.AreEqual (5, references.Length, "#1"); - Assert.IsTrue (references.Any (t => t.Include.Contains ("System")), "#2a"); - Assert.IsTrue (references.Any (t => t.Include.Contains ("System.Xml")), "#2b"); - Assert.IsTrue (references.Any (t => t.Include.Contains ("System.Core")), "#2c"); - Assert.IsTrue (references.Any (t => t.Include.Contains ("mscorlib")), "#2d"); - Assert.IsTrue (references.Any (t => t.Include.Contains ("Xamarin.iOS")), "#2e"); + Assert.IsTrue (references.Any (t => t.EvaluatedInclude.Contains ("System")), "#2a"); + Assert.IsTrue (references.Any (t => t.EvaluatedInclude.Contains ("System.Xml")), "#2b"); + Assert.IsTrue (references.Any (t => t.EvaluatedInclude.Contains ("System.Core")), "#2c"); + Assert.IsTrue (references.Any (t => t.EvaluatedInclude.Contains ("mscorlib")), "#2d"); + Assert.IsTrue (references.Any (t => t.EvaluatedInclude.Contains ("Xamarin.iOS")), "#2e"); } [Test] @@ -167,7 +169,7 @@ public void BuildExecutable () var expectedFiles = ExpectedExecutableFiles; int extra = 0; - RunTarget (MonoTouchProject, TargetName.Build); + RunTargetOnInstance (MonoTouchProjectInstance, TargetName.Build); Assert.IsTrue (Directory.Exists (AppBundlePath), "#1"); foreach (var file in expectedFiles) @@ -187,7 +189,7 @@ public void BuildExecutable () [Test] public void CopyContentToBundle () { - RunTarget (MonoTouchProject, TargetName.CopyResourcesToBundle); + RunTargetOnInstance (MonoTouchProjectInstance, TargetName.CopyResourcesToBundle); foreach (var v in ExpectedExecutableBundleResources) Assert.IsTrue (File.Exists (v) || Directory.Exists (v), string.Format ("{0} was not copied to the bundle", Path.GetFullPath (v))); @@ -196,12 +198,12 @@ public void CopyContentToBundle () [Test] public void CleanExecutable () { - RunTarget (MonoTouchProject, TargetName.Clean); + RunTargetOnInstance (MonoTouchProjectInstance, TargetName.Clean); Assert.IsFalse (Directory.Exists (MonoTouchProjectBinPath), "#1a"); Assert.IsFalse (Directory.Exists (MonoTouchProjectObjPath), "#1b"); - RunTarget (MonoTouchProject, TargetName.Build); - RunTarget (MonoTouchProject, TargetName.Clean); + RunTargetOnInstance (MonoTouchProjectInstance, TargetName.Build); + RunTargetOnInstance (MonoTouchProjectInstance, TargetName.Clean); Assert.IsEmpty (Directory.GetDirectories (MonoTouchProjectBinPath, "*.dSYM", SearchOption.AllDirectories), "#2a"); Assert.IsEmpty (Directory.GetFiles (MonoTouchProjectBinPath, "*.*", SearchOption.AllDirectories), "#2b"); Assert.IsFalse (Directory.Exists (MonoTouchProjectObjPath), "#2c"); @@ -210,12 +212,12 @@ public void CleanExecutable () [Test] public void CleanLibrary () { - RunTarget (LibraryProject, TargetName.Clean); + RunTargetOnInstance (LibraryProjectInstance, TargetName.Clean); Assert.IsFalse (Directory.Exists (LibraryProjectBinPath), "#1a"); Assert.IsFalse (Directory.Exists (LibraryProjectObjPath), "#1b"); - RunTarget (LibraryProject, TargetName.Build); - RunTarget (LibraryProject, TargetName.Clean); + RunTargetOnInstance (LibraryProjectInstance, TargetName.Build); + RunTargetOnInstance (LibraryProjectInstance, TargetName.Clean); Assert.IsEmpty (Directory.GetFiles (LibraryProjectBinPath, "*.*", SearchOption.AllDirectories), "#2a"); Assert.IsFalse (Directory.Exists (LibraryProjectObjPath), "#2b"); } @@ -223,7 +225,7 @@ public void CleanLibrary () [Test] public void CompileInterfaceDefinitions_Library () { - RunTarget (LibraryProject, TargetName.CompileInterfaceDefinitions); + RunTargetOnInstance (LibraryProjectInstance, TargetName.CompileInterfaceDefinitions); Assert.IsNotEmpty (Directory.GetFiles (LibraryProjectObjPath, "*.*", SearchOption.AllDirectories), "#1"); } @@ -236,14 +238,14 @@ public void OptimizePngs_DefaultValue () [Test] public void OptimizePngs_True () { - MonoTouchProject.AddNewPropertyGroup (true).AddNewProperty ("OptimizePNGs", "True"); + MonoTouchProjectInstance.SetProperty ("OptimizePNGs", "True"); OptimizePngs_Core (true); } [Test] public void OptimizePngs_False () { - MonoTouchProject.AddNewPropertyGroup (true).AddNewProperty ("OptimizePNGs", "False"); + MonoTouchProjectInstance.SetProperty ("OptimizePNGs", "False"); OptimizePngs_Core (false); } @@ -252,7 +254,7 @@ void OptimizePngs_Core (bool shouldBeDifferent) var originalFile = Path.Combine (MonoTouchProjectPath, "Resources", "image.png"); var optimisedFile = Path.Combine (AppBundlePath, "image.png"); - RunTarget (MonoTouchProject, TargetName.Build); + RunTargetOnInstance (MonoTouchProjectInstance, TargetName.Build); Assert.IsTrue (File.Exists (optimisedFile), "#1"); if (shouldBeDifferent) @@ -355,8 +357,8 @@ public void BuildLibrary () [Test] public void BuildLibrary_NoInterfaceDefinitions () { - foreach (var item in LibraryProject.GetEvaluatedItemsByName ("InterfaceDefinition")) - LibraryProject.RemoveItem ((Microsoft.Build.BuildEngine.BuildItem)item); + LibraryProject.RemoveItems (LibraryProject.GetItems ("InterfaceDefinition")); + LibraryProjectInstance = LibraryProject.CreateProjectInstance (); BuildLibraryCore (ExpectedLibraryEmbeddedResources.Where (s => !s.Contains ("storyboardc")).ToArray ()); } @@ -364,9 +366,9 @@ public void BuildLibrary_NoInterfaceDefinitions () void BuildLibraryCore (string[] expectedResources) { var library = Path.Combine (LibraryProjectBinPath, "MyLibrary.dll"); - RunTarget (LibraryProject, TargetName.Build); + RunTargetOnInstance (LibraryProjectInstance, TargetName.Build); - Assert.IsTrue (string.IsNullOrEmpty (LibraryProject.GetEvaluatedProperty ("AppBundleDir")), "#1"); + Assert.IsTrue (string.IsNullOrEmpty (LibraryProjectInstance.GetPropertyValue ("AppBundleDir")), "#1"); var entries = Directory.GetFileSystemEntries (LibraryProjectBinPath); Assert.AreEqual (2, entries.Length, "#1"); Assert.IsTrue (File.Exists (library), "#2"); @@ -384,29 +386,29 @@ void BuildLibraryCore (string[] expectedResources) public void GenerateBundleName_ExecutableProject () { // Initially the AssemblyName is set and there is no app bundle dir - Assert.AreEqual ("MySingleView", MonoTouchProject.GetEvaluatedProperty ("AssemblyName"), "#1"); - Assert.IsTrue (string.IsNullOrEmpty (MonoTouchProject.GetEvaluatedProperty ("AppBundleDir")), "#2"); + Assert.AreEqual ("MySingleView", MonoTouchProjectInstance.GetPropertyValue ("AssemblyName"), "#1"); + Assert.IsTrue (string.IsNullOrEmpty (MonoTouchProjectInstance.GetPropertyValue ("AppBundleDir")), "#2"); // Now we should have an AppBundleDir - RunTarget (MonoTouchProject, TargetName.GenerateBundleName); - Assert.AreEqual ("bin/iPhoneSimulator/Debug/MySingleView.app", MonoTouchProject.GetEvaluatedProperty ("AppBundleDir"), "#3"); + RunTargetOnInstance (MonoTouchProjectInstance, TargetName.GenerateBundleName); + Assert.AreEqual ("bin/iPhoneSimulator/Debug/MySingleView.app", MonoTouchProjectInstance.GetPropertyValue ("AppBundleDir"), "#3"); } [Test] public void PackLibraryResources_ExecutableProject () { - RunTarget (MonoTouchProject, TargetName.PackLibraryResources); - var embeddedResources = MonoTouchProject.GetEvaluatedItemsByName ("EmbeddedResource").ToArray (); + RunTargetOnInstance (MonoTouchProjectInstance, TargetName.PackLibraryResources); + var embeddedResources = MonoTouchProjectInstance.GetItems ("EmbeddedResource").ToArray (); Assert.AreEqual (2, embeddedResources.Length, "#1"); - Assert.IsTrue (embeddedResources.Any (i => i.FinalItemSpec == "LinkedEmbeddedResource.txt"), "#1"); - Assert.IsTrue (embeddedResources.Any (i => i.FinalItemSpec == Path.Combine ("Folder", "EmbeddedResource.txt")), "#2"); + Assert.IsTrue (embeddedResources.Any (i => i.EvaluatedInclude == "LinkedEmbeddedResource.txt"), "#1"); + Assert.IsTrue (embeddedResources.Any (i => i.EvaluatedInclude == Path.Combine ("Folder", "EmbeddedResource.txt")), "#2"); } [Test] public void PackLibraryResources_LibraryProject () { - RunTarget (LibraryProject, TargetName.PackLibraryResources); - var embeddedResources = LibraryProject.GetEvaluatedItemsByName ("EmbeddedResource").ToArray (); + RunTargetOnInstance (LibraryProjectInstance, TargetName.PackLibraryResources); + var embeddedResources = LibraryProjectInstance.GetItems ("EmbeddedResource").ToArray (); Assert.AreEqual (13, embeddedResources.Length, "#1"); } @@ -414,8 +416,8 @@ public void PackLibraryResources_LibraryProject () public void UnpackLibraryResources_ExecutableProject () { // We unpack 4 embedded resources from the library project into BundleResources - RunTarget (MonoTouchProject, TargetName.Build); - var bundleResources = MonoTouchProject.GetEvaluatedItemsByName ("_BundleResourceWithLogicalName").ToArray (); + RunTargetOnInstance (MonoTouchProjectInstance, TargetName.Build); + var bundleResources = MonoTouchProjectInstance.GetItems ("_BundleResourceWithLogicalName").ToArray (); Assert.IsTrue (bundleResources.Length >= 33, "#1"); } @@ -423,8 +425,8 @@ public void UnpackLibraryResources_ExecutableProject () public void UnpackLibraryResources_LibraryProject () { // We should not unpack any EmbeddedResources into BundleResources - RunTarget (LibraryProject, TargetName.Build); - var bundleResources = LibraryProject.GetEvaluatedItemsByName ("_BundleResourceWithLogicalName").ToArray (); + RunTargetOnInstance (LibraryProjectInstance, TargetName.Build); + var bundleResources = LibraryProjectInstance.GetItems ("_BundleResourceWithLogicalName").ToArray (); Assert.AreEqual (11, bundleResources.Length, "#1"); } @@ -439,35 +441,35 @@ public void BundleResources () plist.SetMinimumOSVersion ("7.0"); plist.Save (path, true); - RunTarget (MonoTouchProject, TargetName.CollectBundleResources); - - var bundleItems = MonoTouchProject.GetEvaluatedItemsByName ("_BundleResourceWithLogicalName").ToArray (); - Assert.IsTrue (bundleItems.Any (i => i.FinalItemSpec == Path.Combine ("Folder", "BundleResource.txt") && i.GetMetadata ("LogicalName") == "Folder/BundleResource.txt"), "#1"); - Assert.IsTrue (bundleItems.Any (i => i.FinalItemSpec == Path.Combine ("Folder", "Content.txt") && i.GetMetadata ("LogicalName") == "Folder/Content.txt"), "#2"); - Assert.IsTrue (bundleItems.Any (i => i.FinalItemSpec == "LinkedBundleResource.txt" && i.GetMetadata ("LogicalName") == "Folder/LinkedBundleResource.txt"), "#3"); - Assert.IsTrue (bundleItems.Any (i => i.FinalItemSpec == "LinkedContent.txt" && i.GetMetadata ("LogicalName") == "Folder/LinkedContent.txt"), "#4"); - Assert.IsTrue (bundleItems.Any (i => i.FinalItemSpec == Path.Combine (actool, "AppIcons29x29.png") && i.GetMetadata ("LogicalName") == "AppIcons29x29.png"), "#5"); - Assert.IsTrue (bundleItems.Any (i => i.FinalItemSpec == Path.Combine (actool, "AppIcons29x29@2x.png") && i.GetMetadata ("LogicalName") == "AppIcons29x29@2x.png"), "#6"); - Assert.IsTrue (bundleItems.Any (i => i.FinalItemSpec == Path.Combine (actool, "AppIcons40x40@2x.png") && i.GetMetadata ("LogicalName") == "AppIcons40x40@2x.png"), "#7"); - Assert.IsTrue (bundleItems.Any (i => i.FinalItemSpec == Path.Combine (actool, "AppIcons57x57.png") && i.GetMetadata ("LogicalName") == "AppIcons57x57.png"), "#8"); - Assert.IsTrue (bundleItems.Any (i => i.FinalItemSpec == Path.Combine (actool, "AppIcons57x57@2x.png") && i.GetMetadata ("LogicalName") == "AppIcons57x57@2x.png"), "#9"); - Assert.IsTrue (bundleItems.Any (i => i.FinalItemSpec == Path.Combine (actool, "AppIcons60x60@2x.png") && i.GetMetadata ("LogicalName") == "AppIcons60x60@2x.png"), "#10"); - Assert.IsTrue (bundleItems.Any (i => i.FinalItemSpec == Path.Combine (actool, "LaunchImage-568h@2x.png") && i.GetMetadata ("LogicalName") == "LaunchImage-568h@2x.png"), "#11"); - Assert.IsTrue (bundleItems.Any (i => i.FinalItemSpec == Path.Combine (actool, "LaunchImage.png") && i.GetMetadata ("LogicalName") == "LaunchImage.png"), "#12"); - Assert.IsTrue (bundleItems.Any (i => i.FinalItemSpec == Path.Combine (actool, "LaunchImage@2x.png") && i.GetMetadata ("LogicalName") == "LaunchImage@2x.png"), "#13"); - Assert.IsTrue (bundleItems.Any (i => i.FinalItemSpec == Path.Combine (ibtool, "MainStoryboard.storyboardc", "1-view-2.nib") && i.GetMetadata ("LogicalName") == "MainStoryboard.storyboardc/1-view-2.nib"), "#14"); - Assert.IsTrue (bundleItems.Any (i => i.FinalItemSpec == Path.Combine (ibtool, "MainStoryboard.storyboardc", "Info.plist") && i.GetMetadata ("LogicalName") == "MainStoryboard.storyboardc/Info.plist"), "#15"); - Assert.IsTrue (bundleItems.Any (i => i.FinalItemSpec == Path.Combine (ibtool, "MainStoryboard.storyboardc", "UIViewController-1.nib") && i.GetMetadata ("LogicalName") == "MainStoryboard.storyboardc/UIViewController-1.nib"), "#16"); + RunTargetOnInstance (MonoTouchProjectInstance, TargetName.CollectBundleResources); + + var bundleItems = MonoTouchProjectInstance.GetItems ("_BundleResourceWithLogicalName").ToArray (); + Assert.IsTrue (bundleItems.Any (i => i.EvaluatedInclude == Path.Combine ("Folder", "BundleResource.txt") && i.GetMetadataValue ("LogicalName") == "Folder/BundleResource.txt"), "#1"); + Assert.IsTrue (bundleItems.Any (i => i.EvaluatedInclude == Path.Combine ("Folder", "Content.txt") && i.GetMetadataValue ("LogicalName") == "Folder/Content.txt"), "#2"); + Assert.IsTrue (bundleItems.Any (i => i.EvaluatedInclude == "LinkedBundleResource.txt" && i.GetMetadataValue ("LogicalName") == "Folder/LinkedBundleResource.txt"), "#3"); + Assert.IsTrue (bundleItems.Any (i => i.EvaluatedInclude == "LinkedContent.txt" && i.GetMetadataValue ("LogicalName") == "Folder/LinkedContent.txt"), "#4"); + Assert.IsTrue (bundleItems.Any (i => i.EvaluatedInclude == Path.Combine (actool, "AppIcons29x29.png") && i.GetMetadataValue ("LogicalName") == "AppIcons29x29.png"), "#5"); + Assert.IsTrue (bundleItems.Any (i => i.EvaluatedInclude == Path.Combine (actool, "AppIcons29x29@2x.png") && i.GetMetadataValue ("LogicalName") == "AppIcons29x29@2x.png"), "#6"); + Assert.IsTrue (bundleItems.Any (i => i.EvaluatedInclude == Path.Combine (actool, "AppIcons40x40@2x.png") && i.GetMetadataValue ("LogicalName") == "AppIcons40x40@2x.png"), "#7"); + Assert.IsTrue (bundleItems.Any (i => i.EvaluatedInclude == Path.Combine (actool, "AppIcons57x57.png") && i.GetMetadataValue ("LogicalName") == "AppIcons57x57.png"), "#8"); + Assert.IsTrue (bundleItems.Any (i => i.EvaluatedInclude == Path.Combine (actool, "AppIcons57x57@2x.png") && i.GetMetadataValue ("LogicalName") == "AppIcons57x57@2x.png"), "#9"); + Assert.IsTrue (bundleItems.Any (i => i.EvaluatedInclude == Path.Combine (actool, "AppIcons60x60@2x.png") && i.GetMetadataValue ("LogicalName") == "AppIcons60x60@2x.png"), "#10"); + Assert.IsTrue (bundleItems.Any (i => i.EvaluatedInclude == Path.Combine (actool, "LaunchImage-568h@2x.png") && i.GetMetadataValue ("LogicalName") == "LaunchImage-568h@2x.png"), "#11"); + Assert.IsTrue (bundleItems.Any (i => i.EvaluatedInclude == Path.Combine (actool, "LaunchImage.png") && i.GetMetadataValue ("LogicalName") == "LaunchImage.png"), "#12"); + Assert.IsTrue (bundleItems.Any (i => i.EvaluatedInclude == Path.Combine (actool, "LaunchImage@2x.png") && i.GetMetadataValue ("LogicalName") == "LaunchImage@2x.png"), "#13"); + Assert.IsTrue (bundleItems.Any (i => i.EvaluatedInclude == Path.Combine (ibtool, "MainStoryboard.storyboardc", "1-view-2.nib") && i.GetMetadataValue ("LogicalName") == "MainStoryboard.storyboardc/1-view-2.nib"), "#14"); + Assert.IsTrue (bundleItems.Any (i => i.EvaluatedInclude == Path.Combine (ibtool, "MainStoryboard.storyboardc", "Info.plist") && i.GetMetadataValue ("LogicalName") == "MainStoryboard.storyboardc/Info.plist"), "#15"); + Assert.IsTrue (bundleItems.Any (i => i.EvaluatedInclude == Path.Combine (ibtool, "MainStoryboard.storyboardc", "UIViewController-1.nib") && i.GetMetadataValue ("LogicalName") == "MainStoryboard.storyboardc/UIViewController-1.nib"), "#16"); if (bundleItems.Length > ExpectedExecutableBundleResources.Length) { - Assert.IsTrue (bundleItems.Any (i => i.FinalItemSpec == Path.Combine (ibtool, "en.lproj", "TranslatedView.nib", "runtime.nib") && i.GetMetadata ("LogicalName") == "en.lproj/TranslatedView.nib/runtime.nib"), "#17"); - Assert.IsTrue (bundleItems.Any (i => i.FinalItemSpec == Path.Combine (ibtool, "FolderView.nib", "runtime.nib") && i.GetMetadata ("LogicalName") == "FolderView.nib/runtime.nib"), "#18"); - Assert.IsTrue (bundleItems.Any (i => i.FinalItemSpec == Path.Combine (ibtool, "iPhoneView.nib", "runtime.nib") && i.GetMetadata ("LogicalName") == "iPhoneView.nib/runtime.nib"), "#19"); + Assert.IsTrue (bundleItems.Any (i => i.EvaluatedInclude == Path.Combine (ibtool, "en.lproj", "TranslatedView.nib", "runtime.nib") && i.GetMetadataValue ("LogicalName") == "en.lproj/TranslatedView.nib/runtime.nib"), "#17"); + Assert.IsTrue (bundleItems.Any (i => i.EvaluatedInclude == Path.Combine (ibtool, "FolderView.nib", "runtime.nib") && i.GetMetadataValue ("LogicalName") == "FolderView.nib/runtime.nib"), "#18"); + Assert.IsTrue (bundleItems.Any (i => i.EvaluatedInclude == Path.Combine (ibtool, "iPhoneView.nib", "runtime.nib") && i.GetMetadataValue ("LogicalName") == "iPhoneView.nib/runtime.nib"), "#19"); } else { - Assert.IsTrue (bundleItems.Any (i => i.FinalItemSpec == Path.Combine (ibtool, "en.lproj", "TranslatedView.nib") && i.GetMetadata ("LogicalName") == "en.lproj/TranslatedView.nib"), "#17"); - Assert.IsTrue (bundleItems.Any (i => i.FinalItemSpec == Path.Combine (ibtool, "FolderView.nib") && i.GetMetadata ("LogicalName") == "FolderView.nib"), "#18"); - Assert.IsTrue (bundleItems.Any (i => i.FinalItemSpec == Path.Combine (ibtool, "iPhoneView.nib") && i.GetMetadata ("LogicalName") == "iPhoneView.nib"), "#19"); + Assert.IsTrue (bundleItems.Any (i => i.EvaluatedInclude == Path.Combine (ibtool, "en.lproj", "TranslatedView.nib") && i.GetMetadataValue ("LogicalName") == "en.lproj/TranslatedView.nib"), "#17"); + Assert.IsTrue (bundleItems.Any (i => i.EvaluatedInclude == Path.Combine (ibtool, "FolderView.nib") && i.GetMetadataValue ("LogicalName") == "FolderView.nib"), "#18"); + Assert.IsTrue (bundleItems.Any (i => i.EvaluatedInclude == Path.Combine (ibtool, "iPhoneView.nib") && i.GetMetadataValue ("LogicalName") == "iPhoneView.nib"), "#19"); } - Assert.IsTrue (bundleItems.Any (i => i.FinalItemSpec == Path.Combine ("Resources", "image.png") && i.GetMetadata ("LogicalName") == "image.png"), "#20"); + Assert.IsTrue (bundleItems.Any (i => i.EvaluatedInclude == Path.Combine ("Resources", "image.png") && i.GetMetadataValue ("LogicalName") == "image.png"), "#20"); } [Test (Description = "Xambug #39137")] @@ -484,12 +486,14 @@ public void AddAppIcon_NoClean() plist.SetMinimumOSVersion ("7.0"); plist.Save (path, true); - RunTarget (project, TargetName.CompileImageAssets); + var projectInstance = project.CreateProjectInstance (); + RunTargetOnInstance (projectInstance, TargetName.CompileImageAssets, 0); - var bundleItemsNoAppIcon = project.GetEvaluatedItemsByName ("_BundleResourceWithLogicalName").ToArray (); - Assert.IsFalse (bundleItemsNoAppIcon.Any (i => i.FinalItemSpec == Path.Combine (actool, "AppIcons60x60@2x.png") && i.GetMetadata ("LogicalName") == "AppIcons60x60@2x.png"), "#1"); + var bundleItemsNoAppIcon = projectInstance.GetItems ("_BundleResourceWithLogicalName").ToArray (); + Assert.IsFalse (bundleItemsNoAppIcon.Any (i => i.EvaluatedInclude == Path.Combine (actool, "AppIcons60x60@2x.png") && i.GetMetadataValue ("LogicalName") == "AppIcons60x60@2x.png"), "#1"); project = SetupProject (Engine, MonoTouchProjectCSProjPath); + projectInstance = project.CreateProjectInstance (); // Put a thread.sleep so that we get noticeable timestamps. Thread.Sleep (1000); @@ -499,10 +503,10 @@ public void AddAppIcon_NoClean() // Re-run the task with app icon set this time and no clean. // The task should be aware the app icon is now being used. - RunTarget (project, TargetName.CompileImageAssets); + RunTargetOnInstance (projectInstance, TargetName.CompileImageAssets, 0); - var bundleItemsWithAppIcon = project.GetEvaluatedItemsByName ("_BundleResourceWithLogicalName").ToArray (); - Assert.IsTrue (bundleItemsWithAppIcon.Any (i => i.FinalItemSpec == Path.Combine (actool, "AppIcons60x60@2x.png") && i.GetMetadata ("LogicalName") == "AppIcons60x60@2x.png"), "#2"); + var bundleItemsWithAppIcon = projectInstance.GetItems ("_BundleResourceWithLogicalName").ToArray (); + Assert.IsTrue (bundleItemsWithAppIcon.Any (i => i.EvaluatedInclude == Path.Combine (actool, "AppIcons60x60@2x.png") && i.GetMetadataValue ("LogicalName") == "AppIcons60x60@2x.png"), "#2"); } [Test (Description = "Xambug #16331")] @@ -512,11 +516,11 @@ public void Disappearing_Bundle_Resource () string resourceGone = resource + ".disabled"; try { File.Move (resource, resourceGone); - RunTarget_WithErrors (MonoTouchProject, "_CollectBundleResources"); - var bundleItems = MonoTouchProject.GetEvaluatedItemsByName ("_BundleResourceWithLogicalName").ToArray (); + RunTarget_WithErrors (MonoTouchProjectInstance, "_CollectBundleResources"); + var bundleItems = MonoTouchProjectInstance.GetItems ("_BundleResourceWithLogicalName").ToArray (); Assert.IsNotNull (bundleItems, "#1"); Assert.IsTrue (bundleItems.Length >= 17, "#2"); - Assert.IsFalse (bundleItems.Any (i => i.FinalItemSpec == Path.Combine ("Folder", "BundleResource.txt")), "#3"); + Assert.IsFalse (bundleItems.Any (i => i.EvaluatedInclude == Path.Combine ("Folder", "BundleResource.txt")), "#3"); } finally { File.Move (resourceGone, resource); } @@ -529,11 +533,11 @@ public void Disappearing_Content () string resourceGone = resource + ".disabled"; try { File.Move (resource, resourceGone); - RunTarget_WithErrors (MonoTouchProject, "_CollectBundleResources"); - var bundleItems = MonoTouchProject.GetEvaluatedItemsByName ("_BundleResourceWithLogicalName").ToArray (); + RunTarget_WithErrors (MonoTouchProjectInstance, "_CollectBundleResources"); + var bundleItems = MonoTouchProjectInstance.GetItems ("_BundleResourceWithLogicalName").ToArray (); Assert.IsNotNull (bundleItems, "#1"); Assert.IsTrue (bundleItems.Length >= 17, "#2"); - Assert.IsFalse (bundleItems.Any (i => i.FinalItemSpec == Path.Combine ("Folder", "Content.txt")), "#3"); + Assert.IsFalse (bundleItems.Any (i => i.EvaluatedInclude == Path.Combine ("Folder", "Content.txt")), "#3"); } finally { File.Move (resourceGone, resource); } @@ -542,29 +546,31 @@ public void Disappearing_Content () [Test] public void DetectAppManifest_ExecutableProject () { - RunTarget (MonoTouchProject, TargetName.DetectAppManifest); - Assert.IsNotNull (MonoTouchProject.GetEvaluatedProperty ("_AppManifest"), "#1"); + RunTargetOnInstance (MonoTouchProjectInstance, TargetName.DetectAppManifest); + Assert.IsFalse (string.IsNullOrEmpty(MonoTouchProjectInstance.GetPropertyValue ("_AppManifest")), "#1"); } [Test] public void DetectAppManifest_ExecutableProject_NoPList () { RemoveItemsByName (MonoTouchProject, "None"); - RunTarget_WithErrors (MonoTouchProject, TargetName.DetectAppManifest); - Assert.IsNull (MonoTouchProject.GetEvaluatedProperty ("_AppManifest"), "#1"); + MonoTouchProjectInstance = MonoTouchProject.CreateProjectInstance (); + + RunTarget_WithErrors (MonoTouchProjectInstance, TargetName.DetectAppManifest); + Assert.IsNull (MonoTouchProjectInstance.GetPropertyValue ("_AppManifest"), "#1"); } [Test] public void DetectAppManifest_ExecutableProject_TwoPLists () { RemoveItemsByName (MonoTouchProject, "None"); + MonoTouchProjectInstance = MonoTouchProject.CreateProjectInstance (); - var group = MonoTouchProject.AddNewItemGroup (); - group.AddNewItem ("None", "Fake/Info.plist"); - group.AddNewItem ("None", "Info.plist"); + MonoTouchProjectInstance.AddItem ("None", "Fake/Info.plist"); + MonoTouchProjectInstance.AddItem ("None", "Info.plist"); - RunTarget (MonoTouchProject, TargetName.DetectAppManifest); - Assert.AreEqual ("Info.plist", MonoTouchProject.GetEvaluatedProperty ("_AppManifest"), "#1"); + RunTargetOnInstance (MonoTouchProjectInstance, TargetName.DetectAppManifest); + Assert.AreEqual ("Info.plist", MonoTouchProjectInstance.GetPropertyValue ("_AppManifest"), "#1"); } [Test] @@ -573,12 +579,13 @@ public void DetectAppManifest_ExecutableProject_LinkedPList () string linkedPlist = CreateTempFile (Path.Combine (TempDir, "Linked.plist")); RemoveItemsByName (MonoTouchProject, "None"); - var group = MonoTouchProject.AddNewItemGroup (); - group.AddNewItem ("None", linkedPlist); - group.ToArray ().Last ().SetMetadata ("Link", "Info.plist"); + MonoTouchProjectInstance = MonoTouchProject.CreateProjectInstance (); + + var item = MonoTouchProjectInstance.AddItem ("None", linkedPlist); + item.SetMetadata ("Link", "Info.plist"); - RunTarget (MonoTouchProject, TargetName.DetectAppManifest); - Assert.AreEqual (linkedPlist, MonoTouchProject.GetEvaluatedProperty ("_AppManifest"), "#1"); + RunTargetOnInstance (MonoTouchProjectInstance, TargetName.DetectAppManifest); + Assert.AreEqual (linkedPlist, MonoTouchProjectInstance.GetPropertyValue ("_AppManifest"), "#1"); } [Test] @@ -587,20 +594,20 @@ public void DetectAppManifest_ExecutableProject_LogicalNamePList () string logicalPlist = CreateTempFile (Path.Combine (TempDir, "Logical.plist")); RemoveItemsByName (MonoTouchProject, "None"); + MonoTouchProjectInstance = MonoTouchProject.CreateProjectInstance (); - var group = MonoTouchProject.AddNewItemGroup (); - group.AddNewItem ("None", logicalPlist); - group.ToArray ().Last ().SetMetadata ("LogicalName", "Info.plist"); + var item = MonoTouchProjectInstance.AddItem ("None", logicalPlist); + item.SetMetadata ("LogicalName", "Info.plist"); - RunTarget (MonoTouchProject, TargetName.DetectAppManifest); - Assert.AreEqual (logicalPlist, MonoTouchProject.GetEvaluatedProperty ("_AppManifest"), "#1"); + RunTargetOnInstance (MonoTouchProjectInstance, TargetName.DetectAppManifest); + Assert.AreEqual (logicalPlist, MonoTouchProjectInstance.GetPropertyValue ("_AppManifest"), "#1"); } [Test] public void DetectAppManifest_LibraryProject () { - RunTarget (LibraryProject, TargetName.DetectAppManifest); - Assert.IsNull (LibraryProject.GetEvaluatedProperty ("_AppManifest"), "#1"); + RunTargetOnInstance (LibraryProjectInstance, TargetName.DetectAppManifest); + Assert.IsNullOrEmpty (LibraryProjectInstance.GetPropertyValue ("_AppManifest"), "#1"); } } } diff --git a/msbuild/tests/Xamarin.iOS.Tasks.Tests/TestHelpers/Logger.cs b/msbuild/tests/Xamarin.iOS.Tasks.Tests/TestHelpers/Logger.cs index e6775b2f4116..161f30a7ea61 100644 --- a/msbuild/tests/Xamarin.iOS.Tasks.Tests/TestHelpers/Logger.cs +++ b/msbuild/tests/Xamarin.iOS.Tasks.Tests/TestHelpers/Logger.cs @@ -5,7 +5,6 @@ using System.Runtime.Remoting; using System.Runtime.Serialization.Formatters.Binary; using System.Threading; -using Microsoft.Build.BuildEngine; using Microsoft.Build.Framework; using NUnit.Framework; using Microsoft.Build.Utilities; diff --git a/msbuild/tests/Xamarin.iOS.Tasks.Tests/TestHelpers/TestBase.cs b/msbuild/tests/Xamarin.iOS.Tasks.Tests/TestHelpers/TestBase.cs index 6f01f2a3ee34..2983329f76cc 100644 --- a/msbuild/tests/Xamarin.iOS.Tasks.Tests/TestHelpers/TestBase.cs +++ b/msbuild/tests/Xamarin.iOS.Tasks.Tests/TestHelpers/TestBase.cs @@ -3,7 +3,8 @@ using System.Collections.Generic; using System.IO; using System.Linq; -using Microsoft.Build.BuildEngine; +using Microsoft.Build.Evaluation; +using Microsoft.Build.Execution; using Microsoft.Build.Utilities; using NUnit.Framework; using Xamarin.MacDev; @@ -73,10 +74,18 @@ public Project LibraryProject { get; private set; } + public ProjectInstance LibraryProjectInstance { + get; set; + } + public Project MonoTouchProject { get; private set; } + public ProjectInstance MonoTouchProjectInstance { + get; set; + } + public string LibraryProjectBinPath; public string LibraryProjectObjPath; public string LibraryProjectPath; @@ -135,7 +144,9 @@ public virtual void Setup () SetupEngine (); MonoTouchProject = SetupProject (Engine, MonoTouchProjectCSProjPath); + MonoTouchProjectInstance = MonoTouchProject.CreateProjectInstance (); LibraryProject = SetupProject (Engine, LibraryProjectCSProjPath); + LibraryProjectInstance = LibraryProject.CreateProjectInstance (); CleanUp (); } @@ -145,12 +156,9 @@ public void SetupEngine () Engine = new TestEngine (); } - public Project SetupProject (Engine engine, string projectPath) + public Project SetupProject (TestEngine engine, string projectPath) { - var proj = new Project (engine); - proj.Load (projectPath); - - return proj; + return engine.ProjectCollection.LoadProject (projectPath); } public virtual string TargetFrameworkIdentifier { @@ -188,6 +196,9 @@ public void CleanUp () { File.SetLastWriteTimeUtc (file, DateTime.UtcNow); foreach (var file in Directory.GetFiles (LibraryProjectPath, "*.*", SearchOption.AllDirectories)) File.SetLastWriteTimeUtc (file, DateTime.UtcNow); + + Engine.UnloadAllProjects (); + Engine = new TestEngine (); } protected void SafeDelete (string path) @@ -293,8 +304,7 @@ protected DateTime GetLastModified (string file) protected void RemoveItemsByName (Project project, string itemName) { - foreach (var item in project.GetEvaluatedItemsByName (itemName).ToArray ()) - project.RemoveItem (item); + project.RemoveItems (project.GetItems (itemName)); } protected string SetPListKey (string key, PObject value) @@ -323,7 +333,12 @@ protected void Touch (string file) public void RunTarget (Project project, string target, int expectedErrorCount = 0) { - Engine.BuildProject (project, new [] { target }, new Hashtable { {"Platform", "iPhone"} }, BuildSettings.None); + RunTargetOnInstance (project.CreateProjectInstance (), target, expectedErrorCount); + } + + public void RunTargetOnInstance (ProjectInstance instance, string target, int expectedErrorCount = 0) + { + Engine.BuildProject (instance, new [] { target }, new Hashtable { {"Platform", "iPhone"} }); if (expectedErrorCount != Engine.Logger.ErrorEvents.Count) { string messages = string.Empty; if (Engine.Logger.ErrorEvents.Count > 0) { @@ -335,7 +350,12 @@ public void RunTarget (Project project, string target, int expectedErrorCount = public void RunTarget_WithErrors (Project project, string target) { - Engine.BuildProject (project, new [] { target }, new Hashtable (), BuildSettings.None); + RunTarget_WithErrors (project.CreateProjectInstance (), target); + } + + public void RunTarget_WithErrors (ProjectInstance instance, string target) + { + Engine.BuildProject (instance, new [] { target }, new Hashtable ()); Assert.IsTrue (Engine.Logger.ErrorEvents.Count > 0, "#RunTarget-HasExpectedErrors"); } diff --git a/msbuild/tests/Xamarin.iOS.Tasks.Tests/TestHelpers/TestEngine.cs b/msbuild/tests/Xamarin.iOS.Tasks.Tests/TestHelpers/TestEngine.cs index ddcbf69db26d..a75805752df8 100644 --- a/msbuild/tests/Xamarin.iOS.Tasks.Tests/TestHelpers/TestEngine.cs +++ b/msbuild/tests/Xamarin.iOS.Tasks.Tests/TestHelpers/TestEngine.cs @@ -5,35 +5,53 @@ using System.Runtime.Remoting; using System.Runtime.Serialization.Formatters.Binary; using System.Threading; -using Microsoft.Build.BuildEngine; using Microsoft.Build.Framework; +using Microsoft.Build.Evaluation; +using Microsoft.Build.Execution; +using Microsoft.Build.Logging; using NUnit.Framework; using Microsoft.Build.Utilities; namespace Xamarin.iOS.Tasks { - public class TestEngine : Engine, IBuildEngine + public class TestEngine : IBuildEngine { public Logger Logger { get; set; } - + public TestEngine () { Logger = new Logger (); + ProjectCollection = new ProjectCollection (); - RegisterLogger (Logger); + ProjectCollection.RegisterLogger (Logger); var printer = new ConsoleReportPrinter (); var cl = new ConsoleLogger (LoggerVerbosity.Diagnostic, printer.Print, printer.SetForeground, printer.ResetColor); - RegisterLogger (cl); + ProjectCollection.RegisterLogger (cl); } - public bool BuildProjectFile (string projectFileName, string[] targetNames, IDictionary globalProperties, IDictionary targetOutputs) + public bool BuildProjectFile (string projectFileName, string [] targetNames, IDictionary globalProperties, IDictionary targetOutputs) { throw new NotImplementedException (); } + + public bool BuildProject (ProjectInstance instance, string [] targetNames, IDictionary globalProperties) + { + if (globalProperties != null) { + foreach (DictionaryEntry de in globalProperties) { + //Note: trying to set this on the project causes the project to be added to the PC + // again, which of course, fails + instance.SetProperty ((string)de.Key, (string)de.Value); + } + } + + //FIXME: assumption that we are still using the same PC! + return instance.Build (targetNames, ProjectCollection.Loggers); + } + public void LogCustomEvent (CustomBuildEventArgs e) { Logger.CustomEvents.Add (e); @@ -51,6 +69,11 @@ public void LogWarningEvent (BuildWarningEventArgs e) Logger.WarningsEvents.Add (e); } + public void UnloadAllProjects () + { + ProjectCollection.UnloadAllProjects (); + } + public int ColumnNumberOfTaskNode { get { return 0; } } @@ -63,6 +86,8 @@ public int LineNumberOfTaskNode { public string ProjectFileOfTaskNode { get { return ""; } } + + public ProjectCollection ProjectCollection { get; set; } } }