예제 #1
0
        public void ShouldBuildInlines()
        {
            // Given

            dynamic inline1 = new DynamicWrapper();

            inline1.Run      = new DynamicWrapper();
            inline1.Run.Text = "Inline1";

            dynamic inline2 = new DynamicWrapper();

            inline2.Run      = new DynamicWrapper();
            inline2.Run.Text = "Inline2";

            dynamic elementMetadata = new DynamicWrapper();

            elementMetadata.Inlines = new[] { inline1, inline2 };

            // When
            PrintElementParagraph element = BuildTestHelper.BuildParagraph(elementMetadata);

            // Then
            Assert.IsNotNull(element);
            Assert.IsNotNull(element.Inlines);
            Assert.AreEqual(2, element.Inlines.Count);
            Assert.IsInstanceOf <PrintElementRun>(element.Inlines.First());
            Assert.IsInstanceOf <PrintElementRun>(element.Inlines.Last());
            Assert.AreEqual("Inline1", ((PrintElementRun)element.Inlines.First()).Text);
            Assert.AreEqual("Inline2", ((PrintElementRun)element.Inlines.Last()).Text);
        }
        public void ShouldBuildParagraphWithSettings()
        {
            // Given
            var context = HtmlBuilderTestHelper.CreateHtmlBuilderContext();
            var element = new PrintElementParagraph();
            var result  = new TextWriterWrapper();

            var run = new PrintElementRun();

            run.Text = "Проверка текста. ";
            run.Font = new PrintElementFont
            {
                Family = "Courier New",
                Size   = 30
            };
            run.TextDecoration = PrintElementTextDecoration.Underline;
            run.Foreground     = "Blue";

            element.Inlines.Add(run);
            element.Inlines.Add(run);
            element.Inlines.Add(run);
            element.Inlines.Add(run);
            element.Inlines.Add(run);
            element.Inlines.Add(run);
            element.Inlines.Add(run);
            element.Inlines.Add(run);

            element.IndentSize = 15;

            // When
            context.Build(element, result.Writer);

            // Then
            Assert.AreEqual(Resources.ResultTestShouldBuildParagraphWithSettings, result.GetText());
        }
예제 #3
0
        public object Create(PrintElementBuildContext buildContext, dynamic elementMetadata)
        {
            var element = new PrintElementParagraph
            {
                Margin  = BuildHelper.DefaultMargin,
                Padding = BuildHelper.DefaultPadding
            };

            BuildHelper.ApplyTextProperties(element, buildContext.ElementStyle);
            BuildHelper.ApplyTextProperties(element, elementMetadata);

            BuildHelper.ApplyBlockProperties(element, buildContext.ElementStyle);
            BuildHelper.ApplyBlockProperties(element, elementMetadata);

            ApplyIndent(element, elementMetadata);

            // Генерация содержимого элемента

            var contentContext = CreateContentContext(element, buildContext);
            var inlines        = buildContext.ElementBuilder.BuildElements(contentContext, elementMetadata.Inlines);

            if (inlines != null)
            {
                foreach (var inline in inlines)
                {
                    element.Inlines.Add(inline);
                }
            }

            BuildHelper.PostApplyTextProperties(element, buildContext.ElementStyle);
            BuildHelper.PostApplyTextProperties(element, elementMetadata);

            return(element);
        }
        public void ShouldBuildLineBreak()
        {
            //Given
            var context = HtmlBuilderTestHelper.CreateHtmlBuilderContext();
            var element = new PrintElementParagraph {
                IndentSize = 30
            };
            var result = new TextWriterWrapper();

            var run1 = new PrintElementRun {
                Text = "Before Line Break."
            };
            var run2 = new PrintElementRun {
                Text = "After Line Break."
            };

            element.Inlines.Add(run1);
            element.Inlines.Add(new PrintElementLineBreak());
            element.Inlines.Add(run2);

            //When
            context.Build(element, result.Writer);

            //Then
            Assert.AreEqual(Resources.ResultTestShouldBuildLineBreak, result.GetText());
        }
예제 #5
0
        private static PrintElementBuildContext CreateContentContext(PrintElementParagraph element, PrintElementBuildContext buildContext)
        {
            var contentWidth = (element.Border != null)
                        ? BuildHelper.CalcContentWidth(buildContext.ElementWidth, element.Margin, element.Padding, element.Border.Thickness)
                        : BuildHelper.CalcContentWidth(buildContext.ElementWidth, element.Margin, element.Padding);

            return(buildContext.Create(contentWidth));
        }
예제 #6
0
        private static void ApplyIndent(PrintElementParagraph element, dynamic elementMetadata)
        {
            double indentSize;

            if (BuildHelper.TryToSizeInPixels(elementMetadata.IndentSize, elementMetadata.IndentSizeUnit, out indentSize))
            {
                element.IndentSize = indentSize;
            }
        }
 public static void ApplyParagraphStyles(this TextWriter result, PrintElementParagraph element)
 {
     if (element.IndentSize != null)
     {
         result.Write("text-indent:");
         result.WriteInvariant(element.IndentSize);
         result.Write("px;");
     }
 }
        public void ShouldBuildParagraphWithDefaultSettings()
        {
            // Given
            var context = HtmlBuilderTestHelper.CreateHtmlBuilderContext();
            var element = new PrintElementParagraph();
            var result  = new TextWriterWrapper();

            // When
            context.Build(element, result.Writer);

            // Then
            Assert.AreEqual(Resources.ResultTestShouldBuildParagraphWithDefaultSettings, result.GetText());
        }
예제 #9
0
        public void ShouldApplyIndentSize()
        {
            // Given
            dynamic elementMetadata = new DynamicWrapper();

            elementMetadata.IndentSize     = 10;
            elementMetadata.IndentSizeUnit = "Px";

            // When
            PrintElementParagraph element = BuildTestHelper.BuildParagraph(elementMetadata);

            // Then
            Assert.IsNotNull(element);
            Assert.AreEqual(10, element.IndentSize);
        }
예제 #10
0
        public void ShouldBuildList()
        {
            // Given
            var context = HtmlBuilderTestHelper.CreateHtmlBuilderContext();
            var element = new PrintElementList();
            var result  = new TextWriterWrapper();

            var item1 = new PrintElementRun {
                Text = "Item1"
            };
            var item2 = new PrintElementRun {
                Text = "Item2"
            };
            var item3 = new PrintElementRun {
                Text = "Item3"
            };

            var par1 = new PrintElementParagraph();
            var par2 = new PrintElementParagraph();
            var par3 = new PrintElementParagraph();

            par1.Inlines.Add(item1);
            par2.Inlines.Add(item2);
            par3.Inlines.Add(item3);

            var section1 = new PrintElementSection();
            var section2 = new PrintElementSection();
            var section3 = new PrintElementSection();

            section1.Blocks.Add(par1);
            section2.Blocks.Add(par2);
            section3.Blocks.Add(par3);

            element.Items.Add(section1);
            element.Items.Add(section2);
            element.Items.Add(section3);

            element.MarkerStyle = PrintElementListMarkerStyle.LowerLatin;
            element.StartIndex  = 24;

            // When
            context.Build(element, result.Writer);

            // Then
            Assert.AreEqual(Resources.ResultTestShouldBuildList, result.GetText());
        }
        public void ShouldBuildSectioWithProperties()
        {
            //Given
            var context = HtmlBuilderTestHelper.CreateHtmlBuilderContext();
            var element = new PrintElementSection();
            var result  = new TextWriterWrapper();

            var run = new PrintElementRun();

            run.Text = "Section & Margin & Padding & Border & Background";

            var par = new PrintElementParagraph();

            par.Inlines.Add(run);
            par.TextAlignment = PrintElementTextAlignment.Center;

            var section = new PrintElementSection();

            section.Blocks.Add(par);
            section.Border = new PrintElementBorder
            {
                Color     = "blue",
                Thickness = new PrintElementThickness(5)
            };
            section.Margin     = new PrintElementThickness(20);
            section.Padding    = new PrintElementThickness(20);
            section.Background = "yellow";

            element.Blocks.Add(section);
            element.Border = new PrintElementBorder
            {
                Color     = PrintElementColors.Red,
                Thickness = new PrintElementThickness(5)
            };
            element.Margin     = new PrintElementThickness(20);
            element.Padding    = new PrintElementThickness(20);
            element.Background = PrintElementColors.Green;

            //When
            context.Build(element, result.Writer);

            //Then
            Assert.AreEqual(Resources.ResultTestShouldBuildSectioWithProperties, result.GetText());
        }
        public void ShouldBuildDocumentWithContents()
        {
            //Given
            var context = HtmlBuilderTestHelper.CreateHtmlBuilderContext();
            var element = new PrintViewDocument();
            var result  = new TextWriterWrapper();

            var image0   = new PrintElementImage(_getStream(Resources.ImageRotate0));
            var image90  = new PrintElementImage(_getStream(Resources.ImageRotate90));
            var image180 = new PrintElementImage(_getStream(Resources.ImageRotate180));
            var image270 = new PrintElementImage(_getStream(Resources.ImageRotate270));

            image0.Size = new PrintElementSize {
                Height = 50, Width = 150
            };
            image90.Size = new PrintElementSize {
                Height = 150, Width = 50
            };
            image180.Size = new PrintElementSize {
                Height = 50, Width = 150
            };
            image270.Size = new PrintElementSize {
                Height = 150, Width = 50
            };

            var par1 = new PrintElementParagraph();

            par1.Inlines.Add(image0);
            par1.Inlines.Add(image90);
            par1.Inlines.Add(image180);
            par1.Inlines.Add(image270);

            var runNormal = new PrintElementRun {
                Text = "Normal"
            };
            var runSubscript = new PrintElementRun
            {
                Text = "Subscript",
                Font = new PrintElementFont {
                    Variant = PrintElementFontVariant.Subscript
                }
            };
            var runSuperscript = new PrintElementRun
            {
                Text = "Superscript",
                Font = new PrintElementFont {
                    Variant = PrintElementFontVariant.Superscript
                }
            };

            var par2 = new PrintElementParagraph();

            par2.Inlines.Add(runNormal);
            par2.Inlines.Add(runSubscript);
            par2.Inlines.Add(runSuperscript);

            var run = new PrintElementRun {
                Text = "White Foreground & Black Background"
            };

            var par3 = new PrintElementParagraph();

            par3.Foreground = "white";
            par3.Background = "black";

            par3.Inlines.Add(run);

            element.Blocks.Add(par1);
            element.Blocks.Add(par2);
            element.Blocks.Add(new PrintElementPageBreak());
            element.Blocks.Add(par3);

            element.PagePadding = new PrintElementThickness(100);

            //When
            context.Build(element, result.Writer);

            //Then
            Assert.AreEqual(Resources.ResultTestShouldBuildDocumentWithContents, result.GetText());
        }
예제 #13
0
        public void ShouldBuildTable()
        {
            //Given
            var context = HtmlBuilderTestHelper.CreateHtmlBuilderContext();
            var element = new PrintElementTable();
            var result  = new TextWriterWrapper();

            var text1 = new PrintElementRun {
                Text = "Text11, colspan = 2"
            };
            var cell1 = new PrintElementTableCell
            {
                ColumnSpan = 2,
                Border     = new PrintElementBorder
                {
                    Thickness = new PrintElementThickness(1),
                    Color     = "black"
                }
            };
            var par1 = new PrintElementParagraph();

            par1.Inlines.Add(text1);
            cell1.Block = par1;
            var row1 = new PrintElementTableRow();

            row1.Cells.Add(cell1);

            var text21 = new PrintElementRun {
                Text = "Text21"
            };
            var cell21 = new PrintElementTableCell
            {
                Border = new PrintElementBorder
                {
                    Thickness = new PrintElementThickness(1),
                    Color     = "black"
                }
            };
            var par21 = new PrintElementParagraph();

            par21.Inlines.Add(text21);
            cell21.Block = par21;
            var row2 = new PrintElementTableRow();

            row2.Cells.Add(cell21);

            var text22 = new PrintElementRun {
                Text = "Text22"
            };
            var cell22 = new PrintElementTableCell
            {
                Border = new PrintElementBorder
                {
                    Thickness = new PrintElementThickness(1),
                    Color     = "black"
                }
            };
            var par22 = new PrintElementParagraph();

            par22.Inlines.Add(text22);
            cell22.Block = par22;
            row2.Cells.Add(cell22);

            var column1 = new PrintElementTableColumn {
                Size = 100
            };
            var column2 = new PrintElementTableColumn {
                Size = 200
            };

            element.Columns.Add(column1);
            element.Columns.Add(column2);

            element.Rows.Add(row1);
            element.Rows.Add(row2);

            //When
            context.Build(element, result.Writer);

            //Then
            Assert.AreEqual(Resources.ResultTestShouldBuildTable, result.GetText());
        }