ITS: Report individual test result to CtsVerifier.
bug:181989757

Change-Id: Iaccb2cd9ce498480fa70605920d300778c570fd7
diff --git a/apps/CameraITS/tools/run_all_tests.py b/apps/CameraITS/tools/run_all_tests.py
index d2be8cf..2ecddf0 100644
--- a/apps/CameraITS/tools/run_all_tests.py
+++ b/apps/CameraITS/tools/run_all_tests.py
@@ -405,6 +405,8 @@
     tot_pass = 0
     for s in scenes:
       test_params_content['scene'] = s
+      results[s]['TEST_STATUS'] = []
+
       # unit is millisecond for execution time record in CtsVerifier
       scene_start_time = int(round(time.time() * 1000))
       scene_test_summary = f'Cam{camera_id} {s}' + '\n'
@@ -498,6 +500,8 @@
 
           os.remove(MOBLY_TEST_SUMMARY_TXT_FILE)
           logging.info('%s %s/%s', return_string, s, test)
+          test_name = test.split('/')[-1].split('.')[0]
+          results[s]['TEST_STATUS'].append({'test':test_name,'status':return_string.strip()})
           msg_short = '%s %s' % (return_string, test)
           scene_test_summary += msg_short + '\n'
 
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/camera/its/ItsTestActivity.java b/apps/CtsVerifier/src/com/android/cts/verifier/camera/its/ItsTestActivity.java
index fb4a893..cd75746 100644
--- a/apps/CtsVerifier/src/com/android/cts/verifier/camera/its/ItsTestActivity.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/camera/its/ItsTestActivity.java
@@ -38,6 +38,7 @@
 import java.util.Iterator;
 import java.util.List;
 import java.util.Locale;
+import java.util.Map;
 import java.util.Set;
 import java.util.TreeSet;
 import java.io.BufferedReader;
@@ -83,7 +84,7 @@
     List<String> mToBeTestedCameraIds = null;
 
     // Scenes
-    private static final ArrayList<String> mSceneIds = new ArrayList<String> () { {
+    private static final ArrayList<String> mSceneIds = new ArrayList<String> () {{
             add("scene0");
             add("scene1_1");
             add("scene1_2");
@@ -97,17 +98,147 @@
             add("scene5");
             add("scene_change");
             add("sensor_fusion");
-        } };
+        }};
     // This must match scenes of HIDDEN_PHYSICAL_CAMERA_TESTS in run_all_tests.py
     private static final ArrayList<String> mHiddenPhysicalCameraSceneIds =
-            new ArrayList<String> () { {
+            new ArrayList<String> () {{
                     add("scene0");
                     add("scene1_1");
                     add("scene1_2");
                     add("scene2_a");
                     add("scene4");
                     add("sensor_fusion");
-             }};
+            }};
+
+    private static final ArrayList<String> mScene0Tests = new ArrayList<String>() {{
+            add("test_burst_capture");
+            add("test_capture_result_dump");
+            add("test_gyro_bias");
+            add("test_jitter");
+            add("test_metadata");
+            add("test_param_sensitivity_burst");
+            add("test_read_write");
+            add("test_sensor_events");
+            add("test_solid_color_test_pattern");
+            add("test_test_patterns");
+            add("test_tonemap_curve");
+            add("test_unified_timestamps");
+            add("test_vibration_restriction");
+        }};
+
+    private static final ArrayList<String> mScene1_1Tests = new ArrayList<String>() {{
+            add("test_3a");
+            add("test_ae_af");
+            add("test_ae_precapture_trigger");
+            add("test_auto_vs_manual");
+            add("test_black_white");
+            add("test_burst_sameness_manual");
+            add("test_capture_result");
+            add("test_crop_region_raw");
+            add("test_crop_regions");
+            add("test_dng_noise_model");
+            add("test_ev_compensation_advanced");
+            add("test_ev_compensation_basic");
+            add("test_exposure");
+            add("test_jpeg");
+            add("test_latching");
+            add("test_linearity");
+            add("test_locked_burst");
+            add("test_multi_camera_match");
+            add("test_param_color_correction");
+            add("test_param_exposure_time");
+            add("test_param_flash_mode");
+            add("test_param_noise_reduction");
+        }};
+
+    private static final ArrayList<String> mScene1_2Tests = new ArrayList<String>() {{
+            add("test_param_sensitivity");
+            add("test_param_shading_mode");
+            add("test_param_tonemap_mode");
+            add("test_post_raw_sensitivity_boost");
+            add("test_raw_exposure");
+            add("test_raw_sensitivity_burst");
+            add("test_raw_sensitivity");
+            add("test_reprocess_noise_reduction");
+            add("test_tonemap_sequence");
+            add("test_yuv_jpeg_all");
+            add("test_yuv_plus_dng");
+            add("test_yuv_plus_jpeg");
+            add("test_yuv_plus_raw");
+            add("test_yuv_plus_raw10");
+            add("test_yuv_plus_raw12");
+        }};
+
+    private static final ArrayList<String> mScene2_aTests = new ArrayList<String>() {{
+            add("test_effects");
+            add("test_faces");
+            add("test_format_combos");
+            add("test_jpeg_quality");
+            add("test_num_faces");
+        }};
+
+    private static final ArrayList<String> mScene2_bTests = new ArrayList<String>() {{
+            add("test_auto_per_frame_control");
+            add("test_num_faces");
+        }};
+
+    private static final ArrayList<String> mScene2_cTests = new ArrayList<String>() {{
+            add("test_num_faces");
+        }};
+
+    private static final ArrayList<String> mScene2_dTests = new ArrayList<String>() {{
+            add("test_num_faces");
+        }};
+
+    private static final ArrayList<String> mScene2_eTests = new ArrayList<String>() {{
+            add("test_num_faces");
+            add("test_continuous_picture");
+        }};
+
+    private static final ArrayList<String> mScene3Tests = new ArrayList<String>() {{
+            add("test_3a_consistency");
+            add("test_edge_enhancement");
+            add("test_flip_mirror");
+            add("test_lens_movement_reporting");
+            add("test_lens_position");
+            add("test_reprocess_edge_enhancement");
+        }};
+
+    private static final ArrayList<String> mScene4Tests = new ArrayList<String>() {{
+            add("test_aspect_ratio_and_crop");
+            add("test_multi_camera_alignment");
+        }};
+
+    private static final ArrayList<String> mScene5Tests = new ArrayList<String>() {{
+            add("test_lens_shading_and_color_uniformity");
+        }};
+
+    private static final ArrayList<String> mSceneChangeTests = new ArrayList<String>() {{
+            add("test_scene_change");
+        }};
+
+    private static final ArrayList<String> mSensorFusionTests = new ArrayList<String>() {{
+            add("test_multi_camera_frame_sync");
+            add("test_sensor_fusion");
+        }};
+
+    private static final HashMap<String,ArrayList<String>> mSceneTestMap =
+        new HashMap<String,ArrayList<String>>() {{
+            put("scene0", mScene0Tests);
+            put("scene1_1",mScene1_1Tests );
+            put("scene1_2", mScene1_2Tests);
+            put("scene2_a",mScene2_aTests);
+            put("scene2_b",mScene2_bTests);
+            put("scene2_c",mScene2_cTests);
+            put("scene2_d", mScene2_dTests);
+            put("scene2_e",mScene2_eTests);
+            put("scene3",mScene3Tests);
+            put("scene4",mScene4Tests);
+            put("scene5",mScene5Tests);
+            put("scene_change",mSceneChangeTests);
+            put("sensor_fusion",mSensorFusionTests);
+        }};
+
 
     // TODO: cache the following in saved bundle
     private Set<ResultKey> mAllScenes = null;
@@ -239,7 +370,36 @@
 
                     // Update test execution results
                     for (String scene : scenes) {
+                        HashMap<String, String> executedTests = new HashMap<>();
                         JSONObject sceneResult = jsonResults.getJSONObject(scene);
+                        Log.v(TAG, sceneResult.toString());
+                        if(sceneResult.has("TEST_STATUS")){
+                            JSONArray testResults = sceneResult.getJSONArray("TEST_STATUS");
+                            for(int i=0;i < testResults.length();i++){
+                                JSONObject obj = (JSONObject)testResults.get(i);
+                                String test_name = obj.get("test").toString();
+                                String test_status = obj.get("status").toString();
+                                executedTests.put(test_name,test_status);
+                            }
+                            Log.v(TAG,"Individual test results are:" + executedTests.toString());
+                            for (Map.Entry<String,String> entry : executedTests.entrySet()){
+                                int testResult;
+                                String test_name,status;
+                                test_name = entry.getKey();
+                                status = entry.getValue();
+                                if(status.equals("PASS")) {
+                                    testResult = TestResult.TEST_RESULT_PASSED;
+                                } else if (status.equals("SKIP")) {
+                                    testResult = TestResult.TEST_RESULT_NOT_EXECUTED;
+                                } else {
+                                    testResult = TestResult.TEST_RESULT_FAILED;
+                                }
+                                setTestResult(testId(cameraId, scene) + "_" + test_name, testResult);
+                                Log.v(TAG, "setTestResult for " +
+                                    testId(cameraId, scene) + "_" + test_name + ": " + testResult);
+                            }
+
+                        }
                         String result = sceneResult.getString("result");
                         if (result == null) {
                             Log.e(TAG, "Result for " + scene + " is null");
@@ -405,6 +565,13 @@
                 adapter.add(new DialogTestListItem(this,
                 testTitle(cam, scene),
                 testId(cam, scene)));
+                if(mSceneTestMap.containsKey(scene)){
+                    ArrayList<String> testList = mSceneTestMap.get(scene);
+                    for(String test_name : testList){
+                        adapter.add(new DialogTestListItem(
+                            this,test_name,testId(cam, scene) + "_" + test_name));
+                    }
+                }
             }
         }
     }