133d722a9Sopenharmony_ci#![allow(clippy::field_reassign_with_default)] 233d722a9Sopenharmony_ci 333d722a9Sopenharmony_ciuse cxx_gen::{generate_header_and_cc, Opt}; 433d722a9Sopenharmony_ciuse std::str; 533d722a9Sopenharmony_ci 633d722a9Sopenharmony_ciconst BRIDGE0: &str = r#" 733d722a9Sopenharmony_ci #[cxx::bridge] 833d722a9Sopenharmony_ci mod ffi { 933d722a9Sopenharmony_ci unsafe extern "C++" { 1033d722a9Sopenharmony_ci pub fn do_cpp_thing(foo: &str); 1133d722a9Sopenharmony_ci } 1233d722a9Sopenharmony_ci } 1333d722a9Sopenharmony_ci"#; 1433d722a9Sopenharmony_ci 1533d722a9Sopenharmony_ci#[test] 1633d722a9Sopenharmony_cifn test_extern_c_function() { 1733d722a9Sopenharmony_ci let opt = Opt::default(); 1833d722a9Sopenharmony_ci let source = BRIDGE0.parse().unwrap(); 1933d722a9Sopenharmony_ci let generated = generate_header_and_cc(source, &opt).unwrap(); 2033d722a9Sopenharmony_ci let output = str::from_utf8(&generated.implementation).unwrap(); 2133d722a9Sopenharmony_ci // To avoid continual breakage we won't test every byte. 2233d722a9Sopenharmony_ci // Let's look for the major features. 2333d722a9Sopenharmony_ci assert!(output.contains("void cxxbridge1$do_cpp_thing(::rust::Str foo)")); 2433d722a9Sopenharmony_ci} 2533d722a9Sopenharmony_ci 2633d722a9Sopenharmony_ci#[test] 2733d722a9Sopenharmony_cifn test_impl_annotation() { 2833d722a9Sopenharmony_ci let mut opt = Opt::default(); 2933d722a9Sopenharmony_ci opt.cxx_impl_annotations = Some("ANNOTATION".to_owned()); 3033d722a9Sopenharmony_ci let source = BRIDGE0.parse().unwrap(); 3133d722a9Sopenharmony_ci let generated = generate_header_and_cc(source, &opt).unwrap(); 3233d722a9Sopenharmony_ci let output = str::from_utf8(&generated.implementation).unwrap(); 3333d722a9Sopenharmony_ci assert!(output.contains("ANNOTATION void cxxbridge1$do_cpp_thing(::rust::Str foo)")); 3433d722a9Sopenharmony_ci} 35