MusicAssetTests

This commit is contained in:
michiel301b
2025-12-18 20:57:39 +01:00
parent e5e79bb9b0
commit 153e6343e1
5 changed files with 136 additions and 1 deletions

View File

@@ -4,6 +4,9 @@
<inspection_tool class="AutoCloseableResource" enabled="true" level="WARNING" enabled_by_default="true"> <inspection_tool class="AutoCloseableResource" enabled="true" level="WARNING" enabled_by_default="true">
<option name="METHOD_MATCHER_CONFIG" value="java.util.Formatter,format,java.io.Writer,append,com.google.common.base.Preconditions,checkNotNull,org.hibernate.Session,close,java.io.PrintWriter,printf,java.io.PrintStream,printf,java.lang.foreign.Arena,ofAuto,java.lang.foreign.Arena,global,org.toop.framework.audio.AudioPlayer,play,java.util.Map,remove,java.util.concurrent.Executors,newSingleThreadScheduledExecutor" /> <option name="METHOD_MATCHER_CONFIG" value="java.util.Formatter,format,java.io.Writer,append,com.google.common.base.Preconditions,checkNotNull,org.hibernate.Session,close,java.io.PrintWriter,printf,java.io.PrintStream,printf,java.lang.foreign.Arena,ofAuto,java.lang.foreign.Arena,global,org.toop.framework.audio.AudioPlayer,play,java.util.Map,remove,java.util.concurrent.Executors,newSingleThreadScheduledExecutor" />
</inspection_tool> </inspection_tool>
<inspection_tool class="ThrowablePrintStackTrace" enabled="true" level="WARNING" enabled_by_default="true">
<scope name="Tests" level="WARNING" enabled="false" />
</inspection_tool>
<inspection_tool class="WriteOnlyObject" enabled="false" level="WARNING" enabled_by_default="false" /> <inspection_tool class="WriteOnlyObject" enabled="false" level="WARNING" enabled_by_default="false" />
</profile> </profile>
</component> </component>

View File

@@ -82,6 +82,10 @@ public class MusicAsset extends BaseResource implements LoadableResource, AudioR
getMediaPlayer().pause(); getMediaPlayer().pause();
} }
public double getVolume() {
return volume;
}
@Override @Override
public void stop() { public void stop() {
getMediaPlayer().stop(); getMediaPlayer().stop();

Binary file not shown.

View File

@@ -0,0 +1,128 @@
package org.toop.framework.audio;
import javafx.application.Platform;
import javafx.scene.media.MediaPlayer;
import javafx.util.Duration;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.toop.framework.resource.resources.MusicAsset;
import java.io.File;
import java.net.URL;
import java.util.concurrent.CountDownLatch;
import static org.junit.jupiter.api.Assertions.*;
public class MusicAssetTest {
private static boolean started = false;
private MusicAsset musicAsset;
@BeforeAll
static void initJavaFX() throws Exception {
if (started) {
return;
}
CountDownLatch countDownLatch = new CountDownLatch(1);
Platform.startup(countDownLatch::countDown);
countDownLatch.await();
started = true;
}
private static void run(Runnable action) {
CountDownLatch countDownLatch = new CountDownLatch(1);
Platform.runLater(() -> {
try {
action.run();
} finally {
countDownLatch.countDown();
}
});
try {
countDownLatch.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
private MusicAsset createMusicAsset() {
URL asset = getClass().getClassLoader().getResource("test.mp3");
assertNotNull(asset, "Test MP3 not found");
File testFile = new File(asset.getFile());
assertTrue(testFile.exists(), "File doesn't exist");
return new MusicAsset(testFile);
}
private void wait(MediaPlayer player, MediaPlayer.Status status, long timeout) throws InterruptedException {
long start = System.currentTimeMillis();
while (player.getStatus() != status && System.currentTimeMillis() - start < timeout) {
Thread.sleep(10);
}
}
@Test
void loadMusicAssetAsLoaded() {
MusicAsset musicAsset = createMusicAsset();
run(musicAsset::load);
assertTrue(musicAsset.isLoaded());
assertNotNull(musicAsset.getMediaPlayer());
}
@Test
void loadMusicAssetAsNotLoaded() {
MusicAsset musicAsset = createMusicAsset();
run(musicAsset::load);
assertTrue(musicAsset.isLoaded());
run(musicAsset::unload);
assertFalse(musicAsset.isLoaded());
assertNotNull(musicAsset.getMediaPlayer());
}
@Test
void updateVolume() {
MusicAsset musicAsset = createMusicAsset();
musicAsset.updateVolume(0.5);
assertEquals(0.5, musicAsset.getVolume(), 0.0000001);
}
@Test
void playPauseStop() throws InterruptedException {
MusicAsset musicAsset = createMusicAsset();
run(musicAsset::load);
run(musicAsset::play);
wait(musicAsset.getMediaPlayer(), MediaPlayer.Status.PLAYING, 500);
assertEquals(MediaPlayer.Status.PLAYING, musicAsset.getMediaPlayer().getStatus());
run(musicAsset::pause);
wait(musicAsset.getMediaPlayer(), MediaPlayer.Status.PAUSED, 500);
assertEquals(MediaPlayer.Status.PAUSED, musicAsset.getMediaPlayer().getStatus());
run(musicAsset::stop);
wait(musicAsset.getMediaPlayer(), MediaPlayer.Status.STOPPED, 500);
assertEquals(MediaPlayer.Status.STOPPED, musicAsset.getMediaPlayer().getStatus());
}
@Test
void duration() throws InterruptedException {
MusicAsset musicAsset = createMusicAsset();
run(musicAsset::load);
wait(musicAsset.getMediaPlayer(), MediaPlayer.Status.READY, 500);
Duration duration = musicAsset.getMediaPlayer().getTotalDuration();
assertTrue(duration.toMillis() > 200); // file is shorter than 1 second, so gotta put it to milliseconds
}
@Test
void currentPosition() throws InterruptedException {
MusicAsset musicAsset = createMusicAsset();
run(musicAsset::load);
run(musicAsset::play);
wait(musicAsset.getMediaPlayer(), MediaPlayer.Status.PLAYING, 500);
Thread.sleep(200);
Duration currentPos = musicAsset.getMediaPlayer().getCurrentTime();
assertTrue(currentPos.toMillis() > 0); // file is shorter than 1 second, so gotta put it to milliseconds
}
}

View File

@@ -51,7 +51,7 @@ class MockAudioResource extends BaseResource implements AudioResource {
stopped = true; stopped = true;
} }
public void pause() { paused = false; } public void pause() { paused = true; }
@Override @Override
public long duration() { public long duration() {