am 74e2dcf8: Merge "Include Audio Quality Details in XML Report" into gingerbread
* commit '74e2dcf8e8804dc2de7b67039ffe4233a964e78e':
Include Audio Quality Details in XML Report
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/PassFailButtons.java b/apps/CtsVerifier/src/com/android/cts/verifier/PassFailButtons.java
index b31d6c6..9991b9d 100644
--- a/apps/CtsVerifier/src/com/android/cts/verifier/PassFailButtons.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/PassFailButtons.java
@@ -83,6 +83,9 @@
* Returns a unique identifier for the test. Usually, this is just the class name.
*/
String getTestId();
+
+ /** @return null or details about the test run. */
+ String getTestDetails();
}
public static class Activity extends android.app.Activity implements PassFailActivity {
@@ -111,6 +114,11 @@
public String getTestId() {
return getClass().getName();
}
+
+ @Override
+ public String getTestDetails() {
+ return null;
+ }
}
public static class ListActivity extends android.app.ListActivity implements PassFailActivity {
@@ -139,6 +147,11 @@
public String getTestId() {
return getClass().getName();
}
+
+ @Override
+ public String getTestDetails() {
+ return null;
+ }
}
public static class TestListActivity extends AbstractTestListActivity
@@ -168,6 +181,11 @@
public String getTestId() {
return getClass().getName();
}
+
+ @Override
+ public String getTestDetails() {
+ return null;
+ }
}
private static <T extends android.app.Activity & PassFailActivity>
@@ -175,7 +193,8 @@
View.OnClickListener clickListener = new View.OnClickListener() {
@Override
public void onClick(View target) {
- setTestResultAndFinish(activity, activity.getTestId(), target);
+ setTestResultAndFinish(activity, activity.getTestId(), activity.getTestDetails(),
+ target);
}
};
@@ -278,7 +297,7 @@
/** Set the test result corresponding to the button clicked and finish the activity. */
private static void setTestResultAndFinish(android.app.Activity activity, String testId,
- View target) {
+ String testDetails, View target) {
boolean passed;
switch (target.getId()) {
case R.id.pass_button:
@@ -290,16 +309,16 @@
default:
throw new IllegalArgumentException("Unknown id: " + target.getId());
}
- setTestResultAndFinish(activity, testId, passed);
+ setTestResultAndFinish(activity, testId, testDetails, passed);
}
/** Set the test result and finish the activity. */
public static void setTestResultAndFinish(android.app.Activity activity, String testId,
- boolean passed) {
+ String testDetails, boolean passed) {
if (passed) {
- TestResult.setPassedResult(activity, testId);
+ TestResult.setPassedResult(activity, testId, testDetails);
} else {
- TestResult.setFailedResult(activity, testId);
+ TestResult.setFailedResult(activity, testId, testDetails);
}
activity.finish();
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/TestListAdapter.java b/apps/CtsVerifier/src/com/android/cts/verifier/TestListAdapter.java
index 3f84f51..52d9b32 100644
--- a/apps/CtsVerifier/src/com/android/cts/verifier/TestListAdapter.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/TestListAdapter.java
@@ -63,6 +63,9 @@
/** Mutable test results that will change as each test activity finishes. */
private final Map<String, Integer> mTestResults = new HashMap<String, Integer>();
+ /** Map from test name to test details. */
+ private final Map<String, String> mTestDetails = new HashMap<String, String>();
+
private final LayoutInflater mLayoutInflater;
/** {@link ListView} row that is either a test category header or a test. */
@@ -121,15 +124,15 @@
}
public void setTestResult(TestResult testResult) {
- new SetTestResultTask(testResult.getName(), testResult.getResult()).execute();
+ new SetTestResultTask(testResult.getName(), testResult.getResult(),
+ testResult.getDetails()).execute();
}
class RefreshTestResultsTask extends AsyncTask<Void, Void, RefreshResult> {
@Override
protected RefreshResult doInBackground(Void... params) {
List<TestListItem> rows = getRows();
- Map<String, Integer> results = getTestResults();
- return new RefreshResult(rows, results);
+ return getRefreshResults(rows);
}
@Override
@@ -139,6 +142,8 @@
mRows.addAll(result.mItems);
mTestResults.clear();
mTestResults.putAll(result.mResults);
+ mTestDetails.clear();
+ mTestDetails.putAll(result.mDetails);
notifyDataSetChanged();
}
}
@@ -146,27 +151,40 @@
static class RefreshResult {
List<TestListItem> mItems;
Map<String, Integer> mResults;
+ Map<String, String> mDetails;
- RefreshResult(List<TestListItem> items, Map<String, Integer> results) {
+ RefreshResult(List<TestListItem> items, Map<String, Integer> results,
+ Map<String, String> details) {
mItems = items;
mResults = results;
+ mDetails = details;
}
}
protected abstract List<TestListItem> getRows();
- Map<String, Integer> getTestResults() {
+ static final String[] REFRESH_PROJECTION = {
+ TestResultsProvider._ID,
+ TestResultsProvider.COLUMN_TEST_NAME,
+ TestResultsProvider.COLUMN_TEST_RESULT,
+ TestResultsProvider.COLUMN_TEST_DETAILS,
+ };
+
+ RefreshResult getRefreshResults(List<TestListItem> items) {
Map<String, Integer> results = new HashMap<String, Integer>();
+ Map<String, String> details = new HashMap<String, String>();
ContentResolver resolver = mContext.getContentResolver();
Cursor cursor = null;
try {
- cursor = resolver.query(TestResultsProvider.RESULTS_CONTENT_URI,
- TestResultsProvider.ALL_COLUMNS, null, null, null);
+ cursor = resolver.query(TestResultsProvider.RESULTS_CONTENT_URI, REFRESH_PROJECTION,
+ null, null, null);
if (cursor.moveToFirst()) {
do {
String testName = cursor.getString(1);
int testResult = cursor.getInt(2);
+ String testDetails = cursor.getString(3);
results.put(testName, testResult);
+ details.put(testName, testDetails);
} while (cursor.moveToNext());
}
} finally {
@@ -174,7 +192,7 @@
cursor.close();
}
}
- return results;
+ return new RefreshResult(items, results, details);
}
class ClearTestResultsTask extends AsyncTask<Void, Void, Void> {
@@ -193,14 +211,17 @@
private final int mResult;
- SetTestResultTask(String testName, int result) {
+ private final String mDetails;
+
+ SetTestResultTask(String testName, int result, String details) {
mTestName = testName;
mResult = result;
+ mDetails = details;
}
@Override
protected Void doInBackground(Void... params) {
- TestResultsProvider.setTestResult(mContext, mTestName, mResult);
+ TestResultsProvider.setTestResult(mContext, mTestName, mResult, mDetails);
return null;
}
}
@@ -261,6 +282,13 @@
: TestResult.TEST_RESULT_NOT_EXECUTED;
}
+ public String getTestDetails(int position) {
+ TestListItem item = getItem(position);
+ return mTestDetails.containsKey(item.testName)
+ ? mTestDetails.get(item.testName)
+ : null;
+ }
+
public boolean allTestsPassed() {
for (TestListItem item : mRows) {
if (item.isTest() && (!mTestResults.containsKey(item.testName)
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/TestResult.java b/apps/CtsVerifier/src/com/android/cts/verifier/TestResult.java
index 3b42c3b..68513ac 100644
--- a/apps/CtsVerifier/src/com/android/cts/verifier/TestResult.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/TestResult.java
@@ -21,8 +21,9 @@
/**
* Object representing the result of a test activity like whether it succeeded or failed.
- * Use {@link #setPassedResult(Activity, String)} or {@link #setFailedResult(Activity, String)} from
- * a test activity like you would {@link Activity#setResult(int)} so that {@link TestListActivity}
+ * Use {@link #setPassedResult(Activity, String, String)} or
+ * {@link #setFailedResult(Activity, String, String)} from a test activity like you would
+ * {@link Activity#setResult(int)} so that {@link TestListActivity}
* will persist the test result and update its adapter and thus the list view.
*/
public class TestResult {
@@ -33,25 +34,30 @@
private static final String TEST_NAME = "name";
private static final String TEST_RESULT = "result";
+ private static final String TEST_DETAILS = "details";
private final String mName;
-
private final int mResult;
+ private final String mDetails;
/** Sets the test activity's result to pass. */
- public static void setPassedResult(Activity activity, String testId) {
- activity.setResult(Activity.RESULT_OK, createResult(activity, TEST_RESULT_PASSED, testId));
+ public static void setPassedResult(Activity activity, String testId, String testDetails) {
+ activity.setResult(Activity.RESULT_OK, createResult(activity, TEST_RESULT_PASSED, testId,
+ testDetails));
}
/** Sets the test activity's result to failed. */
- public static void setFailedResult(Activity activity, String testId) {
- activity.setResult(Activity.RESULT_OK, createResult(activity, TEST_RESULT_FAILED, testId));
+ public static void setFailedResult(Activity activity, String testId, String testDetails) {
+ activity.setResult(Activity.RESULT_OK, createResult(activity, TEST_RESULT_FAILED, testId,
+ testDetails));
}
- private static Intent createResult(Activity activity, int testResult, String testName) {
+ private static Intent createResult(Activity activity, int testResult, String testName,
+ String testDetails) {
Intent data = new Intent(activity, activity.getClass());
data.putExtra(TEST_NAME, testName);
data.putExtra(TEST_RESULT, testResult);
+ data.putExtra(TEST_DETAILS, testDetails);
return data;
}
@@ -59,15 +65,17 @@
* Convert the test activity's result into a {@link TestResult}. Only meant to be used by
* {@link TestListActivity}.
*/
- public static TestResult fromActivityResult(int resultCode, Intent data) {
+ static TestResult fromActivityResult(int resultCode, Intent data) {
String name = data.getStringExtra(TEST_NAME);
int result = data.getIntExtra(TEST_RESULT, TEST_RESULT_NOT_EXECUTED);
- return new TestResult(name, result);
+ String details = data.getStringExtra(TEST_DETAILS);
+ return new TestResult(name, result, details);
}
- private TestResult(String name, int result) {
+ private TestResult(String name, int result, String details) {
this.mName = name;
this.mResult = result;
+ this.mDetails = details;
}
/** Return the name of the test like "com.android.cts.verifier.foo.FooTest" */
@@ -79,4 +87,9 @@
public int getResult() {
return mResult;
}
+
+ /** Return null or string containing test output. */
+ public String getDetails() {
+ return mDetails;
+ }
}
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/TestResultsBackupHelper.java b/apps/CtsVerifier/src/com/android/cts/verifier/TestResultsBackupHelper.java
index 0966de4..e4cd24a 100644
--- a/apps/CtsVerifier/src/com/android/cts/verifier/TestResultsBackupHelper.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/TestResultsBackupHelper.java
@@ -58,6 +58,7 @@
int nameIndex = cursor.getColumnIndex(TestResultsProvider.COLUMN_TEST_NAME);
int resultIndex = cursor.getColumnIndex(TestResultsProvider.COLUMN_TEST_RESULT);
int infoSeenIndex = cursor.getColumnIndex(TestResultsProvider.COLUMN_TEST_INFO_SEEN);
+ int detailsIndex = cursor.getColumnIndex(TestResultsProvider.COLUMN_TEST_DETAILS);
ByteArrayOutputStream byteOutput = new ByteArrayOutputStream();
DataOutputStream dataOutput = new DataOutputStream(byteOutput);
@@ -67,10 +68,12 @@
String name = cursor.getString(nameIndex);
int result = cursor.getInt(resultIndex);
int infoSeen = cursor.getInt(infoSeenIndex);
+ String details = cursor.getString(detailsIndex);
dataOutput.writeUTF(name);
dataOutput.writeInt(result);
dataOutput.writeInt(infoSeen);
+ dataOutput.writeUTF(details != null ? details : "");
}
byte[] rawBytes = byteOutput.toByteArray();
@@ -102,17 +105,19 @@
String name = dataInput.readUTF();
int result = dataInput.readInt();
int infoSeen = dataInput.readInt();
+ String details = dataInput.readUTF();
values[i] = new ContentValues();
values[i].put(TestResultsProvider.COLUMN_TEST_NAME, name);
values[i].put(TestResultsProvider.COLUMN_TEST_RESULT, result);
values[i].put(TestResultsProvider.COLUMN_TEST_INFO_SEEN, infoSeen);
+ values[i].put(TestResultsProvider.COLUMN_TEST_DETAILS, details);
}
ContentResolver resolver = mContext.getContentResolver();
resolver.bulkInsert(TestResultsProvider.RESULTS_CONTENT_URI, values);
} else {
- failBackupTest();
+ Log.e(TAG, "Skipping key: " + data.getKey());
}
} catch (IOException e) {
Log.e(TAG, "Couldn't restore test results...", e);
@@ -122,7 +127,7 @@
private void failBackupTest() {
TestResultsProvider.setTestResult(mContext, BackupTestActivity.class.getName(),
- TestResult.TEST_RESULT_FAILED);
+ TestResult.TEST_RESULT_FAILED, null);
}
@Override
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/TestResultsProvider.java b/apps/CtsVerifier/src/com/android/cts/verifier/TestResultsProvider.java
index cc9dc73..df05519 100644
--- a/apps/CtsVerifier/src/com/android/cts/verifier/TestResultsProvider.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/TestResultsProvider.java
@@ -53,12 +53,8 @@
/** Boolean indicating whether the test info has been seen. */
static final String COLUMN_TEST_INFO_SEEN = "testinfoseen";
- static final String[] ALL_COLUMNS = {
- _ID,
- COLUMN_TEST_NAME,
- COLUMN_TEST_RESULT,
- COLUMN_TEST_INFO_SEEN,
- };
+ /** String containing the test's details. */
+ static final String COLUMN_TEST_DETAILS = "testdetails";
private static final UriMatcher URI_MATCHER = new UriMatcher(UriMatcher.NO_MATCH);
private static final int RESULTS_ALL = 1;
@@ -87,7 +83,7 @@
private static final String DATABASE_NAME = "results.db";
- private static final int DATABASE_VERSION = 5;
+ private static final int DATABASE_VERSION = 6;
TestResultsOpenHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
@@ -99,7 +95,8 @@
+ _ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
+ COLUMN_TEST_NAME + " TEXT, "
+ COLUMN_TEST_RESULT + " INTEGER,"
- + COLUMN_TEST_INFO_SEEN + " INTEGER DEFAULT 0);");
+ + COLUMN_TEST_INFO_SEEN + " INTEGER DEFAULT 0,"
+ + COLUMN_TEST_DETAILS + " TEXT);");
}
@Override
@@ -204,10 +201,12 @@
return null;
}
- static void setTestResult(Context context, String testName, int testResult) {
+ static void setTestResult(Context context, String testName, int testResult,
+ String testDetails) {
ContentValues values = new ContentValues(2);
values.put(TestResultsProvider.COLUMN_TEST_RESULT, testResult);
values.put(TestResultsProvider.COLUMN_TEST_NAME, testName);
+ values.put(TestResultsProvider.COLUMN_TEST_DETAILS, testDetails);
ContentResolver resolver = context.getContentResolver();
int numUpdated = resolver.update(TestResultsProvider.RESULTS_CONTENT_URI, values,
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/TestResultsReport.java b/apps/CtsVerifier/src/com/android/cts/verifier/TestResultsReport.java
index efc9c85..e40b428 100644
--- a/apps/CtsVerifier/src/com/android/cts/verifier/TestResultsReport.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/TestResultsReport.java
@@ -22,6 +22,7 @@
import android.content.Context;
import android.os.Build;
+import android.text.TextUtils;
import android.util.Xml;
import java.io.ByteArrayOutputStream;
@@ -55,7 +56,7 @@
class TestResultsReport {
/** Version of the test report. Increment whenever adding new tags and attributes. */
- private static final int REPORT_VERSION = 1;
+ private static final int REPORT_VERSION = 2;
/** Format of the report's creation time. Maintain the same format at CTS. */
private static DateFormat DATE_FORMAT =
@@ -67,6 +68,7 @@
private static final String BUILD_INFO_TAG = "build-info";
private static final String TEST_RESULTS_TAG = "test-results";
private static final String TEST_TAG = "test";
+ private static final String TEST_DETAILS_TAG = "details";
private final Context mContext;
@@ -105,7 +107,7 @@
xml.attribute(null, "model", Build.MODEL);
xml.attribute(null, "product", Build.PRODUCT);
xml.attribute(null, "release", Build.VERSION.RELEASE);
- xml.attribute(null, "sdk", Build.VERSION.SDK);
+ xml.attribute(null, "sdk", Integer.toString(Build.VERSION.SDK_INT));
xml.endTag(null, BUILD_INFO_TAG);
xml.endTag(null, DEVICE_INFO_TAG);
@@ -118,6 +120,14 @@
xml.attribute(null, "title", item.title);
xml.attribute(null, "class-name", item.testName);
xml.attribute(null, "result", getTestResultString(mAdapter.getTestResult(i)));
+
+ String details = mAdapter.getTestDetails(i);
+ if (!TextUtils.isEmpty(details)) {
+ xml.startTag(null, TEST_DETAILS_TAG);
+ xml.text(details);
+ xml.endTag(null, TEST_DETAILS_TAG);
+ }
+
xml.endTag(null, TEST_TAG);
}
}
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/audioquality/AudioQualityVerifierActivity.java b/apps/CtsVerifier/src/com/android/cts/verifier/audioquality/AudioQualityVerifierActivity.java
index 7d7c16d..755b62d 100644
--- a/apps/CtsVerifier/src/com/android/cts/verifier/audioquality/AudioQualityVerifierActivity.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/audioquality/AudioQualityVerifierActivity.java
@@ -280,6 +280,11 @@
}
@Override
+ public String getTestDetails() {
+ return genReport();
+ }
+
+ @Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(mReceiver);
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/bluetooth/MessageTestActivity.java b/apps/CtsVerifier/src/com/android/cts/verifier/bluetooth/MessageTestActivity.java
index c730aed..2c6324b 100644
--- a/apps/CtsVerifier/src/com/android/cts/verifier/bluetooth/MessageTestActivity.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/bluetooth/MessageTestActivity.java
@@ -342,7 +342,7 @@
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
- TestResult.setFailedResult(MessageTestActivity.this, getTestId());
+ TestResult.setFailedResult(MessageTestActivity.this, getTestId(), null);
finish();
}
})
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/streamquality/PlayVideoActivity.java b/apps/CtsVerifier/src/com/android/cts/verifier/streamquality/PlayVideoActivity.java
index efd076d..2b65421 100644
--- a/apps/CtsVerifier/src/com/android/cts/verifier/streamquality/PlayVideoActivity.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/streamquality/PlayVideoActivity.java
@@ -121,7 +121,7 @@
@Override
public void onClick(DialogInterface dialog, int which) {
PassFailButtons.setTestResultAndFinish(PlayVideoActivity.this,
- getTestId(), false);
+ getTestId(), null, false);
}
})
.show();