예제 #1
0
        public bool StartTestGeneration()
        {
            _testsMaintainer.StartHost(_sequenceData);
            ISequenceManager sequenceManager = _globalInfo.TestflowRunner.SequenceManager;

            if (_sequenceData is ITestProject)
            {
                ITestProject testProject = _sequenceData as ITestProject;
                _testsMaintainer.SendRmtGenMessage(CoreConstants.TestProjectSessionId,
                                                   sequenceManager.RuntimeSerialize(testProject));
                foreach (ISequenceGroup sequenceGroup in testProject.SequenceGroups)
                {
                    _testsMaintainer.SendRmtGenMessage(ModuleUtils.GetSessionId(testProject, sequenceGroup),
                                                       sequenceManager.RuntimeSerialize(sequenceGroup));
                }
            }
            else
            {
                _testsMaintainer.SendRmtGenMessage(0, sequenceManager.RuntimeSerialize(_sequenceData as ISequenceGroup));
            }
            // 等待远程生成结束
            _blockHandle.Timeout = _globalInfo.ConfigData.GetProperty <int>("TestGenTimeout");
            bool isNotTimeout = _blockHandle.Wait(Constants.RmtGenState);

            if (!isNotTimeout)
            {
                _globalInfo.LogService.Print(LogLevel.Error, CommonConst.PlatformLogSession, "Test generation timeout.");
                _globalInfo.StateMachine.State = RuntimeState.Timeout;
                throw new TestflowRuntimeException(ModuleErrorCode.OperationTimeout,
                                                   _globalInfo.I18N.GetStr("TestGenTimeout"));
            }
            // 如果是异常状态则返回false
            return(_globalInfo.StateMachine.State < RuntimeState.Abort);
        }
예제 #2
0
        public void StartTestGeneration()
        {
            _testsMaintainer.StartHost();
            ISequenceManager sequenceManager = _globalInfo.TestflowRunner.SequenceManager;

            if (_sequenceData is ITestProject)
            {
                ITestProject testProject = _sequenceData as ITestProject;
                _testsMaintainer.SendTestGenMessage(CoreConstants.TestProjectSessionId,
                                                    sequenceManager.RuntimeSerialize(testProject));
                foreach (ISequenceGroup sequenceGroup in testProject.SequenceGroups)
                {
                    _testsMaintainer.SendTestGenMessage(ModuleUtils.GetSessionId(testProject, sequenceGroup),
                                                        sequenceManager.RuntimeSerialize(sequenceGroup));
                }
                // 初始化每个模块的监听变量
                foreach (int session in _testsMaintainer.TestContainers.Keys)
                {
                    _debugManager?.SendInitBreakPointMessage(session);
                }
            }
            else
            {
                _testsMaintainer.SendTestGenMessage(0, sequenceManager.RuntimeSerialize(_sequenceData as ISequenceGroup));
                _debugManager?.SendInitBreakPointMessage(0);
            }
            // 等待远程生成结束
            _blockHandle.Wait(Constants.RmtGenState);
        }
예제 #3
0
        public void SequenceTest()
        {
            TestflowRunner   runnerInstance  = TestflowRunner.GetInstance();
            ISequenceManager sequenceManager = runnerInstance.SequenceManager;
            ISequenceGroup   sequenceGroup   = sequenceManager.LoadSequenceGroup(SerializationTarget.File,
                                                                                 @"C:\Users\jingtao\Desktop\sequence.tfseq");

            runnerInstance.EngineController.SetSequenceData(sequenceGroup);
            runnerInstance.EngineController.Start();
        }
예제 #4
0
        // 使用TypeDescription信息更新VariableTypes和Class中的ClassType信息
        public static void ValidateComDescription(ISequenceManager sequenceManager, ComInterfaceDescription description,
                                                  DescriptionDataTable descriptionCollection)
        {
            int componentId = description.ComponentId;

            foreach (ITypeDescription typeDescription in description.TypeDescriptions)
            {
                ITypeData classType = GetTypeDataByDescription(sequenceManager, descriptionCollection, typeDescription);
                description.VariableTypes.Add(classType);
                if (null != typeDescription.Enumerations)
                {
                    description.Enumerations.Add(GetFullName(typeDescription), typeDescription.Enumerations);
                }
            }
            description.TypeDescriptions.Clear();
            description.TypeDescriptions = null;
            ((List <ITypeData>)description.VariableTypes).TrimExcess();

            foreach (ClassInterfaceDescription classDescription in description.Classes)
            {
                ITypeData classType = GetTypeDataByDescription(sequenceManager, descriptionCollection,
                                                               classDescription.ClassTypeDescription);
                classDescription.ClassType            = classType;
                classDescription.ClassTypeDescription = null;
            }
            ((List <IClassInterfaceDescription>)description.Classes).TrimExcess();

            I18N i18N = I18N.GetInstance(Constants.I18nName);

            foreach (IClassInterfaceDescription classDescription in description.Classes)
            {
                foreach (IFuncInterfaceDescription functionDescription in classDescription.Functions)
                {
                    // 配置实例属性配置方法和静态属性配置方法的描述信息
                    if (functionDescription.FuncType == FunctionType.InstancePropertySetter)
                    {
                        functionDescription.Description = i18N.GetStr("InstancePropertySetter");
                    }
                    else if (functionDescription.FuncType == FunctionType.StaticPropertySetter)
                    {
                        functionDescription.Description = i18N.GetStr("StaticPropertySetter");
                    }
                    foreach (IArgumentDescription argumentDescription in functionDescription.Arguments)
                    {
                        InitializeArgumentType(sequenceManager, descriptionCollection, argumentDescription);
                    }
                    ((List <IArgumentDescription>)functionDescription.Arguments).TrimExcess();
                    functionDescription.ClassType = classDescription.ClassType;
                    if (null != functionDescription.Return)
                    {
                        InitializeArgumentType(sequenceManager, descriptionCollection, functionDescription.Return);
                    }
                }
            }
        }
예제 #5
0
        public DescriptionLoaderManager()
        {
            _loaderDomain = AppDomain.CreateDomain(Constants.AppDomainName);
//            _loaderDomain.Load()
            Type loaderType = typeof(AssemblyDescriptionLoader);

//            _loaderName = $"{loaderType.Namespace}.{loaderType.Name}";
            _assemblyFullName = loaderType.Assembly.Location;
            _loaderName       = loaderType.FullName;
            _loader           = (AssemblyDescriptionLoader)_loaderDomain.CreateInstanceFromAndUnwrap(_assemblyFullName, _loaderName);
            _sequenceManager  = TestflowRunner.GetInstance().SequenceManager;
        }
예제 #6
0
        public Control(IKeyTableFactory tableFactory, IAsynchQueueFactory queueFactory, IPrimFactory primFactory, IModel model, IConfigSource config)
            : base(tableFactory, queueFactory)
        {
            ControlConfig = config.Configs[CONTROL_CONFIG];
            IConfig commonConfig = config.Configs["Common"];

            if (ControlConfig == null)
            {
                ControlConfig = config.Configs[0];
            }
            if (commonConfig == null)
            {
                commonConfig = config.Configs[0];
            }

            _toggleGlow           = ControlConfig.GetDouble("ToggleGlow", .15);
            _fade                 = ControlConfig.GetDouble("Fade", .8);
            _defaultRecordingName = ControlConfig.Get("DefaultSequenceName", "Sequence");
            _defaultTopologyName  = ControlConfig.Get("DefaultTopologyName", "Topology");
            _multiNumber          = ControlConfig.GetInt("MultiSendNumber", 10);
            _multiSendDelay       = ControlConfig.GetInt("MultiSendDelay", 750);
            _wait                 = commonConfig.GetInt("Wait", 50);

            _factory = primFactory;

            _record      = MakeRecord(ControlConfig, tableFactory, queueFactory, primFactory);
            _topology    = MakeTopology(ControlConfig);
            _permissions = MakePermissions(tableFactory, config);
            _state       = MakeState(tableFactory, config);
            _model       = Record.Make <IModel>(model, false);

            string tableName  = ControlConfig.Get(TABLE_KEY, null);
            int    tableCount = ControlConfig.GetInt(TABLE_COUNT, 1);

            _tables = new List <RoutingTable>();
            if (tableName != null && tableCount > 1)
            {
                for (int i = 1; i <= tableCount; i++)
                {
                    _tables.Add(new RoutingTable(Factory.MakeButton(tableName + i, Permissions), this, Factory));
                }
            }
            else if (tableName != null)
            {
                _tables.Add(new RoutingTable(Factory.MakeButton(tableName, Permissions), this, Factory));
            }
            _tables.Add(new RoutingTable(Factory.MakeButton(ControlConfig.Get(TABLE_HUD_KEY, "TableDisplayHUD"), Permissions), this, Factory));

            Logger.Info("Control started.");
        }
예제 #7
0
        public static ITypeData GetTypeDataByDescription(ISequenceManager sequenceManager,
                                                         DescriptionDataTable descriptionCollection, ITypeDescription typeDescription)
        {
            string    classFullName = GetFullName(typeDescription);
            ITypeData classType;

            if (!descriptionCollection.ContainsType(classFullName))
            {
                classType = sequenceManager.CreateTypeData(typeDescription);
                descriptionCollection.AddTypeData(classFullName, classType);
            }
            else
            {
                classType = descriptionCollection.GetTypeData(classFullName);
            }
            return(classType);
        }
예제 #8
0
        public ParameterCheckerTest()
        {
            #region 创建并初始化假的TestFlowRunner
            Type runnerType = typeof(TestflowRunner);
            //默认options
            TestflowRunnerOptions option = new TestflowRunnerOptions();
            //创建假的TestFlowRunner
            FakeTestflowRunner fakeTestflowRunner = new FakeTestflowRunner(option);
            Type intType = typeof(int);
            //用反射将获取private fieldInfo,然后赋值fake
            FieldInfo fieldInfo = runnerType.GetField("_runnerInst", BindingFlags.Static | BindingFlags.NonPublic);
            fieldInfo.SetValue(null, fakeTestflowRunner);
            fakeTestflowRunner.Initialize();
            #endregion

            _parameterChecker = fakeTestflowRunner.ParameterChecker;
            _sequenceManager  = fakeTestflowRunner.SequenceManager;
            _interfaceManager = fakeTestflowRunner.ComInterfaceManager;
        }
예제 #9
0
        public SequenceCreator()
        {
            TestflowRunner testflowRunner = TestflowRunner.GetInstance();

            _sequenceManager = testflowRunner.SequenceManager;
            IComInterfaceManager interfaceManager = testflowRunner.ComInterfaceManager;

            Type   testClassType = typeof(CoreTestClass);
            string location      = testClassType.Assembly.Location;
            IComInterfaceDescription interfaceDescription = interfaceManager.GetComponentInterface(location);

            Type intType = typeof(int);

            _intTypeData = interfaceManager.GetTypeByName(intType.Name, intType.Namespace);

            Type testCallBackType = typeof(CallBackClass);

            //同一个程序集,不需要再一次加载component
            //location = testClassType.Assembly.Location;
            //interfaceDescription = interfaceManager.GetComponentInterface(location);

            _testClassTypeData    = interfaceManager.GetTypeByName(testClassType.Name, testClassType.Namespace);
            _testCallBackTypeData = interfaceManager.GetTypeByName(testCallBackType.Name, testCallBackType.Namespace);
        }
예제 #10
0
 public void SetModuleTask(ISequenceManager Seq)
 {
     m_IModuleTask  = Seq;
     m_TraceService = (ITraceData)m_IModuleTask.GetService(typeof(ITraceData));
 }