Esempio n. 1
0
            private TestAssetInfo GetAsset(TestAssetsManager manager)
            {
                TestProject project = new("SimpleAsset")
                {
                    TargetFrameworks = TargetFrameworks,
                    IsExe            = false
                };

                project.SourceFiles.Add("MyClass.cs", SimpleAssemblySourceContents);

                TestAsset testAsset = manager.CreateTestProject(project);

                BuildTestAsset(testAsset, out string outDir)
                .Should()
                .Pass();

                return(new TestAssetInfo()
                {
                    TestAsset = testAsset,
                    OutputDirectory = outDir,
                });
            }
        }
Esempio n. 2
0
        public void It_checks_for_valid_references(string referencerTarget, bool referencerIsSdkProject,
                                                   string dependencyTarget, bool dependencyIsSdkProject,
                                                   bool restoreSucceeds, bool buildSucceeds)
        {
            string identifier = referencerTarget.ToString() + " " + dependencyTarget.ToString();

            TestProject referencerProject = GetTestProject("Referencer", referencerTarget, referencerIsSdkProject);
            TestProject dependencyProject = GetTestProject("Dependency", dependencyTarget, dependencyIsSdkProject);

            referencerProject.ReferencedProjects.Add(dependencyProject);

            //  Set the referencer project as an Exe unless it targets .NET Standard
            if (!referencerProject.ShortTargetFrameworkIdentifiers.Contains("netstandard"))
            {
                referencerProject.IsExe = true;
            }

            //  Skip running test if not running on Windows
            if (!RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
            {
                if (!referencerProject.BuildsOnNonWindows || !dependencyProject.BuildsOnNonWindows)
                {
                    return;
                }
            }

            var testAsset = _testAssetsManager.CreateTestProject(referencerProject, nameof(It_checks_for_valid_references), identifier);

            var restoreCommand = testAsset.GetRestoreCommand(relativePath: "Referencer");

            if (restoreSucceeds)
            {
                restoreCommand
                .Execute()
                .Should()
                .Pass();
            }
            else
            {
                restoreCommand
                .CaptureStdOut()
                .Execute()
                .Should()
                .Fail();
            }

            if (!referencerProject.IsSdkProject)
            {
                //  The Restore target currently seems to be a no-op for non-SDK projects,
                //  so we need to explicitly restore the dependency
                testAsset.GetRestoreCommand(relativePath: "Dependency")
                .Execute()
                .Should()
                .Pass();
            }

            var appProjectDirectory = Path.Combine(testAsset.TestRoot, "Referencer");

            var buildCommand = new BuildCommand(Stage0MSBuild, appProjectDirectory);

            if (!buildSucceeds)
            {
                buildCommand = buildCommand.CaptureStdOut();
            }

            //  Suppress ResolveAssemblyReference warning output due to https://github.com/Microsoft/msbuild/issues/1329
            if (buildSucceeds && referencerProject.IsExe && referencerProject.ShortTargetFrameworkIdentifiers.Contains("net"))
            {
                buildCommand = buildCommand.CaptureStdOut();
            }

            var result = buildCommand.Execute();

            if (buildSucceeds)
            {
                result.Should().Pass();
            }
            else
            {
                result.Should().Fail()
                .And.HaveStdOutContaining("has no target framework compatible with");
            }
        }