Add RuntimeConfigManager tests
This commit is contained in:
parent
550f298d54
commit
1602f1c014
|
@ -187,23 +187,42 @@ mod tests {
|
||||||
use crate::config::{DEFAULT_CONFIG_FILE_NAME, DEFAULT_CONFIG_FILE_CONTENT};
|
use crate::config::{DEFAULT_CONFIG_FILE_NAME, DEFAULT_CONFIG_FILE_CONTENT};
|
||||||
use std::fs;
|
use std::fs;
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
|
use crate::config::ConfigManager;
|
||||||
use crate::config::tests::{create_temp_espanso_directory, create_temp_file_in_dir};
|
use crate::config::tests::{create_temp_espanso_directory, create_temp_file_in_dir};
|
||||||
|
|
||||||
struct DummySystemManager {}
|
struct DummySystemManager {
|
||||||
|
title: RefCell<String>,
|
||||||
|
class: RefCell<String>,
|
||||||
|
exec: RefCell<String>,
|
||||||
|
}
|
||||||
impl SystemManager for DummySystemManager {
|
impl SystemManager for DummySystemManager {
|
||||||
fn get_current_window_title(&self) -> Option<String> {
|
fn get_current_window_title(&self) -> Option<String> {
|
||||||
Some("title".to_owned())
|
Some(self.title.borrow().clone())
|
||||||
}
|
}
|
||||||
fn get_current_window_class(&self) -> Option<String> {
|
fn get_current_window_class(&self) -> Option<String> {
|
||||||
Some("class".to_owned())
|
Some(self.class.borrow().clone())
|
||||||
}
|
}
|
||||||
fn get_current_window_executable(&self) -> Option<String> {
|
fn get_current_window_executable(&self) -> Option<String> {
|
||||||
Some("exec".to_owned())
|
Some(self.exec.borrow().clone())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
impl DummySystemManager {
|
impl DummySystemManager {
|
||||||
|
pub fn new_custom(title: &str, class: &str, exec: &str) -> DummySystemManager {
|
||||||
|
DummySystemManager{
|
||||||
|
title: RefCell::new(title.to_owned()),
|
||||||
|
class: RefCell::new(class.to_owned()),
|
||||||
|
exec: RefCell::new(exec.to_owned())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub fn new() -> DummySystemManager {
|
pub fn new() -> DummySystemManager {
|
||||||
DummySystemManager{}
|
DummySystemManager::new_custom("title", "class", "exec")
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn change(&self, title: &str, class: &str, exec: &str) {
|
||||||
|
*self.title.borrow_mut() = title.to_owned();
|
||||||
|
*self.class.borrow_mut() = class.to_owned();
|
||||||
|
*self.exec.borrow_mut() = exec.to_owned();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -294,4 +313,123 @@ mod tests {
|
||||||
assert!(config_manager.exec_regexps[1].is_none());
|
assert!(config_manager.exec_regexps[1].is_none());
|
||||||
assert!(config_manager.exec_regexps[2].is_none());
|
assert!(config_manager.exec_regexps[2].is_none());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_runtime_calculate_active_config_specific_title_match() {
|
||||||
|
let tmp_dir = create_temp_espanso_directory();
|
||||||
|
|
||||||
|
let specific_path = create_temp_file_in_dir(&tmp_dir, "specific.yaml", r###"
|
||||||
|
name: chrome
|
||||||
|
filter_title: "Chrome"
|
||||||
|
"###);
|
||||||
|
|
||||||
|
let config_set = ConfigSet::load(tmp_dir.path());
|
||||||
|
assert!(config_set.is_ok());
|
||||||
|
|
||||||
|
let dummy_system_manager = DummySystemManager::new_custom("Google Chrome", "Chrome", "C:\\Path\\chrome.exe");
|
||||||
|
|
||||||
|
let config_manager = RuntimeConfigManager::new(config_set.unwrap(), dummy_system_manager);
|
||||||
|
|
||||||
|
assert_eq!(config_manager.calculate_active_config().name, "chrome");
|
||||||
|
}
|
||||||
|
|
||||||
|
fn test_runtime_calculate_active_config_specific_class_match() {
|
||||||
|
let tmp_dir = create_temp_espanso_directory();
|
||||||
|
|
||||||
|
let specific_path = create_temp_file_in_dir(&tmp_dir, "specific.yaml", r###"
|
||||||
|
name: chrome
|
||||||
|
filter_class: "Chrome"
|
||||||
|
"###);
|
||||||
|
|
||||||
|
let config_set = ConfigSet::load(tmp_dir.path());
|
||||||
|
assert!(config_set.is_ok());
|
||||||
|
|
||||||
|
let dummy_system_manager = DummySystemManager::new_custom("Google Chrome", "Chrome", "C:\\Path\\chrome.exe");
|
||||||
|
|
||||||
|
let config_manager = RuntimeConfigManager::new(config_set.unwrap(), dummy_system_manager);
|
||||||
|
|
||||||
|
assert_eq!(config_manager.calculate_active_config().name, "chrome");
|
||||||
|
}
|
||||||
|
|
||||||
|
fn test_runtime_calculate_active_config_specific_exec_match() {
|
||||||
|
let tmp_dir = create_temp_espanso_directory();
|
||||||
|
|
||||||
|
let specific_path = create_temp_file_in_dir(&tmp_dir, "specific.yaml", r###"
|
||||||
|
name: chrome
|
||||||
|
filter_exec: "chrome.exe"
|
||||||
|
"###);
|
||||||
|
|
||||||
|
let config_set = ConfigSet::load(tmp_dir.path());
|
||||||
|
assert!(config_set.is_ok());
|
||||||
|
|
||||||
|
let dummy_system_manager = DummySystemManager::new_custom("Google Chrome", "Chrome", "C:\\Path\\chrome.exe");
|
||||||
|
|
||||||
|
let config_manager = RuntimeConfigManager::new(config_set.unwrap(), dummy_system_manager);
|
||||||
|
|
||||||
|
assert_eq!(config_manager.calculate_active_config().name, "chrome");
|
||||||
|
}
|
||||||
|
|
||||||
|
fn test_runtime_calculate_active_config_specific_multi_filter_match() {
|
||||||
|
let tmp_dir = create_temp_espanso_directory();
|
||||||
|
|
||||||
|
let specific_path = create_temp_file_in_dir(&tmp_dir, "specific.yaml", r###"
|
||||||
|
name: chrome
|
||||||
|
filter_class: Browser
|
||||||
|
filter_exec: "firefox.exe"
|
||||||
|
"###);
|
||||||
|
|
||||||
|
let config_set = ConfigSet::load(tmp_dir.path());
|
||||||
|
assert!(config_set.is_ok());
|
||||||
|
|
||||||
|
let dummy_system_manager = DummySystemManager::new_custom("Google Chrome", "Browser", "C:\\Path\\chrome.exe");
|
||||||
|
|
||||||
|
let config_manager = RuntimeConfigManager::new(config_set.unwrap(), dummy_system_manager);
|
||||||
|
|
||||||
|
assert_eq!(config_manager.calculate_active_config().name, "chrome");
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_runtime_calculate_active_config_no_match() {
|
||||||
|
let tmp_dir = create_temp_espanso_directory();
|
||||||
|
|
||||||
|
let specific_path = create_temp_file_in_dir(&tmp_dir, "specific.yaml", r###"
|
||||||
|
name: firefox
|
||||||
|
filter_title: "Firefox"
|
||||||
|
"###);
|
||||||
|
|
||||||
|
let config_set = ConfigSet::load(tmp_dir.path());
|
||||||
|
assert!(config_set.is_ok());
|
||||||
|
|
||||||
|
let dummy_system_manager = DummySystemManager::new_custom("Google Chrome", "Chrome", "C:\\Path\\chrome.exe");
|
||||||
|
|
||||||
|
let config_manager = RuntimeConfigManager::new(config_set.unwrap(), dummy_system_manager);
|
||||||
|
|
||||||
|
assert_eq!(config_manager.calculate_active_config().name, "default");
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_runtime_active_config_cache() {
|
||||||
|
let tmp_dir = create_temp_espanso_directory();
|
||||||
|
|
||||||
|
let specific_path = create_temp_file_in_dir(&tmp_dir, "specific.yaml", r###"
|
||||||
|
name: firefox
|
||||||
|
filter_title: "Firefox"
|
||||||
|
"###);
|
||||||
|
|
||||||
|
let config_set = ConfigSet::load(tmp_dir.path());
|
||||||
|
assert!(config_set.is_ok());
|
||||||
|
|
||||||
|
let dummy_system_manager = DummySystemManager::new_custom("Google Chrome", "Chrome", "C:\\Path\\chrome.exe");
|
||||||
|
|
||||||
|
let config_manager = RuntimeConfigManager::new(config_set.unwrap(), dummy_system_manager);
|
||||||
|
|
||||||
|
assert_eq!(config_manager.active_config().name, "default");
|
||||||
|
assert_eq!(config_manager.calculate_active_config().name, "default");
|
||||||
|
|
||||||
|
config_manager.system_manager.change("Firefox", "Browser", "C\\Path\\firefox.exe");
|
||||||
|
|
||||||
|
// Active config should have changed, but not cached one
|
||||||
|
assert_eq!(config_manager.calculate_active_config().name, "firefox");
|
||||||
|
assert_eq!(config_manager.active_config().name, "default");
|
||||||
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user