summaryrefslogtreecommitdiffstats
path: root/default-plugins/fixture-plugin-for-tests/src/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'default-plugins/fixture-plugin-for-tests/src/main.rs')
-rw-r--r--default-plugins/fixture-plugin-for-tests/src/main.rs78
1 files changed, 78 insertions, 0 deletions
diff --git a/default-plugins/fixture-plugin-for-tests/src/main.rs b/default-plugins/fixture-plugin-for-tests/src/main.rs
new file mode 100644
index 000000000..124b2dc75
--- /dev/null
+++ b/default-plugins/fixture-plugin-for-tests/src/main.rs
@@ -0,0 +1,78 @@
+use serde::{Deserialize, Serialize};
+use zellij_tile::prelude::*;
+
+// This is a fixture plugin used only for tests in Zellij
+// it is not (and should not!) be included in the mainline executable
+// it's included here for convenience so that it will be built by the CI
+
+#[derive(Default)]
+struct State {
+ received_events: Vec<Event>,
+ received_payload: Option<String>,
+}
+
+#[derive(Default, Serialize, Deserialize)]
+struct TestWorker {
+ number_of_messages_received: usize,
+}
+
+impl<'de> ZellijWorker<'de> for TestWorker {
+ fn on_message(&mut self, message: String, payload: String) {
+ if message == "ping" {
+ self.number_of_messages_received += 1;
+ post_message_to_plugin(
+ "pong".into(),
+ format!(
+ "{}, received {} messages",
+ payload, self.number_of_messages_received
+ ),
+ );
+ }
+ }
+}
+
+register_plugin!(State);
+register_worker!(TestWorker, test_worker);
+
+impl ZellijPlugin for State {
+ fn load(&mut self) {
+ subscribe(&[
+ EventType::InputReceived,
+ EventType::SystemClipboardFailure,
+ EventType::CustomMessage,
+ ]);
+ }
+
+ fn update(&mut self, event: Event) -> bool {
+ match &event {
+ Event::CustomMessage(message, payload) => {
+ if message == "pong" {
+ self.received_payload = Some(payload.clone());
+ }
+ },
+ Event::SystemClipboardFailure => {
+ // this is just to trigger the worker message
+ post_message_to(
+ "test",
+ "ping".to_owned(),
+ "gimme_back_my_payload".to_owned(),
+ );
+ },
+ _ => {},
+ }
+ let should_render = true;
+ self.received_events.push(event);
+ should_render
+ }
+
+ fn render(&mut self, rows: usize, cols: usize) {
+ if let Some(payload) = self.received_payload.as_ref() {
+ println!("Payload from worker: {:?}", payload);
+ } else {
+ println!(
+ "Rows: {:?}, Cols: {:?}, Received events: {:?}",
+ rows, cols, self.received_events
+ );
+ }
+ }
+}