/// <summary>
        /// The copy.
        /// </summary>
        /// <returns>
        /// The <see cref="EhMethodInfoCollection"/>.
        /// </returns>
        public EhMethodInfoCollection Copy()
        {
            var result = new EhMethodInfoCollection();

            foreach (EhMethodInfo ehMethodInfo in this)
            {
                result.Add(ehMethodInfo.Copy());
            }

            return(result);
        }
        /// <summary>
        /// The get methods infos.
        /// </summary>
        /// <param name="directoryName">
        /// The directory name.
        /// </param>
        /// <param name="assemblyFileName">
        /// The assembly file name.
        /// </param>
        /// <returns>
        /// The <see cref="EhMethodInfo"/>.
        /// </returns>
        internal EhMethodInfoCollection GetTestScriptInformationMethodsInfos(string directoryName, string assemblyFileName)
        {
            var methodInfos = new EhMethodInfoCollection();

            var directory = new DirectoryInfo(directoryName);
            ResolveEventHandler resolveEventHandler = (s, e) => { return(this.OnReflectionOnlyResolve(e, directory)); };

            AppDomain.CurrentDomain.ReflectionOnlyAssemblyResolve += resolveEventHandler;
            Assembly reflectionOnlyAssembly = AppDomain.CurrentDomain.ReflectionOnlyGetAssemblies().First();

            foreach (Type type in reflectionOnlyAssembly.GetTypes())
            {
                try
                {
                    ObjectHandle oh = Activator.CreateInstanceFrom(assemblyFileName, type.ToString());
                    object       o  = oh.Unwrap();
                    Type         to = o.GetType();

                    foreach (var methodInfo in to.GetMethods())
                    {
                        var customAttributes = methodInfo.GetCustomAttributes(false);

                        if (customAttributes.Length > 0)
                        {
                            foreach (var customAttribut in customAttributes)
                            {
                                if (customAttribut is TestScriptInformation)
                                {
                                    var ehMethodInfo = new EhMethodInfo();

                                    ehMethodInfo.ParameterInfo = this.GetParameterInfos(methodInfo);

                                    ehMethodInfo.CustomAttributGuid           = (customAttribut as TestScriptInformation).Guid;
                                    ehMethodInfo.CustomAttributTestDefinition = (customAttribut as TestScriptInformation).TestDefinition.ToString();
                                    ehMethodInfo.CustomAttributTestScript     = (customAttribut as TestScriptInformation).TestScript;

                                    ehMethodInfo.MethodFullName = methodInfo.DeclaringType.FullName;

                                    // ehMethodInfo.AssemblyFullPath = methodInfo.DeclaringType.Assembly.Location;
                                    ehMethodInfo.AssemblyFullPath = assemblyFileName;

                                    ehMethodInfo.MethodName        = methodInfo.Name;
                                    ehMethodInfo.MethodDisplayName = this.GetDisplayName(methodInfo);
                                    ehMethodInfo.Namespace         = methodInfo.DeclaringType.Namespace;
                                    ehMethodInfo.ClassName         = methodInfo.ReflectedType.Name;
                                    ehMethodInfo.MemberType        = methodInfo.MemberType.ToString();

                                    methodInfos.Add(ehMethodInfo);
                                }
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    Log.ErrorEx(this, ex, MethodBase.GetCurrentMethod().Name);
                    string test = string.Empty;
                }
            }

            AppDomain.CurrentDomain.ReflectionOnlyAssemblyResolve -= resolveEventHandler;
            return(methodInfos);
        }