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

Commit f92bd42a authored by Guang Zhu's avatar Guang Zhu
Browse files

Added a new operation mode where user can launch all tests under a folder from test app ui.

parent 61ab270c
Loading
Loading
Loading
Loading
+51 −22
Original line number Diff line number Diff line
@@ -23,7 +23,9 @@ import java.util.List;
import java.util.Map;
import java.io.File;

import android.app.AlertDialog;
import android.app.ListActivity;
import android.content.DialogInterface;
import android.view.KeyEvent;
import android.view.View;
import android.widget.ListView;
@@ -118,17 +120,41 @@ public abstract class FileList extends ListActivity
    protected void onListItemClick(ListView l, View v, int position, long id)
    {
        Map map = (Map) l.getItemAtPosition(position);
    	String path = (String)map.get("path");
        final String path = (String)map.get("path");

        if ((new File(path)).isDirectory()) {
            final CharSequence[] items = {"Open", "Run"};
            AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.setTitle("Select an Action");
            builder.setSingleChoiceItems(items, -1,
                    new DialogInterface.OnClickListener(){
                public void onClick(DialogInterface dialog, int which) {
                    switch (which) {
                        case OPEN_DIRECTORY:
                            dialog.dismiss();
                            mPath = path;
                            mFocusFile = null;
                            updateList();
                            break;
                        case RUN_TESTS:
                            dialog.dismiss();
                            processDirectory(path, false);
                            break;
                    }
                }
            });
            builder.create().show();
        } else {
            processFile(path, false);
        }
    }

    /*
     * This function is called when the user has selected a directory in the
     * list and wants to perform an action on it instead of navigating into
     * the directory.
     */
    abstract void processDirectory(String path, boolean selection);
    /*
     * This function is called when the user has selected a file in the
     * file list. The selected file could be a file or a directory.
@@ -164,4 +190,7 @@ public abstract class FileList extends ListActivity
    protected String mFocusFile;
    protected int mFocusIndex;
    
    private final static int OPEN_DIRECTORY = 0;
    private final static int RUN_TESTS = 1;

}
+80 −0
Original line number Diff line number Diff line
package com.android.dumprendertree;

import android.util.Log;

import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;

public class FsUtils {

    private static final String LOGTAG = "FsUtils";
    private FsUtils() {
        //no creation of instances
    }

    public static void findLayoutTestsRecursively(BufferedOutputStream bos,
            String dir) throws IOException {
        Log.v(LOGTAG, "Searching tests under " + dir);

        File d = new File(dir);
        if (!d.isDirectory()) {
            throw new AssertionError("A directory expected, but got " + dir);
        }

        String[] files = d.list();
        for (int i = 0; i < files.length; i++) {
            String s = dir + "/" + files[i];
            if (FileFilter.ignoreTest(s)) {
                Log.v(LOGTAG, "  Ignoring: " + s);
                continue;
            }
            if (s.toLowerCase().endsWith(".html")
                    || s.toLowerCase().endsWith(".xml")) {
                bos.write(s.getBytes());
                bos.write('\n');
                continue;
            }

            File f = new File(s);
            if (f.isDirectory()) {
                findLayoutTestsRecursively(bos, s);
                continue;
            }

            Log.v(LOGTAG, "Skipping " + s);
        }
    }

    public static void updateTestStatus(String statusFile, String s) {
        try {
            BufferedOutputStream bos = new BufferedOutputStream(
                    new FileOutputStream(statusFile));
            bos.write(s.getBytes());
            bos.close();
        } catch (Exception e) {
            Log.e(LOGTAG, "Cannot update file " + statusFile);
        }
    }

    public static String readTestStatus(String statusFile) {
        // read out the test name it stopped last time.
        String status = null;
        File testStatusFile = new File(statusFile);
        if(testStatusFile.exists()) {
            try {
                BufferedReader inReader = new BufferedReader(
                        new FileReader(testStatusFile));
                status = inReader.readLine();
                inReader.close();
            } catch (IOException e) {
                Log.e(LOGTAG, "Error reading test status.", e);
            }
        }
        return status;
    }

}
+5 −50
Original line number Diff line number Diff line
@@ -178,15 +178,13 @@ public class LayoutTestsAutoTest extends ActivityInstrumentationTestCase2<TestSh
    private void resumeTestList() {
        // read out the test name it stoped last time.
        try {
            BufferedReader inReader = new BufferedReader(new FileReader(TEST_STATUS_FILE));
            String line = inReader.readLine();
            String line = FsUtils.readTestStatus(TEST_STATUS_FILE);
            for (int i = 0; i < mTestList.size(); i++) {
                if (mTestList.elementAt(i).equals(line)) {
                    mTestList = new Vector<String>(mTestList.subList(i+1, mTestList.size()));
                    break;
                }
            }
            inReader.close();
        } catch (Exception e) {
            Log.e(LOGTAG, "Error reading " + TEST_STATUS_FILE);
        }
@@ -205,17 +203,6 @@ public class LayoutTestsAutoTest extends ActivityInstrumentationTestCase2<TestSh
        }
    }

    private void updateTestStatus(String s) {
        // Write TEST_STATUS_FILE
        try {
            BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(TEST_STATUS_FILE));
            bos.write(s.getBytes());
            bos.close();
        } catch (Exception e) {
            Log.e(LOGTAG, "Cannot update file " + TEST_STATUS_FILE);
        }
    }
    
    private String getResultFile(String test) {
        String shortName = test.substring(0, test.lastIndexOf('.'));
        // Write actual results to result directory.
@@ -392,12 +379,12 @@ public class LayoutTestsAutoTest extends ActivityInstrumentationTestCase2<TestSh
        // Run tests.
        for (int i = 0; i < mTestList.size(); i++) {
            String s = mTestList.elementAt(i);
            updateTestStatus(s);
            FsUtils.updateTestStatus(TEST_STATUS_FILE, s);
            // Run tests
            runTestAndWaitUntilDone(activity, s, runner.mTimeoutInMillis);
        }

        updateTestStatus("#DONE");
        FsUtils.updateTestStatus(TEST_STATUS_FILE, "#DONE");
        
        activity.finish();
    }
@@ -424,7 +411,7 @@ public class LayoutTestsAutoTest extends ActivityInstrumentationTestCase2<TestSh
        try {
            File tests_list = new File(LAYOUT_TESTS_LIST_FILE);
            BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(tests_list, false));
            findTestsRecursively(bos, getTestPath());
            FsUtils.findLayoutTestsRecursively(bos, getTestPath());
            bos.flush();
            bos.close();
       } catch (Exception e) {
@@ -432,38 +419,6 @@ public class LayoutTestsAutoTest extends ActivityInstrumentationTestCase2<TestSh
       }
    }

    private void findTestsRecursively(BufferedOutputStream bos, String dir) throws IOException {
         Log.v(LOGTAG, "Searching tests under " + dir);
         
         File d = new File(dir);
         if (!d.isDirectory()) {
             throw new AssertionError("A directory expected, but got " + dir);
         }
         
         String[] files = d.list();
         for (int i = 0; i < files.length; i++) {
             String s = dir + "/" + files[i];
             if (FileFilter.ignoreTest(s)) {
                 Log.v(LOGTAG, "  Ignoring: " + s);
                 continue;
             }
             if (s.toLowerCase().endsWith(".html") 
                 || s.toLowerCase().endsWith(".xml")) {
                 bos.write(s.getBytes());
                 bos.write('\n');
                 continue;
             }
             
             File f = new File(s);
             if (f.isDirectory()) {
                 findTestsRecursively(bos, s);
                 continue;
             }
             
             Log.v(LOGTAG, "Skipping " + s);
        }
    }
    
    // Running all the layout tests at once sometimes
    // causes the dumprendertree to run out of memory.
    // So, additional tests are added to run the tests
+34 −8
Original line number Diff line number Diff line
@@ -17,16 +17,20 @@
package com.android.dumprendertree;

import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;

public class Menu extends FileList {

    public void onCreate(Bundle icicle) 
    {
    private static final int MENU_START = 0x01;
    private static String LOGTAG = "MenuActivity";
    static final String LAYOUT_TESTS_LIST_FILE = "/sdcard/android/layout_tests_list.txt";

    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
    }

@@ -42,13 +46,35 @@ public class Menu extends FileList {
    	return false;
    }

    void processFile(String filename, boolean selection)
    {        
    void processFile(String filename, boolean selection) {
        Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.setClass(this, TestShellActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
        intent.putExtra(TestShellActivity.TEST_URL, "file://" + filename);
        startActivity(intent);
    }

    @Override
    void processDirectory(String path, boolean selection) {
        generateTestList(path);
        Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.setClass(this, TestShellActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
        intent.putExtra(TestShellActivity.UI_AUTO_TEST, LAYOUT_TESTS_LIST_FILE);
        startActivity(intent);
    }

    private void generateTestList(String path) {
        try {
            File tests_list = new File(LAYOUT_TESTS_LIST_FILE);
            BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(tests_list, false));
            FsUtils.findLayoutTestsRecursively(bos, path);
            bos.flush();
            bos.close();
       } catch (Exception e) {
           Log.e(LOGTAG, "Error when creating test list: " + e.getMessage());
       }
    }

}
+3 −32
Original line number Diff line number Diff line
@@ -45,7 +45,7 @@ public class ReliabilityTest extends ActivityInstrumentationTestCase2<Reliabilit

        //always try to resume first, hence cleaning up status will be the
        //responsibility of driver scripts
        String lastUrl = readTestStatus();
        String lastUrl = FsUtils.readTestStatus(TEST_STATUS_FILE);
        if(lastUrl != null && !TEST_DONE.equals(lastUrl))
            fastForward(listReader, lastUrl);

@@ -62,7 +62,7 @@ public class ReliabilityTest extends ActivityInstrumentationTestCase2<Reliabilit
                continue;
            start = System.currentTimeMillis();
            Log.v(LOGTAG, "Testing URL: " + url);
            updateTestStatus(url);
            FsUtils.updateTestStatus(TEST_STATUS_FILE, url);
            activity.reset();
            //use message to send new URL to avoid interacting with
            //WebView in non-UI thread
@@ -92,7 +92,7 @@ public class ReliabilityTest extends ActivityInstrumentationTestCase2<Reliabilit
            System.gc();
            System.gc();
        }
        updateTestStatus(TEST_DONE);
        FsUtils.updateTestStatus(TEST_STATUS_FILE, TEST_DONE);
        activity.finish();
        listReader.close();
    }
@@ -122,35 +122,6 @@ public class ReliabilityTest extends ActivityInstrumentationTestCase2<Reliabilit
        }
    }

    private void updateTestStatus(String s) {
        // write last tested url into status file
        try {
            BufferedOutputStream bos = new BufferedOutputStream(
                    new FileOutputStream(TEST_STATUS_FILE));
            bos.write(s.getBytes());
            bos.close();
        } catch (IOException e) {
            Log.e(LOGTAG, "Cannot update file " + TEST_STATUS_FILE, e);
        }
    }

    private String readTestStatus() {
        // read out the test name it stopped last time.
        String status = null;
        File testStatusFile = new File(TEST_STATUS_FILE);
        if(testStatusFile.exists()) {
            try {
                BufferedReader inReader = new BufferedReader(
                        new FileReader(testStatusFile));
                status = inReader.readLine();
                inReader.close();
            } catch (IOException e) {
                Log.e(LOGTAG, "Error reading test status.", e);
            }
        }
        return status;
    }

    private void fastForward(BufferedReader testListReader, String lastUrl) {
        //fastforward the BufferedReader to the position right after last url
        if(lastUrl == null)
Loading