Implement character class parsing
This commit is contained in:
@@ -211,6 +211,40 @@ static void dot_question_mark_is_parsed_as_zero_or_one_wildcard(void)
|
||||
regex_free_children(&r);
|
||||
}
|
||||
|
||||
static void a_in_brackets_is_parsed_as_class_containing_only_a(void)
|
||||
{
|
||||
regex_t r = { 0 };
|
||||
const int result = PARSE_REGEX_STRING("[a]", &r);
|
||||
ASSERT_NE(-1, result);
|
||||
|
||||
ASSERT_EQ(1, r.sequence.len);
|
||||
ASSERT_EQ(QUANTIFIER_NONE, r.sequence.contents[0].quantifier);
|
||||
ASSERT_EQ(TERM_TYPE_CLASS, r.sequence.contents[0].type);
|
||||
ASSERT_FALSE(r.sequence.contents[0].class.negated);
|
||||
ASSERT_EQ(1, r.sequence.contents[0].class.count);
|
||||
ASSERT_NOT_NULL(r.sequence.contents[0].class.contents);
|
||||
ASSERT_EQ('a', r.sequence.contents[0].class.contents[0]);
|
||||
|
||||
regex_free_children(&r);
|
||||
}
|
||||
|
||||
static void caret_a_in_brackets_parses_as_negated_class(void)
|
||||
{
|
||||
regex_t r = { 0 };
|
||||
const int result = PARSE_REGEX_STRING("[^a]", &r);
|
||||
ASSERT_NE(-1, result);
|
||||
|
||||
ASSERT_EQ(1, r.sequence.len);
|
||||
ASSERT_EQ(QUANTIFIER_NONE, r.sequence.contents[0].quantifier);
|
||||
ASSERT_EQ(TERM_TYPE_CLASS, r.sequence.contents[0].type);
|
||||
ASSERT_TRUE(r.sequence.contents[0].class.negated);
|
||||
ASSERT_EQ(1, r.sequence.contents[0].class.count);
|
||||
ASSERT_NOT_NULL(r.sequence.contents[0].class.contents);
|
||||
ASSERT_EQ('a', r.sequence.contents[0].class.contents[0]);
|
||||
|
||||
regex_free_children(&r);
|
||||
}
|
||||
|
||||
int main(void)
|
||||
{
|
||||
TESTING_BEGIN();
|
||||
@@ -228,5 +262,7 @@ int main(void)
|
||||
dot_star_is_parsed_as_zero_or_more_wildcard();
|
||||
dot_plus_is_parsed_as_one_or_more_wildcard();
|
||||
dot_question_mark_is_parsed_as_zero_or_one_wildcard();
|
||||
a_in_brackets_is_parsed_as_class_containing_only_a();
|
||||
caret_a_in_brackets_parses_as_negated_class();
|
||||
return TESTING_END();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user