private static SampleFolderViewModel PopulateRandomly(string path, int numFiles, int numFolders, int nestedLevels) { var result = new SampleFolderViewModel { Name = Path.GetFileName(path) }; for (var i = 0; i < numFiles; ++i) { var name = Path.GetRandomFileName(); var nestedPath = Path.Combine(path, name + ".xml"); File.WriteAllText(nestedPath, "N/A"); result.Items.Add(new FileSampleViewModel(nestedPath)); } if (nestedLevels <= 0) { return(result); } for (var i = 0; i < numFolders; ++i) { var name = Path.GetRandomFileName(); var nestedPath = Path.Combine(path, name); Directory.CreateDirectory(nestedPath); result.Items.Add(PopulateRandomly(nestedPath, numFiles, numFolders, nestedLevels - 1)); } return(result); }
private static SampleFolderViewModel?ScanSampleFolder(string path) { var result = new SampleFolderViewModel { Name = new DirectoryInfo(path).Name, }; foreach (var directory in Directory.GetDirectories(path)) { var folder = ScanSampleFolder(directory); if (folder == null) { continue; } result.Items.Add(folder); } foreach (var file in Directory.GetFiles(path, "*.xml")) { result.Items.Add(new FileSampleViewModel(file)); } return(result.Items.Count > 0 ? result : null); }
private static void ScanResult(SampleFolderViewModel result, Action <ISampleMenuItem> action) { action(result); foreach (var item in result.Items) { if (item is SampleFolderViewModel folder) { ScanResult(folder, action); } else { action(item); } } }
public static SampleFolderViewModel?LoadXmlSamples(IEnumerable <string> sources, bool showDefault) { var root = new SampleFolderViewModel { Name = "XML Sample", }; foreach (var source in sources) { if (string.IsNullOrWhiteSpace(source)) { continue; } var trimmed = source.Trim(); if (trimmed.EndsWith(".xml", StringComparison.InvariantCultureIgnoreCase) && File.Exists(trimmed)) { root.Items.Add(new FileSampleViewModel(trimmed)); } if (!Directory.Exists(trimmed)) { continue; } var folder = ScanSampleFolder(trimmed); if (folder == null) { continue; } root.Items.Add(folder); } if (showDefault) { foreach (var sample in EmbeddedSampleViewModel.GetFromAssembly()) { root.Items.Add(sample); } } return(root.Items.Count > 0 ? root : null); }
private static void AssertConsistency(SampleFolderViewModel expected, SampleFolderViewModel actual, string path = null) { path = $"{path}/{expected.Name}"; // For simplicity, it is not checked whether actual contains more items than expected foreach (var item in expected.Items) { if (item is SampleFolderViewModel folder) { var other = actual.Items.OfType <SampleFolderViewModel>().FirstOrDefault(x => x.Name == item.Name); Assert.NotNull(other, $"Could not find folder {path}/{item.Name}"); AssertConsistency(folder, other, path); } else { var other = actual.Items.OfType <FileSampleViewModel>().FirstOrDefault(x => x.Name == item.Name); Assert.NotNull(other, $"Could not find file {path}/{item.Name}"); } } }