var type = Type.GetType ("Microsoft.Build.Evaluation.ProjectCollection, Microsoft.Build, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a");
var prop = type.GetProperty ("GlobalProjectCollection");
- var coll = prop.GetValue (null);
+ var coll = prop.GetValue (null, null);
var loadProject = coll.GetType ().GetMethod (
"LoadProject", new Type[] { typeof (XmlReader), typeof (string) });
}
void ItemGroupInsideTarget (string xml, params string[] messages)
+ {
+ ItemGroupInsideTarget (xml, 1, messages);
+ }
+
+ void ItemGroupInsideTarget (string xml, int expectedTargetCount, params string[] messages)
{
var logger = CreateLogger (xml);
for (int i = 0; i < messages.Length; i++)
logger.CheckLoggedMessageHead (messages [i], i.ToString ());
Assert.AreEqual(0, logger.NormalMessageCount, "Extra messages found");
+ Assert.AreEqual(0, logger.WarningMessageCount, "Extra warningmessages found");
- Assert.AreEqual(1, logger.TargetStarted, "TargetStarted count");
- Assert.AreEqual(1, logger.TargetFinished, "TargetFinished count");
+ Assert.AreEqual(expectedTargetCount, logger.TargetStarted, "TargetStarted count");
+ Assert.AreEqual(expectedTargetCount, logger.TargetFinished, "TargetFinished count");
Assert.AreEqual(messages.Length, logger.TaskStarted, "TaskStarted count");
Assert.AreEqual(messages.Length, logger.TaskFinished, "TaskFinished count");
}
</Project>", "D");
}
-#endif
+ [Test]
+ public void ItemGroupInsideTarget_Batching ()
+ {
+ ItemGroupInsideTarget (
+ @"<Project ToolsVersion=""4.0"" xmlns=""http://schemas.microsoft.com/developer/msbuild/2003"">
+ <Target Name='Main'>
+ <ItemGroup>
+ <Foo Include='A;B' />
+ <All Include='%(Foo.Identity)' />
+ </ItemGroup>
+ <Message Text='%(All.Identity)' />
+ </Target>
+ </Project>", "A", "B");
+ }
+
+ [Test]
+ public void ItemGroupInsideTarget_Condition ()
+ {
+ ItemGroupInsideTarget (
+ @"<Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003"" ToolsVersion=""4.0"">
+ <PropertyGroup>
+ <Summer>true</Summer>
+ </PropertyGroup>
+ <ItemGroup>
+ <Weather Include='Sun;Rain' />
+ </ItemGroup>
+
+ <Target Name='Main'>
+ <ItemGroup Condition=""'$(Summer)' != 'true'"">
+ <Weather Include='Snow' />
+ </ItemGroup>
+ <Message Text='%(Weather.Identity)' />
+ </Target>
+ </Project>", "Sun", "Rain");
+ }
+
+ [Test]
+ public void PropertyGroupInsideTarget_Condition ()
+ {
+ ItemGroupInsideTarget (
+ @"<Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003"" ToolsVersion=""4.0"">
+ <ItemGroup>
+ <Shells Include=""/bin/sh;/bin/bash;/bin/false"" />
+ </ItemGroup>
+
+ <Target Name='Main'>
+ <PropertyGroup>
+ <HasBash Condition=""'%(Shells.Filename)' == 'bash'"">true</HasBash>
+ </PropertyGroup>
+
+ <ItemGroup Condition=""'$(HasBash)' == 'true'"">
+ <Weather Include='Rain' />
+ </ItemGroup>
+ <Message Text='%(Weather.Identity)' />
+ </Target>
+ </Project>", "Rain");
+ }
+
+ [Test]
+ // Bug #14661
+ public void ItemGroupInsideTarget_Expression_in_Metadata ()
+ {
+ ItemGroupInsideTarget (
+ @"<Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003"" ToolsVersion=""4.0"">
+ <ItemGroup>
+ <Foo Include='output1'>
+ <Inputs>input1a;input1b</Inputs>
+ </Foo>
+ <Foo Include='output2'>
+ <Inputs>input2a;input2b</Inputs>
+ </Foo>
+ </ItemGroup>
+
+ <Target Name='Main' DependsOnTargets='_PrepareItems' Inputs='@(_Foo)' Outputs='%(Result)'>
+ <Message Text='COMPILE: @(_Foo) - %(_Foo.Result)' />
+ </Target>
+
+ <Target Name='_PrepareItems'>
+ <ItemGroup>
+ <_Foo Include='%(Foo.Inputs)'>
+ <Result>%(Foo.Identity)</Result>
+ </_Foo>
+ </ItemGroup>
+ </Target>
+ </Project>",
+ 3, "COMPILE: input1a;input1b - output1", "COMPILE: input2a;input2b - output2");
+ }
+
+ #endif
[Test]
public void TestTargetOutputsIncludingMetadata ()
}
#endif
+ [Test]
+ public void TestTargetReturns ()
+ {
+ engine = new Engine (Consts.BinPath);
+ project = engine.CreateNewProject ();
+ project.Load (Path.Combine ("Test", Path.Combine ("resources", "TestReturns.csproj")));
+
+ var logger = new TestMessageLogger ();
+ engine.RegisterLogger (logger);
+
+ bool result = project.Build ("Main");
+ if (!result) {
+ logger.DumpMessages ();
+ Assert.Fail ("Build failed");
+ }
+
+ logger.CheckLoggedMessageHead ("Result: Bar", "A1");
+
+ Assert.AreEqual (0, logger.NormalMessageCount, "Unexpected extra messages found");
+ }
+
}
}