package gsingh.learnkirtan.parser;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;
import gsingh.learnkirtan.shabad.Shabad;
import org.junit.Before;
import org.junit.Test;
public class ParserTest {
Parser parser;
@Before
public void setup() {
parser = new Parser();
}
@Test
public void parseSingleNoteTest() {
validate("sa", 1);
}
@Test
public void parseSingleNoteModifierTest() {
validate("sa.", 1);
validate("sa'", 1);
validate("sa.'", 1);
validate("sa'.", 1);
validate(".sa", 1);
validate("'sa", 1);
validate(".'sa", 1);
validate("'.sa", 1);
validate(".sa'", 1);
validate("'sa.", 1);
}
@Test
public void parseDoubleNoteTest() {
validate("sa-sa", 2);
}
@Test
public void parseLongNoteTest() {
validate("sa - re -", 2);
}
@Test
public void validateMultipleSpaces() {
validate("sa re", 2);
}
@Test
public void parseDoubleNoteModifierTest() {
validate("sa.-.sa", 2);
validate("sa'-'sa", 2);
validate("sa.'-'.sa", 2);
validate("sa'.-.'sa", 2);
validate(".sa-sa.", 2);
validate("'sa-sa.", 2);
validate(".'sa-sa", 2);
validate("'.sa-.sa'", 2);
validate(".sa'-'.sa", 2);
validate("'sa.-'sa.", 2);
}
@Test
public void parseMultipleNoteTest() {
validate("sa re. .ga ma' pa.' dha.' .ni 'sa .'re-'.ga", 10);
}
// TODO: Make custom exception
@Test(expected = Exception.class)
public void parseInvalidShabadTest() {
fail("Not yet implemented");
}
// TODO: This only checks that the parser interpreted the right number of
// notes, not if the notes are actually correct
private void validate(String text, int size) {
Shabad shabad = new Shabad(text);
assertEquals(shabad.getShabadText(), text.toUpperCase());
assertEquals(shabad.getNotes().size(), size);
}
}