use server::Server;
use definitions::registration::CucumberRegistrar;
use runner::WorldRunner;
use itertools::Itertools;
use std::process::{self, Command, Stdio};
use std::thread;
use std::time::Duration;
pub fn start<W: Send + 'static>(world: W, register_fns: &[&Fn(&mut CucumberRegistrar<W>)]) {
start_with_addr("0.0.0.0:7878", world, register_fns)
}
#[allow(unused_variables)]
pub fn start_with_addr<W: Send + 'static>(addr: &'static str, world: W, register_fns: &[&Fn(&mut CucumberRegistrar<W>)]) {
let mut runner = WorldRunner::new(world);
register_fns.iter().foreach(|fun| fun(&mut runner));
let server = Server::new(runner);
let (handle, stop_rx) = server.start(Some(addr));
let status = ruby_command()
.spawn()
.unwrap_or_else(|e| { panic!("failed to execute process: {}", e) })
.wait().unwrap();
thread::sleep(Duration::new(2, 0));
process::exit(status.code().unwrap());
}
pub fn ruby_command() -> Command {
let mut command = Command::new("cucumber");
command.stdout(Stdio::inherit());
command.stderr(Stdio::inherit());
command
}