Line data Source code
1 : #include "../inc/options/optionsParser.h"
2 : #include <catch2/catch_test_macros.hpp>
3 : #include <string_view>
4 : #include <vector>
5 :
6 : TEST_CASE("Pruebas de OptionsParser con diferentes cantidades de argumentos",
7 243 : "[OptionsParser]") {
8 243 : using nicole::Error;
9 243 : using nicole::ERROR_TYPE;
10 243 : using nicole::Options;
11 243 : using nicole::OptionsParser;
12 :
13 243 : SECTION("Sin argumentos (tamaño 0)") {
14 9 : auto result = OptionsParser::parse(std::vector<std::string_view>{});
15 9 : REQUIRE_FALSE(result.has_value());
16 9 : REQUIRE(result.error().type() == ERROR_TYPE::MISSING_ARGUMENTS);
17 9 : }
18 :
19 243 : SECTION("Un argumento (tamaño 1)") {
20 54 : SECTION("Solo archivo de entrada") {
21 9 : auto result =
22 9 : OptionsParser::parse(std::vector<std::string_view>{"archivo.cpp"});
23 9 : REQUIRE(result.has_value());
24 9 : REQUIRE(result->entryFilePath() == "archivo.cpp");
25 9 : REQUIRE(result->binaryName() == "a.out");
26 9 : REQUIRE_FALSE(result->help());
27 9 : REQUIRE_FALSE(result->optimize());
28 9 : }
29 :
30 54 : SECTION("Opción -h") {
31 9 : auto result = OptionsParser::parse({"-h"});
32 9 : REQUIRE(result.has_value());
33 9 : REQUIRE(result->help());
34 9 : REQUIRE(result->binaryName() == "a.out");
35 9 : REQUIRE(result->entryFilePath().empty());
36 9 : REQUIRE_FALSE(result->optimize());
37 9 : }
38 :
39 54 : SECTION("Opción --help") {
40 9 : auto result = OptionsParser::parse({"--help"});
41 9 : REQUIRE(result.has_value());
42 9 : REQUIRE(result->help());
43 9 : REQUIRE(result->binaryName() == "a.out");
44 9 : REQUIRE(result->entryFilePath().empty());
45 9 : REQUIRE_FALSE(result->optimize());
46 9 : }
47 :
48 54 : SECTION("Opción -o sin archivo de entrada") {
49 9 : auto result = OptionsParser::parse(std::vector<std::string_view>{"-o"});
50 9 : REQUIRE_FALSE(result.has_value());
51 9 : REQUIRE(result.error().type() == ERROR_TYPE::MISSING_ENTRY_FILE);
52 9 : }
53 :
54 54 : SECTION("Opción -n sin nombre de binario") {
55 9 : auto result = OptionsParser::parse(std::vector<std::string_view>{"-n"});
56 9 : REQUIRE_FALSE(result.has_value());
57 9 : REQUIRE(result.error().type() == ERROR_TYPE::MISSING_BINARY_NAME);
58 9 : }
59 :
60 54 : SECTION("Opción desconocida") {
61 9 : auto result = OptionsParser::parse(std::vector<std::string_view>{"-x"});
62 9 : REQUIRE(result.has_value());
63 9 : REQUIRE(result->entryFilePath() == "-x");
64 9 : REQUIRE(result->binaryName() == "a.out");
65 9 : REQUIRE_FALSE(result->help());
66 9 : REQUIRE_FALSE(result->optimize());
67 9 : }
68 54 : }
69 :
70 243 : SECTION("Dos argumentos (tamaño 2)") {
71 54 : SECTION("Opción -h y archivo de entrada") {
72 9 : auto result = OptionsParser::parse(
73 9 : std::vector<std::string_view>{"-h", "archivo.cpp"});
74 9 : REQUIRE(result.has_value());
75 9 : REQUIRE(result->help());
76 9 : REQUIRE(result->entryFilePath() == "archivo.cpp");
77 9 : REQUIRE(result->binaryName() == "a.out");
78 9 : REQUIRE_FALSE(result->optimize());
79 9 : }
80 :
81 54 : SECTION("Archivo de entrada y opción -h") {
82 9 : auto result = OptionsParser::parse(
83 9 : std::vector<std::string_view>{"archivo.cpp", "-h"});
84 9 : REQUIRE(result.has_value());
85 9 : REQUIRE(result->help());
86 9 : REQUIRE(result->entryFilePath() == "archivo.cpp");
87 9 : REQUIRE(result->binaryName() == "a.out");
88 9 : REQUIRE_FALSE(result->optimize());
89 9 : }
90 :
91 54 : SECTION("Archivo de entrada y opción -o") {
92 9 : auto result = OptionsParser::parse(
93 9 : std::vector<std::string_view>{"archivo.cpp", "-o"});
94 9 : REQUIRE(result.has_value());
95 9 : REQUIRE(result->entryFilePath() == "archivo.cpp");
96 9 : REQUIRE(result->binaryName() == "a.out");
97 9 : REQUIRE_FALSE(result->help());
98 9 : REQUIRE(result->optimize());
99 9 : }
100 :
101 54 : SECTION("Opción -o y archivo de entrada") {
102 9 : auto result = OptionsParser::parse(
103 9 : std::vector<std::string_view>{"-o", "archivo.cpp"});
104 9 : REQUIRE(result.has_value());
105 9 : REQUIRE(result->entryFilePath() == "archivo.cpp");
106 9 : REQUIRE(result->binaryName() == "a.out");
107 9 : REQUIRE_FALSE(result->help());
108 9 : REQUIRE(result->optimize());
109 9 : }
110 :
111 54 : SECTION("Opción -n seguida de nombre de binario") {
112 9 : auto result = OptionsParser::parse(
113 9 : std::vector<std::string_view>{"-n", "miBinario"});
114 9 : REQUIRE_FALSE(result.has_value());
115 9 : REQUIRE(result.error().type() == ERROR_TYPE::MISSING_ENTRY_FILE);
116 9 : }
117 :
118 54 : SECTION("Archivo de entrada y opción -n sin nombre de binario") {
119 9 : auto result = OptionsParser::parse(
120 9 : std::vector<std::string_view>{"archivo.cpp", "-n"});
121 9 : REQUIRE_FALSE(result.has_value());
122 9 : REQUIRE(result.error().type() == ERROR_TYPE::MISSING_BINARY_NAME);
123 9 : }
124 54 : }
125 :
126 243 : SECTION("Tres argumentos (tamaño 3)") {
127 63 : SECTION("Opción -h, opción -o y archivo de entrada") {
128 9 : auto result = OptionsParser::parse(
129 9 : std::vector<std::string_view>{"-h", "-o", "archivo.cpp"});
130 9 : REQUIRE(result.has_value());
131 9 : REQUIRE(result->help());
132 9 : REQUIRE(result->entryFilePath() == "archivo.cpp");
133 9 : REQUIRE(result->binaryName() == "a.out");
134 9 : REQUIRE(result->optimize());
135 9 : }
136 :
137 63 : SECTION("Archivo de entrada, opción -h y opción -o") {
138 9 : auto result = OptionsParser::parse(
139 9 : std::vector<std::string_view>{"archivo.cpp", "-h", "-o"});
140 9 : REQUIRE(result.has_value());
141 9 : REQUIRE(result->help());
142 9 : REQUIRE(result->entryFilePath() == "archivo.cpp");
143 9 : REQUIRE(result->binaryName() == "a.out");
144 9 : REQUIRE(result->optimize());
145 9 : }
146 :
147 63 : SECTION("Opción -o, opción -h y archivo de entrada") {
148 9 : auto result = OptionsParser::parse(
149 9 : std::vector<std::string_view>{"-o", "-h", "archivo.cpp"});
150 9 : REQUIRE(result.has_value());
151 9 : REQUIRE(result->help());
152 9 : REQUIRE(result->entryFilePath() == "archivo.cpp");
153 9 : REQUIRE(result->binaryName() == "a.out");
154 9 : REQUIRE(result->optimize());
155 9 : }
156 :
157 63 : SECTION("Archivo de entrada, opción -o y opción -n con nombre de binario") {
158 9 : auto result = OptionsParser::parse(std::vector<std::string_view>{
159 9 : "archivo.cpp", "-o", "-n", "miBinario"});
160 9 : REQUIRE(result.has_value());
161 9 : REQUIRE(result->entryFilePath() == "archivo.cpp");
162 9 : REQUIRE(result->binaryName() == "miBinario");
163 9 : REQUIRE_FALSE(result->help());
164 9 : REQUIRE(result->optimize());
165 9 : }
166 :
167 63 : SECTION("Opción -o, archivo de entrada y opción -n con nombre de binario") {
168 9 : auto result = OptionsParser::parse(std::vector<std::string_view>{
169 9 : "-o", "archivo.cpp", "-n", "miBinario"});
170 9 : REQUIRE(result.has_value());
171 9 : REQUIRE(result->entryFilePath() == "archivo.cpp");
172 9 : REQUIRE(result->binaryName() == "miBinario");
173 9 : REQUIRE_FALSE(result->help());
174 9 : REQUIRE(result->optimize());
175 9 : }
176 :
177 63 : SECTION("Opción -n con nombre de binario, opción -o y archivo de entrada") {
178 9 : auto result = OptionsParser::parse(std::vector<std::string_view>{
179 9 : "-n", "miBinario", "-o", "archivo.cpp"});
180 9 : REQUIRE(result.has_value());
181 9 : REQUIRE(result->entryFilePath() == "archivo.cpp");
182 9 : REQUIRE(result->binaryName() == "miBinario");
183 9 : REQUIRE_FALSE(result->help());
184 9 : REQUIRE(result->optimize());
185 9 : }
186 :
187 63 : SECTION("Opción -n sin nombre de binario y archivo de entrada") {
188 9 : auto result = OptionsParser::parse(
189 9 : std::vector<std::string_view>{"-n", "archivo.cpp", "-o"});
190 9 : REQUIRE_FALSE(result.has_value());
191 9 : REQUIRE(result.error().type() == ERROR_TYPE::MISSING_ENTRY_FILE);
192 9 : }
193 63 : }
194 :
195 243 : SECTION("Cuatro argumentos (tamaño 4)") {
196 27 : SECTION("Opción -h, opción -o, opción -n con nombre de binario y archivo "
197 9 : "de entrada") {
198 9 : auto result = OptionsParser::parse(std::vector<std::string_view>{
199 9 : "-h", "-o", "-n", "miBinario", "archivo.cpp"});
200 9 : REQUIRE(result.has_value());
201 9 : REQUIRE(result->help());
202 9 : REQUIRE(result->entryFilePath() == "archivo.cpp");
203 9 : REQUIRE(result->binaryName() == "miBinario");
204 9 : REQUIRE(result->optimize());
205 9 : }
206 :
207 27 : SECTION("Archivo de entrada, opción -h, opción -o y opción -n con nombre "
208 9 : "de binario") {
209 9 : auto result = OptionsParser::parse(std::vector<std::string_view>{
210 9 : "archivo.cpp", "-h", "-o", "-n", "miBinario"});
211 9 : REQUIRE(result.has_value());
212 9 : REQUIRE(result->help());
213 9 : REQUIRE(result->entryFilePath() == "archivo.cpp");
214 9 : REQUIRE(result->binaryName() == "miBinario");
215 9 : REQUIRE(result->optimize());
216 9 : }
217 :
218 27 : SECTION("Opción -n con nombre de binario, opción -h, opción -o y archivo "
219 9 : "de entrada") {
220 9 : auto result = OptionsParser::parse(std::vector<std::string_view>{
221 9 : "-n", "miBinario", "-h", "-o", "archivo.cpp"});
222 9 : REQUIRE(result.has_value());
223 9 : REQUIRE(result->help());
224 9 : REQUIRE(result->entryFilePath() == "archivo.cpp");
225 9 : REQUIRE(result->binaryName() == "miBinario");
226 9 : REQUIRE(result->optimize());
227 9 : }
228 27 : }
229 :
230 243 : SECTION("Opción -o, opción -n con nombre de binario y archivo de entrada") {
231 9 : auto result = OptionsParser::parse(
232 9 : std::vector<std::string_view>{"-o", "-n", "miBinario", "archivo.cpp"});
233 9 : REQUIRE(result.has_value());
234 9 : REQUIRE(result->entryFilePath() == "archivo.cpp");
235 9 : REQUIRE(result->binaryName() == "miBinario");
236 9 : REQUIRE_FALSE(result->help());
237 9 : REQUIRE(result->optimize());
238 9 : }
239 :
240 243 : SECTION("Archivo de entrada, opción -o y opción -n con nombre de binario") {
241 9 : auto result = OptionsParser::parse(
242 9 : std::vector<std::string_view>{"archivo.cpp", "-o", "-n", "miBinario"});
243 9 : REQUIRE(result.has_value());
244 9 : REQUIRE(result->entryFilePath() == "archivo.cpp");
245 9 : REQUIRE(result->binaryName() == "miBinario");
246 9 : REQUIRE_FALSE(result->help());
247 9 : REQUIRE(result->optimize());
248 9 : }
249 :
250 243 : SECTION("Opción -n con nombre de binario, opción -o y archivo de entrada") {
251 9 : auto result = OptionsParser::parse(
252 9 : std::vector<std::string_view>{"-n", "miBinario", "-o", "archivo.cpp"});
253 9 : REQUIRE(result.has_value());
254 9 : REQUIRE(result->entryFilePath() == "archivo.cpp");
255 9 : REQUIRE(result->binaryName() == "miBinario");
256 9 : REQUIRE_FALSE(result->help());
257 9 : REQUIRE(result->optimize());
258 9 : }
259 :
260 243 : SECTION("Opción -n sin nombre de binario, opción -o y archivo de entrada") {
261 9 : auto result = OptionsParser::parse(
262 9 : std::vector<std::string_view>{"-n", "-o", "archivo.cpp", "miBinario"});
263 9 : REQUIRE_FALSE(result.has_value());
264 9 : REQUIRE(result.error().type() == ERROR_TYPE::MISSING_BINARY_NAME);
265 9 : }
266 243 : }
267 :
|