summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorMatan Kushner <hello@matchai.me>2019-04-15 20:54:52 -0400
committerGitHub <noreply@github.com>2019-04-15 20:54:52 -0400
commit794ae7b2ad3d79009162fa7f2d4fe24997f7c2d1 (patch)
tree8a60c56f3092c1c21844bd5d842b4b328b67c6ea /tests
parentab5490bea691d6c5fbe525a54799c17d4bd76dca (diff)
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
Diffstat (limited to 'tests')
-rw-r--r--tests/character.rs29
-rw-r--r--tests/common.rs18
-rw-r--r--tests/directory.rs149
3 files changed, 196 insertions, 0 deletions
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(())
+}