| OLD | NEW |
| 1 // Protocol Buffers - Google's data interchange format | 1 // Protocol Buffers - Google's data interchange format |
| 2 // Copyright 2008 Google Inc. All rights reserved. | 2 // Copyright 2008 Google Inc. All rights reserved. |
| 3 // https://developers.google.com/protocol-buffers/ | 3 // https://developers.google.com/protocol-buffers/ |
| 4 // | 4 // |
| 5 // Redistribution and use in source and binary forms, with or without | 5 // Redistribution and use in source and binary forms, with or without |
| 6 // modification, are permitted provided that the following conditions are | 6 // modification, are permitted provided that the following conditions are |
| 7 // met: | 7 // met: |
| 8 // | 8 // |
| 9 // * Redistributions of source code must retain the above copyright | 9 // * Redistributions of source code must retain the above copyright |
| 10 // notice, this list of conditions and the following disclaimer. | 10 // notice, this list of conditions and the following disclaimer. |
| (...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 244 fprintf(stderr, "\n"); | 244 fprintf(stderr, "\n"); |
| 245 fprintf(stderr, "Options:\n"); | 245 fprintf(stderr, "Options:\n"); |
| 246 fprintf(stderr, | 246 fprintf(stderr, |
| 247 " --failure_list <filename> Use to specify list of tests\n"); | 247 " --failure_list <filename> Use to specify list of tests\n"); |
| 248 fprintf(stderr, | 248 fprintf(stderr, |
| 249 " that are expected to fail. File\n"); | 249 " that are expected to fail. File\n"); |
| 250 fprintf(stderr, | 250 fprintf(stderr, |
| 251 " should contain one test name per\n"); | 251 " should contain one test name per\n"); |
| 252 fprintf(stderr, | 252 fprintf(stderr, |
| 253 " line. Use '#' for comments.\n"); | 253 " line. Use '#' for comments.\n"); |
| 254 fprintf(stderr, |
| 255 " --enforce_recommended Enforce that recommended test\n"); |
| 256 fprintf(stderr, |
| 257 " cases are also passing. Specify\n"); |
| 258 fprintf(stderr, |
| 259 " this flag if you want to be\n"); |
| 260 fprintf(stderr, |
| 261 " strictly conforming to protobuf\n"); |
| 262 fprintf(stderr, |
| 263 " spec.\n"); |
| 254 exit(1); | 264 exit(1); |
| 255 } | 265 } |
| 256 | 266 |
| 257 void ParseFailureList(const char *filename, vector<string>* failure_list) { | 267 void ParseFailureList(const char *filename, vector<string>* failure_list) { |
| 258 std::ifstream infile(filename); | 268 std::ifstream infile(filename); |
| 259 | 269 |
| 260 if (!infile.is_open()) { | 270 if (!infile.is_open()) { |
| 261 fprintf(stderr, "Couldn't open failure list file: %s\n", filename); | 271 fprintf(stderr, "Couldn't open failure list file: %s\n", filename); |
| 262 exit(1); | 272 exit(1); |
| 263 } | 273 } |
| 264 | 274 |
| 265 for (string line; getline(infile, line);) { | 275 for (string line; getline(infile, line);) { |
| 266 // Remove whitespace. | 276 // Remove whitespace. |
| 267 line.erase(std::remove_if(line.begin(), line.end(), ::isspace), | 277 line.erase(std::remove_if(line.begin(), line.end(), ::isspace), |
| 268 line.end()); | 278 line.end()); |
| 269 | 279 |
| 270 // Remove comments. | 280 // Remove comments. |
| 271 line = line.substr(0, line.find("#")); | 281 line = line.substr(0, line.find("#")); |
| 272 | 282 |
| 273 if (!line.empty()) { | 283 if (!line.empty()) { |
| 274 failure_list->push_back(line); | 284 failure_list->push_back(line); |
| 275 } | 285 } |
| 276 } | 286 } |
| 277 } | 287 } |
| 278 | 288 |
| 279 int main(int argc, char *argv[]) { | 289 int main(int argc, char *argv[]) { |
| 280 char *program; | 290 char *program; |
| 281 google::protobuf::ConformanceTestSuite suite; | 291 google::protobuf::ConformanceTestSuite suite; |
| 282 | 292 |
| 293 string failure_list_filename; |
| 283 vector<string> failure_list; | 294 vector<string> failure_list; |
| 284 | 295 |
| 285 for (int arg = 1; arg < argc; ++arg) { | 296 for (int arg = 1; arg < argc; ++arg) { |
| 286 if (strcmp(argv[arg], "--failure_list") == 0) { | 297 if (strcmp(argv[arg], "--failure_list") == 0) { |
| 287 if (++arg == argc) UsageError(); | 298 if (++arg == argc) UsageError(); |
| 299 failure_list_filename = argv[arg]; |
| 288 ParseFailureList(argv[arg], &failure_list); | 300 ParseFailureList(argv[arg], &failure_list); |
| 289 } else if (strcmp(argv[arg], "--verbose") == 0) { | 301 } else if (strcmp(argv[arg], "--verbose") == 0) { |
| 290 suite.SetVerbose(true); | 302 suite.SetVerbose(true); |
| 303 } else if (strcmp(argv[arg], "--enforce_recommended") == 0) { |
| 304 suite.SetEnforceRecommended(true); |
| 291 } else if (argv[arg][0] == '-') { | 305 } else if (argv[arg][0] == '-') { |
| 292 fprintf(stderr, "Unknown option: %s\n", argv[arg]); | 306 fprintf(stderr, "Unknown option: %s\n", argv[arg]); |
| 293 UsageError(); | 307 UsageError(); |
| 294 } else { | 308 } else { |
| 295 if (arg != argc - 1) { | 309 if (arg != argc - 1) { |
| 296 fprintf(stderr, "Too many arguments.\n"); | 310 fprintf(stderr, "Too many arguments.\n"); |
| 297 UsageError(); | 311 UsageError(); |
| 298 } | 312 } |
| 299 program = argv[arg]; | 313 program = argv[arg]; |
| 300 } | 314 } |
| 301 } | 315 } |
| 302 | 316 |
| 303 suite.SetFailureList(failure_list); | 317 suite.SetFailureList(failure_list_filename, failure_list); |
| 304 ForkPipeRunner runner(program); | 318 ForkPipeRunner runner(program); |
| 305 | 319 |
| 306 std::string output; | 320 std::string output; |
| 307 bool ok = suite.RunSuite(&runner, &output); | 321 bool ok = suite.RunSuite(&runner, &output); |
| 308 | 322 |
| 309 fwrite(output.c_str(), 1, output.size(), stderr); | 323 fwrite(output.c_str(), 1, output.size(), stderr); |
| 310 | 324 |
| 311 return ok ? EXIT_SUCCESS : EXIT_FAILURE; | 325 return ok ? EXIT_SUCCESS : EXIT_FAILURE; |
| 312 } | 326 } |
| OLD | NEW |