cmake_parser/doc/command/ctest/
ctest_build.rs

1use cmake_parser_derive::CMake;
2
3use crate::{
4    doc::command_scope::{CommandScope, ToCommandScope},
5    Token,
6};
7
8/// Perform the CTest Build Step as a Dashboard Client.
9///
10/// Reference: <https://cmake.org/cmake/help/v3.26/command/ctest_build.html>
11#[derive(CMake, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
12#[cmake(pkg = "crate", allow_empty)]
13pub struct CTestBuild<'t> {
14    #[cmake(rename = "BUILD")]
15    pub build_dir: Option<Token<'t>>,
16    pub append: bool,
17    pub configuration: Option<Token<'t>>,
18    pub parallel_level: Option<Token<'t>>,
19    pub flags: Option<Vec<Token<'t>>>,
20    pub project_name: Option<Token<'t>>,
21    pub target: Option<Token<'t>>,
22    pub number_errors: Option<Token<'t>>,
23    pub number_warnings: Option<Token<'t>>,
24    pub return_value: Option<Token<'t>>,
25    pub quiet: bool,
26    pub capture_cmake_error: Option<Token<'t>>,
27}
28
29impl<'t> ToCommandScope for CTestBuild<'t> {
30    fn to_command_scope(&self) -> CommandScope {
31        CommandScope::CTest
32    }
33}
34
35#[cfg(test)]
36mod tests {
37    use super::*;
38    use crate::doc::cmake_parse::tests::token;
39    use crate::*;
40    use pretty_assertions::assert_eq;
41
42    #[test]
43    fn ctest_build() {
44        let src = include_bytes!("../../../../../fixture/commands/ctest/ctest_build");
45        let cmakelists = parse_cmakelists(src).unwrap();
46        let doc = Doc::from(cmakelists);
47        assert_eq!(
48            doc.commands(),
49            Ok(vec![
50                Command::CTestBuild(Box::new(CTestBuild {
51                    build_dir: None,
52                    append: false,
53                    configuration: None,
54                    parallel_level: None,
55                    flags: None,
56                    project_name: None,
57                    target: None,
58                    number_errors: None,
59                    number_warnings: None,
60                    return_value: None,
61                    quiet: false,
62                    capture_cmake_error: None
63                })),
64                Command::CTestBuild(Box::new(CTestBuild {
65                    build_dir: Some(token(b"build1")),
66                    append: true,
67                    configuration: Some(token(b"configuration1")),
68                    parallel_level: Some(token(b"parallel_level1")),
69                    flags: Some(vec![token(b"flags1")]),
70                    project_name: Some(token(b"project_name1")),
71                    target: Some(token(b"target1")),
72                    number_errors: Some(token(b"number_errors1")),
73                    number_warnings: Some(token(b"number_warnings1")),
74                    return_value: Some(token(b"return_value1")),
75                    quiet: true,
76                    capture_cmake_error: Some(token(b"capture_cmake_error1")),
77                })),
78            ])
79        )
80    }
81}