tree-sitter/spec/rules_spec.cpp

97 lines
3.2 KiB
C++
Raw Normal View History

2013-11-07 13:24:01 -08:00
#include "spec_helper.h"
#include "rules.h"
2013-11-05 22:15:19 -08:00
#include "transition_map.h"
Describe(Rules) {
Describe(construction) {
rules::rule_ptr symbol1 = rules::sym("1");
rules::rule_ptr symbol2 = rules::sym("2");
rules::rule_ptr symbol3 = rules::sym("3");
It(constructs_binary_trees) {
AssertThat(
rules::seq({ symbol1, symbol2, symbol3 })->to_string(),
Equals(std::string("(seq (sym '1') (seq (sym '2') (sym '3')))")));
AssertThat(
rules::choice({ symbol1, symbol2, symbol3 })->to_string(),
Equals(std::string("(choice (sym '1') (choice (sym '2') (sym '3')))")));
}
};
2013-11-05 22:15:19 -08:00
Describe(transitions) {
rules::rule_ptr symbol1 = rules::sym("1");
rules::rule_ptr symbol2 = rules::sym("2");
rules::rule_ptr symbol3 = rules::sym("3");
rules::rule_ptr symbol4 = rules::sym("3");
rules::rule_ptr char1 = rules::character('a');
2013-11-05 22:15:19 -08:00
It(handles_symbols) {
AssertThat(
symbol1->transitions(),
2013-11-07 08:22:56 -08:00
EqualsTransitionMap(TransitionMap<rules::Rule>(
{ symbol1 },
{ rules::blank() }
2013-11-07 08:22:56 -08:00
)));
}
2013-11-07 08:22:56 -08:00
It(handles_characters) {
AssertThat(
char1->transitions(),
2013-11-07 08:22:56 -08:00
EqualsTransitionMap(TransitionMap<rules::Rule>(
{ char1 },
{ rules::blank() }
2013-11-07 08:22:56 -08:00
)));
2013-11-05 22:15:19 -08:00
}
It(handles_choices) {
AssertThat(
rules::choice({ symbol1, symbol2 })->transitions(),
2013-11-07 08:22:56 -08:00
EqualsTransitionMap(TransitionMap<rules::Rule>(
{ symbol1, symbol2 },
{ rules::blank(), rules::blank() }
2013-11-07 08:22:56 -08:00
)));
2013-11-05 22:15:19 -08:00
}
It(handles_sequences) {
AssertThat(
rules::seq({ symbol1, symbol2 })->transitions(),
2013-11-07 08:22:56 -08:00
EqualsTransitionMap(TransitionMap<rules::Rule>(
{ symbol1 },
{ symbol2 }
2013-11-07 08:22:56 -08:00
)));
2013-11-05 22:15:19 -08:00
}
It(handles_long_sequences) {
AssertThat(
rules::seq({
rules::seq({ symbol1, symbol2 }),
rules::seq({ symbol3, symbol4 }) })->transitions(),
2013-11-07 08:22:56 -08:00
EqualsTransitionMap(TransitionMap<rules::Rule>(
{ symbol1 },
{ rules::seq({ symbol2, symbol3, symbol4 }) }
2013-11-07 08:22:56 -08:00
)));
}
2013-11-05 22:15:19 -08:00
It(handles_choices_with_common_starting_symbols) {
AssertThat(
rules::choice({
rules::seq({ symbol1, symbol2 }),
rules::seq({ symbol1, symbol3 }) })->transitions(),
2013-11-07 08:22:56 -08:00
EqualsTransitionMap(TransitionMap<rules::Rule>(
{ symbol1 },
{ rules::choice({ symbol2, symbol3 }) }
2013-11-07 08:22:56 -08:00
)));
2013-11-05 22:15:19 -08:00
}
2013-11-07 18:30:00 -08:00
It(handles_strings) {
AssertThat(
rules::str("bad")->transitions(),
2013-11-07 18:30:00 -08:00
EqualsTransitionMap(TransitionMap<rules::Rule>(
{ rules::character('b') },
{ rules::seq({ rules::character('a'), rules::character('d') }) }
2013-11-07 18:30:00 -08:00
)));
}
};
2013-11-05 22:15:19 -08:00
};