Add a way to detect if code runs as instrumentation test

and disable some dialogs to make tests easier to write
This commit is contained in:
Torsten Grote
2021-03-25 13:52:51 -03:00
parent a12166c13b
commit f971533a5b
9 changed files with 31 additions and 8 deletions

View File

@@ -19,4 +19,9 @@ public class BriarTestComponentApplication extends BriarApplicationImpl {
return component; return component;
} }
@Override
public boolean isInstrumentationTest() {
return true;
}
} }

View File

@@ -19,4 +19,6 @@ public interface BriarApplication extends BrambleApplication {
SharedPreferences getDefaultSharedPreferences(); SharedPreferences getDefaultSharedPreferences();
boolean isRunningInBackground(); boolean isRunningInBackground();
boolean isInstrumentationTest();
} }

View File

@@ -151,4 +151,9 @@ public class BriarApplicationImpl extends Application
ActivityManager.getMyMemoryState(info); ActivityManager.getMyMemoryState(info);
return (info.importance != IMPORTANCE_FOREGROUND); return (info.importance != IMPORTANCE_FOREGROUND);
} }
@Override
public boolean isInstrumentationTest() {
return false;
}
} }

View File

@@ -301,7 +301,9 @@ public class BriarService extends Service {
LOG.info("Interrupted while waiting for shutdown"); LOG.info("Interrupted while waiting for shutdown");
} }
LOG.info("Exiting"); LOG.info("Exiting");
System.exit(0); if (!app.isInstrumentationTest()) {
System.exit(0);
}
}, "BackgroundShutdown"); }, "BackgroundShutdown");
}, "BackgroundShutdown"); }, "BackgroundShutdown");
} }

View File

@@ -44,7 +44,6 @@ import static androidx.lifecycle.Lifecycle.State.STARTED;
import static java.util.Collections.emptyList; import static java.util.Collections.emptyList;
import static java.util.logging.Level.INFO; import static java.util.logging.Level.INFO;
import static java.util.logging.Logger.getLogger; import static java.util.logging.Logger.getLogger;
import static org.briarproject.briar.BuildConfig.FLAVOR;
import static org.briarproject.briar.android.TestingConstants.PREVENT_SCREENSHOTS; import static org.briarproject.briar.android.TestingConstants.PREVENT_SCREENSHOTS;
import static org.briarproject.briar.android.util.UiUtils.hideSoftKeyboard; import static org.briarproject.briar.android.util.UiUtils.hideSoftKeyboard;
@@ -194,7 +193,9 @@ public abstract class BaseActivity extends AppCompatActivity
} }
private boolean showScreenFilterWarning() { private boolean showScreenFilterWarning() {
if (FLAVOR == "screenshot") return false; if (((BriarApplication) getApplication()).isInstrumentationTest()) {
return false;
}
// If the dialog is already visible, filter the tap // If the dialog is already visible, filter the tap
ScreenFilterDialogFragment f = findDialogFragment(); ScreenFilterDialogFragment f = findDialogFragment();
if (f != null && f.isVisible()) return false; if (f != null && f.isVisible()) return false;

View File

@@ -10,6 +10,7 @@ import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
import org.briarproject.bramble.api.system.AndroidWakeLockManager; import org.briarproject.bramble.api.system.AndroidWakeLockManager;
import org.briarproject.bramble.api.system.Wakeful; import org.briarproject.bramble.api.system.Wakeful;
import org.briarproject.briar.R; import org.briarproject.briar.R;
import org.briarproject.briar.android.BriarApplication;
import org.briarproject.briar.android.account.UnlockActivity; import org.briarproject.briar.android.account.UnlockActivity;
import org.briarproject.briar.android.controller.BriarController; import org.briarproject.briar.android.controller.BriarController;
import org.briarproject.briar.android.controller.DbController; import org.briarproject.briar.android.controller.DbController;
@@ -236,7 +237,8 @@ public abstract class BriarActivity extends BaseActivity {
if (SDK_INT >= 21) finishAndRemoveTask(); if (SDK_INT >= 21) finishAndRemoveTask();
else supportFinishAfterTransition(); else supportFinishAfterTransition();
LOG.info("Exiting"); LOG.info("Exiting");
System.exit(0); BriarApplication app = (BriarApplication) getApplication();
if (!app.isInstrumentationTest()) System.exit(0);
} }
@Deprecated @Deprecated

View File

@@ -12,6 +12,7 @@ import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import org.briarproject.bramble.api.settings.Settings; import org.briarproject.bramble.api.settings.Settings;
import org.briarproject.bramble.api.settings.SettingsManager; import org.briarproject.bramble.api.settings.SettingsManager;
import org.briarproject.bramble.api.system.AndroidWakeLockManager; import org.briarproject.bramble.api.system.AndroidWakeLockManager;
import org.briarproject.briar.android.BriarApplication;
import org.briarproject.briar.android.BriarService; import org.briarproject.briar.android.BriarService;
import org.briarproject.briar.android.BriarService.BriarServiceConnection; import org.briarproject.briar.android.BriarService.BriarServiceConnection;
import org.briarproject.briar.android.controller.handler.ResultHandler; import org.briarproject.briar.android.controller.handler.ResultHandler;
@@ -104,7 +105,8 @@ public class BriarControllerImpl implements BriarController {
@Override @Override
public void hasDozed(ResultHandler<Boolean> handler) { public void hasDozed(ResultHandler<Boolean> handler) {
if (!dozeWatchdog.getAndResetDozeFlag() BriarApplication app = (BriarApplication) activity.getApplication();
if (app.isInstrumentationTest() || !dozeWatchdog.getAndResetDozeFlag()
|| !needsDozeWhitelisting(activity)) { || !needsDozeWhitelisting(activity)) {
handler.onResult(false); handler.onResult(false);
return; return;

View File

@@ -27,6 +27,7 @@ import org.briarproject.bramble.api.plugin.Plugin.State;
import org.briarproject.bramble.api.plugin.TorConstants; import org.briarproject.bramble.api.plugin.TorConstants;
import org.briarproject.bramble.api.plugin.TransportId; import org.briarproject.bramble.api.plugin.TransportId;
import org.briarproject.briar.R; import org.briarproject.briar.R;
import org.briarproject.briar.android.BriarApplication;
import org.briarproject.briar.android.activity.ActivityComponent; import org.briarproject.briar.android.activity.ActivityComponent;
import org.briarproject.briar.android.activity.BriarActivity; import org.briarproject.briar.android.activity.BriarActivity;
import org.briarproject.briar.android.blog.FeedFragment; import org.briarproject.briar.android.blog.FeedFragment;
@@ -71,7 +72,6 @@ import static org.briarproject.bramble.api.lifecycle.LifecycleManager.LifecycleS
import static org.briarproject.bramble.api.plugin.Plugin.State.ACTIVE; import static org.briarproject.bramble.api.plugin.Plugin.State.ACTIVE;
import static org.briarproject.bramble.api.plugin.Plugin.State.ENABLING; import static org.briarproject.bramble.api.plugin.Plugin.State.ENABLING;
import static org.briarproject.bramble.api.plugin.Plugin.State.STARTING_STOPPING; import static org.briarproject.bramble.api.plugin.Plugin.State.STARTING_STOPPING;
import static org.briarproject.briar.BuildConfig.FLAVOR;
import static org.briarproject.briar.android.BriarService.EXTRA_STARTUP_FAILED; import static org.briarproject.briar.android.BriarService.EXTRA_STARTUP_FAILED;
import static org.briarproject.briar.android.TestingConstants.IS_DEBUG_BUILD; import static org.briarproject.briar.android.TestingConstants.IS_DEBUG_BUILD;
import static org.briarproject.briar.android.activity.RequestCodes.REQUEST_PASSWORD; import static org.briarproject.briar.android.activity.RequestCodes.REQUEST_PASSWORD;
@@ -135,7 +135,8 @@ public class NavDrawerActivity extends BriarActivity implements
navDrawerViewModel = provider.get(NavDrawerViewModel.class); navDrawerViewModel = provider.get(NavDrawerViewModel.class);
pluginViewModel = provider.get(PluginViewModel.class); pluginViewModel = provider.get(PluginViewModel.class);
if (IS_DEBUG_BUILD && (FLAVOR != "screenshot")) { BriarApplication app = (BriarApplication) getApplication();
if (IS_DEBUG_BUILD && !app.isInstrumentationTest()) {
navDrawerViewModel.showExpiryWarning() navDrawerViewModel.showExpiryWarning()
.observe(this, this::showExpiryWarning); .observe(this, this::showExpiryWarning);
} }

View File

@@ -10,6 +10,7 @@ import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import org.briarproject.bramble.api.settings.Settings; import org.briarproject.bramble.api.settings.Settings;
import org.briarproject.bramble.api.settings.SettingsManager; import org.briarproject.bramble.api.settings.SettingsManager;
import org.briarproject.bramble.api.system.AndroidExecutor; import org.briarproject.bramble.api.system.AndroidExecutor;
import org.briarproject.briar.android.BriarApplication;
import org.briarproject.briar.android.viewmodel.DbViewModel; import org.briarproject.briar.android.viewmodel.DbViewModel;
import java.util.concurrent.Executor; import java.util.concurrent.Executor;
@@ -120,7 +121,9 @@ public class NavDrawerViewModel extends DbViewModel {
@UiThread @UiThread
void checkDozeWhitelisting() { void checkDozeWhitelisting() {
// check this first, to hit the DbThread only when really necessary // check this first, to hit the DbThread only when really necessary
if (!needsDozeWhitelisting(getApplication())) { BriarApplication app = (BriarApplication) getApplication();
if (app.isInstrumentationTest() ||
!needsDozeWhitelisting(getApplication())) {
shouldAskForDozeWhitelisting.setValue(false); shouldAskForDozeWhitelisting.setValue(false);
return; return;
} }