char* argv2[] = { const_cast<char*>("progName"),
const_cast<char*>("-x") };
argc = 2;
- EXPECT_THROW_MSG(parseArgs(argc, argv2), InvalidUsage, "unsupported option: [x] ");
+ EXPECT_THROW_MSG(parseArgs(argc, argv2), InvalidUsage, "unsupported option: -x");
}
// Tests application process creation and initialization.
char* argv2[] = { const_cast<char*>("progName"),
const_cast<char*>("-x") };
argc = 2;
- EXPECT_THROW_MSG(parseArgs(argc, argv2), InvalidUsage, "unsupported option: [x] ");
+ EXPECT_THROW_MSG(parseArgs(argc, argv2), InvalidUsage, "unsupported option: -x");
}
/// @brief Tests application process creation and initialization.
char* argv2[] = { const_cast<char*>("progName"),
const_cast<char*>("-x") };
argc = 2;
- EXPECT_THROW_MSG(parseArgs(argc, argv2), InvalidUsage, "unsupported option: [x] ");
+ EXPECT_THROW_MSG(parseArgs(argc, argv2), InvalidUsage, "unsupported option: -x");
}
// Tests application process creation and initialization.
break;
case '?': {
+ char const saved_optopt(optopt);
+ std::string const saved_optarg(optarg ? optarg : std::string());
+
+ // Exhaust all remaining options in case parseArgs() is called again.
+ while (getopt(argc, argv, opts.c_str()) != -1) {
+ }
+
// We hit an invalid option.
- isc_throw(InvalidUsage, "unsupported option: ["
- << static_cast<char>(optopt) << "] "
- << (!optarg ? "" : optarg));
+ isc_throw(InvalidUsage, "unsupported option: -" << saved_optopt <<
+ (saved_optarg.empty() ? std::string() : " " + saved_optarg));
break;
}
default:
// We hit a valid custom option
if (!customOption(ch, optarg)) {
- // This would be a programmatic error.
- isc_throw(InvalidUsage, " Option listed but implemented?: ["
- << static_cast<char>(ch) << "] "
- << (!optarg ? "" : optarg));
+ char const saved_optopt(optopt);
+ std::string const saved_optarg(optarg ? optarg : std::string());
+
+ // Exhaust all remaining options in case parseArgs() is called again.
+ while (getopt(argc, argv, opts.c_str()) != -1) {
+ }
+
+ // We hit an invalid option.
+ isc_throw(InvalidUsage, "unsupported option: -" << saved_optopt <<
+ (saved_optarg.empty() ? std::string() : " " + saved_optarg));
}
break;
}
char* argv2[] = { const_cast<char*>("progName"),
const_cast<char*>("-bs") };
argc = 2;
- EXPECT_THROW_MSG(parseArgs(argc, argv2), InvalidUsage, "unsupported option: [b] ");
+ EXPECT_THROW_MSG(parseArgs(argc, argv2), InvalidUsage, "unsupported option: -b");
// Verify that extraneous information is detected.
char* argv3[] = { const_cast<char*>("progName"),
const_cast<char*>("extra"),
const_cast<char*>("information") };
argc = 3;
- EXPECT_THROW_MSG(parseArgs(argc, argv3), InvalidUsage, "unsupported option: [s] ");
+ EXPECT_THROW_MSG(parseArgs(argc, argv3), InvalidUsage, "extraneous command line information");
}
/// @brief Tests application process creation and initialization.