/* Function: TestFolder * Tests all the input files contained in this folder. See <EngineInstanceManager.Start()> for how relative paths are handled. */ public void TestFolder(Path testDataFolder, Path projectConfigFolder = default(Path)) { TestList allTests = new TestList(); engineInstanceManager = new EngineInstanceManager(); engineInstanceManager.Start(testDataFolder, projectConfigFolder); // Store this so we can still use it for error messages after the engine is disposed of. Path inputFolder = engineInstanceManager.InputFolder; try { // Build a test for each input file we find string[] files = System.IO.Directory.GetFiles(inputFolder); foreach (string file in files) { if (Test.IsInputFile(file)) { Test test = Test.FromInputFile(file); try { Language language = EngineInstance.Languages.FromExtension(test.InputFile.Extension); if (language == null) { throw new Exception("Extension " + test.InputFile.Extension + " did not resolve to a language."); } string code = System.IO.File.ReadAllText(test.InputFile); IList <PossibleDocumentationComment> comments = language.GetPossibleDocumentationComments(code); IList <Topic> topics; LinkSet classParentLinks; language.Parse(test.InputFile, -1, Engine.Delegates.NeverCancel, out topics, out classParentLinks); test.SetActualOutput(OutputOf(comments, topics)); } catch (Exception e) { test.TestException = e; } test.Run(); allTests.Add(test); } } } finally { engineInstanceManager.Dispose(); engineInstanceManager = null; } if (allTests.Count == 0) { Assert.Fail("There were no tests found in " + inputFolder); } else if (allTests.Passed == false) { Assert.Fail(allTests.BuildFailureMessage()); } }
/* Function: TestFolder * Tests all the input files contained in this folder. See <EngineInstanceManager.Start()> for how relative paths are handled. */ public void TestFolder(Path testDataFolder, Path projectConfigFolder = default(Path)) { TestList allTests = new TestList(); engineInstanceManager = new EngineInstanceManager(); engineInstanceManager.Start(testDataFolder, projectConfigFolder); // Store this so we can still use it for error messages after the engine is disposed of. Path inputFolder = engineInstanceManager.InputFolder; try { // Build a test for each input file we find string[] files = System.IO.Directory.GetFiles(inputFolder); foreach (string file in files) { if (Test.IsInputFile(file)) { Test test = Test.FromInputFile(file); try { Language language = EngineInstance.Languages.FromExtension(test.InputFile.Extension); if (language == null) { throw new Exception("Extension " + test.InputFile.Extension + " did not resolve to a language."); } string code = System.IO.File.ReadAllText(test.InputFile); Tokenizer tokenizedCode = new Tokenizer(code); List <Element> codeElements = language.GetCodeElements(tokenizedCode); if (codeElements == null) { throw new Exception("GetCodeElements() returned null."); } test.SetActualOutput(OutputOf(codeElements)); } catch (Exception e) { test.TestException = e; } test.Run(); allTests.Add(test); } } } finally { engineInstanceManager.Dispose(); engineInstanceManager = null; } if (allTests.Count == 0) { Assert.Fail("There were no tests found in " + inputFolder); } else if (allTests.Passed == false) { Assert.Fail(allTests.BuildFailureMessage()); } }
/* Function: TestFolder * Tests all the input files contained in this folder. See <EngineInstanceManager.Start()> for how relative paths are handled. */ public void TestFolder(Path testDataFolder, Path projectConfigFolder = default(Path)) { TestList allTests = new TestList(); StringSet expectedOutputFiles = new StringSet(); engineInstanceManager = new EngineInstanceManager(); engineInstanceManager.Start(testDataFolder, projectConfigFolder); // Store this so we can still use it for error messages after the engine is disposed of. Path inputFolder = engineInstanceManager.InputFolder; try { engineInstanceManager.Run(); // Iterate through classes to build output files. using (Engine.CodeDB.Accessor accessor = EngineInstance.CodeDB.GetAccessor()) { // Class IDs should be assigned sequentially. It's not an ideal way to do this though. int classID = 1; accessor.GetReadOnlyLock(); try { for (;;) { List <Topic> classTopics = accessor.GetTopicsInClass(classID, Delegates.NeverCancel); ClassView.Merge(ref classTopics, engineInstanceManager.EngineInstance); if (classTopics == null || classTopics.Count == 0) { break; } string testName = classTopics[0].ClassString.Symbol.FormatWithSeparator("."); Path outputFilePath = Test.ActualOutputFileOf(testName, inputFolder); Test test = Test.FromActualOutputFile(outputFilePath); expectedOutputFiles.Add(test.ExpectedOutputFile); try { test.SetActualOutput(OutputOf(classTopics)); } catch (Exception e) { test.TestException = e; } test.Run(); allTests.Add(test); classID++; } } finally { accessor.ReleaseLock(); } } // Now search for any expected output files that didn't have corresponding actual output files. string[] files = System.IO.Directory.GetFiles(inputFolder); foreach (string file in files) { if (Test.IsExpectedOutputFile(file) && expectedOutputFiles.Contains(file) == false) { Test test = Test.FromExpectedOutputFile(file); test.Run(); allTests.Add(test); expectedOutputFiles.Add(file); } } } finally { engineInstanceManager.Dispose(); engineInstanceManager = null; } if (allTests.Count == 0) { Assert.Fail("There were no tests found in " + inputFolder); } else if (allTests.Passed == false) { Assert.Fail(allTests.BuildFailureMessage()); } }