summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCatherine Noll <noll.catherine@gmail.com>2021-03-20 22:54:53 -0500
committerCatherine Noll <noll.catherine@gmail.com>2021-03-20 22:54:53 -0500
commitcc1bf64939f3ae6af21dc258e4a5aeb78d202ecb (patch)
treed3529e66774c8d473637eaeb9f3c4f0677b1ed27
parente561a51371365da845e13b91617cc0aaa2d92ef1 (diff)
Use a sample diff for displaying themes
-rw-r--r--src/main.rs31
-rw-r--r--src/sample_diff.rs224
2 files changed, 236 insertions, 19 deletions
diff --git a/src/main.rs b/src/main.rs
index 82e41536..b03b95a3 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -22,6 +22,7 @@ mod options;
mod paint;
mod parse;
mod parse_style;
+mod sample_diff;
mod style;
mod syntect_color;
mod tests;
@@ -315,27 +316,19 @@ const THEMES: [&'static str; 4] = [
fn show_themes() -> std::io::Result<()> {
use bytelines::ByteLines;
use std::io::BufReader;
- let input = b"\
-diff --git a/example.rs b/example.rs
-index f38589a..0f1bb83 100644
---- a/example.rs
-+++ b/example.rs
-@@ -1,5 +1,5 @@
--// Output the square of a number.
--fn print_square(num: f64) {
-- let result = f64::powf(num, 2.0);
-- println!(\"The square of {:.2} is {:.2}.\", num, result);
-+// Output the cube of a number.
-+fn print_cube(num: f64) {
-+ let result = f64::powf(num, 3.0);
-+ println!(\"The cube of {:.2} is {:.2}.\", num, result);
-"
- .to_vec();
+ use sample_diff::DIFF;
+ let input = &DIFF.to_vec();
+
+ let mut git_config = git_config::GitConfig::try_create();
+ let opt = cli::Opt::from_iter_and_git_config(
+ &["", "", "--navigate"],
+ &mut git_config,
+ );
let mut output_type = OutputType::from_mode(
- PagingMode::QuitIfOneScreen,
+ PagingMode::Always,
None,
- &config::Config::from(cli::Opt::default()),
+ &config::Config::from(opt),
)
.unwrap();
let title_style = ansi_term::Style::new().bold();
@@ -345,7 +338,7 @@ index f38589a..0f1bb83 100644
writeln!(writer, "\n\nTheme: {}\n", title_style.paint(*theme))?;
let opt = cli::Opt::from_iter_and_git_config(
&["", "", "--features", theme],
- &mut git_config::GitConfig::try_create(),
+ &mut git_config,
);
let config = config::Config::from(opt);
if let Err(error) = delta(ByteLines::new(BufReader::new(&input[0..])), writer, &config) {
diff --git a/src/sample_diff.rs b/src/sample_diff.rs
new file mode 100644
index 00000000..2481f8d3
--- /dev/null
+++ b/src/sample_diff.rs
@@ -0,0 +1,224 @@
+pub const DIFF: &[u8; 8715] = b"\
+commit dc267979a46caee4d79ed2e3d17af9bd513c4e39
+Author: Dan Davison <dandavison7@gmail.com>
+Date: Fri Jan 8 10:33:55 2021 -0500
+
+ Prevent tests setting env vars from affecting other tests
+
+diff --git a/src/git_config/git_config.rs b/src/git_config/git_config.rs
+index 9620960..d95a6b1 100644
+--- a/src/git_config/git_config.rs
++++ b/src/git_config/git_config.rs
+@@ -42,10 +42,14 @@ impl GitConfig {
+ }
+
+ #[cfg(test)]
+- pub fn from_path(path: &Path) -> Self {
++ pub fn from_path(path: &Path, honor_env_var: bool) -> Self {
+ Self {
+ config: git2::Config::open(path).unwrap(),
+- config_from_env_var: parse_config_from_env_var(),
++ config_from_env_var: if honor_env_var {
++ parse_config_from_env_var()
++ } else {
++ HashMap::new()
++ },
+ repo: None,
+ enabled: true,
+ }
+diff --git a/src/options/get.rs b/src/options/get.rs
+index f19c329..a36987c 100644
+--- a/src/options/get.rs
++++ b/src/options/get.rs
+@@ -117,8 +117,13 @@ pub mod tests {
+
+ use crate::tests::integration_test_utils::integration_test_utils;
+
++ // TODO: the followig tests are collapsed into one since they all set the same env var and thus
++ // could affect each other if allowed to run concurrently.
++
+ #[test]
+- fn test_simple_string_env_var_overrides_git_config() {
++ fn test_env_var_overrides_git_config() {
++ // ----------------------------------------------------------------------------------------
++ // simple string
+ let git_config_contents = b\"
+ [delta]
+ plus-style = blue
+@@ -133,7 +138,7 @@ pub mod tests {
+ assert_eq!(opt.plus_style, \"blue\");
+
+ env::set_var(\"GIT_CONFIG_PARAMETERS\", \"'delta.plus-style=green'\");
+- let opt = integration_test_utils::make_options_from_args_and_git_config(
++ let opt = integration_test_utils::make_options_from_args_and_git_config_honoring_env_var(
+ &[],
+ Some(git_config_contents),
+ Some(git_config_path),
+@@ -141,10 +146,9 @@ pub mod tests {
+ assert_eq!(opt.plus_style, \"green\");
+
+ remove_file(git_config_path).unwrap();
+- }
+
+- #[test]
+- fn test_complex_string_env_var_overrides_git_config() {
++ // ----------------------------------------------------------------------------------------
++ // complex string
+ let git_config_contents = br##\"
+ [delta]
+ minus-style = red bold ul \"#ffeeee\"
+@@ -162,7 +166,7 @@ pub mod tests {
+ \"GIT_CONFIG_PARAMETERS\",
+ r##\"'delta.minus-style=magenta italic ol \"#aabbcc\"'\"##,
+ );
+- let opt = integration_test_utils::make_options_from_args_and_git_config(
++ let opt = integration_test_utils::make_options_from_args_and_git_config_honoring_env_var(
+ &[],
+ Some(git_config_contents),
+ Some(git_config_path),
+@@ -170,10 +174,9 @@ pub mod tests {
+ assert_eq!(opt.minus_style, r##\"magenta italic ol \"#aabbcc\"\"##,);
+
+ remove_file(git_config_path).unwrap();
+- }
+
+- #[test]
+- fn test_option_string_env_var_overrides_git_config() {
++ // ----------------------------------------------------------------------------------------
++ // option string
+ let git_config_contents = b\"
+ [delta]
+ plus-style = blue
+@@ -188,7 +191,7 @@ pub mod tests {
+ assert_eq!(opt.plus_style, \"blue\");
+
+ env::set_var(\"GIT_CONFIG_PARAMETERS\", \"'delta.plus-style=green'\");
+- let opt = integration_test_utils::make_options_from_args_and_git_config(
++ let opt = integration_test_utils::make_options_from_args_and_git_config_honoring_env_var(
+ &[],
+ Some(git_config_contents),
+ Some(git_config_path),
+@@ -196,10 +199,9 @@ pub mod tests {
+ assert_eq!(opt.plus_style, \"green\");
+
+ remove_file(git_config_path).unwrap();
+- }
+
+- #[test]
+- fn test_bool_env_var_overrides_git_config() {
++ // ----------------------------------------------------------------------------------------
++ // bool
+ let git_config_contents = b\"
+ [delta]
+ side-by-side = true
+@@ -214,7 +216,7 @@ pub mod tests {
+ assert_eq!(opt.side_by_side, true);
+
+ env::set_var(\"GIT_CONFIG_PARAMETERS\", \"'delta.side-by-side=false'\");
+- let opt = integration_test_utils::make_options_from_args_and_git_config(
++ let opt = integration_test_utils::make_options_from_args_and_git_config_honoring_env_var(
+ &[],
+ Some(git_config_contents),
+ Some(git_config_path),
+@@ -222,10 +224,9 @@ pub mod tests {
+ assert_eq!(opt.side_by_side, false);
+
+ remove_file(git_config_path).unwrap();
+- }
+
+- #[test]
+- fn test_int_env_var_overrides_git_config() {
++ // ----------------------------------------------------------------------------------------
++ // int
+ let git_config_contents = b\"
+ [delta]
+ max-line-length = 1
+@@ -240,7 +241,7 @@ pub mod tests {
+ assert_eq!(opt.max_line_length, 1);
+
+ env::set_var(\"GIT_CONFIG_PARAMETERS\", \"'delta.max-line-length=2'\");
+- let opt = integration_test_utils::make_options_from_args_and_git_config(
++ let opt = integration_test_utils::make_options_from_args_and_git_config_honoring_env_var(
+ &[],
+ Some(git_config_contents),
+ Some(git_config_path),
+@@ -248,17 +249,16 @@ pub mod tests {
+ assert_eq!(opt.max_line_length, 2);
+
+ remove_file(git_config_path).unwrap();
+- }
+
+- #[test]
+- fn test_float_env_var_overrides_git_config() {
++ // ----------------------------------------------------------------------------------------
++ // float
+ let git_config_contents = b\"
+ [delta]
+ max-line-distance = 0.6
+ \";
+ let git_config_path = \"delta__test_float_env_var_overrides_git_config.gitconfig\";
+
+- let opt = integration_test_utils::make_options_from_args_and_git_config(
++ let opt = integration_test_utils::make_options_from_args_and_git_config_honoring_env_var(
+ &[],
+ Some(git_config_contents),
+ Some(git_config_path),
+@@ -266,7 +266,7 @@ pub mod tests {
+ assert_eq!(opt.max_line_distance, 0.6);
+
+ env::set_var(\"GIT_CONFIG_PARAMETERS\", \"'delta.max-line-distance=0.7'\");
+- let opt = integration_test_utils::make_options_from_args_and_git_config(
++ let opt = integration_test_utils::make_options_from_args_and_git_config_honoring_env_var(
+ &[],
+ Some(git_config_contents),
+ Some(git_config_path),
+diff --git a/src/tests/integration_test_utils.rs b/src/tests/integration_test_utils.rs
+index 37ae057..8eb3674 100644
+--- a/src/tests/integration_test_utils.rs
++++ b/src/tests/integration_test_utils.rs
+@@ -17,12 +17,29 @@ pub mod integration_test_utils {
+ args: &[&str],
+ git_config_contents: Option<&[u8]>,
+ git_config_path: Option<&str>,
++ ) -> cli::Opt {
++ _make_options_from_args_and_git_config(args, git_config_contents, git_config_path, false)
++ }
++
++ pub fn make_options_from_args_and_git_config_honoring_env_var(
++ args: &[&str],
++ git_config_contents: Option<&[u8]>,
++ git_config_path: Option<&str>,
++ ) -> cli::Opt {
++ _make_options_from_args_and_git_config(args, git_config_contents, git_config_path, true)
++ }
++
++ fn _make_options_from_args_and_git_config(
++ args: &[&str],
++ git_config_contents: Option<&[u8]>,
++ git_config_path: Option<&str>,
++ honor_env_var: bool,
+ ) -> cli::Opt {
+ let mut args: Vec<&str> = itertools::chain(&[\"/dev/null\", \"/dev/null\"], args)
+ .map(|s| *s)
+ .collect();
+ let mut git_config = match (git_config_contents, git_config_path) {
+- (Some(contents), Some(path)) => Some(make_git_config(contents, path)),
++ (Some(contents), Some(path)) => Some(make_git_config(contents, path, honor_env_var)),
+ _ => {
+ args.push(\"--no-gitconfig\");
+ None
+@@ -52,11 +69,11 @@ pub mod integration_test_utils {
+ config::Config::from(make_options_from_args(args))
+ }
+
+- fn make_git_config(contents: &[u8], path: &str) -> GitConfig {
++ fn make_git_config(contents: &[u8], path: &str, honor_env_var: bool) -> GitConfig {
+ let path = Path::new(path);
+ let mut file = File::create(path).unwrap();
+ file.write_all(contents).unwrap();
+- GitConfig::from_path(&path)
++ GitConfig::from_path(&path, honor_env_var)
+ }
+
+ pub fn get_line_of_code_from_delta(
+";