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 27 import java.util.ArrayList; 28 import java.util.List; 29 import java.util.TreeSet; 30 31 import com.sun.media.sound.ModelConnectionBlock; 32 import com.sun.media.sound.ModelDirectedPlayer; 33 import com.sun.media.sound.ModelPerformer; 34 import com.sun.media.sound.ModelStandardDirector; 35 import com.sun.media.sound.ModelStandardIndexedDirector; 36 37 public 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