guitest_playback.C: This macro plays a recorded ROOT session showing how to perform various
// This macro plays a recorded ROOT session showing how to perform various
// interactive GUI operations with the guitest.C macro
// While replaying the session, several temporary macros (guitest0xx.C)
// macros will be saved. These files will be later on compared with some
// reference values to verify the validity of different parts of the test.
#include "TSystem.h"
#include "TSystemFile.h"
#include "TRecorder.h"
#include "Riostream.h"
// count characters in the file, skipping cr/lf
Int_t file_size(const char *filename)
{
FILE *lunin;
Int_t c, wc = 0;
lunin = fopen(filename, "rb");
if (lunin == 0) return -1;
while (!feof(lunin)) {
c = fgetc(lunin);
if (c != 0x0d && c != 0x0a)
wc++;
}
fclose(lunin);
return wc;
}
// main function
void guitest_playback()
{
Int_t i;
Int_t guitest_ref[11], guitest_err[11], guitest_size[11];
gBenchmark->Start("guitest_playback");
// first delete old files, if any
for (i=0;i<11;++i) {
gSystem->Unlink(TString::Format("guitest%03d.C", i+1));
}
TRecorder r("http://root.cern.ch/files/guitest_playback.root");
// wait for the recorder to finish the replay
while (r.GetState() == TRecorder::kReplaying) {
gSystem->ProcessEvents();
gSystem->Sleep(1);
}
for (i=0;i<11;++i) {
guitest_ref[i] = 0;
guitest_err[i] = 100;
guitest_size[i] = file_size(TString::Format("guitest%03d.C", i+1));
}
guitest_ref[0] = 23319;
guitest_ref[1] = 5633;
guitest_ref[2] = 14939;
guitest_ref[3] = 9459;
guitest_ref[4] = 5351;
guitest_ref[5] = 22982;
guitest_ref[6] = 23812;
guitest_ref[7] = 23869;
guitest_ref[8] = 23918;
guitest_ref[9] = 24067;
guitest_ref[10] = 65517;
printf("**********************************************************************\n");
printf("* Results of guitest_playback.C *\n");
printf("**********************************************************************\n");
for (i=0;i<11;++i) {
printf("guitest %02d: output............................................", i+1);
if (TMath::Abs(guitest_ref[i] - guitest_size[i]) <= guitest_err[i]) {
printf("..... OK\n");
// delete successful tests, keep only the failing ones (for verification)
gSystem->Unlink(TString::Format("guitest%03d.C", i+1));
}
else {
printf(". FAILED\n");
}
}
printf("**********************************************************************\n");
gBenchmark->Show("guitest_playback");
}