1 /*
2  * Copyright (c) 2003, 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 javax.sound.sampled.Control;
25 import javax.sound.sampled.Line;
26 import javax.sound.sampled.LineEvent;
27 import javax.sound.sampled.LineListener;
28 
29 /**
30  * @test
31  * @bug 4672865
32  * @summary LineEvent.toString() throws unexpected NullPointerException
33  */
34 public class LineInfoNPE {
35 
36     static final int STATUS_PASSED = 0;
37     static final int STATUS_FAILED = 2;
38     static final int STATUS_TEMP = 95;
39 
main(String argv[])40     public static void main(String argv[]) throws Exception {
41         int testExitStatus = run(argv, System.out);
42         if (testExitStatus != STATUS_PASSED) {
43             throw new Exception("test FAILED!");
44         }
45     }
46 
run(String argv[], java.io.PrintStream out)47     public static int run(String argv[], java.io.PrintStream out) {
48         int testResult = STATUS_PASSED;
49 
50         out.println("\n==> Test for LineEvent class:");
51 
52         Line testLine = new TestLine();
53         Line nullLine = null;
54 
55         LineEvent.Type testLineEventType = LineEvent.Type.OPEN;
56         LineEvent.Type nullLineEventType = null;
57 
58         LineEvent testedLineEvent = null;
59         out.println("\n>> LineEvent constructor for Line = null: ");
60         try {
61             testedLineEvent =
62                 new LineEvent(nullLine,  // the source Line of this event
63                                 testLineEventType, // LineEvent.Type - the event type
64                                 (long) 1000 // position - the number processed of sample frames
65                                 );
66             out.println(">  No any Exception was thrown!");
67             out.println(">  testedLineEvent.getType():");
68             try {
69                 Line producedLine = testedLineEvent.getLine();
70                 out.println(">   PASSED: producedLine = " + producedLine);
71             } catch (Throwable thrown) {
72                 out.println("##  FAILED: unexpected Exception was thrown:");
73                 thrown.printStackTrace(out);
74                 testResult = STATUS_FAILED;
75             }
76             out.println(">  testedLineEvent.toString():");
77             try {
78                 String producedString = testedLineEvent.toString();
79                 out.println(">   PASSED: producedString = " + producedString);
80             } catch (Throwable thrown) {
81                 out.println("##  FAILED: unexpected Exception was thrown:");
82                 thrown.printStackTrace(out);
83                 testResult = STATUS_FAILED;
84             }
85         } catch (IllegalArgumentException illegArgExcept) {
86             out.println(">   PASSED: expected IllegalArgumentException was thrown:");
87             illegArgExcept.printStackTrace(out);
88         } catch (NullPointerException nullPE) {
89             out.println(">   PASSED: expected NullPointerException was thrown:");
90             nullPE.printStackTrace(out);
91         } catch (Throwable thrown) {
92             out.println("##  FAILED: unexpected Exception was thrown:");
93             thrown.printStackTrace(out);
94             testResult = STATUS_FAILED;
95         }
96 
97         out.println("\n>> LineEvent constructor for LineEvent.Type = null: ");
98         try {
99             testedLineEvent =
100                 new LineEvent(testLine,  // the source Line of this event
101                                 nullLineEventType, // LineEvent.Type - the event type
102                                 (long) 1000 // position - the number processed of sample frames
103                                 );
104             out.println(">  No any Exception was thrown!");
105             out.println(">  testedLineEvent.getType():");
106             try {
107                 LineEvent.Type producedType = testedLineEvent.getType();
108                 out.println(">   PASSED: producedType = " + producedType);
109             } catch (Throwable thrown) {
110                 out.println("##  FAILED: unexpected Exception was thrown:");
111                 thrown.printStackTrace(out);
112                 testResult = STATUS_FAILED;
113             }
114             out.println(">  testedLineEvent.toString():");
115             try {
116                 String producedString = testedLineEvent.toString();
117                 out.println(">   PASSED: producedString = " + producedString);
118             } catch (Throwable thrown) {
119                 out.println("##  FAILED: unexpected Exception was thrown:");
120                 thrown.printStackTrace(out);
121                 testResult = STATUS_FAILED;
122             }
123         } catch (IllegalArgumentException illegArgExcept) {
124             out.println(">   PASSED: expected IllegalArgumentException was thrown:");
125             illegArgExcept.printStackTrace(out);
126         } catch (NullPointerException nullPE) {
127             out.println(">   PASSED: expected NullPointerException was thrown:");
128             nullPE.printStackTrace(out);
129         } catch (Throwable thrown) {
130             out.println("##  FAILED: unexpected Exception was thrown:");
131             thrown.printStackTrace(out);
132             testResult = STATUS_FAILED;
133         }
134 
135         if ( testResult == STATUS_FAILED ) {
136             out.println("\n==> test FAILED!");
137         } else {
138             out.println("\n==> test PASSED!");
139         }
140         return testResult;
141     }
142 }    // end of test class
143 
144 class TestLine implements Line {
145 
addLineListener(LineListener listener)146     public void addLineListener(LineListener listener) {
147     }
148 
close()149     public void close() {
150     }
151 
getControl(Control.Type control)152     public Control getControl(Control.Type control) {
153         return null;
154     }
155 
getControls()156     public Control[] getControls() {
157         return new Control[0];
158     }
159 
getLineInfo()160     public Line.Info getLineInfo() {
161         return null;
162     }
163 
isOpen()164     public boolean isOpen() {
165         return false;
166     }
167 
isControlSupported(Control.Type control)168     public boolean isControlSupported(Control.Type control) {
169         return false;
170     }
171 
open()172     public void open() {
173     }
174 
removeLineListener(LineListener listener)175     public void removeLineListener(LineListener listener) {
176     }
177 }
178