smd_tests 0.0.7

Tests for the smd! macro
#[cfg(test)]
mod tests {
  use smithy::{
    self,
    smd,
    types::Component,
  };
  use std::{
    cell::RefCell,
    rc::Rc,
  };

  #[test]
  fn basic_post_render() {
    let post_render_has_been_called = Rc::new(RefCell::new(false));
    let post_render_has_been_called_2 = post_render_has_been_called.clone();
    let mut app = smd!(
      post_render={|| { *post_render_has_been_called.borrow_mut() = true; }};
      <div />
    );

    app.handle_post_render();
    assert!(*post_render_has_been_called_2.borrow());
  }

  #[test]
  fn nested_post_render() {
    let post_render_has_been_called = Rc::new(RefCell::new(false));
    let post_render_has_been_called_2 = post_render_has_been_called.clone();
    let mut inner = smd!(
      post_render={|| { *post_render_has_been_called.borrow_mut() = true; }};
      <div />
    );
    let mut outer = smd!({ &mut inner });

    outer.handle_post_render();
    assert!(*post_render_has_been_called_2.borrow());
  }

  #[test]
  fn post_render_happens_in_order() {
    let post_render: Rc<RefCell<Vec<&'static str>>> = Rc::new(RefCell::new(vec![]));
    let post_render_2 = post_render.clone();
    let post_render_3 = post_render.clone();

    let mut first = smd!(
      post_render={|| { post_render.borrow_mut().push("first"); }};
      <div />
    );
    let mut second = smd!(
      post_render={|| { post_render_2.borrow_mut().push("second"); }};
      <div />
    );
    let mut outer = smd!({ &mut first }{ &mut second });

    outer.handle_post_render();

    assert_eq!(*post_render_3.borrow(), vec!["first", "second"]);
  }
}