1 // ***********************************************************************
2 // Copyright (c) 2008 Charlie Poole
3 //
4 // Permission is hereby granted, free of charge, to any person obtaining
5 // a copy of this software and associated documentation files (the
6 // "Software"), to deal in the Software without restriction, including
7 // without limitation the rights to use, copy, modify, merge, publish,
8 // distribute, sublicense, and/or sell copies of the Software, and to
9 // permit persons to whom the Software is furnished to do so, subject to
10 // the following conditions:
11 //
12 // The above copyright notice and this permission notice shall be
13 // included in all copies or substantial portions of the Software.
14 //
15 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22 // ***********************************************************************
23 
24 using System;
25 using System.Collections;
26 using System.Reflection;
27 
28 namespace NUnit.Framework
29 {
30 	/// <summary>
31 	/// ListMapper is used to transform a collection used as an actual argument
32 	/// producing another collection to be used in the assertion.
33 	/// </summary>
34 	public class ListMapper
35 	{
36 		ICollection original;
37 
38 		/// <summary>
39 		/// Construct a ListMapper based on a collection
40 		/// </summary>
41 		/// <param name="original">The collection to be transformed</param>
ListMapper( ICollection original )42  		public ListMapper( ICollection original )
43 		{
44 			this.original = original;
45 		}
46 
47 		/// <summary>
48 		/// Produces a collection containing all the values of a property
49 		/// </summary>
50 		/// <param name="name">The collection of property values</param>
51 		/// <returns></returns>
Property( string name )52 		public ICollection Property( string name )
53 		{
54 			ObjectList propList = new ObjectList();
55 			foreach( object item in original )
56 			{
57 				PropertyInfo property = item.GetType().GetProperty( name,
58 					BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance );
59 				if ( property == null )
60 					throw new ArgumentException( string.Format(
61 						"{0} does not have a {1} property", item, name ) );
62 
63 				propList.Add( property.GetValue( item, null ) );
64 			}
65 
66 			return propList;
67 		}
68 	}
69 }
70