Line data Source code
1 : #include "../inc/lexicalAnalysis/token.h"
2 : #include <catch2/catch_test_macros.hpp>
3 :
4 36 : TEST_CASE("Pruebas de la clase Token", "[token]") {
5 36 : using nicole::Location;
6 36 : using nicole::Token;
7 36 : using nicole::TokenType;
8 36 : using std::filesystem::path;
9 :
10 36 : SECTION("Constructor y métodos de acceso") {
11 9 : const Token token{TokenType::NUMBER_INT, "123", Location{"archivo.cpp", 10, 5}};
12 9 : REQUIRE(token.type() == TokenType::NUMBER_INT);
13 9 : REQUIRE(token.raw() == "123");
14 9 : REQUIRE(token.location().file() == path{"archivo.cpp"});
15 9 : REQUIRE(token.location().row() == 10);
16 9 : REQUIRE(token.location().col() == 5);
17 9 : }
18 :
19 36 : SECTION("Información de ubicación formateada") {
20 9 : const Token token{TokenType::STRING, "\"hola\"", Location{"main.cpp", 20, 15}};
21 9 : REQUIRE(token.locInfo() == "main.cpp 20:15");
22 9 : }
23 :
24 36 : SECTION("Tokens con diferentes tipos y valores") {
25 9 : const Token tokenFloat{TokenType::NUMBER_FLOAT, "3.14",
26 9 : Location{"math.cpp", 5, 10}};
27 9 : REQUIRE(tokenFloat.type() == TokenType::NUMBER_FLOAT);
28 9 : REQUIRE(tokenFloat.raw() == "3.14");
29 :
30 9 : const Token tokenId{TokenType::ID, "variable", Location{"vars.cpp", 8, 2}};
31 9 : REQUIRE(tokenId.type() == TokenType::ID);
32 9 : REQUIRE(tokenId.raw() == "variable");
33 9 : }
34 :
35 36 : SECTION("Comparación de tokens") {
36 9 : const Token token1{TokenType::LET, "let", Location{"script.nic", 1, 1}};
37 9 : const Token token2{TokenType::LET, "let", Location{"script.nic", 1, 1}};
38 9 : const Token token3{TokenType::CONST, "const", Location{"script.nic", 1, 5}};
39 :
40 9 : REQUIRE(token1.type() == token2.type());
41 9 : REQUIRE(token1.raw() == token2.raw());
42 9 : REQUIRE(token1.location().file() == token2.location().file());
43 9 : REQUIRE(token1.location().row() == token2.location().row());
44 9 : REQUIRE(token1.location().col() == token2.location().col());
45 :
46 9 : REQUIRE(token1.type() != token3.type());
47 9 : REQUIRE(token1.raw() != token3.raw());
48 9 : REQUIRE(token1.location().col() != token3.location().col());
49 9 : }
50 36 : }
|