1 // -----------------------------------------------------------------------
\r
2 // Copyright (c) Microsoft Corporation. All rights reserved.
\r
3 // -----------------------------------------------------------------------
\r
5 using System.Collections.Generic;
\r
6 using System.ComponentModel.Composition.UnitTesting;
\r
8 using System.UnitTesting;
\r
9 using Microsoft.VisualStudio.TestTools.UnitTesting;
\r
10 using System.ComponentModel.Composition.Hosting;
\r
11 using System.ComponentModel.Composition.Factories;
\r
13 namespace System.ComponentModel.Composition
\r
16 public class CompositionResultTest
\r
19 public void Constructor1_ShouldSetErrorsPropertyToEmptyEnumerable()
\r
21 var result = new CompositionResult();
\r
23 EnumerableAssert.IsEmpty(result.Errors);
\r
27 public void Constructor2_NullAsErrorsArgument_ShouldSetErrorsPropertyToEmptyEnumerable()
\r
29 var result = new CompositionResult((CompositionError[])null);
\r
31 EnumerableAssert.IsEmpty(result.Errors);
\r
35 public void Constructor3_NullAsErrorsArgument_ShouldSetErrorsPropertyToEmptyEnumerable()
\r
37 var result = new CompositionResult((IEnumerable<CompositionError>)null);
\r
39 EnumerableAssert.IsEmpty(result.Errors);
\r
43 public void Constructor2_EmptyAsErrorsArgument_ShouldSetErrorsPropertyToEmptyEnumerable()
\r
45 var result = new CompositionResult(new CompositionError[0]);
\r
47 EnumerableAssert.IsEmpty(result.Errors);
\r
51 public void Constructor3_EmptyAsErrorsArgument_ShouldSetErrorsPropertyToEmptyEnumerable()
\r
53 var result = new CompositionResult(Enumerable.Empty<CompositionError>());
\r
55 EnumerableAssert.IsEmpty(result.Errors);
\r
59 public void Constructor2_ValuesAsErrorsArgument_ShouldSetErrorsProperty()
\r
61 var errors = Expectations.GetCompositionErrors();
\r
63 foreach (var e in errors)
\r
65 var result = new CompositionResult(e.ToArray());
\r
67 EnumerableAssert.AreEqual(e, result.Errors);
\r
72 public void Constructor3_ValuesAsErrorsArgument_ShouldSetErrorsProperty()
\r
74 var errors = Expectations.GetCompositionErrors();
\r
76 foreach (var e in errors)
\r
78 var result = new CompositionResult(e);
\r
80 EnumerableAssert.AreEqual(e, result.Errors);
\r
85 public void Constructor1_ShouldSetSucceededPropertyToTrue()
\r
87 var result = new CompositionResult();
\r
89 Assert.IsTrue(result.Succeeded);
\r
93 public void Constructor2_NullAsErrorsArgument_ShouldSetSucceededPropertyToTrue()
\r
95 var result = new CompositionResult((CompositionError[])null);
\r
97 Assert.IsTrue(result.Succeeded);
\r
101 public void Constructor3_NullAsErrorsArgument_ShouldSetSucceededPropertyToTrue()
\r
103 var result = new CompositionResult((IEnumerable<CompositionError>)null);
\r
105 Assert.IsTrue(result.Succeeded);
\r
109 public void Constructor2_EmptyAsErrorsArgument_ShouldSetSucceededPropertyToTrue()
\r
111 var result = new CompositionResult(new CompositionError[0]);
\r
113 Assert.IsTrue(result.Succeeded);
\r
117 public void Constructor3_EmptyAsErrorsArgument_ShouldSetSucceededPropertyToTrue()
\r
119 var result = new CompositionResult(Enumerable.Empty<CompositionError>());
\r
121 Assert.IsTrue(result.Succeeded);
\r
125 public void Constructor2_ValuesAsErrorsArgument_ShouldSetSucceededPropertyToTrueIfThereAreErrors()
\r
127 var errors = Expectations.GetCompositionErrors();
\r
129 foreach (var e in errors)
\r
131 var result = new CompositionResult(e.ToArray());
\r
135 Assert.IsFalse(result.Succeeded);
\r
139 Assert.IsTrue(result.Succeeded);
\r
145 public void Constructor3_ValuesAsErrorsArgument_ShouldSetSucceededPropertyToTrueIfThereAreErrors()
\r
147 var errors = Expectations.GetCompositionErrors();
\r
149 foreach (var e in errors)
\r
151 var result = new CompositionResult(e);
\r
155 Assert.IsFalse(result.Succeeded);
\r
159 Assert.IsTrue(result.Succeeded);
\r
165 public void MergeResult_ResultWithNullErrorsAsResultArgument_ShouldReturnResultWithSameErrors()
\r
167 var emptyResult = CreateCompositionResult((IEnumerable<CompositionError>)null);
\r
169 var expectations = Expectations.GetCompositionErrors();
\r
171 foreach (var e in expectations)
\r
173 var result = CreateCompositionResult(e);
\r
175 var mergedResult = result.MergeResult(emptyResult);
\r
177 CompositionAssert.AreEqual(result, mergedResult);
\r
182 public void MergeResult_ResultWithEmptyErrorsAsResultArgument_ShouldReturnResultWithSameErrors()
\r
184 var emptyResult = CreateCompositionResult(Enumerable.Empty<CompositionError>());
\r
186 var expectations = Expectations.GetCompositionErrors();
\r
188 foreach (var e in expectations)
\r
190 var result = CreateCompositionResult(e);
\r
192 var mergedResult = result.MergeResult(emptyResult);
\r
194 CompositionAssert.AreEqual(result, mergedResult);
\r
199 public void MergeResult_ResultWithErrorsAsResultArgument_ShouldReturnResultWithCombinedErrors()
\r
201 var expectations = Expectations.GetCompositionErrors();
\r
203 foreach (var e in expectations)
\r
205 var result1 = CreateCompositionResult(e);
\r
206 var result2 = CreateCompositionResult(e);
\r
208 var mergedResult = result1.MergeResult(result2);
\r
209 var mergedErrors = result1.Errors.Concat(result2.Errors);
\r
211 EnumerableAssert.AreSequenceSame(mergedErrors, mergedResult.Errors);
\r
212 Assert.AreEqual(mergedResult.Succeeded, result1.Succeeded | result2.Succeeded);
\r
217 public void MergeError_ValueAsErrorArgumentWhenMergedWithResultWithNullErrors_ShouldReturnResultWithCombinedErrors()
\r
219 var result = CreateCompositionResult((IEnumerable<CompositionError>)null);
\r
220 var expectations = Expectations.GetEnumValues<CompositionErrorId>();
\r
222 foreach (var e in expectations)
\r
224 var error = ErrorFactory.Create(e);
\r
226 var mergedResult = result.MergeError(error);
\r
227 var mergedErrors = result.Errors.Concat(new CompositionError[] { error });
\r
229 EnumerableAssert.AreSequenceSame(mergedErrors, mergedResult.Errors);
\r
230 Assert.IsFalse(mergedResult.Succeeded);
\r
235 public void MergeError_ValueAsErrorArgumentWhenMergedWithResultWithEmptyErrors_ShouldReturnResultWithCombinedErrors()
\r
237 var result = CreateCompositionResult(Enumerable.Empty<CompositionError>());
\r
238 var expectations = Expectations.GetEnumValues<CompositionErrorId>();
\r
240 foreach (var e in expectations)
\r
242 var error = ErrorFactory.Create(e);
\r
244 var mergedResult = result.MergeError(error);
\r
245 var mergedErrors = result.Errors.Concat(new CompositionError[] { error });
\r
247 EnumerableAssert.AreSequenceSame(mergedErrors, mergedResult.Errors);
\r
248 Assert.IsFalse(mergedResult.Succeeded);
\r
253 public void MergeError_ValueAsErrorArgumentWhenMergedWithResultWithErrors_ShouldReturnResultWithCombinedErrors()
\r
255 var result = CreateCompositionResult(2);
\r
256 var expectations = Expectations.GetEnumValues<CompositionErrorId>();
\r
258 foreach (var e in expectations)
\r
260 var error = ErrorFactory.Create(e);
\r
262 var mergedResult = result.MergeError(error);
\r
263 var mergedErrors = result.Errors.Concat(new CompositionError[] { error });
\r
265 EnumerableAssert.AreSequenceSame(mergedErrors, mergedResult.Errors);
\r
266 Assert.IsFalse(mergedResult.Succeeded);
\r
271 public void MergeErrors_ValueAsErrorArgumentWhenMergedWithResultWithNullErrors_ShouldReturnResultWithCombinedErrors()
\r
273 var result = CreateCompositionResult((IEnumerable<CompositionError>)null);
\r
274 var expectations = Expectations.GetCompositionErrors();
\r
276 foreach (var e in expectations)
\r
278 var mergedResult = result.MergeErrors(e);
\r
279 var mergedErrors = result.Errors.Concat(e);
\r
281 EnumerableAssert.AreSequenceSame(mergedErrors, mergedResult.Errors);
\r
282 Assert.AreEqual(!e.Any(), mergedResult.Succeeded);
\r
287 public void MergeErrors_ValueAsErrorArgumentWhenMergedWithResultWithEmptyErrors_ShouldReturnResultWithCombinedErrors()
\r
289 var result = CreateCompositionResult(Enumerable.Empty<CompositionError>());
\r
290 var expectations = Expectations.GetCompositionErrors();
\r
292 foreach (var e in expectations)
\r
294 var mergedResult = result.MergeErrors(e);
\r
295 var mergedErrors = result.Errors.Concat(e);
\r
297 EnumerableAssert.AreSequenceSame(mergedErrors, mergedResult.Errors);
\r
298 Assert.AreEqual(!e.Any(), mergedResult.Succeeded);
\r
303 public void MergeErrors_ValueAsErrorArgumentWhenMergedWithResultWithErrors_ShouldReturnResultWithCombinedErrors()
\r
305 var result = CreateCompositionResult(2);
\r
306 var expectations = Expectations.GetCompositionErrors();
\r
308 foreach (var e in expectations)
\r
310 var mergedResult = result.MergeErrors(e);
\r
311 var mergedErrors = result.Errors.Concat(e);
\r
313 EnumerableAssert.AreSequenceSame(mergedErrors, mergedResult.Errors);
\r
314 Assert.IsFalse(mergedResult.Succeeded);
\r
319 public void ThrowOnErrors_NullAsErrorsArgument_ShouldNotThrow()
\r
321 var result = CreateCompositionResult((IEnumerable<CompositionError>)null);
\r
323 result.ThrowOnErrors();
\r
327 public void ThrowOnErrors_EmptyEnumerableAsErrorsArgument_ShouldNotThrow()
\r
329 var result = CreateCompositionResult(Enumerable.Empty<CompositionError>());
\r
331 result.ThrowOnErrors();
\r
335 public void ThrowOnErrors_SingleValueAsErrorsArgument_ShouldThrowComposition()
\r
337 var errorIds = Expectations.GetEnumValues<CompositionErrorId>();
\r
339 foreach (var errorId in errorIds)
\r
341 var result = CreateCompositionResult(errorId);
\r
343 CompositionAssert.ThrowsError((ErrorId)errorId, () =>
\r
345 result.ThrowOnErrors();
\r
351 public void ThrowOnErrors_TwoSameValuesAsErrorsArgument_ShouldThrowComposition()
\r
353 var errorIds = Expectations.GetEnumValues<CompositionErrorId>();
\r
355 foreach (var errorId in errorIds)
\r
357 var result = CreateCompositionResult(errorId, errorId);
\r
359 CompositionAssert.ThrowsErrors((ErrorId)errorId, (ErrorId)errorId, () =>
\r
361 result.ThrowOnErrors();
\r
367 public void ThrowOnErrors_TwoDifferentValuesAsErrorsArgument_ShouldThrowComposition()
\r
369 var errorIds1 = Expectations.GetEnumValues<CompositionErrorId>();
\r
370 var errorIds2 = Expectations.GetEnumValues<CompositionErrorId>();
\r
372 for (int i = 0; i < errorIds1.Count(); i++)
\r
374 var errorId1 = errorIds1.ElementAt(i);
\r
375 var errorId2 = errorIds1.ElementAt(errorIds2.Count() - 1 - i);
\r
377 var result = CreateCompositionResult(errorId1, errorId2);
\r
379 CompositionAssert.ThrowsErrors((ErrorId)errorId1, (ErrorId)errorId2, () =>
\r
381 result.ThrowOnErrors();
\r
387 public void ToResultOfT_NullAsErrorsArgument_ShouldReturnResultWithEmptyErrorsProperty()
\r
389 var result = CreateCompositionResult((IEnumerable<CompositionError>)null);
\r
391 var copy = result.ToResult<string>("Value");
\r
393 EnumerableAssert.IsEmpty(copy.Errors);
\r
397 public void ToResultOfT_EmptyEnumerableAsErrorsArgument_ShouldReturnResultWithEmptyErrorsProperty()
\r
399 var result = CreateCompositionResult(Enumerable.Empty<CompositionError>());
\r
401 var copy = result.ToResult<string>("Value");
\r
403 EnumerableAssert.IsEmpty(copy.Errors);
\r
407 public void ToResultOfT_ValueAsErrorsArgument_ShouldReturnResultWithErrorsPropertySet()
\r
409 var expectations = Expectations.GetCompositionErrors();
\r
411 foreach (var e in expectations)
\r
413 var result = CreateCompositionResult(e);
\r
415 var copy = result.ToResult<string>("Value");
\r
417 EnumerableAssert.AreSequenceSame(result.Errors, copy.Errors);
\r
422 public void ToResultOfT_ReferenceValueAsValueArgument_ShouldReturnResultWithValuePropertySet()
\r
424 var expectations = Expectations.GetObjectsReferenceTypes();
\r
426 foreach (var e in expectations)
\r
428 var result = CreateCompositionResult();
\r
430 var copy = result.ToResult<object>(e);
\r
432 Assert.AreSame(e, copy.Value);
\r
437 public void ToResultOfT_ValueTypeValueAsValueArgument_ShouldReturnResultWithValuePropertySet()
\r
439 var expectations = Expectations.GetObjectsValueTypes();
\r
441 foreach (var e in expectations)
\r
443 var result = CreateCompositionResult();
\r
445 var copy = result.ToResult<object>(e);
\r
447 Assert.AreEqual(e, copy.Value);
\r
452 public void SucceededResult_ShouldSetSuccessPropertyToTrue()
\r
454 var succeeded = CompositionResult.SucceededResult.Succeeded;
\r
456 Assert.IsTrue(succeeded);
\r
460 public void SucceededResult_ShouldSetErrorsPropertyToEmptyEnumerable()
\r
462 var errors = CompositionResult.SucceededResult.Errors;
\r
464 EnumerableAssert.IsEmpty(errors);
\r
467 private CompositionResult CreateCompositionResult(params CompositionErrorId[] errorIds)
\r
469 return new CompositionResult(errorIds.Select(id =>
\r
471 return ErrorFactory.Create(id);
\r
475 private CompositionResult CreateCompositionResult(int count)
\r
477 var expectations = Expectations.GetEnumValues<CompositionErrorId>();
\r
479 List<CompositionError> errors = new List<CompositionError>();
\r
481 foreach (var e in expectations.Take(count))
\r
483 errors.Add(ErrorFactory.Create(e));
\r
486 return CreateCompositionResult(errors);
\r
489 private CompositionResult CreateCompositionResult(IEnumerable<CompositionError> errors)
\r
491 return new CompositionResult(errors);
\r