private static IList<YamlDefinition> GetFolderFiles(string folder, bool useCache = false) { var url = useCache ? LocalUri(folder + ".html") : _listingUrl + "/" + folder; var folderHtml = new WebClient().DownloadString(url); if (!useCache) File.WriteAllText(_cacheFolder + folder + ".html", folderHtml); var files = (from a in CQ.Create(folderHtml)[".js-directory-link"] let fileName = a.InnerText where fileName.EndsWith(".yaml") select fileName).ToList(); var definitions = new ConcurrentBag<YamlDefinition>(); var i = 0; foreach (var file in files) { ++i; var yaml = GetYamlFile(folder, useCache, file); var parsed = ParseYaml(yaml).ToList(); var prefix = Regex.Replace(file, @"^(\d+).*$", "$1"); var yamlDefinition = new YamlDefinition { Folder = folder + i, FileName = file, Contents = yaml, Suites = parsed, Suffix = prefix }; PatchDefinition(yamlDefinition, folder, file); definitions.Add(yamlDefinition); } return definitions.ToList(); }
/// <summary> /// Path definition to catch known name clashes for instance /// </summary> private static void PatchDefinition(YamlDefinition yamlDefinition, string folder, string file) { if (file == "10_ping.yaml") yamlDefinition.Suites.First().Description = "Ping returns true"; if (file == "55_parent_with_routing.yaml") yamlDefinition.Suites.First().Description = "Parent with routing"; if (file == "10_info.yaml") yamlDefinition.Suites.First().Description = "Info returns body"; if (file == "20_fields_pre_0.90.3.yaml") yamlDefinition.Suites.First().Description = "Fields Pre 0.90.3"; var setupRoutine = yamlDefinition.Suites .FirstOrDefault(s => s.Description.Contains("setup")); if (setupRoutine != null) { yamlDefinition.SetupSuite = setupRoutine; foreach (var suite in yamlDefinition.Suites) suite.HasSetup = true; yamlDefinition.Suites = yamlDefinition.Suites.Where(s => !s.Description.Contains("setup")); } }
public static void GenerateTestFileFromView(string targetFile, YamlDefinition model) { var source = _razorMachine.Execute(File.ReadAllText(_viewFolder + @"TestSuite.cshtml"), model).ToString(); File.WriteAllText(targetFile, source); }