From 026a9ebae3d867e45e642969d988ca0473f5014a Mon Sep 17 00:00:00 2001 From: Ezinwa Okpoechi Date: Sat, 12 May 2018 16:23:05 +0200 Subject: [PATCH 1/3] Add sample files and snapshot generator --- tests/snapshots/generate_snapshots.py | 40 +++++++++++++++++++++++++++ tests/snapshots/sample.modified.rs | 21 ++++++++++++++ tests/snapshots/sample.rs | 18 ++++++++++++ 3 files changed, 79 insertions(+) create mode 100755 tests/snapshots/generate_snapshots.py create mode 100644 tests/snapshots/sample.modified.rs create mode 100644 tests/snapshots/sample.rs diff --git a/tests/snapshots/generate_snapshots.py b/tests/snapshots/generate_snapshots.py new file mode 100755 index 00000000..2859f27a --- /dev/null +++ b/tests/snapshots/generate_snapshots.py @@ -0,0 +1,40 @@ +#!/usr/bin/env python3 +import itertools +import subprocess +import pathlib +import shutil + +def generate_snapshots(): + single_styles = ["changes", "grid", "header", "numbers"] + collective_styles = ["full", "plain"] + + for num in range(len(single_styles)): + for grouped in itertools.combinations(single_styles, num + 1): + generate_snapshot(",".join(grouped)) + + for style in collective_styles: + generate_snapshot(style) + +def generate_snapshot(option): + command = "../../target/debug/bat --style={0} sample.rs > output/{0}.snapshot.txt".format( + option + ) + print("generating snapshot for {}".format(option)) + subprocess.call(command, shell=True) + +def prepare_output_dir(): + shutil.rmtree("output", ignore_errors=True) + pathlib.Path("output").mkdir() + +def modify_sample_file(): + print("modifying sample.rs to show changes") + shutil.copyfile("sample.modified.rs", "sample.rs") + +def undo_sample_file_modification(): + print("undoing sample.rs modifications") + subprocess.call("git checkout -- sample.rs", shell=True) + +prepare_output_dir() +modify_sample_file() +generate_snapshots() +undo_sample_file_modification() diff --git a/tests/snapshots/sample.modified.rs b/tests/snapshots/sample.modified.rs new file mode 100644 index 00000000..f1a030ce --- /dev/null +++ b/tests/snapshots/sample.modified.rs @@ -0,0 +1,21 @@ +struct Rectangle { + width: u32, + height: u32, +} + +fn main() { + let rect1 = Rectangle { width: 30, height: 50 }; + + println!( + "The perimeter of the rectangle is {} pixels.", + perimeter(&rect1) + ); +} + +fn area(rectangle: &Rectangle) -> u32 { + rectangle.width * rectangle.height +} + +fn perimeter(rectangle: &Rectangle) -> u32 { + (rectangle.width + rectangle.height) * 2 +} \ No newline at end of file diff --git a/tests/snapshots/sample.rs b/tests/snapshots/sample.rs new file mode 100644 index 00000000..00ec0eb6 --- /dev/null +++ b/tests/snapshots/sample.rs @@ -0,0 +1,18 @@ +struct Rectangle { + width: u32, + height: u32, +} + +fn main() { + // width and height of a rectangle can be different + let rect1 = Rectangle { width: 30, height: 50 }; + + println!( + "The area of the rectangle is {} square pixels.", + area(&rect1) + ); +} + +fn area(rectangle: &Rectangle) -> u32 { + rectangle.width * rectangle.height +} From 53eb9c57d6b75f9edc8c1d4178abc6ca7a312f14 Mon Sep 17 00:00:00 2001 From: Ezinwa Okpoechi Date: Sat, 12 May 2018 16:46:29 +0200 Subject: [PATCH 2/3] Add generated snapshots --- .../changes,grid,header,numbers.snapshot.txt | 25 +++++++++++++++++++ .../output/changes,grid,header.snapshot.txt | 25 +++++++++++++++++++ .../output/changes,grid,numbers.snapshot.txt | 22 ++++++++++++++++ .../output/changes,grid.snapshot.txt | 22 ++++++++++++++++ .../changes,header,numbers.snapshot.txt | 22 ++++++++++++++++ .../output/changes,header.snapshot.txt | 22 ++++++++++++++++ .../output/changes,numbers.snapshot.txt | 21 ++++++++++++++++ tests/snapshots/output/changes.snapshot.txt | 21 ++++++++++++++++ tests/snapshots/output/full.snapshot.txt | 25 +++++++++++++++++++ .../output/grid,header,numbers.snapshot.txt | 25 +++++++++++++++++++ .../snapshots/output/grid,header.snapshot.txt | 25 +++++++++++++++++++ .../output/grid,numbers.snapshot.txt | 22 ++++++++++++++++ tests/snapshots/output/grid.snapshot.txt | 22 ++++++++++++++++ .../output/header,numbers.snapshot.txt | 22 ++++++++++++++++ tests/snapshots/output/header.snapshot.txt | 22 ++++++++++++++++ tests/snapshots/output/numbers.snapshot.txt | 21 ++++++++++++++++ tests/snapshots/output/plain.snapshot.txt | 21 ++++++++++++++++ 17 files changed, 385 insertions(+) create mode 100644 tests/snapshots/output/changes,grid,header,numbers.snapshot.txt create mode 100644 tests/snapshots/output/changes,grid,header.snapshot.txt create mode 100644 tests/snapshots/output/changes,grid,numbers.snapshot.txt create mode 100644 tests/snapshots/output/changes,grid.snapshot.txt create mode 100644 tests/snapshots/output/changes,header,numbers.snapshot.txt create mode 100644 tests/snapshots/output/changes,header.snapshot.txt create mode 100644 tests/snapshots/output/changes,numbers.snapshot.txt create mode 100644 tests/snapshots/output/changes.snapshot.txt create mode 100644 tests/snapshots/output/full.snapshot.txt create mode 100644 tests/snapshots/output/grid,header,numbers.snapshot.txt create mode 100644 tests/snapshots/output/grid,header.snapshot.txt create mode 100644 tests/snapshots/output/grid,numbers.snapshot.txt create mode 100644 tests/snapshots/output/grid.snapshot.txt create mode 100644 tests/snapshots/output/header,numbers.snapshot.txt create mode 100644 tests/snapshots/output/header.snapshot.txt create mode 100644 tests/snapshots/output/numbers.snapshot.txt create mode 100644 tests/snapshots/output/plain.snapshot.txt diff --git a/tests/snapshots/output/changes,grid,header,numbers.snapshot.txt b/tests/snapshots/output/changes,grid,header,numbers.snapshot.txt new file mode 100644 index 00000000..b15296ee --- /dev/null +++ b/tests/snapshots/output/changes,grid,header,numbers.snapshot.txt @@ -0,0 +1,25 @@ +───────┬──────────────────────────────────────────────────────────────────────── + │ File: sample.rs +───────┼──────────────────────────────────────────────────────────────────────── + 1 │ struct Rectangle { + 2 │ width: u32, + 3 │ height: u32, + 4 │ } + 5 │ + 6 _ │ fn main() { + 7 │ let rect1 = Rectangle { width: 30, height: 50 }; + 8 │ + 9 │ println!( + 10 ~ │ "The perimeter of the rectangle is {} pixels.", + 11 ~ │ perimeter(&rect1) + 12 │ ); + 13 │ } + 14 │ + 15 │ fn area(rectangle: &Rectangle) -> u32 { + 16 │ rectangle.width * rectangle.height + 17 │ } + 18 + │ + 19 + │ fn perimeter(rectangle: &Rectangle) -> u32 { + 20 + │ (rectangle.width + rectangle.height) * 2 + 21 + │ } +───────┴──────────────────────────────────────────────────────────────────────── diff --git a/tests/snapshots/output/changes,grid,header.snapshot.txt b/tests/snapshots/output/changes,grid,header.snapshot.txt new file mode 100644 index 00000000..cb53d7a8 --- /dev/null +++ b/tests/snapshots/output/changes,grid,header.snapshot.txt @@ -0,0 +1,25 @@ +───────┬──────────────────────────────────────────────────────────────────────── + │ File: sample.rs +───────┼──────────────────────────────────────────────────────────────────────── + │ struct Rectangle { + │ width: u32, + │ height: u32, + │ } + │ + _ │ fn main() { + │ let rect1 = Rectangle { width: 30, height: 50 }; + │ + │ println!( + ~ │ "The perimeter of the rectangle is {} pixels.", + ~ │ perimeter(&rect1) + │ ); + │ } + │ + │ fn area(rectangle: &Rectangle) -> u32 { + │ rectangle.width * rectangle.height + │ } + + │ + + │ fn perimeter(rectangle: &Rectangle) -> u32 { + + │ (rectangle.width + rectangle.height) * 2 + + │ } +───────┴──────────────────────────────────────────────────────────────────────── diff --git a/tests/snapshots/output/changes,grid,numbers.snapshot.txt b/tests/snapshots/output/changes,grid,numbers.snapshot.txt new file mode 100644 index 00000000..fd078f3a --- /dev/null +++ b/tests/snapshots/output/changes,grid,numbers.snapshot.txt @@ -0,0 +1,22 @@ + 1 │ struct Rectangle { + 2 │ width: u32, + 3 │ height: u32, + 4 │ } + 5 │ + 6 _ │ fn main() { + 7 │ let rect1 = Rectangle { width: 30, height: 50 }; + 8 │ + 9 │ println!( + 10 ~ │ "The perimeter of the rectangle is {} pixels.", + 11 ~ │ perimeter(&rect1) + 12 │ ); + 13 │ } + 14 │ + 15 │ fn area(rectangle: &Rectangle) -> u32 { + 16 │ rectangle.width * rectangle.height + 17 │ } + 18 + │ + 19 + │ fn perimeter(rectangle: &Rectangle) -> u32 { + 20 + │ (rectangle.width + rectangle.height) * 2 + 21 + │ } +───────┴──────────────────────────────────────────────────────────────────────── diff --git a/tests/snapshots/output/changes,grid.snapshot.txt b/tests/snapshots/output/changes,grid.snapshot.txt new file mode 100644 index 00000000..ff7ea09d --- /dev/null +++ b/tests/snapshots/output/changes,grid.snapshot.txt @@ -0,0 +1,22 @@ + │ struct Rectangle { + │ width: u32, + │ height: u32, + │ } + │ + _ │ fn main() { + │ let rect1 = Rectangle { width: 30, height: 50 }; + │ + │ println!( + ~ │ "The perimeter of the rectangle is {} pixels.", + ~ │ perimeter(&rect1) + │ ); + │ } + │ + │ fn area(rectangle: &Rectangle) -> u32 { + │ rectangle.width * rectangle.height + │ } + + │ + + │ fn perimeter(rectangle: &Rectangle) -> u32 { + + │ (rectangle.width + rectangle.height) * 2 + + │ } +───────┴──────────────────────────────────────────────────────────────────────── diff --git a/tests/snapshots/output/changes,header,numbers.snapshot.txt b/tests/snapshots/output/changes,header,numbers.snapshot.txt new file mode 100644 index 00000000..1b190a19 --- /dev/null +++ b/tests/snapshots/output/changes,header,numbers.snapshot.txt @@ -0,0 +1,22 @@ +File: sample.rs + 1 struct Rectangle { + 2 width: u32, + 3 height: u32, + 4 } + 5 + 6 _ fn main() { + 7 let rect1 = Rectangle { width: 30, height: 50 }; + 8 + 9 println!( + 10 ~ "The perimeter of the rectangle is {} pixels.", + 11 ~ perimeter(&rect1) + 12 ); + 13 } + 14 + 15 fn area(rectangle: &Rectangle) -> u32 { + 16 rectangle.width * rectangle.height + 17 } + 18 + + 19 + fn perimeter(rectangle: &Rectangle) -> u32 { + 20 + (rectangle.width + rectangle.height) * 2 + 21 + } diff --git a/tests/snapshots/output/changes,header.snapshot.txt b/tests/snapshots/output/changes,header.snapshot.txt new file mode 100644 index 00000000..f914c95b --- /dev/null +++ b/tests/snapshots/output/changes,header.snapshot.txt @@ -0,0 +1,22 @@ +File: sample.rs + struct Rectangle { + width: u32, + height: u32, + } + +_ fn main() { + let rect1 = Rectangle { width: 30, height: 50 }; + + println!( +~ "The perimeter of the rectangle is {} pixels.", +~ perimeter(&rect1) + ); + } + + fn area(rectangle: &Rectangle) -> u32 { + rectangle.width * rectangle.height + } ++ ++ fn perimeter(rectangle: &Rectangle) -> u32 { ++ (rectangle.width + rectangle.height) * 2 ++ } diff --git a/tests/snapshots/output/changes,numbers.snapshot.txt b/tests/snapshots/output/changes,numbers.snapshot.txt new file mode 100644 index 00000000..eabb3c1c --- /dev/null +++ b/tests/snapshots/output/changes,numbers.snapshot.txt @@ -0,0 +1,21 @@ + 1 struct Rectangle { + 2 width: u32, + 3 height: u32, + 4 } + 5 + 6 _ fn main() { + 7 let rect1 = Rectangle { width: 30, height: 50 }; + 8 + 9 println!( + 10 ~ "The perimeter of the rectangle is {} pixels.", + 11 ~ perimeter(&rect1) + 12 ); + 13 } + 14 + 15 fn area(rectangle: &Rectangle) -> u32 { + 16 rectangle.width * rectangle.height + 17 } + 18 + + 19 + fn perimeter(rectangle: &Rectangle) -> u32 { + 20 + (rectangle.width + rectangle.height) * 2 + 21 + } diff --git a/tests/snapshots/output/changes.snapshot.txt b/tests/snapshots/output/changes.snapshot.txt new file mode 100644 index 00000000..5695ea6b --- /dev/null +++ b/tests/snapshots/output/changes.snapshot.txt @@ -0,0 +1,21 @@ + struct Rectangle { + width: u32, + height: u32, + } + +_ fn main() { + let rect1 = Rectangle { width: 30, height: 50 }; + + println!( +~ "The perimeter of the rectangle is {} pixels.", +~ perimeter(&rect1) + ); + } + + fn area(rectangle: &Rectangle) -> u32 { + rectangle.width * rectangle.height + } ++ ++ fn perimeter(rectangle: &Rectangle) -> u32 { ++ (rectangle.width + rectangle.height) * 2 ++ } diff --git a/tests/snapshots/output/full.snapshot.txt b/tests/snapshots/output/full.snapshot.txt new file mode 100644 index 00000000..b15296ee --- /dev/null +++ b/tests/snapshots/output/full.snapshot.txt @@ -0,0 +1,25 @@ +───────┬──────────────────────────────────────────────────────────────────────── + │ File: sample.rs +───────┼──────────────────────────────────────────────────────────────────────── + 1 │ struct Rectangle { + 2 │ width: u32, + 3 │ height: u32, + 4 │ } + 5 │ + 6 _ │ fn main() { + 7 │ let rect1 = Rectangle { width: 30, height: 50 }; + 8 │ + 9 │ println!( + 10 ~ │ "The perimeter of the rectangle is {} pixels.", + 11 ~ │ perimeter(&rect1) + 12 │ ); + 13 │ } + 14 │ + 15 │ fn area(rectangle: &Rectangle) -> u32 { + 16 │ rectangle.width * rectangle.height + 17 │ } + 18 + │ + 19 + │ fn perimeter(rectangle: &Rectangle) -> u32 { + 20 + │ (rectangle.width + rectangle.height) * 2 + 21 + │ } +───────┴──────────────────────────────────────────────────────────────────────── diff --git a/tests/snapshots/output/grid,header,numbers.snapshot.txt b/tests/snapshots/output/grid,header,numbers.snapshot.txt new file mode 100644 index 00000000..e842b5cb --- /dev/null +++ b/tests/snapshots/output/grid,header,numbers.snapshot.txt @@ -0,0 +1,25 @@ +───────┬──────────────────────────────────────────────────────────────────────── + │ File: sample.rs +───────┼──────────────────────────────────────────────────────────────────────── + 1 │ struct Rectangle { + 2 │ width: u32, + 3 │ height: u32, + 4 │ } + 5 │ + 6 │ fn main() { + 7 │ let rect1 = Rectangle { width: 30, height: 50 }; + 8 │ + 9 │ println!( + 10 │ "The perimeter of the rectangle is {} pixels.", + 11 │ perimeter(&rect1) + 12 │ ); + 13 │ } + 14 │ + 15 │ fn area(rectangle: &Rectangle) -> u32 { + 16 │ rectangle.width * rectangle.height + 17 │ } + 18 │ + 19 │ fn perimeter(rectangle: &Rectangle) -> u32 { + 20 │ (rectangle.width + rectangle.height) * 2 + 21 │ } +───────┴──────────────────────────────────────────────────────────────────────── diff --git a/tests/snapshots/output/grid,header.snapshot.txt b/tests/snapshots/output/grid,header.snapshot.txt new file mode 100644 index 00000000..a6fbca2d --- /dev/null +++ b/tests/snapshots/output/grid,header.snapshot.txt @@ -0,0 +1,25 @@ +───────┬──────────────────────────────────────────────────────────────────────── + │ File: sample.rs +───────┼──────────────────────────────────────────────────────────────────────── + │ struct Rectangle { + │ width: u32, + │ height: u32, + │ } + │ + │ fn main() { + │ let rect1 = Rectangle { width: 30, height: 50 }; + │ + │ println!( + │ "The perimeter of the rectangle is {} pixels.", + │ perimeter(&rect1) + │ ); + │ } + │ + │ fn area(rectangle: &Rectangle) -> u32 { + │ rectangle.width * rectangle.height + │ } + │ + │ fn perimeter(rectangle: &Rectangle) -> u32 { + │ (rectangle.width + rectangle.height) * 2 + │ } +───────┴──────────────────────────────────────────────────────────────────────── diff --git a/tests/snapshots/output/grid,numbers.snapshot.txt b/tests/snapshots/output/grid,numbers.snapshot.txt new file mode 100644 index 00000000..0186dac3 --- /dev/null +++ b/tests/snapshots/output/grid,numbers.snapshot.txt @@ -0,0 +1,22 @@ + 1 │ struct Rectangle { + 2 │ width: u32, + 3 │ height: u32, + 4 │ } + 5 │ + 6 │ fn main() { + 7 │ let rect1 = Rectangle { width: 30, height: 50 }; + 8 │ + 9 │ println!( + 10 │ "The perimeter of the rectangle is {} pixels.", + 11 │ perimeter(&rect1) + 12 │ ); + 13 │ } + 14 │ + 15 │ fn area(rectangle: &Rectangle) -> u32 { + 16 │ rectangle.width * rectangle.height + 17 │ } + 18 │ + 19 │ fn perimeter(rectangle: &Rectangle) -> u32 { + 20 │ (rectangle.width + rectangle.height) * 2 + 21 │ } +───────┴──────────────────────────────────────────────────────────────────────── diff --git a/tests/snapshots/output/grid.snapshot.txt b/tests/snapshots/output/grid.snapshot.txt new file mode 100644 index 00000000..2adebd8f --- /dev/null +++ b/tests/snapshots/output/grid.snapshot.txt @@ -0,0 +1,22 @@ + │ struct Rectangle { + │ width: u32, + │ height: u32, + │ } + │ + │ fn main() { + │ let rect1 = Rectangle { width: 30, height: 50 }; + │ + │ println!( + │ "The perimeter of the rectangle is {} pixels.", + │ perimeter(&rect1) + │ ); + │ } + │ + │ fn area(rectangle: &Rectangle) -> u32 { + │ rectangle.width * rectangle.height + │ } + │ + │ fn perimeter(rectangle: &Rectangle) -> u32 { + │ (rectangle.width + rectangle.height) * 2 + │ } +───────┴──────────────────────────────────────────────────────────────────────── diff --git a/tests/snapshots/output/header,numbers.snapshot.txt b/tests/snapshots/output/header,numbers.snapshot.txt new file mode 100644 index 00000000..c1dcf63a --- /dev/null +++ b/tests/snapshots/output/header,numbers.snapshot.txt @@ -0,0 +1,22 @@ +File: sample.rs + 1 struct Rectangle { + 2 width: u32, + 3 height: u32, + 4 } + 5 + 6 fn main() { + 7 let rect1 = Rectangle { width: 30, height: 50 }; + 8 + 9 println!( + 10 "The perimeter of the rectangle is {} pixels.", + 11 perimeter(&rect1) + 12 ); + 13 } + 14 + 15 fn area(rectangle: &Rectangle) -> u32 { + 16 rectangle.width * rectangle.height + 17 } + 18 + 19 fn perimeter(rectangle: &Rectangle) -> u32 { + 20 (rectangle.width + rectangle.height) * 2 + 21 } diff --git a/tests/snapshots/output/header.snapshot.txt b/tests/snapshots/output/header.snapshot.txt new file mode 100644 index 00000000..d0e167a9 --- /dev/null +++ b/tests/snapshots/output/header.snapshot.txt @@ -0,0 +1,22 @@ +File: sample.rs +struct Rectangle { + width: u32, + height: u32, +} + +fn main() { + let rect1 = Rectangle { width: 30, height: 50 }; + + println!( + "The perimeter of the rectangle is {} pixels.", + perimeter(&rect1) + ); +} + +fn area(rectangle: &Rectangle) -> u32 { + rectangle.width * rectangle.height +} + +fn perimeter(rectangle: &Rectangle) -> u32 { + (rectangle.width + rectangle.height) * 2 +} diff --git a/tests/snapshots/output/numbers.snapshot.txt b/tests/snapshots/output/numbers.snapshot.txt new file mode 100644 index 00000000..198f0355 --- /dev/null +++ b/tests/snapshots/output/numbers.snapshot.txt @@ -0,0 +1,21 @@ + 1 struct Rectangle { + 2 width: u32, + 3 height: u32, + 4 } + 5 + 6 fn main() { + 7 let rect1 = Rectangle { width: 30, height: 50 }; + 8 + 9 println!( + 10 "The perimeter of the rectangle is {} pixels.", + 11 perimeter(&rect1) + 12 ); + 13 } + 14 + 15 fn area(rectangle: &Rectangle) -> u32 { + 16 rectangle.width * rectangle.height + 17 } + 18 + 19 fn perimeter(rectangle: &Rectangle) -> u32 { + 20 (rectangle.width + rectangle.height) * 2 + 21 } diff --git a/tests/snapshots/output/plain.snapshot.txt b/tests/snapshots/output/plain.snapshot.txt new file mode 100644 index 00000000..d66799f0 --- /dev/null +++ b/tests/snapshots/output/plain.snapshot.txt @@ -0,0 +1,21 @@ +struct Rectangle { + width: u32, + height: u32, +} + +fn main() { + let rect1 = Rectangle { width: 30, height: 50 }; + + println!( + "The perimeter of the rectangle is {} pixels.", + perimeter(&rect1) + ); +} + +fn area(rectangle: &Rectangle) -> u32 { + rectangle.width * rectangle.height +} + +fn perimeter(rectangle: &Rectangle) -> u32 { + (rectangle.width + rectangle.height) * 2 +} From 0886a24685dbab13bfcf186d9c5d0891d8100344 Mon Sep 17 00:00:00 2001 From: Ezinwa Okpoechi Date: Sat, 12 May 2018 16:48:45 +0200 Subject: [PATCH 3/3] Add snapshot testing --- tests/snapshots/sample.modified.rs | 2 +- tests/tester.rs | 75 ++++++++++++++++++++++++++++++ tests/tests.rs | 33 +++++++++++++ 3 files changed, 109 insertions(+), 1 deletion(-) create mode 100644 tests/tester.rs create mode 100644 tests/tests.rs diff --git a/tests/snapshots/sample.modified.rs b/tests/snapshots/sample.modified.rs index f1a030ce..d66799f0 100644 --- a/tests/snapshots/sample.modified.rs +++ b/tests/snapshots/sample.modified.rs @@ -18,4 +18,4 @@ fn area(rectangle: &Rectangle) -> u32 { fn perimeter(rectangle: &Rectangle) -> u32 { (rectangle.width + rectangle.height) * 2 -} \ No newline at end of file +} diff --git a/tests/tester.rs b/tests/tester.rs new file mode 100644 index 00000000..21a7829d --- /dev/null +++ b/tests/tester.rs @@ -0,0 +1,75 @@ +use std::env; +use std::fs::{self, File}; +use std::io::Read; +use std::path::PathBuf; +use std::process::Command; + +pub struct BatTester { + exe: PathBuf, +} + +impl BatTester { + pub fn new() -> Self { + modify_sample_file(); + // Lifted from fd :) + let root = env::current_exe() + .expect("tests executable") + .parent() + .expect("tests executable directory") + .parent() + .expect("bat executable directory") + .to_path_buf(); + + let exe_name = if cfg!(windows) { "bat.exe" } else { "bat" }; + + BatTester { + exe: root.join(exe_name), + } + } + + pub fn test_snapshot(&self, style: &str) { + let output = Command::new(&self.exe) + .args(&[ + "tests/snapshots/sample.rs", + &format!("--style={}", style), + ]) + .output() + .expect("bat failed"); + // have to do the replace because the filename in the header changes based on the current working directory + let actual = String::from_utf8_lossy(&output.stdout) + .as_ref() + .replace("tests/snapshots/", ""); + + let mut expected = String::new(); + let mut file = File::open(format!("tests/snapshots/output/{}.snapshot.txt", style)) + .expect("snapshot file missing"); + file.read_to_string(&mut expected) + .expect("could not read snapshot file"); + + assert_eq!(expected, actual); + } +} + +impl Drop for BatTester { + fn drop(&mut self) { + undo_sample_file_modification(); + } +} + +fn modify_sample_file() { + fs::copy( + "tests/snapshots/sample.modified.rs", + "tests/snapshots/sample.rs", + ).expect("generating modified sample file failed"); +} + +fn undo_sample_file_modification() { + let output = Command::new("git") + .args(&["checkout", "--", "tests/snapshots/sample.rs"]) + .output() + .expect("git checkout failed"); + + if !output.status.success() { + panic!("undoing modified sample changes failed") + } +} diff --git a/tests/tests.rs b/tests/tests.rs new file mode 100644 index 00000000..0f14ae15 --- /dev/null +++ b/tests/tests.rs @@ -0,0 +1,33 @@ +mod tester; + +use tester::BatTester; + +static STYLES: &'static [&'static str] = &[ + "changes", + "grid", + "header", + "numbers", + "changes,grid", + "changes,header", + "changes,numbers", + "grid,header", + "grid,numbers", + "header,numbers", + "changes,grid,header", + "changes,grid,numbers", + "changes,header,numbers", + "grid,header,numbers", + "changes,grid,header,numbers", + "full", + "plain", +]; + +#[test] +fn test_snapshots() { + let bat_tester = BatTester::new(); + + for style in STYLES { + println!("testing {}", style); + bat_tester.test_snapshot(&*style); + } +}