}
[Test]
- [Category ("NotWorking")]
public void TestCondition4 ()
{
Engine engine = new Engine (Consts.BinPath);
Assert.IsNull (proj.EvaluatedProperties ["F"], "A4");
}
+ [Test]
+ [Category ("NotWorking")]
+ public void TestCondition7 ()
+ {
+ Engine engine = new Engine (Consts.BinPath);
+ Project proj = engine.CreateNewProject ();
+
+ string documentString = @"
+ <Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003"">
+ <PropertyGroup>
+ <A>true</A>
+ </PropertyGroup>
+ <ItemGroup>
+ <B Include='true' />
+ <C Include='true;false' />
+ </ItemGroup>
+
+ <Target Name='1'>
+ <Message Text='a' Condition='$(A)' />
+ <Message Text='b' Condition='@(B)' />
+ <Message Text='c' Condition='%(C.Filename)' />
+ </Target>
+ </Project>
+ ";
+
+ proj.LoadXml (documentString);
+ Assert.IsTrue (proj.Build ("1"), "A1");
+ }
+
+ [Test]
+ public void TestCondition8 ()
+ {
+ Engine engine = new Engine (Consts.BinPath);
+ Project proj = engine.CreateNewProject ();
+
+ string documentString = @"
+ <Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003"">
+ <PropertyGroup>
+ <A Condition='true == true'></A>
+ <B Condition='true != true'></B>
+ <C Condition='false == false'></C>
+ <D Condition='false != false'></D>
+ <E Condition='true != false'></E>
+ </PropertyGroup>
+ </Project>
+ ";
+
+ proj.LoadXml (documentString);
+
+ Assert.IsNotNull (proj.EvaluatedProperties ["A"], "A1");
+ Assert.IsNull (proj.EvaluatedProperties ["B"], "A2");
+ Assert.IsNotNull (proj.EvaluatedProperties ["C"], "A3");
+ Assert.IsNull (proj.EvaluatedProperties ["D"], "A4");
+ Assert.IsNotNull (proj.EvaluatedProperties ["E"], "A5");
+ }
+
+ [Test]
+ public void TestCondition9 ()
+ {
+ Engine engine = new Engine (Consts.BinPath);
+ Project proj = engine.CreateNewProject ();
+
+ string documentString = @"
+ <Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003"">
+ <PropertyGroup>
+ <A Condition=""'A' == 'A'""></A>
+ <B Condition="" 'A' == 'A' ""></B>
+ <C Condition=""'A' == 'a'""></C>
+ <D Condition=""'A' == 'b'""></D>
+ </PropertyGroup>
+ </Project>
+ ";
+
+ proj.LoadXml (documentString);
+
+ Assert.IsNotNull (proj.EvaluatedProperties ["A"], "A1");
+ Assert.IsNotNull (proj.EvaluatedProperties ["B"], "A2");
+ Assert.IsNotNull (proj.EvaluatedProperties ["C"], "A3");
+ Assert.IsNull (proj.EvaluatedProperties ["D"], "A4");
+ }
+
+ [Test]
+ [Category ("NotDotNet")]
+ public void TestCondition10 ()
+ {
+ Engine engine = new Engine (Consts.BinPath);
+ Project proj = engine.CreateNewProject ();
+
+ string documentString = @"
+ <Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003"">
+ <PropertyGroup>
+ <A Condition="" !'true' ""></A>
+ <B Condition="" 'on' == 'true' ""></B>
+ <C Condition="" 4 == 4.0 and 04 == 4""></C>
+ <D Condition="" !(false and false) == !false or !false ""></D>
+ <E Condition="" Exists ('Test\resources\Import.csproj') ""></E>
+ </PropertyGroup>
+ </Project>
+ ";
+
+ proj.LoadXml (documentString);
+
+ Assert.IsNull (proj.EvaluatedProperties ["A"], "A1");
+ Assert.IsNotNull (proj.EvaluatedProperties ["B"], "A2");
+ Assert.IsNotNull (proj.EvaluatedProperties ["C"], "A3");
+ Assert.IsNotNull (proj.EvaluatedProperties ["D"], "A4");
+ Assert.IsNotNull (proj.EvaluatedProperties ["E"], "A5");
+ }
+ [Test]
+ public void TestCondition11 ()
+ {
+ Engine engine = new Engine (Consts.BinPath);
+ Project proj = engine.CreateNewProject ();
+ string documentString = @"<Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003"">
+ <PropertyGroup>
+ <FooProp>true</FooProp>
+ </PropertyGroup>
+ <ItemGroup>
+ <FooList Include=""abc.exe""/>
+ <List1 Include=""fr_a.txt"" Condition="" $(FooProp) == 'true'"" />
+ <List1 Include=""fr_b.txt"" Condition="" '@(FooList->'%(Extension)a(foo', ',')' == '.exea(foo'"" />
+ <List1 Include=""fr_c.txt"" Condition="" @(FooList -> '%(Extension)', ',') == '.exe'"" />
+ </ItemGroup>
+</Project>";
+
+ proj.LoadXml (documentString);
+
+ BuildItemGroup bgp = proj.GetEvaluatedItemsByName ("List1");
+ Assert.IsNotNull (bgp, "Expected values in List1");
+ Assert.AreEqual (3, bgp.Count, "A1");
+ Assert.AreEqual ("fr_a.txt", bgp [0].FinalItemSpec, "A2");
+ Assert.AreEqual ("fr_b.txt", bgp [1].FinalItemSpec, "A3");
+ Assert.AreEqual ("fr_c.txt", bgp [2].FinalItemSpec, "A4");
+ }
+
+ // Test shortcircuiting
+ [Test]
+ public void TestCondition12 ()
+ {
+ Engine engine = new Engine (Consts.BinPath);
+ Project proj = engine.CreateNewProject ();
+
+ string documentString = @"
+ <Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003"">
+ <PropertyGroup>
+ <A Condition=""'$(NonExistant)' != '' and $(NonExistant)""></A>
+ </PropertyGroup>
+ </Project>
+ ";
+
+ proj.LoadXml (documentString);
+
+ Assert.IsNull (proj.EvaluatedProperties ["A"], "A1");
+ }
+
+ [Test]
+ public void TestCondition_References ()
+ {
+ Engine engine = new Engine (Consts.BinPath);
+ Project proj = engine.CreateNewProject ();
+
+ string documentString = @"
+ <Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003"">
+ <PropertyGroup>
+ <A Condition=""$([System.String]::new('test').StartsWith(`te`))"">valid</A>
+ </PropertyGroup>
+ </Project>
+ ";
+
+ proj.LoadXml (documentString);
+
+ Assert.AreEqual ("valid", proj.GetEvaluatedProperty ("A"), "#1");
+ }
+
+ [Test]
+ public void TestHasTrailingSlash1 ()
+ {
+ Engine engine = new Engine (Consts.BinPath);
+ Project proj = engine.CreateNewProject ();
+
+ string documentString = @"
+ <Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003"">
+ <PropertyGroup>
+ <EmptyProp></EmptyProp>
+ <WithTrailingBackSlash>foo\ </WithTrailingBackSlash>
+ <WithTrailingFwdSlash>foo/ </WithTrailingFwdSlash>
+ <NoTrailing>Foo</NoTrailing>
+
+ <A Condition="" HasTrailingSlash('$(EmptyProp)') ""></A>
+ <B Condition="" HasTrailingSlash('$(WithTrailingBackSlash)') ""></B>
+ <C Condition="" HasTrailingSlash('$(WithTrailingFwdSlash)') ""></C>
+ <D Condition="" HasTrailingSlash('$(NoTrailing)') ""></D>
+ <E Condition="" HasTrailingSlash('$(NonExistant)') ""></E>
+ </PropertyGroup>
+ </Project>
+ ";
+
+ proj.LoadXml (documentString);
+
+ Assert.IsNull (proj.EvaluatedProperties ["A"], "A1");
+ Assert.IsNotNull (proj.EvaluatedProperties ["B"], "A2");
+ Assert.IsNotNull (proj.EvaluatedProperties ["C"], "A3");
+ Assert.IsNull (proj.EvaluatedProperties ["D"], "A4");
+ Assert.IsNull (proj.EvaluatedProperties ["E"], "A5");
+ }
+
+ [Test]
+ [ExpectedException (typeof (InvalidProjectFileException))]
+ public void TestUnknownFunction ()
+ {
+ Engine engine = new Engine (Consts.BinPath);
+ Project proj = engine.CreateNewProject ();
+
+ string documentString = @"
+ <Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003"">
+ <PropertyGroup>
+ <A Condition="" NonExistantFunction('$(EmptyProp)') ""></A>
+ </PropertyGroup>
+ </Project>
+ ";
+
+ proj.LoadXml (documentString);
+ }
+
[Test]
[ExpectedException (typeof (InvalidProjectFileException))]
public void TestIncorrectCondition1 ()
proj.LoadXml (documentString);
}
+
+ // A reference to an item list at position 1 is not allowed in this condition "@(A)".
+ [Test]
+ [ExpectedException (typeof (InvalidProjectFileException))]
+ [Category ("NotWorking")]
+ public void TestIncorrectCondition2 ()
+ {
+ Engine engine = new Engine (Consts.BinPath);
+ Project proj = engine.CreateNewProject ();
+
+ string documentString = @"
+ <Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003"">
+ <PropertyGroup>
+ <A Condition='@(A)'>A</A>
+ </PropertyGroup>
+ </Project>
+ ";
+
+ proj.LoadXml (documentString);
+ }
+
+ // Found an unexpected character '%' at position 0 in condition \%(A)\.
+ [Test]
+ [ExpectedException (typeof (InvalidProjectFileException))]
+ [Category ("NotWorking")]
+ public void TestIncorrectCondition3 ()
+ {
+ Engine engine = new Engine (Consts.BinPath);
+ Project proj = engine.CreateNewProject ();
+
+ string documentString = @"
+ <Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003"">
+ <PropertyGroup>
+ <A Condition='%(A)'>A</A>
+ </PropertyGroup>
+ </Project>
+ ";
+
+ proj.LoadXml (documentString);
+ }
+
+ // Found an unexpected character '%' at position 0 in condition "%(A)\.
+ [Test]
+ [ExpectedException (typeof (InvalidProjectFileException))]
+ [Category ("NotWorking")]
+ public void TestIncorrectCondition4 ()
+ {
+ Engine engine = new Engine (Consts.BinPath);
+ Project proj = engine.CreateNewProject ();
+
+ string documentString = @"
+ <Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003"">
+ <ItemGroup>
+ <A Include='a' Condition='%(A)' />
+ </ItemGroup>
+ </Project>
+ ";
+
+ proj.LoadXml (documentString);
+ }
+
+ [Test]
+ [ExpectedException (typeof (InvalidProjectFileException))]
+ public void TestIncorrectCondition5 ()
+ {
+ Engine engine = new Engine (Consts.BinPath);
+ Project proj = engine.CreateNewProject ();
+
+ string documentString = @"
+ <Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003"">
+ <ItemGroup>
+ <A Include='a' Condition="" ' == '' "" />
+ </ItemGroup>
+ </Project>
+ ";
+
+ proj.LoadXml (documentString);
+ }
+
+ [Test]
+ [ExpectedException (typeof (InvalidProjectFileException))]
+ public void TestIncorrectCondition6 ()
+ {
+ Engine engine = new Engine (Consts.BinPath);
+ Project proj = engine.CreateNewProject ();
+
+ string documentString = @"
+ <Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003"">
+ <ItemGroup>
+ <A Include='a' Condition=""'$(NonExistant)' != '' or $(NonExistant)""/>
+ </ItemGroup>
+ </Project>
+ ";
+
+ proj.LoadXml (documentString);
+ }
+
}
}