X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mcs%2Fclass%2FMicrosoft.Build.Engine%2FTest%2FMicrosoft.Build.BuildEngine%2FTargetTest.cs;h=d36ae158701c0db1fa8a9243e154b77e399d63bd;hb=c265b8f9b2d6fe70cb8d5d3b792c669f5a6e1a2a;hp=2cced758f0500df01a85ad1a717b5bb81b709a68;hpb=e946a6cdebde729e1c03ec374184254ab38da184;p=mono.git
diff --git a/mcs/class/Microsoft.Build.Engine/Test/Microsoft.Build.BuildEngine/TargetTest.cs b/mcs/class/Microsoft.Build.Engine/Test/Microsoft.Build.BuildEngine/TargetTest.cs
index 2cced758f05..d36ae158701 100644
--- a/mcs/class/Microsoft.Build.Engine/Test/Microsoft.Build.BuildEngine/TargetTest.cs
+++ b/mcs/class/Microsoft.Build.Engine/Test/Microsoft.Build.BuildEngine/TargetTest.cs
@@ -40,6 +40,7 @@ namespace MonoTests.Microsoft.Build.BuildEngine {
[TestFixture]
public class TargetTest {
+ static bool isMono = Type.GetType ("Mono.Runtime", false) != null;
Engine engine;
Project project;
@@ -284,6 +285,51 @@ namespace MonoTests.Microsoft.Build.BuildEngine {
t [0].RemoveTask (null);
}
+ [Test]
+ public void TestRunTargetTwice ()
+ {
+ string documentString = @"
+
+
+
+
+
+
+
+ ";
+
+ var filepath = Path.GetTempFileName ();
+ try {
+ File.WriteAllText (filepath, documentString);
+
+ var engine = new Engine (Consts.BinPath);
+ var project = engine.CreateNewProject ();
+ project.Load (filepath);
+
+ var logger = new TestMessageLogger ();
+ engine.RegisterLogger (logger);
+
+ var result = project.Build ("Main");
+ if (!result) {
+ logger.DumpMessages ();
+ Assert.Fail ("Build failed, see the logs");
+ }
+
+ Assert.AreEqual(1, logger.NormalMessageCount, "Expected number of messages");
+ logger.CheckLoggedMessageHead ("Foo ran", "A1");
+
+ Assert.AreEqual(0, logger.NormalMessageCount, "Extra messages found");
+ Assert.AreEqual(0, logger.WarningMessageCount, "Extra warning messages found");
+
+ Assert.AreEqual(2, logger.TargetStarted, "TargetStarted count");
+ Assert.AreEqual(2, logger.TargetFinished, "TargetFinished count");
+
+ Assert.IsTrue (result);
+ } finally {
+ File.Delete (filepath);
+ }
+ }
+
[Test]
public void TestTargetOutputs1 ()
{
@@ -349,19 +395,18 @@ namespace MonoTests.Microsoft.Build.BuildEngine {
}
}
-#if NET_3_5
bool Build (string projectXml, ILogger logger)
{
- if (Environment.OSVersion.Platform == PlatformID.Win32NT) {
+ if (!isMono) {
var reader = new StringReader (projectXml);
var xml = XmlReader.Create (reader);
- return BuildOnWindows (xml, logger);
+ return BuildOnDotNet (xml, logger);
} else {
- return BuildOnLinux (projectXml, logger);
+ return BuildOnMono (projectXml, logger);
}
}
- bool BuildOnWindows (XmlReader reader, ILogger logger)
+ bool BuildOnDotNet (XmlReader reader, ILogger logger)
{
var type = Type.GetType ("Microsoft.Build.Evaluation.ProjectCollection, Microsoft.Build, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a");
@@ -377,7 +422,7 @@ namespace MonoTests.Microsoft.Build.BuildEngine {
return ret;
}
- bool BuildOnLinux (string projectXml, ILogger logger)
+ bool BuildOnMono (string projectXml, ILogger logger)
{
var engine = new Engine (Consts.BinPath);
var project = engine.CreateNewProject ();
@@ -402,6 +447,11 @@ namespace MonoTests.Microsoft.Build.BuildEngine {
}
void ItemGroupInsideTarget (string xml, params string[] messages)
+ {
+ ItemGroupInsideTarget (xml, 1, messages);
+ }
+
+ void ItemGroupInsideTarget (string xml, int expectedTargetCount, params string[] messages)
{
var logger = CreateLogger (xml);
@@ -411,9 +461,10 @@ namespace MonoTests.Microsoft.Build.BuildEngine {
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");
}
@@ -692,6 +743,33 @@ namespace MonoTests.Microsoft.Build.BuildEngine {
", "D");
}
+ [Test]
+ public void ItemGroupInsideTarget_UpdateMetadata ()
+ {
+ ItemGroupInsideTarget (
+ @"
+
+
+
+
+
+
+
+
+ A=b
+
+
+
+
+
+
+
+ Bar01
+
+
+ ", 2, "Before: Bar01", "After: Bar01");
+ }
+
[Test]
public void ItemGroupInsideTarget_Batching ()
{
@@ -727,7 +805,59 @@ namespace MonoTests.Microsoft.Build.BuildEngine {
", "Sun", "Rain");
}
- #endif
+
+ [Test]
+ public void PropertyGroupInsideTarget_Condition ()
+ {
+ ItemGroupInsideTarget (
+ @"
+
+
+
+
+
+
+ true
+
+
+
+
+
+
+
+ ", "Rain");
+ }
+
+ [Test]
+ // Bug #14661
+ public void ItemGroupInsideTarget_Expression_in_Metadata ()
+ {
+ ItemGroupInsideTarget (
+ @"
+
+
+ input1a;input1b
+
+
+ input2a;input2b
+
+
+
+
+
+
+
+
+
+ <_Foo Include='%(Foo.Inputs)'>
+ %(Foo.Identity)
+
+
+
+ ",
+ 3, "COMPILE: input1a;input1b - output1", "COMPILE: input2a;input2b - output2");
+ }
+
[Test]
public void TestTargetOutputsIncludingMetadata ()
@@ -848,7 +978,6 @@ namespace MonoTests.Microsoft.Build.BuildEngine {
Assert.AreEqual (0, logger.NormalMessageCount, "Unexpected extra messages found");
}
-#if NET_4_0
[Test]
[Category ("NotDotNet")]
public void TestBeforeAndAfterTargets ()
@@ -903,7 +1032,27 @@ namespace MonoTests.Microsoft.Build.BuildEngine {
//warnings for referencing unknown targets: NonExistant and Foo
Assert.AreEqual (2, logger.WarningsCount, "Expected warnings not raised");
}
-#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");
+ }
}
}