private void init(object sender, EventArgs e) { List <String> files = new List <string>(); try { files = Directory.GetFiles("tests", "*.dll").ToList(); } catch (Exception ex) { log.Error("Ошибка получения файлов из директории tests", ex); MessageBox.Show("Ошибка получения файлов из директории tests", "Ошибка!", MessageBoxButtons.OK); Application.Exit(); } //загрузка сборок с тестами foreach (string file in files) { try { Assembly assembly = Assembly.LoadFrom(file); foreach (Type type in assembly.GetTypes()) { if (typeof(Test).IsAssignableFrom(type)) { resultAssemblies.Add(assembly); break; } } } catch (Exception ex) { log.Error(String.Format("Ошибка загрузки сборки из {0}", file), ex); MessageBox.Show(String.Format("Ошибка загрузки сборки из {0}", file), "Ошибка", MessageBoxButtons.OK); } } //обнаружение xlsx try { List <String> xlsxes = Directory.GetFiles("config", "*.xlsx").ToList(); List <String> cfg = Directory.GetFiles("config", "config*.xlsx").ToList(); xlsxFiles.AddRange(xlsxes.Except(cfg)); } catch (Exception ex) { log.Error("Ошибка получения xlsx файлов из директории config", ex); MessageBox.Show("Ошибка получения файлов xlsx из директории config", "Ошибка!", MessageBoxButtons.OK); Application.Exit(); } //вывод dll в список foreach (Assembly assembly in resultAssemblies) { String assemblyName = assembly.GetName().Name; dllView.Items.Add(assemblyName); ListViewItemCollection xlsxCollection = new ListViewItemCollection(xlsxView); List <String> xlsxFileCopy = xlsxFiles.Select(item => (String)item.Clone()).ToList(); ListViewItem[] items = xlsxFileCopy.Select(item => new ListViewItem(item)).ToArray(); dllToXlsx.Add(assemblyName, items); } //создание представления конфигурирования теста если оно есть foreach (Assembly assembly in resultAssemblies) { foreach (Type type in assembly.GetTypes()) { try { if (typeof(TestConfigurationView).IsAssignableFrom(type)) { TestConfigurationView tcv = (TestConfigurationView)Activator.CreateInstance(type); dllToConfig.Add(assembly.GetName().Name, tcv); } } catch (Exception ex) { log.Error("Ошибка создания экземпляра представления конфигурации теста", ex); MessageBox.Show("Ошибка создания экземпляра представления конфигурации теста", "Ошибка!"); } } } dllView.Items[0].Selected = true; //установка настроек в интерфейсе в соответствии с конфиг файлом //конфигурирование try { Configuration config = Configuration.getInstance(); JObject json = config.Config; foreach (Assembly assembly in resultAssemblies) { if (json.ContainsKey(assembly.GetName().Name)) { JObject asemblyConfig = (JObject)json[assembly.GetName().Name]; if (asemblyConfig.ContainsKey("data")) { JArray data = (JArray)asemblyConfig["data"]; ListViewItem[] listItems = dllToXlsx[assembly.GetName().Name]; List <String> items = listItems.Select(item => item.Text).ToList(); List <String> dataFiles = data.ToObject <List <String> >(); List <String> checkedFiles = dataFiles.Intersect(items).ToList(); foreach (String checkedFile in checkedFiles) { listItems.Where(item => item.Text == checkedFile).Single().Checked = true; } } TestConfigurationView tcv = dllToConfig[assembly.GetName().Name]; if (asemblyConfig.ContainsKey("urls")) { tcv.Config["urls"] = (JArray)asemblyConfig["urls"]; } if (asemblyConfig.ContainsKey("compare")) { tcv.Config["compare"] = (String)asemblyConfig["compare"]; } tcv.init(); } } } catch (ConfigurationException ex) { log.Error("Ошибка конфигурирования приложения", ex); MessageBox.Show("Ошибка конфигурирования приложения", "Ошибка!", MessageBoxButtons.OK); Application.Exit(); } }
private void createTestsBtn_Click(object sender, EventArgs e) { //конфигурация Configuration configuration = Configuration.getInstance(); //выбор xlsx выбраных dll Dictionary <Assembly, ListViewItem[]> selectedDllToXlsx = new Dictionary <Assembly, ListViewItem[]>(); CheckedListViewItemCollection checkedItems = this.dllView.CheckedItems; bool allHasChecked = false; if (checkedItems.Count == 0) { MessageBox.Show("Не выбрано ни одного теста"); } else { foreach (ListViewItem item in checkedItems) { Assembly dll = resultAssemblies.Single(a => a.GetName().Name == item.Text); List <ListViewItem> xlsx = dllToXlsx[dll.GetName().Name].ToList(); List <ListViewItem> selectedXlsx = new List <ListViewItem>(); bool hasChecked = false; foreach (ListViewItem item1 in xlsx) { if (item1.Checked) { hasChecked = true; allHasChecked = allHasChecked || hasChecked; selectedXlsx.Add(item1); } } if (!hasChecked) { allHasChecked = allHasChecked && hasChecked; MessageBox.Show(String.Format("Не выбрано ни одного тестового файла для {0}", dll.GetName().Name)); } selectedDllToXlsx.Add(dll, selectedXlsx.ToArray()); //пишем конфигурацию TestConfigurationView tcv = dllToConfig[dll.GetName().Name]; JObject testConfig = tcv.Config; JArray data = new JArray(); for (int i = 0; i < selectedXlsx.Count; i++) { data.Add(selectedXlsx[i].Text); } testConfig["data"] = data; JObject json = configuration.Config; json[dll.GetName().Name] = testConfig; } if (allHasChecked) { configuration.write(); //модальное окно создания тестов List <Test> tests = new List <Test>(); CreatingTestsModalForm modal = new CreatingTestsModalForm(selectedDllToXlsx, tests, configuration.Config); modal.Owner = this; DialogResult result = modal.ShowDialog(); if (result == DialogResult.OK) { SelectTestsToRunForm form = new SelectTestsToRunForm(tests, this); this.Hide(); form.Show(); } } } }