use crate::core::config::TraitBridgeConfig;
use crate::core::ir::{MethodDef, ReceiverKind, TypeRef};
use crate::e2e::fixture::Fixture;
fn initialize_method() -> MethodDef {
MethodDef {
name: "initialize".to_string(),
params: vec![],
return_type: TypeRef::Unit,
is_async: false,
is_static: false,
error_type: None,
doc: String::new(),
receiver: Some(ReceiverKind::Ref),
cfg: None,
sanitized: false,
trait_source: Some("Plugin".to_string()),
returns_ref: false,
returns_cow: false,
return_newtype_wrapper: None,
has_default_impl: false,
binding_excluded: false,
binding_exclusion_reason: None,
version: Default::default(),
}
}
#[test]
fn stub_class_declaration_has_no_explicit_accessibility_modifier() {
let method = initialize_method();
let bridge = TraitBridgeConfig {
trait_name: "SampleBackend".to_string(),
super_trait: Some("Plugin".to_string()),
..Default::default()
};
let fixture = Fixture {
id: "register_sample_backend".to_string(),
description: "Register a sample backend".to_string(),
input: serde_json::json!({ "name": "sample" }),
..Fixture::default()
};
let emission = super::emit_test_backend(&bridge, &[&method], &fixture);
assert!(
!emission.setup_block.contains("private"),
"stub class declaration must not carry an explicit accessibility modifier \
(CS1527 at file scope): {}",
emission.setup_block
);
assert!(
emission
.setup_block
.contains("class TestStub_RegisterSampleBackend : ISampleBackend"),
"{}",
emission.setup_block
);
}