//Dstl (c) Crown Copyright 2017
package uk.gov.dstl.baleen.uima.grammar;
import static org.junit.Assert.assertEquals;
import java.util.List;
import java.util.stream.Collectors;
import org.apache.uima.UIMAException;
import org.apache.uima.jcas.JCas;
import org.junit.Before;
import org.junit.Test;
import uk.gov.dstl.baleen.types.language.PhraseChunk;
import uk.gov.dstl.baleen.types.language.WordToken;
import uk.gov.dstl.baleen.uima.testing.JCasSingleton;
public class ParseTreeTest {
private JCas jCas;
private PhraseChunk sentence;
private PhraseChunk onetwo;
private PhraseChunk threefour;
private final WordToken[] tokens = new WordToken[4];
@Before
public void before() throws UIMAException {
jCas = JCasSingleton.getJCasInstance();
final String text = "1 2 3 4";
jCas.setDocumentText(text);
sentence = new PhraseChunk(jCas);
sentence.setBegin(0);
sentence.setEnd(text.length());
sentence.addToIndexes();
onetwo = new PhraseChunk(jCas);
onetwo.setBegin(0);
onetwo.setEnd(2);
onetwo.addToIndexes();
threefour = new PhraseChunk(jCas);
threefour.setBegin(3);
threefour.setEnd(text.length());
threefour.addToIndexes();
tokens[0] = new WordToken(jCas);
tokens[0].setBegin(0);
tokens[0].setEnd(0);
tokens[0].addToIndexes();
tokens[1] = new WordToken(jCas);
tokens[1].setBegin(2);
tokens[1].setEnd(2);
tokens[1].addToIndexes();
tokens[2] = new WordToken(jCas);
tokens[2].setBegin(4);
tokens[2].setEnd(4);
tokens[2].addToIndexes();
tokens[3] = new WordToken(jCas);
tokens[3].setBegin(6);
tokens[3].setEnd(text.length());
tokens[3].addToIndexes();
}
int childrenCount = 0;
@Test
public void testBuild() {
final ParseTree pt = ParseTree.build(jCas);
// Test getParent
assertEquals(onetwo, pt.getParent(tokens[0]).getChunk());
assertEquals(onetwo, pt.getParent(tokens[1]).getChunk());
assertEquals(threefour, pt.getParent(tokens[2]).getChunk());
assertEquals(threefour, pt.getParent(tokens[3]).getChunk());
// test child words
final List<WordToken> words = pt.getChildWords(onetwo, x -> true).collect(Collectors.toList());
assertEquals(2, words.size());
assertEquals(tokens[0], words.get(0));
assertEquals(tokens[1], words.get(1));
assertEquals(0, pt.getChildWords(sentence, x -> false).count());
// test traverse
pt.traverseChildren(l -> childrenCount++);
assertEquals(3, childrenCount);
}
}