2006-12-07 Marek Sieradzki <marek.sieradzki@gmail.com>
[mono.git] / mcs / class / Microsoft.Build.Engine / Test / Microsoft.Build.BuildEngine / BuildItemTest.cs
1 //
2 // BuildItemTest.cs
3 //
4 // Author:
5 //   Marek Sieradzki (marek.sieradzki@gmail.com)
6 //
7 // (C) 2005 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 Microsoft.Build.BuildEngine;
30 using Microsoft.Build.Framework;
31 using Microsoft.Build.Utilities;
32 using NUnit.Framework;
33
34 namespace MonoTests.Microsoft.Build.BuildEngine {
35         [TestFixture]
36         public class BuildItemTest {
37
38                 BuildItem item;
39         
40                 [Test]
41                 public void TestCtor1 ()
42                 {
43                         string itemName = "itemName";
44                         string itemInclude = "a;b;c";
45         
46                         item = new BuildItem (itemName, itemInclude);
47         
48                         Assert.AreEqual (itemInclude, item.FinalItemSpec, "A1");
49                         Assert.AreEqual (itemInclude, item.Include, "A2");
50                         Assert.AreEqual (String.Empty, item.Exclude, "A3");
51                         Assert.AreEqual (String.Empty, item.Condition, "A4");
52                         Assert.AreEqual (false, item.IsImported, "A5");
53                         Assert.AreEqual (itemName, item.Name, "A6");
54                 }
55         
56                 [Test]
57                 public void TestCtor2 ()
58                 {
59                         string itemName = "itemName";
60                         string itemSpec = "a;b;c";
61                         // result of Utilities.Escape (itemSpec)
62                         string escapedInclude = "a%3bb%3bc";
63                         ITaskItem taskItem = new TaskItem (itemSpec);
64
65                         item = new BuildItem (itemName, taskItem);
66         
67                         Assert.AreEqual (itemSpec, item.FinalItemSpec, "A1");
68                         Assert.AreEqual (escapedInclude, item.Include, "A2");
69                         Assert.AreEqual (String.Empty, item.Exclude, "A3");
70                         Assert.AreEqual (String.Empty, item.Condition, "A4");
71                         Assert.AreEqual (false, item.IsImported, "A5");
72                         Assert.AreEqual (itemName, item.Name, "A6");
73                 }
74
75                 [Test]
76                 [ExpectedException (typeof (ArgumentNullException))]
77                 public void TestCtor3 ()
78                 {
79                         new BuildItem (null, (string) null);
80                 }
81
82                 [Test]
83                 [Ignore ("NullRefException on MS .NET 2.0")]
84                 public void TestCtor4 ()
85                 {
86                         new BuildItem (null, (ITaskItem) null);
87                 }
88
89                 [Test]
90                 public void TestCtor5 ()
91                 {
92                         new BuildItem (null, "something");
93                 }
94
95                 [Test]
96                 [ExpectedException (typeof (ArgumentException),
97                         "Parameter \"itemInclude\" cannot have zero length.")]
98                 public void TestCtor6 ()
99                 {
100                         new BuildItem (null, String.Empty);
101                 }
102
103                 [Test]
104                 [Ignore ("IndexOutOfRange on MS .NET 2.0")]
105                 public void TestCtor7 ()
106                 {
107                         new BuildItem (String.Empty, "something");
108                 }
109
110                 [Test]
111                 public void TestCopyCustomMetadataTo1 ()
112                 {
113                         BuildItem source, destination;
114                         string itemName1 = "a";
115                         string itemName2 = "b";
116                         string itemInclude = "a;b;c";
117                         string metadataName = "name";
118                         string metadataValue = "value";
119
120                         source = new BuildItem (itemName1, itemInclude);
121                         destination = new BuildItem (itemName2, itemInclude);
122
123                         source.SetMetadata (metadataName, metadataValue);
124
125                         source.CopyCustomMetadataTo (destination);
126
127                         Assert.AreEqual (metadataValue, destination.GetMetadata (metadataName), "A1");
128                         Assert.AreEqual (metadataValue, destination.GetEvaluatedMetadata (metadataName), "A2");
129                 }
130
131                 // NOTE: it's weird that they don't throw ArgumentNullException
132                 [Test]
133                 [Ignore ("MS throws NullRefException")]
134                 public void TestCopyCustomMetadataTo2 ()
135                 {
136                         BuildItem item = new BuildItem ("name", "include");
137                         item.SetMetadata ("name", "value");
138                         
139                         item.CopyCustomMetadataTo (null);
140                 }
141
142                 [Test]
143                 public void TestHasMetadata ()
144                 {
145                         string itemName = "a";
146                         string itemInclude = "a";
147                         string metadataName = "name";
148
149                         item = new BuildItem (itemName, itemInclude);
150
151                         Assert.AreEqual (false, item.HasMetadata (metadataName), "A1");
152             
153                         item.SetMetadata (metadataName, "value");
154
155                         Assert.AreEqual (true, item.HasMetadata (metadataName), "A2");
156                 }
157
158                 [Test]
159                 public void TestGetMetadata ()
160                 {
161                         string itemName = "a";
162                         string itemInclude = "a";
163                         string metadataName = "name";
164                         string metadataValue = "a;b;c";
165
166                         item = new BuildItem (itemName, itemInclude);
167
168                         Assert.AreEqual (String.Empty, item.GetMetadata (metadataName), "A1");
169
170                         item.SetMetadata (metadataName, metadataValue);
171
172                         Assert.AreEqual (metadataValue, item.GetMetadata (metadataName), "A2");
173                 }
174
175                 [Test]
176                 public void TestGetEvaluatedMetadata ()
177                 {
178                         string itemName = "a";
179                         string itemInclude = "a";
180                         string metadataName = "name";
181                         string metadataValue = "a;b;c";
182
183                         item = new BuildItem (itemName, itemInclude);
184
185                         Assert.AreEqual (String.Empty, item.GetEvaluatedMetadata (metadataName), "A1");
186
187                         item.SetMetadata (metadataName, metadataValue);
188
189                         Assert.AreEqual (metadataValue, item.GetEvaluatedMetadata (metadataName), "A2");
190                 }
191
192                 [Test]
193                 public void TestRemoveMetadata1 ()
194                 {
195                         string itemName = "a";
196                         string itemInclude = "a";
197                         string metadataName = "name";
198                         string metadataValue = "a;b;c";
199
200                         item = new BuildItem (itemName, itemInclude);
201
202                         item.SetMetadata (metadataName, metadataValue);
203
204                         Assert.AreEqual (true, item.HasMetadata (metadataName), "A1");
205
206                         item.RemoveMetadata (metadataName);
207
208                         Assert.AreEqual (false, item.HasMetadata (metadataName), "A2");
209                 }
210
211                 [Test]
212                 [ExpectedException (typeof (ArgumentNullException))]
213                 public void TestRemoveMetadata2 ()
214                 {
215                         item = new BuildItem ("name", "value");
216                         item.RemoveMetadata (null);
217                 }
218
219                 [Test]
220                 public void TestRemoveMetadata3 ()
221                 {
222                         item = new BuildItem ("name", "value");
223                         item.RemoveMetadata ("undefined_metadata");
224                 }
225
226                 [Test]
227                 [ExpectedException (typeof (ArgumentNullException))]
228                 public void TestSetMetadata1 ()
229                 {
230                         item = new BuildItem ("name", "include");
231                         item.SetMetadata (null, null);
232                 }
233
234                 [Test]
235                 [ExpectedException (typeof (ArgumentNullException))]
236                 public void TestSetMetadata2 ()
237                 {
238                         item = new BuildItem ("name", "include");
239                         item.SetMetadata ("name", null);
240                 }
241
242                 [Test]
243                 public void TestSetMetadata3 ()
244                 {
245                         item = new BuildItem ("name", "include");
246                         item.SetMetadata ("a", "$(A)");
247                         item.SetMetadata ("b", "$(A)", true);
248                         item.SetMetadata ("c", "$(A)", false);
249
250                         Assert.AreEqual ("$(A)", item.GetEvaluatedMetadata ("a"), "A1");
251                         Assert.AreEqual ("$(A)", item.GetEvaluatedMetadata ("b"), "A2");
252                         Assert.AreEqual ("$(A)", item.GetEvaluatedMetadata ("c"), "A3");
253                         Assert.AreEqual ("$(A)", item.GetMetadata ("a"), "A4");
254                         Assert.AreEqual (Utilities.Escape ("$(A)"), item.GetMetadata ("b"), "A5");
255                         Assert.AreEqual ("$(A)", item.GetMetadata ("c"), "A6");
256                 }
257         }
258 }