changeset 81:543d5b1cef67

2008-08-15 Omair Majid <omajid@redhat.com> * src/java/org/classpath/icedtea/pulseaudio/PulseAudioTargetDataLine.java: fixed support for LineListeners * unittests/org/classpath/icedtea/pulseaudio/PulseAudioClipTest.java: added a test that attempts to open() a clip and fails * unittests/org/classpath/icedtea/pulseaudio/PulseAudioMixerTest.java: marked testSourceLinesOpenAndClose() to be ignored for now * unittests/org/classpath/icedtea/pulseaudio/PulseAudioTargetDatLineTest.java: new file. a few tests for PulseAudioTargetDataLine
author Omair Majid <omajid@redhat.com>
date Fri, 15 Aug 2008 15:46:53 -0400
parents 6462973e76b1
children 10aa02b5a832 d3ed87d80d16
files src/java/org/classpath/icedtea/pulseaudio/PulseAudioTargetDataLine.java unittests/org/classpath/icedtea/pulseaudio/PulseAudioClipTest.java unittests/org/classpath/icedtea/pulseaudio/PulseAudioMixerTest.java unittests/org/classpath/icedtea/pulseaudio/PulseAudioTargetDataLineTest.java
diffstat 4 files changed, 122 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/src/java/org/classpath/icedtea/pulseaudio/PulseAudioTargetDataLine.java	Fri Aug 15 15:19:43 2008 -0400
+++ b/src/java/org/classpath/icedtea/pulseaudio/PulseAudioTargetDataLine.java	Fri Aug 15 15:46:53 2008 -0400
@@ -62,7 +62,7 @@
 	private AudioFormat currentFormat = null;
 	private AudioFormat defaultFormat = null;
 
-	private List<LineListener> lineListeners;
+	private List<LineListener> lineListeners = new LinkedList<LineListener>();
 	
 	private List<StreamListener> streamListeners = new ArrayList<StreamListener>();
 	
@@ -72,8 +72,6 @@
 	
 	private EventLoop eventLoop = null;
 	
-	protected ArrayList<LineListener> listeners;
-	
 	private Semaphore semaphore = new Semaphore(0);
 	
 	@SuppressWarnings("unused")
@@ -274,11 +272,11 @@
 	}
 
 	public void addLineListener(LineListener listener) {
-		listeners.add(listener);
+		lineListeners.add(listener);
 	}
 
 	public void removeLineListener(LineListener listener) {
-		listeners.remove(listener);
+		lineListeners.remove(listener);
 	}
 
 	public boolean isOpen() {
--- a/unittests/org/classpath/icedtea/pulseaudio/PulseAudioClipTest.java	Fri Aug 15 15:19:43 2008 -0400
+++ b/unittests/org/classpath/icedtea/pulseaudio/PulseAudioClipTest.java	Fri Aug 15 15:46:53 2008 -0400
@@ -47,6 +47,7 @@
 import javax.sound.sampled.LineUnavailableException;
 import javax.sound.sampled.Mixer;
 import javax.sound.sampled.UnsupportedAudioFileException;
+import javax.sound.sampled.DataLine.Info;
 
 import junit.framework.JUnit4TestAdapter;
 
@@ -113,6 +114,13 @@
 		
 	}
 	
+	@Test (expected=IllegalArgumentException.class)
+	public void testOpenWrongUse() throws LineUnavailableException {
+		Clip clip = (Clip) mixer.getLine(new Line.Info(Clip.class));
+		clip.open();
+		
+	}
+	
 	@After
 	public void tearDown() {
 
--- a/unittests/org/classpath/icedtea/pulseaudio/PulseAudioMixerTest.java	Fri Aug 15 15:19:43 2008 -0400
+++ b/unittests/org/classpath/icedtea/pulseaudio/PulseAudioMixerTest.java	Fri Aug 15 15:46:53 2008 -0400
@@ -54,6 +54,7 @@
 import org.junit.After;
 import org.junit.Assert;
 import org.junit.Before;
+import org.junit.Ignore;
 import org.junit.Test;
 
 public class PulseAudioMixerTest {
@@ -169,7 +170,7 @@
 		selectedMixer.close();
 	}
 
-	@Test
+	@Test @Ignore 
 	public void testSourceLinesOpenAndClose() throws LineUnavailableException {
 		System.out.println("This test checks if source lines open and close");
 		selectedMixer.open();
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/unittests/org/classpath/icedtea/pulseaudio/PulseAudioTargetDataLineTest.java	Fri Aug 15 15:46:53 2008 -0400
@@ -0,0 +1,109 @@
+package org.classpath.icedtea.pulseaudio;
+
+import javax.sound.sampled.AudioSystem;
+import javax.sound.sampled.Line;
+import javax.sound.sampled.LineEvent;
+import javax.sound.sampled.LineListener;
+import javax.sound.sampled.LineUnavailableException;
+import javax.sound.sampled.Mixer;
+import javax.sound.sampled.TargetDataLine;
+
+import junit.framework.JUnit4TestAdapter;
+
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+public class PulseAudioTargetDataLineTest {
+
+	public static junit.framework.Test suite() {
+		return new JUnit4TestAdapter(PulseAudioTargetDataLineTest.class);
+	}
+
+	private Mixer mixer;
+	private TargetDataLine targetDataLine;
+
+	@Before
+	public void setUp() throws LineUnavailableException {
+		Mixer.Info[] mixerInfos = AudioSystem.getMixerInfo();
+		Mixer.Info wantedMixerInfo = null;
+		for (Mixer.Info mixerInfo : mixerInfos) {
+			if (mixerInfo.getName().contains("PulseAudio")) {
+				wantedMixerInfo = mixerInfo;
+			}
+		}
+		Assert.assertNotNull(wantedMixerInfo);
+		mixer = AudioSystem.getMixer(wantedMixerInfo);
+		Assert.assertNotNull(mixer);
+		mixer.open();
+
+	}
+
+	@Test
+	public void testOpenClose() throws LineUnavailableException {
+		targetDataLine = (TargetDataLine) mixer.getLine(new Line.Info(
+				TargetDataLine.class));
+		Assert.assertNotNull(targetDataLine);
+		targetDataLine.open();
+		targetDataLine.close();
+	}
+
+	@Test
+	public void testOpenEvents() throws LineUnavailableException {
+		targetDataLine = (TargetDataLine) mixer.getLine(new Line.Info(
+				TargetDataLine.class));
+		Assert.assertNotNull(targetDataLine);
+
+		LineListener openListener = new LineListener() {
+			private int calledCount = 0;
+
+			@Override
+			public void update(LineEvent event) {
+				Assert.assertEquals(LineEvent.Type.OPEN, event.getType());
+				calledCount++;
+				Assert.assertEquals(1, calledCount);
+			}
+
+		};
+
+		targetDataLine.addLineListener(openListener);
+		targetDataLine.open();
+		targetDataLine.removeLineListener(openListener);
+		targetDataLine.close();
+		
+	}
+
+	@Test
+	public void testCloseEvents() throws LineUnavailableException {
+		targetDataLine = (TargetDataLine) mixer.getLine(new Line.Info(
+				TargetDataLine.class));
+		Assert.assertNotNull(targetDataLine);
+
+		LineListener closeListener = new LineListener() {
+			private int calledCount = 0;
+
+			@Override
+			public void update(LineEvent event) {
+				Assert.assertEquals(LineEvent.Type.CLOSE, event.getType());
+				calledCount++;
+				Assert.assertEquals(1, calledCount);
+			}
+
+		};
+
+
+		targetDataLine.open();
+		targetDataLine.addLineListener(closeListener);
+		targetDataLine.close();
+		targetDataLine.removeLineListener(closeListener);
+		
+	}
+	
+	
+	@After
+	public void tearDown() {
+		mixer.close();
+	}
+
+}