LCOV - code coverage report
Current view: top level - test/options - test_optionsParser.cc (source / functions) Coverage Total Hit
Test: coverage.info Lines: 100.0 % 233 233
Test Date: 2025-04-18 15:53:49 Functions: 100.0 % 1 1

            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              : 
        

Generated by: LCOV version 2.0-1