Пример #1
0
        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);
        }