2
0

tstypes.pp 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431
  1. {
  2. This file is part of the Free Pascal test suite.
  3. Copyright (c) 2007 by the Free Pascal development team.
  4. This unit contains the different possible outcome
  5. of a single test.
  6. See the file COPYING.FPC, included in this distribution,
  7. for details about the copyright.
  8. This program is distributed in the hope that it will be useful,
  9. but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  11. **********************************************************************}
  12. {$mode objfpc}
  13. {$modeswitch advancedrecords}
  14. {$h+}
  15. unit tstypes;
  16. interface
  17. uses
  18. tsstring;
  19. Type
  20. TTestStatus = (
  21. stInvalid,
  22. stFailedToCompile,
  23. stSuccessCompilationFailed,
  24. stFailedCompilationsuccessful,
  25. stSuccessfullyCompiled,
  26. stFailedToRun,
  27. stKnownRunProblem,
  28. stSuccessFullyRun,
  29. stSkippingGraphTest,
  30. stSkippingInteractiveTest,
  31. stSkippingKnownBug,
  32. stSkippingCompilerVersionTooLow,
  33. stSkippingCompilerVersionTooHigh,
  34. stSkippingOtherCpu,
  35. stSkippingOtherTarget,
  36. stskippingRunUnit,
  37. stskippingRunTest
  38. );
  39. Const
  40. FirstStatus = stFailedToCompile;
  41. LastStatus = stskippingRunTest;
  42. TestOK : Array[TTestStatus] of Boolean = (
  43. False, // stInvalid
  44. False, // stFailedToCompile,
  45. True, // stSuccessCompilationFailed,
  46. False, // stFailedCompilationsuccessful,
  47. True, // stSuccessfullyCompiled,
  48. False, // stFailedToRun,
  49. True, // stKnownRunProblem,
  50. True, // stSuccessFullyRun,
  51. False, // stSkippingGraphTest,
  52. False, // stSkippingInteractiveTest,
  53. False, // stSkippingKnownBug,
  54. False, // stSkippingCompilerVersionTooLow,
  55. False, // stSkippingCompilerVersionTooHigh,
  56. False, // stSkippingOtherCpu,
  57. False, // stSkippingOtherTarget,
  58. False, // stskippingRunUnit,
  59. False // stskippingRunTest
  60. );
  61. TestFailed : Array[TTestStatus] of Boolean = (
  62. False, // stInvalid
  63. True, // stFailedToCompile,
  64. False, // stSuccessCompilationFailed,
  65. True, // stFailedCompilationsuccessful,
  66. False, // stSuccessfullyCompiled,
  67. True, // stFailedToRun,
  68. False, // stKnownRunProblem,
  69. False, // stSuccessFullyRun,
  70. False, // stSkippingGraphTest,
  71. False, // stSkippingInteractiveTest,
  72. False, // stSkippingKnownBug,
  73. False, // stSkippingCompilerVersionTooLow,
  74. False, // stSkippingCompilerVersionTooHigh,
  75. False, // stSkippingOtherCpu,
  76. False, // stSkippingOtherTarget,
  77. False, // stSkippingRunUnit,
  78. False // stskippingRunTest
  79. );
  80. TestSkipped : Array[TTestStatus] of Boolean = (
  81. False, // stInvalid
  82. False, // stFailedToCompile,
  83. False, // stSuccessCompilationFailed,
  84. False, // stFailedCompilationsuccessful,
  85. False, // stSuccessfullyCompiled,
  86. False, // stFailedToRun,
  87. False, // stKnownRunProblem,
  88. False, // stSuccessFullyRun,
  89. True, // stSkippingGraphTest,
  90. True, // stSkippingInteractiveTest,
  91. True, // stSkippingKnownBug,
  92. True, // stSkippingCompilerVersionTooLow,
  93. True, // stSkippingCompilerVersionTooHigh,
  94. True, // stSkippingOtherCpu,
  95. True, // stSkippingOtherTarget,
  96. True, // stskippingRunUnit,
  97. True // stskippingRunTest
  98. );
  99. ExpectRun : Array[TTestStatus] of Boolean = (
  100. False, // stInvalid
  101. False, // stFailedToCompile,
  102. False, // stSuccessCompilationFailed,
  103. False, // stFailedCompilationsuccessful,
  104. True , // stSuccessfullyCompiled,
  105. False, // stFailedToRun,
  106. False, // stKnownRunProblem,
  107. False, // stSuccessFullyRun,
  108. False, // stSkippingGraphTest,
  109. False, // stSkippingInteractiveTest,
  110. False, // stSkippingKnownBug,
  111. False, // stSkippingCompilerVersionTooLow,
  112. False, // stSkippingCompilerVersionTooHigh,
  113. False, // stSkippingOtherCpu,
  114. False, // stSkippingOtherTarget,
  115. False, // stskippingRunUnit,
  116. False // stskippingRunTest
  117. );
  118. StatusText : Array[TTestStatus] of String = (
  119. invalid_status,
  120. failed_to_compile,
  121. success_compilation_failed,
  122. failed_compilation_successful ,
  123. successfully_compiled ,
  124. failed_to_run ,
  125. known_problem ,
  126. successfully_run ,
  127. skipping_graph_test ,
  128. skipping_interactive_test ,
  129. skipping_known_bug ,
  130. skipping_compiler_version_too_low,
  131. skipping_compiler_version_too_high,
  132. skipping_other_cpu ,
  133. skipping_other_target ,
  134. skipping_run_unit ,
  135. skipping_run_test
  136. );
  137. SQLField : Array[TTestStatus] of String = (
  138. '',
  139. 'TU_FAILEDTOCOMPILE',
  140. 'TU_SUCCESSFULLYFAILED',
  141. 'TU_FAILEDTOFAIL',
  142. 'TU_SUCCESFULLYCOMPILED',
  143. 'TU_FAILEDTORUN',
  144. 'TU_KNOWNPROBLEM',
  145. 'TU_SUCCESSFULLYRUN',
  146. 'TU_SKIPPEDGRAPHTEST',
  147. 'TU_SKIPPEDINTERACTIVETEST',
  148. 'TU_KNOWNBUG',
  149. 'TU_COMPILERVERIONTOOLOW',
  150. 'TU_COMPILERVERIONTOOHIGH',
  151. 'TU_OTHERCPU',
  152. 'TU_OTHERTARGET',
  153. 'TU_UNIT',
  154. 'TU_SKIPPINGRUNTEST'
  155. );
  156. UseGit = True;
  157. faction_show_overview = 0;
  158. faction_show_run_results = 1;
  159. faction_show_run_pie = 2;
  160. faction_show_one_test = 3;
  161. faction_show_history = 4;
  162. faction_compare_with_previous = 5;
  163. faction_compare_with_next = 6;
  164. faction_compare2_with_previous = 7;
  165. faction_compare2_with_next = 8;
  166. faction_compare_both_with_previous = 9;
  167. faction_compare_both_with_next = 10;
  168. Type
  169. TValidTestStatus = FirstStatus .. LastStatus;
  170. TCharSet = set of char;
  171. TVerboseLevel=(V_Abort,V_Error,V_Warning,V_Normal,V_Debug,V_SQL);
  172. // This record contains exactly the fields of the database.
  173. TTestInfo = record
  174. Name : String;
  175. CPU : String;
  176. OS : string;
  177. Version : string;
  178. AddDate : TDateTime;
  179. Graph : boolean;
  180. Interactive : boolean;
  181. Result : integer;
  182. Fail : boolean;
  183. ReCompile : boolean;
  184. NoRun : boolean;
  185. NeedLibrary : boolean;
  186. KnownRunError : Integer;
  187. Known : boolean;
  188. Note : String;
  189. Description : String;
  190. Source : String;
  191. Opts : String;
  192. DelOptions,
  193. SkipCPU,
  194. SkipEmu,
  195. NeedTarget,
  196. SkipTarget,
  197. MaxVersion,
  198. KnownRunNote,
  199. KnownCompileNote,
  200. RecompileOpt: string;
  201. KnownCompileError : longint;
  202. NeededAfter : boolean;
  203. IsKnownRunError : Boolean;
  204. Timeout : longint;
  205. Category : string;
  206. Files : string;
  207. ConfigFileSrc : string;
  208. ConfigFileDst : string;
  209. WpoParas : string;
  210. WpoPasses : longint;
  211. DelFiles : string;
  212. ExpectMsgs : array of longint;
  213. Property NeedCPU : String Read CPU Write CPU;
  214. Property MinVersion : String Read Version Write Version;
  215. Property UsesGraph : boolean read Graph Write Graph;
  216. Property IsInteractive : boolean Read Interactive write INTERACTIVE;
  217. Property ResultCode : Integer Read RESULT Write RESULT;
  218. Property ShouldFail : Boolean Read FAIL Write Fail;
  219. Property NeedRecompile : Boolean Read Recompile Write Recompile;
  220. Property IsKnownCompileError : Boolean read KNOWN Write KNown;
  221. Property NeedOptions : String Read OPTS Write OPTS;
  222. end;
  223. TConfig = TTestInfo;
  224. TRunStats = Record
  225. OKCount,
  226. FailedCount,
  227. SkipCount : Integer;
  228. end;
  229. // Test run data
  230. { TTestRunData }
  231. TTestRunData = Record
  232. logfile: string;
  233. longlogfile : string;
  234. os: string;
  235. cpu: string;
  236. category: string;
  237. version: string;
  238. submitter: string;
  239. machine: string;
  240. config : string;
  241. description : string;
  242. Date : TDateTime;
  243. CompilerDate,
  244. CompilerFullVersion,
  245. CompilerRevision,
  246. TestsRevision,
  247. RTLRevision,
  248. PackagesRevision : String;
  249. CPUID : Integer;
  250. OSID : Integer;
  251. VersionID : Integer;
  252. CategoryID : Integer;
  253. RunID : Int64;
  254. //ConfigID : Integer;
  255. PlatformID : Integer;
  256. StatusCount : Array[TTestStatus] of Integer;
  257. Function GetField(const aField : String) : String;
  258. function FailedCount: Integer;
  259. function SkippedCount : Integer;
  260. function OKCount: Integer;
  261. function TotalCount: Integer;
  262. end;
  263. { TTestResultData }
  264. TTestResultData = record
  265. PlatformID : Integer;
  266. TestID : Integer;
  267. ID : Int64;
  268. RunID : Int64;
  269. TestResult : TTestStatus;
  270. Log : String;
  271. Date : TDateTime;
  272. function ResultDiffers(aResult : TTestResultData; CompareLog : Boolean = False) : Boolean;
  273. end;
  274. TCheckStage = 1..6;
  275. TStageResults = Array[TCheckStage] of Boolean;
  276. TFailLogs = Array[TCheckStage] of String;
  277. TCheckAllRTL = record
  278. ID : Int64;
  279. Platform : Integer;
  280. Date : TDateTime;
  281. Steps : TStageResults;
  282. Logs : TFailLogs;
  283. end;
  284. implementation
  285. uses sysutils;
  286. { TTestRunData }
  287. function TTestRunData.OKCount : Integer;
  288. var
  289. TS : TTestStatus;
  290. begin
  291. Result:=0;
  292. for TS:=FirstStatus to LastStatus do
  293. if TestOK[TS] then
  294. Inc(Result,StatusCount[TS]);
  295. end;
  296. function TTestRunData.FailedCount : Integer;
  297. var
  298. TS : TTestStatus;
  299. begin
  300. Result:=0;
  301. for TS:=FirstStatus to LastStatus do
  302. if TestFailed[TS] then
  303. Inc(Result,StatusCount[TS]);
  304. end;
  305. function TTestRunData.SkippedCount: Integer;
  306. var
  307. TS : TTestStatus;
  308. begin
  309. Result:=0;
  310. for TS:=FirstStatus to LastStatus do
  311. if TestSkipped[TS] then
  312. Inc(Result,StatusCount[TS]);
  313. end;
  314. function TTestRunData.TotalCount: Integer;
  315. var
  316. TS : TTestStatus;
  317. begin
  318. Result:=0;
  319. for TS:=FirstStatus to LastStatus do
  320. Result:=Result+StatusCount[TS];
  321. end;
  322. function TTestRunData.GetField(const aField: String): String;
  323. begin
  324. case lowercase(aField) of
  325. 'logfile' : Result:=logfile;
  326. 'longlogfile ' : Result:=longlogfile ;
  327. 'os' : Result:=os;
  328. 'cpu' : Result:=cpu;
  329. 'category' : Result:=category;
  330. 'version' : Result:=version;
  331. 'submitter' : Result:=submitter;
  332. 'machine' : Result:=machine;
  333. 'comment',
  334. 'config' : Result:=config ;
  335. 'description' : Result:=description ;
  336. 'date' : Result:=DateToStr(Date);
  337. 'compilerdate': Result:=CompilerDate;
  338. 'compilerfullversion': Result:=CompilerFullVersion;
  339. 'compilerrevision': Result:=CompilerRevision;
  340. 'restsrevision': Result:=TestsRevision;
  341. 'rtlrevision': Result:=RTLRevision;
  342. 'packagesrevision' : Result:=PackagesRevision ;
  343. 'cpuid' : Result:=IntToStr(CPUID);
  344. 'osid' : Result:=IntToStr(OSID);
  345. 'versionid' : Result:=IntToStr(VersionID);
  346. 'categoryid' : Result:=IntToStr(CategoryID);
  347. 'runid' : Result:=IntToStr(RunID);
  348. 'platformid': Result:=IntToStr(PlatformID);
  349. 'stfailedtocompile' : Result:=IntToStr(StatusCount[stfailedtocompile]);
  350. 'stsuccesscompilationfailed' : Result:=IntToStr(StatusCount[stsuccesscompilationfailed]);
  351. 'stfailedcompilationsuccessful' : Result:=IntToStr(StatusCount[stfailedcompilationsuccessful]);
  352. 'stsuccessfullycompiled' : Result:=IntToStr(StatusCount[stsuccessfullycompiled]);
  353. 'stfailedtorun' : Result:=IntToStr(StatusCount[stfailedtorun]);
  354. 'stknownrunproblem' : Result:=IntToStr(StatusCount[stknownrunproblem]);
  355. 'stsuccessfullyrun' : Result:=IntToStr(StatusCount[stsuccessfullyrun]);
  356. 'stskippinggraphtest' : Result:=IntToStr(StatusCount[stskippinggraphtest]);
  357. 'stskippinginteractivetest' : Result:=IntToStr(StatusCount[stskippinginteractivetest]);
  358. 'stskippingknownbug' : Result:=IntToStr(StatusCount[stskippingknownbug]);
  359. 'stskippingcompilerversiontoolow' : Result:=IntToStr(StatusCount[stskippingcompilerversiontoolow]);
  360. 'stskippingcompilerversiontoohigh' : Result:=IntToStr(StatusCount[stskippingcompilerversiontoohigh]);
  361. 'stskippingothercpu' : Result:=IntToStr(StatusCount[stskippingothercpu]);
  362. 'stskippingothertarget' : Result:=IntToStr(StatusCount[stskippingothertarget]);
  363. 'stskippingrununit' : Result:=IntToStr(StatusCount[stskippingrununit]);
  364. 'stskippingruntest' : Result:=IntToStr(StatusCount[stskippingruntest]);
  365. 'failed' : Result:=IntToStr(FailedCount);
  366. 'ok' : Result:=IntToStr(OKCount);
  367. 'total' : Result:=IntToStr(TotalCount);
  368. 'rev' : Result:=CompilerRevision+'/'+RTLRevision+'/'+PackagesRevision+'/'+TestsRevision;
  369. end;
  370. end;
  371. { TTestResultData }
  372. function TTestResultData.ResultDiffers(aResult: TTestResultData; CompareLog: Boolean): Boolean;
  373. begin
  374. Result:=(PlatformID<>aResult.PlatFormID);
  375. Result:=Result or (TestID<>aResult.TestID);
  376. Result:=Result or (TestResult<>aResult.TestResult);
  377. if CompareLog and Not Result then
  378. Result:=Log<>aResult.Log;
  379. end;
  380. end.