Merge branch 'ui-testing' into master
This commit is contained in:
commit
7b6e5eafba
35 changed files with 1275 additions and 0 deletions
|
@ -61,4 +61,6 @@ members = [
|
|||
"lib/etc/libimaginteraction",
|
||||
"lib/etc/libimagtimeui",
|
||||
"lib/etc/libimagutil",
|
||||
|
||||
"tests/ui",
|
||||
]
|
||||
|
|
22
tests/ui/Cargo.toml
Normal file
22
tests/ui/Cargo.toml
Normal file
|
@ -0,0 +1,22 @@
|
|||
[package]
|
||||
name = "tests-ui"
|
||||
version = "0.10.0"
|
||||
authors = ["Matthias Beyer <mail@beyermatthias.de>"]
|
||||
edition = "2018"
|
||||
|
||||
# We do not publish this crate because it contains tests which should only be
|
||||
# available during development and CI runs, but there's nothing that a user of
|
||||
# any imag command might need, ever.
|
||||
publish = false
|
||||
|
||||
[dependencies]
|
||||
assert_cmd = "0.11"
|
||||
assert_fs = "0.11"
|
||||
duct = "0.13"
|
||||
env_logger = "0.7"
|
||||
log = "0.4"
|
||||
predicates = "1"
|
||||
pretty_assertions = "0.6"
|
||||
semver = "0.9"
|
||||
version = "3"
|
||||
|
13
tests/ui/README.md
Normal file
13
tests/ui/README.md
Normal file
|
@ -0,0 +1,13 @@
|
|||
# UI testing
|
||||
|
||||
This crate is just a helper crate for CI runs and development. It contains
|
||||
test code which tests the actual imag binaries and their user interfaces and
|
||||
behaviour.
|
||||
|
||||
Tests are automatically done in temporary directories.
|
||||
The test setup removes these testing directories after tests have run.
|
||||
To prevent this, set `IMAG_UI_TEST_PERSIST`.
|
||||
|
||||
Use the normal `RUST_LOG` functionality for logging (or see the documentation
|
||||
for the `env_logger` crate).
|
||||
|
86
tests/ui/src/imag.rs
Normal file
86
tests/ui/src/imag.rs
Normal file
|
@ -0,0 +1,86 @@
|
|||
//
|
||||
// imag - the personal information management suite for the commandline
|
||||
// Copyright (C) 2015-2019 Matthias Beyer <mail@beyermatthias.de> and contributors
|
||||
//
|
||||
// This library is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU Lesser General Public
|
||||
// License as published by the Free Software Foundation; version
|
||||
// 2.1 of the License.
|
||||
//
|
||||
// This library is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
// Lesser General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Lesser General Public
|
||||
// License along with this library; if not, write to the Free Software
|
||||
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
//
|
||||
|
||||
use std::process::Command;
|
||||
use std::path::PathBuf;
|
||||
|
||||
use assert_fs::fixture::TempDir;
|
||||
use assert_cmd::prelude::*;
|
||||
use assert_cmd::assert::Assert;
|
||||
|
||||
pub fn make_temphome() -> TempDir {
|
||||
TempDir::new().unwrap().persist_if(std::env::var("IMAG_UI_TEST_PERSIST").is_ok())
|
||||
}
|
||||
|
||||
pub fn binary(tempdir: &TempDir, binary_name: &str) -> Command {
|
||||
let path = tempdir.path()
|
||||
.to_str()
|
||||
.map(String::from)
|
||||
.unwrap_or_else(|| panic!("Cannot create imag home path string"));
|
||||
|
||||
let mut cmd = Command::cargo_bin(binary_name).unwrap();
|
||||
cmd.arg("--rtp");
|
||||
cmd.arg(path);
|
||||
cmd
|
||||
}
|
||||
|
||||
/// Run the passed command and get the stdout of it.
|
||||
///
|
||||
/// This function does _not_ ensure that stdin is inherited.
|
||||
pub fn stdout_of_command(mut command: Command) -> Vec<String> {
|
||||
let assert = command.assert();
|
||||
let lines = String::from_utf8(assert.get_output().stdout.clone())
|
||||
.unwrap()
|
||||
.lines()
|
||||
.map(String::from)
|
||||
.collect();
|
||||
assert.success();
|
||||
lines
|
||||
}
|
||||
|
||||
/// Run the passed command and get the stderr of it.
|
||||
///
|
||||
/// This function does _not_ ensure that stdin is inherited.
|
||||
pub fn stderr_of_command(command: &mut Command) -> (Assert, Vec<String>) {
|
||||
let assert = command.assert();
|
||||
let lines = String::from_utf8(assert.get_output().stderr.clone())
|
||||
.unwrap()
|
||||
.lines()
|
||||
.map(String::from)
|
||||
.collect();
|
||||
(assert, lines)
|
||||
}
|
||||
|
||||
/// Create a PathBuf for a file in a TempDir
|
||||
pub fn file_path(tempdir: &TempDir, path_elements: &[&str]) -> PathBuf {
|
||||
create_path_for(tempdir.path().to_path_buf(), path_elements)
|
||||
}
|
||||
|
||||
pub fn store_path(tempdir: &TempDir, path_elements: &[&str]) -> PathBuf {
|
||||
let mut path = tempdir.path().to_path_buf();
|
||||
path.push("store");
|
||||
create_path_for(path, path_elements)
|
||||
}
|
||||
|
||||
fn create_path_for(mut path: PathBuf, path_elements: &[&str]) -> PathBuf {
|
||||
path_elements.iter().for_each(|el| path.push(el));
|
||||
debug!("Calculated path = {:?}", path);
|
||||
path
|
||||
}
|
||||
|
19
tests/ui/src/imag_annotate.rs
Normal file
19
tests/ui/src/imag_annotate.rs
Normal file
|
@ -0,0 +1,19 @@
|
|||
//
|
||||
// imag - the personal information management suite for the commandline
|
||||
// Copyright (C) 2015-2019 Matthias Beyer <mail@beyermatthias.de> and contributors
|
||||
//
|
||||
// This library is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU Lesser General Public
|
||||
// License as published by the Free Software Foundation; version
|
||||
// 2.1 of the License.
|
||||
//
|
||||
// This library is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
// Lesser General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Lesser General Public
|
||||
// License along with this library; if not, write to the Free Software
|
||||
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
//
|
||||
|
19
tests/ui/src/imag_bookmark.rs
Normal file
19
tests/ui/src/imag_bookmark.rs
Normal file
|
@ -0,0 +1,19 @@
|
|||
//
|
||||
// imag - the personal information management suite for the commandline
|
||||
// Copyright (C) 2015-2019 Matthias Beyer <mail@beyermatthias.de> and contributors
|
||||
//
|
||||
// This library is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU Lesser General Public
|
||||
// License as published by the Free Software Foundation; version
|
||||
// 2.1 of the License.
|
||||
//
|
||||
// This library is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
// Lesser General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Lesser General Public
|
||||
// License along with this library; if not, write to the Free Software
|
||||
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
//
|
||||
|
19
tests/ui/src/imag_calendar.rs
Normal file
19
tests/ui/src/imag_calendar.rs
Normal file
|
@ -0,0 +1,19 @@
|
|||
//
|
||||
// imag - the personal information management suite for the commandline
|
||||
// Copyright (C) 2015-2019 Matthias Beyer <mail@beyermatthias.de> and contributors
|
||||
//
|
||||
// This library is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU Lesser General Public
|
||||
// License as published by the Free Software Foundation; version
|
||||
// 2.1 of the License.
|
||||
//
|
||||
// This library is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
// Lesser General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Lesser General Public
|
||||
// License along with this library; if not, write to the Free Software
|
||||
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
//
|
||||
|
70
tests/ui/src/imag_category.rs
Normal file
70
tests/ui/src/imag_category.rs
Normal file
|
@ -0,0 +1,70 @@
|
|||
//
|
||||
// imag - the personal information management suite for the commandline
|
||||
// Copyright (C) 2015-2019 Matthias Beyer <mail@beyermatthias.de> and contributors
|
||||
//
|
||||
// This library is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU Lesser General Public
|
||||
// License as published by the Free Software Foundation; version
|
||||
// 2.1 of the License.
|
||||
//
|
||||
// This library is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
// Lesser General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Lesser General Public
|
||||
// License along with this library; if not, write to the Free Software
|
||||
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
//
|
||||
|
||||
use std::process::Command;
|
||||
|
||||
use assert_fs::fixture::TempDir;
|
||||
|
||||
pub fn binary(tempdir: &TempDir) -> Command {
|
||||
crate::imag::binary(tempdir, "imag-category")
|
||||
}
|
||||
|
||||
pub fn call(tmpdir: &TempDir, args: &[&str]) -> Vec<String> {
|
||||
let mut binary = binary(tmpdir);
|
||||
binary.stdin(std::process::Stdio::inherit());
|
||||
binary.arg("--ignore-ids");
|
||||
binary.args(args);
|
||||
debug!("Command = {:?}", binary);
|
||||
crate::imag::stdout_of_command(binary)
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_new_entry_has_no_category() {
|
||||
crate::setup_logging();
|
||||
let imag_home = crate::imag::make_temphome();
|
||||
crate::imag_init::call(&imag_home);
|
||||
crate::imag_create::call(&imag_home, &["test"]);
|
||||
|
||||
let (assert, stderr_output) = {
|
||||
let mut binary = binary(&imag_home);
|
||||
binary.stdin(std::process::Stdio::inherit());
|
||||
binary.args(&["--ignore-ids", "get", "test"]);
|
||||
crate::imag::stderr_of_command(&mut binary)
|
||||
};
|
||||
|
||||
assert.failure();
|
||||
assert!(stderr_output.iter().any(|substr| substr.contains("Category name missing")));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_after_setting_a_new_category_there_is_a_category() {
|
||||
crate::setup_logging();
|
||||
let imag_home = crate::imag::make_temphome();
|
||||
crate::imag_init::call(&imag_home);
|
||||
crate::imag_create::call(&imag_home, &["test"]);
|
||||
|
||||
let _ = call(&imag_home, &["create-category", "cat"]);
|
||||
let _ = call(&imag_home, &["set", "cat", "test"]);
|
||||
let output = call(&imag_home, &["get", "test"]);
|
||||
debug!("output = {:?}", output);
|
||||
assert!(!output.is_empty());
|
||||
assert_eq!(output.len(), 1);
|
||||
assert_eq!(output[0], "cat");
|
||||
}
|
||||
|
19
tests/ui/src/imag_contact.rs
Normal file
19
tests/ui/src/imag_contact.rs
Normal file
|
@ -0,0 +1,19 @@
|
|||
//
|
||||
// imag - the personal information management suite for the commandline
|
||||
// Copyright (C) 2015-2019 Matthias Beyer <mail@beyermatthias.de> and contributors
|
||||
//
|
||||
// This library is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU Lesser General Public
|
||||
// License as published by the Free Software Foundation; version
|
||||
// 2.1 of the License.
|
||||
//
|
||||
// This library is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
// Lesser General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Lesser General Public
|
||||
// License along with this library; if not, write to the Free Software
|
||||
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
//
|
||||
|
76
tests/ui/src/imag_create.rs
Normal file
76
tests/ui/src/imag_create.rs
Normal file
|
@ -0,0 +1,76 @@
|
|||
//
|
||||
// imag - the personal information management suite for the commandline
|
||||
// Copyright (C) 2015-2019 Matthias Beyer <mail@beyermatthias.de> and contributors
|
||||
//
|
||||
// This library is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU Lesser General Public
|
||||
// License as published by the Free Software Foundation; version
|
||||
// 2.1 of the License.
|
||||
//
|
||||
// This library is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
// Lesser General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Lesser General Public
|
||||
// License along with this library; if not, write to the Free Software
|
||||
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
//
|
||||
|
||||
use std::process::Command;
|
||||
|
||||
use assert_cmd::prelude::*;
|
||||
use assert_fs::fixture::TempDir;
|
||||
|
||||
/// Helper to call imag-create
|
||||
pub fn call(tempdir: &TempDir, targets: &[&str]) {
|
||||
let mut bin = binary(tempdir);
|
||||
|
||||
// ensure that stdin is not used by the child process
|
||||
bin.stdin(std::process::Stdio::inherit());
|
||||
|
||||
for target in targets.iter() {
|
||||
bin.arg(target);
|
||||
}
|
||||
debug!("Command = {:?}", bin);
|
||||
|
||||
bin.assert().success();
|
||||
}
|
||||
|
||||
pub fn binary(tempdir: &TempDir) -> Command {
|
||||
crate::imag::binary(tempdir, "imag-create")
|
||||
}
|
||||
|
||||
|
||||
#[test]
|
||||
fn test_creating_works() {
|
||||
crate::setup_logging();
|
||||
let imag_home = crate::imag::make_temphome();
|
||||
crate::imag_init::call(&imag_home);
|
||||
|
||||
call(&imag_home, &["test"]);
|
||||
|
||||
let entry_path = crate::imag::store_path(&imag_home, &["test"]);
|
||||
|
||||
assert!(entry_path.exists(), "Entry was not created: {:?}", entry_path);
|
||||
assert!(entry_path.is_file() , "Entry is not a file: {:?}", entry_path);
|
||||
|
||||
let contents = std::fs::read_to_string(entry_path).unwrap();
|
||||
let mut lines = contents.lines();
|
||||
|
||||
assert_eq!(lines.next(), Some("---"));
|
||||
assert_eq!(lines.next(), Some("[imag]"));
|
||||
{
|
||||
let version_line = lines.next().unwrap();
|
||||
assert!(version_line.starts_with("version = '"));
|
||||
assert!(version_line.ends_with("'"));
|
||||
let version = version_line.replace("version = '", "").replace("'", "");
|
||||
let semver = semver::Version::parse(&version);
|
||||
assert!(semver.is_ok());
|
||||
assert!(!semver.unwrap().is_prerelease()); // we only want full versions in the header
|
||||
|
||||
}
|
||||
assert_eq!(lines.next(), Some("---"));
|
||||
assert_eq!(lines.next(), None);
|
||||
}
|
||||
|
19
tests/ui/src/imag_diagnostics.rs
Normal file
19
tests/ui/src/imag_diagnostics.rs
Normal file
|
@ -0,0 +1,19 @@
|
|||
//
|
||||
// imag - the personal information management suite for the commandline
|
||||
// Copyright (C) 2015-2019 Matthias Beyer <mail@beyermatthias.de> and contributors
|
||||
//
|
||||
// This library is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU Lesser General Public
|
||||
// License as published by the Free Software Foundation; version
|
||||
// 2.1 of the License.
|
||||
//
|
||||
// This library is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
// Lesser General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Lesser General Public
|
||||
// License along with this library; if not, write to the Free Software
|
||||
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
//
|
||||
|
19
tests/ui/src/imag_diary.rs
Normal file
19
tests/ui/src/imag_diary.rs
Normal file
|
@ -0,0 +1,19 @@
|
|||
//
|
||||
// imag - the personal information management suite for the commandline
|
||||
// Copyright (C) 2015-2019 Matthias Beyer <mail@beyermatthias.de> and contributors
|
||||
//
|
||||
// This library is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU Lesser General Public
|
||||
// License as published by the Free Software Foundation; version
|
||||
// 2.1 of the License.
|
||||
//
|
||||
// This library is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
// Lesser General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Lesser General Public
|
||||
// License along with this library; if not, write to the Free Software
|
||||
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
//
|
||||
|
19
tests/ui/src/imag_edit.rs
Normal file
19
tests/ui/src/imag_edit.rs
Normal file
|
@ -0,0 +1,19 @@
|
|||
//
|
||||
// imag - the personal information management suite for the commandline
|
||||
// Copyright (C) 2015-2019 Matthias Beyer <mail@beyermatthias.de> and contributors
|
||||
//
|
||||
// This library is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU Lesser General Public
|
||||
// License as published by the Free Software Foundation; version
|
||||
// 2.1 of the License.
|
||||
//
|
||||
// This library is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
// Lesser General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Lesser General Public
|
||||
// License along with this library; if not, write to the Free Software
|
||||
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
//
|
||||
|
19
tests/ui/src/imag_git.rs
Normal file
19
tests/ui/src/imag_git.rs
Normal file
|
@ -0,0 +1,19 @@
|
|||
//
|
||||
// imag - the personal information management suite for the commandline
|
||||
// Copyright (C) 2015-2019 Matthias Beyer <mail@beyermatthias.de> and contributors
|
||||
//
|
||||
// This library is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU Lesser General Public
|
||||
// License as published by the Free Software Foundation; version
|
||||
// 2.1 of the License.
|
||||
//
|
||||
// This library is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
// Lesser General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Lesser General Public
|
||||
// License along with this library; if not, write to the Free Software
|
||||
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
//
|
||||
|
19
tests/ui/src/imag_gps.rs
Normal file
19
tests/ui/src/imag_gps.rs
Normal file
|
@ -0,0 +1,19 @@
|
|||
//
|
||||
// imag - the personal information management suite for the commandline
|
||||
// Copyright (C) 2015-2019 Matthias Beyer <mail@beyermatthias.de> and contributors
|
||||
//
|
||||
// This library is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU Lesser General Public
|
||||
// License as published by the Free Software Foundation; version
|
||||
// 2.1 of the License.
|
||||
//
|
||||
// This library is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
// Lesser General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Lesser General Public
|
||||
// License along with this library; if not, write to the Free Software
|
||||
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
//
|
||||
|
119
tests/ui/src/imag_grep.rs
Normal file
119
tests/ui/src/imag_grep.rs
Normal file
|
@ -0,0 +1,119 @@
|
|||
//
|
||||
// imag - the personal information management suite for the commandline
|
||||
// Copyright (C) 2015-2019 Matthias Beyer <mail@beyermatthias.de> and contributors
|
||||
//
|
||||
// This library is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU Lesser General Public
|
||||
// License as published by the Free Software Foundation; version
|
||||
// 2.1 of the License.
|
||||
//
|
||||
// This library is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
// Lesser General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Lesser General Public
|
||||
// License along with this library; if not, write to the Free Software
|
||||
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
//
|
||||
|
||||
use std::process::Command;
|
||||
use std::io::Write;
|
||||
|
||||
use assert_fs::fixture::TempDir;
|
||||
|
||||
pub fn call(tempdir: &TempDir, pattern: &str) -> Vec<String> {
|
||||
let mut binary = binary(tempdir);
|
||||
binary.arg("--ignore-ids");
|
||||
binary.arg(pattern);
|
||||
|
||||
// ensure that stdin is not used by the child process
|
||||
binary.stdin(std::process::Stdio::inherit());
|
||||
crate::imag::stdout_of_command(binary)
|
||||
}
|
||||
|
||||
pub fn binary(tempdir: &TempDir) -> Command {
|
||||
crate::imag::binary(tempdir, "imag-grep")
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_grepping_in_empty_store() {
|
||||
crate::setup_logging();
|
||||
let imag_home = crate::imag::make_temphome();
|
||||
crate::imag_init::call(&imag_home);
|
||||
|
||||
let output = call(&imag_home, "something");
|
||||
assert_eq!(output[0], "Processed 0 files, 0 matches, 0 nonmatches");
|
||||
assert_eq!(output.len(), 1);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_grepping_nonempty_store() {
|
||||
crate::setup_logging();
|
||||
let imag_home = crate::imag::make_temphome();
|
||||
crate::imag_init::call(&imag_home);
|
||||
crate::imag_create::call(&imag_home, &["something"]);
|
||||
|
||||
let output = call(&imag_home, "something");
|
||||
assert_eq!(output[0], "Processed 1 files, 0 matches, 1 nonmatches");
|
||||
assert_eq!(output.len(), 1);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_grepping_not_available_string() {
|
||||
crate::setup_logging();
|
||||
let imag_home = crate::imag::make_temphome();
|
||||
crate::imag_init::call(&imag_home);
|
||||
|
||||
let filename = &["something"];
|
||||
crate::imag_create::call(&imag_home, filename);
|
||||
let filepath = crate::imag::store_path(&imag_home, filename);
|
||||
|
||||
{
|
||||
debug!("Appending to file = {}", filepath.display());
|
||||
let mut file = ::std::fs::OpenOptions::new()
|
||||
.append(true)
|
||||
.create(false)
|
||||
.open(&filepath)
|
||||
.unwrap();
|
||||
|
||||
let _ = writeln!(file, "unavailable").unwrap();
|
||||
}
|
||||
|
||||
let output = call(&imag_home, "something");
|
||||
assert_eq!(output[0], "Processed 1 files, 0 matches, 1 nonmatches");
|
||||
assert_eq!(output.len(), 1);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_grepping_available_string() {
|
||||
crate::setup_logging();
|
||||
let imag_home = crate::imag::make_temphome();
|
||||
crate::imag_init::call(&imag_home);
|
||||
|
||||
let filename = &["something"];
|
||||
crate::imag_create::call(&imag_home, filename);
|
||||
let filepath = crate::imag::store_path(&imag_home, filename);
|
||||
|
||||
let filetext = "some text is here";
|
||||
{
|
||||
debug!("Appending to file = {}", filepath.display());
|
||||
let mut file = ::std::fs::OpenOptions::new()
|
||||
.append(true)
|
||||
.create(false)
|
||||
.open(&filepath)
|
||||
.unwrap();
|
||||
|
||||
let _ = writeln!(file, "{}", filetext).unwrap();
|
||||
}
|
||||
|
||||
let output = call(&imag_home, filetext);
|
||||
debug!("output = {:?}", output);
|
||||
assert!(!output.is_empty());
|
||||
assert_eq!(output[0], format!("{}:", filename[0]));
|
||||
assert_eq!(output[1], format!(" '{}'", filetext));
|
||||
assert_eq!(output[2], "");
|
||||
assert_eq!(output[3], "Processed 1 files, 1 matches, 0 nonmatches");
|
||||
assert_eq!(output.len(), 4);
|
||||
}
|
||||
|
19
tests/ui/src/imag_habit.rs
Normal file
19
tests/ui/src/imag_habit.rs
Normal file
|
@ -0,0 +1,19 @@
|
|||
//
|
||||
// imag - the personal information management suite for the commandline
|
||||
// Copyright (C) 2015-2019 Matthias Beyer <mail@beyermatthias.de> and contributors
|
||||
//
|
||||
// This library is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU Lesser General Public
|
||||
// License as published by the Free Software Foundation; version
|
||||
// 2.1 of the License.
|
||||
//
|
||||
// This library is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
// Lesser General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Lesser General Public
|
||||
// License along with this library; if not, write to the Free Software
|
||||
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
//
|
||||
|
76
tests/ui/src/imag_header.rs
Normal file
76
tests/ui/src/imag_header.rs
Normal file
|
@ -0,0 +1,76 @@
|
|||
//
|
||||
// imag - the personal information management suite for the commandline
|
||||
// Copyright (C) 2015-2019 Matthias Beyer <mail@beyermatthias.de> and contributors
|
||||
//
|
||||
// This library is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU Lesser General Public
|
||||
// License as published by the Free Software Foundation; version
|
||||
// 2.1 of the License.
|
||||
//
|
||||
// This library is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
// Lesser General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Lesser General Public
|
||||
// License along with this library; if not, write to the Free Software
|
||||
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
//
|
||||
|
||||
use std::process::Command;
|
||||
use std::str::FromStr;
|
||||
|
||||
use assert_cmd::prelude::*;
|
||||
use assert_fs::fixture::TempDir;
|
||||
|
||||
pub fn binary(tempdir: &TempDir) -> Command {
|
||||
crate::imag::binary(tempdir, "imag-header")
|
||||
}
|
||||
|
||||
pub fn call(tmpdir: &TempDir, args: &[&str]) -> Vec<String> {
|
||||
let mut binary = binary(tmpdir);
|
||||
binary.stdin(std::process::Stdio::inherit());
|
||||
binary.args(args);
|
||||
debug!("Command = {:?}", binary);
|
||||
crate::imag::stdout_of_command(binary)
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_no_header_besides_version_after_creation() {
|
||||
crate::setup_logging();
|
||||
let imag_home = crate::imag::make_temphome();
|
||||
crate::imag_init::call(&imag_home);
|
||||
crate::imag_create::call(&imag_home, &["test"]);
|
||||
|
||||
let mut bin = binary(&imag_home);
|
||||
bin.arg("test");
|
||||
bin.arg("string");
|
||||
bin.arg("imag.version");
|
||||
bin.assert().success();
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_imag_version_as_semver_string() {
|
||||
crate::setup_logging();
|
||||
let imag_home = crate::imag::make_temphome();
|
||||
crate::imag_init::call(&imag_home);
|
||||
crate::imag_create::call(&imag_home, &["test"]);
|
||||
|
||||
let output = call(&imag_home, &["--ignore-ids", "test", "read", "imag.version"]);
|
||||
let version = version::version!();
|
||||
debug!("output = {:?}", output);
|
||||
assert_eq!(output.len(), 1);
|
||||
assert_eq!(output[0], version);
|
||||
|
||||
let version = semver::Version::from_str(&version).unwrap();
|
||||
let parsed = semver::Version::from_str(&output[0]);
|
||||
|
||||
assert!(parsed.is_ok());
|
||||
let parsed = parsed.unwrap();
|
||||
|
||||
assert_eq!(parsed.major, version.major);
|
||||
assert_eq!(parsed.minor, version.minor);
|
||||
assert_eq!(parsed.patch, version.patch);
|
||||
assert_eq!(parsed.pre, version.pre);
|
||||
}
|
||||
|
19
tests/ui/src/imag_id_in_collection.rs
Normal file
19
tests/ui/src/imag_id_in_collection.rs
Normal file
|
@ -0,0 +1,19 @@
|
|||
//
|
||||
// imag - the personal information management suite for the commandline
|
||||
// Copyright (C) 2015-2019 Matthias Beyer <mail@beyermatthias.de> and contributors
|
||||
//
|
||||
// This library is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU Lesser General Public
|
||||
// License as published by the Free Software Foundation; version
|
||||
// 2.1 of the License.
|
||||
//
|
||||
// This library is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
// Lesser General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Lesser General Public
|
||||
// License along with this library; if not, write to the Free Software
|
||||
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
//
|
||||
|
62
tests/ui/src/imag_ids.rs
Normal file
62
tests/ui/src/imag_ids.rs
Normal file
|
@ -0,0 +1,62 @@
|
|||
//
|
||||
// imag - the personal information management suite for the commandline
|
||||
// Copyright (C) 2015-2019 Matthias Beyer <mail@beyermatthias.de> and contributors
|
||||
//
|
||||
// This library is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU Lesser General Public
|
||||
// License as published by the Free Software Foundation; version
|
||||
// 2.1 of the License.
|
||||
//
|
||||
// This library is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
// Lesser General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Lesser General Public
|
||||
// License along with this library; if not, write to the Free Software
|
||||
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
//
|
||||
|
||||
use std::process::Command;
|
||||
|
||||
use assert_cmd::prelude::*;
|
||||
use assert_fs::fixture::TempDir;
|
||||
use predicates::prelude::*;
|
||||
|
||||
/// Helper to call imag-init
|
||||
pub fn call(tempdir: &TempDir) -> Vec<String> {
|
||||
let mut binary = binary(tempdir);
|
||||
|
||||
// ensure that stdin is not used by the child process
|
||||
binary.stdin(std::process::Stdio::inherit());
|
||||
crate::imag::stdout_of_command(binary)
|
||||
}
|
||||
|
||||
pub fn binary(tempdir: &TempDir) -> Command {
|
||||
crate::imag::binary(tempdir, "imag-ids")
|
||||
}
|
||||
|
||||
|
||||
#[test]
|
||||
fn test_no_ids_after_init() {
|
||||
crate::setup_logging();
|
||||
let imag_home = crate::imag::make_temphome();
|
||||
crate::imag_init::call(&imag_home);
|
||||
|
||||
binary(&imag_home)
|
||||
.assert()
|
||||
.success()
|
||||
.stdout(predicate::eq(b"" as &[u8]));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_one_id_after_creating_one_entry() {
|
||||
crate::setup_logging();
|
||||
let imag_home = crate::imag::make_temphome();
|
||||
crate::imag_init::call(&imag_home);
|
||||
crate::imag_create::call(&imag_home, &["test"]);
|
||||
let ids = call(&imag_home);
|
||||
|
||||
assert_eq!(ids.len(), 1);
|
||||
assert_eq!(ids[0], "test");
|
||||
}
|
110
tests/ui/src/imag_init.rs
Normal file
110
tests/ui/src/imag_init.rs
Normal file
|
@ -0,0 +1,110 @@
|
|||
//
|
||||
// imag - the personal information management suite for the commandline
|
||||
// Copyright (C) 2015-2019 Matthias Beyer <mail@beyermatthias.de> and contributors
|
||||
//
|
||||
// This library is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU Lesser General Public
|
||||
// License as published by the Free Software Foundation; version
|
||||
// 2.1 of the License.
|
||||
//
|
||||
// This library is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
// Lesser General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Lesser General Public
|
||||
// License along with this library; if not, write to the Free Software
|
||||
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
//
|
||||
|
||||
use std::process::Command;
|
||||
|
||||
use assert_cmd::prelude::*;
|
||||
use assert_fs::fixture::TempDir;
|
||||
|
||||
/// Helper to call imag-init
|
||||
pub fn call(tempdir: &TempDir) {
|
||||
binary(tempdir).assert().success();
|
||||
}
|
||||
|
||||
pub fn binary(tempdir: &TempDir) -> Command {
|
||||
let path = tempdir.path()
|
||||
.to_str()
|
||||
.map(String::from)
|
||||
.unwrap_or_else(|| panic!("Cannot create imag home path string"));
|
||||
|
||||
let mut cmd = Command::cargo_bin("imag-init").unwrap();
|
||||
cmd.arg("--path");
|
||||
cmd.arg(path);
|
||||
cmd
|
||||
}
|
||||
|
||||
|
||||
#[test]
|
||||
fn test_init_makes_imag_dir() {
|
||||
crate::setup_logging();
|
||||
let imag_home = crate::imag::make_temphome();
|
||||
call(&imag_home);
|
||||
assert!(imag_home.path().exists(), "imag dir does not exist");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_init_creates_default_config() {
|
||||
use pretty_assertions::assert_eq;
|
||||
|
||||
crate::setup_logging();
|
||||
let imag_home = crate::imag::make_temphome();
|
||||
call(&imag_home);
|
||||
|
||||
const CONFIGURATION_STR : &str = include_str!("../../../imagrc.toml");
|
||||
let config = std::fs::read_to_string({
|
||||
let mut path = imag_home.path().to_path_buf();
|
||||
path.push("imagrc.toml");
|
||||
path
|
||||
})
|
||||
.unwrap();
|
||||
|
||||
// the imagrc is based on the example imagrc from this repository, but the one
|
||||
// thing that differs is that the default level for logging output is "info" rather than
|
||||
// "default"
|
||||
CONFIGURATION_STR
|
||||
.to_string()
|
||||
.replace(
|
||||
r#"level = "debug""#,
|
||||
r#"level = "info""#
|
||||
)
|
||||
.lines()
|
||||
.zip(config.lines())
|
||||
.for_each(|(orig, created)| {
|
||||
assert_eq!(orig, created);
|
||||
});
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_init_creates_store_directory() {
|
||||
crate::setup_logging();
|
||||
let imag_home = crate::imag::make_temphome();
|
||||
call(&imag_home);
|
||||
let store_path = {
|
||||
let mut path = imag_home.path().to_path_buf();
|
||||
path.push("store");
|
||||
path
|
||||
};
|
||||
|
||||
assert!(store_path.exists(), "imag store path does not exist");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_init_creates_empty_store_directory() {
|
||||
crate::setup_logging();
|
||||
let imag_home = crate::imag::make_temphome();
|
||||
call(&imag_home);
|
||||
let store_path = {
|
||||
let mut path = imag_home.path().to_path_buf();
|
||||
path.push("store");
|
||||
path
|
||||
};
|
||||
|
||||
assert_eq!(0, std::fs::read_dir(store_path).unwrap().count(), "imag store directory is not empty after creation");
|
||||
}
|
||||
|
19
tests/ui/src/imag_link.rs
Normal file
19
tests/ui/src/imag_link.rs
Normal file
|
@ -0,0 +1,19 @@
|
|||
//
|
||||
// imag - the personal information management suite for the commandline
|
||||
// Copyright (C) 2015-2019 Matthias Beyer <mail@beyermatthias.de> and contributors
|
||||
//
|
||||
// This library is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU Lesser General Public
|
||||
// License as published by the Free Software Foundation; version
|
||||
// 2.1 of the License.
|
||||
//
|
||||
// This library is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
// Lesser General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Lesser General Public
|
||||
// License along with this library; if not, write to the Free Software
|
||||
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
//
|
||||
|
19
tests/ui/src/imag_log.rs
Normal file
19
tests/ui/src/imag_log.rs
Normal file
|
@ -0,0 +1,19 @@
|
|||
//
|
||||
// imag - the personal information management suite for the commandline
|
||||
// Copyright (C) 2015-2019 Matthias Beyer <mail@beyermatthias.de> and contributors
|
||||
//
|
||||
// This library is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU Lesser General Public
|
||||
// License as published by the Free Software Foundation; version
|
||||
// 2.1 of the License.
|
||||
//
|
||||
// This library is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
// Lesser General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Lesser General Public
|
||||
// License along with this library; if not, write to the Free Software
|
||||
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
//
|
||||
|
19
tests/ui/src/imag_mail.rs
Normal file
19
tests/ui/src/imag_mail.rs
Normal file
|
@ -0,0 +1,19 @@
|
|||
//
|
||||
// imag - the personal information management suite for the commandline
|
||||
// Copyright (C) 2015-2019 Matthias Beyer <mail@beyermatthias.de> and contributors
|
||||
//
|
||||
// This library is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU Lesser General Public
|
||||
// License as published by the Free Software Foundation; version
|
||||
// 2.1 of the License.
|
||||
//
|
||||
// This library is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
// Lesser General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Lesser General Public
|
||||
// License along with this library; if not, write to the Free Software
|
||||
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
//
|
||||
|
19
tests/ui/src/imag_markdown.rs
Normal file
19
tests/ui/src/imag_markdown.rs
Normal file
|
@ -0,0 +1,19 @@
|
|||
//
|
||||
// imag - the personal information management suite for the commandline
|
||||
// Copyright (C) 2015-2019 Matthias Beyer <mail@beyermatthias.de> and contributors
|
||||
//
|
||||
// This library is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU Lesser General Public
|
||||
// License as published by the Free Software Foundation; version
|
||||
// 2.1 of the License.
|
||||
//
|
||||
// This library is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
// Lesser General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Lesser General Public
|
||||
// License along with this library; if not, write to the Free Software
|
||||
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
//
|
||||
|
60
tests/ui/src/imag_mv.rs
Normal file
60
tests/ui/src/imag_mv.rs
Normal file
|
@ -0,0 +1,60 @@
|
|||
//
|
||||
// imag - the personal information management suite for the commandline
|
||||
// Copyright (C) 2015-2019 Matthias Beyer <mail@beyermatthias.de> and contributors
|
||||
//
|
||||
// This library is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU Lesser General Public
|
||||
// License as published by the Free Software Foundation; version
|
||||
// 2.1 of the License.
|
||||
//
|
||||
// This library is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
// Lesser General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Lesser General Public
|
||||
// License along with this library; if not, write to the Free Software
|
||||
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
//
|
||||
|
||||
use std::process::Command;
|
||||
|
||||
use assert_fs::fixture::TempDir;
|
||||
use assert_cmd::prelude::*;
|
||||
|
||||
|
||||
pub fn binary(tempdir: &TempDir) -> Command {
|
||||
crate::imag::binary(tempdir, "imag-mv")
|
||||
}
|
||||
|
||||
pub fn call(tmpdir: &TempDir, src: &str, dst: &str) {
|
||||
let mut binary = binary(tmpdir);
|
||||
binary.stdin(std::process::Stdio::inherit());
|
||||
binary.arg("--ignore-ids");
|
||||
binary.arg(src);
|
||||
binary.arg(dst);
|
||||
|
||||
debug!("Command = {:?}", binary);
|
||||
|
||||
binary.assert().success();
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_after_moving_entry_is_moved() {
|
||||
crate::setup_logging();
|
||||
let imag_home = crate::imag::make_temphome();
|
||||
crate::imag_init::call(&imag_home);
|
||||
crate::imag_create::call(&imag_home, &["test"]);
|
||||
|
||||
call(&imag_home, "test", "moved");
|
||||
{
|
||||
let entry_path = crate::imag::store_path(&imag_home, &["moved"]);
|
||||
assert!(entry_path.exists(), "Entry was not created: {:?}", entry_path);
|
||||
assert!(entry_path.is_file() , "Entry is not a file: {:?}", entry_path);
|
||||
}
|
||||
{
|
||||
let entry_path = crate::imag::store_path(&imag_home, &["test"]);
|
||||
assert!(!entry_path.exists(), "Entry still exists: {:?}", entry_path);
|
||||
}
|
||||
}
|
||||
|
19
tests/ui/src/imag_notes.rs
Normal file
19
tests/ui/src/imag_notes.rs
Normal file
|
@ -0,0 +1,19 @@
|
|||
//
|
||||
// imag - the personal information management suite for the commandline
|
||||
// Copyright (C) 2015-2019 Matthias Beyer <mail@beyermatthias.de> and contributors
|
||||
//
|
||||
// This library is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU Lesser General Public
|
||||
// License as published by the Free Software Foundation; version
|
||||
// 2.1 of the License.
|
||||
//
|
||||
// This library is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
// Lesser General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Lesser General Public
|
||||
// License along with this library; if not, write to the Free Software
|
||||
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
//
|
||||
|
19
tests/ui/src/imag_ref.rs
Normal file
19
tests/ui/src/imag_ref.rs
Normal file
|
@ -0,0 +1,19 @@
|
|||
//
|
||||
// imag - the personal information management suite for the commandline
|
||||
// Copyright (C) 2015-2019 Matthias Beyer <mail@beyermatthias.de> and contributors
|
||||
//
|
||||
// This library is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU Lesser General Public
|
||||
// License as published by the Free Software Foundation; version
|
||||
// 2.1 of the License.
|
||||
//
|
||||
// This library is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
// Lesser General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Lesser General Public
|
||||
// License along with this library; if not, write to the Free Software
|
||||
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
//
|
||||
|
19
tests/ui/src/imag_store.rs
Normal file
19
tests/ui/src/imag_store.rs
Normal file
|
@ -0,0 +1,19 @@
|
|||
//
|
||||
// imag - the personal information management suite for the commandline
|
||||
// Copyright (C) 2015-2019 Matthias Beyer <mail@beyermatthias.de> and contributors
|
||||
//
|
||||
// This library is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU Lesser General Public
|
||||
// License as published by the Free Software Foundation; version
|
||||
// 2.1 of the License.
|
||||
//
|
||||
// This library is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
// Lesser General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Lesser General Public
|
||||
// License along with this library; if not, write to the Free Software
|
||||
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
//
|
||||
|
96
tests/ui/src/imag_tag.rs
Normal file
96
tests/ui/src/imag_tag.rs
Normal file
|
@ -0,0 +1,96 @@
|
|||
//
|
||||
// imag - the personal information management suite for the commandline
|
||||
// Copyright (C) 2015-2019 Matthias Beyer <mail@beyermatthias.de> and contributors
|
||||
//
|
||||
// This library is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU Lesser General Public
|
||||
// License as published by the Free Software Foundation; version
|
||||
// 2.1 of the License.
|
||||
//
|
||||
// This library is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
// Lesser General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Lesser General Public
|
||||
// License along with this library; if not, write to the Free Software
|
||||
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
//
|
||||
|
||||
use std::process::Command;
|
||||
|
||||
use assert_fs::fixture::TempDir;
|
||||
|
||||
pub fn binary(tempdir: &TempDir) -> Command {
|
||||
crate::imag::binary(tempdir, "imag-tag")
|
||||
}
|
||||
|
||||
pub fn call(tmpdir: &TempDir, args: &[&str]) -> Vec<String> {
|
||||
let mut binary = binary(tmpdir);
|
||||
binary.stdin(std::process::Stdio::inherit());
|
||||
binary.arg("--ignore-ids");
|
||||
binary.args(args);
|
||||
debug!("Command = {:?}", binary);
|
||||
crate::imag::stdout_of_command(binary)
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_new_entry_has_no_tags() {
|
||||
crate::setup_logging();
|
||||
let imag_home = crate::imag::make_temphome();
|
||||
crate::imag_init::call(&imag_home);
|
||||
crate::imag_create::call(&imag_home, &["test"]);
|
||||
|
||||
let output = call(&imag_home, &["test", "list", "--linewise"]);
|
||||
debug!("output = {:?}", output);
|
||||
assert!(output.is_empty());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_after_adding_tag_there_is_tag() {
|
||||
crate::setup_logging();
|
||||
let imag_home = crate::imag::make_temphome();
|
||||
crate::imag_init::call(&imag_home);
|
||||
crate::imag_create::call(&imag_home, &["test"]);
|
||||
let _ = call(&imag_home, &["test", "add", "tag"]);
|
||||
|
||||
let output = call(&imag_home, &["test", "list", "--linewise"]);
|
||||
debug!("output = {:?}", output);
|
||||
|
||||
assert!(!output.is_empty());
|
||||
assert_eq!(output.len(), 1);
|
||||
assert_eq!(output[0], "tag");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_after_adding_and_removing_there_is_no_tag() {
|
||||
crate::setup_logging();
|
||||
let imag_home = crate::imag::make_temphome();
|
||||
crate::imag_init::call(&imag_home);
|
||||
crate::imag_create::call(&imag_home, &["test"]);
|
||||
let _ = call(&imag_home, &["test", "add", "tag"]);
|
||||
let _ = call(&imag_home, &["test", "remove", "tag"]);
|
||||
|
||||
let output = call(&imag_home, &["test", "list", "--linewise"]);
|
||||
debug!("output = {:?}", output);
|
||||
|
||||
assert!(output.is_empty());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_adding_twice_does_not_add_twice() {
|
||||
crate::setup_logging();
|
||||
let imag_home = crate::imag::make_temphome();
|
||||
crate::imag_init::call(&imag_home);
|
||||
crate::imag_create::call(&imag_home, &["test"]);
|
||||
let _ = call(&imag_home, &["test", "add", "tag"]);
|
||||
let _ = call(&imag_home, &["test", "add", "tag"]);
|
||||
|
||||
let output = call(&imag_home, &["test", "list", "--linewise"]);
|
||||
debug!("output = {:?}", output);
|
||||
|
||||
assert!(!output.is_empty());
|
||||
assert_eq!(output.len(), 1);
|
||||
assert_eq!(output[0], "tag");
|
||||
}
|
||||
|
19
tests/ui/src/imag_timetrack.rs
Normal file
19
tests/ui/src/imag_timetrack.rs
Normal file
|
@ -0,0 +1,19 @@
|
|||
//
|
||||
// imag - the personal information management suite for the commandline
|
||||
// Copyright (C) 2015-2019 Matthias Beyer <mail@beyermatthias.de> and contributors
|
||||
//
|
||||
// This library is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU Lesser General Public
|
||||
// License as published by the Free Software Foundation; version
|
||||
// 2.1 of the License.
|
||||
//
|
||||
// This library is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
// Lesser General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Lesser General Public
|
||||
// License along with this library; if not, write to the Free Software
|
||||
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
//
|
||||
|
19
tests/ui/src/imag_todo.rs
Normal file
19
tests/ui/src/imag_todo.rs
Normal file
|
@ -0,0 +1,19 @@
|
|||
//
|
||||
// imag - the personal information management suite for the commandline
|
||||
// Copyright (C) 2015-2019 Matthias Beyer <mail@beyermatthias.de> and contributors
|
||||
//
|
||||
// This library is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU Lesser General Public
|
||||
// License as published by the Free Software Foundation; version
|
||||
// 2.1 of the License.
|
||||
//
|
||||
// This library is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
// Lesser General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Lesser General Public
|
||||
// License along with this library; if not, write to the Free Software
|
||||
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
//
|
||||
|
19
tests/ui/src/imag_view.rs
Normal file
19
tests/ui/src/imag_view.rs
Normal file
|
@ -0,0 +1,19 @@
|
|||
//
|
||||
// imag - the personal information management suite for the commandline
|
||||
// Copyright (C) 2015-2019 Matthias Beyer <mail@beyermatthias.de> and contributors
|
||||
//
|
||||
// This library is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU Lesser General Public
|
||||
// License as published by the Free Software Foundation; version
|
||||
// 2.1 of the License.
|
||||
//
|
||||
// This library is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
// Lesser General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Lesser General Public
|
||||
// License along with this library; if not, write to the Free Software
|
||||
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
//
|
||||
|
19
tests/ui/src/imag_wiki.rs
Normal file
19
tests/ui/src/imag_wiki.rs
Normal file
|
@ -0,0 +1,19 @@
|
|||
//
|
||||
// imag - the personal information management suite for the commandline
|
||||
// Copyright (C) 2015-2019 Matthias Beyer <mail@beyermatthias.de> and contributors
|
||||
//
|
||||
// This library is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU Lesser General Public
|
||||
// License as published by the Free Software Foundation; version
|
||||
// 2.1 of the License.
|
||||
//
|
||||
// This library is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
// Lesser General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Lesser General Public
|
||||
// License along with this library; if not, write to the Free Software
|
||||
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
//
|
||||
|
65
tests/ui/src/lib.rs
Normal file
65
tests/ui/src/lib.rs
Normal file
|
@ -0,0 +1,65 @@
|
|||
//
|
||||
// imag - the personal information management suite for the commandline
|
||||
// Copyright (C) 2015-2019 the imag contributors
|
||||
//
|
||||
// This library is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU Lesser General Public
|
||||
// License as published by the Free Software Foundation; version
|
||||
// 2.1 of the License.
|
||||
//
|
||||
// This library is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
// Lesser General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Lesser General Public
|
||||
// License along with this library; if not, write to the Free Software
|
||||
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
//
|
||||
|
||||
extern crate assert_cmd;
|
||||
extern crate assert_fs;
|
||||
extern crate env_logger;
|
||||
extern crate predicates;
|
||||
extern crate semver;
|
||||
#[macro_use] extern crate log;
|
||||
#[macro_use] extern crate pretty_assertions;
|
||||
|
||||
#[cfg(test)] mod imag;
|
||||
#[cfg(test)] mod imag_annotate;
|
||||
#[cfg(test)] mod imag_category;
|
||||
#[cfg(test)] mod imag_create;
|
||||
#[cfg(test)] mod imag_diagnostics;
|
||||
#[cfg(test)] mod imag_edit;
|
||||
#[cfg(test)] mod imag_git;
|
||||
#[cfg(test)] mod imag_gps;
|
||||
#[cfg(test)] mod imag_grep;
|
||||
#[cfg(test)] mod imag_header;
|
||||
#[cfg(test)] mod imag_id_in_collection;
|
||||
#[cfg(test)] mod imag_ids;
|
||||
#[cfg(test)] mod imag_init;
|
||||
#[cfg(test)] mod imag_link;
|
||||
#[cfg(test)] mod imag_markdown;
|
||||
#[cfg(test)] mod imag_mv;
|
||||
#[cfg(test)] mod imag_ref;
|
||||
#[cfg(test)] mod imag_store;
|
||||
#[cfg(test)] mod imag_tag;
|
||||
#[cfg(test)] mod imag_view;
|
||||
#[cfg(test)] mod imag_bookmark;
|
||||
#[cfg(test)] mod imag_calendar;
|
||||
#[cfg(test)] mod imag_contact;
|
||||
#[cfg(test)] mod imag_diary;
|
||||
#[cfg(test)] mod imag_habit;
|
||||
#[cfg(test)] mod imag_log;
|
||||
#[cfg(test)] mod imag_mail;
|
||||
#[cfg(test)] mod imag_notes;
|
||||
#[cfg(test)] mod imag_timetrack;
|
||||
#[cfg(test)] mod imag_todo;
|
||||
#[cfg(test)] mod imag_wiki;
|
||||
|
||||
static LOG_SYNC: std::sync::Once = std::sync::Once::new();
|
||||
|
||||
pub fn setup_logging() {
|
||||
LOG_SYNC.call_once(|| { let _ = env_logger::try_init(); });
|
||||
}
|
||||
|
Loading…
Reference in a new issue