File: main.cpp

package info (click to toggle)
quickfix 1.13.3%2Bdfsg-9
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 152,548 kB
  • ctags: 679,426
  • sloc: cpp: 639,331; xml: 129,200; python: 108,722; ruby: 85,152; sh: 10,492; ansic: 9,025; java: 1,827; cs: 1,145; makefile: 523; sql: 313; perl: 108
file content (142 lines) | stat: -rw-r--r-- 2,616 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
#include <iostream>
#include <string>
#include <signal.h>
#include <UnitTest++.h>

#include "TestSuite.h"

#include "Process.h"

extern "C" 
{
  int getopt(int argc, char * const argv[], const char *optstring);
  extern char *optarg;
  char* __progname;
}

namespace ATRUN {
  std::string m_server;
  std::string m_serverDir;

  std::string m_client;
  std::string m_clientDir;

  std::string m_outfile;
}

ATRUN::Process server;
ATRUN::Process client;

int doTestMode();
int doRunMode(int argc, char** argv );
bool processArguments(int argc, char** argv);
void printUsage(char* exe);
void term(int) 
{
  client.terminate();
  server.terminate();  
}

int main( int argc, char** argv )
{
  if(getopt(argc, argv, "+t:") != 't')
  {
    printUsage(argv[0]);
    return 1;
  }

  if(strcmp(optarg, "test") == 0)
  {
    return doTestMode();
  }
  else if(strcmp(optarg, "run") == 0)
  {
    return doRunMode( argc, argv );
  }

  printUsage(argv[0]);    
  return 1;
}

int doTestMode()
{
  std::cout << "<ut>" << std::endl << "  <output>" << std::endl;
  int result = UnitTest::RunAllTests();
  std::cout << "  </output>" << std::endl << "</ut>" << std::endl;
  return 0;
}

int doRunMode(int argc, char** argv )
{
  if( !processArguments(argc, argv) ) return 1;

  signal(SIGINT, term);
  signal(SIGABRT, term);
  signal(SIGTERM, term);

  server.setCommandLine(ATRUN::m_server);
  server.setWorkingDirectory(ATRUN::m_serverDir);
  server.create();

  client.setCommandLine(ATRUN::m_client);
  client.setWorkingDirectory(ATRUN::m_clientDir);
  if(ATRUN::m_outfile.size())
  {
    client.setOutFile(ATRUN::m_outfile);
    client.sendToFile(true);
  }
  else
    client.sendToStd(true);

  client.create();

  client.waitFor();
  server.terminate();

  return client.getExitCode();
}



bool processArguments(int argc, char** argv)
{
  if( getopt(argc, argv, "+s:") != 's' ) 
  {
    printUsage(argv[0]);
    return false;
  }
  ATRUN::m_server = optarg;

  if( getopt(argc, argv, "+d:") != 'd' )
  {
    printUsage(argv[0]);
    return false;
  }
  ATRUN::m_serverDir = optarg;

  if( getopt(argc, argv, "+c:") != 'c' )
  {
    printUsage(argv[0]);
    return false;
  }
  ATRUN::m_client = optarg;

  if( getopt(argc, argv, "+i:") != 'i' )
  {
    printUsage(argv[0]);
    return false;
  }
  ATRUN::m_clientDir = optarg;

  if( getopt(argc, argv, "+o:") == 'o' )
    ATRUN::m_outfile = optarg;

  return true;
}

void printUsage(char* exe)
{
  std::cout << "usage: " 
            << exe 
            << " -t test|run -s serverCmdLine -d serverStartDir -c clientCmdLine -i initialClientDir -o outFile" << std::endl;
}