cmake_parser/doc/command/ctest/
ctest_submit.rs

1use cmake_parser_derive::CMake;
2
3use crate::{
4    doc::command_scope::{CommandScope, ToCommandScope},
5    Token,
6};
7
8/// Perform the CTest Submit Step as a Dashboard Client.
9///
10/// Reference: <https://cmake.org/cmake/help/v3.26/command/ctest_submit.html>
11#[derive(CMake, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
12#[cmake(pkg = "crate", untagged)]
13pub enum CTestSubmit<'t> {
14    #[cmake(rename = "CDASH_UPLOAD", transparent)]
15    CDashUpload(CDashUpload<'t>),
16    Dashboard(CTestSubmitDashboard<'t>),
17}
18
19impl<'t> ToCommandScope for CTestSubmit<'t> {
20    fn to_command_scope(&self) -> CommandScope {
21        CommandScope::CTest
22    }
23}
24
25#[derive(CMake, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
26#[cmake(pkg = "crate", allow_empty)]
27pub struct CTestSubmitDashboard<'t> {
28    pub parts: Option<Vec<Token<'t>>>,
29    pub files: Option<Vec<Token<'t>>>,
30    pub submit_url: Option<Token<'t>>,
31    pub build_id: Option<Token<'t>>,
32    pub httpheader: Option<Token<'t>>,
33    pub retry_count: Option<Token<'t>>,
34    pub retry_delay: Option<Token<'t>>,
35    pub return_value: Option<Token<'t>>,
36    pub capture_cmake_error: Option<Token<'t>>,
37    pub quiet: bool,
38}
39
40#[derive(CMake, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
41#[cmake(pkg = "crate")]
42pub struct CDashUpload<'t> {
43    #[cmake(positional)]
44    pub file: Token<'t>,
45    pub cdash_upload_type: Option<Token<'t>>,
46    pub submit_url: Option<Token<'t>>,
47    pub build_id: Option<Token<'t>>,
48    pub httpheader: Option<Token<'t>>,
49    pub retry_count: Option<Token<'t>>,
50    pub retry_delay: Option<Token<'t>>,
51    pub return_value: Option<Token<'t>>,
52    pub quiet: bool,
53}
54
55#[cfg(test)]
56mod tests {
57    use super::*;
58    use crate::doc::cmake_parse::tests::{token, tokens_vec};
59    use crate::*;
60    use pretty_assertions::assert_eq;
61
62    #[test]
63    fn ctest_submit() {
64        let src = include_bytes!("../../../../../fixture/commands/ctest/ctest_submit");
65        let cmakelists = parse_cmakelists(src).unwrap();
66        let doc = Doc::from(cmakelists);
67        assert_eq!(
68            doc.commands(),
69            Ok(vec![
70                Command::CTestSubmit(Box::new(CTestSubmit::Dashboard(CTestSubmitDashboard {
71                    parts: None,
72                    files: None,
73                    submit_url: None,
74                    build_id: None,
75                    httpheader: None,
76                    retry_count: None,
77                    retry_delay: None,
78                    return_value: None,
79                    capture_cmake_error: None,
80                    quiet: false,
81                }))),
82                Command::CTestSubmit(Box::new(CTestSubmit::Dashboard(CTestSubmitDashboard {
83                    parts: Some(tokens_vec([b"part1", b"part2", b"part3"])),
84                    files: Some(tokens_vec([b"file1", b"file2"])),
85                    submit_url: Some(token(b"submit_url1")),
86                    build_id: Some(token(b"build_id1")),
87                    httpheader: Some(token(b"httpheader1")),
88                    retry_count: Some(token(b"retry_count1")),
89                    retry_delay: Some(token(b"retry_delay1")),
90                    return_value: Some(token(b"return_value1")),
91                    capture_cmake_error: Some(token(b"capture_cmake_error1")),
92                    quiet: true,
93                }))),
94                Command::CTestSubmit(Box::new(CTestSubmit::CDashUpload(CDashUpload {
95                    file: token(b"file1"),
96                    cdash_upload_type: Some(token(b"cdash_upload_type1")),
97                    submit_url: Some(token(b"submit_url1")),
98                    build_id: Some(token(b"build_id1")),
99                    httpheader: Some(token(b"httpheader1")),
100                    retry_count: Some(token(b"retry_count1")),
101                    retry_delay: Some(token(b"retry_delay1")),
102                    return_value: Some(token(b"return_value1")),
103                    quiet: true,
104                }))),
105            ])
106        )
107    }
108}