mirror of
https://github.com/2OOP/pism.git
synced 2026-02-04 10:54:51 +00:00
Tests for SoundEffectManager
This commit is contained in:
@@ -0,0 +1,119 @@
|
||||
package org.toop.framework.audio;
|
||||
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.toop.framework.resource.ResourceMeta;
|
||||
import org.toop.framework.resource.resources.BaseResource;
|
||||
import org.toop.framework.resource.types.AudioResource;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.List;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
/**
|
||||
* Unit tests for SoundEffectManager.
|
||||
*/
|
||||
class MockSoundEffectResource extends BaseResource implements AudioResource {
|
||||
boolean played = false;
|
||||
boolean stopped = false;
|
||||
|
||||
public MockSoundEffectResource(String name) {
|
||||
super(new File(name));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return getFile().getName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void play() {
|
||||
played = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void stop() {
|
||||
stopped = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setOnEnd(Runnable callback) {}
|
||||
|
||||
@Override
|
||||
public void setOnError(Runnable callback) {}
|
||||
|
||||
@Override
|
||||
public void updateVolume(double volume) {}
|
||||
}
|
||||
|
||||
public class SoundEffectManagerTest {
|
||||
|
||||
private SoundEffectManager<MockAudioResource> manager;
|
||||
private MockAudioResource sfx1;
|
||||
private MockAudioResource sfx2;
|
||||
private MockAudioResource sfx3;
|
||||
|
||||
@BeforeEach
|
||||
void setUp() {
|
||||
sfx1 = new MockAudioResource("explosion.wav");
|
||||
sfx2 = new MockAudioResource("laser.wav");
|
||||
sfx3 = new MockAudioResource("jump.wav");
|
||||
|
||||
List<ResourceMeta<MockAudioResource>> resources = List.of(
|
||||
new ResourceMeta<>("explosion", sfx1),
|
||||
new ResourceMeta<>("laser", sfx2),
|
||||
new ResourceMeta<>("jump", sfx3)
|
||||
);
|
||||
|
||||
manager = new SoundEffectManager<>(resources);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testPlayValidSound() {
|
||||
manager.play("explosion", false);
|
||||
assertTrue(sfx1.played, "Sound 'explosion' should be played");
|
||||
}
|
||||
|
||||
@Test
|
||||
void testPlayInvalidSoundLogsWarning() {
|
||||
// Nothing should crash or throw
|
||||
assertDoesNotThrow(() -> manager.play("nonexistent", false));
|
||||
}
|
||||
|
||||
@Test
|
||||
void testStopValidSound() {
|
||||
manager.stop("laser");
|
||||
assertTrue(sfx2.stopped, "Sound 'laser' should be stopped");
|
||||
}
|
||||
|
||||
@Test
|
||||
void testStopInvalidSoundDoesNotThrow() {
|
||||
assertDoesNotThrow(() -> manager.stop("does_not_exist"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void testGetActiveAudioReturnsAll() {
|
||||
Collection<MockAudioResource> active = manager.getActiveAudio();
|
||||
assertEquals(3, active.size(), "All three sounds should be in active audio list");
|
||||
assertTrue(active.containsAll(List.of(sfx1, sfx2, sfx3)));
|
||||
}
|
||||
|
||||
@Test
|
||||
void testDuplicateResourceKeepsLast() {
|
||||
MockAudioResource oldRes = new MockAudioResource("duplicate_old.wav");
|
||||
MockAudioResource newRes = new MockAudioResource("duplicate_new.wav");
|
||||
|
||||
List<ResourceMeta<MockAudioResource>> list = new ArrayList<>();
|
||||
list.add(new ResourceMeta<>("dup", oldRes));
|
||||
list.add(new ResourceMeta<>("dup", newRes)); // duplicate key
|
||||
|
||||
SoundEffectManager<MockAudioResource> dupManager = new SoundEffectManager<>(list);
|
||||
dupManager.play("dup", false);
|
||||
|
||||
assertTrue(newRes.played, "New duplicate resource should override old one");
|
||||
assertFalse(oldRes.played, "Old duplicate resource should be discarded");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user