package org.wikipedia.test; import android.support.annotation.NonNull; import org.junit.runners.model.InitializationError; import org.robolectric.RobolectricTestRunner; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.util.Properties; /** A {@link RobolectricTestRunner} with support for loading Gradle properties. */ public class TestRunner extends RobolectricTestRunner { private static final String GRADLE_PROPERTIES_FILENAME = "gradle.properties"; public TestRunner(Class<?> testClass) throws InitializationError { super(testClass); initProperties(); } private void initProperties() { File propertiesFile = new File(GRADLE_PROPERTIES_FILENAME); if (propertiesFile.isFile()) { setProperties(propertiesFile); } } private void setProperties(@NonNull File file) { setProperties(readProperties(file)); } private void setProperties(@NonNull Properties properties) { for (String name : properties.stringPropertyNames()) { String value = properties.getProperty(name); System.setProperty(name, value); } } @NonNull private Properties readProperties(@NonNull File file) { try { return readProperties(new FileInputStream(file)); } catch (FileNotFoundException e) { throw new RuntimeException(e); } } @NonNull private Properties readProperties(@NonNull InputStream inputStream) { Properties properties = new Properties(); try { properties.load(inputStream); } catch (IOException e) { throw new RuntimeException(e); } return properties; } }