diff --git a/.classpath b/.classpath
index 6b9b5d96..feb78b0c 100755
--- a/.classpath
+++ b/.classpath
@@ -1,6 +1,7 @@
+
@@ -14,5 +15,7 @@
+
+
diff --git a/src/net/azib/ipscan/core/state/ScanningState.java b/src/net/azib/ipscan/core/state/ScanningState.java
index 0aa254a6..ce6b7bd8 100644
--- a/src/net/azib/ipscan/core/state/ScanningState.java
+++ b/src/net/azib/ipscan/core/state/ScanningState.java
@@ -35,6 +35,10 @@ public enum ScanningState {
listeners.add(listener);
}
+ public void clearListeners() {
+ listeners.clear();
+ }
+
/**
* Notifies all registered listeners of the transition to this state.
*/
diff --git a/src/net/azib/ipscan/core/state/StateMachine.java b/src/net/azib/ipscan/core/state/StateMachine.java
index ab64d9ec..09f40203 100644
--- a/src/net/azib/ipscan/core/state/StateMachine.java
+++ b/src/net/azib/ipscan/core/state/StateMachine.java
@@ -42,8 +42,10 @@ public class StateMachine {
* @param newState
*/
public void transitionTo(ScanningState newState) {
- state = newState;
- state.notifyOnEntry();
+ if (state != newState) {
+ state = newState;
+ state.notifyOnEntry();
+ }
}
/**
diff --git a/test/net/azib/ipscan/core/state/StateMachineTest.java b/test/net/azib/ipscan/core/state/StateMachineTest.java
new file mode 100644
index 00000000..e57ac124
--- /dev/null
+++ b/test/net/azib/ipscan/core/state/StateMachineTest.java
@@ -0,0 +1,90 @@
+/**
+ * This file is a part of Angry IP Scanner source code,
+ * see http://www.azib.net/ for more information.
+ * Licensed under GPLv2.
+ */
+package net.azib.ipscan.core.state;
+
+import static org.junit.Assert.*;
+
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * StateMachineTest
+ *
+ * @author Anton Keks
+ */
+public class StateMachineTest {
+
+ private StateMachine stateMachine;
+
+ @Before
+ public void createStateMachine() {
+ stateMachine = new StateMachine();
+ }
+
+ @Test
+ public void inState() throws Exception {
+ assertTrue(stateMachine.inState(ScanningState.IDLE));
+ assertFalse(stateMachine.inState(ScanningState.KILLING));
+ stateMachine.transitionTo(ScanningState.KILLING);
+ assertTrue(stateMachine.inState(ScanningState.KILLING));
+ }
+
+ @Test
+ public void transitionTo() throws Exception {
+ final boolean[] called = {false};
+ ScanningState.IDLE.addTransitionListener(new StateTransitionListener() {
+ public void transitionTo(ScanningState state) {
+ fail("no transition if changing to the same state");
+ }
+ });
+ ScanningState.STOPPING.addTransitionListener(new StateTransitionListener() {
+ public void transitionTo(ScanningState state) {
+ called[0] = true;
+ }
+ });
+
+ assertEquals(ScanningState.IDLE, stateMachine.getState());
+ stateMachine.transitionTo(ScanningState.IDLE);
+ assertEquals(ScanningState.IDLE, stateMachine.getState());
+ stateMachine.transitionTo(ScanningState.STOPPING);
+ assertEquals(ScanningState.STOPPING, stateMachine.getState());
+ assertTrue(called[0]);
+
+ ScanningState.IDLE.clearListeners();
+ ScanningState.STOPPING.clearListeners();
+ }
+
+ @Test
+ public void transitionToNext() throws Exception {
+ assertEquals(ScanningState.IDLE, stateMachine.getState());
+ stateMachine.transitionToNext();
+ assertEquals(ScanningState.SCANNING, stateMachine.getState());
+ stateMachine.transitionToNext();
+ assertEquals(ScanningState.STOPPING, stateMachine.getState());
+ stateMachine.transitionToNext();
+ assertEquals(ScanningState.KILLING, stateMachine.getState());
+ stateMachine.transitionToNext();
+ assertEquals(ScanningState.KILLING, stateMachine.getState());
+ }
+
+ @Test
+ public void stop() throws Exception {
+ stateMachine.transitionTo(ScanningState.SCANNING);
+ stateMachine.stop();
+ assertEquals(ScanningState.STOPPING, stateMachine.getState());
+ }
+
+ @Test
+ public void complete() throws Exception {
+ stateMachine.transitionTo(ScanningState.STOPPING);
+ stateMachine.complete();
+ assertEquals(ScanningState.IDLE, stateMachine.getState());
+
+ stateMachine.transitionTo(ScanningState.KILLING);
+ stateMachine.complete();
+ assertEquals(ScanningState.IDLE, stateMachine.getState());
+ }
+}
diff --git a/test/net/azib/ipscan/core/values/NumericListValueTest.java b/test/net/azib/ipscan/core/values/NumericListValueTest.java
index 260a06b2..59bd486e 100755
--- a/test/net/azib/ipscan/core/values/NumericListValueTest.java
+++ b/test/net/azib/ipscan/core/values/NumericListValueTest.java
@@ -19,12 +19,12 @@ public class NumericListValueTest {
@Test
public void testToString() {
- assertEquals("", new NumericListValue(Collections.EMPTY_LIST, true).toString());
- assertEquals("1", new NumericListValue(Arrays.asList(new Object[] {1}), true).toString());
- assertEquals("1-3", new NumericListValue(Arrays.asList(new Object[] {1, 2, 3}), true).toString());
- assertEquals("1-3", new NumericListValue(new TreeSet(Arrays.asList(new Integer[] {2, 3, 1})), true).toString());
- assertEquals("1,2,3", new NumericListValue(Arrays.asList(new Object[] {1, 2, 3}), false).toString());
- assertEquals("1,5-6,15", new NumericListValue(Arrays.asList(new Object[] {1, 5, 6, 15}), true).toString());
- assertEquals("103,85,89,1", new NumericListValue(Arrays.asList(new Object[] {103, 85, 89, 1}), true).toString());
+ assertEquals("", new NumericListValue(Collections.emptyList(), true).toString());
+ assertEquals("1", new NumericListValue(Arrays.asList(1), true).toString());
+ assertEquals("1-3", new NumericListValue(Arrays.asList(1, 2, 3), true).toString());
+ assertEquals("1-3", new NumericListValue(new TreeSet(Arrays.asList(2, 3, 1)), true).toString());
+ assertEquals("1,2,3", new NumericListValue(Arrays.asList(1, 2, 3), false).toString());
+ assertEquals("1,5-6,15", new NumericListValue(Arrays.asList(1, 5, 6, 15), true).toString());
+ assertEquals("103,85,89,1", new NumericListValue(Arrays.asList(103, 85, 89, 1), true).toString());
}
}
diff --git a/test/net/azib/ipscan/exporters/ExportProcessorTest.java b/test/net/azib/ipscan/exporters/ExportProcessorTest.java
index f4487a47..2f491437 100755
--- a/test/net/azib/ipscan/exporters/ExportProcessorTest.java
+++ b/test/net/azib/ipscan/exporters/ExportProcessorTest.java
@@ -21,6 +21,7 @@ import net.azib.ipscan.config.Labels;
import net.azib.ipscan.core.ScanningResult;
import net.azib.ipscan.core.ScanningResultList;
import net.azib.ipscan.exporters.ExportProcessor.ScanningResultSelector;
+import net.azib.ipscan.fetchers.Fetcher;
import net.azib.ipscan.fetchers.FetcherRegistry;
import net.azib.ipscan.fetchers.IPFetcher;
@@ -41,7 +42,7 @@ public class ExportProcessorTest {
public void setUp() {
fetcherRegistry = createMock(FetcherRegistry.class);
expect(fetcherRegistry.getSelectedFetchers())
- .andReturn(Collections.singletonList(new IPFetcher())).anyTimes();
+ .andReturn(Collections.singletonList(new IPFetcher())).anyTimes();
replay(fetcherRegistry);
}