1959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle/*
2959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle * Copyright (C) 2014 The Android Open Source Project
3959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle *
4959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle * Licensed under the Apache License, Version 2.0 (the "License");
5959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle * you may not use this file except in compliance with the License.
6959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle * You may obtain a copy of the License at
7959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle *
8959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle *      http://www.apache.org/licenses/LICENSE-2.0
9959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle *
10959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle * Unless required by applicable law or agreed to in writing, software
11959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle * distributed under the License is distributed on an "AS IS" BASIS,
12959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle * See the License for the specific language governing permissions and
14959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle * limitations under the License.
15959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle */
16959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle
17959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kylepackage dexfuzz.listeners;
18959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle
19959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyleimport dexfuzz.ExecutionResult;
20959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyleimport dexfuzz.executors.Executor;
21959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle
22959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyleimport java.util.List;
23959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyleimport java.util.Map;
24959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle
25959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle/**
26959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle * Implements the live updating table of results when --repeat is being used.
27959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle */
28959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kylepublic class UpdatingConsoleListener extends BaseListener {
29959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle  long successfulVerification;
30959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle  long failedVerification;
31959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle  long failedMutation;
32959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle  long success;
33959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle  long timedOut;
34959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle  long divergence;
35959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle  long selfDivergent;
36959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle  long architectureSplit;
37959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle  long iterations;
38959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle
39959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle  @Override
40959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle  public void setup() {
41959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle    System.out.println("|-----------------------------------------------------------------|");
42959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle    System.out.println("|Iterations|VerifyFail|MutateFail|Timed Out |Successful|Divergence|");
43959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle    System.out.println("|-----------------------------------------------------------------|");
44959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle  }
45959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle
46959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle  @Override
47959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle  public void handleSuccessfulHostVerification() {
48959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle    successfulVerification++;
49959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle  }
50959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle
51959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle  @Override
52959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle  public void handleFailedHostVerification(ExecutionResult verificationResult) {
53959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle    failedVerification++;
54959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle  }
55959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle
56959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle  @Override
57959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle  public void handleFailedTargetVerification() {
58959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle    failedVerification++;
59959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle  }
60959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle
61959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle  @Override
62959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle  public void handleIterationStarted(int iteration) {
63959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle    iterations++;
64959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle  }
65959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle
66959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle  @Override
67959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle  public void handleIterationFinished(int iteration) {
68959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle    String output = String.format("| %-9d| %-9d| %-9d| %-9d| %-9d| %-9d|",
69959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle        iterations, failedVerification, failedMutation, timedOut, success,
70959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle        divergence - (selfDivergent + architectureSplit));
71959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle    System.out.print("\r" + output);
72959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle  }
73959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle
74959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle  @Override
75959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle  public void handleTimeouts(List<Executor> timedOut, List<Executor> didNotTimeOut) {
76959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle    this.timedOut++;
77959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle  }
78959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle
79959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle  @Override
80959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle  public void handleDivergences(Map<String, List<Executor>> outputMap) {
81959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle    divergence++;
82959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle  }
83959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle
84959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle  @Override
85959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle  public void handleSelfDivergence() {
86959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle    selfDivergent++;
87959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle  }
88959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle
89959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle  @Override
90959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle  public void handleArchitectureSplit() {
91959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle    architectureSplit++;
92959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle  }
93959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle
94959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle  @Override
95959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle  public void handleSuccess(Map<String, List<Executor>> outputMap) {
96959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle    success++;
97959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle  }
98959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle
99959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle  @Override
100959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle  public void handleMutationFail() {
101959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle    failedMutation++;
102959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle  }
103959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle
104959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle  @Override
105959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle  public void handleSummary() {
106959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle    System.out.println("\n|-----------------------------------------------------------------|");
107959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle  }
108959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle}
109