2008-12-08 Atsushi Enomoto <atsushi@ximian.com>
[mono.git] / mcs / class / Microsoft.Build.Engine / Test / Microsoft.Build.BuildEngine / BuildItemTest.cs
index eed0f79eb18813c4bbdb14979571d767939036b8..0de71eed3d19875b232a257e9f15a2722197dbec 100644 (file)
@@ -80,7 +80,8 @@ namespace MonoTests.Microsoft.Build.BuildEngine {
                }
 
                [Test]
-               [Ignore ("NullRefException on MS .NET 2.0")]
+               [ExpectedException (typeof (ArgumentNullException))]
+               [Category ("NotDotNet")]
                public void TestCtor4 ()
                {
                        new BuildItem (null, (ITaskItem) null);
@@ -101,7 +102,7 @@ namespace MonoTests.Microsoft.Build.BuildEngine {
                }
 
                [Test]
-               [Ignore ("IndexOutOfRange on MS .NET 2.0")]
+               [Category ("NotDotNet")] //IndexOutOfRange throw by MS .NET 2.0
                public void TestCtor7 ()
                {
                        new BuildItem (String.Empty, "something");
@@ -126,12 +127,64 @@ namespace MonoTests.Microsoft.Build.BuildEngine {
                [Test]
                [ExpectedException (typeof (InvalidOperationException),
                        "Cannot set a condition on an object not represented by an XML element in the project file.")]
-               public void TestCondition ()
+               public void TestCondition1 ()
                {
                        item = new BuildItem ("name", "1");
                        item.Condition = "true";
                }
 
+               [Test]
+               [Ignore ("weird test need to check how project.Xml looks")]
+               public void TestCondition2 ()
+               {
+                       Engine engine;
+                       Project project;
+                       BuildItemGroup [] groups = new BuildItemGroup [1];
+
+                       string documentString = @"
+                               <Project xmlns='http://schemas.microsoft.com/developer/msbuild/2003'>
+                                       <ItemGroup>
+                                               <A Include='a;b' />
+                                       </ItemGroup>
+                               </Project>
+                       ";
+
+                       engine = new Engine (Consts.BinPath);
+                       project = engine.CreateNewProject ();
+                       project.LoadXml (documentString);
+
+                       project.EvaluatedItems [0].Condition = "true";
+                       project.ItemGroups.CopyTo (groups, 0);
+                       Assert.AreEqual (String.Empty, groups [0] [0].Condition, "A1");
+                       Assert.AreEqual ("true", project.EvaluatedItems [0].Condition, "A2");
+               }
+
+               [Test]
+               [Ignore ("weird test need to check how project.Xml looks")]
+               public void TestCondition3 ()
+               {
+                       Engine engine;
+                       Project project;
+                       BuildItemGroup [] groups = new BuildItemGroup [1];
+
+                       string documentString = @"
+                               <Project xmlns='http://schemas.microsoft.com/developer/msbuild/2003'>
+                                       <ItemGroup>
+                                               <A Include='a;b' />
+                                       </ItemGroup>
+                               </Project>
+                       ";
+
+                       engine = new Engine (Consts.BinPath);
+                       project = engine.CreateNewProject ();
+                       project.LoadXml (documentString);
+
+                       project.ItemGroups.CopyTo (groups, 0);
+                       groups [0] [0].Condition = "true";
+                       Assert.AreEqual ("true", groups [0] [0].Condition, "A1");
+                       Assert.AreEqual ("true", project.EvaluatedItems [0].Condition, "A2");
+               }
+
                [Test]
                public void TestCopyCustomMetadataTo1 ()
                {
@@ -153,9 +206,9 @@ namespace MonoTests.Microsoft.Build.BuildEngine {
                        Assert.AreEqual (metadataValue, destination.GetEvaluatedMetadata (metadataName), "A2");
                }
 
-               // NOTE: it's weird that they don't throw ArgumentNullException
                [Test]
-               [Ignore ("MS throws NullRefException")]
+               [ExpectedException (typeof (ArgumentNullException))]
+               [Category ("NotDotNet")]
                public void TestCopyCustomMetadataTo2 ()
                {
                        BuildItem item = new BuildItem ("name", "include");
@@ -167,33 +220,45 @@ namespace MonoTests.Microsoft.Build.BuildEngine {
                [Test]
                [ExpectedException (typeof (InvalidOperationException),
                        "Assigning the \"Exclude\" attribute of a virtual item is not allowed.")]
-               public void TestExclude ()
+               public void TestExclude1 ()
                {
                        item = new BuildItem ("name", "1");
                        item.Exclude = "e";
                }
 
                [Test]
-               public void TestHasMetadata ()
+               public void TestExclude2 ()
                {
-                       string itemName = "a";
-                       string itemInclude = "a";
-                       string metadataName = "name";
+                       Engine engine;
+                       Project project;
+                       BuildItemGroup [] groups = new BuildItemGroup [1];
 
-                       item = new BuildItem (itemName, itemInclude);
+                       string documentString = @"
+                               <Project xmlns='http://schemas.microsoft.com/developer/msbuild/2003'>
+                                       <ItemGroup>
+                                               <A Include='a;b' />
+                                       </ItemGroup>
+                               </Project>
+                       ";
 
-                       Assert.AreEqual (false, item.HasMetadata (metadataName), "A1");
-            
-                       item.SetMetadata (metadataName, "value");
+                       engine = new Engine (Consts.BinPath);
+                       project = engine.CreateNewProject ();
+                       project.LoadXml (documentString);
+                       project.ItemGroups.CopyTo (groups, 0);
 
-                       Assert.AreEqual (true, item.HasMetadata (metadataName), "A2");
+                       Assert.AreEqual (String.Empty, groups [0] [0].Exclude, "A1");
+
+                       groups [0] [0].Exclude = "b";
+
+                       Assert.AreEqual ("b", groups [0] [0].Exclude, "A2");
+                       Assert.AreEqual ("a;b", groups [0] [0].Include, "A3");
                }
 
                [Test]
-               public void TestGetMetadata ()
+               public void TestGetMetadata1 ()
                {
                        string itemName = "a";
-                       string itemInclude = "a";
+                       string itemInclude = "a;b;c";
                        string metadataName = "name";
                        string metadataValue = "a;b;c";
 
@@ -204,10 +269,56 @@ namespace MonoTests.Microsoft.Build.BuildEngine {
                        item.SetMetadata (metadataName, metadataValue);
 
                        Assert.AreEqual (metadataValue, item.GetMetadata (metadataName), "A2");
+                       Assert.IsTrue (item.GetMetadata ("FullPath").EndsWith (Utilities.Escape (itemInclude)), "A3");
+                       //Assert.IsTrue (String.Empty != item.GetMetadata ("RootDir"), "A4");
+                       Assert.AreEqual (itemInclude, item.GetMetadata ("Filename"), "A5");
+                       Assert.AreEqual (String.Empty, item.GetMetadata ("Extension"), "A6");
+                       Assert.AreEqual (String.Empty, item.GetMetadata ("RelativeDir"), "A7");
+                       Assert.IsTrue (String.Empty != item.GetMetadata ("Directory"), "A8");
+                       Assert.AreEqual (String.Empty, item.GetMetadata ("RecursiveDir"), "A9");
+                       Assert.AreEqual (itemInclude, item.GetMetadata ("Identity"), "A10");
+                       // FIXME: test with CreatedTime
+                       Assert.AreEqual (String.Empty, item.GetMetadata ("ModifiedTime"), "A11");
+                       Assert.AreEqual (String.Empty, item.GetMetadata ("ModifiedTime"), "A12");
+                       Assert.AreEqual (String.Empty, item.GetMetadata ("AccessedTime"), "A13");
+               }
+
+               [Test]
+               [ExpectedException (typeof (ArgumentNullException))]
+               public void TestGetMetadata2 ()
+               {
+                       item = new BuildItem ("name", "spec");
+                       item.GetMetadata (null);
                }
 
                [Test]
-               public void TestGetEvaluatedMetadata ()
+               public void TestGetMetadata3 ()
+               {
+                       Engine engine;
+                       Project project;
+                       BuildItemGroup [] groups = new BuildItemGroup [1];
+
+                       string documentString = @"
+                               <Project xmlns='http://schemas.microsoft.com/developer/msbuild/2003'>
+                                       <ItemGroup>
+                                               <A Include='a;b'>
+                                                       <Meta>Value</Meta>
+                                               </A>
+                                       </ItemGroup>
+                               </Project>
+                       ";
+
+                       engine = new Engine (Consts.BinPath);
+                       project = engine.CreateNewProject ();
+                       project.LoadXml (documentString);
+                       project.ItemGroups.CopyTo (groups, 0);
+
+                       Assert.AreEqual ("Value", groups [0] [0].GetMetadata ("Meta"), "A1");
+                       Assert.AreEqual (String.Empty, groups [0] [0].GetMetadata ("Other"), "A2");
+               }
+
+               [Test]
+               public void TestGetEvaluatedMetadata1 ()
                {
                        string itemName = "a";
                        string itemInclude = "a";
@@ -221,6 +332,199 @@ namespace MonoTests.Microsoft.Build.BuildEngine {
                        item.SetMetadata (metadataName, metadataValue);
 
                        Assert.AreEqual (metadataValue, item.GetEvaluatedMetadata (metadataName), "A2");
+                       Assert.AreEqual (itemInclude, item.GetEvaluatedMetadata ("Identity"), "A3");
+               }
+
+               [Test]
+               public void TestGetEvaluatedMetadata2 ()
+               {
+                       Engine engine;
+                       Project project;
+                       BuildItemGroup [] groups = new BuildItemGroup [1];
+
+                       string documentString = @"
+                               <Project xmlns='http://schemas.microsoft.com/developer/msbuild/2003'>
+                                       <PropertyGroup>
+                                               <A>A</A>
+                                       </PropertyGroup>
+                                       <ItemGroup>
+                                               <A Include='a;b'>
+                                                       <Meta>Value</Meta>
+                                                       <Meta2>$(A)</Meta2>
+                                               </A>
+                                       </ItemGroup>
+                               </Project>
+                       ";
+
+                       engine = new Engine (Consts.BinPath);
+                       project = engine.CreateNewProject ();
+                       project.LoadXml (documentString);
+                       project.ItemGroups.CopyTo (groups, 0);
+
+                       Assert.AreEqual ("Value", groups [0] [0].GetEvaluatedMetadata ("Meta"), "A1");
+                       Assert.AreEqual (String.Empty, groups [0] [0].GetEvaluatedMetadata ("Other"), "A2");
+                       Assert.AreEqual ("A", groups [0] [0].GetEvaluatedMetadata ("Meta2"), "A3");
+               }
+
+               [Test]
+               public void TestHasMetadata1 ()
+               {
+                       string itemName = "a";
+                       string itemInclude = "a";
+                       string metadataName = "name";
+
+                       item = new BuildItem (itemName, itemInclude);
+
+                       Assert.AreEqual (false, item.HasMetadata (metadataName), "A1");
+
+                       item.SetMetadata (metadataName, "value");
+
+                       Assert.AreEqual (true, item.HasMetadata (metadataName), "A2");
+                       Assert.IsTrue (item.HasMetadata ("FullPath"), "A3");
+                       Assert.IsTrue (item.HasMetadata ("RootDir"), "A4");
+                       Assert.IsTrue (item.HasMetadata ("Filename"), "A5");
+                       Assert.IsTrue (item.HasMetadata ("Extension"), "A6");
+                       Assert.IsTrue (item.HasMetadata ("RelativeDir"), "A7");
+                       Assert.IsTrue (item.HasMetadata ("Directory"), "A8");
+                       Assert.IsTrue (item.HasMetadata ("RecursiveDir"), "A9");
+                       Assert.IsTrue (item.HasMetadata ("Identity"), "A10");
+                       Assert.IsTrue (item.HasMetadata ("ModifiedTime"), "A11");
+                       Assert.IsTrue (item.HasMetadata ("CreatedTime"), "A12");
+                       Assert.IsTrue (item.HasMetadata ("AccessedTime"), "A13");
+               }
+
+               [Test]
+               public void TestHasMetadata2 ()
+               {
+                       Engine engine;
+                       Project project;
+                       BuildItemGroup [] groups = new BuildItemGroup [1];
+
+                       string documentString = @"
+                               <Project xmlns='http://schemas.microsoft.com/developer/msbuild/2003'>
+                                       <ItemGroup>
+                                               <A Include='a;b'>
+                                                       <Meta>Value</Meta>
+                                               </A>
+                                       </ItemGroup>
+                               </Project>
+                       ";
+
+                       engine = new Engine (Consts.BinPath);
+                       project = engine.CreateNewProject ();
+                       project.LoadXml (documentString);
+                       project.ItemGroups.CopyTo (groups, 0);
+
+                       BuildItem item = groups [0] [0];
+
+                       Assert.IsFalse (item.HasMetadata ("Other"), "A1");
+                       Assert.IsTrue (item.HasMetadata ("Meta"), "A2");
+                       Assert.IsTrue (item.HasMetadata ("FullPath"), "A3");
+                       Assert.IsTrue (item.HasMetadata ("RootDir"), "A4");
+                       Assert.IsTrue (item.HasMetadata ("Filename"), "A5");
+                       Assert.IsTrue (item.HasMetadata ("Extension"), "A6");
+                       Assert.IsTrue (item.HasMetadata ("RelativeDir"), "A7");
+                       Assert.IsTrue (item.HasMetadata ("Directory"), "A8");
+                       Assert.IsTrue (item.HasMetadata ("RecursiveDir"), "A9");
+                       Assert.IsTrue (item.HasMetadata ("Identity"), "A10");
+                       Assert.IsTrue (item.HasMetadata ("ModifiedTime"), "A11");
+                       Assert.IsTrue (item.HasMetadata ("CreatedTime"), "A12");
+                       Assert.IsTrue (item.HasMetadata ("AccessedTime"), "A13");
+               }
+
+               [Test]
+               [ExpectedException (typeof (ArgumentNullException))]
+               public void TestHasMetadata3 ()
+               {
+                       item = new BuildItem ("name", "spec");
+                       item.HasMetadata (null);
+               }
+
+               [Test]
+               [ExpectedException (typeof (InvalidProjectFileException))]
+               public void TestInclude1 ()
+               {
+                       Engine engine;
+                       Project project;
+
+                       string documentString = @"
+                               <Project xmlns='http://schemas.microsoft.com/developer/msbuild/2003'>
+                                       <ItemGroup>
+                                               <A Include='' />
+                                       </ItemGroup>
+                               </Project>
+                       ";
+
+                       engine = new Engine (Consts.BinPath);
+                       project = engine.CreateNewProject ();
+                       project.LoadXml (documentString);
+               }
+
+               [Test]
+               public void TestInclude2 ()
+               {
+                       Engine engine;
+                       Project project;
+
+                       string documentString = @"
+                               <Project xmlns='http://schemas.microsoft.com/developer/msbuild/2003'>
+                                       <ItemGroup>
+                                               <A Include='a' />
+                                       </ItemGroup>
+                               </Project>
+                       ";
+
+                       engine = new Engine (Consts.BinPath);
+                       project = engine.CreateNewProject ();
+                       project.LoadXml (documentString);
+
+                       Assert.AreEqual ("a", project.EvaluatedItems [0].Include, "A1");
+               }
+
+               [Test]
+               public void TestInclude3 ()
+               {
+                       BuildItem item = new BuildItem ("name", "a");
+                       item.Include = "b";
+                       Assert.AreEqual ("b", item.Include, "A1");
+               }
+
+               [Test]
+               public void TestName1 ()
+               {
+                       Engine engine;
+                       Project project;
+                       BuildItemGroup [] groups = new BuildItemGroup [1];
+
+                       string documentString = @"
+                               <Project xmlns='http://schemas.microsoft.com/developer/msbuild/2003'>
+                                       <ItemGroup>
+                                               <A Include='a;b' />
+                                       </ItemGroup>
+                               </Project>
+                       ";
+
+                       engine = new Engine (Consts.BinPath);
+                       project = engine.CreateNewProject ();
+                       project.LoadXml (documentString);
+
+                       project.EvaluatedItems [0].Name = "C";
+
+                       Assert.AreEqual (2, project.EvaluatedItems.Count, "A1");
+                       Assert.AreEqual ("C", project.EvaluatedItems [0].Name, "A2");
+                       Assert.AreEqual ("A", project.EvaluatedItems [1].Name, "A3");
+                       project.ItemGroups.CopyTo (groups, 0);
+                       Assert.AreEqual (2, groups [0].Count, "A4");
+                       Assert.AreEqual ("C", groups [0] [0].Name, "A5");
+                       Assert.AreEqual ("A", groups [0] [1].Name, "A6");
+               }
+
+               [Test]
+               public void TestName2 ()
+               {
+                       BuildItem item = new BuildItem ("A", "V");
+                       item.Name = "B";
+                       Assert.AreEqual ("B", item.Name, "A1");
                }
 
                [Test]
@@ -266,6 +570,76 @@ namespace MonoTests.Microsoft.Build.BuildEngine {
                        item.RemoveMetadata ("Filename");
                }
 
+               [Test]
+               public void TestRemoveMetadata5 ()
+               {
+                       Engine engine;
+                       Project project;
+                       BuildItemGroup [] groups = new BuildItemGroup [1];
+
+                       string documentString = @"
+                               <Project xmlns='http://schemas.microsoft.com/developer/msbuild/2003'>
+                                       <ItemGroup>
+                                               <A Include='a;b'>
+                                                       <Meta>Value</Meta>
+                                                       <Meta2>$(A)</Meta2>
+                                               </A>
+                                               <B Include='a'/>
+                                       </ItemGroup>
+                               </Project>
+                       ";
+
+                       engine = new Engine (Consts.BinPath);
+                       project = engine.CreateNewProject ();
+                       project.LoadXml (documentString);
+                       project.ItemGroups.CopyTo (groups, 0);
+
+                       Assert.AreEqual (3, project.EvaluatedItems.Count, "A1");
+
+                       groups [0] [0].RemoveMetadata ("Meta");
+                       Assert.IsFalse (groups [0] [0].HasMetadata ("Meta"), "A2");
+                       groups [0] [0].RemoveMetadata ("undefined_metadata");
+
+                       Assert.AreEqual (2, groups [0].Count, "A3");
+                       Assert.AreEqual (3, project.EvaluatedItems.Count, "A4");
+               }
+
+               [Test]
+               public void TestRemoveMetadata6 ()
+               {
+                       Engine engine;
+                       Project project;
+                       BuildItemGroup [] groups = new BuildItemGroup [1];
+
+                       string documentString = @"
+                               <Project xmlns='http://schemas.microsoft.com/developer/msbuild/2003'>
+                                       <ItemGroup>
+                                               <A Include='a;b;c'>
+                                                       <Meta>Value</Meta>
+                                                       <Meta2>$(A)</Meta2>
+                                               </A>
+                                               <B Include='a'/>
+                                       </ItemGroup>
+                               </Project>
+                       ";
+
+                       engine = new Engine (Consts.BinPath);
+                       project = engine.CreateNewProject ();
+                       project.LoadXml (documentString);
+
+                       Assert.AreEqual (4, project.EvaluatedItems.Count, "A1");
+                       project.ItemGroups.CopyTo (groups, 0);
+                       Assert.AreEqual (2, groups [0].Count, "A2");
+
+                       BuildItem b1 = project.EvaluatedItems [0];
+
+                       b1.RemoveMetadata ("Meta");
+
+                       Assert.AreEqual (4, project.EvaluatedItems.Count, "A3");
+                       project.ItemGroups.CopyTo (groups, 0);
+                       Assert.AreEqual (4, groups [0].Count, "A4");
+               }
+
                [Test]
                [ExpectedException (typeof (ArgumentNullException))]
                public void TestSetMetadata1 ()
@@ -305,5 +679,128 @@ namespace MonoTests.Microsoft.Build.BuildEngine {
                        item = new BuildItem ("name", "include");
                        item.SetMetadata ("Filename", "something");
                }
+
+               [Test]
+               public void TestSetMetadata5 ()
+               {
+                       Engine engine;
+                       Project project;
+                       BuildItemGroup [] groups = new BuildItemGroup [1];
+
+                       string documentString = @"
+                               <Project xmlns='http://schemas.microsoft.com/developer/msbuild/2003'>
+                                       <PropertyGroup>
+                                               <A>A</A>
+                                       </PropertyGroup>
+                                       <ItemGroup>
+                                               <A Include='a;b'/>
+                                       </ItemGroup>
+                               </Project>
+                       ";
+
+                       engine = new Engine (Consts.BinPath);
+                       project = engine.CreateNewProject ();
+                       project.LoadXml (documentString);
+
+                       project.ItemGroups.CopyTo (groups, 0);
+
+                       groups [0] [0].SetMetadata ("Meta", "$(A)");
+                       Assert.AreEqual (2, project.EvaluatedItems.Count, "A0");
+
+                       Assert.AreEqual (1, groups [0].Count, "A1");
+                       Assert.AreEqual ("$(A)", groups [0] [0].GetMetadata ("Meta"), "A2");
+                       Assert.AreEqual ("$(A)", project.EvaluatedItems [0].GetMetadata ("Meta"), "A3");
+                       Assert.AreEqual ("$(A)", project.EvaluatedItems [1].GetMetadata ("Meta"), "A4");
+                       Assert.AreEqual ("A", project.EvaluatedItems [0].GetEvaluatedMetadata ("Meta"), "A5");
+                       Assert.AreEqual ("A", project.EvaluatedItems [1].GetEvaluatedMetadata ("Meta"), "A6");
+               }
+
+               [Test]
+               public void TestSetMetadata6 ()
+               {
+                       Engine engine;
+                       Project project;
+                       BuildItemGroup [] groups = new BuildItemGroup [1];
+
+                       string documentString = @"
+                               <Project xmlns='http://schemas.microsoft.com/developer/msbuild/2003'>
+                                       <ItemGroup>
+                                               <A Include='a;b;c'/>
+                                       </ItemGroup>
+                               </Project>
+                       ";
+
+                       engine = new Engine (Consts.BinPath);
+                       project = engine.CreateNewProject ();
+                       project.LoadXml (documentString);
+
+                       project.EvaluatedItems [0].SetMetadata ("Meta", "Value");
+                       //NOTE: this triggers reevaluation
+                       Assert.AreEqual ("A", project.EvaluatedItems [0].Name, "A0");
+                       project.ItemGroups.CopyTo (groups, 0);
+
+                       Assert.AreEqual (3, groups [0].Count, "A1");
+                       Assert.AreEqual ("Value", groups [0] [0].GetMetadata ("Meta"), "A2");
+                       Assert.AreEqual (String.Empty, groups [0] [1].GetMetadata ("Meta"), "A3");
+                       Assert.AreEqual (String.Empty, groups [0] [2].GetMetadata ("Meta"), "A4");
+                       Assert.AreEqual (3, project.EvaluatedItems.Count, "A5");
+                       Assert.AreEqual ("Value", project.EvaluatedItems [0].GetMetadata ("Meta"), "A6");
+                       Assert.AreEqual (String.Empty, project.EvaluatedItems [1].GetMetadata ("Meta"), "A7");
+                       Assert.AreEqual (String.Empty, project.EvaluatedItems [1].GetMetadata ("Meta"), "A8");
+               }
+
+               [Test]
+               public void TestSetMetadata7 ()
+               {
+                       Engine engine;
+                       Project project;
+                       BuildItemGroup [] groups = new BuildItemGroup [1];
+
+                       string documentString = @"
+                               <Project xmlns='http://schemas.microsoft.com/developer/msbuild/2003'>
+                                       <ItemGroup>
+                                               <A Include='a;b;c'>
+                                                       <Meta>Value2</Meta>
+                                               </A>
+                                       </ItemGroup>
+                               </Project>
+                       ";
+
+                       engine = new Engine (Consts.BinPath);
+                       project = engine.CreateNewProject ();
+                       project.LoadXml (documentString);
+
+                       project.ItemGroups.CopyTo (groups, 0);
+                       groups [0][0].SetMetadata ("Meta", "Value");
+                       Assert.AreEqual ("Value", groups [0] [0].GetEvaluatedMetadata ("Meta"), "A1");
+                       Assert.AreEqual ("Value", groups [0] [0].GetMetadata ("Meta"), "A2");
+               }
+
+               [Test]
+               public void TestSetMetadata8 ()
+               {
+                       Engine engine;
+                       Project project;
+                       BuildItemGroup [] groups = new BuildItemGroup [1];
+
+                       string documentString = @"
+                               <Project xmlns='http://schemas.microsoft.com/developer/msbuild/2003'>
+                                       <ItemGroup>
+                                               <A Include='a' />
+                                       </ItemGroup>
+                               </Project>
+                       ";
+
+                       engine = new Engine (Consts.BinPath);
+                       project = engine.CreateNewProject ();
+                       project.LoadXml (documentString);
+
+                       project.EvaluatedItems [0].SetMetadata ("Meta", "Value");
+
+                       Assert.AreEqual (1, project.EvaluatedItems.Count, "A1");
+                       Assert.AreEqual ("Value", project.EvaluatedItems [0].GetMetadata ("Meta"), "A2");
+                       project.ItemGroups.CopyTo (groups, 0);
+                       Assert.AreEqual (1, groups [0].Count, "A3");
+               }
        }
 }