public override void Expand(CyPhy.ComponentAssembly configuration)
        {
            this.Configuration = configuration;

            if (this.OriginalSystemUnderTest == null)
            {
                // don't need to do anything
            }
            else if (this.OriginalSystemUnderTest.Referred.DesignEntity.ID == configuration.ID)
            {
                this.expandedTestBenchSuite = this.testBenchSuite;
            }
            else
            {
                // create temp folder for test bench suite
                CyPhy.TestBenchSuiteFolder testing = CyPhyClasses.TestBenchSuiteFolder.Cast(this.testBenchSuite.ParentContainer.Impl);

                var tempFolderName = AnalysisModelProcessor.GetTemporaryFolderName(this.testBenchSuite.Impl);

                CyPhy.TestBenchSuiteFolder tempFolder = testing.Children.TestBenchSuiteFolderCollection.FirstOrDefault(x => x.Name == tempFolderName);
                if (tempFolder == null)
                {
                    tempFolder      = CyPhyClasses.TestBenchSuiteFolder.Create(testing);
                    tempFolder.Name = tempFolderName;

                    this.AddToTraceabilityAndTemporary(tempFolder.Impl, testing.Impl, recursive: false);
                }

                // copy test bench suite
                var tempCopy = (tempFolder.Impl as MgaFolder).CopyFCODisp(this.testBenchSuite.Impl as MgaFCO);
                // fix name
                tempCopy.Name = AnalysisModelProcessor.GetTemporaryObjectName(this.testBenchSuite.Impl, configuration.Impl);

                this.AddToTraceabilityAndTemporary(tempCopy, this.testBenchSuite.Impl);

                // set expanded property to the expanded element
                this.expandedTestBenchSuite = CyPhyClasses.TestBenchSuite.Cast(tempCopy);
            }

            // expand all test benches
            foreach (var testBenchRef in this.expandedTestBenchSuite.Children.TestBenchRefCollection)
            {
                var testBenchTypeExpander = new TestBenchTypeProcessor(testBenchRef.Referred.TestBenchType);
                testBenchTypeExpander.Expand(configuration);

                // switch references
                var switcher = new ReferenceSwitcher.ReferenceSwitcherInterpreter();
                // TODO: handle failures for this
                switcher.SwitchReference(testBenchTypeExpander.expandedTestBenchType.Impl as MgaFCO, testBenchRef.Impl as IMgaReference);

                this.InnerExpanders.Push(testBenchTypeExpander);
            }
        }
        public TestBenchSuiteProcessor(CyPhy.TestBenchSuite testBenchSuite)
        {
            this.testBenchSuite = testBenchSuite;

            this.OriginalSystemUnderTest = testBenchSuite
                                           .Children
                                           .TestBenchRefCollection
                                           .FirstOrDefault()
                                           .Referred
                                           .TestBenchType
                                           .Children
                                           .TopLevelSystemUnderTestCollection
                                           .FirstOrDefault();
        }
        public override void Expand(CyPhy.ComponentAssembly configuration)
        {
            this.Configuration = configuration;

            if (this.OriginalSystemUnderTest.Referred.DesignEntity.ID == configuration.ID)
            {
                this.expandedTestBenchSuite = this.testBenchSuite;
            }
            else
            {
                // create temp folder for test bench suite
                CyPhy.TestBenchSuiteFolder testing = CyPhyClasses.TestBenchSuiteFolder.Cast(this.testBenchSuite.ParentContainer.Impl);

                var tempFolderName = AnalysisModelProcessor.GetTemporaryFolderName(this.testBenchSuite.Impl);

                CyPhy.TestBenchSuiteFolder tempFolder = testing.Children.TestBenchSuiteFolderCollection.FirstOrDefault(x => x.Name == tempFolderName);
                if (tempFolder == null)
                {
                    tempFolder = CyPhyClasses.TestBenchSuiteFolder.Create(testing);
                    tempFolder.Name = tempFolderName;

                    this.AddToTraceabilityAndTemporary(tempFolder.Impl, testing.Impl, recursive: false);
                }

                // copy test bench suite
                var tempCopy = (tempFolder.Impl as MgaFolder).CopyFCODisp(this.testBenchSuite.Impl as MgaFCO);
                // fix name
                tempCopy.Name = AnalysisModelProcessor.GetTemporaryObjectName(this.testBenchSuite.Impl, configuration.Impl);

                this.AddToTraceabilityAndTemporary(tempCopy, this.testBenchSuite.Impl);

                // set expanded property to the expanded element
                this.expandedTestBenchSuite = CyPhyClasses.TestBenchSuite.Cast(tempCopy);
            }

            // expand all test benches
            foreach (var testBenchRef in this.expandedTestBenchSuite.Children.TestBenchRefCollection)
            {
                var testBenchTypeExpander = new TestBenchTypeProcessor(testBenchRef.Referred.TestBenchType);
                testBenchTypeExpander.Expand(configuration);

                // switch references
                var switcher = new ReferenceSwitcher.ReferenceSwitcherInterpreter();
                // TODO: handle failures for this
                switcher.SwitchReference(testBenchTypeExpander.expandedTestBenchType.Impl as MgaFCO, testBenchRef.Impl as IMgaReference);

                this.InnerExpanders.Push(testBenchTypeExpander);
            }
        }
Esempio n. 4
0
        public IInterpreterResult Main(IInterpreterMainParameters parameters)
        {
            this.runtime.Clear();

            this.mainParameters = (InterpreterMainParameters)parameters;
            this.result.Success = true;
            var configSuccess = this.mainParameters != null;

            this.paramInvoked    = this.mainParameters.StartModeParam;
            this.ProjectFilename = this.mainParameters.Project.ProjectConnStr.Substring("MGA=".Length);
            this.OutputBaseDir   = this.mainParameters.OutputDirectory;

            sotConfig.OriginalProjectFileName = this.ProjectFilename;
            bool disposeLogger = false;

            if (this.Logger == null)
            {
                this.Logger = new CyPhyGUIs.GMELogger(this.mainParameters.Project, this.ComponentName);
                this.Logger.WriteInfo("Running CyPhySoT");
                System.Windows.Forms.Application.DoEvents();
                disposeLogger = true;
            }
            if (this.mainParameters.VerboseConsole)
            {
                this.Logger.GMEConsoleLoggingLevel = SmartLogger.MessageType_enum.Debug;
            }
            else
            {
                this.Logger.GMEConsoleLoggingLevel = SmartLogger.MessageType_enum.Info;
            }

            CyPhy.TestBenchSuite tbs = CyPhyClasses.TestBenchSuite.Cast(parameters.CurrentFCO);

//            MgaGateway.PerformInTransaction(delegate
//            {
//                foreach (var testBenchRef in tbs.Children.TestBenchRefCollection)
//                {
//                    if (testBenchRef.Referred == null)
//                    {
//                        continue;
//                    }

//                    var testBench = testBenchRef.Referred.TestBenchType;
//                    if (testBench != null &&
//                        testBench.Impl.MetaBase.Name != (typeof(CyPhy.TestBench)).Name)
//                    {
//                        this.Logger.WriteError(string.Format(@"Test benches must currently
//                        be of type TestBench in a CyPhySoT. Please see {0}.",
//                            testBenchRef.ToHyperLink()));

//                        this.result.Success = false;

//                        object automation;
//                        if (this.componentParameters != null &&
//                            this.componentParameters.TryGetValue("automation", out automation))
//                        {
//                            if ((string)automation == "true")
//                            {
//                                throw new NotSupportedException(@"Error: only test benches of
//                                type TestBench are currently supported in a CyPhySoT!");
//                            }
//                        }
//                    }
//                }
//            });

            if (this.result.Success == false)
            {
                return(this.result);
            }

            var asyncResult = this.Logger.LoggingVersionInfo.BeginInvoke(parameters.Project, null, null);
            var header      = this.Logger.LoggingVersionInfo.EndInvoke(asyncResult);

            this.Logger.WriteDebug(header);

            this.UpdateSuccess("Configuration", configSuccess);

            this.result.Labels = "";
            //this.result.LogFileDirectory = Path.Combine(this.mainParameters.ProjectDirectory, "log");
            //this.LogFileFilename = this.ComponentName + "." + System.Diagnostics.Process.GetCurrentProcess().Id + ".log";
            //META.Logger.AddFileListener(this.LogFilePath, this.ComponentName, parameters.Project);

            try
            {
                MgaGateway.PerformInTransaction(delegate
                {
                    this.WorkInMainTransaction();
                },
                                                abort: true);

                this.WorkOutsideOfMainTransaction();

                this.PrintRuntimeStatistics();
                if (this.result.Success)
                {
                    this.Logger.WriteInfo("CyPhySoT finished successfully.");
                    this.Logger.WriteInfo("Generated files are here: <a href=\"file:///{0}\" target=\"_blank\">{0}</a>", this.mainParameters.OutputDirectory);
                    this.Logger.WriteDebug("[SUCCESS: {0}]", this.result.Success);
                }
                else
                {
                    this.Logger.WriteError("CyPhySoT failed! See error messages above.");
                }
            }
            finally
            {
                if (this.Logger != null && disposeLogger)
                {
                    this.Logger.Dispose();
                    this.Logger = null;
                }
                MgaGateway = null;
                //GMEConsole = null;

                GC.Collect();
                GC.WaitForPendingFinalizers();
                GC.Collect();
                GC.WaitForPendingFinalizers();
            }

            //META.Logger.RemoveFileListener(this.ComponentName);

            return(this.result);
        }
Esempio n. 5
0
 public TestBenchSuiteChecker(CyPhy.TestBenchSuite testBenchSuite)
 {
     this.testBenchSuite = testBenchSuite;
 }
Esempio n. 6
0
 public TestBenchSuiteChecker(CyPhy.TestBenchSuite testBenchSuite)
 {
     this.testBenchSuite = testBenchSuite;
 }