// License: GPL. For details, see LICENSE file.
package org.openstreetmap.josm.tools;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.io.File;
import java.io.IOException;
import java.security.KeyStore;
import java.security.KeyStore.TrustedCertificateEntry;
import java.security.KeyStoreException;
import java.util.Collection;
import org.junit.BeforeClass;
import org.junit.Test;
import org.openstreetmap.josm.JOSMFixture;
import org.openstreetmap.josm.Main;
import org.openstreetmap.josm.io.remotecontrol.RemoteControlHttpsServer;
import org.openstreetmap.josm.io.remotecontrol.RemoteControlTest;
/**
* Unit tests of {@link PlatformHookWindows} class.
*/
public class PlatformHookWindowsTest {
static PlatformHookWindows hook;
/**
* Setup test.
*/
@BeforeClass
public static void setUp() {
JOSMFixture.createUnitTestFixture().init();
hook = new PlatformHookWindows();
}
/**
* Test method for {@code PlatformHookWindows#startupHook}
*/
@Test
public void testStartupHook() {
hook.startupHook();
}
/**
* Test method for {@code PlatformHookWindows#getRootKeystore}
* @throws Exception if an error occurs
*/
@Test
public void testGetRootKeystore() throws Exception {
if (Main.isPlatformWindows()) {
assertNotNull(PlatformHookWindows.getRootKeystore());
} else {
try {
PlatformHookWindows.getRootKeystore();
fail("Expected KeyStoreException");
} catch (KeyStoreException e) {
Main.info(e.getMessage());
}
}
}
/**
* Test method for {@code PlatformHookWindows#removeInsecureCertificates}
* @throws Exception if an error occurs
*/
@Test
public void testRemoveInsecureCertificates() throws Exception {
if (Main.isPlatformWindows()) {
PlatformHookWindows.removeInsecureCertificates();
} else {
try {
PlatformHookWindows.removeInsecureCertificates();
fail("Expected KeyStoreException");
} catch (KeyStoreException e) {
Main.info(e.getMessage());
}
}
}
/**
* Test method for {@code PlatformHookWindows#setupHttpsCertificate}
* @throws Exception if an error occurs
*/
@Test
public void testSetupHttpsCertificate() throws Exception {
RemoteControlTest.deleteKeystore();
KeyStore ks = RemoteControlHttpsServer.loadJosmKeystore();
TrustedCertificateEntry trustedCert = new KeyStore.TrustedCertificateEntry(ks.getCertificate(ks.aliases().nextElement()));
if (Main.isPlatformWindows()) {
hook.setupHttpsCertificate(RemoteControlHttpsServer.ENTRY_ALIAS, trustedCert);
} else {
try {
hook.setupHttpsCertificate(RemoteControlHttpsServer.ENTRY_ALIAS, trustedCert);
fail("Expected KeyStoreException");
} catch (KeyStoreException e) {
Main.info(e.getMessage());
}
}
}
/**
* Test method for {@code PlatformHookWindows#afterPrefStartupHook}
*/
@Test
public void testAfterPrefStartupHook() {
hook.afterPrefStartupHook();
}
/**
* Test method for {@code PlatformHookWindows#openUrl}
* @throws IOException if an error occurs
*/
@Test
public void testOpenUrl() throws IOException {
if (Main.isPlatformWindows()) {
hook.openUrl(Main.getJOSMWebsite());
} else {
try {
hook.openUrl(Main.getJOSMWebsite());
fail("Expected IOException");
} catch (IOException e) {
Main.info(e.getMessage());
}
}
}
/**
* Test method for {@code PlatformHookWindows#getAdditionalFonts}
*/
@Test
public void testGetAdditionalFonts() {
assertFalse(hook.getAdditionalFonts().isEmpty());
}
/**
* Test method for {@code PlatformHookWindows#getDefaultCacheDirectory}
*/
@Test
public void testGetDefaultCacheDirectory() {
File cache = hook.getDefaultCacheDirectory();
assertNotNull(cache);
if (Main.isPlatformWindows()) {
assertTrue(cache.toString().contains(":"));
}
}
/**
* Test method for {@code PlatformHookWindows#getDefaultPrefDirectory}
*/
@Test
public void testGetDefaultPrefDirectory() {
File cache = hook.getDefaultPrefDirectory();
assertNotNull(cache);
if (Main.isPlatformWindows()) {
assertTrue(cache.toString().contains(":"));
}
}
/**
* Test method for {@code PlatformHookWindows#getDefaultStyle}
*/
@Test
public void testGetDefaultStyle() {
assertEquals("com.sun.java.swing.plaf.windows.WindowsLookAndFeel", hook.getDefaultStyle());
}
/**
* Test method for {@code PlatformHookWindows#getInstalledFonts}
*/
@Test
public void testGetInstalledFonts() {
Collection<String> fonts = hook.getInstalledFonts();
if (Main.isPlatformWindows()) {
assertFalse(fonts.isEmpty());
} else {
assertNull(fonts);
}
}
/**
* Test method for {@code PlatformHookWindows#getOSDescription}
*/
@Test
public void testGetOSDescription() {
String os = hook.getOSDescription();
if (Main.isPlatformWindows()) {
assertTrue(os.contains("Windows"));
} else {
assertFalse(os.contains("Windows"));
}
}
/**
* Test method for {@code PlatformHookWindows#initSystemShortcuts}
*/
@Test
public void testInitSystemShortcuts() {
hook.initSystemShortcuts();
}
}