Beispiel #1
0
        public IClassInterfaceDescription GetClassDescriptionByType(ITypeData typeData, out IAssemblyInfo assemblyInfo)
        {
            string assemblyName = typeData.AssemblyName;
            ComInterfaceDescription    interfaceDescription = _descriptionData.GetComDescription(assemblyName);
            IClassInterfaceDescription classDescription     = null;

            // 如果该类型描述已存在则直接返回
            if (interfaceDescription != null &&
                null != (classDescription = interfaceDescription.Classes.FirstOrDefault(item => item.ClassType.Equals(typeData))))
            {
                assemblyInfo = interfaceDescription.Assembly;
                return(classDescription);
            }
            string path, version;

            classDescription = _loaderManager.GetClassDescription(typeData, _descriptionData, out path, out version);

            assemblyInfo = GetAssemblyInfo(assemblyName);
            TestflowRunner testflowRunner;

            if (null == assemblyInfo && null != (testflowRunner = TestflowRunner.GetInstance()))
            {
                assemblyInfo              = testflowRunner.SequenceManager.CreateAssemblyInfo();
                assemblyInfo.Path         = path;
                assemblyInfo.Version      = version;
                assemblyInfo.AssemblyName = assemblyName;
                assemblyInfo.Available    = true;
                _descriptionData.Add(assemblyInfo);
            }
            return(classDescription);
        }
Beispiel #2
0
        private void CheckClassDescription(IClassInterfaceDescription description, string assemblyName, string fullName)
        {
            if (null != description && _loader.Exception == null && _loader.ErrorCode == 0)
            {
                return;
            }
            I18N        i18N       = I18N.GetInstance(Constants.I18nName);
            ILogService logService = TestflowRunner.GetInstance().LogService;
            string      assembly   = assemblyName;

            switch (_loader.ErrorCode)
            {
            case ModuleErrorCode.HighVersion:
                logService.Print(LogLevel.Warn, CommonConst.PlatformLogSession,
                                 $"The version of assembly '{assembly}' is higher than version defined in data.");
                break;

            case ModuleErrorCode.LowVersion:
                logService.Print(LogLevel.Error, CommonConst.PlatformLogSession,
                                 $"The version of assembly '{assembly}' is lower than version defined in data.");
                throw new TestflowRuntimeException(ModuleErrorCode.LowVersion,
                                                   i18N.GetFStr("LowAssemblyVersion", assembly));
                break;

            case ModuleErrorCode.LibraryLoadError:
                if (null != _loader.Exception)
                {
                    logService.Print(LogLevel.Error, CommonConst.PlatformLogSession, _loader.Exception,
                                     $"Assembly '{assembly}' load error.");
                    throw new TestflowRuntimeException(ModuleErrorCode.LibraryLoadError,
                                                       i18N.GetFStr(_loader.Exception.Message), _loader.Exception);
                }
                else
                {
                    logService.Print(LogLevel.Error, CommonConst.PlatformLogSession,
                                     $"Assembly '{assembly}' load error.");
                    throw new TestflowRuntimeException(ModuleErrorCode.LibraryLoadError,
                                                       i18N.GetStr("RuntimeError"));
                }

            case ModuleErrorCode.TypeCannotLoad:
                logService.Print(LogLevel.Error, CommonConst.PlatformLogSession, _loader.Exception,
                                 $"Type '{fullName}' does not exist.");
                throw new TestflowRuntimeException(ModuleErrorCode.TypeCannotLoad,
                                                   i18N.GetFStr("TypeNotFound", fullName));

            case ModuleErrorCode.LibraryNotFound:
                logService.Print(LogLevel.Error, CommonConst.PlatformLogSession,
                                 $"Assembly '{assembly}' has not been loaded.");
                throw new TestflowRuntimeException(ModuleErrorCode.LibraryNotFound,
                                                   i18N.GetFStr("LibNotFound", assembly));

            case ModuleErrorCode.AssemblyNotLoad:
                logService.Print(LogLevel.Error, CommonConst.PlatformLogSession, _loader.Exception,
                                 $"Assemly '{assemblyName}' does not exist.");
                throw new TestflowRuntimeException(ModuleErrorCode.AssemblyNotLoad,
                                                   i18N.GetFStr("AssemblyNotLoad", assemblyName));
                break;

            default:
                if (null != _loader.Exception)
                {
                    throw new TestflowRuntimeException(ModuleErrorCode.LibraryLoadError,
                                                       i18N.GetFStr("RuntimeError", _loader.Exception.Message), _loader.Exception);
                }
                if (null == description)
                {
                    throw new TestflowRuntimeException(ModuleErrorCode.LibraryLoadError,
                                                       i18N.GetStr("RuntimeError"));
                }
                break;
            }
        }