public void BatchingConsidersItemDefinitionMetadata() { string content = ObjectModelHelpers.CleanupFileContents( @"<Project ToolsVersion=""msbuilddefaulttoolsversion"" xmlns=""msbuildnamespace""> <ItemDefinitionGroup> <i> <m>m1</m> </i> </ItemDefinitionGroup> <ItemGroup> <i Include='a.foo;a.bar'/> </ItemGroup> <Target Name='t'> <Message Text='@(i)/%(m)'/> </Target> </Project>"); Project project = new Project(XmlReader.Create(new StringReader(content))); MockLogger logger = new MockLogger(); List <ILogger> loggers = new List <ILogger>() { logger }; Assert.Equal(true, project.Build(loggers)); logger.AssertLogContains("a.foo;a.bar/m1"); logger.AssertNoErrors(); logger.AssertNoWarnings(); }
/********************************************************************************* * * Helpers * *********************************************************************************/ /// <summary> /// Helper method for validating the setting of defining project metadata on items /// coming from task outputs /// </summary> private void ValidateDefiningProjectMetadataOnTaskOutputsHelper(string customTaskPath) { string projectAPath = Path.Combine(ObjectModelHelpers.TempProjectDir, "a.proj"); string projectBPath = Path.Combine(ObjectModelHelpers.TempProjectDir, "b.proj"); string projectAContents = @" <Project xmlns=`msbuildnamespace` ToolsVersion=`msbuilddefaulttoolsversion`> <UsingTask TaskName=`ItemCreationTask` AssemblyFile=`" + customTaskPath + @"` /> <Import Project=`b.proj` /> <Target Name=`Run`> <ItemCreationTask InputItemsToPassThrough=`@(PassThrough)` InputItemsToCopy=`@(Copy)`> <Output TaskParameter=`OutputString` ItemName=`A` /> <Output TaskParameter=`PassedThroughOutputItems` ItemName=`B` /> <Output TaskParameter=`CreatedOutputItems` ItemName=`C` /> <Output TaskParameter=`CopiedOutputItems` ItemName=`D` /> </ItemCreationTask> <Warning Text=`A is wrong: EXPECTED: [a] ACTUAL: [%(A.DefiningProjectName)]` Condition=`'%(A.DefiningProjectName)' != 'a'` /> <Warning Text=`B is wrong: EXPECTED: [a] ACTUAL: [%(B.DefiningProjectName)]` Condition=`'%(B.DefiningProjectName)' != 'a'` /> <Warning Text=`C is wrong: EXPECTED: [a] ACTUAL: [%(C.DefiningProjectName)]` Condition=`'%(C.DefiningProjectName)' != 'a'` /> <Warning Text=`D is wrong: EXPECTED: [a] ACTUAL: [%(D.DefiningProjectName)]` Condition=`'%(D.DefiningProjectName)' != 'a'` /> </Target> </Project> "; string projectBContents = @" <Project xmlns=`msbuildnamespace` ToolsVersion=`msbuilddefaulttoolsversion`> <ItemGroup> <PassThrough Include=`aaa.cs` /> <Copy Include=`bbb.cs` /> </ItemGroup> </Project> "; try { File.WriteAllText(projectAPath, ObjectModelHelpers.CleanupFileContents(projectAContents)); File.WriteAllText(projectBPath, ObjectModelHelpers.CleanupFileContents(projectBContents)); MockLogger logger = new MockLogger(_testOutput); ObjectModelHelpers.BuildTempProjectFileExpectSuccess("a.proj", logger); logger.AssertNoWarnings(); } finally { if (File.Exists(projectAPath)) { File.Delete(projectAPath); } if (File.Exists(projectBPath)) { File.Delete(projectBPath); } } }
private void VerifyBuildMessageEvent(MockLogger logger) { BuildMessageEventArgs actualEvent = logger.BuildMessageEvents.FirstOrDefault(i => i.Message.Equals(ExpectedEventMessage)); Assert.NotNull(actualEvent); Assert.Equal(ExpectedEventCode, actualEvent.Code); logger.AssertNoErrors(); logger.AssertNoWarnings(); }
public void TestDefiningProjectMetadata() { string projectA = Path.Combine(ObjectModelHelpers.TempProjectDir, "a.proj"); string projectB = Path.Combine(ObjectModelHelpers.TempProjectDir, "b.proj"); string includeFileA = Path.Combine(ObjectModelHelpers.TempProjectDir, "aaa4.cs"); string includeFileB = Path.Combine(ObjectModelHelpers.TempProjectDir, "bbb4.cs"); string contentsA = @"<?xml version=`1.0` encoding=`utf-8`?> <Project ToolsVersion=`msbuilddefaulttoolsversion` DefaultTargets=`Validate` xmlns=`msbuildnamespace`> <ItemGroup> <A Include=`aaaa.cs` /> <A2 Include=`aaa2.cs` /> <A2 Include=`aaa3.cs`> <Foo>Bar</Foo> </A2> </ItemGroup> <Import Project=`b.proj` /> <ItemGroup> <E Include=`@(C)` /> <F Include=`@(C);@(C2)` /> <G Include=`@(C->'%(Filename)')` /> <H Include=`@(C2->WithMetadataValue('Foo', 'Bar'))` /> <U Include=`*4.cs` /> </ItemGroup> <Target Name=`AddFromMainProject`> <ItemGroup> <B Include=`bbbb.cs` /> <I Include=`@(C)` /> <J Include=`@(C);@(C2)` /> <K Include=`@(C->'%(Filename)')` /> <L Include=`@(C2->WithMetadataValue('Foo', 'Bar'))` /> <V Include=`*4.cs` /> </ItemGroup> </Target> <Target Name=`Validate` DependsOnTargets=`AddFromMainProject;AddFromImport`> <Warning Text=`A is wrong: EXPECTED: [a] ACTUAL: [%(A.DefiningProjectName)]` Condition=`'%(A.DefiningProjectName)' != 'a'` /> <Warning Text=`B is wrong: EXPECTED: [a] ACTUAL: [%(B.DefiningProjectName)]` Condition=`'%(B.DefiningProjectName)' != 'a'` /> <Warning Text=`C is wrong: EXPECTED: [b] ACTUAL: [%(C.DefiningProjectName)]` Condition=`'%(C.DefiningProjectName)' != 'b'` /> <Warning Text=`D is wrong: EXPECTED: [b] ACTUAL: [%(D.DefiningProjectName)]` Condition=`'%(D.DefiningProjectName)' != 'b'` /> <Warning Text=`E is wrong: EXPECTED: [a] ACTUAL: [%(E.DefiningProjectName)]` Condition=`'%(E.DefiningProjectName)' != 'a'` /> <Warning Text=`F is wrong: EXPECTED: [a] ACTUAL: [%(F.DefiningProjectName)]` Condition=`'%(F.DefiningProjectName)' != 'a'` /> <Warning Text=`G is wrong: EXPECTED: [a] ACTUAL: [%(G.DefiningProjectName)]` Condition=`'%(G.DefiningProjectName)' != 'a'` /> <Warning Text=`H is wrong: EXPECTED: [a] ACTUAL: [%(H.DefiningProjectName)]` Condition=`'%(H.DefiningProjectName)' != 'a'` /> <Warning Text=`I is wrong: EXPECTED: [a] ACTUAL: [%(I.DefiningProjectName)]` Condition=`'%(I.DefiningProjectName)' != 'a'` /> <Warning Text=`J is wrong: EXPECTED: [a] ACTUAL: [%(J.DefiningProjectName)]` Condition=`'%(J.DefiningProjectName)' != 'a'` /> <Warning Text=`K is wrong: EXPECTED: [a] ACTUAL: [%(K.DefiningProjectName)]` Condition=`'%(K.DefiningProjectName)' != 'a'` /> <Warning Text=`L is wrong: EXPECTED: [a] ACTUAL: [%(L.DefiningProjectName)]` Condition=`'%(L.DefiningProjectName)' != 'a'` /> <Warning Text=`M is wrong: EXPECTED: [b] ACTUAL: [%(M.DefiningProjectName)]` Condition=`'%(M.DefiningProjectName)' != 'b'` /> <Warning Text=`N is wrong: EXPECTED: [b] ACTUAL: [%(N.DefiningProjectName)]` Condition=`'%(N.DefiningProjectName)' != 'b'` /> <Warning Text=`O is wrong: EXPECTED: [b] ACTUAL: [%(O.DefiningProjectName)]` Condition=`'%(O.DefiningProjectName)' != 'b'` /> <Warning Text=`P is wrong: EXPECTED: [b] ACTUAL: [%(P.DefiningProjectName)]` Condition=`'%(P.DefiningProjectName)' != 'b'` /> <Warning Text=`Q is wrong: EXPECTED: [b] ACTUAL: [%(Q.DefiningProjectName)]` Condition=`'%(Q.DefiningProjectName)' != 'b'` /> <Warning Text=`R is wrong: EXPECTED: [b] ACTUAL: [%(R.DefiningProjectName)]` Condition=`'%(R.DefiningProjectName)' != 'b'` /> <Warning Text=`S is wrong: EXPECTED: [b] ACTUAL: [%(S.DefiningProjectName)]` Condition=`'%(S.DefiningProjectName)' != 'b'` /> <Warning Text=`T is wrong: EXPECTED: [b] ACTUAL: [%(T.DefiningProjectName)]` Condition=`'%(T.DefiningProjectName)' != 'b'` /> <Warning Text=`U is wrong: EXPECTED: [a] ACTUAL: [%(U.DefiningProjectName)]` Condition=`'%(U.DefiningProjectName)' != 'a'` /> <Warning Text=`V is wrong: EXPECTED: [a] ACTUAL: [%(V.DefiningProjectName)]` Condition=`'%(V.DefiningProjectName)' != 'a'` /> <Warning Text=`W is wrong: EXPECTED: [b] ACTUAL: [%(W.DefiningProjectName)]` Condition=`'%(W.DefiningProjectName)' != 'b'` /> <Warning Text=`X is wrong: EXPECTED: [b] ACTUAL: [%(X.DefiningProjectName)]` Condition=`'%(X.DefiningProjectName)' != 'b'` /> </Target> </Project>"; string contentsB = @"<?xml version=`1.0` encoding=`utf-8`?> <Project ToolsVersion=`msbuilddefaulttoolsversion` xmlns=`msbuildnamespace`> <ItemGroup> <C Include=`cccc.cs` /> <C2 Include=`ccc2.cs` /> <C2 Include=`ccc3.cs`> <Foo>Bar</Foo> </C2> <M Include=`@(A)` /> <N Include=`@(A);@(A2)` /> <O Include=`@(A->'%(Filename)')` /> <P Include=`@(A2->WithMetadataValue('Foo', 'Bar'))` /> <W Include=`*4.cs` /> </ItemGroup> <Target Name=`AddFromImport`> <ItemGroup> <D Include=`dddd.cs` /> <Q Include=`@(A)` /> <R Include=`@(A);@(A2)` /> <S Include=`@(A->'%(Filename)')` /> <T Include=`@(A2->WithMetadataValue('Foo', 'Bar'))` /> <X Include=`*4.cs` /> </ItemGroup> </Target> </Project>"; try { File.WriteAllText(projectA, ObjectModelHelpers.CleanupFileContents(contentsA)); File.WriteAllText(projectB, ObjectModelHelpers.CleanupFileContents(contentsB)); File.WriteAllText(includeFileA, "aaaaaaa"); File.WriteAllText(includeFileB, "bbbbbbb"); MockLogger logger = new MockLogger(_testOutput); ObjectModelHelpers.BuildTempProjectFileExpectSuccess("a.proj", logger); logger.AssertNoWarnings(); } finally { if (File.Exists(projectA)) { File.Delete(projectA); } if (File.Exists(projectB)) { File.Delete(projectB); } if (File.Exists(includeFileA)) { File.Delete(includeFileA); } if (File.Exists(includeFileB)) { File.Delete(includeFileB); } } }
public void OneSubmissionTwoLoggers() { string projectBody = ObjectModelHelpers.CleanupFileContents(@" <Project ToolsVersion='msbuilddefaulttoolsversion' xmlns='msbuildnamespace'> <Target Name='Test'> <Message Text='Foo'/> <Error Text='Error'/> </Target> </Project> "); ProjectInstance project = (new Project(XmlReader.Create(new StringReader(projectBody)))).CreateProjectInstance(); BuildManager buildManager = BuildManager.DefaultBuildManager; MuxLogger muxLogger = new MuxLogger(); BuildParameters parameters = new BuildParameters(ProjectCollection.GlobalProjectCollection); parameters.Loggers = new ILogger[] { muxLogger }; MockLogger mockLogger1 = new MockLogger(); MockLogger mockLogger2 = new MockLogger(); buildManager.BeginBuild(parameters); try { BuildSubmission submission = buildManager.PendBuildRequest(new BuildRequestData(project, new string[0], null)); muxLogger.RegisterLogger(submission.SubmissionId, mockLogger1); muxLogger.RegisterLogger(submission.SubmissionId, mockLogger2); submission.Execute(); } finally { buildManager.EndBuild(); } mockLogger1.AssertLogContains("Foo"); mockLogger1.AssertLogContains("Error"); Assert.Equal(1, mockLogger1.ErrorCount); mockLogger1.AssertNoWarnings(); mockLogger2.AssertLogContains("Foo"); mockLogger2.AssertLogContains("Error"); Assert.Equal(1, mockLogger2.ErrorCount); mockLogger2.AssertNoWarnings(); Assert.Equal(mockLogger1.FullLog, mockLogger2.FullLog); }
public void BatchingConsidersItemDefinitionMetadata() { string content = ObjectModelHelpers.CleanupFileContents( @"<Project ToolsVersion=""msbuilddefaulttoolsversion"" xmlns=""msbuildnamespace""> <ItemDefinitionGroup> <i> <m>m1</m> </i> </ItemDefinitionGroup> <ItemGroup> <i Include='a.foo;a.bar'/> </ItemGroup> <Target Name='t'> <Message Text='@(i)/%(m)'/> </Target> </Project>"); Project project = new Project(XmlReader.Create(new StringReader(content))); MockLogger logger = new MockLogger(); List<ILogger> loggers = new List<ILogger>() { logger }; Assert.Equal(true, project.Build(loggers)); logger.AssertLogContains("a.foo;a.bar/m1"); logger.AssertNoErrors(); logger.AssertNoWarnings(); }