public void FunctionalCtorTestParameterless() { var cacheComponent = new CacheComponent(new Underscore.Function.CompactComponent(), new Underscore.Utility.CompactComponent()); var propComponent = new PropertyComponent(); var ctorComponent = new ConstructorComponent(cacheComponent, propComponent); //get the ctor for string builder //empty ctor var strBuilder = new StringBuilder(); var strBuilder = new StringBuilder(); const BindingFlags flags = BindingFlags.Public | BindingFlags.Instance; var expecting = from i in typeof(StringBuilder).GetConstructors(flags) where !i.GetParameters().Any() select i; var resultsSet = new IList <ConstructorInfo>[] { ctorComponent.Query(typeof(StringBuilder), new {}, flags).ToList(), ctorComponent.Query(typeof(StringBuilder), new {}).ToList(), ctorComponent.Query(strBuilder, new {}, flags).ToList(), ctorComponent.Query(strBuilder, new {}).ToList(), new[] { ctorComponent.Parameterless(typeof(StringBuilder)) }, new[] { ctorComponent.Parameterless(strBuilder) }, new[] { ctorComponent.Parameterless(typeof(StringBuilder), flags) }, new[] { ctorComponent.Parameterless(strBuilder, flags) }, }; //expecting should only be one foreach (var results in resultsSet) { Assert.AreEqual(1, results.Count()); Assert.AreEqual(expecting.First(), results.First()); } Assert.IsTrue(ctorComponent.HasParameterless(strBuilder)); Assert.IsTrue(ctorComponent.HasParameterless(strBuilder, flags)); }
private static void DoFunctionalConstructorTest <T>(T instance, Func <ConstructorInfo, bool> filter, object[] paramQueryArgs, BindingFlags flags) { var cacheComponent = new CacheComponent(new Underscore.Function.CompactComponent(), new Underscore.Utility.CompactComponent()); var propComponent = new PropertyComponent(); var ctorComponent = new ConstructorComponent(cacheComponent, propComponent); var expectedToHave = new HashSet <ConstructorInfo>(typeof(T).GetConstructors(flags).Where(filter)); var testingqtypenf = _.Function.Partial <Type, object, IEnumerable <ConstructorInfo> >( ctorComponent.Query, typeof(T) ); var testingqtypewf = _.Function.Partial <Type, object, BindingFlags, IEnumerable <ConstructorInfo> >( ctorComponent.Query, typeof(T) ); var testingqobjwf = _.Function.Partial <object, object, BindingFlags, IEnumerable <ConstructorInfo> >(ctorComponent.Query, instance); var resultSet = paramQueryArgs.Select(testingqtypenf) .Concat(paramQueryArgs.Select(a => testingqtypewf(a, flags))) .Concat(paramQueryArgs.Select(a => testingqobjwf(a, flags))) .Concat(paramQueryArgs.Select(a => testingqobjwf(a, flags))); int i = 0; foreach (var result in resultSet) { Assert.IsTrue(result.All(expectedToHave.Contains), string.Join(", ", result.Select(a => "(" + string.Join(" , ", a.GetParameters().Select(b => b.Name + ":" + b.ParameterType.Name)) + ")")) + " Invocation " + i); i++; } }
public ConstructionPlacementHijack(ConstructionPrototype prototype, ConstructorComponent owner) { Prototype = prototype; Owner = owner; }