FluentExtensions.cs 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. namespace QuestPDF.LayoutTests.TestEngine;
  2. internal class ExpectedDocumentLayoutDescriptor(DrawingRecorder DrawingRecorder)
  3. {
  4. private int CurrentPage { get; set; } = 1;
  5. public ExpectedPageLayoutDescriptor Page()
  6. {
  7. return new ExpectedPageLayoutDescriptor(DrawingRecorder, CurrentPage++);
  8. }
  9. }
  10. internal class ExpectedPageLayoutDescriptor(DrawingRecorder DrawingRecorder, int CurrentPageNumber)
  11. {
  12. public ExpectedPageLayoutDescriptor RequiredAreaSize(float width, float height)
  13. {
  14. DrawingRecorder.Record(new ElementDrawingEvent
  15. {
  16. ObserverId = "$document",
  17. PageNumber = CurrentPageNumber,
  18. Size = new Size(width, height)
  19. });
  20. return this;
  21. }
  22. public void Content(Action<ExpectedPageContentDescriptor> content)
  23. {
  24. var pageContent = new ExpectedPageContentDescriptor(DrawingRecorder, CurrentPageNumber);
  25. content(pageContent);
  26. }
  27. }
  28. internal class ExpectedPageContentDescriptor(DrawingRecorder drawingRecorder, int CurrentPageNumber)
  29. {
  30. public ExpectedMockPositionDescriptor Mock(string mockId = FluentExtensions.DefaultMockId)
  31. {
  32. var elementDrawingEvent = new ElementDrawingEvent
  33. {
  34. ObserverId = mockId,
  35. PageNumber = CurrentPageNumber,
  36. };
  37. drawingRecorder.Record(elementDrawingEvent);
  38. return new ExpectedMockPositionDescriptor(elementDrawingEvent);
  39. }
  40. }
  41. internal class ExpectedMockPositionDescriptor(ElementDrawingEvent drawingEvent)
  42. {
  43. public ExpectedMockPositionDescriptor Position(float x, float y)
  44. {
  45. drawingEvent.Position = new Position(x, y);
  46. return this;
  47. }
  48. public ExpectedMockPositionDescriptor Size(float width, float height)
  49. {
  50. drawingEvent.Size = new Size(width, height);
  51. return this;
  52. }
  53. }
  54. internal static class FluentExtensions
  55. {
  56. public const string DefaultMockId = "$mock";
  57. public static IContainer Mock(this IContainer element, string id = DefaultMockId)
  58. {
  59. return element.Element(new ElementObserver
  60. {
  61. ObserverId = id
  62. });
  63. }
  64. public static IContainer ElementObserverSetter(this IContainer element, DrawingRecorder recorder)
  65. {
  66. return element.Element(new ElementObserverSetter
  67. {
  68. Recorder = recorder
  69. });
  70. }
  71. public static IContainer Size(this IContainer element, float width, float height)
  72. {
  73. return element.Width(width).Height(height);
  74. }
  75. public static void ContinuousBlock(this IContainer element, float width, float height)
  76. {
  77. element.Element(new ContinuousBlock
  78. {
  79. TotalWidth = width,
  80. TotalHeight = height
  81. });
  82. }
  83. }