diff --git a/core/java/test/junit/net/i2p/TestContext.java b/core/java/test/junit/net/i2p/TestContext.java new file mode 100644 index 0000000000000000000000000000000000000000..a81bd40fb51cbf8e9ec20dae61b913a105950cb5 --- /dev/null +++ b/core/java/test/junit/net/i2p/TestContext.java @@ -0,0 +1,17 @@ +package net.i2p; + +public class TestContext extends I2PAppContext { + + public TestContext() { + TestContext.setGlobalContext(this); + } + + /** + * Allows overriding the existing I2PAppContext with a test context who's fields we may mock as we like + * + * @param ctx Our test context to replace the global context with + */ + public static void setGlobalContext(TestContext ctx){ + _globalAppContext = ctx; + } +} diff --git a/core/java/test/junit/net/i2p/util/ConvertToHashMockTest.java b/core/java/test/junit/net/i2p/util/ConvertToHashMockTest.java new file mode 100644 index 0000000000000000000000000000000000000000..de811acd1c468742d3963c4e217772ac98982823 --- /dev/null +++ b/core/java/test/junit/net/i2p/util/ConvertToHashMockTest.java @@ -0,0 +1,51 @@ +package net.i2p.util; + +import net.i2p.TestContext; +import net.i2p.client.naming.NamingService; +import net.i2p.data.Destination; +import net.i2p.data.Hash; +import org.junit.AfterClass; +import org.junit.Before; + +import org.junit.Test; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; + +import static org.mockito.Mockito.*; +import static org.junit.Assert.*; + +public class ConvertToHashMockTest{ + + @Mock private NamingService namingService; + @Mock private Destination destination; + @Mock private Hash hash; + + @InjectMocks TestContext testContext; + + @Before + public void before() { + MockitoAnnotations.initMocks(this); + } + + /** + * Reset the global context after all tests in the class are done. + * + * We would otherwise pollute the other tests that depend on I2PAppContext + */ + @AfterClass + public static void afterClass(){ + TestContext.setGlobalContext(null); + } + + @Test + public void testMockedDestination() { + when(namingService.lookup("zzz.i2p")).thenReturn(destination); + when(destination.calculateHash()).thenReturn(hash); + + assertSame(hash, ConvertToHash.getHash("zzz.i2p")); + + verify(namingService).lookup("zzz.i2p"); + verify(destination).calculateHash(); + } +}