Skip to content

Commit 12e89ec

Browse files
committed
Include doc tests in cargo test --all-targets
1 parent 55895e7 commit 12e89ec

File tree

2 files changed

+69
-14
lines changed

2 files changed

+69
-14
lines changed

src/cargo/ops/cargo_compile.rs

Lines changed: 28 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -593,21 +593,8 @@ fn generate_targets<'a>(
593593
requires_features: !required_features_filterable,
594594
mode: build_config.mode,
595595
}));
596-
if build_config.mode == CompileMode::Test {
597-
if let Some(t) = pkg
598-
.targets()
599-
.iter()
600-
.find(|t| t.is_lib() && t.doctested() && t.doctestable())
601-
{
602-
proposals.push(Proposal {
603-
pkg,
604-
target: t,
605-
requires_features: false,
606-
mode: CompileMode::Doctest,
607-
});
608-
}
609-
}
610596
}
597+
proposals.extend(list_doc_test_targets(packages, build_config));
611598
}
612599
CompileFilter::Only {
613600
all_targets,
@@ -696,6 +683,9 @@ fn generate_targets<'a>(
696683
bench_filter,
697684
bench_mode,
698685
)?);
686+
if all_targets {
687+
proposals.extend(list_doc_test_targets(packages, build_config))
688+
}
699689
}
700690
}
701691

@@ -787,6 +777,30 @@ fn filter_default_targets(targets: &[Target], mode: CompileMode) -> Vec<&Target>
787777
}
788778
}
789779

780+
fn list_doc_test_targets<'a>(
781+
packages: &[&'a Package],
782+
build_config: &BuildConfig,
783+
) -> Vec<Proposal<'a>> {
784+
let mut proposals = Vec::new();
785+
if build_config.mode == CompileMode::Test {
786+
for pkg in packages {
787+
if let Some(t) = pkg
788+
.targets()
789+
.iter()
790+
.find(|t| t.is_lib() && t.doctested() && t.doctestable())
791+
{
792+
proposals.push(Proposal {
793+
pkg,
794+
target: t,
795+
requires_features: false,
796+
mode: CompileMode::Doctest,
797+
});
798+
}
799+
}
800+
}
801+
proposals
802+
}
803+
790804
/// Returns a list of proposed targets based on command-line target selection flags.
791805
fn list_rule_targets<'a>(
792806
packages: &[&'a Package],

tests/testsuite/test.rs

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3469,6 +3469,46 @@ pub fn foo() -> u8 { 1 }
34693469
.run();
34703470
}
34713471

3472+
#[test]
3473+
fn all_targets_includes_doc_tests() {
3474+
let p = project()
3475+
.file(
3476+
"src/lib.rs",
3477+
"
3478+
/// ```
3479+
/// assert_eq!(1, 1)
3480+
/// ```
3481+
pub fn foo() -> u8 { 1 }
3482+
",
3483+
)
3484+
.build();
3485+
3486+
p.cargo("test --all-targets")
3487+
.with_stderr(
3488+
"\
3489+
[COMPILING] foo v0.0.1 ([CWD])
3490+
[FINISHED] dev [unoptimized + debuginfo] target(s) in [..]
3491+
[RUNNING] target/debug/deps/foo-[..]
3492+
[DOCTEST] foo
3493+
",
3494+
)
3495+
.with_stdout(
3496+
"
3497+
running 0 tests
3498+
3499+
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out
3500+
3501+
3502+
running 1 test
3503+
test src/lib.rs - foo (line 2) ... ok
3504+
3505+
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out
3506+
3507+
",
3508+
)
3509+
.run();
3510+
}
3511+
34723512
#[test]
34733513
fn test_all_targets_lib() {
34743514
let p = project().file("src/lib.rs", "").build();
@@ -3479,6 +3519,7 @@ fn test_all_targets_lib() {
34793519
[COMPILING] foo [..]
34803520
[FINISHED] dev [..]
34813521
[RUNNING] [..]foo[..]
3522+
[DOCTEST] foo
34823523
",
34833524
)
34843525
.run();

0 commit comments

Comments
 (0)