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