Exemple #1
0
        private void btnGenerateTests_Click(object sender, EventArgs e)
        {
            UpdateStatusStrip("Bulding test case components.");
            var testComponents = BuildTestComponents();

            var testModuleConfig = BuildTestModuleConfig();

            UpdateStatusStrip("Building test case fragments.");
            var builder = new TestCaseComponentBuilder(testComponents, testModuleConfig);
            var testCaseComponentGroups = builder.Build();

            UpdateStatusStrip("Building test scenarios");
            var scenarioBuilder          = new ScenarioBuilder(testCaseComponentGroups, testModuleConfig);
            List <ScenarioDTO> scenarios = scenarioBuilder.Build();

            UpdateStatusStrip("Building test project");
            TestCaseScenario finalObject = new TestCaseScenario()
            {
                ModuleConfig = testModuleConfig, Scenarios = scenarios
            };
            CodeSolutionBuilder solutionBuilder = new CodeSolutionBuilder();

            SolutionGenerationConfig solConfig = new SolutionGenerationConfig()
            {
                IsGeneratedDistinctDLL            = chkGenerateDistinctDLL.Checked,
                IsGeneratedDistinctSuiteXmlConfig = chkGenerateDistinctSuiteXmlConfig.Checked,
                IsAutoGenerateSolutionName        = chkAutoGenerateSolutionName.Checked, //if this is false then we must specify SolutionNameExplicitly
                SolutionTargetPath = txtSolutionTargetPath.Text,
                //SolutionName
                //LastKnownSolutionFolderDirPath
                IsCompileAndGenerateLibrary = chkCompileAndGenerateLibrary.Checked,
                SolutionName   = txtSolutionName.Text,
                IsAutoDeploy   = chkAutoDeploy.Checked,
                AutoDeployPath = txtDeploymentPath.Text,
            };

            tacMain.SelectedIndex = 3;

            using (var stream = new MemoryStream())
            {
                using (var writer = new StreamWriter(stream))
                {
                    solutionBuilder.Generate(finalObject, solConfig, writer);
                    writer.Flush();

                    txtCompilerWarnings.Text = Encoding.ASCII.GetString(stream.ToArray());
                }
            }



            MessageBox.Show("Operation completed successfully.", "Save successful", MessageBoxButtons.OK, MessageBoxIcon.Information);

            UpdateStatusStrip("Finished");
        }
Exemple #2
0
        protected GlobalGeneratedFileNames Generate_Core(TestCaseScenario scenarioConfig, SolutionGenerationConfig solutionConfig)
        {
            this.SolutionGenConfig = solutionConfig;

            string suiteName = scenarioConfig.ModuleConfig.ModuleId + "_TestSuite";

            //Step 1: Create Solution Folder
            this.Create_SolutionFolder_WithDateTimeStamp(suiteName);

            string assemblyName = scenarioConfig.ModuleConfig.AutoGeneratedProjectNamespace + (this.SolutionGenConfig.IsGeneratedDistinctSuiteXmlConfig ? ("_" + this._DateTimeStamp) : string.Empty);

            scenarioConfig.ModuleConfig.AssemblyName = assemblyName;

            //Step 2: create necessary folders : create top level folders : AutoGenTests & UserTests
            this.Create_RequiredFolders_InsideSolutionFolder();

            List <string> scenarioMethodNames = new List <string>();

            scenarioConfig.Scenarios.ForEach((s) =>
            {
                scenarioMethodNames.Add(s.Name);
            });

            //Step 3: create top level files: MasterRunner_AutoGenTests.cs, MasterRunner_UserTests.cs, ModuleXYZ_TestSuite.xml,TestConfig.cs
            GlobalGeneratedFileNames globalGeneratedFileNames = this.Create_RequiredFiles_InsideSolutionFolder(scenarioConfig.ModuleConfig.ModuleId, suiteName, scenarioMethodNames, scenarioConfig);

            //Step 4: create files inside AutoGenTests folder
            //TC._.cs
            this.Create_TestCaseMainFile_InsideAutoGenTests(scenarioConfig.ModuleConfig);
            //TC.Scenario.cs
            List <GeneratorScenarioFileObject> scenarioFileList = Create_All_TestCaseScenarioFile_InsideAutoGenTests(scenarioConfig); //TODO: substitue null with object

            //Step 5: copy old UserTests contents
            //TODO: based on time constraint

            //Step 6: Create only one project for now :  project 1
            GeneratorProjectXmlFile csprojXmlObj = this.Create_ProjectFile(
                scenarioConfig.ModuleConfig.ModuleId,
                scenarioFileList,
                globalGeneratedFileNames.TestSuiteXmlFile,
                assemblyName
                );

            //Step 7: Create Assembly file name under properties using GeneratorProjectXmlFile
            Create_AssemblyInfoCsFile(csprojXmlObj);

            //Step 8: Create Solution File (yipee!!!)
            Create_SolutionFile(new List <GeneratorProjectXmlFile>()
            {
                csprojXmlObj
            });

            return(globalGeneratedFileNames);
        }
Exemple #3
0
        private AppSettings Get_TestSuiteAppConfig(TestCaseScenario scenarioConfig)
        {
            AppSettings settings = new AppSettings();

            settings.Keys.Add(new AppSettingsKey()
            {
                Key = "Username", Value = scenarioConfig.ModuleConfig.Credentials.Username
            });
            settings.Keys.Add(new AppSettingsKey()
            {
                Key = "Password", Value = scenarioConfig.ModuleConfig.Credentials.Password
            });
            settings.Keys.Add(new AppSettingsKey()
            {
                Key = "Url", Value = scenarioConfig.ModuleConfig.Credentials.URL
            });
            settings.Keys.Add(new AppSettingsKey()
            {
                Key = "SiteConnectionString", Value = scenarioConfig.ModuleConfig.Credentials.ConnectionString
            });

            return(settings);
        }
Exemple #4
0
        private List <GeneratorScenarioFileObject> Create_All_TestCaseScenarioFile_InsideAutoGenTests(TestCaseScenario someConfigObject)
        {
            List <GeneratorScenarioFileObject> returnObj = new List <GeneratorScenarioFileObject>();

            for (var i = 0; i < someConfigObject.Scenarios.Count; i++)
            {
                TestCaseScenarioCSharpFileGenerator csFile = new TestCaseScenarioCSharpFileGenerator(someConfigObject.ModuleConfig, someConfigObject.Scenarios[i]);

                string fileName = csFile.GenerateFile(Path.Combine(this._SolutionContentFolderFullPath, CONST_FOLDER_AutoGenTests));

                returnObj.Add(new CodeGenObjects.VSTemplates.GeneratorScenarioFileObject()
                {
                    ScenarioFunctionName = someConfigObject.Scenarios[i].Name, FileName = fileName
                });
            }

            return(returnObj);
        }
Exemple #5
0
        private TestSuiteConfigFile Get_TestSuiteConfigFile_Object(List <string> scenarioMethodNames, TestCaseScenario scenarioConfig)
        {
            TestSuiteConfigFile config = new TestSuiteConfigFile();

            config.LibraryName         = scenarioConfig.ModuleConfig.AutoGeneratedProjectNamespace + "." + "MasterRunner_AutoGenTests";
            config.LibraryAssemblyName = scenarioConfig.ModuleConfig.AssemblyName;

            RunConfigObject runObject = new RunConfigObject();

            runObject.Run     = "1-" + scenarioMethodNames.Count;
            runObject.RunUser = true;
            config.RunConfig  = runObject;

            List <TestDefinition> tests = new List <TestDefinition>();

            config.TestDescriptions = new List <TestDescription>();

            int scenarioId = 1;

            scenarioMethodNames.ForEach((scenario) =>
            {
                TestDefinition test = new TestDefinition();
                test.Method         = scenario;
                test.Id             = scenarioId++;
                tests.Add(test);

                var description = new TestDescription
                {
                    Id          = test.Id,
                    Description = string.Join(Environment.NewLine, scenarioConfig.Scenarios.Find(s => s.Name == scenario).ScenarioDescription)
                };

                config.TestDescriptions.Add(description);
            });

            config.TestDefinitionList = tests;

            return(config);
        }
Exemple #6
0
        private GlobalGeneratedFileNames Create_RequiredFiles_InsideSolutionFolder(string moduleId, string suiteName, List <string> scenarioMethodNames, TestCaseScenario scenarioConfig)
        {
            //Step 3: create top level files: MasterRunner_AutoGenTests.cs, MasterRunner_UserTests.cs, ModuleXYZ_TestSuite.xml,TestConfig.cs

            GlobalGeneratedFileNames fileNameListing = new GlobalGeneratedFileNames();

            MasterRunnerAutoGenCSharpFileGenerator csFile_autoGen = new MasterRunnerAutoGenCSharpFileGenerator(moduleId, suiteName);

            csFile_autoGen.TemplateDataObject.ComputedList_For_ScenarioMethod = scenarioMethodNames;
            fileNameListing.CsFile_AutoGenTest = csFile_autoGen.GenerateFile(this._SolutionContentFolderFullPath);

            MasterRunnerUserCSharpFileGenerator csFile_user = new MasterRunnerUserCSharpFileGenerator(moduleId, suiteName);

            fileNameListing.CsFile_UserTest = csFile_user.GenerateFile(this._SolutionContentFolderFullPath);

            string fileNameModifier = this.SolutionGenConfig.IsGeneratedDistinctSuiteXmlConfig ? ("_" + this._DateTimeStamp) : string.Empty;
            TestSuiteXmlFileGenerator testSuiteXmlFile = new TestSuiteXmlFileGenerator(moduleId, fileNameModifier, Get_TestSuiteConfigFile_Object(scenarioMethodNames, scenarioConfig));

            fileNameListing.TestSuiteXmlFile = testSuiteXmlFile.GenerateFile(this._SolutionContentFolderFullPath);

            TestSuiteAppConfigGenerator testSuiteAppConfig = new TestSuiteAppConfigGenerator(moduleId, fileNameModifier, Get_TestSuiteAppConfig(scenarioConfig));

            fileNameListing.ConfigFile_AppSettingConfigFile = testSuiteAppConfig.GenerateFile(this._SolutionContentFolderFullPath);

            TestConfigCSharpFileGenerator csFile_TestConfigFile = new Core.CodeSolutionBuilder.TestConfigCSharpFileGenerator(moduleId);

            fileNameListing.CsFile_TestConfigFile = csFile_TestConfigFile.GenerateFile(this._SolutionContentFolderFullPath);

            return(fileNameListing);
        }
Exemple #7
0
        public void Generate(TestCaseScenario scenarioConfig, SolutionGenerationConfig solutionConfig, StreamWriter sWrite = null)
        {
            if (!Directory.Exists(solutionConfig.SolutionTargetPath))
            {
                Directory.CreateDirectory(solutionConfig.SolutionTargetPath);
            }

            GlobalGeneratedFileNames fileNameListing = Generate_Core(scenarioConfig, solutionConfig);

            sWrite.WriteLine("Code generation started");

            if (this.SolutionGenConfig.IsCompileAndGenerateLibrary)
            {
                this._SolutionCompiledCodeFolderFullPath = Path.Combine(this.SolutionGenConfig.SolutionTargetPath, CONST_FOLDER_COMPILED_CODE_CONTAINER);
                //string targetCompiledFolderPath = Path.Combine(this.SolutionGenConfig.SolutionTargetPath, "CompiledCode");

                string dllFileNameWithFullPath;
                bool   isCOmpileSuccess = this.BuildRunLibrary(sWrite, this._SolutionCompiledCodeFolderFullPath, out dllFileNameWithFullPath);

                if (isCOmpileSuccess)
                {
                    //copy TestSuiteXmlFile  To TargetCompiledPath
                    string xmlFileNameWithFullPath = this.CopyFile_ToTargetCompiledPath(fileNameListing.TestSuiteXmlFile, this._SolutionContentFolderFullPath, this._SolutionCompiledCodeFolderFullPath);

                    //Copy AppConfigFile To TargetCompiledPath
                    string appSettingFilePath = this.CopyFile_ToTargetCompiledPath(fileNameListing.ConfigFile_AppSettingConfigFile, this._SolutionContentFolderFullPath, this._SolutionCompiledCodeFolderFullPath);

                    if (this.SolutionGenConfig.IsAutoDeploy)
                    {
                        string dllfileNameWithoutExtension = Path.GetFileNameWithoutExtension(dllFileNameWithFullPath);
                        string src_dllLocationPath         = Path.GetDirectoryName(dllFileNameWithFullPath);

                        string dllFileName = dllfileNameWithoutExtension + ".dll";
                        string pdbFileName = dllfileNameWithoutExtension + ".pdb";

                        string xmlFileName        = Path.GetFileName(xmlFileNameWithFullPath);
                        string appSettingFileName = Path.GetFileName(appSettingFilePath);

                        //Copy dll and pdb file
                        if (File.Exists(Path.Combine(src_dllLocationPath, dllFileName)))
                        {
                            File.Copy(Path.Combine(src_dllLocationPath, dllFileName), Path.Combine(this.SolutionGenConfig.AutoDeployPath, dllFileName), true);
                        }
                        if (File.Exists(Path.Combine(src_dllLocationPath, pdbFileName)))
                        {
                            File.Copy(Path.Combine(src_dllLocationPath, pdbFileName), Path.Combine(this.SolutionGenConfig.AutoDeployPath, pdbFileName), true);
                        }

                        //copy xml file
                        if (File.Exists(xmlFileNameWithFullPath))
                        {
                            File.Copy(xmlFileNameWithFullPath, Path.Combine(this.SolutionGenConfig.AutoDeployPath, xmlFileName), true);
                        }

                        //copy app.Config file
                        if (File.Exists(appSettingFilePath))
                        {
                            File.Copy(appSettingFilePath, Path.Combine(this.SolutionGenConfig.AutoDeployPath, appSettingFileName), true);
                        }
                    }
                }
            }

            sWrite.WriteLine("Code generation completed");
        }