am 4d777350: am 206fb102: Merge "Fix CTS Signature test." into lmp-dev
* commit '4d7773509f81ad58eafd229c8ba7bdbe1defc32b':
Fix CTS Signature test.
diff --git a/tests/signature/src/android/signature/cts/JDiffClassDescription.java b/tests/signature/src/android/signature/cts/JDiffClassDescription.java
index 7ea9911..6f07107 100644
--- a/tests/signature/src/android/signature/cts/JDiffClassDescription.java
+++ b/tests/signature/src/android/signature/cts/JDiffClassDescription.java
@@ -26,8 +26,10 @@
import java.lang.reflect.TypeVariable;
import java.lang.reflect.WildcardType;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
+import java.util.Map;
import java.util.Set;
/**
@@ -53,6 +55,8 @@
@SuppressWarnings("unchecked")
private Class<?> mClass;
+ // A map of field name to field of the fields contained in {@code mClass}
+ private Map<String, Field> mClassFieldMap;
private String mPackageName;
private String mShortClassName;
@@ -437,6 +441,7 @@
public void checkSignatureCompliance() {
checkClassCompliance();
if (mClass != null) {
+ mClassFieldMap = buildFieldMap(mClass);
checkFieldsCompliance();
checkConstructorCompliance();
checkMethodCompliance();
@@ -709,10 +714,15 @@
try {
Field f = findMatchingField(field);
if (f == null) {
+ StringBuilder builder = new StringBuilder();
+ Field[] fields = mClass.getDeclaredFields();
+ for (Field fi : fields) {
+ builder.append("\tfield: ").append(fi.getName()).append("\n");
+ }
mResultObserver.notifyFailure(FailureType.MISSING_FIELD,
field.toReadableString(mAbsoluteClassName),
"No field with correct signature found:" +
- field.toSignatureString());
+ field.toSignatureString() + ". Found: " + builder.toString());
} else if (f.getModifiers() != field.mModifier) {
mResultObserver.notifyFailure(FailureType.MISMATCH_FIELD,
field.toReadableString(mAbsoluteClassName),
@@ -751,14 +761,8 @@
* @param field the field description to find
* @return the reflected field, or null if not found.
*/
- private Field findMatchingField(JDiffField field){
- Field[] fields = mClass.getDeclaredFields();
- for (Field f : fields) {
- if (f.getName().equals(field.mName)) {
- return f;
- }
- }
- return null;
+ private Field findMatchingField(JDiffField field) {
+ return mClassFieldMap.get(field.mName);
}
/**
@@ -1191,6 +1195,31 @@
return paramType.replace("<? extends java.lang.Object>", "<?>");
}
+ /**
+ * Scan a class (an its entire inheritance chain) for fields.
+ *
+ * @return a {@link Map} of fieldName to {@link Field}
+ */
+ private static Map<String, Field> buildFieldMap(Class testClass) {
+ Map<String, Field> fieldMap = new HashMap<String, Field>();
+ // Scan the superclass
+ if (testClass.getSuperclass() != null) {
+ fieldMap.putAll(buildFieldMap(testClass.getSuperclass()));
+ }
+
+ // Scan the interfaces
+ for (Class interfaceClass : testClass.getInterfaces()) {
+ fieldMap.putAll(buildFieldMap(interfaceClass));
+ }
+
+ // Check the fields in the test class
+ for (Field field : testClass.getDeclaredFields()) {
+ fieldMap.put(field.getName(), field);
+ }
+
+ return fieldMap;
+ }
+
private static void loge(String message, Exception exception) {
System.err.println(String.format("%s: %s", message, exception));
}
diff --git a/tests/signature/src/android/signature/cts/SignatureTest.java b/tests/signature/src/android/signature/cts/SignatureTest.java
index e3099a9..85b77f8 100644
--- a/tests/signature/src/android/signature/cts/SignatureTest.java
+++ b/tests/signature/src/android/signature/cts/SignatureTest.java
@@ -69,8 +69,6 @@
private static final String ATTRIBUTE_TYPE = "type";
private static final String ATTRIBUTE_RETURN = "return";
- private static ArrayList<String> mDebugArray = new ArrayList<String>();
-
private HashSet<String> mKeyTagSet;
private TestResultObserver mResultObserver;
@@ -85,6 +83,8 @@
mErrorString.append(type.toString().toLowerCase());
mErrorString.append(":\t");
mErrorString.append(name);
+ mErrorString.append("\tError: ");
+ mErrorString.append(errorMessage);
}
}
@@ -109,7 +109,7 @@
logd(String.format("Class: %s", rClass.toString()));
Field[] fs = rClass.getFields();
for (Field f : fs) {
- logd(String.format("Field: %s", fs.toString()));
+ logd(String.format("Field: %s", f.toString()));
try {
start(r.getXml(f.getInt(rClass)));
} catch (Exception e) {
@@ -142,11 +142,12 @@
* Signature test entry point.
*/
private void start(XmlPullParser parser) throws XmlPullParserException, IOException {
- logd(String.format("Parser: %s", parser.getName()));
- logd(String.format("Parser: %s", parser.getNamespace()));
- logd(String.format("Parser: %s", parser.getLineNumber()));
- logd(String.format("Parser: %s", parser.getColumnNumber()));
- logd(String.format("Parser: %s", parser.getPositionDescription()));
+ logd(String.format("Name: %s", parser.getName()));
+ logd(String.format("Text: %s", parser.getText()));
+ logd(String.format("Namespace: %s", parser.getNamespace()));
+ logd(String.format("Line Number: %s", parser.getLineNumber()));
+ logd(String.format("Column Number: %s", parser.getColumnNumber()));
+ logd(String.format("Position Description: %s", parser.getPositionDescription()));
JDiffClassDescription currentClass = null;
String currentPackage = "";
JDiffMethod currentMethod = null;
@@ -204,7 +205,16 @@
currentClass.addField(field);
} else {
throw new RuntimeException(
- "unknow tag exception:" + tagname);
+ "unknown tag exception:" + tagname);
+ }
+ if (currentPackage != null) {
+ logd(String.format("currentPackage: %s", currentPackage));
+ }
+ if (currentClass != null) {
+ logd(String.format("currentClass: %s", currentClass.toSignatureString()));
+ }
+ if (currentMethod != null) {
+ logd(String.format("currentMethod: %s", currentMethod.toSignatureString()));
}
}
}