package com.github.fge.grappa.illegal;
import com.github.fge.grappa.exceptions.InvalidGrammarException;
import com.github.fge.grappa.Grappa;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import javax.annotation.ParametersAreNonnullByDefault;
import java.util.Objects;
import static com.github.fge.grappa.util.CustomAssertions.shouldHaveThrown;
import static org.assertj.core.api.Assertions.assertThat;
@ParametersAreNonnullByDefault
@Test
public abstract class IllegalGrammarTest
{
private final Class<? extends IllegalGrammarParser> parserClass;
private final String errorMessage;
private IllegalGrammarParser parser;
protected IllegalGrammarTest(
final Class<? extends IllegalGrammarParser> parserClass,
final String errorMessage)
{
this.parserClass = Objects.requireNonNull(parserClass);
this.errorMessage = Objects.requireNonNull(errorMessage);
}
@BeforeMethod
public void init()
{
parser = Grappa.createParser(parserClass);
}
@Test
public final void illegalGrammarIsDetected()
{
try {
parser.illegal();
shouldHaveThrown(InvalidGrammarException.class);
} catch (InvalidGrammarException e) {
assertThat(e).isExactlyInstanceOf(InvalidGrammarException.class)
.hasMessage(errorMessage);
}
}
@Test
public final void legalGrammarDoesNotThrowAnException()
{
parser.legal();
}
}