bottom/tests/invalid_config_tests.rs

172 lines
5 KiB
Rust
Raw Normal View History

use assert_cmd::prelude::*;
use predicates::prelude::*;
use std::process::Command;
2019-12-15 05:17:15 +00:00
// These tests are for testing some config file-specific options.
fn get_binary_location() -> String {
2020-05-04 22:53:05 +00:00
env!("CARGO_BIN_EXE_btm").to_string()
}
#[test]
fn test_toml_mismatch_type() -> Result<(), Box<dyn std::error::Error>> {
Command::new(get_binary_location())
.arg("-C")
.arg("./tests/invalid_configs/toml_mismatch_type.toml")
.assert()
.failure()
.stderr(predicate::str::contains("invalid type"));
Ok(())
}
#[test]
fn test_empty_layout() -> Result<(), Box<dyn std::error::Error>> {
Command::new(get_binary_location())
.arg("-C")
.arg("./tests/invalid_configs/empty_layout.toml")
.assert()
.failure()
.stderr(predicate::str::contains("at least one widget"));
Ok(())
}
#[test]
fn test_invalid_layout_widget_type() -> Result<(), Box<dyn std::error::Error>> {
Command::new(get_binary_location())
.arg("-C")
.arg("./tests/invalid_configs/invalid_layout_widget_type.toml")
.assert()
.failure()
.stderr(predicate::str::contains("invalid widget name"));
Ok(())
}
/// This test isn't really needed as this is technically covered by TOML spec.
/// However, I feel like it's worth checking anyways - not like it takes long.
#[test]
fn test_duplicate_temp_type() -> Result<(), Box<dyn std::error::Error>> {
Command::new(get_binary_location())
.arg("-C")
.arg("./tests/invalid_configs/duplicate_temp_type.toml")
.assert()
.failure()
.stderr(predicate::str::contains("duplicate field"));
Ok(())
}
/// Checks for if a hex is valid
#[test]
fn test_invalid_colour_hex() -> Result<(), Box<dyn std::error::Error>> {
Command::new(get_binary_location())
.arg("-C")
.arg("./tests/invalid_configs/invalid_colour_hex.toml")
.assert()
.failure()
.stderr(predicate::str::contains("invalid hex colour"));
Ok(())
}
/// Checks for if a hex is too long
#[test]
fn test_invalid_colour_hex_2() -> Result<(), Box<dyn std::error::Error>> {
Command::new(get_binary_location())
.arg("-C")
.arg("./tests/invalid_configs/invalid_colour_hex_2.toml")
.assert()
.failure()
.stderr(predicate::str::contains("invalid hex colour"));
Ok(())
}
/// Checks unicode hex because the way we originally did it could cause char
/// boundary errors!
#[test]
fn test_invalid_colour_hex_3() -> Result<(), Box<dyn std::error::Error>> {
Command::new(get_binary_location())
.arg("-C")
.arg("./tests/invalid_configs/invalid_colour_hex_3.toml")
.assert()
.failure()
.stderr(predicate::str::contains("invalid hex colour"));
Ok(())
}
#[test]
fn test_invalid_colour_name() -> Result<(), Box<dyn std::error::Error>> {
Command::new(get_binary_location())
.arg("-C")
.arg("./tests/invalid_configs/invalid_colour_name.toml")
.assert()
.failure()
.stderr(predicate::str::contains("invalid named colour"));
Ok(())
}
#[test]
fn test_invalid_colour_rgb() -> Result<(), Box<dyn std::error::Error>> {
Command::new(get_binary_location())
.arg("-C")
.arg("./tests/invalid_configs/invalid_colour_rgb.toml")
.assert()
.failure()
.stderr(predicate::str::contains("invalid RGB"));
Ok(())
}
#[test]
fn test_invalid_colour_rgb_2() -> Result<(), Box<dyn std::error::Error>> {
Command::new(get_binary_location())
.arg("-C")
.arg("./tests/invalid_configs/invalid_colour_rgb_2.toml")
.assert()
.failure()
.stderr(predicate::str::contains("invalid RGB"));
Ok(())
}
#[test]
fn test_invalid_colour_string() -> Result<(), Box<dyn std::error::Error>> {
Command::new(get_binary_location())
.arg("-C")
.arg("./tests/invalid_configs/invalid_colour_string.toml")
.assert()
.failure()
.stderr(predicate::str::contains("invalid named colour"));
Ok(())
}
#[test]
fn test_empty_battery() -> Result<(), Box<dyn std::error::Error>> {
Command::new(get_binary_location())
.arg("-C")
.arg("./tests/invalid_configs/empty_battery.toml")
.assert()
.failure()
.stderr(predicate::str::contains(
"battery colour list must have at least one colour.",
));
Ok(())
}
#[test]
fn test_lone_default_widget_count() -> Result<(), Box<dyn std::error::Error>> {
Command::new(get_binary_location())
.arg("-C")
.arg("./tests/invalid_configs/lone_default_widget_count.toml")
.assert()
.failure()
.stderr(predicate::str::contains("it must be used with"));
Ok(())
}
#[test]
fn test_invalid_default_widget_count() -> Result<(), Box<dyn std::error::Error>> {
Command::new(get_binary_location())
.arg("-C")
.arg("./tests/invalid_configs/invalid_default_widget_count.toml")
.assert()
.failure()
.stderr(predicate::str::contains("invalid number"));
Ok(())
}