fixed double free of vector and parserlang and creating a parser by string should work now
This commit is contained in:
parent
5a5eaabc14
commit
4c3d357cb9
12 changed files with 298 additions and 82 deletions
52
tests/std/parser/parserlang.c
Normal file
52
tests/std/parser/parserlang.c
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
#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, "<alphaChar>")){
|
||||
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, "<alphaChar> -> 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);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue