Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

231 lignes
8.7 KiB

  1. unit uShaderFileTestCase;
  2. {$mode objfpc}{$H+}
  3. interface
  4. uses
  5. Classes, SysUtils, fpcunit, testregistry,
  6. uengShaderFile, uengShaderGenerator, uengShaderFileTypes;
  7. type
  8. TShaderFileTestCase = class(TTestCase)
  9. protected
  10. procedure DoTest(const aCode, aClass, aResult: String; const aArgs: array of const);
  11. procedure DoTest(const aCode, aClass, aResult: String);
  12. procedure DoTest(const aCode, aResult: String; const aArgs: array of const);
  13. procedure DoTest(const aCode, aResult: String);
  14. end;
  15. TTestCase_IfElifElseEnd = class(TShaderFileTestCase)
  16. published
  17. procedure Simple_0;
  18. procedure Simple_1;
  19. procedure Simple_2;
  20. procedure Inline_0;
  21. procedure Inline_1;
  22. end;
  23. TTestCase_FuncProcMain = class(TShaderFileTestCase)
  24. published
  25. procedure Main_Simple;
  26. procedure Func_Simple_0;
  27. procedure Func_Simple_1;
  28. procedure Proc_Inline;
  29. procedure Func_InlineSingleReturn;
  30. procedure Func_InlineMultiReturn;
  31. end;
  32. TTestCase_Include = class(TShaderFileTestCase)
  33. published
  34. procedure Include_Simple;
  35. end;
  36. TTestCase_Class = class(TShaderFileTestCase)
  37. published
  38. procedure Simple;
  39. procedure InheritedFunc;
  40. procedure InheritedMain;
  41. end;
  42. TTestCase_General = class(TShaderFileTestCase)
  43. published
  44. procedure OrderOfMainProcClassContent;
  45. end;
  46. implementation
  47. uses
  48. Forms, variants;
  49. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  50. //TShaderFileTestCase///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  51. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  52. procedure TShaderFileTestCase.DoTest(const aCode, aClass, aResult: String; const aArgs: array of const);
  53. var
  54. shdr: TengShaderFile;
  55. gen: TengShaderGenerator;
  56. code: TengShaderCode;
  57. sl: TStringList;
  58. i: Integer;
  59. s: String;
  60. begin
  61. shdr := TengShaderFile.Create;
  62. code := TengShaderCode.Create;
  63. sl := TStringList.Create;
  64. try
  65. shdr.LoadFromFile(ExpandFileName('testfiles\' + aCode));
  66. gen := shdr.Generator[aClass];
  67. for i := 0 to High(aArgs) do begin
  68. case aArgs[i].VType of
  69. vtAnsiString: s := AnsiString(aArgs[i].VAnsiString);
  70. vtString: s := String(aArgs[i].VString);
  71. vtWideString: s := string(WideString(aArgs[i].VWideString));
  72. vtUnicodeString: s := string(UnicodeString(aArgs[i].VUnicodeString));
  73. vtInteger: gen.PropertyByName[s] := aArgs[i].VInteger;
  74. vtBoolean: gen.PropertyByName[s] := aArgs[i].VBoolean;
  75. vtExtended: gen.PropertyByName[s] := aArgs[i].VExtended^;
  76. vtCurrency: gen.PropertyByName[s] := aArgs[i].VCurrency^;
  77. vtVariant: gen.PropertyByName[s] := aArgs[i].VVariant^;
  78. vtInt64: gen.PropertyByName[s] := aArgs[i].VInt64^;
  79. vtQWord: gen.PropertyByName[s] := aArgs[i].VQWord^;
  80. else
  81. raise Exception.Create('invalid variadic type');
  82. end;
  83. end;
  84. gen.GenerateCode(code);
  85. sl.LoadFromFile(ExpandFileName('testfiles\' + aResult));
  86. AssertEquals(sl.Text, code.Text);
  87. finally
  88. FreeAndNil(sl);
  89. FreeAndNil(code);
  90. FreeAndNil(shdr);
  91. end;
  92. end;
  93. procedure TShaderFileTestCase.DoTest(const aCode, aClass, aResult: String);
  94. begin
  95. DoTest(aCode, aClass, aResult, []);
  96. end;
  97. procedure TShaderFileTestCase.DoTest(const aCode, aResult: String; const aArgs: array of const);
  98. begin
  99. DoTest(aCode, '', aResult, aArgs);
  100. end;
  101. procedure TShaderFileTestCase.DoTest(const aCode, aResult: String);
  102. begin
  103. DoTest(aCode, '', aResult, []);
  104. end;
  105. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  106. //TTestCase_IfElifElseEnd///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  107. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  108. procedure TTestCase_IfElifElseEnd.Simple_0;
  109. begin
  110. DoTest('code_IfElifElseEnd_Simple.shdr', 'result_IfElifElseEnd_Simple_0.shdr', ['TestProp', 0]);
  111. end;
  112. procedure TTestCase_IfElifElseEnd.Simple_1;
  113. begin
  114. DoTest('code_IfElifElseEnd_Simple.shdr', 'result_IfElifElseEnd_Simple_1.shdr', ['TestProp', 1]);
  115. end;
  116. procedure TTestCase_IfElifElseEnd.Simple_2;
  117. begin
  118. DoTest('code_IfElifElseEnd_Simple.shdr', 'result_IfElifElseEnd_Simple_2.shdr', ['TestProp', 2]);
  119. end;
  120. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  121. procedure TTestCase_IfElifElseEnd.Inline_0;
  122. begin
  123. DoTest('code_IfElifElseEnd_Inline.shdr', 'result_IfElifElseEnd_Inline_0.shdr', ['TestProp', 0]);
  124. end;
  125. procedure TTestCase_IfElifElseEnd.Inline_1;
  126. begin
  127. DoTest('code_IfElifElseEnd_Inline.shdr', 'result_IfElifElseEnd_Inline_1.shdr', ['TestProp', 1]);
  128. end;
  129. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  130. //TTestCase_MainSimple//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  131. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  132. procedure TTestCase_FuncProcMain.Main_Simple;
  133. begin
  134. DoTest('code_Main_Simple.shdr', 'result_Main_Simple.shdr');
  135. end;
  136. procedure TTestCase_FuncProcMain.Func_Simple_0;
  137. begin
  138. DoTest('code_Func_Simple.shdr', 'result_Func_Simple_0.shdr', ['TestProperty', 0]);
  139. end;
  140. procedure TTestCase_FuncProcMain.Func_Simple_1;
  141. begin
  142. DoTest('code_Func_Simple.shdr', 'result_Func_Simple_1.shdr', ['TestProperty', 1]);
  143. end;
  144. procedure TTestCase_FuncProcMain.Proc_Inline;
  145. begin
  146. DoTest('code_Proc_Inline.shdr', 'result_Proc_Inline.shdr');
  147. end;
  148. procedure TTestCase_FuncProcMain.Func_InlineSingleReturn;
  149. begin
  150. DoTest('code_Func_InlineSingleReturn.shdr', 'result_Func_InlineSingleReturn.shdr');
  151. end;
  152. procedure TTestCase_FuncProcMain.Func_InlineMultiReturn;
  153. begin
  154. DoTest('code_Func_InlineMultiReturn.shdr', 'result_Func_InlineMultiReturn.shdr');
  155. end;
  156. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  157. //TTestCase_Include/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  158. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  159. procedure TTestCase_Include.Include_Simple;
  160. begin
  161. DoTest('code_Include_Simple.shdr', 'result_Include_Simple.shdr');
  162. end;
  163. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  164. //TTestCase_Class///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  165. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  166. procedure TTestCase_Class.Simple;
  167. begin
  168. DoTest('code_Class_Simple.shdr', 'SimpleClass', 'result_Class_Simple.shdr');
  169. end;
  170. procedure TTestCase_Class.InheritedFunc;
  171. begin
  172. DoTest('code_Class_InheritedFunc.shdr', 'SimpleClass', 'result_Class_InheritedFunc.shdr');
  173. end;
  174. procedure TTestCase_Class.InheritedMain;
  175. begin
  176. DoTest('code_Class_InheritedMain.shdr', 'SimpleClass', 'result_Class_InheritedMain.shdr');
  177. end;
  178. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  179. //TTestCase_General/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  180. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  181. procedure TTestCase_General.OrderOfMainProcClassContent;
  182. begin
  183. DoTest('code_General_OrderOfMainProcClassContent.shdr', 'TestClass', 'result_General_OrderOfMainProcClassContent.shdr');
  184. end;
  185. initialization
  186. RegisterTest(TTestCase_IfElifElseEnd);
  187. RegisterTest(TTestCase_FuncProcMain);
  188. RegisterTest(TTestCase_Include);
  189. RegisterTest(TTestCase_Class);
  190. RegisterTest(TTestCase_General);
  191. end.