private ChutzpahTestSettingsFile FindSettingsFile(string directory, ChutzpahSettingsFileEnvironment environment) { if (string.IsNullOrEmpty(directory)) { return(ChutzpahTestSettingsFile.Default); } directory = directory.TrimEnd('/', '\\'); ChutzpahTestSettingsFile settings; if (!ChutzpahSettingsFileCache.TryGetValue(directory, out settings)) { var testSettingsFilePath = fileProbe.FindTestSettingsFile(directory); if (string.IsNullOrEmpty(testSettingsFilePath)) { ChutzpahTracer.TraceInformation("Chutzpah.json file not found given starting directoy {0}", directory); settings = ChutzpahTestSettingsFile.Default; } else if (!ChutzpahSettingsFileCache.TryGetValue(Path.GetDirectoryName(testSettingsFilePath), out settings)) { ChutzpahTracer.TraceInformation("Chutzpah.json file found at {0} given starting directoy {1}", testSettingsFilePath, directory); settings = serializer.DeserializeFromFile <ChutzpahTestSettingsFile>(testSettingsFilePath); if (settings == null) { settings = ChutzpahTestSettingsFile.Default; } else { settings.IsDefaultSettings = false; } settings.SettingsFileDirectory = Path.GetDirectoryName(testSettingsFilePath); var chutzpahVariables = BuildChutzpahReplacementVariables(testSettingsFilePath, environment, settings); ResolveTestHarnessDirectory(settings, chutzpahVariables); ResolveAMDBaseUrl(settings, chutzpahVariables); ResolveBatchCompileConfiguration(settings, chutzpahVariables); ProcessPathSettings(settings, chutzpahVariables); ProcessInheritance(environment, settings, chutzpahVariables); // Add a mapping in the cache for the directory that contains the test settings file ChutzpahSettingsFileCache.TryAdd(settings.SettingsFileDirectory, settings); } // Add mapping in the cache for the original directory tried to skip needing to traverse the tree again ChutzpahSettingsFileCache.TryAdd(directory, settings); } return(settings); }
/// <summary> /// Find and reads a chutzpah test settings file given a direcotry. If none is found a default settings object is created /// </summary> /// <param name="directory"></param> /// <param name="fileProbe"></param> /// <param name="serializer"></param> /// <returns></returns> public static ChutzpahTestSettingsFile Read(string directory, IFileProbe fileProbe, IJsonSerializer serializer) { if (string.IsNullOrEmpty(directory)) return new ChutzpahTestSettingsFile(); directory = directory.TrimEnd('/', '\\'); ChutzpahTestSettingsFile settings; if (!ChutzpahSettingsFileCache.TryGetValue(directory, out settings)) { var testSettingsFilePath = fileProbe.FindTestSettingsFile(directory); if(string.IsNullOrEmpty(testSettingsFilePath)) { settings = new ChutzpahTestSettingsFile(); } else if (!ChutzpahSettingsFileCache.TryGetValue(testSettingsFilePath, out settings)) { settings = serializer.DeserializeFromFile<ChutzpahTestSettingsFile>(testSettingsFilePath); settings.SettingsFileDirectory = Path.GetDirectoryName(testSettingsFilePath); ValidateTestHarnessLocationMode(settings, fileProbe); // Add a mapping in the cache for the directory that contains the test settings file ChutzpahSettingsFileCache.TryAdd(settings.SettingsFileDirectory, settings); } // Add mapping in the cache for the original directory tried to skip needing to traverse the tree again ChutzpahSettingsFileCache.TryAdd(directory, settings); } return settings; }
private ChutzpahTestSettingsFile FindSettingsFile(string directory, bool mergeResultWithDefaultSettings = true) { if (string.IsNullOrEmpty(directory)) { return(ChutzpahTestSettingsFile.Default); } directory = directory.TrimEnd('/', '\\'); ChutzpahTestSettingsFile settings; if (!ChutzpahSettingsFileCache.TryGetValue(directory, out settings)) { var testSettingsFilePath = fileProbe.FindTestSettingsFile(directory); if (string.IsNullOrEmpty(testSettingsFilePath)) { ChutzpahTracer.TraceInformation("Chutzpah.json file not found given starting directoy {0}", directory); settings = ChutzpahTestSettingsFile.Default; } else if (!ChutzpahSettingsFileCache.TryGetValue(testSettingsFilePath, out settings)) { ChutzpahTracer.TraceInformation("Chutzpah.json file found at {0} given starting directoy {1}", testSettingsFilePath, directory); settings = serializer.DeserializeFromFile <ChutzpahTestSettingsFile>(testSettingsFilePath); if (settings == null) { settings = ChutzpahTestSettingsFile.Default; } else { settings.IsDefaultSettings = false; } settings.SettingsFileDirectory = Path.GetDirectoryName(testSettingsFilePath); ResolveTestHarnessDirectory(settings); ResolveAMDBaseUrl(settings); ResolveBatchCompileConfiguration(settings); SetSettingsFileDirectoryOnRelativePathSettings(settings); if (settings.InheritFromParent) { var parentSettingsFile = FindSettingsFile(Path.GetDirectoryName(settings.SettingsFileDirectory), mergeResultWithDefaultSettings: false); if (!parentSettingsFile.IsDefaultSettings) { settings.InheritFrom(parentSettingsFile); } } // Add a mapping in the cache for the directory that contains the test settings file ChutzpahSettingsFileCache.TryAdd(settings.SettingsFileDirectory, settings); } // Add mapping in the cache for the original directory tried to skip needing to traverse the tree again ChutzpahSettingsFileCache.TryAdd(directory, settings); } return(mergeResultWithDefaultSettings ? settings.InheritFromDefault() : settings); }