Пример #1
0
 public void BuildUnifiedMobile_Library_SmokeTest()
 {
     RunMSBuildTest(tmpDir => {
         string projectPath = TI.GenerateUnifiedLibraryProject(new TI.UnifiedTestConfig(tmpDir)
         {
             ProjectName = "UnifiedLibrary"
         });
         TI.BuildProject(projectPath);
     });
 }
Пример #2
0
 public void BuildFSharpUnifiedXM45_Program_SmokeTest()
 {
     RunMSBuildTest(tmpDir => {
         string projectPath = TI.GenerateEXEProject(new TI.UnifiedTestConfig(tmpDir)
         {
             FSharp = true, ProjectName = "FSharpXM45Example.fsproj"
         });
         TI.BuildProject(projectPath);
     });
 }
Пример #3
0
 public void BuildUnifiedMobile_Program_SmokeTest()
 {
     RunMSBuildTest(tmpDir => {
         string projectPath = TI.GenerateEXEProject(new TI.UnifiedTestConfig(tmpDir)
         {
             ProjectName = "UnifiedExample.csproj"
         });
         TI.BuildProject(projectPath);
     });
 }
Пример #4
0
 public void BuildFSharpUnifiedXM45_Library_SmokeTest()
 {
     RunMSBuildTest(tmpDir => {
         string projectPath = TI.GenerateUnifiedLibraryProject(new TI.UnifiedTestConfig(tmpDir)
         {
             FSharp = true, ProjectName = "FSharpXM45Library"
         });
         TI.BuildProject(projectPath);
     });
 }
Пример #5
0
 public void Build_BindingLibrary_SmokeTest(string projectName)
 {
     RunMSBuildTest(tmpDir => {
         TI.UnifiedTestConfig test = new TI.UnifiedTestConfig(tmpDir)
         {
             ProjectName = projectName
         };
         string projectPath = TI.GenerateBindingLibraryProject(test);
         TI.BuildProject(projectPath);
     });
 }
Пример #6
0
 public void Unified_SideBySideXamMac_ConsoleTest()
 {
     RunMMPTest(tmpDir =>
     {
         string testPath = Path.Combine(TI.FindSourceDirectory(), @"ConsoleXMApp.csproj");
         TI.BuildProject(testPath);
         string exePath = Path.Combine(TI.FindSourceDirectory(), @"bin/Debug/ConsoleXMApp.exe");
         var output     = TI.RunAndAssert("/Library/Frameworks/Mono.framework/Commands/mono64", new [] { exePath }, "RunSideBySizeXamMac");
         Assert.IsTrue(output.Split(Environment.NewLine.ToCharArray()).Any(x => x.Contains("True")), "Unified_SideBySideXamMac_ConsoleTest run");
     });
 }
Пример #7
0
 public void BuildWithObjcArcFlag()
 {
     RunMMPTest(tmpDir => {
         TI.UnifiedTestConfig test = new TI.UnifiedTestConfig(tmpDir)
         {
             CSProjConfig = "<MonoBundlingExtraArgs>-link_flags=-fobjc-arc</MonoBundlingExtraArgs>"
         };
         TI.TestUnifiedExecutable(test);
         TI.BuildProject(Path.Combine(tmpDir, "UnifiedExample.csproj"));
     });
 }
Пример #8
0
        void TestBCLCore(string tmpDir, string projectName)
        {
            var    dll         = Path.GetFullPath(Path.Combine(TI.TestDirectory + "common", "mac", "System.Collections.Immutable.dll"));
            string reference   = $"<Reference Include=\"System.Collections.Immutable\"><HintPath>{dll}</HintPath></Reference>";
            string testCode    = "var v = System.Collections.Immutable.ImmutableArray.CreateRange (new int [] { 42 });";
            string projectPath = TI.GenerateEXEProject(new TI.UnifiedTestConfig(tmpDir)
            {
                ProjectName = projectName, References = reference, TestCode = testCode
            });

            TI.BuildProject(projectPath);
        }
Пример #9
0
        void TestBCLCore(string tmpDir, string projectName)
        {
            File.Copy(Path.Combine(TI.AssemblyDirectory, TI.TestDirectory + "common/mac/System.Collections.Immutable.dll"), Path.Combine(tmpDir, "System.Collections.Immutable.dll"));
            string reference   = "<Reference Include=\"System.Collections.Immutable\"><HintPath>System.Collections.Immutable.dll</HintPath></Reference>";
            string testCode    = "var v = System.Collections.Immutable.ImmutableArray.CreateRange (new int [] { 42 });";
            string projectPath = TI.GenerateEXEProject(new TI.UnifiedTestConfig(tmpDir)
            {
                ProjectName = projectName, References = reference, TestCode = testCode
            });

            TI.BuildProject(projectPath);
        }
Пример #10
0
        public void ShareExtension_SmokeTest()
        {
            if (!PlatformHelpers.CheckSystemVersion(10, 10))
            {
                return;
            }

            MMPTests.RunMMPTest(tmpDir =>
            {
                TI.CopyDirectory(Path.Combine(TI.FindSourceDirectory(), @"Share"), tmpDir);
                TI.BuildProject(Path.Combine(tmpDir, "Share/ShareExtensionTest.csproj"), isUnified: true);
            });
        }
Пример #11
0
        public void FinderExtension_SmokeTest()
        {
            if (!PlatformHelpers.CheckSystemVersion(10, 10))
            {
                return;
            }

            MMPTests.RunMMPTest(tmpDir =>
            {
                string testPath = Path.Combine(TI.FindSourceDirectory(), @"Finder/FinderExtensionTest.csproj");
                TI.BuildProject(testPath, isUnified: true);
            });
        }
Пример #12
0
        public void ShareExtension_SmokeTest()
        {
            if (!PlatformHelpers.CheckSystemVersion(10, 10))
            {
                return;
            }

            RunMMPTest(tmpDir =>
            {
                string testPath = Path.Combine(TI.FindSourceDirectory(), @"Share/ShareExtensionTest.csproj");
                TI.BuildProject(testPath, true, false);
            });
        }
Пример #13
0
        public void FinderExtension_SmokeTest()
        {
            if (!PlatformHelpers.CheckSystemVersion(10, 10))
            {
                return;
            }

            MMPTests.RunMMPTest(tmpDir =>
            {
                TI.CopyDirectory(Path.Combine(TI.FindSourceDirectory(), @"Finder"), tmpDir);
                TI.BuildProject(Path.Combine(tmpDir, "Finder/FinderExtensionTest.csproj"));
            });
        }
Пример #14
0
        internal static string SetupAndBuildBindingProject(TI.UnifiedTestConfig binding, bool setupDefaultNativeReference, bool shouldFail = false)
        {
            if (setupDefaultNativeReference)
            {
                binding.ItemGroup += NativeReferenceTests.CreateSingleNativeRef(Path.GetFullPath(NativeReferenceTests.SimpleDylibPath), "Dynamic");
            }

            binding.StructsAndEnumsConfig = "public class UnifiedWithDepNativeRefLibTestClass {}";

            string projectPath = TI.GenerateBindingLibraryProject(binding);

            return(TI.BuildProject(projectPath, shouldFail: shouldFail));
        }
Пример #15
0
 public void Build_BindingLibrary_SmokeTest()
 {
     RunMSBuildTest(tmpDir => {
         foreach (string projectName in new [] { "XM45Binding.csproj", "MobileBinding.csproj", "BindingProjectWithNoTag.csproj" })
         {
             TI.UnifiedTestConfig test = new TI.UnifiedTestConfig(tmpDir)
             {
                 ProjectName = projectName
             };
             string projectPath = TI.GenerateBindingLibraryProject(test);
             TI.BuildProject(projectPath);
         }
     });
 }
Пример #16
0
        public void BuildingSameProject_TwoTimes_ShallNotInvokeMMPTwoTimes(string project)
        {
            RunMSBuildTest(tmpDir => {
                var config = new TI.UnifiedTestConfig(tmpDir)
                {
                    ProjectName = project
                };
                string projectPath = TI.GenerateEXEProject(config);
                string buildOutput = TI.BuildProject(projectPath).BuildOutput;
                Assert.IsTrue(buildOutput.Contains(@"Building target ""_CompileToNative"""));

                string secondBuildOutput = TI.BuildProject(projectPath).BuildOutput;
                Assert.IsFalse(secondBuildOutput.Contains(@"Building target ""_CompileToNative"""));
            });
        }
Пример #17
0
        public void MyCocoaCoreMLApp()
        {
            var projectPath = Path.Combine(Configuration.TestProjectsDirectory, "MyCocoaCoreMLApp", "MyCocoaCoreMLApp.csproj");
            // Clone the project directory to a temporary directory
            var testDirectory = Configuration.CloneTestDirectory(Path.GetDirectoryName(projectPath));

            // Update the project path to the clone project path in the temporary directory
            projectPath = Path.Combine(testDirectory, Path.GetFileName(projectPath));
            // build the project
            TI.BuildProject(projectPath);
            // verify that the scene kit assets are present in the app
            var resourceDir = Path.Combine(testDirectory, "bin", "Debug", "MyCocoaCoreMLApp.app", "Contents", "Resources");

            AssertCompiledModelExists(resourceDir, "SqueezeNet");
        }
Пример #18
0
        public void ExtensionProjectPackageReferencs_Build()
        {
            MMPTests.RunMMPTest(tmpDir => {
                TI.CopyDirectory(Path.Combine(TI.FindSourceDirectory(), @"Today"), tmpDir);

                string project = Path.Combine(tmpDir, "Today/TodayExtensionTest.csproj");
                string main    = Path.Combine(tmpDir, "Today/TodayViewController.cs");

                TI.CopyFileWithSubstitutions(project, project, s => s.Replace("%ITEMGROUP%", PackageReference));
                TI.CopyFileWithSubstitutions(main, main, s => s.Replace("%TESTCODE%", TestCode));

                TI.NugetRestore(project);
                var buildResult = TI.BuildProject(Path.Combine(tmpDir, "Today/TodayExtensionTest.csproj"));
                buildResult.Messages.AssertNoMessage(2013);
            });
        }
Пример #19
0
        public void MyCocoaSceneKitApp()
        {
            var projectPath = Path.Combine(Configuration.TestProjectsDirectory, "MyCocoaSceneKitApp", "MyCocoaSceneKitApp.csproj");
            // Clone the project directory to a temporary directory
            var testDirectory = Configuration.CloneTestDirectory(Path.GetDirectoryName(projectPath));

            // Update the project path to the clone project path in the temporary directory
            projectPath = Path.Combine(testDirectory, Path.GetFileName(projectPath));
            // build the project
            TI.BuildProject(projectPath);
            // verify that the scene kit assets are present in the app
            var resourceDir = Path.Combine(testDirectory, "bin", "Debug", "MyCocoaSceneKitApp.app", "Contents", "Resources");

            Assert.That(Path.Combine(resourceDir, "art.scnassets", "scene.scn"), Does.Exist, "scene.scn");
            Assert.That(Path.Combine(resourceDir, "art.scnassets", "texture.png"), Does.Exist, "texture.png");
        }
        // [Test] https://github.com/xamarin/xamarin-macios/issues/4110
        public void ExtensionProjectPackageReferencs_Build()
        {
            MMPTests.RunMMPTest(tmpDir => {
                TI.CopyDirectory(Path.Combine(TI.FindSourceDirectory(), @"Today"), tmpDir);

                string project = Path.Combine(tmpDir, "Today/TodayExtensionTest.csproj");
                string main    = Path.Combine(tmpDir, "Today/TodayViewController.cs");

                TI.CopyFileWithSubstitutions(project, project, s => s.Replace("%ITEMGROUP%", PackageReference));
                TI.CopyFileWithSubstitutions(main, main, s => s.Replace("%TESTCODE%", TestCode));

                TI.NugetRestore(project);
                string output = TI.BuildProject(Path.Combine(tmpDir, "Today/TodayExtensionTest.csproj"), isUnified: true);
                Assert.IsTrue(!output.Contains("MM2013"));
            });
        }
Пример #21
0
        public void BuildingSameBindingProject_TwoTimes_ShallNotInvokeMMPTwoTimes(string project)
        {
            const string nativeRefItemGroup = "<ItemGroup><NativeReference Include = \"\\usr\\lib\\libz.dylib\"><Kind>Dynamic</Kind><SmartLink>False</SmartLink></NativeReference></ItemGroup>";

            RunMSBuildTest(tmpDir => {
                var config = new TI.UnifiedTestConfig(tmpDir)
                {
                    ProjectName = project, ItemGroup = nativeRefItemGroup
                };
                string projectPath = TI.GenerateBindingLibraryProject(config);
                string buildOutput = TI.BuildProject(projectPath).BuildOutput;
                Assert.IsTrue(buildOutput.Contains(@"Building target ""CoreCompile"""));

                string secondBuildOutput = TI.BuildProject(projectPath).BuildOutput;
                Assert.IsFalse(secondBuildOutput.Contains(@"Building target ""CoreCompile"""));
            });
        }
Пример #22
0
        public void BuildUnifiedProject_WithJustNativeRefNoLinkWith_Builds()
        {
            RunMSBuildTest(tmpDir => {
                var dylib          = Path.GetFullPath(Path.Combine(TI.TestDirectory, "test-libraries", ".libs", "macos", "libtest.dylib"));
                string itemGroup   = $"<ItemGroup><NativeReference Include=\"{dylib}\"> <IsCxx>False</IsCxx><Kind>Dynamic</Kind> </NativeReference> </ItemGroup>";
                string projectPath = TI.GenerateEXEProject(new TI.UnifiedTestConfig(tmpDir)
                {
                    ProjectName = "UnifiedExample.csproj", ItemGroup = itemGroup
                });
                var testResults = TI.BuildProject(projectPath);
                testResults.Messages.AssertNoMessage(2006);
                Assert.That(Path.Combine(tmpDir, $"bin", "Debug", "UnifiedExample.app", "Contents", "MonoBundle", Path.GetFileName(dylib)), Does.Exist, "dylib in app");

                Assert.AreEqual(0, ExecutionHelper.Execute("/usr/bin/otool", new [] { "-L", Path.Combine(tmpDir, "bin/Debug/UnifiedExample.app/Contents/MacOS/UnifiedExample") }, out var output));
                Assert.IsTrue(output.ToString().Contains(Path.GetFileName(dylib)));
            });
        }
Пример #23
0
        public void ShouldNotUnnecessarilyRebuildBindingProject(bool framework)
        {
            MMPTests.RunMMPTest(tmpDir => {
                var projects = BindingProjectTests.GenerateTestProject(BindingProjectType.Modern, tmpDir);
                BindingProjectTests.SetNoEmbedding(projects.Item1);

                string projectPath               = Path.Combine(tmpDir, "MobileBinding.csproj");
                string bindingFilePath           = Path.Combine(tmpDir, "ApiDefinition.cs");
                const string CreatePackageString = "Creating binding resource package";

                // First build should create a package
                string frameworkPath = null;

                if (framework)
                {
                    frameworkPath             = FrameworkBuilder.CreateThinFramework(tmpDir);
                    projects.Item1.ItemGroup += NativeReferenceTests.CreateSingleNativeRef(Path.GetFullPath(frameworkPath), "Framework");
                }
                string libBuildLog = BindingProjectTests.SetupAndBuildBindingProject(projects.Item1, setupDefaultNativeReference: !framework);

                Assert.True(libBuildLog.Contains(CreatePackageString), $"First build did not create package? {TI.PrintRedirectIfLong (libBuildLog)}");

                // No change build should not
                libBuildLog = TI.BuildProject(projectPath, true);
                Assert.False(libBuildLog.Contains(CreatePackageString), $"Rebuild build did create package? {TI.PrintRedirectIfLong (libBuildLog)}");

                // Touching the binding project should
                Touch(projectPath);
                libBuildLog = TI.BuildProject(projectPath, true);
                Assert.True(libBuildLog.Contains(CreatePackageString), $"Binding Project build did not create package? {TI.PrintRedirectIfLong (libBuildLog)}");

                // Touching the binding file should
                Touch(bindingFilePath);
                libBuildLog = TI.BuildProject(projectPath, true);
                Assert.True(libBuildLog.Contains(CreatePackageString), $"Binding File build did not create package? {TI.PrintRedirectIfLong (libBuildLog)}");

                // No change build should not
                libBuildLog = TI.BuildProject(projectPath, true);
                Assert.False(libBuildLog.Contains(CreatePackageString), $"Second Rebuild build did create package? {TI.PrintRedirectIfLong (libBuildLog)}");

                // Touching native library should
                Touch(framework ? frameworkPath + "/Foo" : NativeReferenceTests.SimpleDylibPath);
                libBuildLog = TI.BuildProject(projectPath, true);
                Assert.True(libBuildLog.Contains(CreatePackageString), $"Native Library build did not create package? {TI.PrintRedirectIfLong (libBuildLog)}");
            });
        }
        static Tuple <string, string> BuildLinkedTestProjects(TI.UnifiedTestConfig binding, TI.UnifiedTestConfig project, string tmpDir)
        {
            binding.ItemGroup             = NativeReferenceTests.CreateSingleNativeRef(Path.GetFullPath(NativeReferenceTests.SimpleDylibPath), "Dynamic");
            binding.StructsAndEnumsConfig = "public class UnifiedWithDepNativeRefLibTestClass {}";

            string projectPath     = TI.GenerateBindingLibraryProject(binding);
            string bindingBuildLog = TI.BuildProject(projectPath, true);

            string bindingName = RemoveCSProj(binding.ProjectName);

            project.References = string.Format(@"<Reference Include=""{0}""><HintPath>{1}</HintPath></Reference>", bindingName, Path.Combine(tmpDir, "bin/Debug", bindingName + ".dll"));
            project.TestCode   = "System.Console.WriteLine (typeof (ExampleBinding.UnifiedWithDepNativeRefLibTestClass));";

            string appBuildLog = TI.TestUnifiedExecutable(project).BuildOutput;

            return(new Tuple <string, string> (bindingBuildLog, appBuildLog));
        }
Пример #25
0
        public void TodayExtension_SmokeTest()
        {
            if (!PlatformHelpers.CheckSystemVersion(10, 10))
            {
                return;
            }

            MMPTests.RunMMPTest(tmpDir =>
            {
                TI.CopyDirectory(Path.Combine(TI.FindSourceDirectory(), @"Today"), tmpDir);
                string project = Path.Combine(tmpDir, "Today/TodayExtensionTest.csproj");
                string main    = Path.Combine(tmpDir, "Today/TodayViewController.cs");
                TI.CopyFileWithSubstitutions(project, project, s => s.Replace("%ITEMGROUP%", ""));
                TI.CopyFileWithSubstitutions(main, main, s => s.Replace("%TESTCODE%", ""));
                TI.BuildProject(project, isUnified: true);
            });
        }
        // [TestCase (true)] https://github.com/xamarin/xamarin-macios/issues/4110
        // [TestCase (false)] https://github.com/xamarin/xamarin-macios/issues/4110
        public void AppsWithPackageReferencs_BuildAndRun(bool full)
        {
            MMPTests.RunMMPTest(tmpDir => {
                var config = new TI.UnifiedTestConfig(tmpDir)
                {
                    ItemGroup = PackageReference,
                    TestCode  = TestCode + @"			if (output == ""[1,2,3]"")
				"                ,
                    XM45      = full
                };
                TI.AddGUIDTestCode(config);

                string project = TI.GenerateUnifiedExecutableProject(config);
                TI.NugetRestore(project);
                TI.BuildProject(project, true);
                TI.RunGeneratedUnifiedExecutable(config);
            });
        }
Пример #27
0
        public void BuildingSameBindingProject_TwoTimes_ShallNotInvokeMMPTwoTimes(string project)
        {
            var    dylib = Path.GetFullPath(Path.Combine(TI.TestDirectory, "test-libraries", ".libs", "macos", "libtest.dylib"));
            string nativeRefItemGroup = $"<ItemGroup><NativeReference Include = \"{dylib}\"><Kind>Dynamic</Kind><SmartLink>False</SmartLink></NativeReference></ItemGroup>";

            RunMSBuildTest(tmpDir => {
                var config = new TI.UnifiedTestConfig(tmpDir)
                {
                    ProjectName = project, ItemGroup = nativeRefItemGroup
                };
                string projectPath = TI.GenerateBindingLibraryProject(config);
                string buildOutput = TI.BuildProject(projectPath).BuildOutput;
                Assert.IsTrue(buildOutput.Contains(@"Building target ""CoreCompile"""));

                string secondBuildOutput = TI.BuildProject(projectPath).BuildOutput;
                Assert.IsFalse(secondBuildOutput.Contains(@"Building target ""CoreCompile"""));
            });
        }
Пример #28
0
        public void BuildingSameProject_TwoTimes_ShallNotInvokeMMPTwoTimes()
        {
            RunMSBuildTest(tmpDir =>
            {
                foreach (var project in new string[] { "UnifiedExample.csproj", "XM45Example.csproj" })
                {
                    var config = new TI.UnifiedTestConfig(tmpDir)
                    {
                        ProjectName = project
                    };
                    string projectPath = TI.GenerateEXEProject(config);
                    string buildOutput = TI.BuildProject(projectPath);
                    Assert.IsTrue(buildOutput.Contains(@"Building target ""_CompileToNative"""));

                    string secondBuildOutput = TI.BuildProject(projectPath);
                    Assert.IsFalse(secondBuildOutput.Contains(@"Building target ""_CompileToNative"""));
                }
            });
        }
Пример #29
0
        // context https://github.com/xamarin/xamarin-macios/issues/7113
        public void SatellitesFromNuget(bool full)
        {
            MMPTests.RunMMPTest(tmpDir => {
                var config = new TI.UnifiedTestConfig(tmpDir)
                {
                    ItemGroup = @"<ItemGroup><PackageReference Include = ""Humanizer"" Version = ""2.7.2"" /></ItemGroup>",
                    TestCode  = "Humanizer.DateHumanizeExtensions.Humanize (System.DateTime.UtcNow.AddHours (-30));\n",
                    XM45      = full
                };
                TI.AddGUIDTestCode(config);

                string project = TI.GenerateUnifiedExecutableProject(config);
                TI.NugetRestore(project);
                TI.BuildProject(project);

                var appDir = Path.Combine(tmpDir, "bin", "Debug", full ? "XM45Example.app" : "UnifiedExample.app");
                Assert.True(File.Exists(Path.Combine(appDir, "Contents", "MonoBundle", "fr", "Humanizer.resources.dll")), "fr");
            });
        }
Пример #30
0
        public void ArchiveTask(bool full)
        {
            // https://github.com/xamarin/xamarin-macios/issues/5653
            if (TI.InJenkins)
            {
                Assert.Ignore("Requires macOS entitlements on bots.");
            }

            RunMMPTest(tmpDir => {
                TI.UnifiedTestConfig test = new TI.UnifiedTestConfig(tmpDir)
                {
                    XM45         = full,
                    CSProjConfig = "<EnableCodeSigning>true</EnableCodeSigning>"
                };
                TI.TestUnifiedExecutable(test);
                TI.BuildProject(Path.Combine(tmpDir, full ? "XM45Example.csproj" : "UnifiedExample.csproj"), release: true, extraArgs: new [] { "/p:ArchiveOnBuild=true" });
            });

            // TODO: Add something to validate the archive is loadable by Xcode
        }