1282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#include <iostream>
2282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#include "options.h"
3282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
4282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiconst bool VERBOSE = false;
5282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
6282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiusing namespace std;
7282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
8282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskistruct Answer {
9282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char* argv[8];
10282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    int result;
11282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char* systemSearchPath[8];
12282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char* localSearchPath[8];
13282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char* inputFileName;
14282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    language_t nativeLanguage;
15282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char* outputH;
16282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char* outputCPP;
17282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char* outputJava;
18282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski};
19282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
20282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskibool
21282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskimatch_arrays(const char* const*expected, const vector<string> &got)
22282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski{
23282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    int count = 0;
24282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    while (expected[count] != NULL) {
25282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        count++;
26282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
27282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    if (got.size() != count) {
28282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        return false;
29282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
30282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    for (int i=0; i<count; i++) {
31282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        if (got[i] != expected[i]) {
32282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            return false;
33282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        }
34282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
35282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    return true;
36282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski}
37282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
38282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskivoid
39282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiprint_array(const char* prefix, const char* const*expected)
40282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski{
41282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    while (*expected) {
42282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        cout << prefix << *expected << endl;
43282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        expected++;
44282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
45282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski}
46282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
47282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskivoid
48282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiprint_array(const char* prefix, const vector<string> &got)
49282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski{
50282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    size_t count = got.size();
51282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    for (size_t i=0; i<count; i++) {
52282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        cout << prefix << got[i] << endl;
53282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
54282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski}
55282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
56282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskistatic int
57282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskitest(const Answer& answer)
58282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski{
59282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    int argc = 0;
60282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    while (answer.argv[argc]) {
61282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        argc++;
62282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
63282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
64282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    int err = 0;
65282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
66282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    Options options;
67282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    int result = parse_options(argc, answer.argv, &options);
68282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
69282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    // result
70282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    if (((bool)result) != ((bool)answer.result)) {
71282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        cout << "mismatch: result: got " << result << " expected " <<
72282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            answer.result << endl;
73282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        err = 1;
74282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
75282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
76282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    if (result != 0) {
77282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        // if it failed, everything is invalid
78282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        return err;
79282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
80282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
81282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    // systemSearchPath
82282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    if (!match_arrays(answer.systemSearchPath, options.systemSearchPath)) {
83282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        cout << "mismatch: systemSearchPath: got" << endl;
84282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        print_array("        ", options.systemSearchPath);
85282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        cout << "    expected" << endl;
86282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        print_array("        ", answer.systemSearchPath);
87282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        err = 1;
88282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
89282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
90282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    // localSearchPath
91282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    if (!match_arrays(answer.localSearchPath, options.localSearchPath)) {
92282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        cout << "mismatch: localSearchPath: got" << endl;
93282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        print_array("        ", options.localSearchPath);
94282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        cout << "    expected" << endl;
95282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        print_array("        ", answer.localSearchPath);
96282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        err = 1;
97282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
98282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
99282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    // inputFileName
100282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    if (answer.inputFileName != options.inputFileName) {
101282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        cout << "mismatch: inputFileName: got " << options.inputFileName
102282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            << " expected " << answer.inputFileName << endl;
103282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        err = 1;
104282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
105282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
106282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    // nativeLanguage
107282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    if (answer.nativeLanguage != options.nativeLanguage) {
108282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        cout << "mismatch: nativeLanguage: got " << options.nativeLanguage
109282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            << " expected " << answer.nativeLanguage << endl;
110282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        err = 1;
111282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
112282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
113282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    // outputH
114282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    if (answer.outputH != options.outputH) {
115282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        cout << "mismatch: outputH: got " << options.outputH
116282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            << " expected " << answer.outputH << endl;
117282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        err = 1;
118282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
119282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
120282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    // outputCPP
121282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    if (answer.outputCPP != options.outputCPP) {
122282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        cout << "mismatch: outputCPP: got " << options.outputCPP
123282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            << " expected " << answer.outputCPP << endl;
124282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        err = 1;
125282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
126282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
127282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    // outputJava
128282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    if (answer.outputJava != options.outputJava) {
129282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        cout << "mismatch: outputJava: got " << options.outputJava
130282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            << " expected " << answer.outputJava << endl;
131282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        err = 1;
132282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
133282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
134282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    return err;
135282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski}
136282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
137282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiconst Answer g_tests[] = {
138282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
139282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    {
140282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        /* argv */              { "test", "-i/moof", "-I/blah", "-Ibleh", "-imoo", "inputFileName.aidl_cpp", NULL, NULL },
141282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        /* result */            0,
142282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        /* systemSearchPath */  { "/blah", "bleh", NULL, NULL, NULL, NULL, NULL, NULL },
143282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        /* localSearchPath */   { "/moof", "moo", NULL, NULL, NULL, NULL, NULL, NULL },
144282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        /* inputFileName */     "inputFileName.aidl_cpp",
145282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        /* nativeLanguage */    CPP,
146282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        /* outputH */           "",
147282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        /* outputCPP */         "",
148282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        /* outputJava */        ""
149282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    },
150282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
151282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    {
152282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        /* argv */              { "test", "inputFileName.aidl_cpp", "-oh", "outputH", NULL, NULL, NULL, NULL },
153282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        /* result */            0,
154282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        /* systemSearchPath */  { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL },
155282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        /* localSearchPath */   { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL },
156282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        /* inputFileName */     "inputFileName.aidl_cpp",
157282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        /* nativeLanguage */    CPP,
158282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        /* outputH */           "outputH",
159282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        /* outputCPP */         "",
160282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        /* outputJava */        ""
161282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    },
162282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
163282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    {
164282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        /* argv */              { "test", "inputFileName.aidl_cpp", "-ocpp", "outputCPP", NULL, NULL, NULL, NULL },
165282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        /* result */            0,
166282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        /* systemSearchPath */  { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL },
167282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        /* localSearchPath */   { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL },
168282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        /* inputFileName */     "inputFileName.aidl_cpp",
169282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        /* nativeLanguage */    CPP,
170282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        /* outputH */           "",
171282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        /* outputCPP */         "outputCPP",
172282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        /* outputJava */        ""
173282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    },
174282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
175282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    {
176282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        /* argv */              { "test", "inputFileName.aidl_cpp", "-ojava", "outputJava", NULL, NULL, NULL, NULL },
177282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        /* result */            0,
178282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        /* systemSearchPath */  { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL },
179282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        /* localSearchPath */   { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL },
180282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        /* inputFileName */     "inputFileName.aidl_cpp",
181282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        /* nativeLanguage */    CPP,
182282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        /* outputH */           "",
183282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        /* outputCPP */         "",
184282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        /* outputJava */        "outputJava"
185282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    },
186282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
187282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    {
188282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        /* argv */              { "test", "inputFileName.aidl_cpp", "-oh", "outputH", "-ocpp", "outputCPP", "-ojava", "outputJava" },
189282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        /* result */            0,
190282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        /* systemSearchPath */  { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL },
191282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        /* localSearchPath */   { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL },
192282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        /* inputFileName */     "inputFileName.aidl_cpp",
193282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        /* nativeLanguage */    CPP,
194282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        /* outputH */           "outputH",
195282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        /* outputCPP */         "outputCPP",
196282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        /* outputJava */        "outputJava"
197282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    },
198282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
199282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    {
200282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        /* argv */              { "test", "inputFileName.aidl_cpp", "-oh", "outputH", "-oh", "outputH1", NULL, NULL },
201282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        /* result */            1,
202282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        /* systemSearchPath */  { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL },
203282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        /* localSearchPath */   { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL },
204282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        /* inputFileName */     "",
205282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        /* nativeLanguage */    CPP,
206282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        /* outputH */           "",
207282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        /* outputCPP */         "",
208282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        /* outputJava */        ""
209282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    },
210282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
211282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    {
212282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        /* argv */              { "test", "inputFileName.aidl_cpp", "-ocpp", "outputCPP", "-ocpp", "outputCPP1", NULL, NULL },
213282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        /* result */            1,
214282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        /* systemSearchPath */  { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL },
215282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        /* localSearchPath */   { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL },
216282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        /* inputFileName */     "",
217282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        /* nativeLanguage */    CPP,
218282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        /* outputH */           "",
219282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        /* outputCPP */         "",
220282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        /* outputJava */        ""
221282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    },
222282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
223282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    {
224282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        /* argv */              { "test", "inputFileName.aidl_cpp", "-ojava", "outputJava", "-ojava", "outputJava1", NULL, NULL },
225282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        /* result */            1,
226282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        /* systemSearchPath */  { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL },
227282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        /* localSearchPath */   { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL },
228282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        /* inputFileName */     "",
229282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        /* nativeLanguage */    CPP,
230282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        /* outputH */           "",
231282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        /* outputCPP */         "",
232282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        /* outputJava */        ""
233282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    },
234282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
235282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski};
236282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
237282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiint
238282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskimain(int argc, const char** argv)
239282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski{
240282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const int count = sizeof(g_tests)/sizeof(g_tests[0]);
241282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    int matches[count];
242282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
243282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    int result = 0;
244282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    for (int i=0; i<count; i++) {
245282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        if (VERBOSE) {
246282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            cout << endl;
247282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            cout << "---------------------------------------------" << endl;
248282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            const char* const* p = g_tests[i].argv;
249282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            while (*p) {
250282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski                cout << " " << *p;
251282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski                p++;
252282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            }
253282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            cout << endl;
254282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            cout << "---------------------------------------------" << endl;
255282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        }
256282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        matches[i] = test(g_tests[i]);
257282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        if (VERBOSE) {
258282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            if (0 == matches[i]) {
259282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski                cout << "passed" << endl;
260282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            } else {
261282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski                cout << "failed" << endl;
262282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            }
263282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            result |= matches[i];
264282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        }
265282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
266282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
267282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    cout << endl;
268282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    cout << "=============================================" << endl;
269282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    cout << "options_test summary" << endl;
270282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    cout << "=============================================" << endl;
271282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
272282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    if (!result) {
273282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        cout << "passed" << endl;
274282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    } else {
275282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        cout << "failed the following tests:" << endl;
276282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        for (int i=0; i<count; i++) {
277282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            if (matches[i]) {
278282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski                cout << "   ";
279282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski                const char* const* p = g_tests[i].argv;
280282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski                while (*p) {
281282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski                    cout << " " << *p;
282282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski                    p++;
283282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski                }
284282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski                cout << endl;
285282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            }
286282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        }
287282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
288282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
289282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    return result;
290282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski}
291282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
292