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"); + } } }