vpr-audio-player 0.1.0

Audio file player
Documentation
#[cfg(test)]
mod test_audio_frames_utils {
    use crate::player;
    use tokio::fs::File;

    #[tokio::test]
    async fn load_file() {
        let mut player = player::Player::new();
        let path = "assets/audio_1.mp3";
        let file = File::open(&path).await.unwrap();
        assert!(player.load_file(file).await.is_ok());
        assert!(player.is_file_loaded());
        assert_eq!(player.duration().unwrap().as_secs_f32().round(), 238.0);
    }

    #[tokio::test]
    async fn load_path() {
        let mut player = player::Player::new();
        let path = "assets/audio_1.mp3";
        assert!(player.load_path(path).await.is_ok());
        assert!(player.is_file_loaded());
        assert_eq!(player.duration().unwrap().as_secs_f32().round(), 238.0);
    }

    #[tokio::test]
    async fn volume() {
        let mut player = player::Player::new();
        let path = "assets/audio_1.mp3";
        player.load_path(path).await.unwrap();
        player.set_volume(0.5);
        assert_eq!(player.volume(), 0.5);
    }

    #[tokio::test]
    async fn play() {
        let mut player = player::Player::new();
        let path = "assets/audio_1.mp3";
        player.load_path(path).await.unwrap();
        player.set_volume(0.0);
        player.play();
        std::thread::sleep(std::time::Duration::from_secs(1));
        let elapsed_1 = player.elapsed().unwrap().as_secs_f32();
        std::thread::sleep(std::time::Duration::from_secs(2));
        let elapsed_2 = player.elapsed().unwrap().as_secs_f32();
        assert!(elapsed_1 < elapsed_2);
        assert!(elapsed_2 > 1.0);
        assert!(elapsed_2 > 3.0);
    }

    #[tokio::test]
    async fn seek() {
        let mut player = player::Player::new();
        let path = "assets/audio_1.mp3";
        player.load_path(path).await.unwrap();
        player.set_volume(0.0);
        player.play();
        std::thread::sleep(std::time::Duration::from_secs(1));
        player.seek(std::time::Duration::from_secs(10)).unwrap();
        std::thread::sleep(std::time::Duration::from_secs(1));
        let elapsed = player.elapsed().unwrap().as_secs_f32();
        assert!(elapsed > 10.0);
        assert!(elapsed < 12.0);
    }

    #[tokio::test]
    async fn pause() {
        let mut player = player::Player::new();
        let path = "assets/audio_1.mp3";
        player.load_path(path).await.unwrap();
        player.set_volume(0.0);
        player.play();
        std::thread::sleep(std::time::Duration::from_secs(1));
        player.pause();
        std::thread::sleep(std::time::Duration::from_secs(1));
        let elapsed_1 = player.elapsed().unwrap().as_secs_f32();
        std::thread::sleep(std::time::Duration::from_secs(2));
        let elapsed_2 = player.elapsed().unwrap().as_secs_f32();
        assert_eq!(elapsed_1, elapsed_2);
    }

    #[tokio::test]
    async fn stop() {
        let mut player = player::Player::new();
        let path = "assets/audio_1.mp3";
        player.load_path(path).await.unwrap();
        player.set_volume(0.0);
        player.play();
        player.stop();
        assert!(player.elapsed().is_err());
        assert!(player.duration().is_none());
        assert!(!player.is_seekable());
        assert!(!player.is_file_loaded());
    }
}