/*
* Copyright 2012 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 spock.util.environment;
/**
* Provides information on the current operating system, such as its name, version, and family.
*/
public class OperatingSystem {
private final String name;
private final String version;
private final Family family;
/**
* An operating system family.
*/
public enum Family {
/**
* A Linux operating system.
*/
LINUX,
/**
* A Mac OS operating system.
*/
MAC_OS,
/**
* A Windows operating system.
*/
WINDOWS,
/**
* A Solaris operating system.
*/
SOLARIS,
/**
* An operating system other than those listed above.
*/
OTHER
}
private OperatingSystem(String name, String version, Family family) {
this.name = name;
this.version = version;
this.family = family;
}
/**
* Returns the name of the operating system, as returned by the {@code os.name} system property.
*
* @return the name of the operating system, as returned by the {@code os.name} system property
*/
public String getName() {
return name;
}
/**
* Returns the version of the operating system, as returned by the {@code os.version} system property.
*
* @return the version of the operating system, as returned by the {@code os.version} system property
*/
public String getVersion() {
return version;
}
/**
* Returns the family of the operating system.
*
* @return the family of the operating system
*/
public Family getFamily() {
return family;
}
/**
* Tells whether the operating system family is Linux.
*
* @return whether the operating system family is Linux
*/
public boolean isLinux() {
return family == Family.LINUX;
}
/**
* Tells whether the operating system family is Mac OS.
*
* @return whether the operating system family is Mac OS
*/
public boolean isMacOs() {
return family == Family.MAC_OS;
}
/**
* Tells whether the operating system family is Windows.
*
* @return whether the operating system family is Windows
*/
public boolean isWindows() {
return family == Family.WINDOWS;
}
/**
* Tells whether the operating system family is Solaris.
*
* @return whether the operating system family is Solaris
*/
public boolean isSolaris() {
return family == Family.SOLARIS;
}
/**
* Tells whether the operating system family is anything other than those listed above.
*
* @return whether the operating system family is anything other than those listed above
*/
public boolean isOther() {
return family == Family.OTHER;
}
/**
* Returns the current operating system.
*
* @return the current operating system
*/
public static OperatingSystem getCurrent() {
String name = System.getProperty("os.name");
String version = System.getProperty("os.version");
String lowerName = name.toLowerCase();
if (lowerName.contains("linux")) return new OperatingSystem(name, version, Family.LINUX);
if (lowerName.contains("mac os") || lowerName.contains("darwin")) return new OperatingSystem(name, version, Family.MAC_OS);
if (lowerName.contains("windows")) return new OperatingSystem(name, version, Family.WINDOWS);
if (lowerName.contains("sunos")) return new OperatingSystem(name, version, Family.SOLARIS);
return new OperatingSystem(name, version, Family.OTHER);
}
}