package pl.edu.amu.wmi.daut.re;
import java.util.ArrayList;
import java.util.List;
import junit.framework.TestCase;
/**
* Test klasy GrammarRule.
*/
public class TestGrammarRule extends TestCase {
/**
* Test reguły z pustą prawą stroną.
*/
public final void testRuleWithEmptyRightSide() {
GrammarNonterminalSymbol nonterminal = new GrammarNonterminalSymbol('T');
GrammarRule rule = new GrammarRule(nonterminal);
assertEquals(0, rule.getArity());
assertSame(nonterminal, rule.getLhsSymbol());
assertEquals(0, rule.getRhsSymbols().size());
assertEquals("T -> ", rule.toString());
boolean thrown = false;
try {
rule.getRhsFirstSymbol();
} catch (RhsEmptyException e) {
thrown = true;
}
assertTrue(thrown);
try {
rule.getRhsSecondSymbol();
} catch (RhsEmptyException e) {
thrown = false;
}
assertFalse(thrown);
}
/**
* Test reguły unarnej.
*/
public final void testUnaryRule() {
GrammarTerminalSymbol terminal = new GrammarTerminalSymbol('a');
GrammarNonterminalSymbol nonterminal = new GrammarNonterminalSymbol('T');
GrammarRule rule = new GrammarRule(nonterminal, terminal);
assertSame(terminal, rule.getRhsFirstSymbol());
boolean thrown = false;
try {
rule.getRhsSecondSymbol();
} catch (OutOfRhsBordersException e) {
thrown = true;
}
assertTrue(thrown);
assertEquals(1, rule.getRhsSymbols().size());
assertEquals(1, rule.getArity());
assertEquals("T -> a", rule.toString());
}
/**
* Test reguły binarnej.
*/
public final void testBinaryRule() {
GrammarNonterminalSymbol nonterminal = new GrammarNonterminalSymbol('T');
GrammarTerminalSymbol terminal = new GrammarTerminalSymbol('a');
GrammarRule rule = new GrammarRule(nonterminal, terminal, nonterminal);
assertSame(nonterminal, rule.getRhsSecondSymbol());
}
/**
* Test reguły z dowolną liczbą symboli terminalny
* i nieterminalnych po prawej stronie.
*/
public final void testRuleWithAnyNumberOfSymbols() {
GrammarTerminalSymbol terminalA = new GrammarTerminalSymbol('a');
GrammarTerminalSymbol terminalB = new GrammarTerminalSymbol('b');
GrammarNonterminalSymbol nonterminal = new GrammarNonterminalSymbol('T');
List<GrammarSymbol> listOfSymbols = new ArrayList<GrammarSymbol>();
listOfSymbols.add(terminalA);
listOfSymbols.add(terminalB);
listOfSymbols.add(nonterminal);
GrammarRule rule = new GrammarRule(nonterminal, listOfSymbols);
assertEquals(listOfSymbols, rule.getRhsSymbols());
}
}