Home | History | Annotate | Download | only in parser
      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 
     17 package com.android.loganalysis.parser;
     18 
     19 import com.android.loganalysis.item.BatteryDischargeStatsInfoItem;
     20 
     21 import junit.framework.TestCase;
     22 
     23 import java.util.Arrays;
     24 import java.util.List;
     25 
     26 /**
     27  * Unit tests for {@link BatteryDischargeStatsInfoParser}
     28  */
     29 public class BatteryDischargeStatsInfoParserTest extends TestCase {
     30 
     31     /**
     32      * Test that normal input is parsed correctly.
     33      */
     34     public void testBatteryDischargeStats() {
     35         List<String> input = Arrays.asList(
     36             "  #0: +4m53s738ms to 0 (screen-on, power-save-off, device-idle-off)",
     37             "  #1: +4m5s586ms to 1 (screen-on, power-save-off, device-idle-off)",
     38             "  #2: +3m0s157ms to 2 (screen-on, power-save-off, device-idle-off)",
     39             "  #3: +2m52s243ms to 3 (screen-on, power-save-off, device-idle-off)",
     40             "  #4: +2m27s599ms to 4 (screen-on, power-save-off, device-idle-off)",
     41             "  #5: +5m0s172ms to 5 (screen-on, power-save-off, device-idle-off)",
     42             "  #6: +2m21s664ms to 6 (screen-on, power-save-off, device-idle-off)",
     43             "  #7: +5m18s811ms to 7 (screen-on, power-save-off, device-idle-off)",
     44             "  #8: +3m35s622ms to 8 (screen-on, power-save-off, device-idle-off)",
     45             "  #9: +4m52s605ms to 9 (screen-on, power-save-off, device-idle-off)",
     46             "  #10: +4m46s779ms to 10 (screen-on, power-save-off, device-idle-off)",
     47             "  #11: +4m0s200ms to 11 (screen-on, power-save-off, device-idle-off)",
     48             "  #12: +4m44s941ms to 12 (screen-on, power-save-off, device-idle-off)",
     49             "  #13: +3m31s163ms to 13 (screen-on, power-save-off, device-idle-off)",
     50             "  #14: +4m17s293ms to 14 (screen-on, power-save-off, device-idle-off)",
     51             "  #15: +3m11s584ms to 15 (screen-on, power-save-off, device-idle-off)",
     52             "  #16: +5m52s923ms to 16 (screen-on, power-save-off, device-idle-off)",
     53             "  #17: +3m7s34ms to 17 (screen-on, power-save-off, device-idle-off)",
     54             "  #18: +5m59s810ms to 18 (screen-on, power-save-off, device-idle-off)",
     55             "  #19: +6m15s275ms to 19 (screen-on, power-save-off, device-idle-off)",
     56             "  #20: +4m0s55ms to 20 (screen-on, power-save-off, device-idle-off)",
     57             "  #21: +5m21s911ms to 21 (screen-on, power-save-off, device-idle-off)",
     58             "  #22: +4m0s171ms to 22 (screen-on, power-save-off, device-idle-off)",
     59             "  #23: +5m22s820ms to 23 (screen-on, power-save-off, device-idle-off)",
     60             "  #24: +3m44s752ms to 24 (screen-on, power-save-off, device-idle-off)",
     61             "  #25: +4m15s130ms to 25 (screen-on, power-save-off, device-idle-off)",
     62             "  #26: +3m48s654ms to 26 (screen-on, power-save-off, device-idle-off)",
     63             "  #27: +5m0s294ms to 27 (screen-on, power-save-off, device-idle-off)",
     64             "  #28: +3m11s169ms to 28 (screen-on, power-save-off, device-idle-off)",
     65             "  #29: +4m48s194ms to 29 (screen-on, power-save-off, device-idle-off)",
     66             "  #30: +5m0s319ms to 30 (screen-on, power-save-off, device-idle-off)",
     67             "  #31: +2m42s209ms to 31 (screen-on, power-save-off, device-idle-off)",
     68             "  #32: +5m29s187ms to 32 (screen-on, power-save-off, device-idle-off)",
     69             "  #33: +3m32s392ms to 33 (screen-on, power-save-off, device-idle-off)",
     70             "  #34: +5m27s578ms to 34 (screen-on, power-save-off, device-idle-off)",
     71             "  #35: +3m47s37ms to 35 (screen-on, power-save-off, device-idle-off)",
     72             "  #36: +5m18s916ms to 36 (screen-on, power-save-off, device-idle-off)",
     73             "  #37: +2m54s111ms to 37 (screen-on, power-save-off, device-idle-off)",
     74             "  #38: +6m32s480ms to 38 (screen-on, power-save-off, device-idle-off)",
     75             "  #39: +5m24s906ms to 39 (screen-on, power-save-off, device-idle-off)",
     76             "  #40: +3m2s451ms to 40 (screen-on, power-save-off, device-idle-off)",
     77             "  #41: +6m29s762ms to 41 (screen-on, power-save-off, device-idle-off)",
     78             "  #42: +3m31s933ms to 42 (screen-on, power-save-off, device-idle-off)",
     79             "  #43: +4m58s520ms to 43 (screen-on, power-save-off, device-idle-off)",
     80             "  #44: +4m31s130ms to 44 (screen-on, power-save-off, device-idle-off)",
     81             "  #45: +5m28s870ms to 45 (screen-on, power-save-off, device-idle-off)",
     82             "  #46: +3m54s809ms to 46 (screen-on, power-save-off, device-idle-off)",
     83             "  #47: +5m5s105ms to 47 (screen-on, power-save-off, device-idle-off)",
     84             "  #48: +3m50s427ms to 48 (screen-on, power-save-off, device-idle-off)",
     85             "  #49: +6m0s344ms to 49 (screen-on, power-save-off, device-idle-off)",
     86             "  #50: +5m2s952ms to 50 (screen-on, power-save-off, device-idle-off)",
     87             "  #51: +3m6s120ms to 51 (screen-on, power-save-off, device-idle-off)",
     88             "  #52: +5m34s839ms to 52 (screen-on, power-save-off, device-idle-off)",
     89             "  #53: +2m33s473ms to 53 (screen-on, power-save-off, device-idle-off)",
     90             "  #54: +4m51s873ms to 54 (screen-on, power-save-off, device-idle-off)",
     91             "  #55: +3m30s41ms to 55 (screen-on, power-save-off, device-idle-off)",
     92             "  #56: +4m29s879ms to 56 (screen-on, power-save-off, device-idle-off)",
     93             "  #57: +3m41s722ms to 57 (screen-on, power-save-off, device-idle-off)",
     94             "  #58: +4m29s72ms to 58 (screen-on, power-save-off, device-idle-off)",
     95             "  #59: +4m49s351ms to 59 (screen-on, power-save-off, device-idle-off)",
     96             "  #60: +3m51s605ms to 60 (screen-on, power-save-off, device-idle-off)",
     97             "  #61: +5m8s334ms to 61 (screen-on, power-save-off, device-idle-off)",
     98             "  #62: +2m53s153ms to 62 (screen-on, power-save-off, device-idle-off)",
     99             "  #63: +6m0s234ms to 63 (screen-on, power-save-off, device-idle-off)",
    100             "  #64: +3m20s345ms to 64 (screen-on, power-save-off, device-idle-off)",
    101             "  #65: +5m46s211ms to 65 (screen-on, power-save-off, device-idle-off)",
    102             "  #66: +3m40s147ms to 66 (screen-on, power-save-off, device-idle-off)",
    103             "  #67: +5m14s559ms to 67 (screen-on, power-save-off, device-idle-off)",
    104             "  #68: +4m0s183ms to 68 (screen-on, power-save-off, device-idle-off)",
    105             "  #69: +5m23s334ms to 69 (screen-on, power-save-off, device-idle-off)",
    106             "  #70: +5m45s493ms to 70 (screen-on, power-save-off, device-idle-off)",
    107             "  #71: +4m0s179ms to 71 (screen-on, power-save-off, device-idle-off)",
    108             "  #72: +5m45s462ms to 72 (screen-on, power-save-off, device-idle-off)",
    109             "  #73: +3m10s449ms to 73 (screen-on, power-save-off, device-idle-off)",
    110             "  #74: +6m29s370ms to 74 (screen-on, power-save-off, device-idle-off)",
    111             "  #75: +3m20s414ms to 75 (screen-on, power-save-off, device-idle-off)",
    112             "  #76: +5m10s462ms to 76 (screen-on, power-save-off, device-idle-off)",
    113             "  #77: +4m20s500ms to 77 (screen-on, power-save-off, device-idle-off)",
    114             "  #78: +5m39s504ms to 78 (screen-on, power-save-off, device-idle-off)",
    115             "  #79: +5m59s819ms to 79 (screen-on, power-save-off, device-idle-off)",
    116             "  #80: +3m0s126ms to 80 (screen-on, power-save-off, device-idle-off)",
    117             "  #81: +6m20s912ms to 81 (screen-on, power-save-off, device-idle-off)",
    118             "  #82: +4m0s199ms to 82 (screen-on, power-save-off, device-idle-off)",
    119             "  #83: +5m23s470ms to 83 (screen-on, power-save-off, device-idle-off)",
    120             "  #84: +3m15s368ms to 84 (screen-on, power-save-off, device-idle-off)",
    121             "  #85: +6m18s625ms to 85 (screen-on, power-save-off, device-idle-off)",
    122             "  #86: +3m41s417ms to 86 (screen-on, power-save-off, device-idle-off)",
    123             "  #87: +5m32s257ms to 87 (screen-on, power-save-off, device-idle-off)",
    124             "  #88: +4m0s212ms to 88 (screen-on, power-save-off, device-idle-off)",
    125             "  #89: +5m41s218ms to 89 (screen-on, power-save-off, device-idle-off)",
    126             "  #90: +5m46s333ms to 90 (screen-on, power-save-off, device-idle-off)",
    127             "  #91: +3m58s362ms to 91 (screen-on, power-save-off, device-idle-off)",
    128             "  #92: +5m1s593ms to 92 (screen-on, power-save-off, device-idle-off)",
    129             "  #93: +4m47s33ms to 93 (screen-on, power-save-off, device-idle-off)",
    130             "  #94: +6m0s417ms to 94 (screen-on, power-save-off, device-idle-off)",
    131             "  #95: +3m9s77ms to 95 (screen-on, power-save-off, device-idle-off)",
    132             "  #96: +7m0s308ms to 96 (screen-on, power-save-off, device-idle-off)",
    133             "  #97: +3m29s741ms to 97 (screen-on, power-save-off, device-idle-off)",
    134             "  #98: +7m12s748ms to 98 (screen-on, power-save-off, device-idle-off)",
    135             "  Estimated screen on time: 7h 36m 13s 0ms ");
    136 
    137         BatteryDischargeStatsInfoItem infoItem = new BatteryDischargeStatsInfoParser().parse(input);
    138         assertEquals(99, infoItem.getDischargePercentage());
    139         assertEquals(27099330, infoItem.getDischargeDuration());
    140         assertEquals(27207848, infoItem.getProjectedBatteryLife());
    141     }
    142 
    143     /**
    144      * Test that input with only a few discharge stats.
    145      */
    146     public void testBatteryDischargeStatsWithTop5Percentages() {
    147         List<String> input = Arrays.asList(
    148             "  #95: +3m9s77ms to 95 (screen-on, power-save-off, device-idle-off)",
    149             "  #96: +7m0s308ms to 96 (screen-on, power-save-off, device-idle-off)",
    150             "  #97: +3m29s741ms to 97 (screen-on, power-save-off, device-idle-off)",
    151             "  #98: +7m12s748ms to 98 (screen-on, power-save-off, device-idle-off)",
    152             "  Estimated screen on time: 7h 36m 13s 0ms ");
    153 
    154         BatteryDischargeStatsInfoItem infoItem = new BatteryDischargeStatsInfoParser().parse(input);
    155 
    156         try {
    157             infoItem.getProjectedBatteryLife();
    158             fail("Projected battery life is expected to be undefined when there are not enough" +
    159                 " samples of battery discharge below 95 percent.");
    160         } catch (NullPointerException e) {
    161             // NullPointerException expected.
    162         }
    163     }
    164 }
    165