#include "getopt.h"
#include "testfx.h"
#include "testsupport.h"
option null_opt = {0};
TEST_F(getopt_fixture, test_getopt_long_empty) {
char* argv[] = {"foo.exe"};
option opts[] = {null_opt};
assert_equal(-1, (char)getopt_long(count(argv), argv, "abc", opts, NULL));
}
TEST_F(getopt_fixture, test_getopt_long_only_nonoptions) {
char* argv[] = {"foo.exe", "nonoption"};
option opts[] = {null_opt};
assert_equal(-1, (char)getopt_long(count(argv), argv, "a", opts, NULL));
}
TEST_F(getopt_fixture, test_getopt_long_only_shortopts) {
char* argv[] = {"foo.exe", "-a", "-b"};
option opts[] = {null_opt};
assert_equal('a', (char)getopt_long(count(argv), argv, "ab", opts, NULL));
assert_equal('b', (char)getopt_long(count(argv), argv, "ab", opts, NULL));
}
TEST_F(getopt_fixture, test_getopt_long_one_longopt) {
char* argv[] = {"foo.exe", "--first", "-a"};
option opts[] = {
{"first", no_argument, NULL, 'f'},
null_opt
};
assert_equal('f', (char)getopt_long(count(argv), argv, "ab", opts, NULL));
assert_equal('a', (char)getopt_long(count(argv), argv, "ab", opts, NULL));
}
TEST_F(getopt_fixture, test_getopt_long_two_longopts) {
char* argv[] = {"foo.exe", "--second", "--first"};
option opts[] = {
{"first", no_argument, NULL, 'f'},
{"second", no_argument, NULL, 's'},
null_opt
};
assert_equal('s', (char)getopt_long(count(argv), argv, "fs", opts, NULL));
assert_equal('f', (char)getopt_long(count(argv), argv, "fs", opts, NULL));
}
TEST_F(getopt_fixture, test_getopt_long_abbreviated) {
char* argv[] = {"foo.exe", "--fir", "--fif"};
option opts[] = {
{"first", no_argument, NULL, '1'},
{"fifth", no_argument, NULL, '5'},
null_opt
};
assert_equal('1', (char)getopt_long(count(argv), argv, "15", opts, NULL));
assert_equal('5', (char)getopt_long(count(argv), argv, "15", opts, NULL));
}
TEST_F(getopt_fixture, test_getopt_long_abbreviated_with_params) {
char* argv[] = {"foo.exe", "--fir=100", "--fif=500"};
option opts[] = {
{"first", required_argument, NULL, '1'},
{"fifth", required_argument, NULL, '5'},
null_opt
};
assert_equal('1', (char)getopt_long(count(argv), argv, "15", opts, NULL));
assert_equal("100", optarg);
assert_equal('5', (char)getopt_long(count(argv), argv, "15", opts, NULL));
assert_equal("500", optarg);
}
TEST_F(getopt_fixture, test_getopt_long_ambiguous_abbrev) {
char* argv[] = {"foo.exe", "--fi", "--fi"};
option opts[] = {
{"first", no_argument, NULL, '1'},
{"fifth", no_argument, NULL, '5'},
null_opt
};
// Ambiguous match
assert_equal('?', (char)getopt_long(count(argv), argv, "15", opts, NULL));
}
TEST_F(getopt_fixture, test_getopt_long_longindex) {
char* argv[] = {"foo.exe", "--second", "--first"};
option opts[] = {
{"first", no_argument, NULL, '1'},
{"second", no_argument, NULL, '2'},
null_opt
};
int longindex = -1;
getopt_long(count(argv), argv, "", opts, &longindex);
assert_equal(1, longindex);
getopt_long(count(argv), argv, "", opts, &longindex);
assert_equal(0, longindex);
}
TEST_F(getopt_fixture, test_getopt_long_flag) {
char* argv[] = {"foo.exe", "--second", "--first"};
int flag = 0;
option opts[] = {
{"first", no_argument, &flag, '1'},
{"second", no_argument, NULL, '2'},
null_opt
};
assert_equal('2', getopt_long(count(argv), argv, "12", opts, NULL));
assert_equal(0, getopt_long(count(argv), argv, "12", opts, NULL));
assert_equal('1', flag);
}
TEST_F(getopt_fixture, test_getopt_long_unknown) {
char* argv[] = {"foo.exe", "--unknown"};
option opts[] = {
{"first", no_argument, NULL, '1'},
{"second", no_argument, NULL, '2'},
null_opt
};
assert_equal('?', getopt_long(count(argv), argv, "12", opts, NULL));
assert_equal(2, optind); // optind should be incremented
}
TEST_F(getopt_fixture, test_getopt_long_required_argument_same_argv) {
char* argv[] = {"foo.exe", "--arg=value"};
option opts[] = {
{"arg", required_argument, NULL, 'a'},
null_opt
};
assert_equal('a', getopt_long(count(argv), argv, "a:", opts, NULL));
assert_equal("value", optarg);
}
TEST_F(getopt_fixture, test_getopt_long_required_argument_separate_argv) {
char* argv[] = {"foo.exe", "--arg", "value"};
option opts[] = {
{"arg", required_argument, NULL, 'a'},
null_opt
};
assert_equal('a', getopt_long(count(argv), argv, "a:", opts, NULL));
assert_equal("value", optarg);
}
TEST_F(getopt_fixture, test_getopt_long_missing_required_argument) {
char* argv[] = {"foo.exe", "--arg"};
option opts[] = {
{"arg", required_argument, NULL, 'a'},
null_opt
};
assert_equal(':', getopt_long(count(argv), argv, "a:", opts, NULL));
assert_equal((char*)NULL, optarg);
assert_equal(3, optind); // optind should be incremented past argc looking
// for args
}
TEST_F(getopt_fixture, test_getopt_long_extraneous_argument) {
option opts[] = {
{"arg", no_argument, NULL, 'a'},
null_opt
};
char* argv[] = {"foo.exe", "--arg=bar"};
assert_equal('?', getopt_long(count(argv), argv, "a", opts, NULL));
assert_equal((char*)NULL, optarg);
}
TEST_F(getopt_fixture, test_getopt_long_empty_required_argument) {
char* argv[] = {"foo.exe", "--arg="};
option opts[] = {
{"arg", required_argument, NULL, 'a'},
null_opt
};
assert_equal('a', getopt_long(count(argv), argv, "a:", opts, NULL));
assert_equal("", optarg);
}
TEST_F(getopt_fixture, test_getopt_long_optional_argument_same_argv) {
char* argv[] = {"foo.exe", "--arg=value"};
option opts[] = {
{"arg", optional_argument, NULL, 'a'},
null_opt
};
assert_equal('a', getopt_long(count(argv), argv, "a::", opts, NULL));
assert_equal("value", optarg);
}
TEST_F(getopt_fixture, test_getopt_long_optional_argument_separate_argv) {
char* argv[] = {"foo.exe", "--arg", "value"};
option opts[] = {
{"arg", optional_argument, NULL, 'a'},
null_opt
};
assert_equal('a', getopt_long(count(argv), argv, "a::", opts, NULL));
assert_equal((char*)NULL, optarg);
}
TEST_F(getopt_fixture, test_getopt_long_missing_optional_argument) {
char* argv[] = {"foo.exe", "--arg"};
option opts[] = {
{"arg", optional_argument, NULL, 'a'},
null_opt
};
assert_equal('a', getopt_long(count(argv), argv, "a::", opts, NULL));
assert_equal((char*)NULL, optarg);
assert_equal(2, optind);
}
TEST_F(getopt_fixture, test_getopt_long_empty_optional_argument) {
char* argv[] = {"foo.exe", "--arg="};
option opts[] = {
{"arg", optional_argument, NULL, 'a'},
null_opt
};
assert_equal('a', getopt_long(count(argv), argv, "a::", opts, NULL));
assert_equal("", optarg);
}
TEST_F(getopt_fixture, test_getopt_long_resets_optarg) {
// First use getopt() to put something into optarg.
char* argv[] = {"foo.exe", "-avalue"};
assert_equal('a', getopt(count(argv), argv, "a:"));
assert_equal("value", optarg);
optind = 1;
// Then make sure that getopt_long() doesn't get that value out
// when a non-option is processed
option opts[] = {
{"arg", optional_argument, NULL, 'a'},
null_opt
};
char* long_argv[] = {"foo.exe", "this"};
assert_equal(-1, getopt_long(count(long_argv), long_argv, "a::", opts, NULL));
assert_equal((char*)NULL, optarg);
}
TEST_F(getopt_fixture, test_getopt_long_resets_optopt) {
// First use getopt() to put something into optopt.
char* argv[] = {"foo.exe", "-z"};
assert_equal('?', getopt(count(argv), argv, "a"));
assert_equal('z', optopt);
optind = 1;
// Then make sure that getopt_long() doesn't get that value out
// when a non-option is processed
option opts[] = {
{"arg", no_argument, NULL, 'a'},
null_opt
};
char* long_argv[] = {"foo.exe", "--zarg"};
assert_equal('?', getopt_long(count(long_argv), long_argv, "a", opts, NULL));
assert_equal(0, optopt);
}
C++ getopt 库使用
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 原因: 需要使用node.bcrypt.js库来进行文件加密。 但是该库使用c++实现。 在ubuntu中已有gc...
- 本随笔系列主要介绍从一个Windows平台从事C#开发到Mac平台苹果开发的一系列感想和体验历程,本系列文章是在起...
- c++工程生成的动态链接库如果想给别的工程(包括.net工程,MFC工程等)使用,就必须遵守一些规则进行编译导出动...