use super::runtime::{ComponentId, RuntimeHandle};
#[derive(Clone)]
pub struct Scope {
pub(crate) rt: RuntimeHandle,
pub(crate) component_id: ComponentId,
}
impl Scope {
pub fn new(rt: RuntimeHandle, component_id: ComponentId) -> Self {
Self { rt, component_id }
}
pub fn runtime(&self) -> RuntimeHandle {
self.rt.clone()
}
pub fn component_id(&self) -> ComponentId {
self.component_id
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_scope_creation() {
let rt = RuntimeHandle::new();
let component_id = rt.create_instance();
let scope = Scope::new(rt.clone(), component_id);
assert_eq!(scope.component_id(), component_id);
}
#[test]
fn test_scope_clone() {
let rt = RuntimeHandle::new();
let component_id = rt.create_instance();
let scope1 = Scope::new(rt.clone(), component_id);
let scope2 = scope1.clone();
assert_eq!(scope1.component_id(), scope2.component_id());
}
#[test]
fn test_scope_runtime_access() {
let rt = RuntimeHandle::new();
let component_id = rt.create_instance();
let scope = Scope::new(rt.clone(), component_id);
let signal_id = scope.runtime().create_signal(42i32);
assert_eq!(rt.get_signal::<i32>(signal_id), 42);
}
}