using System.Text;
using System.Xml;
+using Microsoft.Build.Framework;
+
namespace Microsoft.Build.BuildEngine {
public class BuildProperty {
parentProject.EvaluatedProperties.AddProperty (evaluated);
}
+ internal string ConvertToString (Project project)
+ {
+ Expression exp = new Expression ();
+ exp.Parse (Value, true, false);
+
+ return (string) exp.ConvertTo (project, typeof (string));
+ }
+
+ internal ITaskItem[] ConvertToITaskItemArray (Project project)
+ {
+ Expression exp = new Expression ();
+ exp.Parse (Value, true, false);
+
+ return (ITaskItem[]) exp.ConvertTo (project, typeof (ITaskItem[]));
+ }
+
internal bool FromXml {
get {
return propertyElement != null;
+2009-08-26 Ankit Jain <jankit@novell.com>
+
+ * BuildProperty.cs (ConvertToString): New.
+ (ConvertoToITaskItemArray): New. Parse the property value.
+ * PropertyReference.cs (ConvertToString): Use BuildProperty's
+ ConvertToString.
+ (ConvertoToITaskItemArray): Likewise.
+
2009-08-21 Ankit Jain <jankit@novell.com>
* Engine.cs (EndProjectBuild): Use the @succeeded argument
public string ConvertToString (Project project)
{
BuildProperty bp = project.EvaluatedProperties [name];
- return bp != null ? bp.FinalValue : String.Empty;
+ return bp != null ? bp.ConvertToString (project) : String.Empty;
}
public ITaskItem[] ConvertToITaskItemArray (Project project)
{
BuildProperty bp = project.EvaluatedProperties [name];
- if (bp != null) {
- List<ITaskItem> list = new List<ITaskItem> ();
- foreach (string s in bp.FinalValue.Split (new char[] {';'}, StringSplitOptions.RemoveEmptyEntries))
- list.Add (new TaskItem (s));
- return list.ToArray ();
- }
- else
- return null;
+ return bp != null ? bp.ConvertToITaskItemArray (project) : null;
}
public string Name {
+2009-08-26 Ankit Jain <jankit@novell.com>
+
+ * CreateItemTest.cs (TestVariableExpansion): New.
+ * CreatePropertyTest.cs (TestExecution2): New.
+
2009-08-24 Ankit Jain <jankit@novell.com>
* CreateCSharpManifestResourceNameTest.cs:
CheckBuildItem (include [2], "NewItem", additional_metadata, "5", "C");
}
+ [Test]
+ public void TestVariableExpansion ()
+ {
+ Engine engine;
+ Project project;
+
+ string documentString = @"
+ <Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003"">
+ <PropertyGroup>
+ <P1>FooP1</P1>
+ <P2>FooP2</P2>
+ <C>@(IG)</C>
+ <P3>@(Nine)</P3>
+ </PropertyGroup>
+ <ItemGroup>
+ <Nine Include=""Nine""/>
+ <Eight Include=""Eight""/>
+ <Seven Include=""@(Eight)""/>
+ <Six Include=""@(Seven);$(P3)""/>
+ <Third Include=""Abc""/>
+ <Fourth Include=""$(P2)""/>
+ <Second Include=""@(Third);$(P1);@(Fourth);@(Six)""/>
+ <IG Include=""@(Second)""/>
+ </ItemGroup>
+
+ <Target Name='1'>
+ <CreateItem Include='$(C)' >
+ <Output
+ TaskParameter='Include'
+ ItemName='Items'
+ />
+ </CreateItem>
+
+ <Message Text=""C: $(C)""/>
+ <Message Text=""items: @(items)""/>
+ </Target>
+ </Project>
+ ";
+
+ engine = new Engine (Consts.BinPath);
+
+ TestMessageLogger testLogger = new TestMessageLogger ();
+ engine.RegisterLogger (testLogger);
+
+ project = engine.CreateNewProject ();
+ project.LoadXml (documentString);
+ if (!project.Build ("1")) {
+ testLogger.DumpMessages ();
+ Assert.Fail ("Build failed");
+ }
+
+ BuildItemGroup include = project.GetEvaluatedItemsByName ("Items");
+ Assert.AreEqual (5, include.Count, "A2");
+
+ Assert.AreEqual ("Abc", include [0].FinalItemSpec, "A#3");
+ Assert.AreEqual ("FooP1", include[1].FinalItemSpec, "A#4");
+ Assert.AreEqual ("FooP2", include[2].FinalItemSpec, "A#5");
+ Assert.AreEqual ("Eight", include[3].FinalItemSpec, "A#6");
+ Assert.AreEqual ("Nine", include[4].FinalItemSpec, "A#7");
+
+ testLogger.CheckLoggedMessageHead ("C: Abc;FooP1;FooP2;Eight;Nine", "A#10");
+ testLogger.CheckLoggedMessageHead ("items: Abc;FooP1;FooP2;Eight;Nine", "A#10");
+
+ }
+
public static void CheckBuildItem (BuildItem item, string name, string [,] metadata, string finalItemSpec, string prefix)
{
Assert.AreEqual (name, item.Name, prefix + "#1");
Assert.AreEqual ("12", project.EvaluatedProperties ["ValueSetByTask"].Value, "A4");
Assert.AreEqual ("12", project.EvaluatedProperties ["ValueSetByTask"].FinalValue, "A5");
}
+
+ [Test]
+ public void TestExecution2 () {
+ Engine engine;
+ Project project;
+
+ string documentString = @"
+ <Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003"">
+ <ItemGroup>
+ <Second Include=""Abc""/>
+ <IG Include=""@(Second)""/></ItemGroup>
+ <PropertyGroup>
+ <C>@(IG)</C>
+ </PropertyGroup>
+ <Target Name='1'>
+ <CreateProperty Value='$(C)' >
+ <Output
+ TaskParameter='Value'
+ PropertyName='Value'
+ />
+ <Output
+ TaskParameter='ValueSetByTask'
+ PropertyName='ValueSetByTask'
+ />
+ </CreateProperty>
+ </Target>
+ </Project>
+ ";
+
+ engine = new Engine (Consts.BinPath);
+ project = engine.CreateNewProject ();
+ project.LoadXml (documentString);
+ Assert.IsTrue (project.Build ("1"), "A1");
+
+ Assert.AreEqual ("Abc", project.EvaluatedProperties["Value"].Value, "A2");
+ Assert.AreEqual ("Abc", project.EvaluatedProperties["Value"].FinalValue, "A3");
+ Assert.AreEqual ("Abc", project.EvaluatedProperties["ValueSetByTask"].Value, "A4");
+ Assert.AreEqual ("Abc", project.EvaluatedProperties["ValueSetByTask"].FinalValue, "A5");
+ Assert.AreEqual ("@(IG)", project.EvaluatedProperties["C"].FinalValue, "A6");
+ }
+
}
}