ibuilder 0.1.8

Interactive builder for Rust types
Documentation
#![allow(dead_code)]

use ibuilder::*;

#[derive(IBuilder)]
struct DefaultPrompt {
    field: i32,
}

#[derive(IBuilder)]
#[ibuilder(prompt = "lol or lel?")]
struct UnnamedStruct(String);

#[derive(IBuilder)]
#[ibuilder(prompt = "lol or lel?")]
struct CustomPrompt {
    #[ibuilder(prompt = "plain field prompt")]
    field: i32,
    #[ibuilder(prompt = "override enum")]
    var: Enum,
    #[ibuilder(prompt = "override struct")]
    nest: Nested,
}

#[derive(IBuilder)]
#[ibuilder(prompt = "base prompt")]
struct Nested {
    field: i32,
}

#[derive(IBuilder)]
#[ibuilder(prompt = "base prompt")]
enum Enum {
    Var,
}

#[test]
fn default_prompt() {
    let mut builder = DefaultPrompt::builder();

    let options = builder.get_options();
    assert!(!options.query.is_empty());

    builder.choose(Input::choice("field")).unwrap();
    let options = builder.get_options();
    assert!(!options.query.is_empty());
}

#[test]
fn unnamed_prompt() {
    let builder = UnnamedStruct::builder();

    let options = builder.get_options();
    assert_eq!(options.query, "lol or lel?");
}

#[test]
fn custom_prompt() {
    let mut builder = CustomPrompt::builder();

    let options = builder.get_options();
    assert_eq!(options.query, "lol or lel?");

    builder.choose(Input::choice("field")).unwrap();
    let options = builder.get_options();
    assert_eq!(options.query, "plain field prompt");

    builder.choose(Input::choice(BACK_ID)).unwrap();
    builder.choose(Input::choice("var")).unwrap();
    let options = builder.get_options();
    assert_eq!(options.query, "override enum");

    builder.choose(Input::choice(BACK_ID)).unwrap();
    builder.choose(Input::choice("nest")).unwrap();
    let options = builder.get_options();
    assert_eq!(options.query, "override struct");
}