/** * @brief recursively collects all test container files that can be found */ public static IEnumerable <string> CollectCTestTestfiles(string currentDir) { var file = new FileInfo(Path.Combine(currentDir, TestContainerHelper.TestFileName + TestContainerHelper.TestFileExtension)); if (!file.Exists) { return(Enumerable.Empty <string>()); } var res = new List <string>(); var content = file.OpenText().ReadToEnd(); var matches = Regex.Matches(content, @".*[sS][uB][bB][dD][iI][rR][sS]\s*\((?<subdir>.*)\)"); var subdirs = (from Match match in matches select match.Groups["subdir"].Value).ToList(); if (content.Contains("add_test")) { res.Add(file.FullName); } foreach (var dir in subdirs) { var subpath = dir.Trim('\"'); subpath = Path.Combine(currentDir, subpath); res.AddRange(TestContainerHelper.CollectCTestTestfiles(subpath)); } return(res); }
public void FindTestContainers() { this.Log(LogLevel.Debug, "FindTestContainers (clear)"); this._testContainerWatcher.Clear(); this._testContainers.Clear(); if (!this.CTestAdapterEnabled) { return; } this.Log(LogLevel.Debug, "FindTestContainers (search)"); // @todo verify something changed actually?!? var files = TestContainerHelper.CollectCTestTestfiles(this._package.CMakeCacheDirectory).ToList(); foreach (var file in files) { this._testContainerWatcher.AddWatch(file); this._testContainers.Add(file); } if (null != this.TestContainersChanged) { this.TestContainersChanged(this, new TestContainerListArgs(this._testContainers)); } }