summaryrefslogtreecommitdiffstats
path: root/src/tests
diff options
context:
space:
mode:
authorDan Davison <dandavison7@gmail.com>2020-05-23 12:29:40 -0400
committerDan Davison <dandavison7@gmail.com>2020-05-25 17:58:09 -0400
commit516a50f732342c37a21bc4c0d3376464332cf845 (patch)
tree7cef595c5a899bbf2aebfc216b16b3b4c6048614 /src/tests
parent7ffc759c7c825b9234606c90016b5bc1956c0c3d (diff)
Add tests of --file-style, --commit-style, --hunk-style
Diffstat (limited to 'src/tests')
-rw-r--r--src/tests/ansi_test_utils.rs30
-rw-r--r--src/tests/test_example_diffs.rs272
2 files changed, 300 insertions, 2 deletions
diff --git a/src/tests/ansi_test_utils.rs b/src/tests/ansi_test_utils.rs
index b1fc10d8..bb7d52d8 100644
--- a/src/tests/ansi_test_utils.rs
+++ b/src/tests/ansi_test_utils.rs
@@ -1,8 +1,36 @@
#[cfg(test)]
pub mod ansi_test_utils {
+ use ansi_term;
use console::strip_ansi_codes;
- use crate::config::Config;
+ use crate::config::{color_from_rgb_or_ansi_code, Config};
+
+ pub fn has_foreground_color(string: &str, color: ansi_term::Color) -> bool {
+ let style = ansi_term::Style::default().fg(color);
+ string.starts_with(&style.prefix().to_string())
+ }
+
+ pub fn assert_line_has_foreground_color(
+ output: &str,
+ line_number: usize,
+ expected_prefix: &str,
+ expected_color: &str,
+ config: &Config,
+ ) {
+ let line = output.lines().nth(line_number).unwrap();
+ assert!(strip_ansi_codes(line).starts_with(expected_prefix));
+ assert!(has_foreground_color(
+ line,
+ color_from_rgb_or_ansi_code(expected_color, config.true_color)
+ ));
+ }
+
+ pub fn assert_line_has_no_color(output: &str, line_number: usize, expected_prefix: &str) {
+ let line = output.lines().nth(line_number).unwrap();
+ let stripped_line = strip_ansi_codes(line);
+ assert!(stripped_line.starts_with(expected_prefix));
+ assert_eq!(line, stripped_line);
+ }
pub fn assert_has_color_other_than_plus_color(string: &str, config: &Config) {
let (string_without_any_color, string_with_plus_color_only) =
diff --git a/src/tests/test_example_diffs.rs b/src/tests/test_example_diffs.rs
index a01c94ce..fc68f4e9 100644
--- a/src/tests/test_example_diffs.rs
+++ b/src/tests/test_example_diffs.rs
@@ -1,8 +1,10 @@
#[cfg(test)]
mod tests {
+ use console::strip_ansi_codes;
+
+ use crate::cli::SectionStyle;
use crate::tests::ansi_test_utils::ansi_test_utils;
use crate::tests::integration_test_utils::integration_test_utils;
- use console::strip_ansi_codes;
#[test]
fn test_added_file() {
@@ -202,6 +204,274 @@ mod tests {
assert!(output.contains("\n Subject: [PATCH] Init\n"));
}
+ #[test]
+ fn test_commit_style_plain() {
+ let mut options = integration_test_utils::get_command_line_options();
+ options.commit_style = SectionStyle::Plain;
+ // TODO: --commit-color has no effect in conjunction with --commit-style plain
+ let (output, _) = integration_test_utils::run_delta(GIT_DIFF_SINGLE_HUNK, options);
+ ansi_test_utils::assert_line_has_no_color(
+ &output,
+ 0,
+ "commit 94907c0f136f46dc46ffae2dc92dca9af7eb7c2e",
+ );
+ let output = strip_ansi_codes(&output);
+ assert!(output.contains(
+ "\
+commit 94907c0f136f46dc46ffae2dc92dca9af7eb7c2e
+"
+ ));
+ }
+
+ #[test]
+ fn test_commit_style_box() {
+ let mut options = integration_test_utils::get_command_line_options();
+ options.commit_style = SectionStyle::Box;
+ options.commit_color = "blue".to_string();
+ let (output, config) = integration_test_utils::run_delta(GIT_DIFF_SINGLE_HUNK, options);
+ ansi_test_utils::assert_line_has_foreground_color(
+ &output,
+ 0,
+ "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓",
+ "blue",
+ &config,
+ );
+ ansi_test_utils::assert_line_has_foreground_color(
+ &output,
+ 1,
+ "commit 94907c0f136f46dc46ffae2dc92dca9af7eb7c2e ┃",
+ "blue",
+ &config,
+ );
+ ansi_test_utils::assert_line_has_foreground_color(
+ &output,
+ 2,
+ "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┻━",
+ "blue",
+ &config,
+ );
+ let output = strip_ansi_codes(&output);
+ assert!(output.contains(
+ "\
+━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
+commit 94907c0f136f46dc46ffae2dc92dca9af7eb7c2e ┃
+━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┻━"
+ ));
+ }
+
+ #[test]
+ fn test_commit_style_underline() {
+ let mut options = integration_test_utils::get_command_line_options();
+ options.commit_style = SectionStyle::Underline;
+ options.commit_color = "yellow".to_string();
+ let (output, config) = integration_test_utils::run_delta(GIT_DIFF_SINGLE_HUNK, options);
+ ansi_test_utils::assert_line_has_foreground_color(
+ &output,
+ 0,
+ "commit 94907c0f136f46dc46ffae2dc92dca9af7eb7c2e",
+ "yellow",
+ &config,
+ );
+ ansi_test_utils::assert_line_has_foreground_color(
+ &output,
+ 1,
+ "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━",
+ "yellow",
+ &config,
+ );
+ let output = strip_ansi_codes(&output);
+ assert!(output.contains(
+ "\
+commit 94907c0f136f46dc46ffae2dc92dca9af7eb7c2e
+━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
+ ));
+ }
+
+ #[test]
+ fn test_file_style_plain() {
+ let mut options = integration_test_utils::get_command_line_options();
+ options.file_style = SectionStyle::Plain;
+ // TODO: --file-color has no effect in conjunction with --file-style plain
+ let (output, _) = integration_test_utils::run_delta(GIT_DIFF_SINGLE_HUNK, options);
+ for (i, line) in vec![
+ "diff --git a/src/align.rs b/src/align.rs",
+ "index 8e37a9e..6ce4863 100644",
+ "--- a/src/align.rs",
+ "+++ b/src/align.rs",
+ ]
+ .iter()
+ .enumerate()
+ {
+ ansi_test_utils::assert_line_has_no_color(&output, 6 + i, line);
+ }
+ let output = strip_ansi_codes(&output);
+ assert!(output.contains(
+ "
+diff --git a/src/align.rs b/src/align.rs
+index 8e37a9e..6ce4863 100644
+--- a/src/align.rs
++++ b/src/align.rs
+"
+ ));
+ }
+
+ #[test]
+ fn test_file_style_box() {
+ let mut options = integration_test_utils::get_command_line_options();
+ options.file_style = SectionStyle::Box;
+ options.file_color = "green".to_string();
+ let (output, config) = integration_test_utils::run_delta(GIT_DIFF_SINGLE_HUNK, options);
+ ansi_test_utils::assert_line_has_foreground_color(
+ &output,
+ 7,
+ "─────────────┐",
+ "green",
+ &config,
+ );
+ ansi_test_utils::assert_line_has_foreground_color(
+ &output,
+ 8,
+ "src/align.rs │",
+ "green",
+ &config,
+ );
+ ansi_test_utils::assert_line_has_foreground_color(
+ &output,
+ 9,
+ "─────────────┴─",
+ "green",
+ &config,
+ );
+ let output = strip_ansi_codes(&output);
+ assert!(output.contains(
+ "
+─────────────┐
+src/align.rs │
+─────────────┴─"
+ ));
+ }
+
+ #[test]
+ fn test_file_style_underline() {
+ let mut options = integration_test_utils::get_command_line_options();
+ options.file_style = SectionStyle::Underline;
+ options.file_color = "magenta".to_string();
+ let (output, config) = integration_test_utils::run_delta(GIT_DIFF_SINGLE_HUNK, options);
+ ansi_test_utils::assert_line_has_foreground_color(
+ &output,
+ 7,
+ "src/align.rs",
+ "magenta",
+ &config,
+ );
+ ansi_test_utils::assert_line_has_foreground_color(
+ &output,
+ 8,
+ "────────────",
+ "magenta",
+ &config,
+ );
+ let output = strip_ansi_codes(&output);
+ assert!(output.contains(
+ "
+src/align.rs
+────────────"
+ ));
+ }
+
+ #[test]
+ fn test_hunk_style_plain() {
+ let mut options = integration_test_utils::get_command_line_options();
+ options.hunk_style = SectionStyle::Plain;
+ // TODO: --hunk-color has no effect in conjunction with --hunk-style plain
+ let (output, _) = integration_test_utils::run_delta(GIT_DIFF_SINGLE_HUNK, options);
+ ansi_test_utils::assert_line_has_no_color(
+ &output,
+ 9,
+ "@@ -71,11 +71,8 @@ impl<'a> Alignment<'a> {",
+ );
+ let output = strip_ansi_codes(&output);
+ assert!(output.contains("@@ -71,11 +71,8 @@ impl<'a> Alignment<'a> {"));
+ }
+
+ #[test]
+ fn test_hunk_style_box() {
+ let mut options = integration_test_utils::get_command_line_options();
+ options.hunk_style = SectionStyle::Box;
+ options.hunk_color = "white".to_string();
+ let (output, config) = integration_test_utils::run_delta(GIT_DIFF_SINGLE_HUNK, options);
+ ansi_test_utils::assert_line_has_foreground_color(
+ &output,
+ 9,
+ "──────────────────────────┐",
+ "white",
+ &config,
+ );
+ ansi_test_utils::assert_line_has_foreground_color(
+ &output,
+ 11,
+ "──────────────────────────┘",
+ "white",
+ &config,
+ );
+ let output = strip_ansi_codes(&output);
+ assert!(output.contains(
+ "
+──────────────────────────┐
+ impl<'a> Alignment<'a> { │
+──────────────────────────┘
+"
+ ));
+ }
+
+ #[test]
+ fn test_hunk_style_underline() {
+ let mut options = integration_test_utils::get_command_line_options();
+ options.hunk_style = SectionStyle::Underline;
+ options.hunk_color = "black".to_string();
+ let (output, config) = integration_test_utils::run_delta(GIT_DIFF_SINGLE_HUNK, options);
+ ansi_test_utils::assert_line_has_foreground_color(
+ &output,
+ 10,
+ "─────────────────────────",
+ "black",
+ &config,
+ );
+ let output = strip_ansi_codes(&output);
+ assert!(output.contains(
+ "
+ impl<'a> Alignment<'a> {
+─────────────────────────"
+ ));
+ }
+
+ const GIT_DIFF_SINGLE_HUNK: &str = "\
+commit 94907c0f136f46dc46ffae2dc92dca9af7eb7c2e
+Author: Dan Davison <dandavison7@gmail.com>
+Date: Thu May 14 11:13:17 2020 -0400
+
+ rustfmt
+
+diff --git a/src/align.rs b/src/align.rs
+index 8e37a9e..6ce4863 100644
+--- a/src/align.rs
++++ b/src/align.rs
+@@ -71,11 +71,8 @@ impl<'a> Alignment<'a> {
+
+ for (i, x_i) in self.x.iter().enumerate() {
+ for (j, y_j) in self.y.iter().enumerate() {
+- let (left, diag, up) = (
+- self.index(i, j + 1),
+- self.index(i, j),
+- self.index(i + 1, j),
+- );
++ let (left, diag, up) =
++ (self.index(i, j + 1), self.index(i, j), self.index(i + 1, j));
+ let candidates = [
+ Cell {
+ parent: left,
+";
+
const DIFF_IN_DIFF: &str = "\
diff --git a/0001-Init.patch b/0001-Init.patch
deleted file mode 100644