mobile/android/tests/background/junit3/src/sync/helpers/SessionTestHelper.java

changeset 0
6474c204b198
     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 +}

mercurial