rusty-man/tests/output.rs
Robin Krahl 628377c83b
Refactor test suite to check multiple versions
This patch refactors the test suite:
- Instead of always generating the documentation with the available
  rustdoc version, we now store generated documentation for all
  supported rustdoc versions in the test/html directory.
- Instead of using one snapshot per test case, we now use one snapshot
  per test case and rustdoc version.
2020-09-11 20:30:05 +02:00

93 lines
2.6 KiB
Rust

// SPDX-FileCopyrightText: 2020 Robin Krahl <robin.krahl@ireas.org>
// SPDX-License-Identifier: MIT
#[path = "../src/test_utils.rs"]
mod test_utils;
use std::env;
use std::path;
use std::process;
use assert_cmd::prelude::*;
use test_utils::with_rustdoc;
fn run(path: impl AsRef<path::Path>, args: &[&str]) -> assert_cmd::assert::Assert {
process::Command::cargo_bin(env!("CARGO_PKG_NAME"))
.unwrap()
.args(&["--no-default-sources", "--source"])
.arg(path.as_ref())
.args(&["--viewer", "plain"])
.args(&["--width", "100"])
.args(args)
.assert()
}
fn get_stdout(path: impl AsRef<path::Path>, args: &[&str]) -> String {
let cmd = run(path, args).success().stderr("");
String::from_utf8(cmd.get_output().stdout.clone()).unwrap()
}
macro_rules! generate_run {
($name:ident $version:literal $args:expr) => {
#[test]
fn $name() {
with_rustdoc($version, |version, path| {
insta::assert_snapshot!(
format!("{}_{}", version, std::stringify!($name)),
get_stdout(path, $args)
);
});
}
};
}
macro_rules! assert_doc {
($( $name:ident($version:literal): $item:literal ),* $(,)? ) => {
$(
generate_run!($name $version &[$item]);
)*
};
}
macro_rules! assert_examples {
($( $name:ident($version:literal): $item:literal ),* $(,)? ) => {
$(
generate_run!($name $version &["-e", $item]);
)*
};
}
assert_doc![
mod_anyhow("*"): "anyhow",
macro_anyhow_anyhow("*"): "anyhow::anyhow",
macro_anyhow_ensure("*"): "anyhow::ensure",
struct_anyhow_error("*"): "anyhow::Error",
trait_anyhow_context("*"): "anyhow::Context",
type_anyhow_result("*"): "anyhow::Result",
];
assert_doc![
mod_log("*"): "log",
macro_log_debug("*"): "log::debug",
struct_log_metadata("*"): "log::Metadata",
enum_log_level("*"): "log::Level",
constant_log_static_max_level("*"): "log::STATIC_MAX_LEVEL",
trait_log_log("*"): "log::Log",
fn_log_logger("*"): "log::logger",
fn_log_set_logger_racy("*"): "log::set_logger_racy",
];
assert_doc![
mod_rand_core("*"): "rand_core",
trait_rand_core_rngcore("*"): "rand_core::RngCore",
trait_rand_core_seedablerng("*"): "rand_core::SeedableRng",
struct_rand_core_block_blockrng("*"): "rand_core::block::BlockRng",
];
assert_examples![
examples_mod_anyhow("*"): "anyhow",
examples_mod_log(">1.40.0"): "log",
examples_struct_rand_core_rngcore("*"): "rand_core::RngCore",
];