private static void OnAssembliesChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { var model = (TestSuiteCreateOrEditModel)d; var normalizedAssemblies = new List <Assembly>(); var suitPath = model.SuitPath; foreach (var assemblyPath in Utils.GetAssemblyPaths((string)e.NewValue)) { var fullAssemblyPath = Path.IsPathRooted(assemblyPath) ? assemblyPath : Path.Combine(suitPath, assemblyPath); var assembly = Utils.LoadAssembly(fullAssemblyPath, model._settings.Config); normalizedAssemblies.Add(assembly); } model.NormalizedAssemblies = normalizedAssemblies.ToArray(); }
private void UpdateSyntaxModules(string relativeAssemblyPaths, string testsLocationRootFullPath) { var syntaxModules = new List <SyntaxModuleVm>(); try { foreach (var relativeAssemblyPath in Utils.GetAssemblyPaths(relativeAssemblyPaths)) { var path = Path.Combine(testsLocationRootFullPath, relativeAssemblyPath); var fullPath = Path.GetFullPath(path); var grammarDescriptors = Utils.LoadAssembly(fullPath, _settings.Config); foreach (var grammarDescriptor in grammarDescriptors) { syntaxModules.Add(new SyntaxModuleVm(grammarDescriptor)); } } _assemblies.Foreground = Brushes.Black; _assemblies.ToolTip = _assembiesToolTip; } catch (Exception ex) { syntaxModules.Clear(); _assemblies.Foreground = Brushes.Red; _assemblies.ToolTip = ex.GetType().Name + ":" + ex.Message + Environment.NewLine + _assembiesToolTip; } var prevItems = _syntaxModules.ItemsSource as ObservableCollection <SyntaxModuleVm>; var newItems = new ObservableCollection <SyntaxModuleVm>(SortSyntaxModules(syntaxModules)); if (prevItems != null && Enumerable.SequenceEqual(prevItems, newItems)) { return; } _syntaxModules.ItemsSource = newItems; UpdateStartRules(true); }
private static void OnLibsChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { var model = (TestSuiteCreateOrEditModel)d; var normalized = new HashSet <LibReference>(); var suitPath = model.SuitPath; foreach (var libPath in Utils.GetAssemblyPaths((string)e.NewValue)) { var fullAssemblyPath = Path.GetFullPath(Path.IsPathRooted(libPath) ? libPath : Path.Combine(suitPath, libPath)); if (File.Exists(fullAssemblyPath)) { var relativePath = Utils.MakeRelativePath(suitPath, true, fullAssemblyPath, false); normalized.Add(new FileLibReference(relativePath)); } else { // treat as assembly full name normalized.Add(new FullNameLibReference(libPath)); } } model.NormalizedLibs = normalized.ToArray(); }
private void MakeAllPathsRelative() { var assemblyPaths = _assemblies.Text.Trim('\n', '\r', '\t', ' '); var result = new List <string>(); var testsLocationRootFullPath = Path.GetFullPath(_rootFolder); foreach (var assemblyPath in Utils.GetAssemblyPaths(assemblyPaths)) { var path = Path.Combine(testsLocationRootFullPath, assemblyPath.Trim()); var fullPath = Path.GetFullPath(path); var relativeAssemblyPath = Utils.MakeRelativePath(testsLocationRootFullPath, true, fullPath, false); if (!string.IsNullOrWhiteSpace(relativeAssemblyPath)) { result.Add(relativeAssemblyPath); } } var text = string.Join(Environment.NewLine, result); if (assemblyPaths != text) { _assemblies.Text = string.Join(Environment.NewLine, result); } }
private void _okButton_Click(object sender, RoutedEventArgs e) { var testSuitName = _testSuitName.Text; if (string.IsNullOrWhiteSpace(testSuitName)) { MessageBox.Show(this, "Name of test suit can't be empty.", "Error!", MessageBoxButton.OK, MessageBoxImage.Error); _testSuitName.Focus(); return; } var root = Path.GetFullPath(_rootFolder); var path = Path.Combine(root, testSuitName); if (Directory.Exists(path) && _create) { MessageBox.Show(this, "The test suit '" + testSuitName + "' already exists.", "Error!", MessageBoxButton.OK, MessageBoxImage.Error); _testSuitName.Focus(); return; } if (Utils.IsInvalidDirName(testSuitName)) { MessageBox.Show(this, "Name of test suit is invalid.", "Error!", MessageBoxButton.OK, MessageBoxImage.Error); _testSuitName.Focus(); return; } MakeAllPathsRelative(); var assemblyPaths = Utils.GetAssemblyPaths(_assemblies.Text); if (assemblyPaths.Length == 0) { MessageBox.Show(this, "No one valid library in library list.", "Error!", MessageBoxButton.OK, MessageBoxImage.Error); _assemblies.Focus(); return; } var syntaxModules = GetSelectedGrammarDescriptor(); if (syntaxModules.Length == 0) { MessageBox.Show(this, "No syntax module is selected.", "Error!", MessageBoxButton.OK, MessageBoxImage.Error); _syntaxModules.Focus(); return; } var startRule = _startRuleComboBox.SelectedItem as RuleDescriptor; if (startRule == null) { MessageBox.Show(this, "No a start rule is selected.", "Error!", MessageBoxButton.OK, MessageBoxImage.Error); _syntaxModules.Focus(); return; } try { if (_baseTestSuit.Name != testSuitName && Directory.Exists(_baseTestSuit.FullPath)) { Directory.CreateDirectory(path); FileSystem.CopyDirectory(_baseTestSuit.FullPath, path, UIOption.AllDialogs); Directory.Delete(_baseTestSuit.FullPath, recursive: true); } else { Directory.CreateDirectory(path); } var xml = Utils.MakeXml(root, syntaxModules, startRule); var configPath = Path.Combine(path, "config.xml"); xml.Save(configPath); TestSuitName = testSuitName; } catch (Exception ex) { MessageBox.Show(this, ex.GetType().Name + ":" + ex.Message, "Error!", MessageBoxButton.OK, MessageBoxImage.Error); return; } this.DialogResult = true; Close(); }