summaryrefslogtreecommitdiff
path: root/mcs/class/Microsoft.Build.Engine/Test/Microsoft.Build.BuildEngine
diff options
context:
space:
mode:
Diffstat (limited to 'mcs/class/Microsoft.Build.Engine/Test/Microsoft.Build.BuildEngine')
-rw-r--r--mcs/class/Microsoft.Build.Engine/Test/Microsoft.Build.BuildEngine/BuildItemTest.cs34
-rw-r--r--mcs/class/Microsoft.Build.Engine/Test/Microsoft.Build.BuildEngine/Consts.cs44
-rw-r--r--mcs/class/Microsoft.Build.Engine/Test/Microsoft.Build.BuildEngine/TargetTest.cs84
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");
+ }
+
}
}