1 /**
   2  * @test
   3  * @bug 6835393
   4  * @summary Tests that MidiFileReader correctly reads sequences with different division types
   5  * @author Alex Menkov
   6  */
   7 
   8 import java.io.ByteArrayInputStream;
   9 import java.io.ByteArrayOutputStream;
  10 import java.io.IOException;
  11 import java.io.InputStream;
  12 import javax.sound.midi.InvalidMidiDataException;
  13 import javax.sound.midi.MidiSystem;
  14 import javax.sound.midi.Sequence;
  15 
  16 public class SMPTESequence {
  17 
  18     static int failed = 0;
  19 
  20     public static void main(String[] args) {
  21         test(Sequence.PPQ);
  22         test(Sequence.SMPTE_24);
  23         test(Sequence.SMPTE_25);
  24         test(Sequence.SMPTE_30);
  25         test(Sequence.SMPTE_30DROP);
  26 
  27         if (failed > 0) {
  28             throw new RuntimeException("" + failed + " tests failed");
  29         }
  30     }
  31 
  32     static boolean test(float divisionType) {
  33         boolean result = false;
  34         try {
  35             log("Testing divisionType == " + divisionType);
  36             Sequence sequence = new Sequence(divisionType, 16, 1);
  37             float div1 = sequence.getDivisionType();
  38 
  39             ByteArrayOutputStream outStream = new ByteArrayOutputStream();
  40             MidiSystem.write(sequence, 1, outStream);
  41 
  42             InputStream inStream = new ByteArrayInputStream(outStream.toByteArray());
  43 
  44             sequence = MidiSystem.getSequence(inStream);
  45             float div2 = sequence.getDivisionType();
  46 
  47             log("After write/read got divisionType == " + div2);
  48             if (Math.abs(div2 - div1) < 0.001f) {
  49                 result = true;
  50             }
  51         } catch (InvalidMidiDataException ex) {
  52             log(ex);
  53         } catch (IOException ex) {
  54             log(ex);
  55         } catch (IllegalArgumentException ex) {
  56             log(ex);
  57         }
  58         if (result) {
  59             log("OK");
  60         } else {
  61             log("FAIL");
  62             failed++;
  63         }
  64         return result;
  65     }
  66 
  67     static void log(String s) {
  68         System.out.println(s);
  69     }
  70 
  71     static void log(Exception ex) {
  72         log("got exception (" + ex.getClass().getSimpleName() + "): " + ex.getMessage());
  73     }
  74 
  75 }