mpdclient 0.2.0

Rust interface to MPD using libmpdclient
Documentation
use mpdclient::{Error, Message};

use crate::common::setup_mpd;

mod common;

#[test]
fn roundtrip() -> eyre::Result<()> {
    setup_mpd(
        |_| Ok(()),
        |conn| {
            let channel = conn.channel();
            channel.subscribe("test_roundtrip")?;
            channel.channel_write("test_roundtrip", "a message")?;
            let messages = channel
                .read_subscriptions()?
                .collect::<Result<Vec<Message>, Error>>()?;

            assert_eq!(messages.len(), 1);
            assert_eq!(
                messages[0],
                Message {
                    channel: "test_roundtrip".to_string(),
                    text: "a message".to_string()
                }
            );
            Ok(())
        },
    )
}

#[test]
fn multiple_messages() -> eyre::Result<()> {
    setup_mpd(
        |_| Ok(()),
        |conn| {
            let channel = conn.channel();
            channel.subscribe("test_multiple_msg")?;
            channel.channel_write("test_multiple_msg", "a message")?;
            channel.channel_write("test_multiple_msg", "second message")?;
            channel.channel_write("test_multiple_msg", "the third")?;
            let messages = channel
                .read_subscriptions()?
                .collect::<Result<Vec<Message>, Error>>()?;

            assert_eq!(
                messages,
                vec![
                    Message {
                        channel: "test_multiple_msg".to_string(),
                        text: "a message".to_string()
                    },
                    Message {
                        channel: "test_multiple_msg".to_string(),
                        text: "second message".to_string()
                    },
                    Message {
                        channel: "test_multiple_msg".to_string(),
                        text: "the third".to_string()
                    }
                ]
            );
            Ok(())
        },
    )
}

#[test]
fn multiple_channel() -> eyre::Result<()> {
    setup_mpd(
        |_| Ok(()),
        |conn| {
            let channel = conn.channel();
            channel.subscribe("test_multiple_ch1")?;
            channel.subscribe("test_multiple_ch2")?;
            channel.subscribe("test_multiple_ch3")?;
            channel.channel_write("test_multiple_ch1", "a message")?;
            channel.channel_write("test_multiple_ch2", "second message")?;
            channel.channel_write("test_multiple_ch3", "the third")?;
            let messages = channel
                .read_subscriptions()?
                .collect::<Result<Vec<Message>, Error>>()?;

            assert_eq!(
                messages,
                vec![
                    Message {
                        channel: "test_multiple_ch1".to_string(),
                        text: "a message".to_string()
                    },
                    Message {
                        channel: "test_multiple_ch2".to_string(),
                        text: "second message".to_string()
                    },
                    Message {
                        channel: "test_multiple_ch3".to_string(),
                        text: "the third".to_string()
                    }
                ]
            );
            Ok(())
        },
    )
}

#[test]
fn list() -> eyre::Result<()> {
    setup_mpd(
        |_| Ok(()),
        |conn| {
            let channel = conn.channel();
            channel.subscribe("test_list1")?;
            channel.subscribe("test_list2")?;
            let list = channel.list()?;
            assert!(list.contains(&"test_list1".to_string()));
            assert!(list.contains(&"test_list2".to_string()));
            Ok(())
        },
    )
}