292 lines
9.0 KiB
C++
292 lines
9.0 KiB
C++
#include <iostream>
|
|
#include "options.h"
|
|
|
|
const bool VERBOSE = false;
|
|
|
|
using namespace std;
|
|
|
|
struct Answer {
|
|
const char* argv[8];
|
|
int result;
|
|
const char* systemSearchPath[8];
|
|
const char* localSearchPath[8];
|
|
const char* inputFileName;
|
|
language_t nativeLanguage;
|
|
const char* outputH;
|
|
const char* outputCPP;
|
|
const char* outputJava;
|
|
};
|
|
|
|
bool
|
|
match_arrays(const char* const*expected, const vector<string> &got)
|
|
{
|
|
int count = 0;
|
|
while (expected[count] != NULL) {
|
|
count++;
|
|
}
|
|
if (got.size() != count) {
|
|
return false;
|
|
}
|
|
for (int i=0; i<count; i++) {
|
|
if (got[i] != expected[i]) {
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
void
|
|
print_array(const char* prefix, const char* const*expected)
|
|
{
|
|
while (*expected) {
|
|
cout << prefix << *expected << endl;
|
|
expected++;
|
|
}
|
|
}
|
|
|
|
void
|
|
print_array(const char* prefix, const vector<string> &got)
|
|
{
|
|
size_t count = got.size();
|
|
for (size_t i=0; i<count; i++) {
|
|
cout << prefix << got[i] << endl;
|
|
}
|
|
}
|
|
|
|
static int
|
|
test(const Answer& answer)
|
|
{
|
|
int argc = 0;
|
|
while (answer.argv[argc]) {
|
|
argc++;
|
|
}
|
|
|
|
int err = 0;
|
|
|
|
Options options;
|
|
int result = parse_options(argc, answer.argv, &options);
|
|
|
|
// result
|
|
if (((bool)result) != ((bool)answer.result)) {
|
|
cout << "mismatch: result: got " << result << " expected " <<
|
|
answer.result << endl;
|
|
err = 1;
|
|
}
|
|
|
|
if (result != 0) {
|
|
// if it failed, everything is invalid
|
|
return err;
|
|
}
|
|
|
|
// systemSearchPath
|
|
if (!match_arrays(answer.systemSearchPath, options.systemSearchPath)) {
|
|
cout << "mismatch: systemSearchPath: got" << endl;
|
|
print_array(" ", options.systemSearchPath);
|
|
cout << " expected" << endl;
|
|
print_array(" ", answer.systemSearchPath);
|
|
err = 1;
|
|
}
|
|
|
|
// localSearchPath
|
|
if (!match_arrays(answer.localSearchPath, options.localSearchPath)) {
|
|
cout << "mismatch: localSearchPath: got" << endl;
|
|
print_array(" ", options.localSearchPath);
|
|
cout << " expected" << endl;
|
|
print_array(" ", answer.localSearchPath);
|
|
err = 1;
|
|
}
|
|
|
|
// inputFileName
|
|
if (answer.inputFileName != options.inputFileName) {
|
|
cout << "mismatch: inputFileName: got " << options.inputFileName
|
|
<< " expected " << answer.inputFileName << endl;
|
|
err = 1;
|
|
}
|
|
|
|
// nativeLanguage
|
|
if (answer.nativeLanguage != options.nativeLanguage) {
|
|
cout << "mismatch: nativeLanguage: got " << options.nativeLanguage
|
|
<< " expected " << answer.nativeLanguage << endl;
|
|
err = 1;
|
|
}
|
|
|
|
// outputH
|
|
if (answer.outputH != options.outputH) {
|
|
cout << "mismatch: outputH: got " << options.outputH
|
|
<< " expected " << answer.outputH << endl;
|
|
err = 1;
|
|
}
|
|
|
|
// outputCPP
|
|
if (answer.outputCPP != options.outputCPP) {
|
|
cout << "mismatch: outputCPP: got " << options.outputCPP
|
|
<< " expected " << answer.outputCPP << endl;
|
|
err = 1;
|
|
}
|
|
|
|
// outputJava
|
|
if (answer.outputJava != options.outputJava) {
|
|
cout << "mismatch: outputJava: got " << options.outputJava
|
|
<< " expected " << answer.outputJava << endl;
|
|
err = 1;
|
|
}
|
|
|
|
return err;
|
|
}
|
|
|
|
const Answer g_tests[] = {
|
|
|
|
{
|
|
/* argv */ { "test", "-i/moof", "-I/blah", "-Ibleh", "-imoo", "inputFileName.aidl_cpp", NULL, NULL },
|
|
/* result */ 0,
|
|
/* systemSearchPath */ { "/blah", "bleh", NULL, NULL, NULL, NULL, NULL, NULL },
|
|
/* localSearchPath */ { "/moof", "moo", NULL, NULL, NULL, NULL, NULL, NULL },
|
|
/* inputFileName */ "inputFileName.aidl_cpp",
|
|
/* nativeLanguage */ CPP,
|
|
/* outputH */ "",
|
|
/* outputCPP */ "",
|
|
/* outputJava */ ""
|
|
},
|
|
|
|
{
|
|
/* argv */ { "test", "inputFileName.aidl_cpp", "-oh", "outputH", NULL, NULL, NULL, NULL },
|
|
/* result */ 0,
|
|
/* systemSearchPath */ { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL },
|
|
/* localSearchPath */ { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL },
|
|
/* inputFileName */ "inputFileName.aidl_cpp",
|
|
/* nativeLanguage */ CPP,
|
|
/* outputH */ "outputH",
|
|
/* outputCPP */ "",
|
|
/* outputJava */ ""
|
|
},
|
|
|
|
{
|
|
/* argv */ { "test", "inputFileName.aidl_cpp", "-ocpp", "outputCPP", NULL, NULL, NULL, NULL },
|
|
/* result */ 0,
|
|
/* systemSearchPath */ { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL },
|
|
/* localSearchPath */ { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL },
|
|
/* inputFileName */ "inputFileName.aidl_cpp",
|
|
/* nativeLanguage */ CPP,
|
|
/* outputH */ "",
|
|
/* outputCPP */ "outputCPP",
|
|
/* outputJava */ ""
|
|
},
|
|
|
|
{
|
|
/* argv */ { "test", "inputFileName.aidl_cpp", "-ojava", "outputJava", NULL, NULL, NULL, NULL },
|
|
/* result */ 0,
|
|
/* systemSearchPath */ { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL },
|
|
/* localSearchPath */ { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL },
|
|
/* inputFileName */ "inputFileName.aidl_cpp",
|
|
/* nativeLanguage */ CPP,
|
|
/* outputH */ "",
|
|
/* outputCPP */ "",
|
|
/* outputJava */ "outputJava"
|
|
},
|
|
|
|
{
|
|
/* argv */ { "test", "inputFileName.aidl_cpp", "-oh", "outputH", "-ocpp", "outputCPP", "-ojava", "outputJava" },
|
|
/* result */ 0,
|
|
/* systemSearchPath */ { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL },
|
|
/* localSearchPath */ { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL },
|
|
/* inputFileName */ "inputFileName.aidl_cpp",
|
|
/* nativeLanguage */ CPP,
|
|
/* outputH */ "outputH",
|
|
/* outputCPP */ "outputCPP",
|
|
/* outputJava */ "outputJava"
|
|
},
|
|
|
|
{
|
|
/* argv */ { "test", "inputFileName.aidl_cpp", "-oh", "outputH", "-oh", "outputH1", NULL, NULL },
|
|
/* result */ 1,
|
|
/* systemSearchPath */ { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL },
|
|
/* localSearchPath */ { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL },
|
|
/* inputFileName */ "",
|
|
/* nativeLanguage */ CPP,
|
|
/* outputH */ "",
|
|
/* outputCPP */ "",
|
|
/* outputJava */ ""
|
|
},
|
|
|
|
{
|
|
/* argv */ { "test", "inputFileName.aidl_cpp", "-ocpp", "outputCPP", "-ocpp", "outputCPP1", NULL, NULL },
|
|
/* result */ 1,
|
|
/* systemSearchPath */ { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL },
|
|
/* localSearchPath */ { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL },
|
|
/* inputFileName */ "",
|
|
/* nativeLanguage */ CPP,
|
|
/* outputH */ "",
|
|
/* outputCPP */ "",
|
|
/* outputJava */ ""
|
|
},
|
|
|
|
{
|
|
/* argv */ { "test", "inputFileName.aidl_cpp", "-ojava", "outputJava", "-ojava", "outputJava1", NULL, NULL },
|
|
/* result */ 1,
|
|
/* systemSearchPath */ { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL },
|
|
/* localSearchPath */ { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL },
|
|
/* inputFileName */ "",
|
|
/* nativeLanguage */ CPP,
|
|
/* outputH */ "",
|
|
/* outputCPP */ "",
|
|
/* outputJava */ ""
|
|
},
|
|
|
|
};
|
|
|
|
int
|
|
main(int argc, const char** argv)
|
|
{
|
|
const int count = sizeof(g_tests)/sizeof(g_tests[0]);
|
|
int matches[count];
|
|
|
|
int result = 0;
|
|
for (int i=0; i<count; i++) {
|
|
if (VERBOSE) {
|
|
cout << endl;
|
|
cout << "---------------------------------------------" << endl;
|
|
const char* const* p = g_tests[i].argv;
|
|
while (*p) {
|
|
cout << " " << *p;
|
|
p++;
|
|
}
|
|
cout << endl;
|
|
cout << "---------------------------------------------" << endl;
|
|
}
|
|
matches[i] = test(g_tests[i]);
|
|
if (VERBOSE) {
|
|
if (0 == matches[i]) {
|
|
cout << "passed" << endl;
|
|
} else {
|
|
cout << "failed" << endl;
|
|
}
|
|
result |= matches[i];
|
|
}
|
|
}
|
|
|
|
cout << endl;
|
|
cout << "=============================================" << endl;
|
|
cout << "options_test summary" << endl;
|
|
cout << "=============================================" << endl;
|
|
|
|
if (!result) {
|
|
cout << "passed" << endl;
|
|
} else {
|
|
cout << "failed the following tests:" << endl;
|
|
for (int i=0; i<count; i++) {
|
|
if (matches[i]) {
|
|
cout << " ";
|
|
const char* const* p = g_tests[i].argv;
|
|
while (*p) {
|
|
cout << " " << *p;
|
|
p++;
|
|
}
|
|
cout << endl;
|
|
}
|
|
}
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|