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"); }
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); }
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); }
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); }
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); }
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); }
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"); }