aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteven Fackler <sfackler@palantir.com>2017-01-21 10:11:55 +0000
committerJoe Wilm <jwilm@users.noreply.github.com>2017-01-23 08:59:54 -0800
commit41f99dc4c0860155003120e9eabfe8c4a6ff770a (patch)
tree5866e98f71dc2d722eaf7917591d40c316d0eabc
parent62294771905917087c484bfc57e4f6ca547d89ba (diff)
downloadalacritty-41f99dc4c0860155003120e9eabfe8c4a6ff770a.tar.gz
alacritty-41f99dc4c0860155003120e9eabfe8c4a6ff770a.zip
Dynamically generate test harness
This uses the rustc-test crate, a copy of the standard test crate, to dynamically create tests for each reference test. No need to remember to update the macro, just add the directory to ref!
-rw-r--r--.gitignore2
-rw-r--r--Cargo.lock30
-rw-r--r--Cargo.toml6
-rw-r--r--src/lib.rs1
-rw-r--r--tests/ref.rs143
5 files changed, 99 insertions, 83 deletions
diff --git a/.gitignore b/.gitignore
index fc0556c6..db0a5014 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,4 @@
target
FlameGraph
+.idea
+*.iml
diff --git a/Cargo.lock b/Cargo.lock
index 69748fb2..37745b11 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -15,6 +15,7 @@ dependencies = [
"mio 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
"notify 2.6.3 (registry+https://github.com/rust-lang/crates.io-index)",
"parking_lot 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rustc-test 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 0.8.19 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_derive 0.8.19 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_json 0.8.4 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -321,6 +322,11 @@ dependencies = [
]
[[package]]
+name = "getopts"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
name = "gl_generator"
version = "0.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -775,6 +781,18 @@ version = "0.3.22"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
+name = "rustc-test"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "getopts 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rustc-serialize 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)",
+ "term 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ "time 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
name = "rustc_version"
version = "0.1.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -945,6 +963,15 @@ dependencies = [
]
[[package]]
+name = "term"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
name = "time"
version = "0.1.35"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1145,6 +1172,7 @@ dependencies = [
"checksum fsevent-sys 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "72e33a926306442d961595c3a325864326ca4287795e106dae8993afe484ede6"
"checksum gcc 0.3.40 (registry+https://github.com/rust-lang/crates.io-index)" = "872db9e59486ef2b14f8e8c10e9ef02de2bccef6363d7f34835dedb386b3d950"
"checksum gdi32-sys 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "65256ec4dc2592e6f05bfc1ca3b956a4e0698aa90b1dff1f5687d55a5a3fd59a"
+"checksum getopts 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)" = "d9047cfbd08a437050b363d35ef160452c5fe8ea5187ae0a624708c91581d685"
"checksum gl_generator 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f1d8edc81c5ae84605a62f5dac661a2313003b26d59839f81d47d46cf0f16a55"
"checksum gleam 0.2.29 (registry+https://github.com/rust-lang/crates.io-index)" = "1b83402229bde9d923f0b92811be017f9df5946ee86f8647367b1e02bcf5c293"
"checksum glutin 0.6.1 (git+https://github.com/jwilm/glutin?rev=af7fe340bd4a2af53ea521defcb4f377cdc588cf)" = "<none>"
@@ -1196,6 +1224,7 @@ dependencies = [
"checksum rand 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)" = "022e0636ec2519ddae48154b028864bdce4eaf7d35226ab8e65c611be97b189d"
"checksum regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "f9ec002c35e86791825ed294b50008eea9ddfc8def4420124fbc6b08db834957"
"checksum rustc-serialize 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)" = "237546c689f20bb44980270c73c3b9edd0891c1be49cc1274406134a66d3957b"
+"checksum rustc-test 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "5a8a7c2bc3cd2df4e0da9e548cd1b50c4c7b68d72410d34eba98a2d5393a2875"
"checksum rustc_version 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "c5f5376ea5e30ce23c03eb77cbe4962b988deead10910c372b226388b594c084"
"checksum semver 0.1.20 (registry+https://github.com/rust-lang/crates.io-index)" = "d4f410fedcf71af0345d7607d246e7ad15faaadd49d240ee3b24e5dc21a820ac"
"checksum semver 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2d5b7638a1f03815d94e88cb3b3c08e87f0db4d683ef499d1836aaf70a45623f"
@@ -1217,6 +1246,7 @@ dependencies = [
"checksum syn 0.10.3 (registry+https://github.com/rust-lang/crates.io-index)" = "94e7d81ecd16d39f16193af05b8d5a0111b9d8d2f3f78f31760f327a247da777"
"checksum target_build_utils 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "54c550e226618cd35334b75e92bfa5437c61474bdb75c38bf330ab5a8037b77c"
"checksum tempfile 2.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "9270837a93bad1b1dac18fe67e786b3c960513af86231f6f4f57fddd594ff0c8"
+"checksum term 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "3deff8a2b3b6607d6d7cc32ac25c0b33709453ca9cceac006caac51e963cf94a"
"checksum time 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)" = "3c7ec6d62a20df54e07ab3b78b9a3932972f4b7981de295563686849eb3989af"
"checksum toml 0.1.30 (registry+https://github.com/rust-lang/crates.io-index)" = "0590d72182e50e879c4da3b11c6488dae18fccb1ae0c7a3eda18e16795844796"
"checksum unicode-normalization 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "26643a2f83bac55f1976fb716c10234485f9202dcd65cfbdf9da49867b271172"
diff --git a/Cargo.toml b/Cargo.toml
index dc335150..02b0e95f 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -10,6 +10,10 @@ doc = false
path = "src/main.rs"
name = "alacritty"
+[[test]]
+name = "ref"
+harness = false
+
[dependencies]
libc = "*"
cgmath = "0.7"
@@ -44,6 +48,8 @@ gl_generator = "0.5"
git = "https://github.com/jwilm/glutin"
rev = "af7fe340bd4a2af53ea521defcb4f377cdc588cf"
+[dev-dependencies]
+rustc-test = "0.1"
[profile.release]
lto = true
diff --git a/src/lib.rs b/src/lib.rs
index 22a3bd10..794a819c 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -19,7 +19,6 @@
#![cfg_attr(feature = "clippy", deny(enum_glob_use))]
#![cfg_attr(feature = "clippy", deny(if_not_else))]
#![cfg_attr(feature = "clippy", deny(wrong_pub_self_convention))]
-#![cfg_attr(test, feature(test))]
#![cfg_attr(feature = "nightly", feature(core_intrinsics))]
#[macro_use]
diff --git a/tests/ref.rs b/tests/ref.rs
index be0150ef..c91fdc78 100644
--- a/tests/ref.rs
+++ b/tests/ref.rs
@@ -1,99 +1,78 @@
extern crate alacritty;
-extern crate serde_json;
+extern crate serde_json as json;
+extern crate test;
-/// ref tests
-mod reference {
- use std::fs::File;
- use std::io::{self, Read};
- use std::path::Path;
+use std::env;
+use std::fs::File;
+use std::io::{self, Read};
+use std::path::{Path, PathBuf};
+use test::{TestDescAndFn, TestDesc, TestFn, ShouldPanic, TestName, test_main};
- use serde_json as json;
+use alacritty::Grid;
+use alacritty::Term;
+use alacritty::term::Cell;
+use alacritty::term::SizeInfo;
+use alacritty::ansi;
- use alacritty::Grid;
- use alacritty::Term;
- use alacritty::term::Cell;
- use alacritty::term::SizeInfo;
- use alacritty::ansi;
+fn main() {
+ let test_dir = Path::new(concat!(env!("CARGO_MANIFEST_DIR"), "/tests/ref"));
- /// The /dev/null of io::Write
- struct Void;
+ let args = env::args().collect::<Vec<_>>();
- impl io::Write for Void {
- fn write(&mut self, bytes: &[u8]) -> io::Result<usize> {
- Ok(bytes.len())
- }
+ let tests = test_dir
+ .read_dir()
+ .unwrap()
+ .map(|e| desc(e.unwrap().path()))
+ .collect();
- fn flush(&mut self) -> io::Result<()> {
- Ok(())
- }
- }
+ test_main(&args, tests);
+}
- macro_rules! ref_file {
- ($ref_name:ident, $file:expr) => {
- concat!(
- env!("CARGO_MANIFEST_DIR"),
- "/tests/ref/", stringify!($ref_name), "/", $file
- )
- }
+fn desc(dir: PathBuf) -> TestDescAndFn {
+ TestDescAndFn {
+ desc: TestDesc {
+ name: TestName::DynTestName(dir.file_name().unwrap().to_string_lossy().into_owned()),
+ ignore: false,
+ should_panic: ShouldPanic::No,
+ },
+ testfn: TestFn::dyn_test_fn(move || ref_test(&dir)),
}
+}
- fn read_u8<P>(path: P) -> Vec<u8>
- where P: AsRef<Path>
- {
- let mut res = Vec::new();
- File::open(path.as_ref()).unwrap()
- .read_to_end(&mut res).unwrap();
+fn read_u8<P>(path: P) -> Vec<u8>
+ where P: AsRef<Path>
+{
+ let mut res = Vec::new();
+ File::open(path.as_ref()).unwrap()
+ .read_to_end(&mut res).unwrap();
- res
- }
+ res
+}
- fn read_string<P>(path: P) -> String
- where P: AsRef<Path>
- {
- let mut res = String::new();
- File::open(path.as_ref()).unwrap()
- .read_to_string(&mut res).unwrap();
+fn read_string<P>(path: P) -> String
+ where P: AsRef<Path>
+{
+ let mut res = String::new();
+ File::open(path.as_ref()).unwrap()
+ .read_to_string(&mut res).unwrap();
- res
- }
+ res
+}
- macro_rules! ref_test {
- ($name:ident) => {
- #[test]
- fn $name() {
- let recording = read_u8(ref_file!($name, "alacritty.recording"));
- let serialized_size = read_string(ref_file!($name, "size.json"));
- let serialized_grid = read_string(ref_file!($name, "grid.json"));
-
- let size: SizeInfo = json::from_str(&serialized_size).unwrap();
- let grid: Grid<Cell> = json::from_str(&serialized_grid).unwrap();
-
- let mut terminal = Term::new(size);
- let mut parser = ansi::Processor::new();
-
- for byte in recording {
- parser.advance(&mut terminal, byte, &mut Void);
- }
-
- assert_eq!(grid, *terminal.grid());
- }
- };
-
- ($( $name:ident ),*) => {
- $(
- ref_test! { $name }
- )*
- };
- }
+fn ref_test(dir: &Path) {
+ let recording = read_u8(dir.join("alacritty.recording"));
+ let serialized_size = read_string(dir.join("size.json"));
+ let serialized_grid = read_string(dir.join("grid.json"));
+
+ let size: SizeInfo = json::from_str(&serialized_size).unwrap();
+ let grid: Grid<Cell> = json::from_str(&serialized_grid).unwrap();
- // Ref tests!
- ref_test! {
- ll,
- vim_simple_edit,
- tmux_htop,
- tmux_git_log,
- vim_large_window_scroll,
- indexed_256_colors,
- fish_cc
+ let mut terminal = Term::new(size);
+ let mut parser = ansi::Processor::new();
+
+ for byte in recording {
+ parser.advance(&mut terminal, byte, &mut io::sink());
}
+
+ assert_eq!(grid, *terminal.grid());
}