package edu.stanford.nlp.trees; import edu.stanford.nlp.ling.Label; import junit.framework.TestCase; import java.util.Set; import java.util.HashSet; /** * Test Tree.java * * @author Christopher Manning */ public class TreeTest extends TestCase { /** Test that using an iterator() straight off a tree gives the same * results as building a subTrees collection and then doing an * iterator off of that. */ @SuppressWarnings("null") public void testTreeIterator() { Tree t = Tree.valueOf("(ROOT (S (NP (DT The) (ADJP (RB very) (JJ proud)) (NN woman)) (VP (VBD yawned) (ADVP (RB loudly))) (. .)))"); if (t == null) { fail("testTreeIterator failed to construct tree"); } Set<Tree> m1 = new HashSet<Tree>(); Set<Tree> m2 = new HashSet<Tree>(); // build iterator List for (Tree sub : t) { m1.add(sub); } for (Tree sub : t.subTrees()) { m2.add(sub); } assertEquals(m1, m2); } @SuppressWarnings("null") public void testDeeperCopy() { Tree t1 = null; try { t1 = Tree.valueOf("(ROOT (S (NP I) (VP ran)))"); } catch (Exception e) { e.printStackTrace(); } if (t1 == null) { fail("testDeeperCopy failed to construct tree"); } Tree t2 = t1.deepCopy(); assertEquals(t1, t2); // make sure trees are equal assertTrue(t1 != t2); // make sure trees are not == Label l1 = t1.firstChild().firstChild().firstChild().label(); Label l2 = t2.firstChild().firstChild().firstChild().label(); assertEquals(l1, l2); // make sure labels are equal (redundant) assertTrue(l1 != l2); // make sure labels are not == } public void testRemove() { Tree t = Tree.valueOf("(ROOT (S (NP (DT The) (ADJP (RB very) (JJ proud)) (NN woman)) (VP (VBD yawned) (ADVP (RB loudly))) (. .)))"); Tree kid = t.firstChild(); try { t.remove(kid); fail("Tree remove should be unimplemented."); } catch (Exception e) { // we're good } try { t.remove(kid); fail("Tree removeAll should be unimplemented."); } catch (Exception e) { // we're good } kid.removeChild(0); assertEquals("(ROOT (S (VP (VBD yawned) (ADVP (RB loudly))) (. .)))", t.toString()); t.removeChild(0); assertEquals("ROOT", t.toString()); } public void testDominates() { Tree t = Tree.valueOf("(A (B this) (C (D is) (E a) (F small)) (G test))"); assertFalse(t.dominates(t)); for (Tree child : t.children()) { assertTrue(t.dominates(child)); assertFalse(child.dominates(t)); } } public void testPennPrint() { // a Label with a null value should print as "" not null. Tree t = Tree.valueOf("( (SBARQ (WHNP (WP What)) (SQ (VBP are) (NP (DT the) (NNP Valdez) (NNS Principles))) (. ?)))", new LabeledScoredTreeReaderFactory(new TreeNormalizer())); assertNull("Root of tree should have null label if none in String", t.label().value()); String separator = System.getProperty("line.separator"); String answer = ("( (SBARQ" + separator + " (WHNP (WP What))" + separator + " (SQ (VBP are)" + separator + " (NP (DT the) (NNP Valdez) (NNS Principles)))" + separator + " (. ?)))" + separator); assertEquals(answer, t.pennString()); } }