cmake_parser/doc/command/ctest/
ctest_memcheck.rs

1use cmake_parser_derive::CMake;
2
3use crate::{
4    command::common::ScheduleRandom,
5    doc::command_scope::{CommandScope, ToCommandScope},
6    Token,
7};
8
9/// Perform the CTest MemCheck Step as a Dashboard Client.
10///
11/// Reference: <https://cmake.org/cmake/help/v3.26/command/ctest_memcheck.html>
12#[derive(CMake, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
13#[cmake(pkg = "crate", allow_empty)]
14pub struct CTestMemCheck<'t> {
15    #[cmake(rename = "BUILD")]
16    pub build_dir: Option<Token<'t>>,
17    pub append: bool,
18    pub start: Option<Token<'t>>,
19    pub end: Option<Token<'t>>,
20    pub stride: Option<Token<'t>>,
21    pub exclude: Option<Token<'t>>,
22    pub include: Option<Token<'t>>,
23    pub exclude_label: Option<Token<'t>>,
24    pub include_label: Option<Token<'t>>,
25    pub exclude_fixture: Option<Token<'t>>,
26    pub exclude_fixture_setup: Option<Token<'t>>,
27    pub exclude_fixture_cleanup: Option<Token<'t>>,
28    pub parallel_level: Option<Token<'t>>,
29    pub resource_spec_file: Option<Token<'t>>,
30    pub test_load: Option<Token<'t>>,
31    pub schedule_random: Option<ScheduleRandom>,
32    pub stop_on_failure: bool,
33    pub stop_time: Option<Token<'t>>,
34    pub return_value: Option<Token<'t>>,
35    pub capture_cmake_error: Option<Token<'t>>,
36    pub repeat: Option<Token<'t>>,
37    pub output_junit: Option<Token<'t>>,
38    pub defect_count: Option<Token<'t>>,
39    pub quiet: bool,
40}
41
42impl<'t> ToCommandScope for CTestMemCheck<'t> {
43    fn to_command_scope(&self) -> CommandScope {
44        CommandScope::CTest
45    }
46}
47
48#[cfg(test)]
49mod tests {
50    use super::*;
51    use crate::doc::cmake_parse::tests::token;
52    use crate::*;
53    use pretty_assertions::assert_eq;
54
55    #[test]
56    fn ctest_memcheck() {
57        let src = include_bytes!("../../../../../fixture/commands/ctest/ctest_memcheck");
58        let cmakelists = parse_cmakelists(src).unwrap();
59        let doc = Doc::from(cmakelists);
60        assert_eq!(
61            doc.commands(),
62            Ok(vec![
63                Command::CTestMemCheck(Box::new(CTestMemCheck {
64                    build_dir: None,
65                    append: false,
66                    start: None,
67                    end: None,
68                    stride: None,
69                    exclude: None,
70                    include: None,
71                    exclude_label: None,
72                    include_label: None,
73                    exclude_fixture: None,
74                    exclude_fixture_setup: None,
75                    exclude_fixture_cleanup: None,
76                    parallel_level: None,
77                    resource_spec_file: None,
78                    test_load: None,
79                    schedule_random: None,
80                    stop_on_failure: false,
81                    stop_time: None,
82                    return_value: None,
83                    capture_cmake_error: None,
84                    repeat: None,
85                    output_junit: None,
86                    defect_count: None,
87                    quiet: false,
88                })),
89                Command::CTestMemCheck(Box::new(CTestMemCheck {
90                    build_dir: Some(token(b"build1")),
91                    append: true,
92                    start: Some(token(b"start1")),
93                    end: Some(token(b"end1")),
94                    stride: Some(token(b"stride1")),
95                    exclude: Some(token(b"exclude1")),
96                    include: Some(token(b"include1")),
97                    exclude_label: Some(token(b"exclude_label1")),
98                    include_label: Some(token(b"include_label1")),
99                    exclude_fixture: Some(token(b"exclude_fixture1")),
100                    exclude_fixture_setup: Some(token(b"exclude_fixture_setup1")),
101                    exclude_fixture_cleanup: Some(token(b"exclude_fixture_cleanup1")),
102                    parallel_level: Some(token(b"parallel_level1")),
103                    resource_spec_file: Some(token(b"resource_spec_file1")),
104                    test_load: Some(token(b"test_load1")),
105                    schedule_random: Some(ScheduleRandom::Off),
106                    stop_on_failure: true,
107                    stop_time: Some(token(b"stop_time1")),
108                    return_value: Some(token(b"return_value1")),
109                    capture_cmake_error: Some(token(b"capture_cmake_error1")),
110                    repeat: Some(token(b"repeat1")),
111                    output_junit: Some(token(b"output_junit1")),
112                    defect_count: Some(token(b"defect_count1")),
113                    quiet: true,
114                })),
115            ])
116        )
117    }
118}