2007-01-12 Marek Sieradzki <marek.sieradzki@gmail.com>
[mono.git] / mcs / class / Microsoft.Build.Engine / Test / Microsoft.Build.BuildEngine / UsingTaskTest.cs
1 //
2 // UsingTaskTest.cs
3 //
4 // Author:
5 //   Marek Sieradzki (marek.sieradzki@gmail.com)
6 //
7 // (C) 2006 Marek Sieradzki
8 //
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:
16 //
17 // The above copyright notice and this permission notice shall be
18 // included in all copies or substantial portions of the Software.
19 //
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.
27
28 using System;
29 using System.Collections;
30 using Microsoft.Build.BuildEngine;
31 using Microsoft.Build.Framework;
32 using Microsoft.Build.Utilities;
33 using NUnit.Framework;
34
35 namespace MonoTests.Microsoft.Build.BuildEngine {
36         [TestFixture]
37         public class UsingTaskTest {
38                 
39                 Engine          engine;
40                 Project         project;
41                 
42                 [Test]
43                 public void TestAssemblyFile1 ()
44                 {
45                         string documentString = @"
46                                 <Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003"">
47                                         <UsingTask
48                                                 AssemblyFile='Test/resources/TestTasks.dll'
49                                                 TaskName='SimpleTask'
50                                                 Condition='true'
51                                         />
52                                 </Project>
53                         ";
54
55                         engine = new Engine (Consts.BinPath);
56                         project = engine.CreateNewProject ();
57                         project.LoadXml (documentString);
58                         
59                         IEnumerator en = project.UsingTasks.GetEnumerator ();
60                         en.MoveNext ();
61                         
62                         UsingTask ut = (UsingTask) en.Current;
63                         
64                         Assert.AreEqual ("Test/resources/TestTasks.dll", ut.AssemblyFile, "A1");
65                         Assert.IsNull (ut.AssemblyName, "A2");
66                         Assert.AreEqual ("true", ut.Condition, "A3");
67                         Assert.AreEqual (false, ut.IsImported, "A4");
68                         Assert.AreEqual ("SimpleTask", ut.TaskName, "A5");
69                 }
70
71                 [Test]
72                 public void TestAssemblyFile2 ()
73                 {
74                         string documentString = @"
75                                 <Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003"">
76                                         <UsingTask
77                                                 AssemblyFile='Test/resources/TestTasks.dll'
78                                                 TaskName='SimpleTask'
79                                         />
80                                 </Project>
81                         ";
82
83                         engine = new Engine (Consts.BinPath);
84                         project = engine.CreateNewProject ();
85                         project.LoadXml (documentString);
86                         
87                         IEnumerator en = project.UsingTasks.GetEnumerator ();
88                         en.MoveNext ();
89                         
90                         UsingTask ut = (UsingTask) en.Current;
91                         
92                         Assert.AreEqual ("Test/resources/TestTasks.dll", ut.AssemblyFile, "A1");
93                         Assert.IsNull (ut.AssemblyName, "A2");
94                         Assert.AreEqual (null, ut.Condition, "A3");
95                         Assert.AreEqual (false, ut.IsImported, "A4");
96                         Assert.AreEqual ("SimpleTask", ut.TaskName, "A5");
97                 }
98
99                 [Test]
100                 // NOTE: quite hacky test, it works because MSBuild doesn't check type of task at loading
101                 public void TestAssemblyName ()
102                 {
103                         string documentString = @"
104                                 <Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003"">
105                                         <UsingTask
106                                                 AssemblyName='System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'
107                                                 TaskName='System.Uri'
108                                                 Condition='true'
109                                         />
110                                 </Project>
111                         ";
112
113                         engine = new Engine (Consts.BinPath);
114                         project = engine.CreateNewProject ();
115                         project.LoadXml (documentString);
116                         
117                         IEnumerator en = project.UsingTasks.GetEnumerator ();
118                         en.MoveNext ();
119                         
120                         UsingTask ut = (UsingTask) en.Current;
121                         
122                         Assert.AreEqual ("System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", ut.AssemblyName, "A1");
123                         Assert.IsNull (ut.AssemblyFile, "A2");
124                         Assert.AreEqual ("true", ut.Condition, "A3");
125                         Assert.AreEqual (false, ut.IsImported, "A4");
126                         Assert.AreEqual ("System.Uri", ut.TaskName, "A5");
127                 }
128                 
129                 [Test]
130                 [ExpectedException (typeof (InvalidProjectFileException),
131                         "The required attribute \"TaskName\" is missing from element <UsingTask>.  ")]
132                 public void TestTaskName ()
133                 {
134                         string documentString = @"
135                                 <Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003"">
136                                         <UsingTask
137                                                 AssemblyFile='Test/resources/TestTasks.dll'
138                                         />
139                                 </Project>
140                         ";
141
142                         engine = new Engine (Consts.BinPath);
143                         project = engine.CreateNewProject ();
144                         project.LoadXml (documentString);
145                 }
146
147                 [Test]
148                 [ExpectedException (typeof (InvalidProjectFileException),
149                         "A <UsingTask> element must contain either the \"AssemblyName\" attribute or the \"AssemblyFile\" attribute (but not both).  ")]
150                 public void TestAssemblyNameOrAssemblyFile1 ()
151                 {
152                         string documentString = @"
153                                 <Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003"">
154                                         <UsingTask
155                                                 TaskName='SimpleTask'
156                                         />
157                                 </Project>
158                         ";
159
160                         engine = new Engine (Consts.BinPath);
161                         project = engine.CreateNewProject ();
162                         project.LoadXml (documentString);
163                 }
164
165                 [Test]
166                 [ExpectedException (typeof (InvalidProjectFileException),
167                         "A <UsingTask> element must contain either the \"AssemblyName\" attribute or the \"AssemblyFile\" attribute (but not both).  ")]
168                 public void TestAssemblyNameOrAssemblyFile2 ()
169                 {
170                         string documentString = @"
171                                 <Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003"">
172                                         <UsingTask
173                                                 TaskName='SimpleTask'
174                                                 AssemblyFile='A'
175                                                 AssemblyName='B'
176                                         />
177                                 </Project>
178                         ";
179
180                         engine = new Engine (Consts.BinPath);
181                         project = engine.CreateNewProject ();
182                         project.LoadXml (documentString);
183                 }
184         }
185 }