1/*
2 * Copyright (c) 2014, 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
24import javax.sound.midi.MidiDevice;
25import javax.sound.midi.MidiSystem;
26import javax.sound.midi.spi.MidiDeviceProvider;
27
28import static java.util.ServiceLoader.load;
29
30/**
31 * @test
32 * @bug 8058115
33 * @summary MidiDeviceProvider shouldn't returns incorrect results in case of
34 *          unsupported MidiDevice.Info
35 * @author Sergey Bylokhov
36 */
37public final class UnsupportedInfo {
38
39    public static void main(final String[] args) {
40        final MidiDevice.Info[] infos = MidiSystem.getMidiDeviceInfo();
41        for (final MidiDeviceProvider mdp : load(MidiDeviceProvider.class)) {
42            for (final MidiDevice.Info info : infos) {
43                if (mdp.isDeviceSupported(info)) {
44                    if (mdp.getDevice(info) == null) {
45                        throw new RuntimeException("MidiDevice is null");
46                    }
47                } else {
48                    try {
49                        mdp.getDevice(info);
50                        throw new RuntimeException(
51                                "IllegalArgumentException expected");
52                    } catch (final IllegalArgumentException ignored) {
53                        // expected
54                    }
55                }
56            }
57        }
58    }
59}
60