1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/mobile/android/tests/background/junit3/src/sync/helpers/SessionTestHelper.java Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,82 @@ 1.4 +/* Any copyright is dedicated to the Public Domain. 1.5 + http://creativecommons.org/publicdomain/zero/1.0/ */ 1.6 + 1.7 +package org.mozilla.gecko.background.sync.helpers; 1.8 + 1.9 +import static junit.framework.Assert.assertNotNull; 1.10 + 1.11 +import org.mozilla.gecko.background.common.log.Logger; 1.12 +import org.mozilla.gecko.background.testhelpers.WaitHelper; 1.13 +import org.mozilla.gecko.sync.repositories.InvalidSessionTransitionException; 1.14 +import org.mozilla.gecko.sync.repositories.Repository; 1.15 +import org.mozilla.gecko.sync.repositories.RepositorySession; 1.16 + 1.17 +import android.content.Context; 1.18 + 1.19 +public class SessionTestHelper { 1.20 + 1.21 + protected static RepositorySession prepareRepositorySession( 1.22 + final Context context, 1.23 + final boolean begin, 1.24 + final Repository repository) { 1.25 + 1.26 + final WaitHelper testWaiter = WaitHelper.getTestWaiter(); 1.27 + 1.28 + final String logTag = "prepareRepositorySession"; 1.29 + class CreationDelegate extends DefaultSessionCreationDelegate { 1.30 + private RepositorySession session; 1.31 + synchronized void setSession(RepositorySession session) { 1.32 + this.session = session; 1.33 + } 1.34 + synchronized RepositorySession getSession() { 1.35 + return this.session; 1.36 + } 1.37 + 1.38 + @Override 1.39 + public void onSessionCreated(final RepositorySession session) { 1.40 + assertNotNull(session); 1.41 + Logger.info(logTag, "Setting session to " + session); 1.42 + setSession(session); 1.43 + if (begin) { 1.44 + Logger.info(logTag, "Calling session.begin on new session."); 1.45 + // The begin callbacks will notify. 1.46 + try { 1.47 + session.begin(new ExpectBeginDelegate()); 1.48 + } catch (InvalidSessionTransitionException e) { 1.49 + testWaiter.performNotify(e); 1.50 + } 1.51 + } else { 1.52 + Logger.info(logTag, "Notifying after setting new session."); 1.53 + testWaiter.performNotify(); 1.54 + } 1.55 + } 1.56 + } 1.57 + 1.58 + final CreationDelegate delegate = new CreationDelegate(); 1.59 + try { 1.60 + Runnable runnable = new Runnable() { 1.61 + @Override 1.62 + public void run() { 1.63 + repository.createSession(delegate, context); 1.64 + } 1.65 + }; 1.66 + testWaiter.performWait(runnable); 1.67 + } catch (IllegalArgumentException ex) { 1.68 + Logger.warn(logTag, "Caught IllegalArgumentException."); 1.69 + } 1.70 + 1.71 + Logger.info(logTag, "Retrieving new session."); 1.72 + final RepositorySession session = delegate.getSession(); 1.73 + assertNotNull(session); 1.74 + 1.75 + return session; 1.76 + } 1.77 + 1.78 + public static RepositorySession createSession(final Context context, final Repository repository) { 1.79 + return prepareRepositorySession(context, false, repository); 1.80 + } 1.81 + 1.82 + public static RepositorySession createAndBeginSession(Context context, Repository repository) { 1.83 + return prepareRepositorySession(context, true, repository); 1.84 + } 1.85 +}