2 * Copyright 2001 Sun Microsystems, Inc.
4 * See the file "license.terms" for information on usage and
5 * redistribution of this file, and for a DISCLAIMER OF ALL
9 import junit.framework.*;
12 import com.sun.speech.freetts.*;
15 * Tests for the Utterance class
19 public class SegmenterTests extends TestCase {
22 UtteranceProcessor wordSylSeg = new Segmenter();
25 * JUnit style tests that test proper feature and relation
28 * @param name the name of the test.
30 public SegmenterTests(String name) {
35 * given some text, create a word relation
36 * and the syllable relations that go with it.
38 * @param text the text to process
40 * @return the utterance
42 public Utterance getSyllables(String text) {
43 VoiceManager voiceManager = VoiceManager.getInstance();
44 voice = voiceManager.getVoice("kevin");
46 utterance = new Utterance(voice);
47 Relation words = utterance.createRelation("Word");
48 StringTokenizer tok = new StringTokenizer(text);
50 while (tok.hasMoreTokens()) {
51 Item word = words.appendItem();
52 word.getFeatures().setString("name", tok.nextToken().toLowerCase());
55 wordSylSeg.processUtterance(utterance);
56 } catch (ProcessException pe) {
57 System.out.println("Error processing " + text);
64 * Tests simple syllable and segment behavior
66 public void testHowNowBrownCow() {
67 Utterance u = getSyllables("how now brown cowboy");
68 Relation segment = u.getRelation("Segment");
69 assertTrue("segment", segment != null);
70 assertTrue("Syllable", u.getRelation("Syllable") != null);
71 assertTrue("SylStructure", u.getRelation("SylStructure") != null);
75 * Tests to see if the segment names are created properly, as well
76 * as the syllable structure is created properly.
78 public void testJanuary() {
79 Utterance u = getSyllables("january first two thousand and one");
80 Relation segment = u.getRelation("Segment");
81 assertTrue("segment", segment != null);
82 assertTrue("Syllable", u.getRelation("Syllable") != null);
83 assertTrue("SylStructure", u.getRelation("SylStructure") != null);
87 //assertTrue("segment size", segment.getItems().size() == 26);
89 // spot check some segments
90 Item i = segment.getHead();
91 assertTrue("seg jh", i.toString().equals("jh"));
93 assertTrue("seg ae", i.toString().equals("ae"));
95 assertTrue("seg n", i.toString().equals("n"));
97 assertTrue("seg y", i.toString().equals("y"));
99 assertTrue("seg uw", i.toString().equals("uw"));
101 assertTrue("seg eh", i.toString().equals("eh"));
103 assertTrue("seg r", i.toString().equals("r"));
105 assertTrue("seg iy", i.toString().equals("iy"));
107 assertTrue("seg f", i.toString().equals("f"));
109 assertTrue("seg er", i.toString().equals("er"));
111 assertTrue("seg s", i.toString().equals("s"));
113 assertTrue("seg t", i.toString().equals("t"));
117 // spot check the SylStructure
118 Relation sylStructure = u.getRelation("SylStructure");
119 //assertTrue("sylStructure size", sylStructure.getItems().size() == 6);
121 Item si = sylStructure.getHead();
122 assertTrue("january", si.toString().equals("january"));
124 assertTrue("first", si.toString().equals("first"));
126 assertTrue("two", si.toString().equals("two"));
128 assertTrue("thousand", si.toString().equals("thousand"));
130 assertTrue("and", si.toString().equals("and"));
132 assertTrue("one", si.toString().equals("one"));
135 Item january = sylStructure.getHead();
137 assertTrue("findItem", january.findItem("R:Word").
138 toString().equals("january"));
140 assertTrue("findItem", january.findItem("R:Word.n").
141 toString().equals("first"));
142 assertTrue("findItem", january.findItem("R:Word.n.n").
143 toString().equals("two"));
144 assertTrue("findItem", january.findItem("R:Word.n.n.p").
145 toString().equals("first"));
147 PrintWriter pw = new PrintWriter(System.out);
148 january.findItem("daughter.daughter").dump(pw, 4, "dd");
150 assertTrue("findItem",
151 january.findItem("daughter.daughter").
152 toString().equals("jh"));
154 assertTrue("findItem",
155 january.findItem("daughter.daughter.n").
156 toString().equals("ae"));
158 assertTrue("findItem",
159 january.findItem("daughter.daughter.n.p").
160 toString().equals("jh"));
161 assertTrue("findItem",
162 january.findItem("daughter.daughtern").
163 toString().equals("n"));
164 assertTrue("findItem",
165 january.findItem("daughter.daughtern.parent.parent").
166 toString().equals("january"));
167 assertTrue("findItem",
169 "daughter.daughtern.parent.parent.R:Word.R:SylStructure" +
170 ".daughter.daughter.n").toString().equals("ae"));
172 assertTrue("findItem",
173 january.findItem("daughter.daughtern").
174 toString().equals("n"));
176 assertTrue("findFeature", january.findFeature("daughter.stress").
177 toString().equals("1"));
179 Item firstSyllable = january.getDaughter();
181 assertTrue("num seg in syl",
182 firstSyllable.getDaughters().size() == 3);
184 Item l = firstSyllable.getDaughter();
185 assertTrue("syl jh", l.toString().equals("jh"));
187 assertTrue("syl ae", l.toString().equals("ae"));
189 assertTrue("syl n", l.toString().equals("n"));
196 * Factory method that creates the test suite.
198 * @return the test suite.
200 public static Test suite() {
201 return new TestSuite(SegmenterTests.class);
207 * Main entry point for this test suite.
209 * @param args the command line arguments.
211 public static void main(String[] args) {
212 // String inputText = "for score and seven years ago";
213 String inputText = "january first two thousand and one";
215 if (args.length > 0) {
219 SegmenterTests wsst = new SegmenterTests("tests");
220 Utterance t1 = wsst.getSyllables( inputText);