]> source.dussan.org Git - pf4j.git/commitdiff
Fix #590
authorDecebal Suiu <decebal.suiu@gmail.com>
Sat, 12 Oct 2024 15:45:35 +0000 (18:45 +0300)
committerDecebal Suiu <decebal.suiu@gmail.com>
Sat, 12 Oct 2024 15:45:35 +0000 (18:45 +0300)
pf4j/src/main/java/org/pf4j/AbstractPluginManager.java
pf4j/src/main/java/org/pf4j/PluginStateEvent.java
pf4j/src/test/java/org/pf4j/AbstractPluginManagerTest.java

index f576210b071d2d174b4acfc89392a6752e45dd1d..626dbcb6b4b2c153e62cba81d54554faf743176e 100644 (file)
@@ -516,7 +516,7 @@ public abstract class AbstractPluginManager implements PluginManager {
         pluginWrapper.setPluginState(PluginState.STOPPED);
         getStartedPlugins().remove(pluginWrapper);
 
-        firePluginStateEvent(new PluginStateEvent(this, pluginWrapper, PluginState.STOPPED));
+        firePluginStateEvent(new PluginStateEvent(this, pluginWrapper, PluginState.STARTED));
 
         return PluginState.STOPPED;
     }
index 8793abe9c10cd85b388db8cbeac4e81e879dfed7..efcc66ac2e4b74228cf57f08a742ff8551862307 100644 (file)
@@ -16,6 +16,7 @@
 package org.pf4j;
 
 import java.util.EventObject;
+import java.util.Objects;
 
 /**
  * Event object that indicates a change in the state of a plugin.
@@ -83,4 +84,17 @@ public class PluginStateEvent extends EventObject {
                 ']';
     }
 
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+        PluginStateEvent that = (PluginStateEvent) o;
+        return Objects.equals(plugin, that.plugin) && oldState == that.oldState;
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(plugin, oldState);
+    }
+
 }
index 88be865b0d0b15329370959610319c5cb1836b4f..e67e081106735e99266c488e3a18535ddf08b994 100644 (file)
@@ -138,6 +138,25 @@ public class AbstractPluginManagerTest {
         verify(pluginManager, times(1)).resolveDependencies();
     }
 
+    @Test
+    void stopPluginFirePluginStateListeners() {
+        PluginStateListener pluginStateListener = mock(PluginStateListener.class);
+        pluginManager.addPluginStateListener(pluginStateListener);
+
+        String pluginId = "plugin1";
+        PluginWrapper pluginWrapper = createPluginWrapper(pluginId);
+        pluginWrapper.setPluginState(PluginState.STARTED);
+
+        doReturn(pluginWrapper).when(pluginManager).getPlugin(pluginId);
+        doNothing().when(pluginManager).checkPluginId(pluginId);
+        doReturn(new ArrayList<>(Arrays.asList(pluginWrapper))).when(pluginManager).getStartedPlugins();
+
+        pluginManager.stopPlugin(pluginId, false);
+
+        PluginStateEvent event = new PluginStateEvent(pluginManager, pluginWrapper, PluginState.STARTED);
+        verify(pluginStateListener).pluginStateChanged(event);
+    }
+
     private PluginWrapper createPluginWrapper(String pluginId, String... dependencies) {
         PluginDescriptor pluginDescriptor = new DefaultPluginDescriptor()
             .setPluginId(pluginId)