diff --git a/build.gradle b/build.gradle index d971755688..44f5b7c528 100644 --- a/build.gradle +++ b/build.gradle @@ -3,7 +3,7 @@ buildscript { mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:1.3.0' + classpath 'com.android.tools.build:gradle:+' classpath 'com.google.protobuf:protobuf-gradle-plugin:0.7.0' } } @@ -21,6 +21,9 @@ android { targetSdkVersion 23 versionCode 1 versionName "1.0" + + testApplicationId "com.android.launcher3.tests" + testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { debug { @@ -30,10 +33,16 @@ android { sourceSets { main { res.srcDirs = ['res', 'WallpaperPicker/res'] - main.java.srcDirs = ['src', 'WallpaperPicker/src'] + java.srcDirs = ['src', 'WallpaperPicker/src'] manifest.srcFile 'AndroidManifest.xml' proto.srcDirs 'protos/' } + + androidTest { + java.srcDirs = ['tests/src'] + res.srcDirs = ['tests/res'] + manifest.srcFile "tests/AndroidManifest.xml" + } } } @@ -42,9 +51,13 @@ repositories { } dependencies { - compile 'com.android.support:support-v4:+' - compile 'com.android.support:recyclerview-v7:+' + compile 'com.android.support:support-v4:23.0.1' + compile 'com.android.support:recyclerview-v7:23.0.1' compile 'com.google.protobuf.nano:protobuf-javanano:3.0.0-alpha-2' + + testCompile 'junit:junit:4.12' + androidTestCompile 'com.android.support.test:runner:+' + androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:+' } protobuf { diff --git a/tests/AndroidManifest.xml b/tests/AndroidManifest.xml index 42ae5a38a7..8acc5e90cd 100644 --- a/tests/AndroidManifest.xml +++ b/tests/AndroidManifest.xml @@ -1,4 +1,4 @@ - + + + + android:targetPackage="com.android.launcher3" > diff --git a/tests/src/com/android/launcher3/InvariantDeviceProfileTest.java b/tests/src/com/android/launcher3/InvariantDeviceProfileTest.java index 1bc7c1190f..a99ae4f958 100644 --- a/tests/src/com/android/launcher3/InvariantDeviceProfileTest.java +++ b/tests/src/com/android/launcher3/InvariantDeviceProfileTest.java @@ -52,9 +52,12 @@ public class InvariantDeviceProfileTest extends AndroidTestCase { public void testFindClosestDeviceProfile2() { for (InvariantDeviceProfile idf: mPredefinedDeviceProfiles) { + ArrayList predefinedProfilesCopy = + new ArrayList<>(mPredefinedDeviceProfiles); ArrayList closestProfiles = mInvariantProfile.findClosestDeviceProfiles( - idf.minWidthDps, idf.minHeightDps, mPredefinedDeviceProfiles); + idf.minWidthDps, idf.minHeightDps, predefinedProfilesCopy + ); assertTrue(closestProfiles.get(0).equals(idf)); } } diff --git a/tests/src/com/android/launcher3/RotationPreferenceTest.java b/tests/src/com/android/launcher3/RotationPreferenceTest.java new file mode 100644 index 0000000000..5f63475579 --- /dev/null +++ b/tests/src/com/android/launcher3/RotationPreferenceTest.java @@ -0,0 +1,87 @@ +package com.android.launcher3; + +import android.content.Context; +import android.content.Intent; +import android.content.SharedPreferences; +import android.graphics.Rect; +import android.support.test.uiautomator.By; +import android.support.test.uiautomator.UiDevice; +import android.support.test.uiautomator.Until; +import android.test.InstrumentationTestCase; + +/** + * Test for auto rotate preference. + */ +public class RotationPreferenceTest extends InstrumentationTestCase { + + private UiDevice mDevice; + private Context mTargetContext; + private String mTargetPackage; + + private SharedPreferences mPrefs; + private boolean mOriginalRotationValue; + + @Override + protected void setUp() throws Exception { + super.setUp(); + + mDevice = UiDevice.getInstance(getInstrumentation()); + mTargetContext = getInstrumentation().getTargetContext(); + mTargetPackage = mTargetContext.getPackageName(); + mPrefs = mTargetContext.getSharedPreferences( + LauncherAppState.getSharedPreferencesKey(), Context.MODE_PRIVATE); + mOriginalRotationValue = mPrefs.getBoolean(Utilities.ALLOW_ROTATION_PREFERENCE_KEY, false); + } + + @Override + protected void tearDown() throws Exception { + setRotationEnabled(mOriginalRotationValue); + super.tearDown(); + } + + public void testRotation_disabled() throws Exception { + if (mTargetContext.getResources().getBoolean(R.bool.allow_rotation)) { + // This is a tablet. The test is only valid to mobile devices. + return; + } + + setRotationEnabled(false); + mDevice.setOrientationRight(); + goToLauncher(); + + Rect hotseat = getHotseatBounds(); + assertTrue(hotseat.width() > hotseat.height()); + } + + public void testRotation_enabled() throws Exception { + if (mTargetContext.getResources().getBoolean(R.bool.allow_rotation)) { + // This is a tablet. The test is only valid to mobile devices. + return; + } + + setRotationEnabled(true); + mDevice.setOrientationRight(); + goToLauncher(); + + Rect hotseat = getHotseatBounds(); + assertTrue(hotseat.width() < hotseat.height()); + } + + private void goToLauncher() { + Intent homeIntent = new Intent(Intent.ACTION_MAIN) + .addCategory(Intent.CATEGORY_HOME) + .setPackage(mTargetPackage) + .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + getInstrumentation().getContext().startActivity(homeIntent); + mDevice.wait(Until.hasObject(By.pkg(mTargetPackage).depth(0)), 3000); + } + + private void setRotationEnabled(boolean enabled) { + mPrefs.edit().putBoolean(Utilities.ALLOW_ROTATION_PREFERENCE_KEY, enabled).commit(); + } + + private Rect getHotseatBounds() { + mDevice.wait(Until.hasObject(By.res(mTargetPackage, "hotseat")), 3000); + return mDevice.findObject(By.res(mTargetPackage, "hotseat")).getVisibleBounds(); + } +}