Home | History | Annotate | Download | only in Utils
      1 /*
      2  * Copyright (C) 2016 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 package com.android.cts.verifier.sensors.sixdof.Utils;
     17 
     18 import android.content.Context;
     19 import android.os.Build;
     20 import android.util.Xml;
     21 
     22 import org.xmlpull.v1.XmlSerializer;
     23 
     24 import java.io.ByteArrayOutputStream;
     25 import java.io.IOException;
     26 import java.text.DateFormat;
     27 import java.text.SimpleDateFormat;
     28 import java.util.ArrayList;
     29 import java.util.Date;
     30 import java.util.Locale;
     31 
     32 /**
     33  * Handles all the XML to print to the user.
     34  */
     35 public class TestReport {
     36 
     37     public enum TestStatus {
     38         NOT_EXECUTED,
     39         EXECUTED,
     40         PASS,
     41         FAIL,
     42     }
     43 
     44     private static final int REPORT_VERSION = 1;
     45     private static DateFormat DATE_FORMAT = new SimpleDateFormat(
     46             "EEE MMM dd HH:mm:ss z yyyy", Locale.ENGLISH);
     47     private static final String TEST_RESULTS_REPORT_TAG = "test-results-report";
     48     private static final String VERIFIER_INFO_TAG = "verifier-info";
     49     private static final String DEVICE_INFO_TAG = "device-info";
     50     private static final String BUILD_INFO_TAG = "build-info";
     51     private static final String TEST_RESULTS_TAG = "test-results";
     52     private static final String TEST_TAG = "test";
     53     private static final String TEST_DETAILS_TAG = "details";
     54     private String mTestStatus = "not-executed";
     55     private Context mContext;
     56     private ArrayList<String> mTestDetails = new ArrayList<>();
     57 
     58     /**
     59      * Sets the context of this test.
     60      *
     61      * @param context reference to the activity this test is in.
     62      */
     63     public TestReport(Context context) {
     64         mContext = context;
     65     }
     66 
     67     /**
     68      * Produces the XML for the test.
     69      *
     70      * @return the XML of the test to display.
     71      */
     72     public String getContents()
     73             throws IllegalArgumentException, IllegalStateException, IOException {
     74 
     75         ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
     76 
     77         XmlSerializer xml = Xml.newSerializer();
     78 
     79         xml.setOutput(outputStream, "utf-8");
     80         xml.setFeature("http://xmlpull.org/v1/doc/features.html#indent-output", true);
     81         xml.startDocument("utf-8", true);
     82 
     83         xml.startTag(null, TEST_RESULTS_REPORT_TAG);
     84         xml.attribute(null, "report-version", Integer.toString(REPORT_VERSION));
     85         xml.attribute(null, "creation-time", DATE_FORMAT.format(new Date()));
     86 
     87         xml.startTag(null, VERIFIER_INFO_TAG);
     88         xml.attribute(null, "version-name", Version.getVersionName(mContext));
     89         xml.attribute(null, "version-code", Integer.toString(Version.getVersionCode(mContext)));
     90         xml.endTag(null, VERIFIER_INFO_TAG);
     91 
     92         xml.startTag(null, DEVICE_INFO_TAG);
     93         xml.startTag(null, BUILD_INFO_TAG);
     94         xml.attribute(null, "board", Build.BOARD);
     95         xml.attribute(null, "brand", Build.BRAND);
     96         xml.attribute(null, "device", Build.DEVICE);
     97         xml.attribute(null, "display", Build.DISPLAY);
     98         xml.attribute(null, "fingerprint", Build.FINGERPRINT);
     99         xml.attribute(null, "id", Build.ID);
    100         xml.attribute(null, "model", Build.MODEL);
    101         xml.attribute(null, "product", Build.PRODUCT);
    102         xml.attribute(null, "release", Build.VERSION.RELEASE);
    103         xml.attribute(null, "sdk", Integer.toString(Build.VERSION.SDK_INT));
    104         xml.endTag(null, BUILD_INFO_TAG);
    105         xml.endTag(null, DEVICE_INFO_TAG);
    106 
    107         xml.startTag(null, TEST_RESULTS_TAG);
    108         xml.startTag(null, TEST_TAG);
    109         xml.attribute(null, "title", "6dof accuracy test");
    110         xml.attribute(null, "class-name", "com.android.cts.verifier.sixdof.Activities.TestActivity");
    111 
    112         if (mTestDetails.isEmpty()) {
    113             xml.attribute(null, "result", mTestStatus);
    114         } else {
    115             setTestState(TestStatus.FAIL);
    116             xml.attribute(null, "result", mTestStatus);
    117             xml.startTag(null, TEST_DETAILS_TAG);
    118 
    119             for (int i = 0; i < mTestDetails.size(); i++) {
    120                 xml.text(mTestDetails.get(i));
    121             }
    122 
    123             xml.endTag(null, TEST_DETAILS_TAG);
    124         }
    125 
    126         xml.endTag(null, TEST_TAG);
    127         xml.endTag(null, TEST_RESULTS_TAG);
    128 
    129         xml.endTag(null, TEST_RESULTS_REPORT_TAG);
    130         xml.endDocument();
    131 
    132         return outputStream.toString("utf-8");
    133     }
    134 
    135     /**
    136      * Adds the failed results to the details.
    137      *
    138      * @param failedPart the failed test result.
    139      */
    140     public void setFailDetails(String failedPart) {
    141         mTestDetails.add(failedPart);
    142     }
    143 
    144     /**
    145      * Sets the status the test is currently in.
    146      *
    147      * @param state the status the test is in.
    148      */
    149     public void setTestState(TestStatus state) {
    150         switch (state) {
    151             case EXECUTED:
    152                 mTestStatus = "executed";
    153                 break;
    154             case PASS:
    155                 mTestStatus = "passed";
    156                 break;
    157             case FAIL:
    158                 mTestStatus = "failed";
    159                 break;
    160             case NOT_EXECUTED:
    161                 mTestStatus = "not-executed";
    162                 break;
    163             default:
    164                 throw new AssertionError("TestExecuted default we should not be in", null);
    165         }
    166     }
    167 }
    168