package net.rdrei.android.scdl2.test; import android.app.Activity; import android.content.Context; import android.os.Environment; import android.preference.EditTextPreference; import android.preference.ListPreference; import android.preference.Preference; import android.widget.EditText; import com.google.android.gms.analytics.Tracker; import com.google.inject.AbstractModule; import com.google.inject.Inject; import net.rdrei.android.scdl2.ApplicationPreferences; import net.rdrei.android.scdl2.PreferenceManagerWrapper; import net.rdrei.android.scdl2.ui.DownloadPreferencesDelegate; import net.rdrei.android.scdl2.ui.DownloadPreferencesDelegateFactory; import net.rdrei.android.scdl2.ui.DownloadPreferencesDelegateImpl; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.Robolectric; import org.robolectric.RobolectricTestRunner; import org.robolectric.annotation.Config; import org.robolectric.annotation.Implementation; import org.robolectric.annotation.Implements; import org.robolectric.shadows.ShadowDialogPreference; import org.robolectric.shadows.ShadowEnvironment; import java.io.File; import java.util.HashMap; import static org.hamcrest.Matchers.greaterThan; import static org.junit.Assert.assertThat; @Config(shadows = {DownloadPreferencesDelegateTest.ShadowEnvironment2.class, DownloadPreferencesDelegateTest.ShadowEditTextPreference.class}) @RunWith(RobolectricTestRunner.class) public class DownloadPreferencesDelegateTest { @Inject private DownloadPreferencesDelegateFactory mDelegateFactory; @Mock Tracker mTracker; private FakePreferenceManagerWrapperImpl mPreferenceManager; private DownloadPreferencesDelegate mDelegate; private Activity mActivity; @Before public void setUp() { MockitoAnnotations.initMocks(this); mActivity = Robolectric.buildActivity(Activity.class).create().get(); TestHelper.overridenInjector(this, new AbstractModule() { @Override protected void configure() { bind(Tracker.class).toInstance(mTracker); } }); mPreferenceManager = new FakePreferenceManagerWrapperImpl(mActivity); mPreferenceManager.preferences.put(ApplicationPreferences.KEY_STORAGE_CUSTOM_PATH, new EditTextPreference(mActivity)); mPreferenceManager.preferences.put(ApplicationPreferences.KEY_STORAGE_TYPE, new ListPreference(mActivity)); mDelegate = mDelegateFactory.create(mPreferenceManager); } @Test public void testSmokeFreeExternalStorage() { long storage = DownloadPreferencesDelegateImpl.getFreeExternalStorage(); assertThat(storage, greaterThan(0l)); } @Test public void testPreferenceEditSetup() { mDelegate.onCreate(null); mPreferenceManager.preferences.get(ApplicationPreferences.KEY_STORAGE_TYPE); } private static class FakePreferenceManagerWrapperImpl implements PreferenceManagerWrapper { public HashMap<CharSequence, Preference> preferences; private Context mContext; public FakePreferenceManagerWrapperImpl(Context context) { this.preferences = new HashMap<CharSequence, Preference>(2); this.mContext = context; } @Override public Preference findPreference(CharSequence key) { if (!preferences.containsKey(key)) { return new ListPreference(this.mContext); } return preferences.get(key); } } @Implements(Environment.class) public static class ShadowEnvironment2 extends ShadowEnvironment { @Implementation public static File getDataDirectory() { return new File("/tmp"); } } @Implements(EditTextPreference.class) public static class ShadowEditTextPreference extends ShadowDialogPreference { @Implementation public EditText getEditText() { return new EditText(getContext()); } } }