//Dstl (c) Crown Copyright 2017 package uk.gov.dstl.baleen.uima.grammar; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertSame; import static org.junit.Assert.assertTrue; import java.util.Arrays; 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 ParseTreeNodeTest { private PhraseChunk sentence; private PhraseChunk threefour; private PhraseChunk onetwo; private final WordToken[] tokens = new WordToken[4]; private ParseTreeNode root; private ParseTreeNode s; private ParseTreeNode a; private ParseTreeNode b; @Before public void before() throws UIMAException { final JCas 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(1); tokens[0].addToIndexes(); tokens[1] = new WordToken(jCas); tokens[1].setBegin(2); tokens[1].setEnd(3); tokens[1].addToIndexes(); tokens[2] = new WordToken(jCas); tokens[2].setBegin(4); tokens[2].setEnd(5); tokens[2].addToIndexes(); tokens[3] = new WordToken(jCas); tokens[3].setBegin(6); tokens[3].setEnd(text.length()); tokens[3].addToIndexes(); root = new ParseTreeNode((PhraseChunk) null); s = new ParseTreeNode(sentence); s.setParent(root); root.addChild(s); a = new ParseTreeNode(onetwo); a.setParent(s); a.addWords(Arrays.asList(tokens[0], tokens[1])); b = new ParseTreeNode(threefour); b.setParent(s); b.addWords(Arrays.asList(tokens[0], tokens[1])); s.addChild(a); s.addChild(b); } @Test public void testParseTreeNodePhraseChunk() { assertTrue(root.isRoot()); assertFalse(s.isRoot()); assertTrue(s.hasChildren()); assertSame(sentence, s.getChunk()); assertSame(root, s.getParent()); assertEquals(a, s.getChildren().get(0)); assertEquals(b, s.getChildren().get(1)); assertFalse(a.isRoot()); assertEquals(onetwo, a.getChunk()); assertEquals(s, a.getParent()); assertEquals(tokens[0], a.getWords().get(0)); assertEquals(tokens[1], a.getWords().get(1)); } boolean grandchildrenSeen = false; @Test public void testTraverseChildren() { root.traverseChildren(l -> { if (l.get(0).equals(a)) { grandchildrenSeen = true; } }); assertTrue(grandchildrenSeen); } boolean grandparentSeen = false; @Test public void testTraverseParent() { a.traverseParent((p, c) -> { if (p.equals(root)) { grandparentSeen = true; } return true; }); assertTrue(grandparentSeen); } @Test public void testContainsWord() { assertTrue(a.containsWord(w -> w.getCoveredText().equals("1"))); assertFalse(a.containsWord(w -> w.getCoveredText().equals("4"))); } @Test public void testStringAndlog() { assertFalse(a.toString().isEmpty()); // Test no crash a.log("\t"); } }