internal static T SetupMethods <T>(this T mock, IDefaultData defaultData, ObjectCreationStrategy objectCreationStrategy) { var allMethods = typeof(T).GetAllMethods(); foreach (var methodInfo in allMethods) { if (methodInfo.ReturnType == typeof(void)) { continue; } if (methodInfo.ReturnType.IsUndefined()) { if (objectCreationStrategy.UndefinedType == null) { continue; } var newMethodInfo = methodInfo.MakeGenericMethod(objectCreationStrategy.UndefinedType); SetupMethod(mock, defaultData, objectCreationStrategy, newMethodInfo); } else { SetupMethod(mock, defaultData, objectCreationStrategy, methodInfo); } } return(mock); }
internal static IDictionary <TKey, TValue> CreateDictionary <TKey, TValue>(IDefaultData defaultData, ObjectCreationStrategy objectCreationStrategy) { var items = CreateDictionaryEntries <TKey, TValue>(defaultData, objectCreationStrategy); return(items.ToDictionary()); }
internal static T CreateDynamicFrom <T>(Type type, IDefaultData defaultData, ObjectCreationStrategy objectCreationStrategy) { if (type.IsIEnumerable()) { var enumerable = EnumerableCreator.Create <T>(type, defaultData, objectCreationStrategy); if (enumerable != null) { return(enumerable); } } if (type.IsIEnumerator()) { var enumerator = EnumeratorCreator.Create <T>(type, defaultData, objectCreationStrategy); if (enumerator != null) { return(enumerator); } } var expectedObject = CreateDynamic <T>(type, defaultData, objectCreationStrategy); if (expectedObject == null) { return(default(T)); } return(InitObject(defaultData, objectCreationStrategy, expectedObject)); }
public static object Create(this Type type, IDefaultData defaultData, ObjectCreationStrategy objectCreationStrategy) { if (type == null) { throw new ArgumentNullException(nameof(type)); } if (type.IsStatic()) { throw new Exception("Static class could not be constructed"); } var result = type.GetDefaultValue(defaultData); if (result != null) { return(result); } if (type.IsUndefined()) { return(UndefinedTypeCreator.Create(type, defaultData, objectCreationStrategy)); } return(CreateFunc(new[] { type }, defaultData, objectCreationStrategy)); }
//private static readonly Func<Type, object> ForFunc = genericType => Substitute.For(new Type[] { genericType }, new object[] { }); internal static T Create <T>(Type type, IDefaultData defaultData, ObjectCreationStrategy objectCreationStrategy) { if (!type.IsInterface) { return(default(T)); } if (type.IsIEnumerable()) { var result = EnumerableCreator.Create <T>(type, defaultData, objectCreationStrategy); if (result != null) { return(result); } } if (type.IsIEnumerator()) { var result = EnumeratorCreator.Create <T>(type, defaultData, objectCreationStrategy); if (result != null) { return(result); } } return(CreateProxy <T>(type, defaultData, objectCreationStrategy)); }
public void TestFor() { var objectCreationStrategy = new ObjectCreationStrategy(true, false, 0, null); var mock = ObjectCreatorExtensions.Create <IPrimitivePropertyInterface>(CustomData, objectCreationStrategy); var errors = Analyze(mock, _dictionary).ToList(); Assert.IsFalse(errors.Any(), ToErrorString(errors)); }
internal static T Create <T>(IDefaultData defaultData, ObjectCreationStrategy objectCreationStrategy) { var type = typeof(T); return(type.IsInterface ? (T)NonGenericInterfaceTypeCreator.GetValueOrDefault(type)?.Invoke(defaultData, objectCreationStrategy) : (T)NonGenericTypeCreator.GetValueOrDefault(type)?.Invoke(defaultData, objectCreationStrategy)); }
internal static T Create <T>(Type type, IDefaultData defaultData, ObjectCreationStrategy objectCreationStrategy) { var args = type.CreateCtorArguments(defaultData, objectCreationStrategy); var result = (T)ForPartsOfFunc(type, args); result.Init(defaultData, objectCreationStrategy); return(result); }
private static T Init <T>(this T source, IDefaultData defaultData, ObjectCreationStrategy objectCreationStrategy) { if (objectCreationStrategy.SetupProperties) { source.InitProperties(defaultData, objectCreationStrategy); } return(source); }
private static T InitObject <T>(IDefaultData defaultData, ObjectCreationStrategy objectCreationStrategy, T expectedObject) { if (objectCreationStrategy.SetupProperties) { expectedObject.InitProperties(defaultData, objectCreationStrategy); } return(expectedObject); }
public static void Init(TestContext testContext) { var privateObject = CustomData.ToPrivateObject(); _dictionary = privateObject.GetField <Dictionary <Type, object> >("_defaultData"); var objectCreationStrategy = new ObjectCreationStrategy(true, false, 0, null); _mock = ObjectCreatorExtensions.Create <IInterfaceWithInterfaces>(CustomData, objectCreationStrategy); }
internal static T Create <T>(IDefaultData defaultData, ObjectCreationStrategy objectCreationStrategy) { var expectedType = typeof(T); var genericType = expectedType.GetGenericTypeDefinition(); return(expectedType.IsInterface ? (T)GenericInterfaceCollectionTypes.GetValueOrDefault(genericType)?.Invoke(expectedType, defaultData, objectCreationStrategy) : (T)GenericCollectionTypes.GetValueOrDefault(genericType)?.Invoke(expectedType, defaultData, objectCreationStrategy)); }
internal static IEnumerable <KeyValuePair <TKey, TValue> > CreateDictionaryEntries <TKey, TValue>( IDefaultData defaultData, ObjectCreationStrategy objectCreationStrategy) { var itemsCount = objectCreationStrategy.EnumerationCount; for (int i = 0; i < itemsCount; i++) { var key = ObjectCreatorExtensions.Create <TKey>(defaultData, objectCreationStrategy); var value = ObjectCreatorExtensions.Create <TValue>(defaultData, objectCreationStrategy); yield return(new KeyValuePair <TKey, TValue>(key, value)); } }
private static T CreateDictionary <T>(Type type, IDefaultData defaultData, ObjectCreationStrategy objectCreationStrategy) { var result = type.IsGenericType ? DictionaryCreatorGeneric.Create <T>(defaultData, objectCreationStrategy) : DictionaryCreatorNonGeneric.Create <T>(defaultData, objectCreationStrategy); if (result == null) { Debug.WriteLine($"Expected IEnumerble type: '{type.Name}' is unknown to create."); } return(result); }
internal static T Create <T>(Type type, IDefaultData defaultData, ObjectCreationStrategy objectCreationStrategy) { if (!type.IsIEnumerator()) { return(default(T)); } var expectedType = typeof(T); return(expectedType.IsGenericType ? EnumeratorCreatorGeneric.Create <T>(expectedType) : EnumeratorCreatorNonGeneric.Create <T>(expectedType)); }
public static object Create(Type type, IDefaultData defaultData, ObjectCreationStrategy objectCreationStrategy) { if (objectCreationStrategy.UndefinedType == null) { return(null); } if (type.IsGenericType) { return(type.MakeGenericType(objectCreationStrategy.UndefinedType).Create(defaultData, objectCreationStrategy)); } return(objectCreationStrategy.UndefinedType.Create(defaultData, objectCreationStrategy)); }
internal static object Create(Type type, IDefaultData defaultValue, ObjectCreationStrategy objectCreationStrategy) { if (!type.IsFunc()) { return(null); } var parameterExpressions = CreateParameterExpressions(type); var returnBlockExpression = CreateReturnBlockExpression(type, defaultValue, objectCreationStrategy); var lambda = Expression.Lambda(returnBlockExpression, parameterExpressions); var compiledLambda = lambda.Compile(); return(compiledLambda); }
internal static T Create <T>(Type type, IDefaultData defaultData, ObjectCreationStrategy objectCreationStrategy) { if (type.IsIDictionary()) { return(CreateDictionary <T>(type, defaultData, objectCreationStrategy)); } if (type.IsIEnumerable()) { return(CreateEnumerable <T>(type, defaultData, objectCreationStrategy)); } return(default(T)); }
private static IEnumerable <string> Analyze(Dictionary <Type, object> dictionary) { var objectCreationStrategy = new ObjectCreationStrategy(); foreach (var keyValuePair in dictionary) { var result = typeof(ObjectCreatorExtensions).InvokeExpectedMethod(nameof(ObjectCreatorExtensions.Create), new[] { keyValuePair.Key }, CustomData, objectCreationStrategy); if (CustomData.GetDefaultValue(keyValuePair.Key).NotEquals(result)) { yield return($"Expected type:{keyValuePair.Key} has not expected {result}"); } } }
internal static T SetupProperties <T>(this T mock, IDefaultData defaultData, ObjectCreationStrategy objectCreationStrategy) { var allProperties = typeof(T).GetAllProperties(); foreach (var propertyInfo in allProperties) { var propertyType = propertyInfo.PropertyType; var returnValue = propertyType.Create(defaultData, objectCreationStrategy); var indexParameter = propertyInfo.GetIndexParameters().Select(p => p.ParameterType.Create()).ToArray(); var propertyValue = propertyInfo.GetValue(mock, indexParameter); var array = Array.CreateInstance(propertyType, 0); ReturnsFunc(propertyType, propertyValue, returnValue, array); } return(mock); }
private static T CreateProxy <T>(Type type, IDefaultData defaultData, ObjectCreationStrategy objectCreationStrategy) { var proxy = (T)ForFunc(type); if (objectCreationStrategy.SetupProperties) { proxy.SetupProperties(defaultData, objectCreationStrategy); } if (objectCreationStrategy.SetupMethods) { proxy.SetupMethods(defaultData, objectCreationStrategy); } return(proxy); }
internal static T Create <T>(Type type, IDefaultData defaultData, ObjectCreationStrategy objectCreationStrategy) { if (!type.IsArray) { return(default(T)); } var elementType = type.GetElementType(); var array = Array.CreateInstance(elementType, objectCreationStrategy.EnumerationCount); for (var i = 0; i < objectCreationStrategy.EnumerationCount; i++) { var arrayItem = elementType.Create(defaultData, objectCreationStrategy); array.SetValue(arrayItem, i); } return((T)(object)array); }
public static T Create <T>(Type type, IDefaultData defaultValue, ObjectCreationStrategy objectCreationStrategy) { if (type == null) { throw new ArgumentNullException(nameof(type)); } var genericTypeParam = type.GetGenericArguments().FirstOrDefault(); if (genericTypeParam != null) { var returnValue = FuncCreator.Create <T>(genericTypeParam, defaultValue, objectCreationStrategy); var result = typeof(TaskCreator).InvokeGenericMethod(nameof(FromResult), new[] { genericTypeParam }, returnValue); return((T)result); } return((T)(object)Task.FromResult(0)); }
public static T Create <T>(IDefaultData defaultData, ObjectCreationStrategy objectCreationStrategy) { var type = typeof(T); var defaultValue = type.GetDefaultValue(defaultData); if (defaultValue != null) { return((T)defaultValue); } if (type.IsInterface) { return(InterfaceCreator.Create <T>(type, defaultData, objectCreationStrategy)); } if (type.IsAbstract) { return(AbstractClassCreator.Create <T>(type, defaultData, objectCreationStrategy)); } if (type.IsArray) { return(ArrayCreator.Create <T>(type, defaultData, objectCreationStrategy)); } if (type.IsAction()) { return(ActionCreator.Create <T>(type)); } if (type.IsFunc()) { return(FuncCreator.Create <T>(type, defaultData, objectCreationStrategy)); } if (type.IsTask()) { return(TaskCreator.Create <T>(type, defaultData, objectCreationStrategy)); } return(UnknownTypeCreator.CreateDynamicFrom <T>(type, defaultData, objectCreationStrategy)); }
private static void SetupMethod <T>(this T mock, IDefaultData defaultData, ObjectCreationStrategy objectCreationStrategy, MethodInfo methodInfo) { object returnValue; var methodReturnType = methodInfo.ReturnType; if (methodReturnType.IsInterface) { returnValue = ForFunc(methodReturnType); returnValue.SetupProperties(defaultData, objectCreationStrategy); } else { returnValue = methodReturnType.Create(defaultData, objectCreationStrategy); } var arguments = methodInfo.CreateAnyArgs(); var methodReturnValue = methodInfo.Invoke(mock, arguments); var array = methodReturnType.ToArray(0); ReturnsFunc(methodReturnType, methodReturnValue, returnValue, array); }
private static T CreateDynamic <T>(Type type, IDefaultData defaultData, ObjectCreationStrategy objectCreationStrategy) { var args = new object[] { }; if (type.GetConstructors(ExpectedBindingFlags).Any()) { args = type.CreateCtorArguments(defaultData, objectCreationStrategy); } T result = default(T); try { result = (T)Activator.CreateInstance(type, args); } catch (Exception) { Debug.WriteLine($"Could not create expected type: '{type.FullName}'"); } return(result); }
internal static IEnumerable CreateEnumeration(Type enumerationType, IDefaultData defaultData, ObjectCreationStrategy objectCreationStrategy) { var enumerationItemType = enumerationType.GetGenericArguments()[0]; var enumerationCount = objectCreationStrategy.EnumerationCount; for (var i = 0; i < enumerationCount; i++) { var result = enumerationItemType.Create(defaultData, objectCreationStrategy); yield return(result); } }
internal static IEnumerable <T> CreateEnumerationWithObjects <T>(IDefaultData defaultData, ObjectCreationStrategy objectCreationStrategy) { var itemsCount = objectCreationStrategy.EnumerationCount; for (int i = 0; i < itemsCount; i++) { yield return(ObjectCreatorExtensions.Create <T>(defaultData, objectCreationStrategy)); } }
internal static T Create <T>(Type type, IDefaultData defaultValue, ObjectCreationStrategy objectCreationStrategy) { return((T)Create(type, defaultValue, objectCreationStrategy)); }
private static BlockExpression CreateReturnBlockExpression(Type funcType, IDefaultData defaultValue, ObjectCreationStrategy objectCreationStrategy) { var outputArgument = funcType.GetGenericArguments().Last(); var returnValue = Expression.Constant(outputArgument.Create(defaultValue, objectCreationStrategy)); var labelTarget = Expression.Label(outputArgument); var expressionBlock = Expression.Block(Expression.Label(labelTarget, returnValue)); return(expressionBlock); }