notch 0.1.10

A compact and fast library for managing Minecraft servers.
Documentation
use std::io::{BufRead, BufReader};
use crate::jars::jar::Jar;
use crate::jars::manager::JarManager;
use crate::servers::downloader::Downloader;
use crate::servers::manipulator::Manipulator;
use crate::servers::runner::Runner;
use crate::servers::server::Server;
use std::path::Path;

#[test]
fn load_jars_includes_all_jars() {
    let manager = JarManager::load().unwrap();
    assert_eq!(manager.jars.len(), 4);
}

#[test]
fn wrong_path_should_return_error() {
    let jar = Jar {
        name: "".to_string(),
        version: None,
        build: None,
    };
    let path = Path::new("wrong_path");
    let server = Server::new("Test Server".to_string(), jar, path.to_path_buf());
    assert!(server.is_err());
}

#[test]
fn server_can_start() {
    let jars = JarManager::load().unwrap();
    let jar = &jars.jars[0];
    let jar = jar.get_latest().unwrap();

    let current_dir = std::env::current_dir().unwrap();
    let path = current_dir.join("servers").join("test_server");

    let mut server = Server::new("Test Server".to_string(), jar, path.to_path_buf()).unwrap();
    server.settings.gui = false;
    server.save().unwrap();

    let downloader = Downloader::new(&server);
    let result = downloader.download();
    assert!(result.is_ok());

    server.accept_eula().unwrap();

    let mut runner = Runner::new(&server, vec![], vec![]);
    let result = runner.start();
    assert!(result.is_ok());

    let mut child = result.unwrap();
    if let Some(ref mut stdout) = child.stdout {
        let reader = BufReader::new(stdout);
        for line in reader.lines() {
            let text = line.unwrap_or_default()
                .escape_default()
                .to_string();
            println!("{}", text);
            if text.contains("Done") {
                break;
            }
        }
    }
    let result = child.kill();
    assert!(result.is_ok());

    let manipulator = Manipulator::new(&server);
    let plugins = manipulator.plugins();
    assert!(plugins.is_ok());
    println!("{:?}", plugins.unwrap());

    println!("Jar name: {}", server.jar.name);

    manipulator.download_plugin("ViaVersion", "ViaVersion").unwrap();

    let plugins = manipulator.plugins();
    assert!(plugins.is_ok());
    println!("{:?}", plugins.unwrap());
}