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