#include "../../test.h" #include "arc/std/errno.h" #include "arc/std/parser.h" #include "arc/std/string.h" #include "arc/std/parser/parserlang.h" const uint32_t TEST_LAMBDA = 0; const uint32_t TEST_ALPHA_LOWER_CHAR = 1; const uint32_t TEST_ALPHA_UPPER_CHAR = 2; const uint32_t TEST_ALPHA_CHAR = 3; /* ~ parserlang tests ~ */ uint32_t TEST_ParserLang_GetIdFn(ARC_String *string){ if(ARC_String_EqualsCStringWithStrlen(string, "")){ return TEST_ALPHA_CHAR; } if(ARC_String_EqualsCStringWithStrlen(string, "ALPHA_LOWER_CHAR")){ return TEST_ALPHA_LOWER_CHAR; } if(ARC_String_EqualsCStringWithStrlen(string, "ALPHA_UPPER_CHAR")){ return TEST_ALPHA_UPPER_CHAR; } return ~(uint32_t)0; } ARC_TEST(Parser_ParserLang_BasicTest){ ARC_Parser *parser; ARC_ParserLang_CreateAsParser(&parser, TEST_ParserLang_GetIdFn); ARC_String *tempString; ARC_String_CreateWithStrlen(&tempString, " -> ALPHA_LOWER_CHAR | ALPHA_UPPER_CHAR\n"); //this destroys string, so no need for cleanup ARC_Parser_Parse(parser, &tempString); ARC_CHECK(arc_errno == 0); void *data = ARC_Parser_GetData(parser); ARC_ParserTag *tag = ARC_Vector_Get((ARC_Vector *)data, 0); ARC_CHECK(tag->tagId == TEST_ALPHA_CHAR); ARC_CHECK(tag->tokensOrTagsSize == 2); ARC_CHECK(tag->tokensOrTags[0][0] == 1); ARC_CHECK(tag->tokensOrTags[0][1] == TEST_ALPHA_LOWER_CHAR); ARC_CHECK(tag->tokensOrTags[1][0] == 1); ARC_CHECK(tag->tokensOrTags[1][1] == TEST_ALPHA_UPPER_CHAR); ARC_Parser_Destroy(parser); }