Line data Source code
1 : #include "../inc/lexicalAnalysis/category.h"
2 : #include <catch2/catch_test_macros.hpp>
3 :
4 36 : TEST_CASE("Pruebas de la clase Category", "[category]") {
5 36 : using nicole::Category;
6 36 : using nicole::Location;
7 36 : using nicole::Token;
8 36 : using nicole::TokenType;
9 :
10 36 : SECTION("Constructor y métodos de acceso") {
11 9 : const Category category{TokenType::NUMBER_INT, "\\d+", false};
12 9 : REQUIRE(category.type() == TokenType::NUMBER_INT);
13 9 : REQUIRE(category.rawPattern() == "\\d+");
14 9 : REQUIRE(category.skip() == false);
15 9 : }
16 :
17 36 : SECTION("Coincidencia de patrones con tokens") {
18 9 : const Category category{TokenType::ID, "[a-zA-Z_][a-zA-Z0-9_]*", false};
19 9 : const Token token{TokenType::ID, "variable123", Location{"archivo.cpp", 1, 1}};
20 9 : REQUIRE(category.matchToken(token));
21 9 : }
22 :
23 36 : SECTION("No coincidencia de patrones con tokens") {
24 9 : const Category category{TokenType::NUMBER_FLOAT, "\\d+\\.\\d+", false};
25 9 : const Token token{TokenType::NUMBER_FLOAT, "123", Location{"archivo.cpp", 1, 1}};
26 9 : REQUIRE_FALSE(category.matchToken(token));
27 9 : }
28 :
29 36 : SECTION("Tokens que deben ser omitidos") {
30 9 : const Category category{TokenType::COMMENT, "//.*", true};
31 9 : REQUIRE(category.skip() == true);
32 9 : }
33 36 : }
|