2021-05-02 21:11:08 +02:00
|
|
|
using NUnit.Framework;
|
2021-09-02 21:48:20 +02:00
|
|
|
using QuestPDF.Drawing;
|
2021-01-16 01:31:39 +01:00
|
|
|
using QuestPDF.Elements;
|
2021-10-01 02:32:35 +02:00
|
|
|
using QuestPDF.Fluent;
|
2021-01-16 01:31:39 +01:00
|
|
|
using QuestPDF.Infrastructure;
|
2021-02-08 14:36:12 +01:00
|
|
|
using QuestPDF.UnitTests.TestEngine;
|
2021-01-16 01:31:39 +01:00
|
|
|
|
|
|
|
|
namespace QuestPDF.UnitTests
|
|
|
|
|
{
|
|
|
|
|
[TestFixture]
|
|
|
|
|
public class StackTests
|
|
|
|
|
{
|
2021-04-09 19:10:55 +02:00
|
|
|
#region Measure
|
2021-05-02 21:11:08 +02:00
|
|
|
|
2021-04-09 16:32:32 +02:00
|
|
|
[Test]
|
2021-05-02 21:11:08 +02:00
|
|
|
public void Measure_ReturnsWrap_WhenFirstChildWraps()
|
2021-01-16 01:31:39 +01:00
|
|
|
{
|
|
|
|
|
TestPlan
|
2021-09-07 00:32:51 +02:00
|
|
|
.For(x => new BinaryStack
|
2021-01-16 01:31:39 +01:00
|
|
|
{
|
2021-05-02 21:11:08 +02:00
|
|
|
First = x.CreateChild("first"),
|
|
|
|
|
Second = x.CreateChild("second")
|
2021-01-16 01:31:39 +01:00
|
|
|
})
|
2021-05-02 21:11:08 +02:00
|
|
|
.MeasureElement(new Size(400, 300))
|
2021-09-02 21:48:20 +02:00
|
|
|
.ExpectChildMeasure("first", new Size(400, 300), SpacePlan.Wrap())
|
|
|
|
|
.CheckMeasureResult(SpacePlan.Wrap());
|
2021-01-16 01:31:39 +01:00
|
|
|
}
|
2021-04-09 19:10:55 +02:00
|
|
|
|
2021-01-16 01:31:39 +01:00
|
|
|
[Test]
|
2021-05-02 21:11:08 +02:00
|
|
|
public void Measure_ReturnsPartialRender_WhenFirstChildReturnsPartialRender()
|
2021-01-16 01:31:39 +01:00
|
|
|
{
|
|
|
|
|
TestPlan
|
2021-09-07 00:32:51 +02:00
|
|
|
.For(x => new BinaryStack
|
2021-01-16 01:31:39 +01:00
|
|
|
{
|
2021-05-02 21:11:08 +02:00
|
|
|
First = x.CreateChild("first"),
|
|
|
|
|
Second = x.CreateChild("second")
|
2021-01-16 01:31:39 +01:00
|
|
|
})
|
2021-05-02 21:11:08 +02:00
|
|
|
.MeasureElement(new Size(400, 300))
|
2021-09-02 21:48:20 +02:00
|
|
|
.ExpectChildMeasure("first", new Size(400, 300), SpacePlan.PartialRender(300, 200))
|
|
|
|
|
.CheckMeasureResult(SpacePlan.PartialRender(300, 200));
|
2021-01-16 01:31:39 +01:00
|
|
|
}
|
2021-05-02 21:11:08 +02:00
|
|
|
|
2021-01-16 01:31:39 +01:00
|
|
|
[Test]
|
2021-05-02 21:11:08 +02:00
|
|
|
public void Measure_ReturnsPartialRender_WhenSecondChildWraps()
|
2021-01-16 01:31:39 +01:00
|
|
|
{
|
|
|
|
|
TestPlan
|
2021-09-07 00:32:51 +02:00
|
|
|
.For(x => new BinaryStack
|
2021-01-16 01:31:39 +01:00
|
|
|
{
|
2021-05-02 21:11:08 +02:00
|
|
|
First = x.CreateChild("first"),
|
|
|
|
|
Second = x.CreateChild("second")
|
2021-01-16 01:31:39 +01:00
|
|
|
})
|
2021-05-02 21:11:08 +02:00
|
|
|
.MeasureElement(new Size(400, 300))
|
2021-09-02 21:48:20 +02:00
|
|
|
.ExpectChildMeasure("first", new Size(400, 300), SpacePlan.FullRender(200, 100))
|
|
|
|
|
.ExpectChildMeasure("second", new Size(400, 200), SpacePlan.Wrap())
|
|
|
|
|
.CheckMeasureResult(SpacePlan.PartialRender(200, 100));
|
2021-05-02 21:11:08 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
public void Measure_ReturnsPartialRender_WhenSecondChildReturnsPartialRender()
|
|
|
|
|
{
|
|
|
|
|
TestPlan
|
2021-09-07 00:32:51 +02:00
|
|
|
.For(x => new BinaryStack
|
2021-05-02 21:11:08 +02:00
|
|
|
{
|
|
|
|
|
First = x.CreateChild("first"),
|
|
|
|
|
Second = x.CreateChild("second")
|
|
|
|
|
})
|
|
|
|
|
.MeasureElement(new Size(400, 300))
|
2021-09-02 21:48:20 +02:00
|
|
|
.ExpectChildMeasure("first", new Size(400, 300), SpacePlan.FullRender(200, 100))
|
|
|
|
|
.ExpectChildMeasure("second", new Size(400, 200), SpacePlan.PartialRender(300, 150))
|
|
|
|
|
.CheckMeasureResult(SpacePlan.PartialRender(300, 250));
|
2021-05-02 21:11:08 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
public void Measure_ReturnsFullRender_WhenSecondChildReturnsFullRender()
|
|
|
|
|
{
|
|
|
|
|
TestPlan
|
2021-09-07 00:32:51 +02:00
|
|
|
.For(x => new BinaryStack
|
2021-05-02 21:11:08 +02:00
|
|
|
{
|
|
|
|
|
First = x.CreateChild("first"),
|
|
|
|
|
Second = x.CreateChild("second")
|
|
|
|
|
})
|
|
|
|
|
.MeasureElement(new Size(400, 300))
|
2021-09-02 21:48:20 +02:00
|
|
|
.ExpectChildMeasure("first", new Size(400, 300), SpacePlan.FullRender(200, 100))
|
|
|
|
|
.ExpectChildMeasure("second", new Size(400, 200), SpacePlan.FullRender(100, 50))
|
|
|
|
|
.CheckMeasureResult(SpacePlan.FullRender(200, 150));
|
2021-05-02 21:11:08 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
public void Measure_UsesEmpty_WhenFirstChildIsRendered()
|
|
|
|
|
{
|
|
|
|
|
TestPlan
|
2021-09-07 00:32:51 +02:00
|
|
|
.For(x => new BinaryStack
|
2021-05-02 21:11:08 +02:00
|
|
|
{
|
|
|
|
|
First = x.CreateChild("first"),
|
|
|
|
|
Second = x.CreateChild("second"),
|
|
|
|
|
|
|
|
|
|
IsFirstRendered = true
|
|
|
|
|
})
|
|
|
|
|
.MeasureElement(new Size(400, 300))
|
2021-09-02 21:48:20 +02:00
|
|
|
.ExpectChildMeasure("second", new Size(400, 300), SpacePlan.FullRender(200, 300))
|
|
|
|
|
.CheckMeasureResult(SpacePlan.FullRender(200, 300));
|
2021-05-02 21:11:08 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
#region Draw
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
public void Draw_WhenFirstChildWraps()
|
|
|
|
|
{
|
|
|
|
|
TestPlan
|
2021-09-07 00:32:51 +02:00
|
|
|
.For(x => new BinaryStack
|
2021-05-02 21:11:08 +02:00
|
|
|
{
|
|
|
|
|
First = x.CreateChild("first"),
|
|
|
|
|
Second = x.CreateChild("second")
|
|
|
|
|
})
|
|
|
|
|
.DrawElement(new Size(400, 300))
|
2021-09-02 21:48:20 +02:00
|
|
|
.ExpectChildMeasure("first", new Size(400, 300), SpacePlan.Wrap())
|
2021-01-16 01:31:39 +01:00
|
|
|
.CheckDrawResult();
|
2021-04-09 16:32:32 +02:00
|
|
|
}
|
2021-04-09 19:10:55 +02:00
|
|
|
|
|
|
|
|
[Test]
|
2021-05-02 21:11:08 +02:00
|
|
|
public void Draw_WhenFirstChildPartiallyRenders()
|
2021-04-09 19:10:55 +02:00
|
|
|
{
|
2021-05-02 21:11:08 +02:00
|
|
|
TestPlan
|
2021-09-07 00:32:51 +02:00
|
|
|
.For(x => new BinaryStack
|
2021-04-09 19:10:55 +02:00
|
|
|
{
|
2021-05-02 21:11:08 +02:00
|
|
|
First = x.CreateChild("first"),
|
|
|
|
|
Second = x.CreateChild("second")
|
|
|
|
|
})
|
|
|
|
|
.DrawElement(new Size(400, 300))
|
2021-09-02 21:48:20 +02:00
|
|
|
.ExpectChildMeasure("first", new Size(400, 300), SpacePlan.PartialRender(200, 100))
|
2021-05-02 21:11:08 +02:00
|
|
|
.ExpectChildDraw("first", new Size(400, 100))
|
|
|
|
|
.CheckDrawResult();
|
2021-04-09 19:10:55 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Test]
|
2021-05-02 21:11:08 +02:00
|
|
|
public void Draw_WhenFirstChildFullyRenders_AndSecondChildWraps()
|
2021-04-09 19:10:55 +02:00
|
|
|
{
|
2021-05-02 21:11:08 +02:00
|
|
|
TestPlan
|
2021-09-07 00:32:51 +02:00
|
|
|
.For(x => new BinaryStack
|
2021-04-09 19:10:55 +02:00
|
|
|
{
|
2021-05-02 21:11:08 +02:00
|
|
|
First = x.CreateChild("first"),
|
|
|
|
|
Second = x.CreateChild("second")
|
|
|
|
|
})
|
|
|
|
|
.DrawElement(new Size(400, 300))
|
2021-09-02 21:48:20 +02:00
|
|
|
.ExpectChildMeasure("first", new Size(400, 300), SpacePlan.FullRender(200, 100))
|
2021-05-02 21:11:08 +02:00
|
|
|
.ExpectChildDraw("first", new Size(400, 100))
|
2021-09-02 21:48:20 +02:00
|
|
|
.ExpectChildMeasure("second", new Size(400, 200), SpacePlan.Wrap())
|
2021-05-02 21:11:08 +02:00
|
|
|
.CheckDrawResult();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
public void Draw_WhenFirstChildFullyRenders_AndSecondChildPartiallyRenders()
|
|
|
|
|
{
|
|
|
|
|
TestPlan
|
2021-09-07 00:32:51 +02:00
|
|
|
.For(x => new BinaryStack
|
2021-04-09 19:10:55 +02:00
|
|
|
{
|
2021-05-02 21:11:08 +02:00
|
|
|
First = x.CreateChild("first"),
|
|
|
|
|
Second = x.CreateChild("second")
|
|
|
|
|
})
|
|
|
|
|
.DrawElement(new Size(400, 300))
|
2021-09-02 21:48:20 +02:00
|
|
|
.ExpectChildMeasure("first", new Size(400, 300), SpacePlan.FullRender(200, 100))
|
2021-05-02 21:11:08 +02:00
|
|
|
.ExpectChildDraw("first", new Size(400, 100))
|
2021-09-02 21:48:20 +02:00
|
|
|
.ExpectChildMeasure("second", new Size(400, 200), SpacePlan.PartialRender(250, 150))
|
2021-05-02 21:11:08 +02:00
|
|
|
.ExpectCanvasTranslate(0, 100)
|
|
|
|
|
.ExpectChildDraw("second", new Size(400, 150))
|
|
|
|
|
.ExpectCanvasTranslate(0, -100)
|
|
|
|
|
.CheckDrawResult();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
public void Draw_WhenFirstChildFullyRenders_AndSecondChildFullyRenders()
|
|
|
|
|
{
|
|
|
|
|
TestPlan
|
2021-09-07 00:32:51 +02:00
|
|
|
.For(x => new BinaryStack
|
2021-05-02 21:11:08 +02:00
|
|
|
{
|
|
|
|
|
First = x.CreateChild("first"),
|
|
|
|
|
Second = x.CreateChild("second")
|
|
|
|
|
})
|
|
|
|
|
.DrawElement(new Size(400, 300))
|
2021-09-02 21:48:20 +02:00
|
|
|
.ExpectChildMeasure("first", new Size(400, 300), SpacePlan.FullRender(200, 100))
|
2021-05-02 21:11:08 +02:00
|
|
|
.ExpectChildDraw("first", new Size(400, 100))
|
2021-09-02 21:48:20 +02:00
|
|
|
.ExpectChildMeasure("second", new Size(400, 200), SpacePlan.FullRender(250, 150))
|
2021-05-02 21:11:08 +02:00
|
|
|
.ExpectCanvasTranslate(0, 100)
|
|
|
|
|
.ExpectChildDraw("second", new Size(400, 150))
|
|
|
|
|
.ExpectCanvasTranslate(0, -100)
|
|
|
|
|
.CheckDrawResult();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
public void Draw_UsesEmpty_WhenFirstChildIsRendered()
|
|
|
|
|
{
|
|
|
|
|
TestPlan
|
2021-09-07 00:32:51 +02:00
|
|
|
.For(x => new BinaryStack
|
2021-05-02 21:11:08 +02:00
|
|
|
{
|
|
|
|
|
First = x.CreateChild("first"),
|
|
|
|
|
Second = x.CreateChild("second"),
|
|
|
|
|
|
|
|
|
|
IsFirstRendered = true
|
|
|
|
|
})
|
|
|
|
|
.DrawElement(new Size(400, 300))
|
2021-09-02 21:48:20 +02:00
|
|
|
.ExpectChildMeasure("second", new Size(400, 300), SpacePlan.PartialRender(200, 300))
|
2021-05-02 21:11:08 +02:00
|
|
|
.ExpectCanvasTranslate(0, 0)
|
|
|
|
|
.ExpectChildDraw("second", new Size(400, 300))
|
|
|
|
|
.ExpectCanvasTranslate(0, 0)
|
2021-09-07 00:32:51 +02:00
|
|
|
.CheckState<BinaryStack>(x => x.IsFirstRendered)
|
2021-05-02 21:11:08 +02:00
|
|
|
.CheckDrawResult();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
public void Draw_TogglesFirstRenderedFlag_WhenSecondFullyRenders()
|
|
|
|
|
{
|
|
|
|
|
TestPlan
|
2021-09-07 00:32:51 +02:00
|
|
|
.For(x => new BinaryStack
|
2021-05-02 21:11:08 +02:00
|
|
|
{
|
|
|
|
|
First = x.CreateChild("first"),
|
|
|
|
|
Second = x.CreateChild("second"),
|
|
|
|
|
|
|
|
|
|
IsFirstRendered = true
|
|
|
|
|
})
|
|
|
|
|
.DrawElement(new Size(400, 300))
|
2021-09-02 21:48:20 +02:00
|
|
|
.ExpectChildMeasure("second", new Size(400, 300), SpacePlan.FullRender(200, 300))
|
2021-05-02 21:11:08 +02:00
|
|
|
.ExpectCanvasTranslate(0, 0)
|
|
|
|
|
.ExpectChildDraw("second", new Size(400, 300))
|
|
|
|
|
.ExpectCanvasTranslate(0, 0)
|
|
|
|
|
.CheckDrawResult()
|
2021-09-07 00:32:51 +02:00
|
|
|
.CheckState<BinaryStack>(x => !x.IsFirstRendered);
|
2021-04-09 19:10:55 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#endregion
|
2021-05-02 21:11:08 +02:00
|
|
|
|
2021-09-18 23:40:21 +02:00
|
|
|
#region Structure
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
public void Structure_Simple()
|
|
|
|
|
{
|
|
|
|
|
// arrange
|
|
|
|
|
var childA = TestPlan.CreateUniqueElement();
|
|
|
|
|
var childB = TestPlan.CreateUniqueElement();
|
|
|
|
|
var childC = TestPlan.CreateUniqueElement();
|
|
|
|
|
var childD = TestPlan.CreateUniqueElement();
|
|
|
|
|
var childE = TestPlan.CreateUniqueElement();
|
|
|
|
|
|
|
|
|
|
const int spacing = 20;
|
|
|
|
|
|
|
|
|
|
// act
|
|
|
|
|
var structure = new Container();
|
|
|
|
|
|
|
|
|
|
structure.Stack(stack =>
|
|
|
|
|
{
|
|
|
|
|
stack.Spacing(spacing);
|
|
|
|
|
|
|
|
|
|
stack.Item().Element(childA);
|
|
|
|
|
stack.Item().Element(childB);
|
|
|
|
|
stack.Item().Element(childC);
|
|
|
|
|
stack.Item().Element(childD);
|
|
|
|
|
stack.Item().Element(childE);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// assert
|
|
|
|
|
var expected = new Padding
|
|
|
|
|
{
|
|
|
|
|
Bottom = -spacing,
|
|
|
|
|
|
2021-10-01 02:20:21 +02:00
|
|
|
Child = new BinaryStack
|
2021-09-18 23:40:21 +02:00
|
|
|
{
|
2021-10-01 02:20:21 +02:00
|
|
|
First = new BinaryStack
|
2021-09-18 23:40:21 +02:00
|
|
|
{
|
|
|
|
|
First = new Padding
|
|
|
|
|
{
|
|
|
|
|
Bottom = spacing,
|
|
|
|
|
Child = childA
|
|
|
|
|
},
|
|
|
|
|
Second = new Padding
|
|
|
|
|
{
|
|
|
|
|
Bottom = spacing,
|
|
|
|
|
Child = childB
|
|
|
|
|
}
|
|
|
|
|
},
|
2021-10-01 02:20:21 +02:00
|
|
|
Second = new BinaryStack
|
2021-09-18 23:40:21 +02:00
|
|
|
{
|
|
|
|
|
First = new Padding
|
|
|
|
|
{
|
|
|
|
|
Bottom = spacing,
|
|
|
|
|
Child = childC
|
|
|
|
|
},
|
2021-10-01 02:20:21 +02:00
|
|
|
Second = new BinaryStack
|
2021-09-18 23:40:21 +02:00
|
|
|
{
|
|
|
|
|
First = new Padding
|
|
|
|
|
{
|
|
|
|
|
Bottom = spacing,
|
|
|
|
|
Child = childD
|
|
|
|
|
},
|
|
|
|
|
Second = new Padding
|
|
|
|
|
{
|
|
|
|
|
Bottom = spacing,
|
|
|
|
|
Child = childE
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
TestPlan.CompareOperations(structure, expected);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#endregion
|
2021-01-16 01:31:39 +01:00
|
|
|
}
|
|
|
|
|
}
|