1 #region Copyright & License
2 //
3 // Copyright 2001-2005 The Apache Software Foundation
4 //
5 // Licensed under the Apache License, Version 2.0 (the "License");
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
8 //
9 // http://www.apache.org/licenses/LICENSE-2.0
10 //
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an "AS IS" BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
16 //
17 #endregion
18 
19 using System;
20 using System.Reflection;
21 
22 namespace log4net.Tests
23 {
24 	/// <summary>
25 	/// Summary description for Class1.
26 	/// </summary>
27 	public class Utils
28 	{
Utils()29 		private Utils()
30 		{
31 		}
32 
CreateInstance(string targetType)33 		public static object CreateInstance(string targetType)
34 		{
35 			return CreateInstance(Type.GetType(targetType, true, true));
36 		}
37 
CreateInstance(Type targetType)38 		public static object CreateInstance(Type targetType)
39 		{
40 			return targetType.GetConstructor(BindingFlags.NonPublic|BindingFlags.Public|BindingFlags.Instance, null, new Type[0], null).Invoke(null);
41 		}
42 
InvokeMethod(object target, string name, params object[] args)43 		public static object InvokeMethod(object target, string name, params object[] args)
44 		{
45 			return target.GetType().GetMethod(name, BindingFlags.NonPublic|BindingFlags.Public|BindingFlags.Static|BindingFlags.Instance, null, GetTypesArray(args), null).Invoke(target, args);
46 		}
47 
InvokeMethod(Type target, string name, params object[] args)48 		public static object InvokeMethod(Type target, string name, params object[] args)
49 		{
50 			return target.GetMethod(name, BindingFlags.NonPublic|BindingFlags.Public|BindingFlags.Static, null, GetTypesArray(args), null).Invoke(null, args);
51 		}
52 
GetField(object target, string name)53 		public static object GetField(object target, string name)
54 		{
55 			return target.GetType().GetField(name, BindingFlags.NonPublic|BindingFlags.Public|BindingFlags.Static|BindingFlags.Instance).GetValue(target);
56 		}
57 
SetField(object target, string name, object val)58 		public static void SetField(object target, string name, object val)
59 		{
60 			target.GetType().GetField(name, BindingFlags.NonPublic|BindingFlags.Public|BindingFlags.Static|BindingFlags.Instance).SetValue(target, val);
61 		}
62 
GetProperty(object target, string name)63 		public static object GetProperty(object target, string name)
64 		{
65 			return target.GetType().GetProperty(name, BindingFlags.NonPublic|BindingFlags.Public|BindingFlags.Static|BindingFlags.Instance).GetValue(target, null);
66 		}
67 
SetProperty(object target, string name, object val)68 		public static void SetProperty(object target, string name, object val)
69 		{
70 			target.GetType().GetProperty(name, BindingFlags.NonPublic|BindingFlags.Public|BindingFlags.Static|BindingFlags.Instance).SetValue(target, val, null);
71 		}
72 
GetProperty(object target, string name, params object[] index)73 		public static object GetProperty(object target, string name, params object[] index)
74 		{
75 			return target.GetType().GetProperty(name, BindingFlags.NonPublic|BindingFlags.Public|BindingFlags.Static|BindingFlags.Instance).GetValue(target, index);
76 		}
77 
SetProperty(object target, string name, object val, params object[] index)78 		public static void SetProperty(object target, string name, object val, params object[] index)
79 		{
80 			target.GetType().GetProperty(name, BindingFlags.NonPublic|BindingFlags.Public|BindingFlags.Static|BindingFlags.Instance).SetValue(target, val, index);
81 		}
82 
GetTypesArray(object[] args)83 		private static Type[] GetTypesArray(object[] args)
84 		{
85 			Type[] types = new Type[args.Length];
86 
87 			for(int i=0; i<args.Length; i++)
88 			{
89 				if (args[i] == null)
90 				{
91 					types[i] = typeof(object);
92 				}
93 				else
94 				{
95 					types[i] = args[i].GetType();
96 				}
97 			}
98 
99 			return types;
100 		}
101 	}
102 }
103