| #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; |
| } |
| |