--- /dev/null
+package jp.ac.titech.sharp4k.cuten.test;
+
+import java.util.List;
+
+import jp.ac.titech.sharp4k.cuten.Achievement;
+import jp.ac.titech.sharp4k.cuten.HttpAPIClient;
+import jp.ac.titech.sharp4k.cuten.HttpResponseListener;
+import jp.ac.titech.sharp4k.cuten.Lecture;
+import jp.ac.titech.sharp4k.cuten.Token;
+import jp.ac.titech.sharp4k.cuten.TokenAuthenticationActivity;
+import roboguice.RoboGuice;
+
+import com.google.inject.AbstractModule;
+import com.google.inject.Module;
+import com.google.inject.util.Modules;
+
+import android.app.Application;
+import android.content.Context;
+import android.test.ActivityInstrumentationTestCase2;
+import android.widget.Button;
+import android.widget.EditText;
+
+public class AbnormalTokenAuthenticationActivityTest extends
+ ActivityInstrumentationTestCase2<TokenAuthenticationActivity> {
+ private static class AbnormalHttpModule extends AbstractModule {
+ @Override
+ protected void configure() {
+ bind(HttpAPIClient.class).to(AbormalHttpAPIClient.class);
+ }
+ }
+
+ private static class AbormalHttpAPIClient implements HttpAPIClient {
+ @Override
+ public void getUsersProfile(String token, HttpResponseListener listener) {
+ listener.preExec();
+ listener.onUnauthorized();
+ listener.postExec();
+ }
+
+ @Override
+ public void getLectures(HttpResponseListener listener) {
+ }
+
+ @Override
+ public void getLectures(List<Lecture> lectures,
+ HttpResponseListener listener) {
+ }
+
+ @Override
+ public void resetToken(String token, HttpResponseListener listener) {
+ }
+
+ @Override
+ public void putAchievement(String token, Achievement achievement,
+ HttpResponseListener listener) {
+ }
+ }
+
+ private TokenAuthenticationActivity activity;
+ private String savedToken;
+ private static final String dummyToken = "dummytoken";
+ private EditText tokenEdit;
+ private Button authButton;
+
+ public AbnormalTokenAuthenticationActivityTest() {
+ super(TokenAuthenticationActivity.class);
+ }
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ Context ctx = getInstrumentation().getTargetContext();
+ Application app = (Application) ctx.getApplicationContext();
+ Module m = Modules.override(RoboGuice.newDefaultRoboModule(app)).with(
+ new AbnormalHttpModule(), new DummyDBModule());
+ RoboGuice.setBaseApplicationInjector(app, RoboGuice.DEFAULT_STAGE, m);
+ savedToken = Token.load(ctx);
+ Token.save(dummyToken, ctx);
+
+ activity = getActivity();
+ tokenEdit = (EditText) activity
+ .findViewById(jp.ac.titech.sharp4k.cuten.R.id.token);
+ authButton = (Button) activity
+ .findViewById(jp.ac.titech.sharp4k.cuten.R.id.authentication);
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ Token.delete(activity);
+ if (savedToken != null) {
+ Token.save(savedToken, activity);
+ }
+ super.tearDown();
+ }
+
+ public void testKeepCurrentTokenOnFailure() throws Exception {
+ assertNotNull(tokenEdit);
+ assertNotNull(authButton);
+
+ final String inputToken = "deadbeef";
+ activity.runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ tokenEdit.setText(inputToken);
+ authButton.performClick();
+ }
+ });
+ getInstrumentation().waitForIdleSync();
+
+ String token = Token.load(activity);
+ assertFalse(token.equals(inputToken));
+ assertEquals(dummyToken, token);
+ }
+}
--- /dev/null
+package jp.ac.titech.sharp4k.cuten.test;
+
+import java.util.List;
+
+import jp.ac.titech.sharp4k.cuten.Achievement;
+import jp.ac.titech.sharp4k.cuten.HttpAPIClient;
+import jp.ac.titech.sharp4k.cuten.HttpResponseListener;
+import jp.ac.titech.sharp4k.cuten.Lecture;
+import jp.ac.titech.sharp4k.cuten.Token;
+import jp.ac.titech.sharp4k.cuten.TokenAuthenticationActivity;
+import roboguice.RoboGuice;
+
+import com.google.inject.AbstractModule;
+import com.google.inject.Module;
+import com.google.inject.util.Modules;
+
+import android.app.Application;
+import android.content.Context;
+import android.test.ActivityInstrumentationTestCase2;
+import android.widget.Button;
+import android.widget.EditText;
+
+public class NormalTokenAuthenticationActivityTest extends
+ ActivityInstrumentationTestCase2<TokenAuthenticationActivity> {
+ private static class NormalHttpModule extends AbstractModule {
+ @Override
+ protected void configure() {
+ bind(HttpAPIClient.class).to(NormalHttpAPIClient.class);
+ }
+ }
+
+ private static class NormalHttpAPIClient implements HttpAPIClient {
+ @Override
+ public void getUsersProfile(String token, HttpResponseListener listener) {
+ listener.preExec();
+ listener.onSuccess("");
+ listener.postExec();
+ }
+
+ @Override
+ public void getLectures(HttpResponseListener listener) {
+ }
+
+ @Override
+ public void getLectures(List<Lecture> lectures,
+ HttpResponseListener listener) {
+ }
+
+ @Override
+ public void resetToken(String token, HttpResponseListener listener) {
+ }
+
+ @Override
+ public void putAchievement(String token, Achievement achievement,
+ HttpResponseListener listener) {
+ }
+ }
+
+ private TokenAuthenticationActivity activity;
+ private String savedToken;
+ private EditText tokenEdit;
+ private Button authButton;
+
+ public NormalTokenAuthenticationActivityTest() {
+ super(TokenAuthenticationActivity.class);
+ }
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ Context ctx = getInstrumentation().getTargetContext();
+ Application app = (Application) ctx.getApplicationContext();
+ Module m = Modules.override(RoboGuice.newDefaultRoboModule(app)).with(
+ new NormalHttpModule(), new DummyDBModule());
+ RoboGuice.setBaseApplicationInjector(app, RoboGuice.DEFAULT_STAGE, m);
+ savedToken = Token.load(ctx);
+ Token.save("dummytoken", ctx);
+
+ activity = getActivity();
+ tokenEdit = (EditText) activity
+ .findViewById(jp.ac.titech.sharp4k.cuten.R.id.token);
+ authButton = (Button) activity
+ .findViewById(jp.ac.titech.sharp4k.cuten.R.id.authentication);
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ Token.delete(activity);
+ if (savedToken != null) {
+ Token.save(savedToken, activity);
+ }
+ super.tearDown();
+ }
+
+ public void testAuthentication() throws Exception {
+ assertNotNull(tokenEdit);
+ assertNotNull(authButton);
+ final String dummyToken = "deadbeef";
+ activity.runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ tokenEdit.setText(dummyToken);
+ authButton.performClick();
+ }
+ });
+ getInstrumentation().waitForIdleSync();
+
+ String token = Token.load(activity);
+ assertEquals(dummyToken, token);
+ }
+}
\ No newline at end of file