public void TestMultipleMetadataReference2() { string projectString = @"<Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003""> <ItemGroup> <GroupA Include=""file1.txt""/> <GroupA Include=""file2.txt""/> <GroupA Include=""file3.txt""/> <GroupA Include=""file3.txt""/> <GroupA Include=""file4.txt""/> </ItemGroup> <ItemGroup> <GroupB Include=""file1.txt""/> <GroupB Include=""file3.txt""/> <GroupB Include=""file5.txt""/> <GroupC Include=""PreExistingValue""/> </ItemGroup> <Target Name=""Build""> <CreateItem Include=""@(GroupA)"" Condition=""'%(Identity)' != '' and '@(GroupA)' != '' and '@(GroupB)' != ''"" > <Output TaskParameter=""Include"" ItemName=""GroupC""/> </CreateItem> <Message Text=""%(GroupC.Identity)""/> </Target> </Project>" ; Engine engine = new Engine(Consts.BinPath); Project project = engine.CreateNewProject(); TestMessageLogger testLogger = new TestMessageLogger(); engine.RegisterLogger(testLogger); project.LoadXml(projectString); Assert.IsTrue(project.Build("Build"), "A1: Build failed"); BuildItemGroup include = project.GetEvaluatedItemsByName("GroupC"); Assert.AreEqual(4, include.Count, "A2"); string [,] additional_metadata = new string [, ] { { "Identity", "PreExistingValue" } }; CreateItemTest.CheckBuildItem(include [0], "GroupC", additional_metadata, "PreExistingValue", "A3"); additional_metadata = new string [, ] { { "Identity", "file1.txt" } }; CreateItemTest.CheckBuildItem(include [1], "GroupC", additional_metadata, "file1.txt", "A4"); additional_metadata = new string [, ] { { "Identity", "file3.txt" } }; CreateItemTest.CheckBuildItem(include [2], "GroupC", additional_metadata, "file3.txt", "A5"); CreateItemTest.CheckBuildItem(include [3], "GroupC", additional_metadata, "file3.txt", "A6"); CheckEngineEventCounts(testLogger, 1, 1, 5, 5); }
public void TestFilter() { string projectString = @"<Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003""> <ItemGroup> <fruit Include=""apple""> <consistency>firm</consistency> </fruit> <fruit Include=""orange""> <consistency>pulpy</consistency> </fruit> <fruit Include=""banana""> <consistency>softish</consistency> </fruit> <fruit Include=""pear""> <consistency>unsound</consistency> </fruit> <fruit Include=""apricot""> <consistency>unsound</consistency> </fruit> </ItemGroup> <Target Name=""Compost""> <CreateItem Include=""@(fruit)"" Condition=""'%(consistency)' == 'pulpy' or '%(consistency)' == 'unsound' ""> <Output TaskParameter=""Include"" ItemName=""Final""/> </CreateItem> </Target> </Project>" ; Engine engine = new Engine(Consts.BinPath); Project project = engine.CreateNewProject(); TestMessageLogger testLogger = new TestMessageLogger(); engine.RegisterLogger(testLogger); project.LoadXml(projectString); Assert.IsTrue(project.Build("Compost"), "A1: Build failed"); BuildItemGroup include = project.GetEvaluatedItemsByName("Final"); Assert.AreEqual(3, include.Count, "A2"); string [,] additional_metadata = new string [, ] { { "Identity", "orange" } }; CreateItemTest.CheckBuildItem(include [0], "Final", additional_metadata, "orange", "A3"); additional_metadata = new string [, ] { { "Identity", "pear" } }; CreateItemTest.CheckBuildItem(include [1], "Final", additional_metadata, "pear", "A4"); additional_metadata = new string [, ] { { "Identity", "apricot" } }; CreateItemTest.CheckBuildItem(include [2], "Final", additional_metadata, "apricot", "A5"); CheckEngineEventCounts(testLogger, 1, 1, 2, 2); }