dotest.pp 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751
  1. {
  2. $Id$
  3. }
  4. program dotest;
  5. uses
  6. dos,
  7. redir;
  8. const
  9. {$ifdef UNIX}
  10. ExeExt='';
  11. {$else UNIX}
  12. ExeExt='exe';
  13. {$endif UNIX}
  14. type
  15. TVerboseLevel=(V_Abort,V_Error,V_Warning,V_Normal,V_Debug);
  16. TConfig = record
  17. NeedOptions,
  18. NeedCPU,
  19. NeedVersion : string;
  20. ResultCode : longint;
  21. NeedRecompile : boolean;
  22. IsInteractive : boolean;
  23. IsKnown : boolean;
  24. NoRun : boolean;
  25. UsesGraph : boolean;
  26. ShouldFail : boolean;
  27. Category : string;
  28. end;
  29. var
  30. Config : TConfig;
  31. CompilerBin : string;
  32. CompilerCPU : string;
  33. CompilerVersion : string;
  34. PPFile : string;
  35. PPFileInfo : string;
  36. TestName : string;
  37. Note : string;
  38. const
  39. ResLogfile : string[32] = 'log';
  40. LongLogfile : string[32] = 'longlog';
  41. FailLogfile : string[32] = 'faillist';
  42. DoVerbose : boolean = false;
  43. DoGraph : boolean = false;
  44. DoInteractive : boolean = false;
  45. DoExecute : boolean = false;
  46. DoKnown : boolean = false;
  47. procedure Verbose(lvl:TVerboseLevel;const s:string);
  48. begin
  49. case lvl of
  50. V_Normal :
  51. writeln(s);
  52. V_Debug :
  53. if DoVerbose then
  54. writeln('Debug: ',s);
  55. V_Warning :
  56. writeln('Warning: ',s);
  57. V_Error :
  58. begin
  59. writeln('Error: ',s);
  60. halt(1);
  61. end;
  62. V_Abort :
  63. begin
  64. writeln('Abort: ',s);
  65. halt(0);
  66. end;
  67. end;
  68. end;
  69. Function FileExists (Const F : String) : Boolean;
  70. {
  71. Returns True if the file exists, False if not.
  72. }
  73. Var
  74. info : searchrec;
  75. begin
  76. FindFirst (F,anyfile,Info);
  77. FileExists:=DosError=0;
  78. FindClose (Info);
  79. end;
  80. function ToStr(l:longint):string;
  81. var
  82. s : string;
  83. begin
  84. Str(l,s);
  85. ToStr:=s;
  86. end;
  87. function ToStrZero(l:longint;nbzero : byte):string;
  88. var
  89. s : string;
  90. begin
  91. Str(l,s);
  92. while length(s)<nbzero do
  93. s:='0'+s;
  94. ToStrZero:=s;
  95. end;
  96. procedure SetPPFileInfo;
  97. Var
  98. info : searchrec;
  99. dt : DateTime;
  100. begin
  101. FindFirst (PPFile,anyfile,Info);
  102. If DosError=0 then
  103. begin
  104. UnpackTime(info.time,dt);
  105. PPFileInfo:=PPFile+' '+ToStr(dt.year)+'/'+ToStrZero(dt.month,2)+'/'+
  106. ToStrZero(dt.day,2)+' '+ToStrZero(dt.Hour,2)+':'+ToStrZero(dt.min,2)+':'+ToStrZero(dt.sec,2);
  107. end
  108. else
  109. PPFileInfo:=PPfile;
  110. FindClose (Info);
  111. end;
  112. procedure TrimB(var s:string);
  113. begin
  114. while (s<>'') and (s[1] in [' ',#9]) do
  115. delete(s,1,1);
  116. end;
  117. procedure TrimE(var s:string);
  118. begin
  119. while (s<>'') and (s[length(s)] in [' ',#9]) do
  120. delete(s,length(s),1);
  121. end;
  122. function upper(const s : string) : string;
  123. var
  124. i : longint;
  125. begin
  126. for i:=1 to length(s) do
  127. if s[i] in ['a'..'z'] then
  128. upper[i]:=char(byte(s[i])-32)
  129. else
  130. upper[i]:=s[i];
  131. upper[0]:=s[0];
  132. end;
  133. function SplitPath(const s:string):string;
  134. var
  135. i : longint;
  136. begin
  137. i:=Length(s);
  138. while (i>0) and not(s[i] in ['/','\']) do
  139. dec(i);
  140. SplitPath:=Copy(s,1,i);
  141. end;
  142. function ForceExtension(Const HStr,ext:String):String;
  143. {
  144. Return a filename which certainly has the extension ext
  145. }
  146. var
  147. j : longint;
  148. begin
  149. j:=length(Hstr);
  150. while (j>0) and (Hstr[j]<>'.') do
  151. dec(j);
  152. if j=0 then
  153. j:=255;
  154. if Ext<>'' then
  155. ForceExtension:=Copy(Hstr,1,j-1)+'.'+Ext
  156. else
  157. ForceExtension:=Copy(Hstr,1,j-1);
  158. end;
  159. procedure Copyfile(const fn1,fn2:string;append:boolean);
  160. const
  161. bufsize = 16384;
  162. var
  163. f,g : file;
  164. i : longint;
  165. buf : pointer;
  166. begin
  167. if Append then
  168. Verbose(V_Debug,'Appending '+fn1+' to '+fn2)
  169. else
  170. Verbose(V_Debug,'Copying '+fn1+' to '+fn2);
  171. assign(f,fn1);
  172. assign(g,fn2);
  173. {$I-}
  174. reset(f,1);
  175. {$I+}
  176. if ioresult<>0 then
  177. Verbose(V_Error,'Can''t open '+fn1);
  178. if append then
  179. begin
  180. {$I-}
  181. reset(g,1);
  182. {$I+}
  183. if ioresult<>0 then
  184. append:=false
  185. else
  186. seek(g,filesize(g));
  187. end;
  188. if not append then
  189. begin
  190. {$I-}
  191. rewrite(g,1);
  192. {$I+}
  193. if ioresult<>0 then
  194. Verbose(V_Error,'Can''t open '+fn2+' for output');
  195. end;
  196. getmem(buf,bufsize);
  197. repeat
  198. blockread(f,buf^,bufsize,i);
  199. blockwrite(g,buf^,i);
  200. until i<bufsize;
  201. freemem(buf,bufsize);
  202. close(f);
  203. close(g);
  204. end;
  205. procedure AddLog(const logfile,s:string);
  206. var
  207. t : text;
  208. begin
  209. assign(t,logfile);
  210. {$I-}
  211. append(t);
  212. {$I+}
  213. if ioresult<>0 then
  214. begin
  215. {$I-}
  216. rewrite(t);
  217. {$I+}
  218. if ioresult<>0 then
  219. Verbose(V_Abort,'Can''t append to '+logfile);
  220. end;
  221. writeln(t,s);
  222. close(t);
  223. end;
  224. function GetConfig(const fn:string;var r:TConfig):boolean;
  225. var
  226. t : text;
  227. code : integer;
  228. s,res : string;
  229. function GetEntry(const entry:string):boolean;
  230. var
  231. i : longint;
  232. begin
  233. Getentry:=false;
  234. Res:='';
  235. if Upper(Copy(s,1,length(entry)))=Upper(entry) then
  236. begin
  237. Delete(s,1,length(entry));
  238. TrimB(s);
  239. if (s<>'') then
  240. begin
  241. if (s[1]='=') then
  242. begin
  243. delete(s,1,1);
  244. i:=pos('}',s);
  245. if i=0 then
  246. i:=255
  247. else
  248. dec(i);
  249. res:=Copy(s,1,i);
  250. TrimB(res);
  251. TrimE(res);
  252. end;
  253. Verbose(V_Debug,'Config: '+Entry+' = "'+Res+'"');
  254. GetEntry:=true;
  255. end;
  256. end;
  257. end;
  258. begin
  259. FillChar(r,sizeof(r),0);
  260. GetConfig:=false;
  261. Verbose(V_Debug,'Reading '+fn);
  262. assign(t,fn);
  263. {$I-}
  264. reset(t);
  265. {$I+}
  266. if ioresult<>0 then
  267. begin
  268. Verbose(V_Error,'Can''t open '+fn);
  269. exit;
  270. end;
  271. Note:='';
  272. while not eof(t) do
  273. begin
  274. readln(t,s);
  275. if s<>'' then
  276. begin
  277. if s[1]='{' then
  278. begin
  279. delete(s,1,1);
  280. TrimB(s);
  281. if (s<>'') and (s[1]='%') then
  282. begin
  283. delete(s,1,1);
  284. if GetEntry('OPT') then
  285. r.NeedOptions:=res
  286. else
  287. if GetEntry('CPU') then
  288. r.NeedCPU:=res
  289. else
  290. if GetEntry('VERSION') then
  291. r.NeedVersion:=res
  292. else
  293. if GetEntry('RESULT') then
  294. Val(res,r.ResultCode,code)
  295. else
  296. if GetEntry('GRAPH') then
  297. r.UsesGraph:=true
  298. else
  299. if GetEntry('FAIL') then
  300. r.ShouldFail:=true
  301. else
  302. if GetEntry('RECOMPILE') then
  303. r.NeedRecompile:=true
  304. else
  305. if GetEntry('NORUN') then
  306. r.NoRun:=true
  307. else
  308. if GetEntry('KNOWN') then
  309. r.IsKnown:=true
  310. else
  311. if GetEntry('INTERACTIVE') then
  312. r.IsInteractive:=true
  313. else
  314. if GetEntry('NOTE') then
  315. begin
  316. Note:='Note: '+res;
  317. Verbose(V_Normal,Note);
  318. end
  319. else
  320. Verbose(V_Error,'Unknown entry: '+s);
  321. end;
  322. end
  323. else
  324. break;
  325. end;
  326. end;
  327. close(t);
  328. GetConfig:=true;
  329. end;
  330. function GetCompilerVersion:boolean;
  331. var
  332. t : text;
  333. begin
  334. GetCompilerVersion:=false;
  335. ExecuteRedir(CompilerBin,'-iV','','out','');
  336. assign(t,'out');
  337. {$I-}
  338. reset(t);
  339. readln(t,CompilerVersion);
  340. close(t);
  341. erase(t);
  342. {$I+}
  343. if ioresult<>0 then
  344. Verbose(V_Error,'Can''t get Compiler Version')
  345. else
  346. begin
  347. Verbose(V_Debug,'Current Compiler Version: '+CompilerVersion);
  348. GetCompilerVersion:=true;
  349. end;
  350. end;
  351. function GetCompilerCPU:boolean;
  352. var
  353. t : text;
  354. begin
  355. GetCompilerCPU:=false;
  356. ExecuteRedir(CompilerBin,'-iTP','','out','');
  357. assign(t,'out');
  358. {$I-}
  359. reset(t);
  360. readln(t,CompilerCPU);
  361. close(t);
  362. erase(t);
  363. {$I+}
  364. if ioresult<>0 then
  365. Verbose(V_Error,'Can''t get Compiler CPU Target')
  366. else
  367. begin
  368. Verbose(V_Debug,'Current Compiler CPU Target: '+CompilerCPU);
  369. GetCompilerCPU:=true;
  370. end;
  371. end;
  372. function ExitWithInternalError(const OutName:string):boolean;
  373. var
  374. t : text;
  375. s : string;
  376. begin
  377. ExitWithInternalError:=false;
  378. { open logfile }
  379. assign(t,Outname);
  380. {$I-}
  381. reset(t);
  382. {$I+}
  383. if ioresult<>0 then
  384. exit;
  385. while not eof(t) do
  386. begin
  387. readln(t,s);
  388. if pos('Fatal: Internal error ',s)>0 then
  389. begin
  390. ExitWithInternalError:=true;
  391. break;
  392. end;
  393. end;
  394. close(t);
  395. end;
  396. function RunCompiler:boolean;
  397. var
  398. outname,
  399. args : string;
  400. begin
  401. RunCompiler:=false;
  402. OutName:=ForceExtension(PPFile,'log');
  403. args:='-Fuunits';
  404. if Config.NeedOptions<>'' then
  405. args:=args+' '+Config.NeedOptions;
  406. args:=args+' '+ppfile;
  407. Verbose(V_Debug,'Executing '+compilerbin+' '+args);
  408. { also get the output from as and ld that writes to stderr sometimes }
  409. ExecuteRedir(CompilerBin,args,'',OutName,OutName);
  410. Verbose(V_Debug,'Exitcode '+ToStr(ExecuteResult));
  411. { Check for internal error }
  412. if ExitWithInternalError(OutName) then
  413. begin
  414. AddLog(FailLogFile,TestName);
  415. if Note<>'' then
  416. AddLog(FailLogFile,Note);
  417. AddLog(ResLogFile,'Failed to compile '+PPFileInfo);
  418. AddLog(LongLogFile,'>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>');
  419. AddLog(LongLogFile,'Failed to compile '+PPFileInfo);
  420. if Note<>'' then
  421. AddLog(LongLogFile,Note);
  422. CopyFile(OutName,LongLogFile,true);
  423. { avoid to try again }
  424. AddLog(ForceExtension(PPFile,'elg'),'Failed to compile '++PPFileInfo);
  425. Verbose(V_Abort,'Internal error in compiler');
  426. exit;
  427. end;
  428. { Shoud the compile fail ? }
  429. if Config.ShouldFail then
  430. begin
  431. if ExecuteResult<>0 then
  432. begin
  433. AddLog(ResLogFile,'Success, compilation failed '+PPFileInfo);
  434. { avoid to try again }
  435. AddLog(ForceExtension(PPFile,'elg'),'Success, compilation failed '+PPFileInfo);
  436. RunCompiler:=true;
  437. end
  438. else
  439. begin
  440. AddLog(FailLogFile,TestName);
  441. if Note<>'' then
  442. AddLog(FailLogFile,Note);
  443. AddLog(ResLogFile,'Failed, compilation successful '+PPFileInfo);
  444. AddLog(LongLogFile,'>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>');
  445. AddLog(LongLogFile,'Failed, compilation successful '+PPFileInfo);
  446. { avoid to try again }
  447. AddLog(ForceExtension(PPFile,'elg'),'Failed, compilation successful '+PPFileInfo);
  448. if Note<>'' then
  449. AddLog(LongLogFile,Note);
  450. CopyFile(OutName,LongLogFile,true);
  451. end;
  452. end
  453. else
  454. begin
  455. if ExecuteResult<>0 then
  456. begin
  457. AddLog(FailLogFile,TestName);
  458. if Note<>'' then
  459. AddLog(FailLogFile,Note);
  460. AddLog(ResLogFile,'Failed to compile '+PPFileInfo);
  461. AddLog(LongLogFile,'>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>');
  462. AddLog(LongLogFile,'Failed to compile '+PPFileInfo);
  463. if Note<>'' then
  464. AddLog(LongLogFile,Note);
  465. CopyFile(OutName,LongLogFile,true);
  466. { avoid to try again }
  467. AddLog(ForceExtension(PPFile,'elg'),'Failed to compile '++PPFileInfo);
  468. Verbose(V_Abort,'Exitcode: '+ToStr(ExecuteResult)+' (expected 0)');
  469. end
  470. else
  471. begin
  472. AddLog(ResLogFile,'Successfully compiled '+PPFileInfo);
  473. RunCompiler:=true;
  474. end;
  475. end;
  476. end;
  477. function RunExecutable:boolean;
  478. var
  479. outname,
  480. TestExe : string;
  481. begin
  482. RunExecutable:=false;
  483. TestExe:=ForceExtension(PPFile,ExeExt);
  484. OutName:=ForceExtension(PPFile,'elg');
  485. Verbose(V_Debug,'Executing '+TestExe);
  486. ExecuteRedir(TestExe,'','',OutName,'');
  487. Verbose(V_Debug,'Exitcode '+ToStr(ExecuteResult));
  488. if ExecuteResult<>Config.ResultCode then
  489. begin
  490. AddLog(FailLogFile,TestName);
  491. AddLog(ResLogFile,'Failed to run '+PPFileInfo);
  492. AddLog(LongLogFile,'>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>');
  493. AddLog(LongLogFile,'Failed to run '+PPFileInfo+' ('+ToStr(ExecuteResult)+')');
  494. Copyfile(OutName,LongLogFile,true);
  495. Verbose(V_Abort,'Exitcode: '+ToStr(ExecuteResult)+' (expected '+ToStr(Config.ResultCode)+')');
  496. end
  497. else
  498. begin
  499. AddLog(ResLogFile,'Successfully run '+PPFileInfo);
  500. RunExecutable:=true;
  501. end;
  502. end;
  503. procedure getargs;
  504. var
  505. ch : char;
  506. para : string;
  507. i : longint;
  508. procedure helpscreen;
  509. begin
  510. writeln('dotest [Options] <File>');
  511. writeln;
  512. writeln('Options can be:');
  513. writeln(' -C<compiler> set compiler to use');
  514. writeln(' -V verbose');
  515. writeln(' -E execute test also');
  516. writeln(' -A include ALL tests');
  517. writeln(' -G include graph tests');
  518. writeln(' -K include known bug tests');
  519. writeln(' -I include interactive tests');
  520. halt(1);
  521. end;
  522. begin
  523. PPFile:='';
  524. if exeext<>'' then
  525. CompilerBin:='ppc386.'+exeext
  526. else
  527. CompilerBin:='ppc386';
  528. for i:=1 to paramcount do
  529. begin
  530. para:=Paramstr(i);
  531. if (para[1]='-') then
  532. begin
  533. ch:=Upcase(para[2]);
  534. delete(para,1,2);
  535. case ch of
  536. 'A' :
  537. begin
  538. DoGraph:=true;
  539. DoInteractive:=true;
  540. DoKnown:=true;
  541. end;
  542. 'C' : CompilerBin:=Para;
  543. 'E' : DoExecute:=true;
  544. 'G' : DoGraph:=true;
  545. 'I' : DoInteractive:=true;
  546. 'V' : DoVerbose:=true;
  547. 'K' : DoKnown:=true;
  548. end;
  549. end
  550. else
  551. begin
  552. If PPFile<>'' then
  553. HelpScreen;
  554. PPFile:=ForceExtension(Para,'pp');
  555. end;
  556. end;
  557. if (PPFile='') then
  558. HelpScreen;
  559. SetPPFileInfo;
  560. TestName:=Copy(PPFile,1,Pos('.pp',PPFile)-1);
  561. Verbose(V_Debug,'Running test '+TestName+', file '+PPFile);
  562. end;
  563. procedure RunTest;
  564. var
  565. Res : boolean;
  566. OutName : string;
  567. begin
  568. Res:=GetConfig(ppfile,Config);
  569. OutName:=ForceExtension(PPFile,'elg');
  570. if Res then
  571. begin
  572. if Config.UsesGraph and (not DoGraph) then
  573. begin
  574. AddLog(ResLogFile,'Skipping test because it uses graph '+PPFileInfo);
  575. { avoid a second attempt by writing to elg file }
  576. AddLog(OutName,'Skipping test because it uses graph '+PPFileInfo);
  577. Verbose(V_Abort,'Skipping test because it uses graph ');
  578. Res:=false;
  579. end;
  580. end;
  581. if Res then
  582. begin
  583. if Config.IsInteractive and (not DoInteractive) then
  584. begin
  585. { avoid a second attempt by writing to elg file }
  586. AddLog(OutName,'Skipping test because it is interactive '+PPFileInfo);
  587. AddLog(ResLogFile,'Skipping test because it is interactive '+PPFileInfo);
  588. Verbose(V_Abort,'Skipping test because it is interactive ');
  589. Res:=false;
  590. end;
  591. end;
  592. if Res then
  593. begin
  594. if Config.IsKnown and (not DoKnown) then
  595. begin
  596. { avoid a second attempt by writing to elg file }
  597. AddLog(OutName,'Skipping test because it is a known bug '+PPFileInfo);
  598. AddLog(ResLogFile,'Skipping test because it is a known bug '+PPFileInfo);
  599. Verbose(V_Abort,'Skipping test because it is a known bug ');
  600. Res:=false;
  601. end;
  602. end;
  603. if Res then
  604. begin
  605. if Config.NeedVersion<>'' then
  606. begin
  607. Verbose(V_Debug,'Required compiler version: '+Config.NeedVersion);
  608. Res:=GetCompilerVersion;
  609. if CompilerVersion<Config.NeedVersion then
  610. begin
  611. { avoid a second attempt by writing to elg file }
  612. AddLog(OutName,'Skipping test because compiler version too low '+PPFileInfo);
  613. AddLog(ResLogFile,'Skipping test because compiler version too low '+PPFileInfo);
  614. Verbose(V_Abort,'Compiler version too low '+CompilerVersion+' < '+Config.NeedVersion);
  615. Res:=false;
  616. end;
  617. end;
  618. end;
  619. if Res then
  620. begin
  621. if Config.NeedCPU<>'' then
  622. begin
  623. Verbose(V_Debug,'Required compiler cpu: '+Config.NeedCPU);
  624. Res:=GetCompilerCPU;
  625. if Upper(Config.NeedCPU)<>Upper(CompilerCPU) then
  626. begin
  627. { avoid a second attempt by writing to elg file }
  628. AddLog(OutName,'Skipping test because for other cpu '+PPFileInfo);
  629. AddLog(ResLogFile,'Skipping test because for other cpu '+PPFileInfo);
  630. Verbose(V_Abort,'Compiler cpu wrong '+CompilerCPU+' <> '+Config.NeedCPU);
  631. Res:=false;
  632. end;
  633. end;
  634. end;
  635. if Res then
  636. begin
  637. Res:=RunCompiler;
  638. if Res and Config.NeedRecompile then
  639. Res:=RunCompiler;
  640. end;
  641. if Res then
  642. begin
  643. if (Config.NoRun) then
  644. begin
  645. { avoid a second attempt by writing to elg file }
  646. AddLog(OutName,'Skipping run test '+PPFileInfo);
  647. AddLog(ResLogFile,'Skipping run test '+PPFileInfo);
  648. Verbose(V_Debug,'Skipping run test ');
  649. end
  650. else
  651. begin
  652. if (not Config.ShouldFail) and DoExecute then
  653. begin
  654. if FileExists(ForceExtension(PPFile,'ppu')) or
  655. FileExists(ForceExtension(PPFile,'ppo')) or
  656. FileExists(ForceExtension(PPFile,'ppw')) then
  657. begin
  658. AddLog(ForceExtension(PPFile,'elg'),'Skipping test run because it is a unit '+PPFileInfo);
  659. AddLog(ResLogFile,'Skipping test run because it is a unit '+PPFileInfo);
  660. Verbose(V_Debug,'Unit found, skipping run test')
  661. end
  662. else
  663. Res:=RunExecutable;
  664. end;
  665. end;
  666. end;
  667. end;
  668. begin
  669. GetArgs;
  670. RunTest;
  671. end.
  672. {
  673. $Log$
  674. Revision 1.15 2002-09-07 15:40:56 peter
  675. * old logs removed and tabs fixed
  676. Revision 1.14 2002/04/21 18:15:32 peter
  677. * Check for internal errors
  678. Revision 1.13 2002/03/03 13:27:28 hajny
  679. + added support for OS/2 units (.ppo)
  680. Revision 1.12 2002/01/29 13:24:16 pierre
  681. + also generate .elg file for units
  682. Revision 1.11 2002/01/29 12:51:08 pierre
  683. + PPFileInfo to also display time stamp of test file
  684. * generate .elg file in several cases
  685. to avoid trying to recompute the same test
  686. over and over again.
  687. }