tcdbmustache.pas 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. {
  2. This file is part of the Free Pascal Run time library.
  3. Copyright (c) 2021 by Michael Van Canneyt ([email protected])
  4. Test cases for DB Context for Mustache
  5. See the File COPYING.FPC, included in this distribution,
  6. for details about the copyright.
  7. This program is distributed in the hope that it will be useful,
  8. but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  10. **********************************************************************}
  11. unit tcdbmustache;
  12. {$mode ObjFPC}{$H+}
  13. interface
  14. uses
  15. Classes, SysUtils, fpcunit, testregistry, fpmustache, db, bufdataset, fpdbmustache;
  16. Type
  17. { TTestMustacheDBContext }
  18. TTestMustacheDBContext = Class(TTestCase)
  19. private
  20. FContext: TMustacheDBContext;
  21. FDataset1: TBufDataset;
  22. FDataset2: TBufDataset;
  23. FMustache: TMustache;
  24. Public
  25. Procedure Setup; override;
  26. Procedure TearDown; override;
  27. Procedure CreateDataset1;
  28. Procedure CreateDataset2;
  29. Property Dataset1 : TBufDataset Read FDataset1;
  30. Property Dataset2 : TBufDataset Read FDataset2;
  31. Property Context : TMustacheDBContext Read FContext;
  32. Property Mustache : TMustache Read FMustache;
  33. Published
  34. Procedure TestEmpty;
  35. Procedure TestSingleSection;
  36. Procedure TestTwoSections;
  37. end;
  38. implementation
  39. Const
  40. Template1 = '{{title}}! {{#Parents}}{{name}} {{age}} - {{/Parents}}';
  41. Template2 = '{{title}}! {{#Parents}}{{name}}({{age}}) : {{#Children}}{{name}} {{age}},{{/Children}} - {{/Parents}}';
  42. { TTestMustacheDBContext }
  43. procedure TTestMustacheDBContext.Setup;
  44. begin
  45. Inherited;
  46. FDataset1:=TBufDataset.Create(Nil);
  47. FDataset1.Name:='Parents';
  48. FDataset2:=TBufDataset.Create(Nil);
  49. FDataset2.Name:='Children';
  50. FContext:=TMustacheDBContext.Create(Nil);
  51. FContext.StaticValues.Values['title']:='Family';
  52. FMustache:=TMustache.Create(Nil);
  53. end;
  54. procedure TTestMustacheDBContext.TearDown;
  55. begin
  56. FreeAndNil(FDataset1);
  57. FreeAndNil(FDataset2);
  58. FreeAndNil(FContext);
  59. FreeAndNil(FMustache);
  60. end;
  61. procedure TTestMustacheDBContext.CreateDataset1;
  62. begin
  63. FDataset1.FieldDefs.Add('name',ftString,20);
  64. FDataset1.FieldDefs.Add('age',ftInteger);
  65. FDataset1.CreateDataset;
  66. FDataset1.Append;
  67. FDataset1.FieldByName('name').AsString:='Father';
  68. FDataset1.FieldByName('age').AsInteger:=40;
  69. FDataset1.Post;
  70. FDataset1.Append;
  71. FDataset1.FieldByName('name').AsString:='Mother';
  72. FDataset1.FieldByName('age').AsInteger:=39;
  73. FDataset1.Post;
  74. FDataset1.First;
  75. end;
  76. procedure TTestMustacheDBContext.CreateDataset2;
  77. begin
  78. FDataset2.FieldDefs.Add('name',ftString,20);
  79. FDataset2.FieldDefs.Add('age',ftInteger);
  80. FDataset2.CreateDataset;
  81. FDataset2.Append;
  82. FDataset2.FieldByName('name').AsString:='Child1';
  83. FDataset2.FieldByName('age').AsInteger:=4;
  84. FDataset2.Post;
  85. FDataset2.Append;
  86. FDataset2.FieldByName('name').AsString:='Child2';
  87. FDataset2.FieldByName('age').AsInteger:=2;
  88. FDataset2.Post;
  89. FDataset2.First;
  90. end;
  91. procedure TTestMustacheDBContext.TestEmpty;
  92. begin
  93. AssertNotNull('Mustache',Mustache);
  94. AssertNotNull('Dataset1',Dataset1);
  95. AssertNotNull('Dataset2',Dataset2);
  96. AssertNotNull('Context',Context);
  97. AssertEquals('Context static','Family',Context.StaticValues.Values['title']);
  98. end;
  99. procedure TTestMustacheDBContext.TestSingleSection;
  100. Var
  101. S : String;
  102. begin
  103. Mustache.Template:=Template1;
  104. CreateDataset1;
  105. Context.AddDataset(FDataset1);
  106. S:=Mustache.Render(Context);
  107. AssertEquals('Correct result','Family! Father 40 - Mother 39 - ',S);
  108. end;
  109. procedure TTestMustacheDBContext.TestTwoSections;
  110. Var
  111. S : String;
  112. begin
  113. Mustache.Template:=Template2;
  114. CreateDataset1;
  115. CreateDataset2;
  116. Context.AddDataset(FDataset1);
  117. Context.AddDataset(FDataset2);
  118. S:=Mustache.Render(Context);
  119. AssertEquals('Correct result','Family! Father(40) : Child1 4,Child2 2, - Mother(39) : - ',S);
  120. end;
  121. initialization
  122. RegisterTest(TTestMustacheDBContext);
  123. end.