mirror of
https://github.com/bitcoinj/bitcoinj.git
synced 2025-02-23 06:35:17 +01:00
PlatformUtils: move OS/runtime detection from o.b.core.Utils to new class
This commit is contained in:
parent
0685bf70e4
commit
6e77dcb433
14 changed files with 153 additions and 94 deletions
|
@ -0,0 +1,89 @@
|
||||||
|
/*
|
||||||
|
* Copyright by the original author or authors.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.bitcoinj.base.internal;
|
||||||
|
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import java.util.Locale;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Utilities for determining platform information (OS and runtime)
|
||||||
|
*/
|
||||||
|
public class PlatformUtils {
|
||||||
|
private static final Logger log = LoggerFactory.getLogger(PlatformUtils.class);
|
||||||
|
public enum Runtime {
|
||||||
|
ANDROID, OPENJDK, ORACLE_JAVA
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum OS {
|
||||||
|
LINUX, WINDOWS, MAC_OS
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Runtime runtime = null;
|
||||||
|
public static OS os = null;
|
||||||
|
|
||||||
|
static {
|
||||||
|
String runtimeProp = System.getProperty("java.runtime.name", "").toLowerCase(Locale.US);
|
||||||
|
if (runtimeProp.equals(""))
|
||||||
|
PlatformUtils.runtime = null;
|
||||||
|
else if (runtimeProp.contains("android"))
|
||||||
|
PlatformUtils.runtime = PlatformUtils.Runtime.ANDROID;
|
||||||
|
else if (runtimeProp.contains("openjdk"))
|
||||||
|
PlatformUtils.runtime = PlatformUtils.Runtime.OPENJDK;
|
||||||
|
else if (runtimeProp.contains("java(tm) se"))
|
||||||
|
PlatformUtils.runtime = PlatformUtils.Runtime.ORACLE_JAVA;
|
||||||
|
else
|
||||||
|
log.info("Unknown java.runtime.name '{}'", runtimeProp);
|
||||||
|
|
||||||
|
String osProp = System.getProperty("os.name", "").toLowerCase(Locale.US);
|
||||||
|
if (osProp.equals(""))
|
||||||
|
PlatformUtils.os = null;
|
||||||
|
else if (osProp.contains("linux"))
|
||||||
|
PlatformUtils.os = PlatformUtils.OS.LINUX;
|
||||||
|
else if (osProp.contains("win"))
|
||||||
|
PlatformUtils.os = PlatformUtils.OS.WINDOWS;
|
||||||
|
else if (osProp.contains("mac"))
|
||||||
|
PlatformUtils.os = PlatformUtils.OS.MAC_OS;
|
||||||
|
else
|
||||||
|
log.info("Unknown os.name '{}'", runtimeProp);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isAndroidRuntime() {
|
||||||
|
return runtime == Runtime.ANDROID;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isOpenJDKRuntime() {
|
||||||
|
return runtime == Runtime.OPENJDK;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isOracleJavaRuntime() {
|
||||||
|
return runtime == Runtime.ORACLE_JAVA;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isLinux() {
|
||||||
|
return os == OS.LINUX;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isWindows() {
|
||||||
|
return os == OS.WINDOWS;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isMac() {
|
||||||
|
return os == OS.MAC_OS;
|
||||||
|
}
|
||||||
|
}
|
|
@ -27,6 +27,7 @@ import com.google.common.util.concurrent.Runnables;
|
||||||
import com.google.common.util.concurrent.Uninterruptibles;
|
import com.google.common.util.concurrent.Uninterruptibles;
|
||||||
import net.jcip.annotations.GuardedBy;
|
import net.jcip.annotations.GuardedBy;
|
||||||
import org.bitcoinj.base.Network;
|
import org.bitcoinj.base.Network;
|
||||||
|
import org.bitcoinj.base.internal.PlatformUtils;
|
||||||
import org.bitcoinj.core.listeners.AddressEventListener;
|
import org.bitcoinj.core.listeners.AddressEventListener;
|
||||||
import org.bitcoinj.core.listeners.BlockchainDownloadEventListener;
|
import org.bitcoinj.core.listeners.BlockchainDownloadEventListener;
|
||||||
import org.bitcoinj.core.listeners.BlocksDownloadedEventListener;
|
import org.bitcoinj.core.listeners.BlocksDownloadedEventListener;
|
||||||
|
@ -542,7 +543,7 @@ public class PeerGroup implements TransactionBroadcaster {
|
||||||
// First run: try and use a local node if there is one, for the additional security it can provide.
|
// First run: try and use a local node if there is one, for the additional security it can provide.
|
||||||
// But, not on Android as there are none for this platform: it could only be a malicious app trying
|
// But, not on Android as there are none for this platform: it could only be a malicious app trying
|
||||||
// to hijack our traffic.
|
// to hijack our traffic.
|
||||||
if (!Utils.isAndroidRuntime() && useLocalhostPeerWhenPossible && maybeCheckForLocalhostPeer() && firstRun) {
|
if (!PlatformUtils.isAndroidRuntime() && useLocalhostPeerWhenPossible && maybeCheckForLocalhostPeer() && firstRun) {
|
||||||
log.info("Localhost peer detected, trying to use it instead of P2P discovery");
|
log.info("Localhost peer detected, trying to use it instead of P2P discovery");
|
||||||
maxConnections = 0;
|
maxConnections = 0;
|
||||||
connectToLocalHost();
|
connectToLocalHost();
|
||||||
|
|
|
@ -148,66 +148,6 @@ public class Utils {
|
||||||
return iso8601.format(dateTime);
|
return iso8601.format(dateTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
private enum Runtime {
|
|
||||||
ANDROID, OPENJDK, ORACLE_JAVA
|
|
||||||
}
|
|
||||||
|
|
||||||
private enum OS {
|
|
||||||
LINUX, WINDOWS, MAC_OS
|
|
||||||
}
|
|
||||||
|
|
||||||
private static Runtime runtime = null;
|
|
||||||
private static OS os = null;
|
|
||||||
static {
|
|
||||||
String runtimeProp = System.getProperty("java.runtime.name", "").toLowerCase(Locale.US);
|
|
||||||
if (runtimeProp.equals(""))
|
|
||||||
runtime = null;
|
|
||||||
else if (runtimeProp.contains("android"))
|
|
||||||
runtime = Runtime.ANDROID;
|
|
||||||
else if (runtimeProp.contains("openjdk"))
|
|
||||||
runtime = Runtime.OPENJDK;
|
|
||||||
else if (runtimeProp.contains("java(tm) se"))
|
|
||||||
runtime = Runtime.ORACLE_JAVA;
|
|
||||||
else
|
|
||||||
log.info("Unknown java.runtime.name '{}'", runtimeProp);
|
|
||||||
|
|
||||||
String osProp = System.getProperty("os.name", "").toLowerCase(Locale.US);
|
|
||||||
if (osProp.equals(""))
|
|
||||||
os = null;
|
|
||||||
else if (osProp.contains("linux"))
|
|
||||||
os = OS.LINUX;
|
|
||||||
else if (osProp.contains("win"))
|
|
||||||
os = OS.WINDOWS;
|
|
||||||
else if (osProp.contains("mac"))
|
|
||||||
os = OS.MAC_OS;
|
|
||||||
else
|
|
||||||
log.info("Unknown os.name '{}'", runtimeProp);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isAndroidRuntime() {
|
|
||||||
return runtime == Runtime.ANDROID;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isOpenJDKRuntime() {
|
|
||||||
return runtime == Runtime.OPENJDK;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isOracleJavaRuntime() {
|
|
||||||
return runtime == Runtime.ORACLE_JAVA;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isLinux() {
|
|
||||||
return os == OS.LINUX;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isWindows() {
|
|
||||||
return os == OS.WINDOWS;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isMac() {
|
|
||||||
return os == OS.MAC_OS;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String toString(List<byte[]> stack) {
|
public static String toString(List<byte[]> stack) {
|
||||||
List<String> parts = new ArrayList<>(stack.size());
|
List<String> parts = new ArrayList<>(stack.size());
|
||||||
for (byte[] push : stack)
|
for (byte[] push : stack)
|
||||||
|
|
|
@ -19,8 +19,8 @@ package org.bitcoinj.crypto;
|
||||||
|
|
||||||
import com.google.common.base.Stopwatch;
|
import com.google.common.base.Stopwatch;
|
||||||
import org.bitcoinj.base.Sha256Hash;
|
import org.bitcoinj.base.Sha256Hash;
|
||||||
|
import org.bitcoinj.base.internal.PlatformUtils;
|
||||||
import org.bitcoinj.base.utils.StreamUtils;
|
import org.bitcoinj.base.utils.StreamUtils;
|
||||||
import org.bitcoinj.core.Utils;
|
|
||||||
import org.bitcoinj.base.internal.InternalUtils;
|
import org.bitcoinj.base.internal.InternalUtils;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
@ -65,7 +65,7 @@ public class MnemonicCode {
|
||||||
INSTANCE = new MnemonicCode();
|
INSTANCE = new MnemonicCode();
|
||||||
} catch (FileNotFoundException e) {
|
} catch (FileNotFoundException e) {
|
||||||
// We expect failure on Android. The developer has to set INSTANCE themselves.
|
// We expect failure on Android. The developer has to set INSTANCE themselves.
|
||||||
if (!Utils.isAndroidRuntime())
|
if (!PlatformUtils.isAndroidRuntime())
|
||||||
log.error("Could not find word list", e);
|
log.error("Could not find word list", e);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
log.error("Failed to load word list", e);
|
log.error("Failed to load word list", e);
|
||||||
|
|
|
@ -21,13 +21,13 @@ import com.google.common.io.Closeables;
|
||||||
import com.google.common.util.concurrent.AbstractIdleService;
|
import com.google.common.util.concurrent.AbstractIdleService;
|
||||||
import org.bitcoinj.base.BitcoinNetwork;
|
import org.bitcoinj.base.BitcoinNetwork;
|
||||||
import org.bitcoinj.base.ScriptType;
|
import org.bitcoinj.base.ScriptType;
|
||||||
|
import org.bitcoinj.base.internal.PlatformUtils;
|
||||||
import org.bitcoinj.core.BlockChain;
|
import org.bitcoinj.core.BlockChain;
|
||||||
import org.bitcoinj.core.CheckpointManager;
|
import org.bitcoinj.core.CheckpointManager;
|
||||||
import org.bitcoinj.core.Context;
|
import org.bitcoinj.core.Context;
|
||||||
import org.bitcoinj.core.NetworkParameters;
|
import org.bitcoinj.core.NetworkParameters;
|
||||||
import org.bitcoinj.core.PeerAddress;
|
import org.bitcoinj.core.PeerAddress;
|
||||||
import org.bitcoinj.core.PeerGroup;
|
import org.bitcoinj.core.PeerGroup;
|
||||||
import org.bitcoinj.core.Utils;
|
|
||||||
import org.bitcoinj.core.listeners.DownloadProgressTracker;
|
import org.bitcoinj.core.listeners.DownloadProgressTracker;
|
||||||
import org.bitcoinj.crypto.DeterministicKey;
|
import org.bitcoinj.crypto.DeterministicKey;
|
||||||
import org.bitcoinj.net.discovery.DnsDiscovery;
|
import org.bitcoinj.net.discovery.DnsDiscovery;
|
||||||
|
@ -329,7 +329,7 @@ public class WalletAppKit extends AbstractIdleService {
|
||||||
// Initiate Bitcoin network objects (block store, blockchain and peer group)
|
// Initiate Bitcoin network objects (block store, blockchain and peer group)
|
||||||
vStore = new SPVBlockStore(params, chainFile);
|
vStore = new SPVBlockStore(params, chainFile);
|
||||||
if (!chainFileExists || restoreFromSeed != null || restoreFromKey != null) {
|
if (!chainFileExists || restoreFromSeed != null || restoreFromKey != null) {
|
||||||
if (checkpoints == null && !Utils.isAndroidRuntime()) {
|
if (checkpoints == null && !PlatformUtils.isAndroidRuntime()) {
|
||||||
checkpoints = CheckpointManager.openStream(params);
|
checkpoints = CheckpointManager.openStream(params);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -17,8 +17,8 @@
|
||||||
|
|
||||||
package org.bitcoinj.net.discovery;
|
package org.bitcoinj.net.discovery;
|
||||||
|
|
||||||
|
import org.bitcoinj.base.internal.PlatformUtils;
|
||||||
import org.bitcoinj.core.NetworkParameters;
|
import org.bitcoinj.core.NetworkParameters;
|
||||||
import org.bitcoinj.core.Utils;
|
|
||||||
import org.bitcoinj.core.VersionMessage;
|
import org.bitcoinj.core.VersionMessage;
|
||||||
import org.bitcoinj.utils.ContextPropagatingThreadFactory;
|
import org.bitcoinj.utils.ContextPropagatingThreadFactory;
|
||||||
import org.bitcoinj.utils.DaemonThreadFactory;
|
import org.bitcoinj.utils.DaemonThreadFactory;
|
||||||
|
@ -79,7 +79,7 @@ public class DnsDiscovery extends MultiplexingDiscovery {
|
||||||
protected ExecutorService createExecutor() {
|
protected ExecutorService createExecutor() {
|
||||||
// Attempted workaround for reported bugs on Linux in which gethostbyname does not appear to be properly
|
// Attempted workaround for reported bugs on Linux in which gethostbyname does not appear to be properly
|
||||||
// thread safe and can cause segfaults on some libc versions.
|
// thread safe and can cause segfaults on some libc versions.
|
||||||
if (Utils.isLinux())
|
if (PlatformUtils.isLinux())
|
||||||
return Executors.newSingleThreadExecutor(new ContextPropagatingThreadFactory("DNS seed lookups"));
|
return Executors.newSingleThreadExecutor(new ContextPropagatingThreadFactory("DNS seed lookups"));
|
||||||
else
|
else
|
||||||
return Executors.newFixedThreadPool(seeds.size(), new DaemonThreadFactory("DNS seed lookups"));
|
return Executors.newFixedThreadPool(seeds.size(), new DaemonThreadFactory("DNS seed lookups"));
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
|
|
||||||
package org.bitcoinj.utils;
|
package org.bitcoinj.utils;
|
||||||
|
|
||||||
import org.bitcoinj.core.Utils;
|
import org.bitcoinj.base.internal.PlatformUtils;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.nio.file.FileSystems;
|
import java.nio.file.FileSystems;
|
||||||
|
@ -64,11 +64,11 @@ public class AppDataDirectory {
|
||||||
public static Path getPath(String appName) {
|
public static Path getPath(String appName) {
|
||||||
final Path applicationDataDirectory;
|
final Path applicationDataDirectory;
|
||||||
|
|
||||||
if (Utils.isWindows()) {
|
if (PlatformUtils.isWindows()) {
|
||||||
applicationDataDirectory = pathOf(System.getenv("APPDATA"), appName.toLowerCase());
|
applicationDataDirectory = pathOf(System.getenv("APPDATA"), appName.toLowerCase());
|
||||||
} else if (Utils.isMac()) {
|
} else if (PlatformUtils.isMac()) {
|
||||||
applicationDataDirectory = pathOf(System.getProperty("user.home"),"Library/Application Support", appName);
|
applicationDataDirectory = pathOf(System.getProperty("user.home"),"Library/Application Support", appName);
|
||||||
} else if (Utils.isLinux()) {
|
} else if (PlatformUtils.isLinux()) {
|
||||||
applicationDataDirectory = pathOf(System.getProperty("user.home"), "." + appName.toLowerCase());
|
applicationDataDirectory = pathOf(System.getProperty("user.home"), "." + appName.toLowerCase());
|
||||||
} else {
|
} else {
|
||||||
// Unknown, assume unix-like
|
// Unknown, assume unix-like
|
||||||
|
|
|
@ -20,7 +20,7 @@ import com.google.common.util.concurrent.CycleDetectingLockFactory;
|
||||||
import com.google.common.util.concurrent.ListeningExecutorService;
|
import com.google.common.util.concurrent.ListeningExecutorService;
|
||||||
import com.google.common.util.concurrent.MoreExecutors;
|
import com.google.common.util.concurrent.MoreExecutors;
|
||||||
import com.google.common.util.concurrent.Uninterruptibles;
|
import com.google.common.util.concurrent.Uninterruptibles;
|
||||||
import org.bitcoinj.core.Utils;
|
import org.bitcoinj.base.internal.PlatformUtils;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
@ -151,7 +151,7 @@ public class Threading {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ReentrantLock lock(String name) {
|
public static ReentrantLock lock(String name) {
|
||||||
if (Utils.isAndroidRuntime())
|
if (PlatformUtils.isAndroidRuntime())
|
||||||
return new ReentrantLock(true);
|
return new ReentrantLock(true);
|
||||||
else
|
else
|
||||||
return factory.newReentrantLock(name);
|
return factory.newReentrantLock(name);
|
||||||
|
|
|
@ -27,6 +27,7 @@ import net.jcip.annotations.GuardedBy;
|
||||||
import org.bitcoinj.base.BitcoinNetwork;
|
import org.bitcoinj.base.BitcoinNetwork;
|
||||||
import org.bitcoinj.base.Network;
|
import org.bitcoinj.base.Network;
|
||||||
import org.bitcoinj.base.exceptions.AddressFormatException;
|
import org.bitcoinj.base.exceptions.AddressFormatException;
|
||||||
|
import org.bitcoinj.base.internal.PlatformUtils;
|
||||||
import org.bitcoinj.base.utils.StreamUtils;
|
import org.bitcoinj.base.utils.StreamUtils;
|
||||||
import org.bitcoinj.core.AbstractBlockChain;
|
import org.bitcoinj.core.AbstractBlockChain;
|
||||||
import org.bitcoinj.base.Address;
|
import org.bitcoinj.base.Address;
|
||||||
|
@ -1495,7 +1496,7 @@ public class Wallet extends BaseTaggableObject
|
||||||
stream.getFD().sync();
|
stream.getFD().sync();
|
||||||
stream.close();
|
stream.close();
|
||||||
stream = null;
|
stream = null;
|
||||||
if (Utils.isWindows()) {
|
if (PlatformUtils.isWindows()) {
|
||||||
// Work around an issue on Windows whereby you can't rename over existing files.
|
// Work around an issue on Windows whereby you can't rename over existing files.
|
||||||
File canonical = destFile.getCanonicalFile();
|
File canonical = destFile.getCanonicalFile();
|
||||||
if (canonical.exists() && !canonical.delete())
|
if (canonical.exists() && !canonical.delete())
|
||||||
|
|
|
@ -0,0 +1,34 @@
|
||||||
|
/*
|
||||||
|
* Copyright by the original author or authors.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.bitcoinj.base.internal;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertFalse;
|
||||||
|
import static org.junit.Assert.assertTrue;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests for PlatformUtils
|
||||||
|
*/
|
||||||
|
public class PlatformUtilsTest {
|
||||||
|
@Test
|
||||||
|
public void runtime() {
|
||||||
|
// This test assumes it is run within a Java runtime for desktop computers.
|
||||||
|
assertTrue(PlatformUtils.isOpenJDKRuntime() || PlatformUtils.isOracleJavaRuntime());
|
||||||
|
assertFalse(PlatformUtils.isAndroidRuntime());
|
||||||
|
}
|
||||||
|
}
|
|
@ -34,13 +34,6 @@ public class UtilsTest {
|
||||||
assertEquals("2014-11-16T10:54:33Z", Utils.dateTimeFormat(new Date(1416135273781L)));
|
assertEquals("2014-11-16T10:54:33Z", Utils.dateTimeFormat(new Date(1416135273781L)));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
public void runtime() {
|
|
||||||
// This test assumes it is run within a Java runtime for desktop computers.
|
|
||||||
assertTrue(Utils.isOpenJDKRuntime() || Utils.isOracleJavaRuntime());
|
|
||||||
assertFalse(Utils.isAndroidRuntime());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testRollMockClock() {
|
public void testRollMockClock() {
|
||||||
Utils.setMockClock(25200);
|
Utils.setMockClock(25200);
|
||||||
|
|
|
@ -21,6 +21,7 @@ import com.google.common.base.Stopwatch;
|
||||||
import org.bitcoinj.base.BitcoinNetwork;
|
import org.bitcoinj.base.BitcoinNetwork;
|
||||||
import org.bitcoinj.base.ScriptType;
|
import org.bitcoinj.base.ScriptType;
|
||||||
import org.bitcoinj.base.Address;
|
import org.bitcoinj.base.Address;
|
||||||
|
import org.bitcoinj.base.internal.PlatformUtils;
|
||||||
import org.bitcoinj.core.Block;
|
import org.bitcoinj.core.Block;
|
||||||
import org.bitcoinj.core.Context;
|
import org.bitcoinj.core.Context;
|
||||||
import org.bitcoinj.crypto.ECKey;
|
import org.bitcoinj.crypto.ECKey;
|
||||||
|
@ -182,7 +183,7 @@ public class SPVBlockStoreTest {
|
||||||
SPVBlockStore store = new SPVBlockStore(TESTNET, blockStoreFile);
|
SPVBlockStore store = new SPVBlockStore(TESTNET, blockStoreFile);
|
||||||
store.close();
|
store.close();
|
||||||
boolean deleted = blockStoreFile.delete();
|
boolean deleted = blockStoreFile.delete();
|
||||||
if (!Utils.isWindows()) {
|
if (!PlatformUtils.isWindows()) {
|
||||||
// TODO: Deletion is failing on Windows
|
// TODO: Deletion is failing on Windows
|
||||||
assertTrue(deleted);
|
assertTrue(deleted);
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
|
|
||||||
package org.bitcoinj.utils;
|
package org.bitcoinj.utils;
|
||||||
|
|
||||||
import org.bitcoinj.core.Utils;
|
import org.bitcoinj.base.internal.PlatformUtils;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertEquals;
|
||||||
|
@ -33,11 +33,11 @@ public class AppDataDirectoryTest {
|
||||||
public void worksOnCurrentPlatform() {
|
public void worksOnCurrentPlatform() {
|
||||||
final String appName = "bitcoinj";
|
final String appName = "bitcoinj";
|
||||||
String path = AppDataDirectory.get(appName).toString();
|
String path = AppDataDirectory.get(appName).toString();
|
||||||
if (Utils.isWindows()) {
|
if (PlatformUtils.isWindows()) {
|
||||||
assertEquals("Path wrong on Windows", winPath(appName), path);
|
assertEquals("Path wrong on Windows", winPath(appName), path);
|
||||||
} else if (Utils.isMac()) {
|
} else if (PlatformUtils.isMac()) {
|
||||||
assertEquals("Path wrong on Mac", macPath(appName), path);
|
assertEquals("Path wrong on Mac", macPath(appName), path);
|
||||||
} else if (Utils.isLinux()) {
|
} else if (PlatformUtils.isLinux()) {
|
||||||
assertEquals("Path wrong on Linux", unixPath(appName), path);
|
assertEquals("Path wrong on Linux", unixPath(appName), path);
|
||||||
} else {
|
} else {
|
||||||
assertEquals("Path wrong on unknown/default", unixPath(appName), path);
|
assertEquals("Path wrong on unknown/default", unixPath(appName), path);
|
||||||
|
@ -48,11 +48,11 @@ public class AppDataDirectoryTest {
|
||||||
public void worksOnCurrentPlatformForBitcoinCore() {
|
public void worksOnCurrentPlatformForBitcoinCore() {
|
||||||
final String appName = "Bitcoin";
|
final String appName = "Bitcoin";
|
||||||
String path = AppDataDirectory.get(appName).toString();
|
String path = AppDataDirectory.get(appName).toString();
|
||||||
if (Utils.isWindows()) {
|
if (PlatformUtils.isWindows()) {
|
||||||
assertEquals("Path wrong on Windows", winPath(appName), path);
|
assertEquals("Path wrong on Windows", winPath(appName), path);
|
||||||
} else if (Utils.isMac()) {
|
} else if (PlatformUtils.isMac()) {
|
||||||
assertEquals("Path wrong on Mac", macPath(appName), path);
|
assertEquals("Path wrong on Mac", macPath(appName), path);
|
||||||
} else if (Utils.isLinux()) {
|
} else if (PlatformUtils.isLinux()) {
|
||||||
assertEquals("Path wrong on Linux", unixPath(appName), path);
|
assertEquals("Path wrong on Linux", unixPath(appName), path);
|
||||||
} else {
|
} else {
|
||||||
assertEquals("Path wrong on unknown/default", unixPath(appName), path);
|
assertEquals("Path wrong on unknown/default", unixPath(appName), path);
|
||||||
|
@ -62,14 +62,14 @@ public class AppDataDirectoryTest {
|
||||||
@Test(expected = RuntimeException.class)
|
@Test(expected = RuntimeException.class)
|
||||||
public void throwsIOExceptionIfPathNotFound() {
|
public void throwsIOExceptionIfPathNotFound() {
|
||||||
// Force exceptions with illegal characters
|
// Force exceptions with illegal characters
|
||||||
if (Utils.isWindows()) {
|
if (PlatformUtils.isWindows()) {
|
||||||
AppDataDirectory.get(":"); // Illegal character for Windows
|
AppDataDirectory.get(":"); // Illegal character for Windows
|
||||||
}
|
}
|
||||||
if (Utils.isMac()) {
|
if (PlatformUtils.isMac()) {
|
||||||
// NUL character
|
// NUL character
|
||||||
AppDataDirectory.get("\0"); // Illegal character for Mac
|
AppDataDirectory.get("\0"); // Illegal character for Mac
|
||||||
}
|
}
|
||||||
if (Utils.isLinux()) {
|
if (PlatformUtils.isLinux()) {
|
||||||
// NUL character
|
// NUL character
|
||||||
AppDataDirectory.get("\0"); // Illegal character for Linux
|
AppDataDirectory.get("\0"); // Illegal character for Linux
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,9 +22,9 @@ import javafx.scene.input.KeyCombination;
|
||||||
import javafx.stage.Stage;
|
import javafx.stage.Stage;
|
||||||
import org.bitcoinj.base.BitcoinNetwork;
|
import org.bitcoinj.base.BitcoinNetwork;
|
||||||
import org.bitcoinj.base.ScriptType;
|
import org.bitcoinj.base.ScriptType;
|
||||||
|
import org.bitcoinj.base.internal.PlatformUtils;
|
||||||
import org.bitcoinj.core.Context;
|
import org.bitcoinj.core.Context;
|
||||||
import org.bitcoinj.core.NetworkParameters;
|
import org.bitcoinj.core.NetworkParameters;
|
||||||
import org.bitcoinj.core.Utils;
|
|
||||||
import org.bitcoinj.kits.WalletAppKit;
|
import org.bitcoinj.kits.WalletAppKit;
|
||||||
import org.bitcoinj.utils.AppDataDirectory;
|
import org.bitcoinj.utils.AppDataDirectory;
|
||||||
import org.bitcoinj.utils.BriefLogFormatter;
|
import org.bitcoinj.utils.BriefLogFormatter;
|
||||||
|
@ -118,7 +118,7 @@ public abstract class WalletApplication implements AppDelegate {
|
||||||
// Make log output concise.
|
// Make log output concise.
|
||||||
BriefLogFormatter.init();
|
BriefLogFormatter.init();
|
||||||
|
|
||||||
if (Utils.isMac()) {
|
if (PlatformUtils.isMac()) {
|
||||||
// We could match the Mac Aqua style here, except that (a) Modena doesn't look that bad, and (b)
|
// We could match the Mac Aqua style here, except that (a) Modena doesn't look that bad, and (b)
|
||||||
// the date picker widget is kinda broken in AquaFx and I can't be bothered fixing it.
|
// the date picker widget is kinda broken in AquaFx and I can't be bothered fixing it.
|
||||||
// AquaFx.style();
|
// AquaFx.style();
|
||||||
|
|
Loading…
Add table
Reference in a new issue