public void ColumnWidthConstructors()
        {
            var widths = new PDFColumnWidths();

            Assert.IsTrue(widths.IsEmpty);
            Assert.IsFalse(widths.HasExplicitWidth);
            Assert.AreEqual(PDFUnit.Empty, widths.Explicit);
            Assert.IsNull(widths.Widths);
        }
        public void ColumnWidthExplicitContrsuctors()
        {
            var widths = new PDFColumnWidths(new PDFUnit(200, PageUnits.Points));

            Assert.IsFalse(widths.IsEmpty);
            Assert.IsTrue(widths.HasExplicitWidth);

            Assert.IsNull(widths.Widths);
            Assert.AreEqual(new PDFUnit(200, PageUnits.Points), widths.Explicit);
        }
        public void ColumnWidthExplicitParse()
        {
            var str    = "300pt";
            var widths = PDFColumnWidths.Parse(str);

            Assert.IsFalse(widths.IsEmpty);
            Assert.IsTrue(widths.HasExplicitWidth);

            Assert.IsNull(widths.Widths);
            Assert.AreEqual(new PDFUnit(300, PageUnits.Points), widths.Explicit);
        }
        public void ColumnWidthWidthsContrsuctors()
        {
            var widths = new PDFColumnWidths(new double[] { 0.3, 0.4, 0.3 });

            Assert.IsFalse(widths.IsEmpty);
            Assert.IsFalse(widths.HasExplicitWidth);
            Assert.AreEqual(PDFUnit.Empty, widths.Explicit);

            Assert.IsNotNull(widths.Widths);
            Assert.AreEqual(3, widths.Widths.Length);
            Assert.AreEqual(0.3, widths.Widths[0]);
            Assert.AreEqual(0.4, widths.Widths[1]);
            Assert.AreEqual(0.3, widths.Widths[2]);
        }
        public void ColumnWidthExplicitCalculate()
        {
            var str    = "300pt";
            var widths = PDFColumnWidths.Parse(str);

            Assert.IsFalse(widths.IsEmpty);
            Assert.IsTrue(widths.HasExplicitWidth);

            int count;
            var calc = widths.GetExplicitColumnWidths(950, 10, out count);

            Assert.AreEqual(3, count);
            Assert.AreEqual(310, (int)calc[0].PointsValue);
            Assert.AreEqual(310, (int)calc[1].PointsValue);
            Assert.AreEqual(310, (int)calc[2].PointsValue);

            calc = widths.GetExplicitColumnWidths(750, 10, out count);

            Assert.AreEqual(2, count);

            // 370 + 10 + 370 = 750
            Assert.AreEqual(370, (int)calc[0].PointsValue);
            Assert.AreEqual(370, (int)calc[1].PointsValue);

            calc = widths.GetExplicitColumnWidths(250, 10, out count);
            //Smaller than the desired size so it's just 1
            Assert.AreEqual(1, count);
            Assert.AreEqual(250, (int)calc[0].PointsValue);

            calc = widths.GetExplicitColumnWidths(550, 10, out count);
            //Smaller than the available size for 2 so it's just 1
            Assert.AreEqual(1, count);
            Assert.AreEqual(550, (int)calc[0].PointsValue);


            calc = widths.GetExplicitColumnWidths(1890, 10, out count);
            //Just a big number
            Assert.AreEqual(6, count);

            Assert.AreEqual(306, (int)calc[0].PointsValue);
            Assert.AreEqual(306, (int)calc[1].PointsValue);
            Assert.AreEqual(306, (int)calc[2].PointsValue);

            // Reverse check to make sure the values add up to the orginal
            // with the alley being 1 less than the column count.

            var max = (10 * (count - 1)) + (calc[0] * count);

            Assert.AreEqual((int)max.PointsValue, 1890);
        }
        public void ColumnWidthPercentParse()
        {
            var str    = "40% 30% 30%";
            var widths = PDFColumnWidths.Parse(str);

            Assert.IsFalse(widths.IsEmpty);
            Assert.IsFalse(widths.HasExplicitWidth);
            Assert.AreEqual(PDFUnit.Empty, widths.Explicit);

            Assert.IsNotNull(widths.Widths);
            Assert.AreEqual(3, widths.Widths.Length);
            Assert.AreEqual(0.4, widths.Widths[0]);
            Assert.AreEqual(0.3, widths.Widths[1]);
            Assert.AreEqual(0.3, widths.Widths[2]);
        }
        public void ColumnWidthWithVariableParse()
        {
            var str    = "40% * 30%";
            var widths = PDFColumnWidths.Parse(str);

            Assert.IsFalse(widths.IsEmpty);
            Assert.IsFalse(widths.HasExplicitWidth);
            Assert.AreEqual(PDFUnit.Empty, widths.Explicit);

            Assert.IsNotNull(widths.Widths);
            Assert.AreEqual(3, widths.Widths.Length);
            Assert.AreEqual(0.4, widths.Widths[0]);
            Assert.AreEqual(PDFColumnWidths.UndefinedWidth, widths.Widths[1]);
            Assert.AreEqual(0.3, widths.Widths[2]);
        }
        public void ColumnWidthWithVariableCaclulate()
        {
            var str    = "40% * 30%";
            var widths = PDFColumnWidths.Parse(str);


            var calc = widths.GetPercentColumnWidths(1030, 10, 4);

            Assert.AreEqual(4, calc.Length);
            Assert.AreEqual(400, calc[0].PointsValue);
            Assert.AreEqual(300, calc[2].PointsValue);

            Assert.AreEqual(150, calc[1].PointsValue);
            Assert.AreEqual(150, calc[3].PointsValue);


            calc = widths.GetPercentColumnWidths(1020, 10, 3);
            Assert.AreEqual(3, calc.Length);
            Assert.AreEqual(400, calc[0].PointsValue);
            Assert.AreEqual(300, calc[2].PointsValue);

            Assert.AreEqual(300, calc[1].PointsValue);

            calc = widths.GetPercentColumnWidths(1010, 10, 2);
            Assert.AreEqual(2, calc.Length);
            Assert.AreEqual(400, calc[0].PointsValue);

            Assert.AreEqual(600, calc[1].PointsValue);

            str    = "0.2 0.5 * 0.1";
            widths = PDFColumnWidths.Parse(str);

            calc = widths.GetPercentColumnWidths(1030, 10, 4);
            Assert.AreEqual(4, calc.Length);
            Assert.AreEqual(200, calc[0].PointsValue);
            Assert.AreEqual(500, calc[1].PointsValue);
            Assert.AreEqual(200, calc[2].PointsValue);
            Assert.AreEqual(100, calc[3].PointsValue);
        }