Logo ROOT  
Reference Guide
guitest_playback.C
Go to the documentation of this file.
1/// \file
2/// \ingroup tutorial_gui
3/// This macro plays a recorded ROOT session showing how to perform various interactive GUI operations with the guitest.C macro
4/// While replaying the session, several temporary macros (guitest0xx.C) macros will be saved.
5/// These files will be later on compared with some reference values to verify the validity of different parts of the test.
6///
7/// \macro_code
8///
9/// \author Bertrand Bellenot
10
11#include "TSystem.h"
12#include "TSystemFile.h"
13#include "TRecorder.h"
14#include "Riostream.h"
15
16// count characters in the file, skipping cr/lf
17Int_t file_size(const char *filename)
18{
19 FILE *lunin;
20 Int_t c, wc = 0;
21
22 lunin = fopen(filename, "rb");
23 if (lunin == 0) return -1;
24 while (!feof(lunin)) {
25 c = fgetc(lunin);
26 if (c != 0x0d && c != 0x0a)
27 wc++;
28 }
29 fclose(lunin);
30 return wc;
31}
32
33// main function
34void guitest_playback()
35{
36 Int_t i;
37 Int_t guitest_ref[11], guitest_err[11], guitest_size[11];
38
39 gBenchmark->Start("guitest_playback");
40
41 // first delete old files, if any
42 for (i=0;i<11;++i) {
43 gSystem->Unlink(TString::Format("guitest%03d.C", i+1));
44 }
45
46 TRecorder r("http://root.cern.ch/files/guitest_playback.root");
47
48 // wait for the recorder to finish the replay
49 while (r.GetState() == TRecorder::kReplaying) {
51 gSystem->Sleep(1);
52 }
53
54 for (i=0;i<11;++i) {
55 guitest_ref[i] = 0;
56 guitest_err[i] = 100;
57 guitest_size[i] = file_size(TString::Format("guitest%03d.C", i+1));
58 }
59
60 guitest_ref[0] = 23319;
61 guitest_ref[1] = 5633;
62 guitest_ref[2] = 14939;
63 guitest_ref[3] = 9459;
64 guitest_ref[4] = 5351;
65 guitest_ref[5] = 22982;
66 guitest_ref[6] = 23812;
67 guitest_ref[7] = 23869;
68 guitest_ref[8] = 23918;
69 guitest_ref[9] = 24067;
70 guitest_ref[10] = 65517;
71
72 printf("**********************************************************************\n");
73 printf("* Results of guitest_playback.C *\n");
74 printf("**********************************************************************\n");
75
76 for (i=0;i<11;++i) {
77 printf("guitest %02d: output............................................", i+1);
78 if (TMath::Abs(guitest_ref[i] - guitest_size[i]) <= guitest_err[i]) {
79 printf("..... OK\n");
80 // delete successful tests, keep only the failing ones (for verification)
81 gSystem->Unlink(TString::Format("guitest%03d.C", i+1));
82 }
83 else {
84 printf(". FAILED\n");
85 }
86 }
87 printf("**********************************************************************\n");
88 gBenchmark->Show("guitest_playback");
89}
ROOT::R::TRInterface & r
Definition: Object.C:4
#define c(i)
Definition: RSha256.hxx:101
int Int_t
Definition: RtypesCore.h:43
R__EXTERN TBenchmark * gBenchmark
Definition: TBenchmark.h:59
R__EXTERN TSystem * gSystem
Definition: TSystem.h:556
virtual void Start(const char *name)
Starts Benchmark with the specified name.
Definition: TBenchmark.cxx:174
virtual void Show(const char *name)
Stops Benchmark name and Prints results.
Definition: TBenchmark.cxx:157
@ kReplaying
Definition: TRecorder.h:453
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString.
Definition: TString.cxx:2311
virtual void Sleep(UInt_t milliSec)
Sleep milliSec milli seconds.
Definition: TSystem.cxx:435
virtual Bool_t ProcessEvents()
Process pending events (GUI, timers, sockets).
Definition: TSystem.cxx:414
virtual int Unlink(const char *name)
Unlink, i.e.
Definition: TSystem.cxx:1376
Short_t Abs(Short_t d)
Definition: TMathBase.h:120