FluentExtensions.cs 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. namespace QuestPDF.LayoutTests.TestEngine;
  2. internal class ExpectedDocumentLayoutDescriptor
  3. {
  4. public LayoutTestResult.DocumentLayout DocumentLayout { get; } = new();
  5. public ExpectedPageLayoutDescriptor Page()
  6. {
  7. var page = new LayoutTestResult.PageLayout();
  8. DocumentLayout.Pages.Add(page);
  9. return new ExpectedPageLayoutDescriptor(page);
  10. }
  11. public void ExpectInfiniteLayoutException()
  12. {
  13. DocumentLayout.GeneratesInfiniteLayout = true;
  14. }
  15. }
  16. internal class ExpectedPageLayoutDescriptor
  17. {
  18. private LayoutTestResult.PageLayout PageLayout { get; }
  19. public ExpectedPageLayoutDescriptor(LayoutTestResult.PageLayout pageLayout)
  20. {
  21. PageLayout = pageLayout;
  22. }
  23. public ExpectedPageLayoutDescriptor RequiredAreaSize(float width, float height)
  24. {
  25. PageLayout.RequiredArea = new Size(width, height);
  26. return this;
  27. }
  28. public ExpectedPageLayoutDescriptor Content(Action<ExpectedPageContentDescriptor> content)
  29. {
  30. var pageContent = new ExpectedPageContentDescriptor();
  31. content(pageContent);
  32. PageLayout.Mocks = pageContent.MockPositions;
  33. return this;
  34. }
  35. }
  36. internal class ExpectedPageContentDescriptor
  37. {
  38. public List<LayoutTestResult.MockLayoutPosition> MockPositions { get;} = new();
  39. public ExpectedMockPositionDescriptor Mock(string mockId = MockFluent.DefaultMockId)
  40. {
  41. var child = new LayoutTestResult.MockLayoutPosition { MockId = mockId };
  42. MockPositions.Add(child);
  43. return new ExpectedMockPositionDescriptor(child);
  44. }
  45. }
  46. internal class ExpectedMockPositionDescriptor
  47. {
  48. private LayoutTestResult.MockLayoutPosition MockLayoutPosition { get; }
  49. public ExpectedMockPositionDescriptor(LayoutTestResult.MockLayoutPosition mockLayoutPosition)
  50. {
  51. MockLayoutPosition = mockLayoutPosition;
  52. }
  53. public ExpectedMockPositionDescriptor Position(float x, float y)
  54. {
  55. MockLayoutPosition.Position = new Position(x, y);
  56. return this;
  57. }
  58. public ExpectedMockPositionDescriptor Size(float width, float height)
  59. {
  60. MockLayoutPosition.Size = new Size(width, height);
  61. return this;
  62. }
  63. }
  64. internal static class MockFluent
  65. {
  66. public const string DefaultMockId = "$mock";
  67. public static MockDescriptor Mock(this IContainer element, string id = DefaultMockId)
  68. {
  69. var mock = new ElementMock
  70. {
  71. MockId = id
  72. };
  73. element.Element(mock);
  74. return new MockDescriptor(mock);
  75. }
  76. }
  77. internal class MockDescriptor
  78. {
  79. private ElementMock Mock { get; }
  80. public MockDescriptor(ElementMock mock)
  81. {
  82. Mock = mock;
  83. }
  84. public MockDescriptor Size(float width, float height)
  85. {
  86. Mock.TotalWidth = width;
  87. Mock.TotalHeight = height;
  88. return this;
  89. }
  90. }
  91. internal static class WrapFluent
  92. {
  93. public static void Wrap(this IContainer element)
  94. {
  95. element.Element(new WrapChild());
  96. }
  97. }