From 794ae7b2ad3d79009162fa7f2d4fe24997f7c2d1 Mon Sep 17 00:00:00 2001 From: Matan Kushner Date: Mon, 15 Apr 2019 20:54:52 -0400 Subject: Add integration tests (#6) ### Changed - Added current_dir param to segments to make them more testable - Moved all existing integration tests to a `tests/` dir ### Added - A whole bunch of new integration tests --- tests/character.rs | 29 +++++++++++ tests/common.rs | 18 +++++++ tests/directory.rs | 149 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 196 insertions(+) create mode 100644 tests/character.rs create mode 100644 tests/common.rs create mode 100644 tests/directory.rs (limited to 'tests') diff --git a/tests/character.rs b/tests/character.rs new file mode 100644 index 000000000..c9b27b1e9 --- /dev/null +++ b/tests/character.rs @@ -0,0 +1,29 @@ +use ansi_term::Color; +use starship::segment::Segment; +use std::path::Path; + +mod common; + +#[test] +fn char_section_success_status() { + let dir = Path::new("~"); + let expected = Segment::new("char") + .set_value("➜") + .set_style(Color::Green) + .set_prefix(None) + .output(); + let actual = common::render_segment_with_status("char", &dir, "0"); + assert_eq!(expected, actual); +} + +#[test] +fn char_section_failure_status() { + let dir = Path::new("~"); + let expected = Segment::new("char") + .set_value("➜") + .set_style(Color::Red) + .set_prefix(None) + .output(); + let actual = common::render_segment_with_status("char", &dir, "1"); + assert_eq!(expected, actual); +} diff --git a/tests/common.rs b/tests/common.rs new file mode 100644 index 000000000..4bc62a5fa --- /dev/null +++ b/tests/common.rs @@ -0,0 +1,18 @@ +use clap::{App, Arg}; +use starship::modules; +use std::path::Path; + +pub fn render_segment(module: &str, path: &Path) -> String { + render_segment_with_status(module, path, "0") +} + +pub fn render_segment_with_status(module: &str, path: &Path, status: &str) -> String { + // Create an `Arg` with status_code of "0" + let args = App::new("starship") + .arg(Arg::with_name("status_code")) + .get_matches_from(vec!["starship", status]); + + let segment = modules::handle(module, path, &args); + + segment.unwrap().output() +} diff --git a/tests/directory.rs b/tests/directory.rs new file mode 100644 index 000000000..ae8d93736 --- /dev/null +++ b/tests/directory.rs @@ -0,0 +1,149 @@ +use ansi_term::Color; +use git2::Repository; +use starship::segment::Segment; +use std::fs; +use std::io; +use std::path::Path; +use tempdir::TempDir; + +mod common; + +#[test] +fn home_directory() -> io::Result<()> { + let dir = Path::new("~"); + + let expected = Segment::new("dir") + .set_value("~") + .set_style(Color::Cyan.bold()) + .output(); + let actual = common::render_segment("dir", &dir); + assert_eq!(expected, actual); + + Ok(()) +} + +#[test] +fn directory_in_home() -> io::Result<()> { + let dir = Path::new("~/starship/engine"); + + let expected = Segment::new("dir") + .set_value("~/starship/engine") + .set_style(Color::Cyan.bold()) + .output(); + let actual = common::render_segment("dir", &dir); + assert_eq!(expected, actual); + + Ok(()) +} + +#[test] +fn truncated_directory_in_home() -> io::Result<()> { + let dir = Path::new("~/starship/engine/schematics"); + + let expected = Segment::new("dir") + .set_value("starship/engine/schematics") + .set_style(Color::Cyan.bold()) + .output(); + let actual = common::render_segment("dir", &dir); + assert_eq!(expected, actual); + + Ok(()) +} + +#[test] +fn root_directory() -> io::Result<()> { + let dir = Path::new("/"); + + let expected = Segment::new("dir") + .set_value("/") + .set_style(Color::Cyan.bold()) + .output(); + let actual = common::render_segment("dir", &dir); + assert_eq!(expected, actual); + + Ok(()) +} + +#[test] +fn directory_in_root() -> io::Result<()> { + let dir = Path::new("/private"); + + let expected = Segment::new("dir") + .set_value("/private") + .set_style(Color::Cyan.bold()) + .output(); + let actual = common::render_segment("dir", &dir); + assert_eq!(expected, actual); + + Ok(()) +} + +#[test] +fn truncated_directory_in_root() -> io::Result<()> { + let dir = Path::new("/private/var/folders/3s"); + + let expected = Segment::new("dir") + .set_value("var/folders/3s") + .set_style(Color::Cyan.bold()) + .output(); + let actual = common::render_segment("dir", &dir); + assert_eq!(expected, actual); + + Ok(()) +} + +#[test] +fn git_repo_root() -> io::Result<()> { + let temp_dir = TempDir::new("starship")?; + let repo_dir = temp_dir.path().join("rocket-controls"); + fs::create_dir(&repo_dir)?; + + Repository::init(&repo_dir).unwrap(); + + let expected = Segment::new("dir") + .set_value("rocket-controls") + .set_style(Color::Cyan.bold()) + .output(); + let actual = common::render_segment("dir", &repo_dir); + assert_eq!(expected, actual); + + Ok(()) +} + +#[test] +fn directory_in_git_repo() -> io::Result<()> { + let temp_dir = TempDir::new("starship")?; + let repo_dir = temp_dir.path().join("rocket-controls"); + let dir = repo_dir.join("src"); + fs::create_dir_all(&dir)?; + + Repository::init(&repo_dir).unwrap(); + + let expected = Segment::new("dir") + .set_value("rocket-controls/src") + .set_style(Color::Cyan.bold()) + .output(); + let actual = common::render_segment("dir", &dir); + assert_eq!(expected, actual); + + Ok(()) +} + +#[test] +fn truncated_directory_in_git_repo() -> io::Result<()> { + let temp_dir = TempDir::new("starship")?; + let repo_dir = temp_dir.path().join("rocket-controls"); + let dir = repo_dir.join("src/meters/fuel-gauge"); + fs::create_dir_all(&dir)?; + + Repository::init(&repo_dir).unwrap(); + + let expected = Segment::new("dir") + .set_value("src/meters/fuel-gauge") + .set_style(Color::Cyan.bold()) + .output(); + let actual = common::render_segment("dir", &dir); + assert_eq!(expected, actual); + + Ok(()) +} -- cgit v1.2.3