public TestCaseStatus Show(TestCaseStatus initStatus, LayoutTestCase tcase, DW<Bitmap> bitmap)
        {
            lbFilename.Text = Path.GetFileName(tcase.Filename);
            lbPageNum.Text = tcase.PageNum.ToString();
            Comment = tcase.Comment;

            pbPage.Image = bitmap.o;
            Status = initStatus;

            ShowDialog();

            tcase.Comment = Comment;

            return Status;
        }
        public void Create(LayoutTestCase tcase)
        {
            if (_haltTests) { Assert.Ignore("Halt tests"); }

            if (_bookContent == null || _bookContent.o.Book.Filename != tcase.Filename)
            {
                if (_bookContent != null) 
                {
                    _bookContent.DisposeItem();
                    _bookContent = null;
                }

                Book book = new Book(tcase.Filename);
                _bookContent = DW.Wrap<IBookContent>(new BookContent(book, null));
            }

            IPageLayoutStrategy alg = new PdfWordsLayoutStrategy();
            PageLayout layout = alg.DetectLayoutFromBook(_bookContent.o, tcase.PageNum);
            layout.SetPageSizeToScreen(600);

            // Get staus based on the layout
            TestCaseStatus status = tcase.GetStatus(layout);
            
            // Skip pages that pass the test
            if (status == TestCaseStatus.Pass_Good ||
                status == TestCaseStatus.Pass_Acceptable) 
            { 
                return; 
            }

            DW<Bitmap> page = DW.Wrap(_bookContent.o.BookProvider.o.RenderPageImage(tcase.PageNum, layout.PageSize));
            DW<Bitmap> newPage = layout.Debug_DrawLayout(page);

            TestCaseStatus newStatus = _form.Show(status, tcase, newPage);

            page.DisposeItem();
            newPage.DisposeItem();

            if (newStatus == TestCaseStatus.HaltTest)
            {
                _haltTests = true;
                Assert.Ignore("Halt tests");                
            }

            // Update test case object
            tcase.Comment = _form.Comment;

            if (newStatus == TestCaseStatus.Pass_Acceptable ||
                newStatus == TestCaseStatus.Pass_Good)
            {
                tcase.ExpectedLayout = layout;
                tcase.ExpectedLayoutAccurate = (newStatus == TestCaseStatus.Pass_Good);
            }

            if (newStatus == TestCaseStatus.Ignore_Clear)
            {
                tcase.ExpectedLayout = null;
            }

            switch (newStatus)
            {
                case TestCaseStatus.Fail:
                    Assert.Fail("Failed: " + tcase.Comment);
                    break;
                case TestCaseStatus.Ignore:
                case TestCaseStatus.Ignore_Clear:
                    Assert.Ignore("Ignore: " + tcase.Comment);
                    break;
                case TestCaseStatus.Unknown:
                    Assert.Inconclusive();
                    break;
            }
        }
        public static LayoutTestCase Get(String filename, int pageNum)
        {
            String key = filename + "_p" + pageNum;

            LayoutTestCase tcase;
            if (!CaseResults.TryGetValue(key, out tcase))
            {
                tcase = new LayoutTestCase(filename, pageNum);
                CaseResults.Add(key, tcase);
            }

            return tcase;
        }