Exemplo n.º 1
0
        public IEnumerable <ITestInfo> Discover(string source)
        {
            if (source == null)
            {
                throw new ArgumentNullException(nameof(source));
            }
            var assembly = _reflection.LoadAssembly(source);

            return
                (from type in assembly.DefinedTypes
                 from typeGenericArgs in _genericArgsProvider.GetGenericArgs(type).DefaultIfEmpty(Enumerable.Empty <Type>())
                 let typeGenericArgsArray = typeGenericArgs.ToArray()
                                            let caseType = DefineType(type, typeGenericArgsArray)
                                                           from typeArgs in _argsProvider.GetTypeParameters(type).DefaultIfEmpty(Enumerable.Empty <object>())
                                                           from method in caseType.Methods
                                                           from methodGenericArgs in _genericArgsProvider.GetGenericArgs(method).DefaultIfEmpty(Enumerable.Empty <Type>())
                                                           let methodGenericArgsArray = methodGenericArgs.ToArray()
                                                                                        let caseMethod = DefineMethod(method, methodGenericArgsArray)
                                                                                                         where _attributeAccessor.GetAttributes(caseMethod, _attributeMap.GetDescriptor(Wellknown.Attributes.Test)).Any()
                                                                                                         from methodArgs in _argsProvider.GetMethodParameters(caseMethod).DefaultIfEmpty(Enumerable.Empty <object>())
                                                                                                         from testCase in CreateTestInfo(source, assembly, caseType, typeGenericArgsArray, typeArgs, caseMethod, methodGenericArgsArray, methodArgs)
                                                                                                         select testCase);
        }