Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ra-salsa/tests/dyn_trait.rs')
-rw-r--r--crates/ra-salsa/tests/dyn_trait.rs28
1 files changed, 28 insertions, 0 deletions
diff --git a/crates/ra-salsa/tests/dyn_trait.rs b/crates/ra-salsa/tests/dyn_trait.rs
new file mode 100644
index 0000000000..6075ae5c11
--- /dev/null
+++ b/crates/ra-salsa/tests/dyn_trait.rs
@@ -0,0 +1,28 @@
+//! Test that you can implement a query using a `dyn Trait` setup.
+
+#[ra_salsa::database(DynTraitStorage)]
+#[derive(Default)]
+struct DynTraitDatabase {
+ storage: ra_salsa::Storage<Self>,
+}
+
+impl ra_salsa::Database for DynTraitDatabase {}
+
+#[ra_salsa::query_group(DynTraitStorage)]
+trait DynTrait {
+ #[ra_salsa::input]
+ fn input(&self, x: u32) -> u32;
+
+ fn output(&self, x: u32) -> u32;
+}
+
+fn output(db: &dyn DynTrait, x: u32) -> u32 {
+ db.input(x) * 2
+}
+
+#[test]
+fn dyn_trait() {
+ let mut query = DynTraitDatabase::default();
+ query.set_input(22, 23);
+ assert_eq!(query.output(22), 46);
+}