jdk/test/javax/sound/midi/MidiSystem/6411624/bug6411624.java
changeset 41905 e8e5df013c6e
equal deleted inserted replaced
41904:524d908e49ea 41905:e8e5df013c6e
       
     1 /*
       
     2  * Copyright (c) 2006, 2016, 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 import java.io.IOException;
       
    25 import java.util.Iterator;
       
    26 import java.util.List;
       
    27 
       
    28 import javax.sound.midi.MidiDevice;
       
    29 import javax.sound.midi.MidiSystem;
       
    30 import javax.sound.midi.MidiUnavailableException;
       
    31 import javax.sound.midi.Receiver;
       
    32 import javax.sound.midi.Sequencer;
       
    33 import javax.sound.midi.Synthesizer;
       
    34 import javax.sound.midi.Transmitter;
       
    35 
       
    36 /**
       
    37  * This test should be run on specific environment (solaris or linux w/o
       
    38  * audio card installed).
       
    39  */
       
    40 public class bug6411624 {
       
    41 
       
    42     public static void main(String args[]) throws Exception {
       
    43         log("This test should only be run on solaris or linux system");
       
    44         log("without audio card installed (to test on SunRay set");
       
    45         log("incorrect $AUDIODEV value).");
       
    46         readln();
       
    47 
       
    48         boolean testRecv = false;
       
    49         boolean testTrans = false;
       
    50         boolean testSeq = true;
       
    51 
       
    52         // print add info (midi device list)
       
    53         try {
       
    54             MidiDevice.Info[] midis = MidiSystem.getMidiDeviceInfo();
       
    55             log("MidiDevices (total " + midis.length + "):");
       
    56             for (int i=0; i<midis.length; i++) {
       
    57                 log("" + i + ": " + midis[i].toString());
       
    58 //                MidiDevice dev = MidiSystem.getMidiDevice(midis[i]);
       
    59 //                log("    device: " + dev);
       
    60             }
       
    61         } catch (Exception ex) {
       
    62             log("!!!EXCEPTION:");
       
    63             ex.printStackTrace();
       
    64         }
       
    65 
       
    66         log("");
       
    67         log("getting default receiver...");
       
    68         try {
       
    69             Receiver rec = MidiSystem.getReceiver();
       
    70             log(" - OK: " + rec);
       
    71             testRecv = checkDevice(rec);
       
    72             rec.close();
       
    73         } catch (MidiUnavailableException e) {
       
    74             log("MidiUnavailableException has been thrown - OK");
       
    75             testRecv = true;
       
    76         }
       
    77 
       
    78 
       
    79         log("");
       
    80         log("getting default transmitter...");
       
    81         try {
       
    82             Transmitter trans = MidiSystem.getTransmitter();
       
    83             log(" - OK: " + trans);
       
    84             testTrans = checkDevice(trans);
       
    85             trans.close();
       
    86         } catch (MidiUnavailableException e) {
       
    87             log("MidiUnavailableException has been thrown - OK");
       
    88             testTrans = true;
       
    89         }
       
    90 
       
    91 
       
    92         // print default synthesizer
       
    93         log("");
       
    94         log("getting default synth...");
       
    95         try {
       
    96             Synthesizer synth = MidiSystem.getSynthesizer();
       
    97             log(" - OK: " + synth);
       
    98             synth.close();
       
    99         } catch (MidiUnavailableException e) {
       
   100             log("MidiUnavailableException has been thrown - OK:");
       
   101             e.printStackTrace();
       
   102         }
       
   103 
       
   104 
       
   105         log("");
       
   106         log("getting default sequencer (connected)...");
       
   107         try {
       
   108             Sequencer seq = MidiSystem.getSequencer();
       
   109             log("OK: " + seq);
       
   110 
       
   111             // check that returned sequencer doesn't connected to another sequencer
       
   112             log("  receivers:");
       
   113             log("    max=" + seq.getMaxReceivers());
       
   114             List<Receiver> recvList = seq.getReceivers();
       
   115             log("    count=" + recvList.size());
       
   116             Iterator<Receiver> recvIter = recvList.iterator();
       
   117             int i = 0;
       
   118             while (recvIter.hasNext()) {
       
   119                 Receiver recv = recvIter.next();
       
   120                 log("    " + (++i) + ": " + recv);
       
   121             }
       
   122 
       
   123             log("  transmitters:");
       
   124             log("    max=" + seq.getMaxTransmitters());
       
   125             List<Transmitter> transList = seq.getTransmitters();
       
   126             log("    count=" + transList.size());
       
   127             Iterator<Transmitter> transIter = transList.iterator();
       
   128             i = 0;
       
   129             while (transIter.hasNext()) {
       
   130                 Transmitter trans = transIter.next();
       
   131                 log("    " + (++i) + ": " + trans);
       
   132                 Receiver recv = trans.getReceiver();
       
   133                 log("      recv: " + recv);
       
   134                 if (!checkDevice(recv))
       
   135                     testSeq = false;
       
   136             }
       
   137 
       
   138             log("opening sequencer...");
       
   139             seq.open();
       
   140             log("OK.");
       
   141 
       
   142             log("closing...");
       
   143             seq.close();
       
   144             log("OK.");
       
   145         } catch (MidiUnavailableException e) {
       
   146             log("MidiUnavailableException has been thrown - OK:");
       
   147             e.printStackTrace();
       
   148         }
       
   149 
       
   150 
       
   151         // debug testing - non-connected sequencer
       
   152         log("");
       
   153         log("getting default sequencer (non-connected)...");
       
   154         try {
       
   155             Sequencer seq = MidiSystem.getSequencer(false);
       
   156             log("OK: " + seq);
       
   157 
       
   158             log("  receivers:");
       
   159             log("    max=" + seq.getMaxReceivers());
       
   160             List<Receiver> recvList = seq.getReceivers();
       
   161             log("    count=" + recvList.size());
       
   162             Iterator<Receiver> recvIter = recvList.iterator();
       
   163             int i = 0;
       
   164             while (recvIter.hasNext()) {
       
   165                 Receiver recv = recvIter.next();
       
   166                 log("    " + (++i) + ": " + recv);
       
   167             }
       
   168 
       
   169             log("  transmitters:");
       
   170             log("    max=" + seq.getMaxTransmitters());
       
   171             List<Transmitter> transList = seq.getTransmitters();
       
   172             log("    count=" + transList.size());
       
   173             Iterator<Transmitter> transIter = transList.iterator();
       
   174             i = 0;
       
   175             while (transIter.hasNext()) {
       
   176                 Transmitter trans = transIter.next();
       
   177                 log("    " + (++i) + ": " + trans);
       
   178                 Receiver recv = trans.getReceiver();
       
   179                 log("      recv: " + recv);
       
   180             }
       
   181             seq.close();
       
   182         } catch (MidiUnavailableException e) {
       
   183             log("MidiUnavailableException has been thrown (shouln't?):");
       
   184             e.printStackTrace();
       
   185         }
       
   186 
       
   187         log("");
       
   188         log("Test result:");
       
   189         // print results
       
   190         if (testRecv && testTrans && testSeq) {
       
   191             log("  All tests sucessfully passed.");
       
   192         } else {
       
   193             log("  Some tests failed:");
       
   194             log("    receiver test:    " + (testRecv ? "OK" : "FAILED"));
       
   195             log("    transmitter test: " + (testTrans ? "OK" : "FAILED"));
       
   196             log("    sequencer test:   " + (testSeq ? "OK" : "FAILED"));
       
   197         }
       
   198         log("\n\n\n");
       
   199     }
       
   200 
       
   201     // check that device is not sequencer
       
   202     static boolean checkDevice(Object dev) {
       
   203         String className = dev.getClass().toString().toLowerCase();
       
   204         boolean result = (className.indexOf("sequencer") < 0);
       
   205         if (!result)
       
   206             log("ERROR: inapropriate device");
       
   207         return result;
       
   208     }
       
   209 
       
   210     // helper routines
       
   211     static long startTime = currentTimeMillis();
       
   212     static long currentTimeMillis() {
       
   213         //return System.nanoTime() / 1000000L;
       
   214         return System.currentTimeMillis();
       
   215     }
       
   216     static void log(String s) {
       
   217         long time = currentTimeMillis() - startTime;
       
   218         long ms = time % 1000;
       
   219         time /= 1000;
       
   220         long sec = time % 60;
       
   221         time /= 60;
       
   222         long min = time % 60;
       
   223         time /= 60;
       
   224         System.out.println(""
       
   225                 + (time < 10 ? "0" : "") + time
       
   226                 + ":" + (min < 10 ? "0" : "") + min
       
   227                 + ":" + (sec < 10 ? "0" : "") + sec
       
   228                 + "." + (ms < 10 ? "00" : (ms < 100 ? "0" : "")) + ms
       
   229                 + " (" + Thread.currentThread().getName() + ") " + s);
       
   230     }
       
   231     static void delay(int millis) {
       
   232         try {
       
   233             Thread.sleep(millis);
       
   234         } catch (InterruptedException e) {}
       
   235     }
       
   236     static void readln() {
       
   237         log("");
       
   238         log("Press ENTER to continue...");
       
   239         try {
       
   240             while (System.in.read() != 10) ;
       
   241         } catch (IOException e) { }
       
   242         log("");
       
   243     }
       
   244 }