Files
QuestPDF/QuestPDF.UnitTests/StackTests.cs
T

310 lines
11 KiB
C#
Raw Normal View History

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;
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-04-09 16:32:32 +02:00
[Test]
public void Measure_ReturnsWrap_WhenFirstChildWraps()
2021-01-16 01:31:39 +01:00
{
TestPlan
.For(x => new BinaryStack
2021-01-16 01:31:39 +01:00
{
First = x.CreateChild("first"),
Second = x.CreateChild("second")
2021-01-16 01:31:39 +01: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]
public void Measure_ReturnsPartialRender_WhenFirstChildReturnsPartialRender()
2021-01-16 01:31:39 +01:00
{
TestPlan
.For(x => new BinaryStack
2021-01-16 01:31:39 +01:00
{
First = x.CreateChild("first"),
Second = x.CreateChild("second")
2021-01-16 01:31:39 +01: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-01-16 01:31:39 +01:00
[Test]
public void Measure_ReturnsPartialRender_WhenSecondChildWraps()
2021-01-16 01:31:39 +01:00
{
TestPlan
.For(x => new BinaryStack
2021-01-16 01:31:39 +01:00
{
First = x.CreateChild("first"),
Second = x.CreateChild("second")
2021-01-16 01:31:39 +01: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));
}
[Test]
public void Measure_ReturnsPartialRender_WhenSecondChildReturnsPartialRender()
{
TestPlan
.For(x => new BinaryStack
{
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));
}
[Test]
public void Measure_ReturnsFullRender_WhenSecondChildReturnsFullRender()
{
TestPlan
.For(x => new BinaryStack
{
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));
}
[Test]
public void Measure_UsesEmpty_WhenFirstChildIsRendered()
{
TestPlan
.For(x => new BinaryStack
{
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));
}
#endregion
#region Draw
[Test]
public void Draw_WhenFirstChildWraps()
{
TestPlan
.For(x => new BinaryStack
{
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]
public void Draw_WhenFirstChildPartiallyRenders()
2021-04-09 19:10:55 +02:00
{
TestPlan
.For(x => new BinaryStack
2021-04-09 19:10:55 +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))
.ExpectChildDraw("first", new Size(400, 100))
.CheckDrawResult();
2021-04-09 19:10:55 +02:00
}
[Test]
public void Draw_WhenFirstChildFullyRenders_AndSecondChildWraps()
2021-04-09 19:10:55 +02:00
{
TestPlan
.For(x => new BinaryStack
2021-04-09 19:10:55 +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))
.ExpectChildDraw("first", new Size(400, 100))
2021-09-02 21:48:20 +02:00
.ExpectChildMeasure("second", new Size(400, 200), SpacePlan.Wrap())
.CheckDrawResult();
}
[Test]
public void Draw_WhenFirstChildFullyRenders_AndSecondChildPartiallyRenders()
{
TestPlan
.For(x => new BinaryStack
2021-04-09 19:10:55 +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))
.ExpectChildDraw("first", new Size(400, 100))
2021-09-02 21:48:20 +02:00
.ExpectChildMeasure("second", new Size(400, 200), SpacePlan.PartialRender(250, 150))
.ExpectCanvasTranslate(0, 100)
.ExpectChildDraw("second", new Size(400, 150))
.ExpectCanvasTranslate(0, -100)
.CheckDrawResult();
}
[Test]
public void Draw_WhenFirstChildFullyRenders_AndSecondChildFullyRenders()
{
TestPlan
.For(x => new BinaryStack
{
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))
.ExpectChildDraw("first", new Size(400, 100))
2021-09-02 21:48:20 +02:00
.ExpectChildMeasure("second", new Size(400, 200), SpacePlan.FullRender(250, 150))
.ExpectCanvasTranslate(0, 100)
.ExpectChildDraw("second", new Size(400, 150))
.ExpectCanvasTranslate(0, -100)
.CheckDrawResult();
}
[Test]
public void Draw_UsesEmpty_WhenFirstChildIsRendered()
{
TestPlan
.For(x => new BinaryStack
{
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))
.ExpectCanvasTranslate(0, 0)
.ExpectChildDraw("second", new Size(400, 300))
.ExpectCanvasTranslate(0, 0)
.CheckState<BinaryStack>(x => x.IsFirstRendered)
.CheckDrawResult();
}
[Test]
public void Draw_TogglesFirstRenderedFlag_WhenSecondFullyRenders()
{
TestPlan
.For(x => new BinaryStack
{
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))
.ExpectCanvasTranslate(0, 0)
.ExpectChildDraw("second", new Size(400, 300))
.ExpectCanvasTranslate(0, 0)
.CheckDrawResult()
.CheckState<BinaryStack>(x => !x.IsFirstRendered);
2021-04-09 19:10:55 +02:00
}
#endregion
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,
Child = new BinaryStack
2021-09-18 23:40: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
}
},
Second = new BinaryStack
2021-09-18 23:40:21 +02:00
{
First = new Padding
{
Bottom = spacing,
Child = childC
},
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
}
}