TestGetSoundbankInputStream2.java revision 829:b06c29386f63
1/*
2 * Copyright 2007 Sun Microsystems, Inc.  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.  Sun designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Sun in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
22 * CA 95054 USA or visit www.sun.com if you need additional information or
23 * have any questions.
24 */
25
26/* @test
27 @summary Test DLSSoundbankReader getSoundbank(InputStream) method using
28     very bad InputStream which can only read 1 byte at time */
29
30import java.io.BufferedInputStream;
31import java.io.File;
32import java.io.FileInputStream;
33import java.io.IOException;
34import java.io.InputStream;
35
36import javax.sound.midi.Patch;
37import javax.sound.midi.Soundbank;
38
39import com.sun.media.sound.DLSSoundbankReader;
40
41public class TestGetSoundbankInputStream2 {
42
43    private static class BadInputStream extends InputStream
44    {
45
46        InputStream is;
47
48        public BadInputStream(InputStream is)
49        {
50            this.is = is;
51        }
52
53        public int read() throws IOException {
54            return is.read();
55        }
56
57        public int read(byte[] b, int off, int len) throws IOException {
58            if(len > 1) len = 1;
59            return is.read(b, off, len);
60        }
61
62        public int read(byte[] b) throws IOException {
63            return read(b, 0, b.length);
64        }
65
66        public long skip(long n) throws IOException {
67            if(n > 1) n = 1;
68            return is.skip(n);
69        }
70
71        public int available() throws IOException {
72            int avail = is.available();
73            if(avail > 1) avail = 1;
74            return avail;
75        }
76
77        public void close() throws IOException {
78            is.close();
79        }
80
81        public synchronized void mark(int readlimit) {
82            is.mark(readlimit);
83        }
84
85        public boolean markSupported() {
86            return is.markSupported();
87        }
88
89        public synchronized void reset() throws IOException {
90            is.reset();
91        }
92
93    }
94
95    private static void assertTrue(boolean value) throws Exception
96    {
97        if(!value)
98            throw new RuntimeException("assertTrue fails!");
99    }
100
101    public static void main(String[] args) throws Exception {
102        File file = new File(System.getProperty("test.src", "."), "ding.dls");
103        FileInputStream fis = new FileInputStream(file);
104        BufferedInputStream bis = new BufferedInputStream(fis);
105        try
106        {
107            InputStream badis = new BadInputStream(bis);
108            Soundbank dls = new DLSSoundbankReader().getSoundbank(badis);
109            assertTrue(dls.getInstruments().length == 1);
110            Patch patch = dls.getInstruments()[0].getPatch();
111            assertTrue(patch.getProgram() == 0);
112            assertTrue(patch.getBank() == 0);
113        }
114        finally
115        {
116            bis.close();
117        }
118    }
119}
120