diff options
Diffstat (limited to 'mcs/class/Microsoft.Build.Engine/Test/Microsoft.Build.BuildEngine')
3 files changed, 152 insertions, 10 deletions
diff --git a/mcs/class/Microsoft.Build.Engine/Test/Microsoft.Build.BuildEngine/BuildItemTest.cs b/mcs/class/Microsoft.Build.Engine/Test/Microsoft.Build.BuildEngine/BuildItemTest.cs index e580d358ed..918c3ff8ae 100644 --- a/mcs/class/Microsoft.Build.Engine/Test/Microsoft.Build.BuildEngine/BuildItemTest.cs +++ b/mcs/class/Microsoft.Build.Engine/Test/Microsoft.Build.BuildEngine/BuildItemTest.cs @@ -285,6 +285,40 @@ namespace MonoTests.Microsoft.Build.BuildEngine { } [Test] + public void GetMetadata_UnescapedItemSpec () + { + string itemInclude = "a;b;c"; + string escapedItemInclude = Utilities.Escape (itemInclude); + + item = new BuildItem ("name", itemInclude); + Assert.IsTrue (item.GetMetadata ("FullPath").EndsWith (escapedItemInclude), "#1a"); + Assert.IsTrue (item.GetEvaluatedMetadata ("FullPath").EndsWith (itemInclude), "#1b"); + + Assert.AreEqual (itemInclude, item.GetMetadata ("FileName"), "#2b"); + Assert.AreEqual (itemInclude, item.GetEvaluatedMetadata ("FileName"), "#2b"); + + Assert.AreEqual (itemInclude, item.GetMetadata ("Identity"), "#3a"); + Assert.AreEqual (itemInclude, item.GetEvaluatedMetadata ("Identity"), "#3b"); + } + + [Test] + public void GetMetadata_EscapedItemSpec () + { + string itemInclude = "a;b;c"; + string escapedItemInclude = Utilities.Escape (itemInclude); + + item = new BuildItem ("name", escapedItemInclude); + Assert.IsTrue (item.GetMetadata ("FullPath").EndsWith (escapedItemInclude), "#1a"); + Assert.IsTrue (item.GetEvaluatedMetadata ("FullPath").EndsWith (itemInclude), "#1b"); + + Assert.AreEqual (escapedItemInclude, item.GetMetadata ("FileName"), "#2b"); + Assert.AreEqual (itemInclude, item.GetEvaluatedMetadata ("FileName"), "#2b"); + + Assert.AreEqual (escapedItemInclude, item.GetMetadata ("Identity"), "#3a"); + Assert.AreEqual ("a;b;c", item.GetEvaluatedMetadata ("Identity"), "#3b"); + } + + [Test] [ExpectedException (typeof (ArgumentNullException))] public void TestGetMetadata2 () { diff --git a/mcs/class/Microsoft.Build.Engine/Test/Microsoft.Build.BuildEngine/Consts.cs b/mcs/class/Microsoft.Build.Engine/Test/Microsoft.Build.BuildEngine/Consts.cs index 31a160850a..8db3be70a9 100644 --- a/mcs/class/Microsoft.Build.Engine/Test/Microsoft.Build.BuildEngine/Consts.cs +++ b/mcs/class/Microsoft.Build.Engine/Test/Microsoft.Build.BuildEngine/Consts.cs @@ -38,16 +38,42 @@ public static class Consts { public static string BinPath { get { - if (RunningOnMono ()) - return "../../tools/xbuild/xbuild"; - else + if (RunningOnMono ()) { +#if XBUILD_12 + string profile = "xbuild_12"; +#elif NET_4_5 + string profile = "net_4_5"; +#elif NET_4_0 + string profile = "net_4_0"; +#elif NET_3_5 + string profile = "net_3_5"; +#else + string profile = "net_2_0"; +#endif + var corlib = typeof (object).Assembly.Location; + var lib = Path.GetDirectoryName (Path.GetDirectoryName (corlib)); + return Path.Combine (lib, profile); + } else { +#if XBUILD_12 + return ToolLocationHelper.GetPathToBuildTools ("12.0"); +#elif NET_4_5 + return ToolLocationHelper.GetPathToDotNetFramework (TargetDotNetFrameworkVersion.Version45); +#elif NET_4_0 + return ToolLocationHelper.GetPathToDotNetFramework (TargetDotNetFrameworkVersion.Version40); +#elif NET_3_5 + return ToolLocationHelper.GetPathToDotNetFramework (TargetDotNetFrameworkVersion.Version35); +#else return ToolLocationHelper.GetPathToDotNetFramework (TargetDotNetFrameworkVersion.Version20); +#endif + } } } public static string ToolsVersionString { get { -#if NET_4_0 +#if XBUILD_12 + return " ToolsVersion='12.0'"; +#elif NET_4_0 return " ToolsVersion='4.0'"; #elif NET_3_5 return " ToolsVersion='3.5'"; @@ -59,12 +85,14 @@ public static class Consts { public static string GetTasksAsmPath () { -#if NET_4_0 - return Path.Combine (ToolLocationHelper.GetPathToDotNetFramework (TargetDotNetFrameworkVersion.Version40), "Microsoft.Build.Tasks.v4.0.dll"); +#if XBUILD_12 + return Path.Combine (BinPath, "Microsoft.Build.Tasks.v12.0.dll"); +#elif NET_4_0 + return Path.Combine (BinPath, "Microsoft.Build.Tasks.v4.0.dll"); #elif NET_3_5 - return Path.Combine (ToolLocationHelper.GetPathToDotNetFramework (TargetDotNetFrameworkVersion.Version35), "Microsoft.Build.Tasks.v3.5.dll"); + return Path.Combine (BinPath, "Microsoft.Build.Tasks.v3.5.dll"); #else - return Path.Combine (ToolLocationHelper.GetPathToDotNetFramework (TargetDotNetFrameworkVersion.Version20), "Microsoft.Build.Tasks.dll"); + return Path.Combine (BinPath, "Microsoft.Build.Tasks.dll"); #endif } } 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 2cced758f0..738cd2a258 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 @@ -403,6 +403,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); try @@ -411,9 +416,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"); } @@ -727,6 +733,59 @@ namespace MonoTests.Microsoft.Build.BuildEngine { </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] @@ -905,5 +964,26 @@ namespace MonoTests.Microsoft.Build.BuildEngine { } #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"); + } + } } |