forked from kimgr/getopt_port
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgetopt_tests.cpp
107 lines (83 loc) · 3.34 KB
/
getopt_tests.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#include "getopt.h"
#include "testfx.h"
#include "testsupport.h"
TEST_F(getopt_fixture, test_getopt_empty) {
char* argv[] = {"foo.exe"};
assert_equal(-1, getopt(count(argv), argv, "abc"));
}
TEST_F(getopt_fixture, test_getopt_simple) {
char* argv[] = {"foo.exe", "-a"};
assert_equal('a', getopt(count(argv), argv, "a"));
}
TEST_F(getopt_fixture, test_getopt_unrecognized) {
char* argv[] = {"foo.exe", "-a"};
assert_equal('?', getopt(count(argv), argv, "cde"));
}
TEST_F(getopt_fixture, test_getopt_only_nonoptions) {
char* argv[] = {"foo.exe", "nonoption"};
assert_equal(-1, getopt(count(argv), argv, "a"));
}
TEST_F(getopt_fixture, test_getopt_consume_subset) {
char* argv[] = {"foo.exe", "-f", "-g", "-h"};
assert_equal('f', getopt(count(argv), argv, "fgh"));
assert_equal('g', getopt(count(argv), argv, "fgh"));
}
TEST_F(getopt_fixture, test_getopt_multiple_options_separate_argv) {
char* argv[] = {"foo.exe", "-a", "-b"};
assert_equal('a', getopt(count(argv), argv, "ab"));
assert_equal('b', getopt(count(argv), argv, "ab"));
}
TEST_F(getopt_fixture, test_getopt_multiple_options_same_argv) {
char* argv[] = {"foo.exe", "-ba"};
assert_equal('b', getopt(count(argv), argv, "ab"));
assert_equal('a', getopt(count(argv), argv, "ab"));
}
TEST_F(getopt_fixture, test_getopt_embedded_nonoptions) {
char* argv[] = {"foo.exe", "-a", "nonoption1", "nonoption2", "-b"};
assert_equal('a', getopt(count(argv), argv, "ab"));
// The non-option argument "nonoption1" terminates the scan
assert_equal(-1, getopt(count(argv), argv, "ab"));
}
TEST_F(getopt_fixture, test_getopt_argument_same_argv) {
char* argv[] = {"foo.exe", "-aargument"};
assert_equal('a', getopt(count(argv), argv, "a:"));
assert_equal("argument", optarg);
}
TEST_F(getopt_fixture, test_getopt_argument_separate_argv) {
char* argv[] = {"foo.exe", "-a", "argument"};
assert_equal('a', getopt(count(argv), argv, "a:"));
assert_equal("argument", optarg);
}
TEST_F(getopt_fixture, test_getopt_missing_required_argument) {
char* argv[] = {"foo.exe", "-a"};
assert_equal('?', getopt(count(argv), argv, "a:"));
assert_equal('a', optopt);
assert_equal((char*)NULL, optarg);
assert_equal(3, optind); // optind should be incremented past argc looking
// for args
}
TEST_F(getopt_fixture, test_getopt_missing_required_argument_colon) {
char* argv[] = {"foo.exe", "-a"};
assert_equal(':', getopt(count(argv), argv, ":a:"));
assert_equal('a', optopt);
assert_equal((char*)NULL, optarg);
assert_equal(3, optind); // optind should be incremented past argc looking
// for args
}
TEST_F(getopt_fixture, test_getopt_optional_argument) {
char* argv[] = {"foo.exe", "-aargument"};
assert_equal('a', getopt(count(argv), argv, "a::"));
assert_equal("argument", optarg);
}
TEST_F(getopt_fixture, test_getopt_missing_optional_argument) {
char* argv[] = {"foo.exe", "-a"};
assert_equal('a', getopt(count(argv), argv, "a::"));
assert_equal((char*)NULL, optarg);
}
TEST_F(getopt_fixture, test_getopt_optopt) {
char* argv[] = {"foo.exe", "-a", "-b"};
assert_equal('a', getopt(count(argv), argv, "a"));
assert_equal('a', optopt);
assert_equal('?', getopt(count(argv), argv, "a"));
assert_equal('b', optopt);
}