public static ITestEnvironment Empty() { return(TestEnvironment.Create(ctx => { })); }
public void SdkImportsAreInPreprocessedOutput() { using (TestEnvironment env = TestEnvironment.Create()) { string testSdkDirectory = env.CreateFolder().FolderPath; env.WithTransientTestState(new TransientSdkResolution(new Dictionary <string, string> { { "MSBuildUnitTestSdk", testSdkDirectory } })); string sdkPropsPath = Path.Combine(testSdkDirectory, "Sdk.props"); string sdkTargetsPath = Path.Combine(testSdkDirectory, "Sdk.targets"); File.WriteAllText(sdkPropsPath, @"<Project> <PropertyGroup> <SdkPropsImported>true</SdkPropsImported> </PropertyGroup> </Project>"); File.WriteAllText(sdkTargetsPath, @"<Project> <PropertyGroup> <SdkTargetsImported>true</SdkTargetsImported> </PropertyGroup> </Project>"); string content = @"<Project Sdk='MSBuildUnitTestSdk'> <PropertyGroup> <p>v1</p> </PropertyGroup> </Project>"; Project project = new Project(ProjectRootElement.Create(XmlReader.Create(new StringReader(content)))); StringWriter writer = new StringWriter(); project.SaveLogicalProject(writer); string expected = ObjectModelHelpers.CleanupFileContents( $@"<?xml version=""1.0"" encoding=""utf-16""?> <Project> <!-- ============================================================================================================================================ <Import Project=""Sdk.props"" Sdk=""MSBuildUnitTestSdk""> This import was added implicitly because of the Project element's Sdk attribute specified ""MSBuildUnitTestSdk"". {sdkPropsPath} ============================================================================================================================================ --> <PropertyGroup> <SdkPropsImported>true</SdkPropsImported> </PropertyGroup> <!-- ============================================================================================================================================ </Import> ============================================================================================================================================ --> <PropertyGroup> <p>v1</p> </PropertyGroup> <!-- ============================================================================================================================================ <Import Project=""Sdk.targets"" Sdk=""MSBuildUnitTestSdk""> This import was added implicitly because of the Project element's Sdk attribute specified ""MSBuildUnitTestSdk"". {sdkTargetsPath} ============================================================================================================================================ --> <PropertyGroup> <SdkTargetsImported>true</SdkTargetsImported> </PropertyGroup> <!-- ============================================================================================================================================ </Import> ============================================================================================================================================ --> </Project>"); Helpers.VerifyAssertLineByLine(expected, writer.ToString()); } }
public void ImportedProjectsSdkImportsAreInPreprocessedOutput() { using (TestEnvironment env = TestEnvironment.Create()) { string sdk1 = env.CreateFolder().Path; string sdk2 = env.CreateFolder().Path; var projectOptions = SdkUtilities.CreateProjectOptionsWithResolver(new SdkUtilities.FileBasedMockSdkResolver(new Dictionary <string, string> { { "MSBuildUnitTestSdk1", sdk1 }, { "MSBuildUnitTestSdk2", sdk2 }, })); string sdkPropsPath1 = Path.Combine(sdk1, "Sdk.props"); string sdkTargetsPath1 = Path.Combine(sdk1, "Sdk.targets"); File.WriteAllText(sdkPropsPath1, @"<Project> <PropertyGroup> <SdkProps1Imported>true</SdkProps1Imported> </PropertyGroup> </Project>"); File.WriteAllText(sdkTargetsPath1, @"<Project> <PropertyGroup> <SdkTargets1Imported>true</SdkTargets1Imported> </PropertyGroup> </Project>"); string sdkPropsPath2 = Path.Combine(sdk2, "Sdk.props"); string sdkTargetsPath2 = Path.Combine(sdk2, "Sdk.targets"); File.WriteAllText(sdkPropsPath2, @"<Project> <PropertyGroup> <SdkProps2Imported>true</SdkProps2Imported> </PropertyGroup> </Project>"); File.WriteAllText(sdkTargetsPath2, @"<Project> <PropertyGroup> <SdkTargets2Imported>true</SdkTargets2Imported> </PropertyGroup> </Project>"); TransientTestProjectWithFiles import = env.CreateTestProjectWithFiles(@"<Project Sdk='MSBuildUnitTestSdk2'> <PropertyGroup> <MyImportWasImported>true</MyImportWasImported> </PropertyGroup> </Project>"); string importPath = Path.GetFullPath(import.ProjectFile); string content = $@"<Project Sdk='MSBuildUnitTestSdk1'> <Import Project='{importPath}' /> <PropertyGroup> <p>v1</p> </PropertyGroup> </Project>"; Project project = Project.FromProjectRootElement( ProjectRootElement.Create(XmlReader.Create(new StringReader(content))), projectOptions); StringWriter writer = new StringWriter(); project.SaveLogicalProject(writer); string expected = ObjectModelHelpers.CleanupFileContents( $@"<?xml version=""1.0"" encoding=""utf-16""?> <Project> <!-- ============================================================================================================================================ <Import Project=""Sdk.props"" Sdk=""MSBuildUnitTestSdk1""> This import was added implicitly because the Project element's Sdk attribute specified ""MSBuildUnitTestSdk1"". {sdkPropsPath1.Replace("--", "__")} ============================================================================================================================================ --> <PropertyGroup> <SdkProps1Imported>true</SdkProps1Imported> </PropertyGroup> <!-- ============================================================================================================================================ </Import> ============================================================================================================================================ --> <!-- ============================================================================================================================================ <Import Project=""{importPath.Replace("--", "__")}""> {importPath.Replace("--", "__")} ============================================================================================================================================ --> <!-- ============================================================================================================================================ <Import Project=""Sdk.props"" Sdk=""MSBuildUnitTestSdk2""> This import was added implicitly because the Project element's Sdk attribute specified ""MSBuildUnitTestSdk2"". {sdkPropsPath2.Replace("--", "__")} ============================================================================================================================================ --> <PropertyGroup> <SdkProps2Imported>true</SdkProps2Imported> </PropertyGroup> <!-- ============================================================================================================================================ </Import> {importPath.Replace("--", "__")} ============================================================================================================================================ --> <PropertyGroup> <MyImportWasImported>true</MyImportWasImported> </PropertyGroup> <!-- ============================================================================================================================================ <Import Project=""Sdk.targets"" Sdk=""MSBuildUnitTestSdk2""> This import was added implicitly because the Project element's Sdk attribute specified ""MSBuildUnitTestSdk2"". {sdkTargetsPath2.Replace("--", "__")} ============================================================================================================================================ --> <PropertyGroup> <SdkTargets2Imported>true</SdkTargets2Imported> </PropertyGroup> <!-- ============================================================================================================================================ </Import> {importPath.Replace("--", "__")} ============================================================================================================================================ --> <!-- ============================================================================================================================================ </Import> ============================================================================================================================================ --> <PropertyGroup> <p>v1</p> </PropertyGroup> <!-- ============================================================================================================================================ <Import Project=""Sdk.targets"" Sdk=""MSBuildUnitTestSdk1""> This import was added implicitly because the Project element's Sdk attribute specified ""MSBuildUnitTestSdk1"". {sdkTargetsPath1.Replace("--", "__")} ============================================================================================================================================ --> <PropertyGroup> <SdkTargets1Imported>true</SdkTargets1Imported> </PropertyGroup> <!-- ============================================================================================================================================ </Import> ============================================================================================================================================ --> </Project>"); Helpers.VerifyAssertLineByLine(expected, writer.ToString()); } }
public ResultCacheBasedBuilds_Tests(ITestOutputHelper output) { _output = output; _env = TestEnvironment.Create(_output); _logger = new MockLogger(_output); }
public void SolutionFilterFiltersProjects(bool graphBuild) { using (TestEnvironment testEnvironment = TestEnvironment.Create()) { TransientTestFolder folder = testEnvironment.CreateFolder(createFolder: true); TransientTestFolder classLibFolder = testEnvironment.CreateFolder(Path.Combine(folder.Path, "ClassLibrary"), createFolder: true); TransientTestFolder classLibSubFolder = testEnvironment.CreateFolder(Path.Combine(classLibFolder.Path, "ClassLibrary"), createFolder: true); TransientTestFile classLibrary = testEnvironment.CreateFile(classLibSubFolder, "ClassLibrary.csproj", @"<Project> <Target Name=""ClassLibraryTarget""> <Message Text=""ClassLibraryBuilt""/> </Target> </Project> "); TransientTestFolder simpleProjectFolder = testEnvironment.CreateFolder(Path.Combine(folder.Path, "SimpleProject"), createFolder: true); TransientTestFolder simpleProjectSubFolder = testEnvironment.CreateFolder(Path.Combine(simpleProjectFolder.Path, "SimpleProject"), createFolder: true); TransientTestFile simpleProject = testEnvironment.CreateFile(simpleProjectSubFolder, "SimpleProject.csproj", @"<Project DefaultTargets=""SimpleProjectTarget""> <Target Name=""SimpleProjectTarget""> <Message Text=""SimpleProjectBuilt""/> </Target> </Project> "); // Slashes here (and in the .slnf) are hardcoded as backslashes intentionally to support the common case. TransientTestFile solutionFile = testEnvironment.CreateFile(simpleProjectFolder, "SimpleProject.sln", @" Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 16 VisualStudioVersion = 16.0.29326.124 MinimumVisualStudioVersion = 10.0.40219.1 Project(""{9A19103F-16F7-4668-BE54-9A1E7A4F7556}"") = ""SimpleProject"", ""SimpleProject\SimpleProject.csproj"", ""{79B5EBA6-5D27-4976-BC31-14422245A59A}"" EndProject Project(""{9A19103F-16F7-4668-BE54-9A1E7A4F7556}"") = ""ClassLibrary"", ""..\ClassLibrary\ClassLibrary\ClassLibrary.csproj"", ""{8EFCCA22-9D51-4268-90F7-A595E11FCB2D}"" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {79B5EBA6-5D27-4976-BC31-14422245A59A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {79B5EBA6-5D27-4976-BC31-14422245A59A}.Debug|Any CPU.Build.0 = Debug|Any CPU {79B5EBA6-5D27-4976-BC31-14422245A59A}.Release|Any CPU.ActiveCfg = Release|Any CPU {79B5EBA6-5D27-4976-BC31-14422245A59A}.Release|Any CPU.Build.0 = Release|Any CPU {8EFCCA22-9D51-4268-90F7-A595E11FCB2D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {8EFCCA22-9D51-4268-90F7-A595E11FCB2D}.Debug|Any CPU.Build.0 = Debug|Any CPU {8EFCCA22-9D51-4268-90F7-A595E11FCB2D}.Release|Any CPU.ActiveCfg = Release|Any CPU {8EFCCA22-9D51-4268-90F7-A595E11FCB2D}.Release|Any CPU.Build.0 = Release|Any CPU {06A4DD1B-5027-41EF-B72F-F586A5A83EA5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {06A4DD1B-5027-41EF-B72F-F586A5A83EA5}.Debug|Any CPU.Build.0 = Debug|Any CPU {06A4DD1B-5027-41EF-B72F-F586A5A83EA5}.Release|Any CPU.ActiveCfg = Release|Any CPU {06A4DD1B-5027-41EF-B72F-F586A5A83EA5}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {DE7234EC-0C4D-4070-B66A-DCF1B4F0CFEF} EndGlobalSection EndGlobal "); TransientTestFile filterFile = testEnvironment.CreateFile(folder, "solutionFilter.slnf", @" { ""solution"": { // I'm a comment ""path"": "".\\SimpleProject\\SimpleProject.sln"", ""projects"": [ /* ""..\\ClassLibrary\\ClassLibrary\\ClassLibrary.csproj"", */ ""SimpleProject\\SimpleProject.csproj"", ] } } "); Directory.GetCurrentDirectory().ShouldNotBe(Path.GetDirectoryName(filterFile.Path)); if (graphBuild) { ProjectCollection projectCollection = testEnvironment.CreateProjectCollection().Collection; MockLogger logger = new(); projectCollection.RegisterLogger(logger); ProjectGraphEntryPoint entryPoint = new(filterFile.Path, new Dictionary <string, string>()); // We only need to construct the graph, since that tells us what would build if we were to build it. ProjectGraph graphFromSolution = new(entryPoint, projectCollection); logger.AssertNoErrors(); graphFromSolution.ProjectNodes.ShouldHaveSingleItem(); graphFromSolution.ProjectNodes.Single().ProjectInstance.ProjectFileLocation.LocationString.ShouldBe(simpleProject.Path); } else { SolutionFile solution = SolutionFile.Parse(filterFile.Path); ILoggingService mockLogger = CreateMockLoggingService(); ProjectInstance[] instances = SolutionProjectGenerator.Generate(solution, null, null, _buildEventContext, mockLogger); instances.ShouldHaveSingleItem(); // Check that dependencies are built, and non-dependencies in the .sln are not. MockLogger logger = new(output); instances[0].Build(targets: null, new List <ILogger> { logger }).ShouldBeTrue(); logger.AssertLogContains(new string[] { "SimpleProjectBuilt" }); logger.AssertLogDoesntContain("ClassLibraryBuilt"); } } }
private static void AssertLoggingEvents( Action <Project, MockLogger> loggingTest = null, MockLogger firstEvaluationLogger = null, Func <Project, MockLogger> reevaluationLoggerFactory = null) { var projectImportContents = @"<Project> <Target Name=`Foo` AfterTargets=`X` BeforeTargets=`Y` > </Target> <PropertyGroup> <P>Bar</P> <P2>$(NonExisting)</P2> </PropertyGroup> </Project>".Cleanup(); var projectContents = @"<Project> <Target Name=`Foo`> </Target> <PropertyGroup> <P>Foo</P> </PropertyGroup> <Import Project=`{0}`/> <Import Project=`{0}`/> </Project>".Cleanup(); using (var env = TestEnvironment.Create()) { var collection = env.CreateProjectCollection().Collection; var importFile = env.CreateFile().Path; File.WriteAllText(importFile, projectImportContents); projectContents = string.Format(projectContents, importFile); var projectFile = env.CreateFile().Path; File.WriteAllText(projectFile, projectContents); firstEvaluationLogger ??= new MockLogger(); collection.RegisterLogger(firstEvaluationLogger); var project = new Project(projectFile, null, null, collection); firstEvaluationLogger.AllBuildEvents.ShouldNotBeEmpty(); if (reevaluationLoggerFactory != null) { var reevaluationLogger = reevaluationLoggerFactory.Invoke(project); collection.RegisterLogger(reevaluationLogger); project.SetProperty("aProperty", "Value"); project.ReevaluateIfNecessary(); reevaluationLogger.AllBuildEvents.ShouldNotBeEmpty(); } loggingTest?.Invoke(project, firstEvaluationLogger); } }
public void LazyWildcardExpansionDoesNotEvaluateWildCardsIfNotReferenced() { var content = @" <Project> <Import Project=`foo/*.props`/> <ItemGroup> <i Include=`**/foo/**/*.cs`/> <i2 Include=`**/bar/**/*.cs`/> </ItemGroup> <ItemGroup> <ItemReference Include=`@(i)`/> <FullPath Include=`@(i->'%(FullPath)')`/> <Identity Include=`@(i->'%(Identity)')`/> <RecursiveDir Include=`@(i->'%(RecursiveDir)')`/> </ItemGroup> </Project> ".Cleanup(); var import = @" <Project> <PropertyGroup> <FromImport>true</FromImport> </PropertyGroup> </Project> ".Cleanup(); using (var env = TestEnvironment.Create()) { var projectFiles = env.CreateTestProjectWithFiles(content, new[] { "foo/extra.props", "foo/a.cs", "foo/b.cs", "bar/c.cs", "bar/d.cs" }); File.WriteAllText(projectFiles.CreatedFiles[0], import); env.SetEnvironmentVariable("MsBuildSkipEagerWildCardEvaluationRegexes", ".*foo.*"); EngineFileUtilities.CaptureLazyWildcardRegexes(); var project = new Project(projectFiles.ProjectFile); Assert.Equal("true", project.GetPropertyValue("FromImport")); Assert.Equal("**/foo/**/*.cs", project.GetConcatenatedItemsOfType("i")); var expectedItems = "bar\\c.cs;bar\\d.cs"; if (!NativeMethodsShared.IsWindows) { expectedItems = expectedItems.ToSlash(); } Assert.Equal(expectedItems, project.GetConcatenatedItemsOfType("i2")); var fullPathItems = project.GetConcatenatedItemsOfType("FullPath"); Assert.Contains("a.cs", fullPathItems); Assert.Contains("b.cs", fullPathItems); var identityItems = project.GetConcatenatedItemsOfType("Identity"); Assert.Contains("a.cs", identityItems); Assert.Contains("b.cs", identityItems); // direct item references do not expand the lazy wildcard Assert.Equal("**/foo/**/*.cs", project.GetConcatenatedItemsOfType("ItemReference")); // recursive dir does not work with lazy wildcards Assert.Equal(string.Empty, project.GetConcatenatedItemsOfType("RecursiveDir")); } }
public void SdkImportsAreInPreprocessedOutput() { var testSdkRoot = Path.Combine(Path.GetTempPath(), "MSBuildUnitTest"); var testSdkDirectory = Path.Combine(testSdkRoot, "MSBuildUnitTestSdk", "Sdk"); try { Directory.CreateDirectory(testSdkDirectory); string sdkPropsPath = Path.Combine(testSdkDirectory, "Sdk.props"); string sdkTargetsPath = Path.Combine(testSdkDirectory, "Sdk.targets"); File.WriteAllText(sdkPropsPath, @"<Project> <PropertyGroup> <SdkPropsImported>true</SdkPropsImported> </PropertyGroup> </Project>"); File.WriteAllText(sdkTargetsPath, @"<Project> <PropertyGroup> <SdkTargetsImported>true</SdkTargetsImported> </PropertyGroup> </Project>"); using (var env = TestEnvironment.Create()) { env.SetEnvironmentVariable("MSBuildSDKsPath", testSdkRoot); string content = @"<Project Sdk='MSBuildUnitTestSdk'> <PropertyGroup> <p>v1</p> </PropertyGroup> </Project>"; var project = new Project(ProjectRootElement.Create(XmlReader.Create(new StringReader(content)))); StringWriter writer = new StringWriter(); project.SaveLogicalProject(writer); string expected = ObjectModelHelpers.CleanupFileContents( $@"<?xml version=""1.0"" encoding=""utf-16""?> <Project> <!-- ============================================================================================================================================ <Import Project=""Sdk.props"" Sdk=""MSBuildUnitTestSdk""> This import was added implicitly because of the Project element's Sdk attribute specified ""MSBuildUnitTestSdk"". {sdkPropsPath} ============================================================================================================================================ --> <PropertyGroup> <SdkPropsImported>true</SdkPropsImported> </PropertyGroup> <!-- ============================================================================================================================================ </Import> ============================================================================================================================================ --> <PropertyGroup> <p>v1</p> </PropertyGroup> <!-- ============================================================================================================================================ <Import Project=""Sdk.targets"" Sdk=""MSBuildUnitTestSdk""> This import was added implicitly because of the Project element's Sdk attribute specified ""MSBuildUnitTestSdk"". {sdkTargetsPath} ============================================================================================================================================ --> <PropertyGroup> <SdkTargetsImported>true</SdkTargetsImported> </PropertyGroup> <!-- ============================================================================================================================================ </Import> ============================================================================================================================================ --> </Project>"); Helpers.VerifyAssertLineByLine(expected, writer.ToString()); } } finally { if (Directory.Exists(testSdkDirectory)) { FileUtilities.DeleteWithoutTrailingBackslash(testSdkDirectory, true); } } }
public void ProjectEvaluationShouldRespectConditionsIfProjectLoadSettingsSaysSo() { var projectContents = @" <Project> <ItemDefinitionGroup Condition=`1 == 2`> <I> <m>v</m> </I> </ItemDefinitionGroup> <PropertyGroup Condition=`1 == 2`> <P1>v</P1> </PropertyGroup> <PropertyGroup> <P2 Condition=`1 == 2`>v</P2> </PropertyGroup> <ItemGroup Condition=`1 == 2`> <I1 Include=`i`/> </ItemGroup> <ItemGroup> <I2 Condition=`1 == 2` Include=`i`/> </ItemGroup> </Project>".Cleanup(); using (var env = TestEnvironment.Create()) { var projectCollection = env.CreateProjectCollection().Collection; var project = new Project(XmlReader.Create(new StringReader(projectContents)), new Dictionary <string, string>(), MSBuildConstants.CurrentToolsVersion, projectCollection, ProjectLoadSettings.DoNotEvaluateElementsWithFalseCondition); var data = project.TestOnlyGetPrivateData; project.GetProperty("P1").ShouldBeNull(); project.GetProperty("P2").ShouldBeNull(); project.Items.ShouldBeEmpty(); project.ItemDefinitions.ShouldBeEmpty(); data.ConditionedProperties.ShouldBeEmpty(); data.ItemsIgnoringCondition.ShouldBeEmpty(); data.AllEvaluatedItemDefinitionMetadata.ShouldBeEmpty(); data.AllEvaluatedItems.ShouldBeEmpty(); Should.Throw <InvalidOperationException>(() => { var c = project.ConditionedProperties; }); Should.Throw <InvalidOperationException>(() => { var c = project.ItemsIgnoringCondition; }); Should.Throw <InvalidOperationException>(() => { var c = project.AllEvaluatedItemDefinitionMetadata; }); Should.Throw <InvalidOperationException>(() => { var c = project.AllEvaluatedItems; }); } }
public GraphLoadedFromSolutionTests(ITestOutputHelper output) { _env = TestEnvironment.Create(output); }
public MSBuildTestEnvironmentFixture() { _testEnvironment = TestEnvironment.Create(); }
public void SdkReferenceIsCorrect_CreatedInMemory() { using (var env = TestEnvironment.Create()) { ProjectRootElement rootElement = ProjectRootElement.Create(NewProjectFileOptions.None); ProjectImportElement importElement = rootElement.AddImport("Sdk.props"); SetPropertyAndExpectProjectXmlChangedEventToFire(rootElement, () => importElement.Sdk = "My.Sdk", "Set Import Sdk My.Sdk"); SetPropertyAndExpectProjectXmlChangedEventToNotFire(rootElement, () => importElement.Sdk = "My.Sdk"); importElement.SdkReference.Name.ShouldBe("My.Sdk"); importElement.SdkReference.Version.ShouldBeNull(); importElement.SdkReference.MinimumVersion.ShouldBeNull(); SetPropertyAndExpectProjectXmlChangedEventToFire(rootElement, () => importElement.Version = "1.2.0", "Set Import Version 1.2.0"); SetPropertyAndExpectProjectXmlChangedEventToNotFire(rootElement, () => importElement.Version = "1.2.0"); importElement.SdkReference.Name.ShouldBe("My.Sdk"); importElement.SdkReference.Version.ShouldBe("1.2.0"); importElement.SdkReference.MinimumVersion.ShouldBeNull(); SetPropertyAndExpectProjectXmlChangedEventToFire(rootElement, () => importElement.MinimumVersion = "1.0.0", "Set Import Minimum Version 1.0.0"); SetPropertyAndExpectProjectXmlChangedEventToNotFire(rootElement, () => importElement.MinimumVersion = "1.0.0"); importElement.SdkReference.Name.ShouldBe("My.Sdk"); importElement.SdkReference.Version.ShouldBe("1.2.0"); importElement.SdkReference.MinimumVersion.ShouldBe("1.0.0"); rootElement.Save(env.GetTempFile(".csproj").Path); SetPropertyAndExpectProjectXmlChangedEventToNotFire(rootElement, () => importElement.Sdk = "My.Sdk"); SetPropertyAndExpectProjectXmlChangedEventToFire(rootElement, () => importElement.Sdk = "Some.Other.Sdk", "Set Import Sdk Some.Other.Sdk"); importElement.SdkReference.Name.ShouldBe("Some.Other.Sdk"); importElement.SdkReference.Version.ShouldBe("1.2.0"); importElement.SdkReference.MinimumVersion.ShouldBe("1.0.0"); rootElement.Save(); SetPropertyAndExpectProjectXmlChangedEventToFire(rootElement, () => importElement.Version = "4.0.0", "Set Import Version 4.0.0"); importElement.SdkReference.Name.ShouldBe("Some.Other.Sdk"); importElement.SdkReference.Version.ShouldBe("4.0.0"); importElement.SdkReference.MinimumVersion.ShouldBe("1.0.0"); rootElement.Save(); SetPropertyAndExpectProjectXmlChangedEventToFire(rootElement, () => importElement.MinimumVersion = "2.0.0", "Set Import Minimum Version 2.0.0"); importElement.SdkReference.Name.ShouldBe("Some.Other.Sdk"); importElement.SdkReference.Version.ShouldBe("4.0.0"); importElement.SdkReference.MinimumVersion.ShouldBe("2.0.0"); SetPropertyAndExpectProjectXmlChangedEventToFire(rootElement, () => importElement.Version = null, "Set Import Version "); importElement.SdkReference.Name.ShouldBe("Some.Other.Sdk"); importElement.SdkReference.Version.ShouldBeNull(); importElement.SdkReference.MinimumVersion.ShouldBe("2.0.0"); SetPropertyAndExpectProjectXmlChangedEventToFire(rootElement, () => importElement.MinimumVersion = null, "Set Import Minimum Version "); importElement.SdkReference.Name.ShouldBe("Some.Other.Sdk"); importElement.SdkReference.Version.ShouldBeNull(); importElement.SdkReference.MinimumVersion.ShouldBeNull(); } }
public HintPathResolver_Tests(ITestOutputHelper testOutput) { _env = TestEnvironment.Create(testOutput); }
public BuildRequestConfiguration_Tests(ITestOutputHelper testOutput) { _env = TestEnvironment.Create(testOutput); }
private void AssertBuild( string[] targets, Action <BuildResult, MockLogger> assert, bool buildDeclaredReference = false, bool buildUndeclaredReference = false, bool addContinueOnError = false, Func <string, string> projectReferenceModifier = null, Func <string, string> msbuildOnDeclaredReferenceModifier = null) { using (var env = TestEnvironment.Create()) using (var buildManager = new BuildManager()) { if (NativeMethodsShared.IsOSX) { // OSX links /var into /private, which makes Path.GetTempPath() to return "/var..." but Directory.GetCurrentDirectory to return "/private/var..." // this discrepancy fails the msbuild task enforcements due to failed path equality checks env.SetTempPath(Path.Combine(Directory.GetCurrentDirectory(), Guid.NewGuid().ToString("N")), deleteTempDirectory: true); } var projectFile = env.CreateFile().Path; var declaredReferenceFile = env.CreateFile().Path; var undeclaredReferenceFile = env.CreateFile().Path; File.WriteAllText( projectFile, string.Format( _project, projectReferenceModifier?.Invoke(declaredReferenceFile) ?? declaredReferenceFile, msbuildOnDeclaredReferenceModifier?.Invoke(declaredReferenceFile) ?? declaredReferenceFile, undeclaredReferenceFile, addContinueOnError ? "ContinueOnError='WarnAndContinue'" : string.Empty)); File.WriteAllText(declaredReferenceFile, _declaredReference); File.WriteAllText(undeclaredReferenceFile, _undeclaredReference); var logger = new MockLogger(_testOutput); // todo investigate why out of proc builds fail on macos https://github.com/Microsoft/msbuild/issues/3915 var disableInProcNode = !NativeMethodsShared.IsOSX; var buildParameters = new BuildParameters { IsolateProjects = true, Loggers = new ILogger[] { logger }, EnableNodeReuse = false, DisableInProcNode = disableInProcNode }; var rootRequest = new BuildRequestData( projectFile, new Dictionary <string, string>(), MSBuildConstants.CurrentToolsVersion, targets, null); try { buildManager.BeginBuild(buildParameters); if (buildDeclaredReference) { buildManager.BuildRequest( new BuildRequestData( declaredReferenceFile, new Dictionary <string, string>(), MSBuildConstants.CurrentToolsVersion, new[] { "DeclaredReferenceTarget" }, null)) .OverallResult.ShouldBe(BuildResultCode.Success); } if (buildUndeclaredReference) { buildManager.BuildRequest( new BuildRequestData( undeclaredReferenceFile, new Dictionary <string, string>(), MSBuildConstants.CurrentToolsVersion, new[] { "UndeclaredReferenceTarget" }, null)) .OverallResult.ShouldBe(BuildResultCode.Success); } var result = buildManager.BuildRequest(rootRequest); assert(result, logger); } finally { buildManager.EndBuild(); } } }
public GenerateBindingRedirectsTests(ITestOutputHelper output) { _output = output; _env = TestEnvironment.Create(output); }
public BuildRequestConfiguration_Tests(ITestOutputHelper testOutput) { _env = TestEnvironment.Create(testOutput); _env.DoNotLaunchDebugger(); }