From 25ed7c09c535470bfaf2c585f0935ee2df4d8d37 Mon Sep 17 00:00:00 2001 From: Narendra Pathai Date: Sun, 21 Oct 2018 23:45:33 +0530 Subject: [PATCH] Refactored Event Queue (#806) * 1) Test cases were not stopping AudioService before ending test case 2) Changed Audio to be a good singleton, previously because of Audio being bad singleton, test cases which were using static methods could have caused intermittent failures. 3) Made some other refactorings as well * Removed sonar issue and converted Audio to eager singleton for simplicity * Updated class diagram PNG --- event-queue/etc/model.png | Bin 17218 -> 23221 bytes .../java/com/iluwatar/event/queue/App.java | 14 ++-- .../java/com/iluwatar/event/queue/Audio.java | 64 ++++++++++-------- .../com/iluwatar/event/queue/AudioTest.java | 29 +++++--- 4 files changed, 64 insertions(+), 43 deletions(-) diff --git a/event-queue/etc/model.png b/event-queue/etc/model.png index 45620e6f69a195b637d0840250bbdf976b9e356a..925308ecd36a3283c53fd4f73aef731c5e18177f 100644 GIT binary patch literal 23221 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

2sf41D4)!O<}5Z3^BA@%j8 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 rmv?{vs>IF30Y5hZl=p7_t~ { + while (!Thread.currentThread().isInterrupted()) { + update(); } }); } @@ -90,7 +100,7 @@ public class Audio { /** * This is a synchronized thread starter */ - public static synchronized void startThread() { + private synchronized void startThread() { if (!updateThread.isAlive()) { updateThread.start(); headIndex = 0; @@ -103,7 +113,7 @@ public class Audio { * @param stream is the AudioInputStream for the method * @param volume is the level of the audio's volume */ - public static void playSound(AudioInputStream stream, float volume) { + public void playSound(AudioInputStream stream, float volume) { init(); // Walk the pending requests. for (int i = headIndex; i != tailIndex; i = (i + 1) % MAX_PENDING) { @@ -123,7 +133,7 @@ public class Audio { * This method uses the Update Method pattern. * It takes the audio from the queue and plays it */ - public static void update() { + private void update() { // If there are no pending requests, do nothing. if (headIndex == tailIndex) { return; @@ -136,13 +146,11 @@ public class Audio { clip.open(audioStream); clip.start(); } catch (LineUnavailableException e) { - System.err.println("Error occoured while loading the audio: The line is unavailable"); - e.printStackTrace(); + LOGGER.trace("Error occoured while loading the audio: The line is unavailable", e); } catch (IOException e) { - System.err.println("Input/Output error while loading the audio"); - e.printStackTrace(); + LOGGER.trace("Input/Output error while loading the audio", e); } catch (IllegalArgumentException e) { - System.err.println("The system doesn't support the sound: " + e.getMessage()); + LOGGER.trace("The system doesn't support the sound: " + e.getMessage(), e); } } @@ -153,7 +161,7 @@ public class Audio { * @throws UnsupportedAudioFileException when the audio file is not supported * @throws IOException when the file is not readable */ - public static AudioInputStream getAudioStream(String filePath) + public AudioInputStream getAudioStream(String filePath) throws UnsupportedAudioFileException, IOException { return AudioSystem.getAudioInputStream(new File(filePath).getAbsoluteFile()); } @@ -162,7 +170,7 @@ public class Audio { * Returns with the message array of the queue * @return PlayMessage[] */ - public static PlayMessage[] getPendingAudio() { + public PlayMessage[] getPendingAudio() { return pendingAudio; } diff --git a/event-queue/src/test/java/com/iluwatar/event/queue/AudioTest.java b/event-queue/src/test/java/com/iluwatar/event/queue/AudioTest.java index 47f332526..8cd7c9b89 100644 --- a/event-queue/src/test/java/com/iluwatar/event/queue/AudioTest.java +++ b/event-queue/src/test/java/com/iluwatar/event/queue/AudioTest.java @@ -23,6 +23,7 @@ package com.iluwatar.event.queue; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import javax.sound.sampled.UnsupportedAudioFileException; @@ -39,6 +40,12 @@ import static org.junit.jupiter.api.Assertions.assertTrue; */ public class AudioTest { + private Audio audio; + + @BeforeEach + void createAudioInstance() { + audio = new Audio(); + } /** * Test here that the playSound method works correctly * @throws UnsupportedAudioFileException when the audio file is not supported @@ -47,13 +54,15 @@ public class AudioTest { */ @Test public void testPlaySound() throws UnsupportedAudioFileException, IOException, InterruptedException { - Audio.playSound(Audio.getAudioStream("./etc/Bass-Drum-1.wav"), -10.0f); + audio.playSound(audio.getAudioStream("./etc/Bass-Drum-1.wav"), -10.0f); // test that service is started - assertTrue(Audio.isServiceRunning()); + assertTrue(audio.isServiceRunning()); // adding a small pause to be sure that the sound is ended Thread.sleep(5000); + + audio.stopService(); // test that service is finished - assertFalse(!Audio.isServiceRunning()); + assertFalse(audio.isServiceRunning()); } /** @@ -64,16 +73,18 @@ public class AudioTest { */ @Test public void testQueue() throws UnsupportedAudioFileException, IOException, InterruptedException { - Audio.playSound(Audio.getAudioStream("./etc/Bass-Drum-1.aif"), -10.0f); - Audio.playSound(Audio.getAudioStream("./etc/Bass-Drum-1.aif"), -10.0f); - Audio.playSound(Audio.getAudioStream("./etc/Bass-Drum-1.aif"), -10.0f); - assertTrue(Audio.getPendingAudio().length > 0); + audio.playSound(audio.getAudioStream("./etc/Bass-Drum-1.aif"), -10.0f); + audio.playSound(audio.getAudioStream("./etc/Bass-Drum-1.aif"), -10.0f); + audio.playSound(audio.getAudioStream("./etc/Bass-Drum-1.aif"), -10.0f); + assertTrue(audio.getPendingAudio().length > 0); // test that service is started - assertTrue(Audio.isServiceRunning()); + assertTrue(audio.isServiceRunning()); // adding a small pause to be sure that the sound is ended Thread.sleep(10000); + + audio.stopService(); // test that service is finished - assertFalse(!Audio.isServiceRunning()); + assertFalse(audio.isServiceRunning()); } }