about summary refs log blame commit diff
path: root/tvix/eval/builtin-macros/tests/tests.rs
blob: 4713743e52958a9d2bc9895ac19dd4c971d46cb7 (plain) (tree)
1
2
3
4
5
6
7
8
                                    

                                       

              
                                            
                                      
 


                              
                          
                                                                                    
             


                         
                                                                                             
                                                 






                                        
 









                                               

                         




                                                 
 
pub use tvix_eval::{Builtin, Value};
use tvix_eval_builtin_macros::builtins;

#[builtins]
mod builtins {
    use tvix_eval::generators::{Gen, GenCo};
    use tvix_eval::{ErrorKind, Value};

    /// Test docstring.
    ///
    /// It has multiple lines!
    #[builtin("identity")]
    pub async fn builtin_identity(co: GenCo, x: Value) -> Result<Value, ErrorKind> {
        Ok(x)
    }

    #[builtin("tryEval")]
    pub async fn builtin_try_eval(co: GenCo, #[lazy] _x: Value) -> Result<Value, ErrorKind> {
        unimplemented!("builtin is never called")
    }
}

#[test]
fn builtins() {
    let builtins = builtins::builtins();
    assert_eq!(builtins.len(), 2);

    let (_, identity) = builtins
        .iter()
        .find(|(name, _)| *name == "identity")
        .unwrap();

    match identity {
        Value::Builtin(identity) => assert_eq!(
            identity.documentation(),
            Some(
                r#" Test docstring.

 It has multiple lines!"#
            )
        ),

        _ => panic!("builtin was not a builtin"),
    }
}