summaryrefslogtreecommitdiffstats
path: root/src/test/run-make/coverage-reports/expected_show_coverage.doctest.txt
blob: 732de6526279105e3e81dddc33cab855c3992e22 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
../coverage/doctest.rs:
    1|       |//! This test ensures that code from doctests is properly re-mapped.
    2|       |//! See <https://github.com/rust-lang/rust/issues/79417> for more info.
    3|       |//!
    4|       |//! Just some random code:
    5|      1|//! ```
    6|      1|//! if true {
    7|       |//!     // this is executed!
    8|      1|//!     assert_eq!(1, 1);
    9|       |//! } else {
   10|       |//!     // this is not!
   11|      0|//!     assert_eq!(1, 2);
   12|       |//! }
   13|      1|//! ```
   14|       |//!
   15|       |//! doctest testing external code:
   16|       |//! ```
   17|      1|//! extern crate doctest_crate;
   18|      1|//! doctest_crate::fn_run_in_doctests(1);
   19|      1|//! ```
   20|       |//!
   21|       |//! doctest returning a result:
   22|      1|//! ```
   23|      2|//! #[derive(Debug, PartialEq)]
                       ^1
   24|      1|//! struct SomeError {
   25|      1|//!     msg: String,
   26|      1|//! }
   27|      1|//! let mut res = Err(SomeError { msg: String::from("a message") });
   28|      1|//! if res.is_ok() {
   29|      0|//!     res?;
   30|       |//! } else {
   31|      1|//!     if *res.as_ref().unwrap_err() == *res.as_ref().unwrap_err() {
   32|      1|//!         println!("{:?}", res);
   33|      1|//!     }
                   ^0
   34|      1|//!     if *res.as_ref().unwrap_err() == *res.as_ref().unwrap_err() {
   35|      1|//!         res = Ok(1);
   36|      1|//!     }
                   ^0
   37|      1|//!     res = Ok(0);
   38|       |//! }
   39|       |//! // need to be explicit because rustdoc cant infer the return type
   40|      1|//! Ok::<(), SomeError>(())
   41|      1|//! ```
   42|       |//!
   43|       |//! doctest with custom main:
   44|       |//! ```
   45|      1|//! fn some_func() {
   46|      1|//!     println!("called some_func()");
   47|      1|//! }
   48|       |//!
   49|      0|//! #[derive(Debug)]
   50|       |//! struct SomeError;
   51|       |//!
   52|       |//! extern crate doctest_crate;
   53|       |//!
   54|      1|//! fn doctest_main() -> Result<(), SomeError> {
   55|      1|//!     some_func();
   56|      1|//!     doctest_crate::fn_run_in_doctests(2);
   57|      1|//!     Ok(())
   58|      1|//! }
   59|       |//!
   60|       |//! // this `main` is not shown as covered, as it clashes with all the other
   61|       |//! // `main` functions that were automatically generated for doctests
   62|       |//! fn main() -> Result<(), SomeError> {
   63|       |//!     doctest_main()
   64|       |//! }
   65|       |//! ```
   66|       |
   67|       |/// doctest attached to fn testing external code:
   68|       |/// ```
   69|      1|/// extern crate doctest_crate;
   70|      1|/// doctest_crate::fn_run_in_doctests(3);
   71|      1|/// ```
   72|       |///
   73|      1|fn main() {
   74|      1|    if true {
   75|      1|        assert_eq!(1, 1);
   76|       |    } else {
   77|      0|        assert_eq!(1, 2);
   78|       |    }
   79|      1|}
   80|       |
   81|       |// FIXME(Swatinem): Fix known issue that coverage code region columns need to be offset by the
   82|       |// doc comment line prefix (`///` or `//!`) and any additional indent (before or after the doc
   83|       |// comment characters). This test produces `llvm-cov show` results demonstrating the problem.
   84|       |//
   85|       |// One of the above tests now includes: `derive(Debug, PartialEq)`, producing an `llvm-cov show`
   86|       |// result with a distinct count for `Debug`, denoted by `^1`, but the caret points to the wrong
   87|       |// column. Similarly, the `if` blocks without `else` blocks show `^0`, which should point at, or
   88|       |// one character past, the `if` block's closing brace. In both cases, these are most likely off
   89|       |// by the number of characters stripped from the beginning of each doc comment line: indent
   90|       |// whitespace, if any, doc comment prefix (`//!` in this case) and (I assume) one space character
   91|       |// (?). Note, when viewing `llvm-cov show` results in `--color` mode, the column offset errors are
   92|       |// more pronounced, and show up in more places, with background color used to show some distinct
   93|       |// code regions with different coverage counts.
   94|       |//
   95|       |// NOTE: Since the doc comment line prefix may vary, one possible solution is to replace each
   96|       |// character stripped from the beginning of doc comment lines with a space. This will give coverage
   97|       |// results the correct column offsets, and I think it should compile correctly, but I don't know
   98|       |// what affect it might have on diagnostic messages from the compiler, and whether anyone would care
   99|       |// if the indentation changed. I don't know if there is a more viable solution.

../coverage/lib/doctest_crate.rs:
    1|       |/// A function run only from within doctests
    2|      3|pub fn fn_run_in_doctests(conditional: usize) {
    3|      3|    match conditional {
    4|      1|        1 => assert_eq!(1, 1), // this is run,
    5|      1|        2 => assert_eq!(1, 1), // this,
    6|      1|        3 => assert_eq!(1, 1), // and this too
    7|      0|        _ => assert_eq!(1, 2), // however this is not
    8|       |    }
    9|      3|}