private ITestable Build(string curr, string appname, Size viewport, Batch flatBatch) { if (appname == null) { appname = "ImageTester"; } var attr = File.GetAttributes(curr); if (!attr.HasFlag(FileAttributes.Directory)) { var fileStream = File.OpenRead(curr); if (PDFTest.Supports(fileStream)) { PDFTest pdftest = new PDFTest(fileStream, this.appname, pdfdpi_); pdftest.SetPdfPassword(pdfPassword_); pdftest.SetPages(pages_); return(pdftest); } //TODO: Implement //if (PostscriptTest.Supports(fileStream)) //{ // PostscriptTest postScriptest = new PostscriptTest(fileStream, appname); // return postScriptest; //} return(ImageStep.Supports(fileStream) ? new ImageStep(fileStream) : null); } Test currTest = null; Batch currBatch = flatBatch; Suite currSuite = null; var supportedExtensions = PDFTest.SupportedExtensionsWithSeparator .Concat(ImageStep.SupportedExtensionsWithSeparator); var files = supportedExtensions .AsParallel() .SelectMany(p => Directory.EnumerateFiles(curr, "*" + p, SearchOption.AllDirectories)) .OrderBy(f => f); foreach (var file in files) { var fileStream = File.OpenRead(file); ITestable unit = Build(file, appname, viewport, flatBatch); if (unit is ImageStep) { if (currTest == null) { currTest = new Test(fileStream, appname, viewport); } ImageStep step = (ImageStep)unit; currTest.AddStep(step); } else if (unit is Test) { if (currBatch == null) { currBatch = new Batch(fileStream); } currBatch.AddTest((Test)unit); } else if (flatBatch == null) { if (unit is Batch) { if (currSuite == null) { currSuite = new Suite(fileStream); } currSuite.AddBatch((Batch)unit); } else if (unit is Suite) { Suite suite = (Suite)unit; if (currSuite == null) { currSuite = new Suite(fileStream); } suite.PortBatchesTo(currSuite); if (suite.HasOrphanTest()) { if (currBatch == null) { currBatch = new Batch(fileStream); } suite.PortTestTo(currBatch); } } else { } } } if (flatBatch == null) { if (currTest == null && currBatch == null && currSuite == null) { return(null); } if (currTest != null && currBatch == null && currSuite == null) { return(currTest); } if (currTest == null && currBatch != null && currSuite == null) { return(currBatch); } if (currTest == null && currBatch == null && currSuite != null) { return(currSuite); } if (currSuite == null) { currSuite = new Suite(File.OpenRead(curr)); } if (currBatch != null) { currSuite.AddBatch(currBatch); } if (currTest != null) { currSuite.SetTest(currTest); } return(currSuite); } else if (currTest != null) { return(currTest); } return(currBatch); }