2 // TargetCollectionTest.cs
5 // Marek Sieradzki (marek.sieradzki@gmail.com)
7 // (C) 2006 Marek Sieradzki
9 // Permission is hereby granted, free of charge, to any person obtaining
10 // a copy of this software and associated documentation files (the
11 // "Software"), to deal in the Software without restriction, including
12 // without limitation the rights to use, copy, modify, merge, publish,
13 // distribute, sublicense, and/or sell copies of the Software, and to
14 // permit persons to whom the Software is furnished to do so, subject to
15 // the following conditions:
17 // The above copyright notice and this permission notice shall be
18 // included in all copies or substantial portions of the Software.
20 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
23 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
24 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
25 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
29 using System.Collections;
30 using Microsoft.Build.BuildEngine;
31 using Microsoft.Build.Framework;
32 using Microsoft.Build.Utilities;
33 using NUnit.Framework;
35 namespace MonoTests.Microsoft.Build.BuildEngine {
37 public class TargetCollectionTest {
43 public void TestEmpty ()
45 string documentString = @"
46 <Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003"">
50 engine = new Engine (Consts.BinPath);
52 project = engine.CreateNewProject ();
53 project.LoadXml (documentString);
55 Assert.AreEqual (0, project.Targets.Count, "A1");
56 Assert.IsFalse (project.Targets.IsSynchronized, "A2");
57 Assert.IsNotNull (project.Targets.SyncRoot, "A3");
61 public void TestAddNewTarget1 ()
63 string documentString = @"
64 <Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003"">
68 engine = new Engine (Consts.BinPath);
70 project = engine.CreateNewProject ();
71 project.LoadXml (documentString);
73 project.Targets.AddNewTarget ("name");
75 Assert.AreEqual (1, project.Targets.Count, "A1");
76 Assert.AreEqual ("name", project.Targets ["name"].Name, "A2");
77 Assert.IsFalse (project.Targets ["name"].IsImported, "A3");
78 Assert.AreEqual (String.Empty, project.Targets ["name"].Condition, "A4");
79 Assert.AreEqual (String.Empty, project.Targets ["name"].DependsOnTargets, "A5");
83 [ExpectedException (typeof (InvalidProjectFileException))]
84 public void TestAddNewTarget2 ()
86 string documentString = @"
87 <Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003"">
91 engine = new Engine (Consts.BinPath);
93 project = engine.CreateNewProject ();
94 project.LoadXml (documentString);
96 project.Targets.AddNewTarget (null);
100 public void TestAddNewTarget3 ()
102 engine = new Engine (Consts.BinPath);
104 project = engine.CreateNewProject ();
106 project.Targets.AddNewTarget ("Name");
107 project.Targets.AddNewTarget ("Name");
108 Assert.AreEqual (1, project.Targets.Count, "A1");
112 public void TestAddNewTarget4 ()
114 string documentString = @"
115 <Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003"">
121 engine = new Engine (Consts.BinPath);
123 project = engine.CreateNewProject ();
124 project.LoadXml (documentString);
125 Assert.AreEqual (1, project.Targets.Count, "A1");
129 [ExpectedException (typeof (ArgumentNullException))]
130 public void TestCopyTo1 ()
132 string documentString = @"
133 <Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003"">
138 engine = new Engine (Consts.BinPath);
140 project = engine.CreateNewProject ();
141 project.LoadXml (documentString);
143 project.Targets.CopyTo (null, 0);
147 [ExpectedException (typeof (ArgumentOutOfRangeException))]
148 public void TestCopyTo2 ()
150 string documentString = @"
151 <Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003"">
156 engine = new Engine (Consts.BinPath);
158 project = engine.CreateNewProject ();
159 project.LoadXml (documentString);
161 project.Targets.CopyTo (new Target [1], -1);
165 [ExpectedException (typeof (InvalidCastException))]
166 public void TestCopyTo3 ()
168 string documentString = @"
169 <Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003"">
174 engine = new Engine (Consts.BinPath);
176 project = engine.CreateNewProject ();
177 project.LoadXml (documentString);
179 project.Targets.CopyTo (new Target [][] { new Target [] { null } }, 0);
183 [ExpectedException (typeof (ArgumentOutOfRangeException))]
184 public void TestCopyTo4 ()
186 string documentString = @"
187 <Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003"">
192 engine = new Engine (Consts.BinPath);
194 project = engine.CreateNewProject ();
195 project.LoadXml (documentString);
197 project.Targets.CopyTo (new Target [1], 2);
201 [ExpectedException (typeof (ArgumentException))]
202 public void TestCopyTo5 ()
204 string documentString = @"
205 <Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003"">
210 engine = new Engine (Consts.BinPath);
212 project = engine.CreateNewProject ();
213 project.LoadXml (documentString);
215 project.Targets.CopyTo (new Target [1], 1);
219 public void TestExists1 ()
221 string documentString = @"
222 <Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003"">
223 <Target Name='name' />
227 engine = new Engine (Consts.BinPath);
229 project = engine.CreateNewProject ();
230 project.LoadXml (documentString);
232 Assert.AreEqual (1, project.Targets.Count, "A1");
233 Assert.IsTrue (project.Targets.Exists ("name"), "A2");
234 Assert.IsTrue (project.Targets.Exists ("NAME"), "A3");
235 Assert.IsFalse (project.Targets.Exists ("something_that_doesnt_exist"), "A4");
239 [ExpectedException (typeof (ArgumentNullException))]
240 public void TestExists2 ()
242 string documentString = @"
243 <Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003"">
244 <Target Name='name' />
248 engine = new Engine (Consts.BinPath);
250 project = engine.CreateNewProject ();
251 project.LoadXml (documentString);
253 project.Targets.Exists (null);
257 public void TestGetEnumerator ()
259 string documentString = @"
260 <Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003"">
261 <Target Name='first' />
262 <Target Name='second' />
266 engine = new Engine (Consts.BinPath);
268 project = engine.CreateNewProject ();
269 project.LoadXml (documentString);
271 ArrayList targets = new ArrayList ();
273 foreach (Target t in project.Targets)
276 Assert.AreEqual ("first", ((Target) targets [0]).Name, "A1");
277 Assert.AreEqual ("second", ((Target) targets [1]).Name, "A1");
282 public void TestRemoveTarget1 ()
284 string documentString = @"
285 <Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003"">
286 <Target Name='first' />
287 <Target Name='second' />
291 engine = new Engine (Consts.BinPath);
293 project = engine.CreateNewProject ();
294 project.LoadXml (documentString);
296 Assert.IsTrue (project.Targets.Exists ("first"), "A1");
297 Assert.IsTrue (project.Targets.Exists ("second"), "A1");
299 project.Targets.RemoveTarget (project.Targets ["first"]);
301 Assert.IsFalse (project.Targets.Exists ("first"), "A1");
302 Assert.IsTrue (project.Targets.Exists ("second"), "A1");
306 [ExpectedException (typeof (ArgumentNullException))]
307 [Category ("NotDotNet")]
308 public void TestRemoveTarget2 ()
310 string documentString = @"
311 <Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003"">
312 <Target Name='first' />
316 engine = new Engine (Consts.BinPath);
318 project = engine.CreateNewProject ();
319 project.LoadXml (documentString);
321 project.Targets.RemoveTarget (null);
325 public void TestIndexer1 ()
327 string documentString = @"
328 <Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003"">
329 <Target Name='first' />
333 engine = new Engine (Consts.BinPath);
335 project = engine.CreateNewProject ();
336 project.LoadXml (documentString);
338 Target t1 = project.Targets ["first"];
340 Assert.AreEqual ("first", t1.Name, "A1");
342 Target t2 = project.Targets ["target_that_doesnt_exist"];
344 Assert.IsNull (t2, "A2");