package com.googlecode.totallylazy.parser;

import org.junit.Test;

import java.util.List;

import static com.googlecode.totallylazy.Lists.list;
import static com.googlecode.totallylazy.Segment.constructors.characters;
import static com.googlecode.totallylazy.Segment.constructors.emptySegment;
import static com.googlecode.totallylazy.matchers.Matchers.is;
import static com.googlecode.totallylazy.parser.CharacterParser.character;
import static org.hamcrest.MatcherAssert.assertThat;

public class ListParserTest {
    @Test
    public void canCombineTwoParsers() throws Exception {
        Parser<List<Character>> parser = Parsers.list(character('A'), character('B'));
        Result<List<Character>> result = parser.parse("ABC");
        assertThat(result.value(), is(list('A', 'B')));
        assertThat(result.remainder(), is(characters("C")));
    }

    @Test
    public void canCombineThreeParsers() throws Exception {
        Result<List<Character>> result = Parsers.list(character('A'), character('B'), character('C')).
                parse("ABC");
        assertThat(result.value(), is(list('A', 'B', 'C')));
        assertThat(result.remainder(), is(emptySegment(Character.class)));
    }
}
