package ch.retorte.intervalmusiccompositor.bpm; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; import static org.mockito.Mockito.when; import java.io.File; import java.io.IOException; import java.net.URL; import javax.sound.sampled.AudioInputStream; import javax.sound.sampled.UnsupportedAudioFileException; import org.junit.Before; import org.junit.Test; import org.mockito.Mockito; import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; import at.ofai.music.beatroot.BeatRoot; import ch.retorte.intervalmusiccompositor.decoder.Mp3AudioFileDecoder; import ch.retorte.intervalmusiccompositor.spi.audio.AudioStandardizer; public class BeatRootIntegrationTest { AudioStandardizer normalizer = Mockito.mock(AudioStandardizer.class); @Before public void setup() { when(normalizer.standardize(Mockito.any(AudioInputStream.class))).then(new Answer<AudioInputStream>() { @Override public AudioInputStream answer(InvocationOnMock invocation) throws Throwable { return (AudioInputStream) invocation.getArguments()[0]; } }); } @Test public void shouldDetect120Bpm() throws UnsupportedAudioFileException, IOException { // given AudioInputStream audioInputStream = getStreamFromResourceName("120_bpm.mp3"); // when Integer bpm = new BeatRoot().calculateBPM(audioInputStream); // then assertThat(bpm, is(120)); } @Test public void shouldDetect64Bpm() throws UnsupportedAudioFileException, IOException { // given AudioInputStream audioInputStream = getStreamFromResourceName("64_bpm.mp3"); // when Integer bpm = new BeatRoot().calculateBPM(audioInputStream); // then assertThat(bpm, is(64)); } @Test public void shouldDetect178Bpm() throws UnsupportedAudioFileException, IOException { // given AudioInputStream audioInputStream = getStreamFromResourceName("178_bpm.mp3"); // when Integer bpm = new BeatRoot().calculateBPM(audioInputStream); // then assertThat(bpm, is(176)); // wut ??? } private AudioInputStream getStreamFromResourceName(String name) throws UnsupportedAudioFileException, IOException { URL resource = getClass().getClassLoader().getResource(name); if (resource == null) { throw new IOException(); } File bpmFile = new File(resource.getFile()); return new Mp3AudioFileDecoder(normalizer).decode(bpmFile); } }