Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1d7f45d8 authored by Sunny Goyal's avatar Sunny Goyal
Browse files

Fixing various tests

> Migrating UI tests to AndroidJUnit4 for better support
> Removing obsolete RotationPreference test
> Fixing broken FileLogTest and AndroidJUnit4
> Removing InvariantDeviceProfileTest as it does not work well with
  resource overlays

Change-Id: I0abb1df6765d76d86c1c6c84e8ac35eb9a6bcdaa
parent f880ecca
Loading
Loading
Loading
Loading
+0 −4
Original line number Diff line number Diff line
@@ -71,10 +71,6 @@ public class DefaultAppSearchAlgorithm implements SearchAlgorithm {
        return result;
    }

    public static boolean matches(AppInfo info, String query) {
        return matches(info, query, StringMatcher.getInstance());
    }

    public static boolean matches(AppInfo info, String query, StringMatcher matcher) {
        int queryLength = query.length();

+6 −4
Original line number Diff line number Diff line
@@ -29,6 +29,8 @@ import java.util.concurrent.TimeUnit;
 */
public final class FileLog {

    protected static final boolean ENABLED =
            FeatureFlags.IS_DOGFOOD_BUILD || Utilities.IS_DEBUG_DEVICE;
    private static final String FILE_NAME_PREFIX = "log-";
    private static final DateFormat DATE_FORMAT =
            DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT);
@@ -39,7 +41,7 @@ public final class FileLog {
    private static File sLogsDirectory = null;

    public static void setDir(File logsDir) {
        if (FeatureFlags.IS_DOGFOOD_BUILD || Utilities.IS_DEBUG_DEVICE) {
        if (ENABLED) {
            synchronized (DATE_FORMAT) {
                // If the target directory changes, stop any active thread.
                if (sHandler != null && !logsDir.equals(sLogsDirectory)) {
@@ -76,7 +78,7 @@ public final class FileLog {
    }

    public static void print(String tag, String msg, Exception e) {
        if (!FeatureFlags.IS_DOGFOOD_BUILD) {
        if (!ENABLED) {
            return;
        }
        String out = String.format("%s %s %s", DATE_FORMAT.format(new Date()), tag, msg);
@@ -102,7 +104,7 @@ public final class FileLog {
     * @param out if not null, all the persisted logs are copied to the writer.
     */
    public static void flushAll(PrintWriter out) throws InterruptedException {
        if (!FeatureFlags.IS_DOGFOOD_BUILD) {
        if (!ENABLED) {
            return;
        }
        CountDownLatch latch = new CountDownLatch(1);
@@ -135,7 +137,7 @@ public final class FileLog {

        @Override
        public boolean handleMessage(Message msg) {
            if (sLogsDirectory == null || !FeatureFlags.IS_DOGFOOD_BUILD) {
            if (sLogsDirectory == null || !ENABLED) {
                return true;
            }
            switch (msg.what) {
+0 −119
Original line number Diff line number Diff line
/*
 * Copyright (C) 2015 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 */
package com.android.launcher3;

import android.content.res.Resources;
import android.graphics.Point;
import android.graphics.PointF;
import android.graphics.Rect;
import android.test.AndroidTestCase;
import android.test.suitebuilder.annotation.SmallTest;
import android.util.Log;

import java.util.ArrayList;

/**
 * Tests the {@link DeviceProfile} and {@link InvariantDeviceProfile}.
 */
@SmallTest
public class InvariantDeviceProfileTest extends AndroidTestCase {

    private static final String TAG = "DeviceProfileTest";
    private static final boolean DEBUG = false;

    private InvariantDeviceProfile mInvariantProfile;
    private ArrayList<InvariantDeviceProfile> mPredefinedDeviceProfiles;

    @Override
    protected void setUp() throws Exception {
        super.setUp();
        mInvariantProfile = new InvariantDeviceProfile(getContext());
        mPredefinedDeviceProfiles = mInvariantProfile.getPredefinedDeviceProfiles(getContext());
    }

    @Override
    protected void tearDown() throws Exception {
        // Nothing to tear down as this class only tests static methods.
    }

    public void testFindClosestDeviceProfile2() {
        for (InvariantDeviceProfile idf: mPredefinedDeviceProfiles) {
            ArrayList<InvariantDeviceProfile> predefinedProfilesCopy =
                    new ArrayList<>(mPredefinedDeviceProfiles);
            ArrayList<InvariantDeviceProfile> closestProfiles =
                    mInvariantProfile.findClosestDeviceProfiles(
                            idf.minWidthDps, idf.minHeightDps, predefinedProfilesCopy
                    );
            assertTrue(closestProfiles.get(0).equals(idf));
        }
    }

    /**
     * Used to print out how the invDistWeightedInterpolate works between device profiles to
     * tweak the two constants that control how the interpolation curve is shaped.
     */
    public void testInvInterpolation() {

        InvariantDeviceProfile p1 = mPredefinedDeviceProfiles.get(7); // e.g., Large Phone
        InvariantDeviceProfile p2 = mPredefinedDeviceProfiles.get(8); // e.g., Nexus 7

        ArrayList<PointF> pts = createInterpolatedPoints(
                new PointF(p1.minWidthDps, p1.minHeightDps),
                new PointF(p2.minWidthDps, p2.minHeightDps),
                20f);

        for (int i = 0; i < pts.size(); i++) {
            ArrayList<InvariantDeviceProfile> closestProfiles =
                    mInvariantProfile.findClosestDeviceProfiles(
                            pts.get(i).x, pts.get(i).y, mPredefinedDeviceProfiles);
            InvariantDeviceProfile result =
                    mInvariantProfile.invDistWeightedInterpolate(
                            pts.get(i).x, pts.get(i).y, closestProfiles);
            if (DEBUG) {
                Log.d(TAG, String.format("width x height = (%f, %f)] iconSize = %f",
                        pts.get(i).x, pts.get(i).y, result.iconSize));
            }
        }
    }

    private ArrayList<PointF> createInterpolatedPoints(PointF a, PointF b, float numPts) {
        ArrayList<PointF> result = new ArrayList<PointF>();
        result.add(a);
        for (float i = 1; i < numPts; i = i + 1.0f) {
            result.add(new PointF((b.x * i +  a.x * (numPts - i)) / numPts,
                    (b.y * i + a.y * (numPts - i)) / numPts));
        }
        result.add(b);
        return result;
    }

    /**
     * Ensures that system calls (e.g., WindowManager, DisplayMetrics) that require contexts are
     * properly working to generate minimum width and height of the display.
     */
    public void test_hammerhead() {
        if (!android.os.Build.DEVICE.equals("hammerhead")) {
            return;
        }
        assertEquals(4, mInvariantProfile.numRows);
        assertEquals(4, mInvariantProfile.numColumns);
        assertEquals(5, mInvariantProfile.numHotseatIcons);
    }

    // Add more tests for other devices, however, running them once on a single device is enough
    // for verifying that for a platform version, the WindowManager and DisplayMetrics is
    // working as intended.
}
+47 −54
Original line number Diff line number Diff line
@@ -16,85 +16,78 @@
package com.android.launcher3.allapps.search;

import android.content.ComponentName;
import android.test.InstrumentationTestCase;
import android.support.test.runner.AndroidJUnit4;

import com.android.launcher3.AppInfo;
import com.android.launcher3.Utilities;

import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;

import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;

/**
 * Unit tests for {@link DefaultAppSearchAlgorithm}
 */
public class DefaultAppSearchAlgorithmTest extends InstrumentationTestCase {

    private List<AppInfo> mAppsList;
    private DefaultAppSearchAlgorithm mAlgorithm;

    @Override
    protected void setUp() throws Exception {
        super.setUp();
        mAppsList = new ArrayList<>();
        getInstrumentation().runOnMainSync(new Runnable() {
            @Override
            public void run() {
                mAlgorithm = new DefaultAppSearchAlgorithm(mAppsList);
            }
        });
    }
@RunWith(AndroidJUnit4.class)
public class DefaultAppSearchAlgorithmTest {
    private static final DefaultAppSearchAlgorithm.StringMatcher MATCHER =
            DefaultAppSearchAlgorithm.StringMatcher.getInstance();

    @Test
    public void testMatches() {
        assertTrue(mAlgorithm.matches(getInfo("white cow"), "cow"));
        assertTrue(mAlgorithm.matches(getInfo("whiteCow"), "cow"));
        assertTrue(mAlgorithm.matches(getInfo("whiteCOW"), "cow"));
        assertTrue(mAlgorithm.matches(getInfo("whitecowCOW"), "cow"));
        assertTrue(mAlgorithm.matches(getInfo("white2cow"), "cow"));
        assertTrue(DefaultAppSearchAlgorithm.matches(getInfo("white cow"), "cow", MATCHER));
        assertTrue(DefaultAppSearchAlgorithm.matches(getInfo("whiteCow"), "cow", MATCHER));
        assertTrue(DefaultAppSearchAlgorithm.matches(getInfo("whiteCOW"), "cow", MATCHER));
        assertTrue(DefaultAppSearchAlgorithm.matches(getInfo("whitecowCOW"), "cow", MATCHER));
        assertTrue(DefaultAppSearchAlgorithm.matches(getInfo("white2cow"), "cow", MATCHER));

        assertFalse(mAlgorithm.matches(getInfo("whitecow"), "cow"));
        assertFalse(mAlgorithm.matches(getInfo("whitEcow"), "cow"));
        assertFalse(DefaultAppSearchAlgorithm.matches(getInfo("whitecow"), "cow", MATCHER));
        assertFalse(DefaultAppSearchAlgorithm.matches(getInfo("whitEcow"), "cow", MATCHER));

        assertTrue(mAlgorithm.matches(getInfo("whitecowCow"), "cow"));
        assertTrue(mAlgorithm.matches(getInfo("whitecow cow"), "cow"));
        assertFalse(mAlgorithm.matches(getInfo("whitecowcow"), "cow"));
        assertFalse(mAlgorithm.matches(getInfo("whit ecowcow"), "cow"));
        assertTrue(DefaultAppSearchAlgorithm.matches(getInfo("whitecowCow"), "cow", MATCHER));
        assertTrue(DefaultAppSearchAlgorithm.matches(getInfo("whitecow cow"), "cow", MATCHER));
        assertFalse(DefaultAppSearchAlgorithm.matches(getInfo("whitecowcow"), "cow", MATCHER));
        assertFalse(DefaultAppSearchAlgorithm.matches(getInfo("whit ecowcow"), "cow", MATCHER));

        assertTrue(mAlgorithm.matches(getInfo("cats&dogs"), "dog"));
        assertTrue(mAlgorithm.matches(getInfo("cats&Dogs"), "dog"));
        assertTrue(mAlgorithm.matches(getInfo("cats&Dogs"), "&"));
        assertTrue(DefaultAppSearchAlgorithm.matches(getInfo("cats&dogs"), "dog", MATCHER));
        assertTrue(DefaultAppSearchAlgorithm.matches(getInfo("cats&Dogs"), "dog", MATCHER));
        assertTrue(DefaultAppSearchAlgorithm.matches(getInfo("cats&Dogs"), "&", MATCHER));

        assertTrue(mAlgorithm.matches(getInfo("2+43"), "43"));
        assertFalse(mAlgorithm.matches(getInfo("2+43"), "3"));
        assertTrue(DefaultAppSearchAlgorithm.matches(getInfo("2+43"), "43", MATCHER));
        assertFalse(DefaultAppSearchAlgorithm.matches(getInfo("2+43"), "3", MATCHER));

        assertTrue(mAlgorithm.matches(getInfo("Q"), "q"));
        assertTrue(mAlgorithm.matches(getInfo("  Q"), "q"));
        assertTrue(DefaultAppSearchAlgorithm.matches(getInfo("Q"), "q", MATCHER));
        assertTrue(DefaultAppSearchAlgorithm.matches(getInfo("  Q"), "q", MATCHER));

        // match lower case words
        assertTrue(mAlgorithm.matches(getInfo("elephant"), "e"));
        assertTrue(DefaultAppSearchAlgorithm.matches(getInfo("elephant"), "e", MATCHER));

        assertTrue(mAlgorithm.matches(getInfo("电子邮件"), "电"));
        assertTrue(mAlgorithm.matches(getInfo("电子邮件"), "电子"));
        assertFalse(mAlgorithm.matches(getInfo("电子邮件"), "子"));
        assertFalse(mAlgorithm.matches(getInfo("电子邮件"), "邮件"));
        assertTrue(DefaultAppSearchAlgorithm.matches(getInfo("电子邮件"), "电", MATCHER));
        assertTrue(DefaultAppSearchAlgorithm.matches(getInfo("电子邮件"), "电子", MATCHER));
        assertFalse(DefaultAppSearchAlgorithm.matches(getInfo("电子邮件"), "子", MATCHER));
        assertFalse(DefaultAppSearchAlgorithm.matches(getInfo("电子邮件"), "邮件", MATCHER));

        assertFalse(mAlgorithm.matches(getInfo("Bot"), "ba"));
        assertFalse(mAlgorithm.matches(getInfo("bot"), "ba"));
        assertFalse(DefaultAppSearchAlgorithm.matches(getInfo("Bot"), "ba", MATCHER));
        assertFalse(DefaultAppSearchAlgorithm.matches(getInfo("bot"), "ba", MATCHER));
    }

    @Test
    public void testMatchesVN() {
        if (!Utilities.ATLEAST_NOUGAT) {
            return;
        }
        assertTrue(mAlgorithm.matches(getInfo("다운로드"), "다"));
        assertTrue(mAlgorithm.matches(getInfo("드라이브"), "드"));
        assertTrue(mAlgorithm.matches(getInfo("다운로드 드라이브"), "ㄷ"));
        assertTrue(mAlgorithm.matches(getInfo("운로 드라이브"), "ㄷ"));
        assertTrue(mAlgorithm.matches(getInfo("abc"), "åbç"));
        assertTrue(mAlgorithm.matches(getInfo("Alpha"), "ål"));

        assertFalse(mAlgorithm.matches(getInfo("다운로드 드라이브"), "ㄷㄷ"));
        assertFalse(mAlgorithm.matches(getInfo("로드라이브"), "ㄷ"));
        assertFalse(mAlgorithm.matches(getInfo("abc"), "åç"));
        assertTrue(DefaultAppSearchAlgorithm.matches(getInfo("다운로드"), "다", MATCHER));
        assertTrue(DefaultAppSearchAlgorithm.matches(getInfo("드라이브"), "드", MATCHER));
        assertTrue(DefaultAppSearchAlgorithm.matches(getInfo("다운로드 드라이브"), "ㄷ", MATCHER));
        assertTrue(DefaultAppSearchAlgorithm.matches(getInfo("운로 드라이브"), "ㄷ", MATCHER));
        assertTrue(DefaultAppSearchAlgorithm.matches(getInfo("abc"), "åbç", MATCHER));
        assertTrue(DefaultAppSearchAlgorithm.matches(getInfo("Alpha"), "ål", MATCHER));

        assertFalse(DefaultAppSearchAlgorithm.matches(getInfo("다운로드 드라이브"), "ㄷㄷ", MATCHER));
        assertFalse(DefaultAppSearchAlgorithm.matches(getInfo("로드라이브"), "ㄷ", MATCHER));
        assertFalse(DefaultAppSearchAlgorithm.matches(getInfo("abc"), "åç", MATCHER));
    }

    private AppInfo getInfo(String title) {
+6 −0
Original line number Diff line number Diff line
@@ -37,6 +37,9 @@ public class FileLogTest extends AndroidTestCase {
    }

    public void testPrintLog() throws Exception {
        if (!FileLog.ENABLED) {
            return;
        }
        FileLog.print("Testing", "hoolalala");
        StringWriter writer = new StringWriter();
        FileLog.flushAll(new PrintWriter(writer));
@@ -54,6 +57,9 @@ public class FileLogTest extends AndroidTestCase {
    }

    public void testOldFileTruncated() throws Exception {
        if (!FileLog.ENABLED) {
            return;
        }
        FileLog.print("Testing", "hoolalala");
        StringWriter writer = new StringWriter();
        FileLog.flushAll(new PrintWriter(writer));
Loading