Home | History | Annotate | Download | only in util
      1 /*
      2  * Copyright (C) 2015 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 
     17 package com.android.compatibility.common.util;
     18 
     19 import com.android.compatibility.common.util.ReportLog.Metric;
     20 
     21 import junit.framework.TestCase;
     22 
     23 import java.util.Arrays;
     24 
     25 /**
     26  * Unit tests for {@link ReportLog}
     27  */
     28 public class ReportLogTest extends TestCase {
     29 
     30     private static final String SOURCE = "Source";
     31     private static final String MESSAGE = "Message";
     32     private static final double[] VALUES = new double[] {.1, 124, 4736, 835.683, 98, 395};
     33     private static final String HEADER_XML =
     34             "<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>";
     35     private static final String SUMMARY_XML =
     36             HEADER_XML + "\r\n" +
     37             "<Summary>\r\n" +
     38             "  <Metric source=\"com.android.compatibility.common.util.ReportLogTest#%s\" "
     39             + "message=\"Sample\" score_type=\"higher_better\" score_unit=\"byte\">\r\n" +
     40             "    <Value>1.0</Value>\r\n" +
     41             "  </Metric>\r\n" +
     42             "</Summary>";
     43     private static final String FULL_XML = SUMMARY_XML;
     44 
     45     private ReportLog mReportLog;
     46 
     47     @Override
     48     protected void setUp() throws Exception {
     49         mReportLog = new ReportLog();
     50     }
     51 
     52     public void testSerialize_null() throws Exception {
     53         try {
     54             ReportLog.serialize(null);
     55             fail("Expected IllegalArgumentException when serializing an empty report");
     56         } catch (IllegalArgumentException e) {
     57             // Expected
     58         }
     59     }
     60 
     61     public void testSerialize_noData() throws Exception {
     62         ReportLog.serialize(mReportLog);
     63     }
     64 
     65     public void testSerialize_summaryOnly() throws Exception {
     66         mReportLog.setSummary("Sample", 1.0, ResultType.HIGHER_BETTER, ResultUnit.BYTE);
     67         assertEquals(String.format(SUMMARY_XML, "testSerialize_summaryOnly:66"),
     68                 ReportLog.serialize(mReportLog));
     69     }
     70 
     71     public void testSerialize_detailOnly() throws Exception {
     72         mReportLog.addValues("Details", VALUES, ResultType.NEUTRAL, ResultUnit.FPS);
     73         assertEquals(HEADER_XML, ReportLog.serialize(mReportLog));
     74     }
     75 
     76     public void testSerialize_full() throws Exception {
     77         mReportLog.setSummary("Sample", 1.0, ResultType.HIGHER_BETTER, ResultUnit.BYTE);
     78         mReportLog.addValues("Details", VALUES, ResultType.NEUTRAL, ResultUnit.FPS);
     79         assertEquals(String.format(FULL_XML, "testSerialize_full:77"),
     80                 ReportLog.serialize(mReportLog));
     81     }
     82 
     83     public void testParse_null() throws Exception {
     84         try {
     85             ReportLog.parse((String) null);
     86             fail("Expected IllegalArgumentException when passing a null report");
     87         } catch(IllegalArgumentException e) {
     88             // Expected
     89         }
     90     }
     91 
     92     public void testParse_noData() throws Exception {
     93         ReportLog report = ReportLog.parse(HEADER_XML);
     94         assertNull(report.getSummary());
     95     }
     96 
     97     public void testParse_summaryOnly() throws Exception {
     98         ReportLog report = ReportLog.parse(String.format(SUMMARY_XML, "testParse_summaryOnly:125"));
     99         assertNotNull(report);
    100         assertEquals("Sample", report.getSummary().getMessage());
    101     }
    102 
    103     public void testParse_full() throws Exception {
    104         ReportLog report = ReportLog.parse(String.format(FULL_XML, "testParse_full:140"));
    105         assertNotNull(report);
    106         assertEquals("Sample", report.getSummary().getMessage());
    107     }
    108 
    109     public void testLimits_source() throws Exception {
    110         // Should pass with a short source.
    111         Metric metric = new Metric(SOURCE, MESSAGE, 1.0, ResultType.HIGHER_BETTER, ResultUnit.BYTE);
    112         assertEquals("Expected message to be ok", SOURCE, metric.getSource());
    113         // Make a long source.
    114         StringBuilder sb = new StringBuilder();
    115         // 40 x "Source" = 240 character string
    116         for (int i = 0; i < 40; i++) sb.append(SOURCE);
    117         String source = sb.toString();
    118         // Should be trimmed because source is too long.
    119         metric = new Metric(source, MESSAGE, 1.0, ResultType.HIGHER_BETTER, ResultUnit.BYTE);
    120         assertEquals("Expected source to be trimmed", source.substring(source.length() - 200),
    121                 metric.getSource());
    122     }
    123 
    124     public void testLimits_message() throws Exception {
    125         // Should pass with a short message.
    126         Metric metric = new Metric(SOURCE, MESSAGE, 1.0, ResultType.HIGHER_BETTER, ResultUnit.BYTE);
    127         assertEquals("Expected message to be ok", MESSAGE, metric.getMessage());
    128         // Make a long message.
    129         StringBuilder sb = new StringBuilder();
    130         // 40 x "Message" = 280 character string
    131         for (int i = 0; i < 40; i++) sb.append(MESSAGE);
    132         String message = sb.toString();
    133         // Should be trimmed because message is too long.
    134         metric = new Metric(SOURCE, message, 1.0, ResultType.HIGHER_BETTER, ResultUnit.BYTE);
    135         assertEquals("Expected message to be trimmed", message.substring(0, 200),
    136                 metric.getMessage());
    137     }
    138 
    139     public void testLimits_values() throws Exception {
    140         // Should pass with a small array.
    141         Metric metric = new Metric(SOURCE, MESSAGE, VALUES, ResultType.HIGHER_BETTER,
    142                 ResultUnit.BYTE);
    143         assertTrue("Expected values to be ok", Arrays.equals(VALUES, metric.getValues()));
    144         // Make a big array.
    145         double[] values = new double[1001];
    146         for (int i = 0; i < values.length; i++) values[i] = i;
    147         // Should be trimmed because array is too big.
    148         metric = new Metric(SOURCE, MESSAGE, values, ResultType.HIGHER_BETTER, ResultUnit.BYTE);
    149         assertTrue("Expected values to be trimmed", Arrays.equals(Arrays.copyOf(values, 1000),
    150                 metric.getValues()));
    151     }
    152 
    153 }
    154