package com.googlecode.totallylazy.parser;
import com.googlecode.totallylazy.Sequence;
import com.googlecode.totallylazy.Sequences;
import org.junit.Test;
import static com.googlecode.totallylazy.Segment.constructors.characters;
import static com.googlecode.totallylazy.Segment.constructors.emptySegment;
import static com.googlecode.totallylazy.Sequences.sequence;
import static com.googlecode.totallylazy.matchers.Matchers.is;
import static com.googlecode.totallylazy.parser.CharacterParser.character;
import static org.hamcrest.MatcherAssert.assertThat;
public class SequenceParserTest {
@Test
public void doesNotThrowIfNoCharacters() throws Exception {
Result<Sequence<Character>> result = SequenceParser.sequence(character('C')).parse("");
assertThat(result.value(), is(Sequences.<Character>empty()));
assertThat(result.remainder(), is(emptySegment(Character.class)));
}
@Test
public void doesNotThrowIfItConsumesAllCharacters() throws Exception {
Result<Sequence<Character>> result = SequenceParser.sequence(character('C')).parse("CCCCC");
assertThat(result.value(), is(sequence('C', 'C', 'C', 'C', 'C')));
assertThat(result.remainder(), is(emptySegment(Character.class)));
}
@Test
public void supportMany() throws Exception {
Result<Sequence<Character>> result = SequenceParser.sequence(character('C')).parse("CCCCCDEFG");
assertThat(result.value(), is(sequence('C', 'C', 'C', 'C', 'C')));
assertThat(result.remainder(), is(characters("DEFG")));
}
@Test
public void supportChaining() throws Exception {
Result<Sequence<Character>> result = character('C').sequence().parse("CCCCCDEFG");
assertThat(result.value(), is(sequence('C', 'C', 'C', 'C', 'C')));
assertThat(result.remainder(), is(characters("DEFG")));
}
}