ModelStandardIndexedDirectorTest.java revision 8729:0242fce0f717
1/*
2 * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23
24/* @test
25   @summary Test ModelStandardIndexedDirector class */
26
27import java.util.ArrayList;
28import java.util.List;
29import java.util.TreeSet;
30
31import com.sun.media.sound.ModelConnectionBlock;
32import com.sun.media.sound.ModelDirectedPlayer;
33import com.sun.media.sound.ModelPerformer;
34import com.sun.media.sound.ModelStandardDirector;
35import com.sun.media.sound.ModelStandardIndexedDirector;
36
37public class ModelStandardIndexedDirectorTest {
38
39    private static String treeToString(TreeSet<Integer> set)
40    {
41        StringBuffer buff = new StringBuffer();
42        boolean first = true;
43        for(Integer s : set)
44        {
45            if(!first)
46                buff.append(";");
47            buff.append(s);
48            first = false;
49        }
50        return buff.toString();
51    }
52
53    private static void testDirector(ModelPerformer[] performers) throws Exception
54    {
55        final TreeSet<Integer> played = new TreeSet<Integer>();
56        ModelDirectedPlayer player = new ModelDirectedPlayer()
57        {
58            public void play(int performerIndex,
59                    ModelConnectionBlock[] connectionBlocks) {
60                played.add(performerIndex);
61            }
62        };
63        ModelStandardIndexedDirector idirector =
64            new ModelStandardIndexedDirector(performers, player);
65        ModelStandardDirector director =
66            new ModelStandardDirector(performers, player);
67
68        for (int n = 0; n < 128; n++)
69        {
70            for (int v = 0; v < 128; v++)
71            {
72                director.noteOn(n, v);
73                String p1 = treeToString(played);
74                played.clear();
75                idirector.noteOn(n, v);
76                String p2 = treeToString(played);
77                played.clear();
78                if(!p1.equals(p2))
79                    throw new Exception(
80                            "Note = " + n + ", Vel = " + v + " failed");
81            }
82        }
83    }
84
85    private static void testDirectorCombinations(
86            ModelPerformer[] performers) throws Exception
87    {
88        for (int i = 0; i < performers.length; i++) {
89            ModelPerformer[] performers2 = new ModelPerformer[i];
90            for (int j = 0; j < performers2.length; j++) {
91                performers2[j] = performers[i];
92            }
93            testDirector(performers2);
94        }
95    }
96
97    private static void addPerformer(
98            List<ModelPerformer> performers,
99            int keyfrom,
100            int keyto,
101            int velfrom,
102            int velto)
103    {
104        ModelPerformer performer = new ModelPerformer();
105        performer.setKeyFrom(keyfrom);
106        performer.setKeyTo(keyto);
107        performer.setVelFrom(velfrom);
108        performer.setVelTo(velto);
109        performers.add(performer);
110    }
111
112    public static void main(String[] args) throws Exception
113    {
114        // Test collection of normal values
115        List<ModelPerformer> performers = new ArrayList<ModelPerformer>();
116        addPerformer(performers, 0, 0, 0, 127);
117        addPerformer(performers, 0, 50, 0, 127);
118        addPerformer(performers, 0, 127, 0, 127);
119        addPerformer(performers, 21, 21, 0, 127);
120        addPerformer(performers, 21, 60, 0, 127);
121        addPerformer(performers, 21, 127, 0, 127);
122        addPerformer(performers, 50, 50, 0, 127);
123        addPerformer(performers, 50, 60, 0, 127);
124        addPerformer(performers, 50, 127, 0, 127);
125        addPerformer(performers, 73, 73, 0, 127);
126        addPerformer(performers, 73, 80, 0, 127);
127        addPerformer(performers, 73, 127, 0, 127);
128        addPerformer(performers, 127, 127, 0, 127);
129        addPerformer(performers, 0, 0, 60, 127);
130        addPerformer(performers, 0, 50, 60, 127);
131        addPerformer(performers, 0, 127, 60, 127);
132        addPerformer(performers, 21, 21, 60, 127);
133        addPerformer(performers, 21, 60, 60, 127);
134        addPerformer(performers, 21, 127, 60, 127);
135        addPerformer(performers, 50, 50, 60, 127);
136        addPerformer(performers, 50, 60, 60, 127);
137        addPerformer(performers, 50, 127, 60, 127);
138        addPerformer(performers, 73, 73, 60, 127);
139        addPerformer(performers, 73, 80, 60, 127);
140        addPerformer(performers, 73, 127, 60, 127);
141        addPerformer(performers, 127, 127, 60, 127);
142        addPerformer(performers, 0, 0, 80, 83);
143        addPerformer(performers, 0, 50, 80, 83);
144        addPerformer(performers, 0, 127, 80, 83);
145        addPerformer(performers, 21, 21, 80, 83);
146        addPerformer(performers, 21, 60, 80, 83);
147        addPerformer(performers, 21, 127, 80, 83);
148        addPerformer(performers, 50, 50, 80, 83);
149        addPerformer(performers, 50, 60, 80, 83);
150        addPerformer(performers, 50, 127, 80, 83);
151        addPerformer(performers, 73, 73, 80, 83);
152        addPerformer(performers, 73, 80, 80, 83);
153        addPerformer(performers, 73, 127, 80, 83);
154        addPerformer(performers, 127, 127, 80, 83);
155
156
157        testDirectorCombinations(
158                performers.toArray(
159                        new ModelPerformer[performers.size()])
160                );
161
162        // Test reversed values
163        performers.clear();
164        addPerformer(performers, 50, 30, 80, 83);
165        addPerformer(performers, 30, 30, 50, 30);
166        addPerformer(performers, 37, 30, 50, 30);
167        testDirector(
168                performers.toArray(
169                        new ModelPerformer[performers.size()])
170                );
171
172        // Test out-of-range values
173        performers.clear();
174        addPerformer(performers, -20, 6, 0, 127);
175        addPerformer(performers, 0, 300, 0, 300);
176        addPerformer(performers, -2, -8, -5, -9);
177
178        testDirector(
179                performers.toArray(
180                        new ModelPerformer[performers.size()])
181                );
182
183    }
184}
185
186
187