diff options
author | Maksymilian Osowski <maxosowski@google.com> | 2010-08-23 16:57:27 +0100 |
---|---|---|
committer | Maksymilian Osowski <maxosowski@google.com> | 2010-09-01 11:59:16 +0100 |
commit | c6a341d34c690c2b5948977cd803ec2ff668c4b7 (patch) | |
tree | 04fb4adccb3f8c6bc9fa552aafa505b2b3f98eed /tests | |
parent | 5c769a47aeb399324cca7f5d449331a3bba85b52 (diff) | |
download | frameworks_base-c6a341d34c690c2b5948977cd803ec2ff668c4b7.zip frameworks_base-c6a341d34c690c2b5948977cd803ec2ff668c4b7.tar.gz frameworks_base-c6a341d34c690c2b5948977cd803ec2ff668c4b7.tar.bz2 |
Changed the code to use forwarding service.
Change-Id: I2504ef01270f9c8e82acbe6a4069d2b4b77b35f2
Diffstat (limited to 'tests')
8 files changed, 305 insertions, 116 deletions
diff --git a/tests/DumpRenderTree2/src/com/android/dumprendertree2/FileFilter.java b/tests/DumpRenderTree2/src/com/android/dumprendertree2/FileFilter.java index bcc8564..4f2fc77 100644 --- a/tests/DumpRenderTree2/src/com/android/dumprendertree2/FileFilter.java +++ b/tests/DumpRenderTree2/src/com/android/dumprendertree2/FileFilter.java @@ -18,11 +18,18 @@ package com.android.dumprendertree2; import android.util.Log; +import com.android.dumprendertree2.forwarder.ForwarderManager; + import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; -import java.io.FileReader; import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.StringReader; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLConnection; import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; @@ -38,6 +45,9 @@ public class FileFilter { private static final String TEST_EXPECTATIONS_TXT_PATH = "platform/android/test_expectations.txt"; + private static final String HTTP_TESTS_PATH = "http/tests/"; + private static final String SSL_PATH = "ssl/"; + private static final String TOKEN_SKIP = "SKIP"; private static final String TOKEN_IGNORE_RESULT = "IGNORE_RESULT"; private static final String TOKEN_SLOW = "SLOW"; @@ -52,7 +62,7 @@ public class FileFilter { /** It may or may not contain a trailing slash */ this.mRootDirPath = rootDirPath; - reloadConfiguration(); + loadTestExpectations(); } private static final String trimTrailingSlashIfPresent(String path) { @@ -60,74 +70,89 @@ public class FileFilter { return file.getPath(); } - public void reloadConfiguration() { - File txt_exp = new File(mRootDirPath, TEST_EXPECTATIONS_TXT_PATH); - - BufferedReader bufferedReader; + public void loadTestExpectations() { + URL url = null; try { - bufferedReader = - new BufferedReader(new FileReader(txt_exp)); - - String line; - String entry; - String[] parts; - String path; - Set<String> tokens; - Boolean skipped; - while (true) { - line = bufferedReader.readLine(); - if (line == null) { - break; - } - - /** Remove the comment and trim */ - entry = line.split("//", 2)[0].trim(); - - /** Omit empty lines, advance to next line */ - if (entry.isEmpty()) { - continue; - } - - /** Split on whitespace into path part and the rest */ - parts = entry.split("\\s", 2); - - /** At this point parts.length >= 1 */ - if (parts.length == 1) { - Log.w(LOG_TAG + "::reloadConfiguration", - "There are no options specified for the test!"); - continue; - } - - path = trimTrailingSlashIfPresent(parts[0]); - - /** Split on whitespace */ - tokens = new HashSet<String>(Arrays.asList(parts[1].split("\\s", 0))); - - /** Chose the right collections to add to */ - skipped = false; - if (tokens.contains(TOKEN_SKIP)) { - mSkipList.add(path); - skipped = true; - } + url = new URL(ForwarderManager.getHostSchemePort(false) + "LayoutTests/" + + TEST_EXPECTATIONS_TXT_PATH); + } catch (MalformedURLException e) { + assert false; + } - /** If test is on skip list we ignore any further options */ - if (skipped) { - continue; + try { + InputStream inputStream = null; + BufferedReader bufferedReader = null; + try { + bufferedReader = new BufferedReader(new StringReader(new String( + FsUtils.readDataFromUrl(url)))); + + String line; + String entry; + String[] parts; + String path; + Set<String> tokens; + Boolean skipped; + while (true) { + line = bufferedReader.readLine(); + if (line == null) { + break; + } + + /** Remove the comment and trim */ + entry = line.split("//", 2)[0].trim(); + + /** Omit empty lines, advance to next line */ + if (entry.isEmpty()) { + continue; + } + + /** Split on whitespace into path part and the rest */ + parts = entry.split("\\s", 2); + + /** At this point parts.length >= 1 */ + if (parts.length == 1) { + Log.w(LOG_TAG + "::reloadConfiguration", + "There are no options specified for the test!"); + continue; + } + + path = trimTrailingSlashIfPresent(parts[0]); + + /** Split on whitespace */ + tokens = new HashSet<String>(Arrays.asList(parts[1].split("\\s", 0))); + + /** Chose the right collections to add to */ + skipped = false; + if (tokens.contains(TOKEN_SKIP)) { + mSkipList.add(path); + skipped = true; + } + + /** If test is on skip list we ignore any further options */ + if (skipped) { + continue; + } + + if (tokens.contains(TOKEN_IGNORE_RESULT)) { + mIgnoreResultList.add(path); + } + + if (tokens.contains(TOKEN_SLOW)) { + mSlowList.add(path); + } } - - if (tokens.contains(TOKEN_IGNORE_RESULT)) { - mIgnoreResultList.add(path); + } finally { + if (inputStream != null) { + inputStream.close(); } - - if (tokens.contains(TOKEN_SLOW)) { - mSlowList.add(path); + if (bufferedReader != null) { + bufferedReader.close(); } } } catch (FileNotFoundException e) { - Log.w(LOG_TAG, "mRootDirPath=" + mRootDirPath + ": File not found: " + - txt_exp.getPath(), e); + Log.w(LOG_TAG, "reloadConfiguration(): File not found: " + e.getMessage()); } catch (IOException e) { - Log.e(LOG_TAG, "mRootDirPath=" + mRootDirPath, e); + Log.e(LOG_TAG, "url=" + url, e); } } @@ -237,6 +262,37 @@ public class FileFilter { } /** + * Return a URL of the test on the server. + * + * @param relativePath + * @return a URL of the test on the server + */ + public static URL getUrl(String relativePath) { + String urlBase = ForwarderManager.getHostSchemePort(false); + + /** + * URL is formed differently for HTTP vs non-HTTP tests, because HTTP tests + * expect different document root. See run_apache2.py and .conf file for details + */ + if (relativePath.startsWith(HTTP_TESTS_PATH)) { + relativePath = relativePath.substring(HTTP_TESTS_PATH.length()); + if (relativePath.startsWith(SSL_PATH)) { + urlBase = ForwarderManager.getHostSchemePort(true); + } + } else { + relativePath = "LayoutTests/" + relativePath; + } + + try { + return new URL(urlBase + relativePath); + } catch (MalformedURLException e) { + Log.e(LOG_TAG, "Malformed URL!", e); + } + + return null; + } + + /** * Return the path to the file relative to the tests root dir * * @param filePath diff --git a/tests/DumpRenderTree2/src/com/android/dumprendertree2/FsUtils.java b/tests/DumpRenderTree2/src/com/android/dumprendertree2/FsUtils.java index 0cfe69d..4202668 100644 --- a/tests/DumpRenderTree2/src/com/android/dumprendertree2/FsUtils.java +++ b/tests/DumpRenderTree2/src/com/android/dumprendertree2/FsUtils.java @@ -18,11 +18,23 @@ package com.android.dumprendertree2; import android.util.Log; +import com.android.dumprendertree2.forwarder.ForwarderManager; + +import java.io.BufferedReader; +import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; +import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; import java.io.OutputStream; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLConnection; +import java.util.LinkedList; +import java.util.List; /** * @@ -30,6 +42,9 @@ import java.io.OutputStream; public class FsUtils { public static final String LOG_TAG = "FsUtils"; + private static final String SCRIPT_URL = ForwarderManager.getHostSchemePort(false) + + "WebKitTools/DumpRenderTree/android/get_layout_tests_dir_contents.php"; + public static void writeDataToStorage(File file, byte[] bytes, boolean append) { Log.d(LOG_TAG, "writeDataToStorage(): " + file.getAbsolutePath()); try { @@ -37,7 +52,7 @@ public class FsUtils { try { file.getParentFile().mkdirs(); file.createNewFile(); - Log.d(LOG_TAG, "writeDataToStorage(): File created."); + Log.d(LOG_TAG, "writeDataToStorage(): File created: " + file.getAbsolutePath()); outputStream = new FileOutputStream(file, append); outputStream.write(bytes); } finally { @@ -46,7 +61,8 @@ public class FsUtils { } } } catch (IOException e) { - Log.e(LOG_TAG, "file.getAbsolutePath=" + file.getAbsolutePath(), e); + Log.e(LOG_TAG, "file.getAbsolutePath=" + file.getAbsolutePath() + " append=" + append, + e); } } @@ -62,7 +78,7 @@ public class FsUtils { FileInputStream fis = null; try { fis = new FileInputStream(file); - bytes = new byte[(int) file.length()]; + bytes = new byte[(int)file.length()]; fis.read(bytes); } finally { if (fis != null) { @@ -75,4 +91,89 @@ public class FsUtils { return bytes; } + + public static byte[] readDataFromUrl(URL url) { + if (url == null) { + Log.w(LOG_TAG, "readDataFromUrl(): url is null!"); + return null; + } + + byte[] bytes = null; + try { + InputStream inputStream = null; + ByteArrayOutputStream outputStream = null; + try { + URLConnection urlConnection = url.openConnection(); + inputStream = urlConnection.getInputStream(); + outputStream = new ByteArrayOutputStream(); + + byte[] buffer = new byte[4096]; + int length; + while ((length = inputStream.read(buffer)) > 0) { + outputStream.write(buffer, 0, length); + } + + bytes = outputStream.toByteArray(); + } finally { + if (inputStream != null) { + inputStream.close(); + } + if (outputStream != null) { + outputStream.close(); + } + } + } catch (FileNotFoundException e) { + Log.w(LOG_TAG, "readDataFromUrl(): File not found: " + e.getMessage()); + } catch (IOException e) { + Log.e(LOG_TAG, "url=" + url, e); + } + + return bytes; + } + + public static List<String> getLayoutTestsDirContents(String dirRelativePath, boolean recurse, + boolean mode) { + String modeString = (mode ? "folders" : "files"); + + List<String> results = new LinkedList<String>(); + + URL url = null; + try { + url = new URL(SCRIPT_URL + + "?path=" + dirRelativePath + + "&recurse=" + recurse + + "&mode=" + modeString); + } catch (MalformedURLException e) { + Log.e(LOG_TAG, "path=" + dirRelativePath + " recurse=" + recurse + " mode=" + + modeString, e); + return results; + } + + try { + InputStream inputStream = null; + BufferedReader bufferedReader = null; + try { + URLConnection urlConnection = url.openConnection(); + inputStream = urlConnection.getInputStream(); + bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); + + String relativePath; + while ((relativePath = bufferedReader.readLine()) != null) { + results.add(relativePath); + } + } finally { + if (inputStream != null) { + inputStream.close(); + } + if (bufferedReader != null) { + bufferedReader.close(); + } + } + } catch (IOException e) { + Log.e(LOG_TAG, "path=" + dirRelativePath + " recurse=" + recurse + " mode=" + + modeString, e); + } + + return results; + } }
\ No newline at end of file diff --git a/tests/DumpRenderTree2/src/com/android/dumprendertree2/LayoutTestsExecutor.java b/tests/DumpRenderTree2/src/com/android/dumprendertree2/LayoutTestsExecutor.java index d17ec7c..e62335e 100644 --- a/tests/DumpRenderTree2/src/com/android/dumprendertree2/LayoutTestsExecutor.java +++ b/tests/DumpRenderTree2/src/com/android/dumprendertree2/LayoutTestsExecutor.java @@ -44,6 +44,8 @@ import android.webkit.GeolocationPermissions; import android.webkit.WebStorage.QuotaUpdater; import java.io.File; +import java.net.MalformedURLException; +import java.net.URL; import java.util.HashMap; import java.util.Iterator; import java.util.List; @@ -306,6 +308,8 @@ public class LayoutTestsExecutor extends Activity { */ webView.setTouchInterval(-1); + webView.clearCache(true); + WebSettings webViewSettings = webView.getSettings(); webViewSettings.setAppCacheEnabled(true); webViewSettings.setAppCachePath(getApplicationContext().getCacheDir().getPath()); @@ -353,10 +357,11 @@ public class LayoutTestsExecutor extends Activity { } mCurrentTestRelativePath = mTestsList.remove(0); - Log.d(LOG_TAG + "::runNextTest", "Start: " + mCurrentTestRelativePath + - "(" + mCurrentTestIndex + ")"); - mCurrentTestUri = - Uri.fromFile(new File(TESTS_ROOT_DIR_PATH, mCurrentTestRelativePath)).toString(); + + Log.i(LOG_TAG, "runNextTest(): Start: " + mCurrentTestRelativePath + + " (" + mCurrentTestIndex + ")"); + + mCurrentTestUri = FileFilter.getUrl(mCurrentTestRelativePath).toString(); reset(); @@ -607,4 +612,4 @@ public class LayoutTestsExecutor extends Activity { mCurrentWebView.setMockDeviceOrientation(canProvideAlpha, alpha, canProvideBeta, beta, canProvideGamma, gamma); } -}
\ No newline at end of file +} diff --git a/tests/DumpRenderTree2/src/com/android/dumprendertree2/ManagerService.java b/tests/DumpRenderTree2/src/com/android/dumprendertree2/ManagerService.java index 951126f..c745593 100644 --- a/tests/DumpRenderTree2/src/com/android/dumprendertree2/ManagerService.java +++ b/tests/DumpRenderTree2/src/com/android/dumprendertree2/ManagerService.java @@ -243,7 +243,7 @@ public class ManagerService extends Service { int size = EXPECTED_RESULT_LOCATION_RELATIVE_DIR_PREFIXES.size(); for (int i = 0; bytes == null && i < size; i++) { relativePath = locations.get(i) + originalRelativePath; - bytes = FsUtils.readDataFromStorage(new File(TESTS_ROOT_DIR_PATH, relativePath)); + bytes = FsUtils.readDataFromUrl(FileFilter.getUrl(relativePath)); } return bytes; diff --git a/tests/DumpRenderTree2/src/com/android/dumprendertree2/TestsListPreloaderThread.java b/tests/DumpRenderTree2/src/com/android/dumprendertree2/TestsListPreloaderThread.java index 2145af7..9fa2335 100644 --- a/tests/DumpRenderTree2/src/com/android/dumprendertree2/TestsListPreloaderThread.java +++ b/tests/DumpRenderTree2/src/com/android/dumprendertree2/TestsListPreloaderThread.java @@ -18,8 +18,6 @@ package com.android.dumprendertree2; import android.os.Environment; import android.os.Message; -import android.util.Log; - import java.io.File; import java.util.ArrayList; import java.util.LinkedList; @@ -64,17 +62,10 @@ public class TestsListPreloaderThread extends Thread { @Override public void run() { - /** Check if the path is correct */ - File file = new File(TESTS_ROOT_DIR_PATH, mRelativePath); - if (!file.exists()) { - Log.e(LOG_TAG + "::run", "Path does not exist: " + mRelativePath); + if (FileFilter.isTestFile(mRelativePath)) { + mTestsList.add(mRelativePath); } else { - /** Populate the tests' list accordingly */ - if (file.isDirectory()) { - preloadTests(mRelativePath); - } else { - mTestsList.add(mRelativePath); - } + loadTestsFromUrl(mRelativePath); } mDoneMsg.obj = mTestsList; @@ -87,29 +78,29 @@ public class TestsListPreloaderThread extends Thread { * * @param dirRelativePath */ - private void preloadTests(String dirRelativePath) { + private void loadTestsFromUrl(String dirRelativePath) { LinkedList<String> foldersList = new LinkedList<String>(); foldersList.add(dirRelativePath); String relativePath; - String currentDirRelativePath; String itemName; - File[] items; while (!foldersList.isEmpty()) { - currentDirRelativePath = foldersList.removeFirst(); - items = new File(TESTS_ROOT_DIR_PATH, currentDirRelativePath).listFiles(); - for (File item : items) { - itemName = item.getName(); - relativePath = currentDirRelativePath + File.separator + itemName; - - if (item.isDirectory() && FileFilter.isTestDir(itemName)) { - foldersList.add(relativePath); - continue; + relativePath = foldersList.removeFirst(); + + for (String folderRelativePath : FsUtils.getLayoutTestsDirContents(relativePath, + false, true)) { + itemName = new File(folderRelativePath).getName(); + if (FileFilter.isTestDir(itemName)) { + foldersList.add(folderRelativePath); } + } + for (String testRelativePath : FsUtils.getLayoutTestsDirContents(relativePath, + false, false)) { + itemName = new File(testRelativePath).getName(); if (FileFilter.isTestFile(itemName)) { - if (!mFileFilter.isSkip(relativePath)) { - mTestsList.add(relativePath); + if (!mFileFilter.isSkip(testRelativePath)) { + mTestsList.add(testRelativePath); } else { //mSummarizer.addSkippedTest(relativePath); /** TODO: Summarizer is now in service - figure out how to send the info */ diff --git a/tests/DumpRenderTree2/src/com/android/dumprendertree2/forwarder/ForwarderManager.java b/tests/DumpRenderTree2/src/com/android/dumprendertree2/forwarder/ForwarderManager.java index 10fee4b..57c4df8 100644 --- a/tests/DumpRenderTree2/src/com/android/dumprendertree2/forwarder/ForwarderManager.java +++ b/tests/DumpRenderTree2/src/com/android/dumprendertree2/forwarder/ForwarderManager.java @@ -16,6 +16,8 @@ package com.android.dumprendertree2.forwarder; +import java.net.MalformedURLException; +import java.net.URL; import java.util.HashSet; import java.util.Set; @@ -37,6 +39,8 @@ public class ForwarderManager { public static final int HTTP_PORT = 8080; public static final int HTTPS_PORT = 8443; + public static final String HOST = "localhost"; + private static ForwarderManager forwarderManager; private Set<Forwarder> mServers; @@ -47,6 +51,33 @@ public class ForwarderManager { mServers.add(new Forwarder(HTTPS_PORT, HOST_IP)); } + /** + * Returns the main part of the URL with the trailing slash + * + * @param isHttps + * @return + */ + public static final String getHostSchemePort(boolean isHttps) { + int port; + String protocol; + if (isHttps) { + protocol = "https"; + port = HTTPS_PORT; + } else { + protocol = "http"; + port = HTTP_PORT; + } + + URL url = null; + try { + url = new URL(protocol, HOST, port, "/"); + } catch (MalformedURLException e) { + assert false : "isHttps=" + isHttps; + } + + return url.toString(); + } + public static synchronized ForwarderManager getForwarderManager() { if (forwarderManager == null) { forwarderManager = new ForwarderManager(); diff --git a/tests/DumpRenderTree2/src/com/android/dumprendertree2/scriptsupport/Starter.java b/tests/DumpRenderTree2/src/com/android/dumprendertree2/scriptsupport/Starter.java index e730c8a..6f41a0f 100644 --- a/tests/DumpRenderTree2/src/com/android/dumprendertree2/scriptsupport/Starter.java +++ b/tests/DumpRenderTree2/src/com/android/dumprendertree2/scriptsupport/Starter.java @@ -21,6 +21,7 @@ import android.test.ActivityInstrumentationTestCase2; import android.util.Log; import com.android.dumprendertree2.TestsListActivity; +import com.android.dumprendertree2.forwarder.ForwarderManager; /** * A class which provides methods that can be invoked by a script running on the host machine to @@ -45,6 +46,8 @@ public class Starter extends ActivityInstrumentationTestCase2<TestsListActivity> ScriptTestRunner runner = (ScriptTestRunner)getInstrumentation(); String relativePath = runner.getTestsRelativePath(); + ForwarderManager.getForwarderManager().start(); + Intent intent = new Intent(); intent.setClassName("com.android.dumprendertree2", "TestsListActivity"); intent.setAction(Intent.ACTION_RUN); @@ -70,5 +73,7 @@ public class Starter extends ActivityInstrumentationTestCase2<TestsListActivity> } } } + + ForwarderManager.getForwarderManager().stop(); } }
\ No newline at end of file diff --git a/tests/DumpRenderTree2/src/com/android/dumprendertree2/ui/DirListActivity.java b/tests/DumpRenderTree2/src/com/android/dumprendertree2/ui/DirListActivity.java index af0d7d1..2280c66 100644 --- a/tests/DumpRenderTree2/src/com/android/dumprendertree2/ui/DirListActivity.java +++ b/tests/DumpRenderTree2/src/com/android/dumprendertree2/ui/DirListActivity.java @@ -17,8 +17,10 @@ package com.android.dumprendertree2.ui; import com.android.dumprendertree2.FileFilter; +import com.android.dumprendertree2.FsUtils; import com.android.dumprendertree2.TestsListActivity; import com.android.dumprendertree2.R; +import com.android.dumprendertree2.forwarder.ForwarderManager; import android.app.Activity; import android.app.AlertDialog; @@ -43,7 +45,6 @@ import android.widget.TextView; import java.io.File; import java.util.ArrayList; -import java.util.Collections; import java.util.List; /** @@ -143,7 +144,7 @@ public class DirListActivity extends ListActivity { return false; } - return mRelativePath.equals(((ListItem) o).getRelativePath()); + return mRelativePath.equals(((ListItem)o).getRelativePath()); } @Override @@ -172,10 +173,10 @@ public class DirListActivity extends ListActivity { LayoutInflater inflater = mContext.getLayoutInflater(); View row = inflater.inflate(R.layout.dirlist_row, null); - TextView label = (TextView) row.findViewById(R.id.label); + TextView label = (TextView)row.findViewById(R.id.label); label.setText(mItems[position].getName()); - ImageView icon = (ImageView) row.findViewById(R.id.icon); + ImageView icon = (ImageView)row.findViewById(R.id.icon); if (mItems[position].isDirectory()) { icon.setImageResource(R.drawable.folder); } else { @@ -190,13 +191,15 @@ public class DirListActivity extends ListActivity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + ForwarderManager.getForwarderManager().start(); + mFileFilter = new FileFilter(ROOT_DIR_PATH); mListView = getListView(); mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { - ListItem item = (ListItem) parent.getItemAtPosition(position); + ListItem item = (ListItem)parent.getItemAtPosition(position); if (item.isDirectory()) { showDir(item.getRelativePath()); @@ -214,7 +217,7 @@ public class DirListActivity extends ListActivity { mListView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { @Override public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { - ListItem item = (ListItem) parent.getItemAtPosition(position); + ListItem item = (ListItem)parent.getItemAtPosition(position); if (item.isDirectory()) { Bundle arguments = new Bundle(1); @@ -376,25 +379,22 @@ public class DirListActivity extends ListActivity { * The dirPath is relative. */ private ListItem[] getDirList(String dirPath) { - File dir = new File(mRootDirPath, dirPath); - - if (!dir.exists()) { - return new ListItem[0]; - } - List<ListItem> subDirs = new ArrayList<ListItem>(); List<ListItem> subFiles = new ArrayList<ListItem>(); - for (File item : dir.listFiles()) { - if (item.isDirectory() && FileFilter.isTestDir(item.getName())) { - subDirs.add(new ListItem(mFileFilter.getRelativePath(item), true)); - } else if (FileFilter.isTestFile(item.getName())) { - subFiles.add(new ListItem(mFileFilter.getRelativePath(item), false)); + for (String dirRelativePath : FsUtils.getLayoutTestsDirContents(dirPath, false, + true)) { + if (FileFilter.isTestDir(new File(dirRelativePath).getName())) { + subDirs.add(new ListItem(dirRelativePath, true)); } } - Collections.sort(subDirs); - Collections.sort(subFiles); + for (String testRelativePath : FsUtils.getLayoutTestsDirContents(dirPath, false, + false)) { + if (FileFilter.isTestFile(new File(testRelativePath).getName())) { + subFiles.add(new ListItem(testRelativePath, false)); + } + } /** Concatenate the two lists */ subDirs.addAll(subFiles); |