cmake_parser/doc/command/ctest/
ctest_sleep.rs

1use cmake_parser_derive::CMake;
2
3use crate::{
4    doc::command_scope::{CommandScope, ToCommandScope},
5    Token,
6};
7
8/// Sleeps for some amount of time
9///
10/// Reference: <https://cmake.org/cmake/help/v3.26/command/ctest_sleep.html>
11#[derive(CMake, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
12#[cmake(pkg = "crate", untagged)]
13pub enum CTestSleep<'t> {
14    Time(CTestSleepTime<'t>),
15    Seconds(CTestSleepSeconds<'t>),
16}
17
18impl<'t> ToCommandScope for CTestSleep<'t> {
19    fn to_command_scope(&self) -> CommandScope {
20        CommandScope::CTest
21    }
22}
23
24#[derive(CMake, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
25#[cmake(pkg = "crate", positional)]
26pub struct CTestSleepTime<'t> {
27    pub time1: Token<'t>,
28    pub duration: Token<'t>,
29    pub time2: Token<'t>,
30}
31
32#[derive(CMake, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
33#[cmake(pkg = "crate", positional)]
34pub struct CTestSleepSeconds<'t> {
35    pub seconds: Token<'t>,
36}
37
38#[cfg(test)]
39mod tests {
40    use super::*;
41    use crate::doc::cmake_parse::tests::token;
42    use crate::*;
43    use pretty_assertions::assert_eq;
44
45    #[test]
46    fn ctest_sleep() {
47        let src = include_bytes!("../../../../../fixture/commands/ctest/ctest_sleep");
48        let cmakelists = parse_cmakelists(src).unwrap();
49        let doc = Doc::from(cmakelists);
50        assert_eq!(
51            doc.commands(),
52            Ok(vec![
53                Command::CTestSleep(Box::new(CTestSleep::Seconds(CTestSleepSeconds {
54                    seconds: token(b"100"),
55                }))),
56                Command::CTestSleep(Box::new(CTestSleep::Time(CTestSleepTime {
57                    time1: token(b"100"),
58                    duration: token(b"200"),
59                    time2: token(b"300"),
60                }))),
61            ])
62        )
63    }
64}