update standards version
[debian/freetts] / tests / SegmenterTests.java
1 /**
2  * Copyright 2001 Sun Microsystems, Inc.
3  * 
4  * See the file "license.terms" for information on usage and
5  * redistribution of this file, and for a DISCLAIMER OF ALL 
6  * WARRANTIES.
7  */
8 package tests;
9 import junit.framework.*;
10 import java.util.*;
11 import java.io.*;
12 import com.sun.speech.freetts.*;
13
14 /**
15  * Tests for the Utterance class
16  * 
17  * @version 1.0
18  */
19 public class SegmenterTests extends TestCase {
20     Voice voice;
21     Utterance utterance;
22     UtteranceProcessor wordSylSeg = new Segmenter();
23
24     /**
25      * JUnit style tests that test proper feature and relation
26      * behavior.
27      * 
28      * @param  name the name of the test.
29      */
30     public SegmenterTests(String name) {
31         super(name);
32     }
33
34     /**
35      * given some text, create a word relation
36      * and the syllable relations that go with it.
37      *
38      * @param text the text to process
39      *
40      * @return the utterance
41      */
42     public Utterance  getSyllables(String text) {
43         VoiceManager voiceManager = VoiceManager.getInstance();
44         voice = voiceManager.getVoice("kevin");
45         voice.allocate();
46         utterance = new Utterance(voice);
47         Relation words = utterance.createRelation("Word");
48         StringTokenizer tok = new StringTokenizer(text);
49
50        while (tok.hasMoreTokens()) {
51            Item word = words.appendItem();
52            word.getFeatures().setString("name", tok.nextToken().toLowerCase());
53        }
54         try {
55             wordSylSeg.processUtterance(utterance);
56         } catch (ProcessException pe) {
57             System.out.println("Error processing " + text);
58         }
59         return utterance;
60     } 
61
62
63     /**
64      * Tests simple syllable and segment behavior
65      */
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);
72     }
73
74     /**
75      * Tests to see if the segment names are created properly, as well
76      * as the syllable structure is created properly.
77      */
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);
84
85         // tests the segment
86
87         //assertTrue("segment size", segment.getItems().size() == 26);
88
89         // spot check some segments
90         Item i = segment.getHead();
91         assertTrue("seg jh", i.toString().equals("jh"));
92         i = i.getNext();
93         assertTrue("seg ae", i.toString().equals("ae"));
94         i = i.getNext();
95         assertTrue("seg n",  i.toString().equals("n"));
96         i = i.getNext();
97         assertTrue("seg y",  i.toString().equals("y"));
98         i = i.getNext();
99         assertTrue("seg uw", i.toString().equals("uw"));
100         i = i.getNext();
101         assertTrue("seg eh", i.toString().equals("eh"));
102         i = i.getNext();
103         assertTrue("seg r",  i.toString().equals("r"));
104         i = i.getNext();
105         assertTrue("seg iy", i.toString().equals("iy"));
106         i = i.getNext();
107         assertTrue("seg f",  i.toString().equals("f"));
108         i = i.getNext();
109         assertTrue("seg er", i.toString().equals("er"));
110         i = i.getNext();
111         assertTrue("seg s",  i.toString().equals("s"));
112         i = i.getNext();
113         assertTrue("seg t",  i.toString().equals("t"));
114         i = i.getNext();
115
116
117         // spot check the SylStructure
118         Relation sylStructure = u.getRelation("SylStructure");
119         //assertTrue("sylStructure size", sylStructure.getItems().size() == 6);
120
121         Item si = sylStructure.getHead();
122         assertTrue("january", si.toString().equals("january"));
123         si = si.getNext();
124         assertTrue("first", si.toString().equals("first"));
125         si = si.getNext();
126         assertTrue("two", si.toString().equals("two"));
127         si = si.getNext();
128         assertTrue("thousand", si.toString().equals("thousand"));
129         si = si.getNext();
130         assertTrue("and", si.toString().equals("and"));
131         si = si.getNext();
132         assertTrue("one", si.toString().equals("one"));
133         si = si.getNext();
134
135         Item january = sylStructure.getHead();
136
137         assertTrue("findItem", january.findItem("R:Word").
138                 toString().equals("january"));
139
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"));
146
147         PrintWriter pw = new PrintWriter(System.out);
148         january.findItem("daughter.daughter").dump(pw, 4, "dd");
149
150         assertTrue("findItem",
151                 january.findItem("daughter.daughter").
152                 toString().equals("jh"));
153
154         assertTrue("findItem",
155                 january.findItem("daughter.daughter.n").
156                 toString().equals("ae"));
157
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",
168                 january.findItem(
169         "daughter.daughtern.parent.parent.R:Word.R:SylStructure" +
170         ".daughter.daughter.n").toString().equals("ae"));
171
172         assertTrue("findItem",
173                 january.findItem("daughter.daughtern").
174                 toString().equals("n"));
175
176         assertTrue("findFeature", january.findFeature("daughter.stress").
177                 toString().equals("1"));
178
179         Item firstSyllable =  january.getDaughter();
180         /*
181         assertTrue("num seg in syl",
182                 firstSyllable.getDaughters().size() == 3);
183         */
184         Item l = firstSyllable.getDaughter();
185         assertTrue("syl jh", l.toString().equals("jh"));
186         l = l.getNext();
187         assertTrue("syl ae", l.toString().equals("ae"));
188         l = l.getNext();
189         assertTrue("syl n", l.toString().equals("n"));
190         l = l.getNext();
191
192     }
193
194
195     /**
196      * Factory method that creates the test suite.
197      * 
198      * @return the test suite.
199      */
200     public static Test suite() {
201         return new TestSuite(SegmenterTests.class);
202     } 
203
204
205
206     /**
207      * Main entry point for this test suite.
208      * 
209      * @param  args    the command line arguments.
210      */
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";
214
215         if (args.length > 0) {
216             inputText = args[0];
217         }
218
219         SegmenterTests wsst = new SegmenterTests("tests");
220         Utterance t1 = wsst.getSyllables( inputText);
221         t1.dump("t1");
222     } 
223 }
224
225