Não pode escolher mais do que 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

217 linhas
7.9 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. implementation
  43. uses
  44. Forms, variants;
  45. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  46. //TShaderFileTestCase///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  47. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  48. procedure TShaderFileTestCase.DoTest(const aCode, aClass, aResult: String; const aArgs: array of const);
  49. var
  50. shdr: TengShaderFile;
  51. gen: TengShaderGenerator;
  52. code: TengShaderCode;
  53. sl: TStringList;
  54. i: Integer;
  55. s: String;
  56. begin
  57. shdr := TengShaderFile.Create;
  58. code := TengShaderCode.Create;
  59. sl := TStringList.Create;
  60. try
  61. shdr.LoadFromFile(ExpandFileName('testfiles\' + aCode));
  62. gen := shdr.Generator[aClass];
  63. for i := 0 to High(aArgs) do begin
  64. case aArgs[i].VType of
  65. vtAnsiString: s := AnsiString(aArgs[i].VAnsiString);
  66. vtString: s := String(aArgs[i].VString);
  67. vtWideString: s := string(WideString(aArgs[i].VWideString));
  68. vtUnicodeString: s := string(UnicodeString(aArgs[i].VUnicodeString));
  69. vtInteger: gen.PropertyByName[s] := aArgs[i].VInteger;
  70. vtBoolean: gen.PropertyByName[s] := aArgs[i].VBoolean;
  71. vtExtended: gen.PropertyByName[s] := aArgs[i].VExtended^;
  72. vtCurrency: gen.PropertyByName[s] := aArgs[i].VCurrency^;
  73. vtVariant: gen.PropertyByName[s] := aArgs[i].VVariant^;
  74. vtInt64: gen.PropertyByName[s] := aArgs[i].VInt64^;
  75. vtQWord: gen.PropertyByName[s] := aArgs[i].VQWord^;
  76. else
  77. raise Exception.Create('invalid variadic type');
  78. end;
  79. end;
  80. gen.GenerateCode(code);
  81. sl.LoadFromFile(ExpandFileName('testfiles\' + aResult));
  82. AssertEquals(sl.Text, code.Text);
  83. finally
  84. FreeAndNil(sl);
  85. FreeAndNil(code);
  86. FreeAndNil(shdr);
  87. end;
  88. end;
  89. procedure TShaderFileTestCase.DoTest(const aCode, aClass, aResult: String);
  90. begin
  91. DoTest(aCode, aClass, aResult, []);
  92. end;
  93. procedure TShaderFileTestCase.DoTest(const aCode, aResult: String; const aArgs: array of const);
  94. begin
  95. DoTest(aCode, '', aResult, aArgs);
  96. end;
  97. procedure TShaderFileTestCase.DoTest(const aCode, aResult: String);
  98. begin
  99. DoTest(aCode, '', aResult, []);
  100. end;
  101. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  102. //TTestCase_IfElifElseEnd///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  103. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  104. procedure TTestCase_IfElifElseEnd.Simple_0;
  105. begin
  106. DoTest('code_IfElifElseEnd_Simple.shdr', 'result_IfElifElseEnd_Simple_0.shdr', ['TestProp', 0]);
  107. end;
  108. procedure TTestCase_IfElifElseEnd.Simple_1;
  109. begin
  110. DoTest('code_IfElifElseEnd_Simple.shdr', 'result_IfElifElseEnd_Simple_1.shdr', ['TestProp', 1]);
  111. end;
  112. procedure TTestCase_IfElifElseEnd.Simple_2;
  113. begin
  114. DoTest('code_IfElifElseEnd_Simple.shdr', 'result_IfElifElseEnd_Simple_2.shdr', ['TestProp', 2]);
  115. end;
  116. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  117. procedure TTestCase_IfElifElseEnd.Inline_0;
  118. begin
  119. DoTest('code_IfElifElseEnd_Inline.shdr', 'result_IfElifElseEnd_Inline_0.shdr', ['TestProp', 0]);
  120. end;
  121. procedure TTestCase_IfElifElseEnd.Inline_1;
  122. begin
  123. DoTest('code_IfElifElseEnd_Inline.shdr', 'result_IfElifElseEnd_Inline_1.shdr', ['TestProp', 1]);
  124. end;
  125. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  126. //TTestCase_MainSimple//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  127. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  128. procedure TTestCase_FuncProcMain.Main_Simple;
  129. begin
  130. DoTest('code_Main_Simple.shdr', 'result_Main_Simple.shdr');
  131. end;
  132. procedure TTestCase_FuncProcMain.Func_Simple_0;
  133. begin
  134. DoTest('code_Func_Simple.shdr', 'result_Func_Simple_0.shdr', ['TestProperty', 0]);
  135. end;
  136. procedure TTestCase_FuncProcMain.Func_Simple_1;
  137. begin
  138. DoTest('code_Func_Simple.shdr', 'result_Func_Simple_1.shdr', ['TestProperty', 1]);
  139. end;
  140. procedure TTestCase_FuncProcMain.Proc_Inline;
  141. begin
  142. DoTest('code_Proc_Inline.shdr', 'result_Proc_Inline.shdr');
  143. end;
  144. procedure TTestCase_FuncProcMain.Func_InlineSingleReturn;
  145. begin
  146. DoTest('code_Func_InlineSingleReturn.shdr', 'result_Func_InlineSingleReturn.shdr');
  147. end;
  148. procedure TTestCase_FuncProcMain.Func_InlineMultiReturn;
  149. begin
  150. DoTest('code_Func_InlineMultiReturn.shdr', 'result_Func_InlineMultiReturn.shdr');
  151. end;
  152. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  153. //TTestCase_Include/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  154. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  155. procedure TTestCase_Include.Include_Simple;
  156. begin
  157. DoTest('code_Include_Simple.shdr', 'result_Include_Simple.shdr');
  158. end;
  159. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  160. //TTestCase_Class///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  161. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  162. procedure TTestCase_Class.Simple;
  163. begin
  164. DoTest('code_Class_Simple.shdr', 'SimpleClass', 'result_Class_Simple.shdr');
  165. end;
  166. procedure TTestCase_Class.InheritedFunc;
  167. begin
  168. DoTest('code_Class_InheritedFunc.shdr', 'SimpleClass', 'result_Class_InheritedFunc.shdr');
  169. end;
  170. procedure TTestCase_Class.InheritedMain;
  171. begin
  172. DoTest('code_Class_InheritedMain.shdr', 'SimpleClass', 'result_Class_InheritedMain.shdr');
  173. end;
  174. initialization
  175. RegisterTest(TTestCase_IfElifElseEnd);
  176. RegisterTest(TTestCase_FuncProcMain);
  177. RegisterTest(TTestCase_Include);
  178. RegisterTest(TTestCase_Class);
  179. end.