update MEF to preview 9
[mcs.git] / class / System.ComponentModel.Composition / Tests / ComponentModelUnitTest / System / ComponentModel / Composition / CompositionResultOfTTest.cs
blob98a2960c2457331476fe128f0916b728a0e394e5
1 // -----------------------------------------------------------------------
2 // Copyright (c) Microsoft Corporation. All rights reserved.
3 // -----------------------------------------------------------------------
4 using System;
5 using System.Collections.Generic;
6 using System.ComponentModel.Composition.UnitTesting;
7 using System.ComponentModel.Composition.Factories;
8 using System.Linq;
9 using System.UnitTesting;
10 using Microsoft.VisualStudio.TestTools.UnitTesting;
12 namespace System.ComponentModel.Composition
14 [TestClass]
15 public class CompositionResultOfTTest
17 [TestMethod]
18 public void Constructor1_ShouldSetErrorsPropertyToEmptyEnumerable()
20 var result = new CompositionResult<string>();
22 EnumerableAssert.IsEmpty(result.Errors);
25 [TestMethod]
26 public void Constructor2_ShouldSetErrorsPropertyToEmptyEnumerable()
28 var result = new CompositionResult<string>("Value");
30 EnumerableAssert.IsEmpty(result.Errors);
33 [TestMethod]
34 public void Constructor3_NullAsErrorsArgument_ShouldSetErrorsPropertyToEmptyEnumerable()
36 var result = new CompositionResult<string>((CompositionError[])null);
38 EnumerableAssert.IsEmpty(result.Errors);
41 [TestMethod]
42 public void Constructor4_NullAsErrorsArgument_ShouldSetErrorsPropertyToEmptyEnumerable()
44 var result = new CompositionResult<string>((IEnumerable<CompositionError>)null);
46 EnumerableAssert.IsEmpty(result.Errors);
49 [TestMethod]
50 public void Constructor5_NullAsErrorsArgument_ShouldSetErrorsPropertyToEmptyEnumerable()
52 var result = new CompositionResult<string>("Value", (IEnumerable<CompositionError>)null);
54 EnumerableAssert.IsEmpty(result.Errors);
57 [TestMethod]
58 public void Constructor3_EmptyAsErrorsArgument_ShouldSetErrorsPropertyToEmptyEnumerable()
60 var result = new CompositionResult<string>(new CompositionError[0]);
62 EnumerableAssert.IsEmpty(result.Errors);
65 [TestMethod]
66 public void Constructor4_EmptyAsErrorsArgument_ShouldSetErrorsPropertyToEmptyEnumerable()
68 var result = new CompositionResult<string>(Enumerable.Empty<CompositionError>());
70 EnumerableAssert.IsEmpty(result.Errors);
73 [TestMethod]
74 public void Constructor5_EmptyAsErrorsArgument_ShouldSetErrorsPropertyToEmptyEnumerable()
76 var result = new CompositionResult<string>("Value", Enumerable.Empty<CompositionError>());
78 EnumerableAssert.IsEmpty(result.Errors);
81 [TestMethod]
82 public void Constructor3_ValuesAsErrorsArgument_ShouldSetErrorsProperty()
84 var errors = Expectations.GetCompositionErrors();
86 foreach (var e in errors)
88 var result = new CompositionResult<string>(e.ToArray());
90 EnumerableAssert.AreEqual(e, result.Errors);
94 [TestMethod]
95 public void Constructor4_ValuesAsErrorsArgument_ShouldSetErrorsProperty()
97 var errors = Expectations.GetCompositionErrors();
99 foreach (var e in errors)
101 var result = new CompositionResult<string>(e);
103 EnumerableAssert.AreEqual(e, result.Errors);
107 [TestMethod]
108 public void Constructor5_ValuesAsErrorsArgument_ShouldSetErrorsProperty()
110 var errors = Expectations.GetCompositionErrors();
112 foreach (var e in errors)
114 var result = new CompositionResult<string>("Value", e);
116 EnumerableAssert.AreEqual(e, result.Errors);
120 [TestMethod]
121 public void Constructor1_ShouldSetSucceededPropertyToTrue()
123 var result = new CompositionResult<string>();
125 Assert.IsTrue(result.Succeeded);
129 [TestMethod]
130 public void Constructor2_ShouldSetSucceededPropertyToTrue()
132 var result = new CompositionResult<string>("Value");
134 Assert.IsTrue(result.Succeeded);
137 [TestMethod]
138 public void Constructor3_NullAsErrorsArgument_ShouldSetSucceededPropertyToTrue()
140 var result = new CompositionResult<string>((CompositionError[])null);
142 Assert.IsTrue(result.Succeeded);
145 [TestMethod]
146 public void Constructor4_NullAsErrorsArgument_ShouldSetSucceededPropertyToTrue()
148 var result = new CompositionResult<string>((IEnumerable<CompositionError>)null);
150 Assert.IsTrue(result.Succeeded);
153 [TestMethod]
154 public void Constructor5_NullAsErrorsArgument_ShouldSetSucceededPropertyToTrue()
156 var result = new CompositionResult<string>("Value", (IEnumerable<CompositionError>)null);
158 Assert.IsTrue(result.Succeeded);
161 [TestMethod]
162 public void Constructor3_EmptyAsErrorsArgument_ShouldSetSucceededPropertyToTrue()
164 var result = new CompositionResult<string>(new CompositionError[0]);
166 Assert.IsTrue(result.Succeeded);
169 [TestMethod]
170 public void Constructor4_EmptyAsErrorsArgument_ShouldSetSucceededPropertyToTrue()
172 var result = new CompositionResult<string>(Enumerable.Empty<CompositionError>());
174 Assert.IsTrue(result.Succeeded);
177 [TestMethod]
178 public void Constructor5_EmptyAsErrorsArgument_ShouldSetSucceededPropertyToTrue()
180 var result = new CompositionResult<string>("Value", Enumerable.Empty<CompositionError>());
182 Assert.IsTrue(result.Succeeded);
185 [TestMethod]
186 public void Constructor3_ValuesAsErrorsArgument_ShouldSetSucceededPropertyToTrueIfThereAreErrors()
188 var errors = Expectations.GetCompositionErrors();
190 foreach (var e in errors)
192 var result = new CompositionResult<string>(e.ToArray());
194 if (e.Count() > 0)
196 Assert.IsFalse(result.Succeeded);
198 else
200 Assert.IsTrue(result.Succeeded);
205 [TestMethod]
206 public void Constructor4_ValuesAsErrorsArgument_ShouldSetSucceededPropertyToTrueIfThereAreErrors()
208 var errors = Expectations.GetCompositionErrors();
210 foreach (var e in errors)
212 var result = new CompositionResult<string>(e);
214 if (e.Count() > 0)
216 Assert.IsFalse(result.Succeeded);
218 else
220 Assert.IsTrue(result.Succeeded);
225 [TestMethod]
226 public void Constructor5_ValuesAsErrorsArgument_ShouldSetSucceededPropertyToTrueIfThereAreErrors()
228 var errors = Expectations.GetCompositionErrors();
230 foreach (var e in errors)
232 var result = new CompositionResult<string>("Value", e);
234 if (e.Count() > 0)
236 Assert.IsFalse(result.Succeeded);
238 else
240 Assert.IsTrue(result.Succeeded);
245 [TestMethod]
246 public void ToResult_NullAsErrorsArgument_ShouldReturnResultWithEmptyErrorsProperty()
248 var result = CreateCompositionResult<string>((IEnumerable<CompositionError>)null);
250 var copy = result.ToResult();
252 EnumerableAssert.IsEmpty(copy.Errors);
255 [TestMethod]
256 public void ToResult_EmptyEnumerableAsErrorsArgument_ShouldReturnResultWithEmptyErrorsProperty()
258 var result = CreateCompositionResult<string>(Enumerable.Empty<CompositionError>());
260 var copy = result.ToResult();
262 EnumerableAssert.IsEmpty(copy.Errors);
265 [TestMethod]
266 public void ToResult_ValueAsErrorsArgument_ShouldReturnResultWithErrorsPropertySet()
268 var expectations = Expectations.GetCompositionErrors();
270 foreach (var e in expectations)
272 var result = CreateCompositionResult<string>(e);
274 var copy = result.ToResult();
276 EnumerableAssert.AreSequenceSame(result.Errors, copy.Errors);
280 [TestMethod]
281 public void ToResultOfT_NullAsErrorsArgument_ShouldReturnResultWithEmptyErrorsProperty()
283 var result = CreateCompositionResult<string>((IEnumerable<CompositionError>)null);
285 var copy = result.ToResult<string>();
287 EnumerableAssert.IsEmpty(copy.Errors);
290 [TestMethod]
291 public void ToResultOfT_EmptyEnumerableAsErrorsArgument_ShouldReturnResultWithEmptyErrorsProperty()
293 var result = CreateCompositionResult<string>(Enumerable.Empty<CompositionError>());
295 var copy = result.ToResult<string>();
297 EnumerableAssert.IsEmpty(copy.Errors);
300 [TestMethod]
301 public void ToResultOfT_ValueAsErrorsArgument_ShouldReturnResultWithErrorsPropertySet()
303 var expectations = Expectations.GetCompositionErrors();
305 foreach (var e in expectations)
307 var result = CreateCompositionResult<string>(e);
309 var copy = result.ToResult<string>();
311 EnumerableAssert.AreSequenceSame(result.Errors, copy.Errors);
315 [TestMethod]
316 public void ToResultOfT_ReferenceValueAsValueArgument_ShouldReturnResultWithNullValueProperty()
318 var expectations = Expectations.GetObjectsReferenceTypes();
320 foreach (var e in expectations)
322 var result = CreateCompositionResult<object>(e);
324 var copy = result.ToResult<object>();
326 Assert.IsNull(copy.Value);
330 [TestMethod]
331 public void ToResultOfT_ValueTypeValueAsValueArgument_ShouldReturnResultWithNullValueProperty()
333 var expectations = Expectations.GetObjectsValueTypes();
335 foreach (var e in expectations)
337 var result = CreateCompositionResult<ValueType>(e);
339 var copy = result.ToResult<ValueType>();
341 Assert.IsNull(copy.Value);
345 [TestMethod]
346 public void Value_NullAsErrorsArgumentAndValueAsValueArgument_ShouldReturnValue()
348 var expectations = Expectations.GetObjectsReferenceTypes();
350 foreach (var e in expectations)
352 var result = CreateCompositionResult<object>(e, (IEnumerable<CompositionError>)null);
354 Assert.AreEqual(e, result.Value);
358 [TestMethod]
359 public void Value_EmptyEnumerableAsErrorsArgumentAndValueAsValueArgument_ShouldReturnValue()
361 var expectations = Expectations.GetObjectsReferenceTypes();
363 foreach (var e in expectations)
365 var result = CreateCompositionResult<object>(e, Enumerable.Empty<CompositionError>());
367 Assert.AreEqual(e, result.Value);
371 [TestMethod]
372 public void Value_SingleValueAsErrorsArgument_ShouldThrowComposition()
374 var errorIds = Expectations.GetEnumValues<CompositionErrorId>();
376 foreach (var errorId in errorIds)
378 var result = CreateCompositionResult<string>(errorId);
380 CompositionAssert.ThrowsError((ErrorId)errorId, () =>
382 var value = result.Value;
387 [TestMethod]
388 public void Value_TwoSameValuesAsErrorsArgument_ShouldThrowComposition()
390 var errorIds = Expectations.GetEnumValues<CompositionErrorId>();
392 foreach (var errorId in errorIds)
394 var result = CreateCompositionResult<string>(errorId, errorId);
396 CompositionAssert.ThrowsErrors((ErrorId)errorId, (ErrorId)errorId, () =>
398 var value = result.Value;
403 [TestMethod]
404 public void Value_TwoDifferentValuesAsErrorsArgument_ShouldThrowComposition()
406 var errorIds1 = Expectations.GetEnumValues<CompositionErrorId>();
407 var errorIds2 = Expectations.GetEnumValues<CompositionErrorId>();
409 for (int i = 0; i < errorIds1.Count(); i++)
411 var errorId1 = errorIds1.ElementAt(i);
412 var errorId2 = errorIds1.ElementAt(errorIds2.Count() - 1 - i);
414 var result = CreateCompositionResult<string>(errorId1, errorId2);
416 CompositionAssert.ThrowsErrors((ErrorId)errorId1, (ErrorId)errorId2, () =>
418 var value = result.Value;
423 private CompositionResult<T> CreateCompositionResult<T>(params CompositionErrorId[] errorIds)
425 return new CompositionResult<T>(errorIds.Select(id =>
427 return ErrorFactory.Create(id);
428 }));
431 private CompositionResult<T> CreateCompositionResult<T>(int count)
433 var expectations = Expectations.GetEnumValues<CompositionErrorId>();
435 List<CompositionError> errors = new List<CompositionError>();
437 foreach (var e in expectations.Take(count))
439 errors.Add(ErrorFactory.Create(e));
442 return CreateCompositionResult<T>(errors);
445 private CompositionResult<T> CreateCompositionResult<T>(IEnumerable<CompositionError> errors)
447 return new CompositionResult<T>(errors);
450 private CompositionResult<T> CreateCompositionResult<T>(T value)
452 return new CompositionResult<T>(value);
455 private CompositionResult<T> CreateCompositionResult<T>(T value, IEnumerable<CompositionError> errors)
457 return new CompositionResult<T>(value, errors);