Add version-sync tests to ensure we update correctly
Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
This commit is contained in:
parent
1a25bd2da4
commit
ae14f15449
3 changed files with 135 additions and 0 deletions
|
@ -63,4 +63,5 @@ members = [
|
||||||
"lib/etc/libimagutil",
|
"lib/etc/libimagutil",
|
||||||
|
|
||||||
"tests/ui",
|
"tests/ui",
|
||||||
|
"tests/version-sync",
|
||||||
]
|
]
|
||||||
|
|
18
tests/version-sync/Cargo.toml
Normal file
18
tests/version-sync/Cargo.toml
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
[package]
|
||||||
|
name = "version-sync"
|
||||||
|
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
|
||||||
|
|
||||||
|
[dev-dependencies]
|
||||||
|
env_logger = "0.7"
|
||||||
|
log = "0.4.6"
|
||||||
|
version-sync = "0.8"
|
||||||
|
walkdir = "2"
|
||||||
|
toml-query = "0.9"
|
||||||
|
toml = "0.5"
|
116
tests/version-sync/src/lib.rs
Normal file
116
tests/version-sync/src/lib.rs
Normal file
|
@ -0,0 +1,116 @@
|
||||||
|
//
|
||||||
|
// 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
|
||||||
|
//
|
||||||
|
|
||||||
|
#[cfg(test)] extern crate version_sync;
|
||||||
|
#[cfg(test)] extern crate walkdir;
|
||||||
|
#[cfg(test)] extern crate env_logger;
|
||||||
|
#[cfg(test)] #[macro_use] extern crate log;
|
||||||
|
#[cfg(test)] extern crate toml_query;
|
||||||
|
#[cfg(test)] extern crate toml;
|
||||||
|
|
||||||
|
#[cfg(test)] use std::path::PathBuf;
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
fn setup_logging() {
|
||||||
|
let _ = env_logger::try_init();
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_readme() {
|
||||||
|
version_sync::assert_markdown_deps_updated!("../../README.md");
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_doc() {
|
||||||
|
version_sync::assert_contains_regex!("../../doc/src/00000.md", "^version: {version}$");
|
||||||
|
version_sync::assert_contains_regex!("../../doc/src/02000-store.md", "^version = \"{version}\"$");
|
||||||
|
version_sync::assert_contains_regex!("../../doc/src/03020-writing-modules.md", "version = \"{version}\"");
|
||||||
|
|
||||||
|
version_sync::assert_contains_regex!("../../doc/user/src/approach.md", "^version = \"{version}\"$");
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_all_cargotoml_files() {
|
||||||
|
use toml::Value;
|
||||||
|
|
||||||
|
setup_logging();
|
||||||
|
|
||||||
|
let current_version = env!("CARGO_PKG_VERSION");
|
||||||
|
let imag_root = PathBuf::from(format!("{}/../../", env!("CARGO_MANIFEST_DIR")));
|
||||||
|
println!("imag_root = {}", imag_root.display());
|
||||||
|
|
||||||
|
walkdir::WalkDir::new(&imag_root)
|
||||||
|
.follow_links(false)
|
||||||
|
.into_iter()
|
||||||
|
.collect::<Result<Vec<_>, _>>()
|
||||||
|
.expect("Failed collecting files")
|
||||||
|
.into_iter()
|
||||||
|
.filter(|e| !e.path().to_str().unwrap().contains("target"))
|
||||||
|
.filter_map(|element| if element.file_type().is_file() && element.path().ends_with("Cargo.toml") {
|
||||||
|
debug!("Using = {:?}", element);
|
||||||
|
Some(element.into_path())
|
||||||
|
} else {
|
||||||
|
debug!("Ignoring = {:?}", element);
|
||||||
|
None
|
||||||
|
})
|
||||||
|
.for_each(|cargotoml| {
|
||||||
|
let filecontent = std::fs::read_to_string(&cargotoml).expect(&format!("Failed to read {}", cargotoml.display()));
|
||||||
|
let toml = filecontent.parse::<Value>().expect(&format!("Failed to parse toml: {}", cargotoml.display()));
|
||||||
|
|
||||||
|
match toml.get("dependencies") {
|
||||||
|
Some(Value::Table(ref tab)) => {
|
||||||
|
for (k, v) in tab.iter() {
|
||||||
|
if k.contains("libimag") {
|
||||||
|
match v {
|
||||||
|
Value::String(s) => assert!(s.contains(current_version)),
|
||||||
|
Value::Table(ref dep) => {
|
||||||
|
let version = dep.get("version").expect(&format!("No 'version' key for dependencies at {}", cargotoml.display()));
|
||||||
|
let version_str = version.as_str().unwrap();
|
||||||
|
assert!(version_str.contains(current_version), "failed for: {} ('{}')", cargotoml.display(), version_str)
|
||||||
|
},
|
||||||
|
_ => unimplemented!(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
Some(_) => panic!("Dependencies is not a table?"),
|
||||||
|
None => /* ignore if there is no "dependencies" */ {},
|
||||||
|
}
|
||||||
|
|
||||||
|
match toml.get("dev-dependencies") {
|
||||||
|
Some(Value::Table(ref tab)) => {
|
||||||
|
for (k, v) in tab.iter() {
|
||||||
|
if k.contains("libimag") {
|
||||||
|
match v {
|
||||||
|
Value::String(s) => assert!(s.contains(current_version)),
|
||||||
|
Value::Table(ref dep) => {
|
||||||
|
let version = dep.get("version").expect(&format!("No 'version' key for dev-dependencies at {}", cargotoml.display()));
|
||||||
|
let version_str = version.as_str().unwrap();
|
||||||
|
assert!(version_str.contains(current_version), "failed for: {} ('{}')", cargotoml.display(), version_str)
|
||||||
|
},
|
||||||
|
_ => unimplemented!(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
Some(_) => panic!("dev-dependencies is not a table?"),
|
||||||
|
None => /* ignore if there is no "dependencies" */ {},
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
Loading…
Reference in a new issue