tree-sitter/spec/rules_spec.cpp

81 lines
2.7 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(transitions) {
2013-11-07 08:22:56 -08:00
rules::Symbol symbol1 = rules::Symbol(1);
rules::Symbol symbol2 = rules::Symbol(2);
rules::Symbol symbol3 = rules::Symbol(3);
rules::Symbol symbol4 = rules::Symbol(3);
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>(
2013-11-05 22:15:19 -08:00
{ symbol1.copy() },
2013-11-07 08:22:56 -08:00
{ new rules::Blank() }
)));
}
It(handles_characters) {
rules::Char char1 = rules::Char('a');
AssertThat(
char1.transitions(),
EqualsTransitionMap(TransitionMap<rules::Rule>(
{ char1.copy() },
{ new rules::Blank() }
)));
2013-11-05 22:15:19 -08:00
}
It(handles_choices) {
AssertThat(
2013-11-07 08:22:56 -08:00
rules::Choice(symbol1, symbol2).transitions(),
EqualsTransitionMap(TransitionMap<rules::Rule>(
2013-11-05 22:15:19 -08:00
{ symbol1.copy(), symbol2.copy() },
2013-11-07 08:22:56 -08:00
{ new rules::Blank(), new rules::Blank() }
)));
2013-11-05 22:15:19 -08:00
}
It(handles_sequences) {
AssertThat(
2013-11-07 08:22:56 -08:00
rules::Seq(symbol1, symbol2).transitions(),
EqualsTransitionMap(TransitionMap<rules::Rule>(
2013-11-05 22:15:19 -08:00
{ symbol1.copy() },
{ symbol2.copy() }
2013-11-07 08:22:56 -08:00
)));
2013-11-05 22:15:19 -08:00
}
It(handles_long_sequences) {
AssertThat(
2013-11-07 08:22:56 -08:00
rules::Seq(
rules::Seq(symbol1, symbol2),
rules::Seq(symbol3, symbol4)).transitions(),
EqualsTransitionMap(TransitionMap<rules::Rule>(
{ symbol1.copy() },
2013-11-07 08:22:56 -08:00
{ new rules::Seq(symbol2, rules::Seq(symbol3, symbol4)) }
)));
}
2013-11-05 22:15:19 -08:00
It(handles_choices_with_common_starting_symbols) {
AssertThat(
2013-11-07 08:22:56 -08:00
rules::Choice(
rules::Seq(symbol1, symbol2),
rules::Seq(symbol1, symbol3)).transitions(),
EqualsTransitionMap(TransitionMap<rules::Rule>(
2013-11-05 22:15:19 -08:00
{ symbol1.copy() },
2013-11-07 08:22:56 -08:00
{ new rules::Choice(symbol2, symbol3) }
)));
2013-11-05 22:15:19 -08:00
}
2013-11-07 18:30:00 -08:00
It(handles_strings) {
AssertThat(
rules::String("bad").transitions(),
EqualsTransitionMap(TransitionMap<rules::Rule>(
{ new rules::Char('b') },
{ new rules::Seq(rules::Char('a'), rules::Char('d')) }
)));
}
};
2013-11-05 22:15:19 -08:00
};