content: /*
   * Copyright (C) 2014 The Android Open Source Project
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *      http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  
  package dexfuzz.listeners;
  
  import dexfuzz.ExecutionResult;
  import dexfuzz.executors.Executor;
  import dexfuzz.program.Mutation;
  
  import java.util.List;
  import java.util.Map;
  
  /**
   * Logs output to the console, when not using --repeat.
   */
  public class ConsoleLoggerListener extends BaseListener {
    @Override
    public void setup() {
  
    }
  
    @Override
    public void shutdown() {
  
    }
  
    private void logToConsole(String msg) {
      System.out.println("CONSOLE: " + msg);
    }
  
    @Override
    public void handleSuccessfulHostVerification() {
      logToConsole("Successful host verification");
    }
  
    @Override
    public void handleFailedHostVerification(ExecutionResult verificationResult) {
      logToConsole("Failed host verification");
    }
  
    @Override
    public void handleMutations(List<Mutation> mutations) {
      for (Mutation mutation : mutations) {
        logToConsole("Applied mutation: " + mutation.toString());
      }
    }
  
    @Override
    public void handleArchitectureSplit() {
      logToConsole("Detected architectural split.");
    }
  
    @Override
    public void handleFailedTargetVerification() {
      logToConsole("Failed target verification");
    }
  
    @Override
    public void handleIterationStarted(int iteration) {
      logToConsole("Starting iteration " + iteration);
    }
  
    @Override
    public void handleIterationFinished(int iteration) {
      logToConsole("Finished iteration " + iteration);
    }
  
    @Override
    public void handleTimeouts(List<Executor> timedOut, List<Executor> didNotTimeOut) {
      logToConsole("Timed out: " + timedOut.size() + " Did not time out: " + didNotTimeOut.size());
    }
  
    @Override
    public void handleDivergences(Map<String, List<Executor>> outputMap) {
      logToConsole("Got divergences!");
      int outputCount = 1;
      for (List<Executor> executors : outputMap.values()) {
        logToConsole("Output " + outputCount + ":");
        for (Executor executor : executors) {
          logToConsole("  " + executor.getName());
        }
        outputCount++;
      }
    }
  
    @Override
    public void handleFuzzingFile(String inputFile) {
      logToConsole("Fuzzing: " + inputFile);
    }
  
    @Override
    public void handleSeed(long seed) {
      logToConsole("Seed: " + seed);
    }
  
    @Override
    public void handleHostVerificationSigabort(ExecutionResult verificationResult) {
      logToConsole("Sigaborted host verification");
    }
  
    @Override
    public void handleSuccessfullyFuzzedFile(String programName) {
      logToConsole("Program " + programName + " successfully fuzzed.");
    }
  
    @Override
    public void handleSuccess(Map<String, List<Executor>> outputMap) {
      logToConsole("Execution was successful");
    }
  
    @Override
    public void handleDumpOutput(String outputLine, Executor executor) {
      logToConsole(executor.getName() + " OUTPUT: " + outputLine);
    }
  
    @Override
    public void handleDumpVerify(String verifyLine) {
      logToConsole("VERIFY: " + verifyLine);
    }
  
    @Override
    public void handleMutationFail() {
      logToConsole("DEX file was not mutated");
    }
  
    @Override
    public void handleMutationStats(String statsString) {
      logToConsole("Mutations performed: " + statsString);
    }
  
    @Override
    public void handleTiming(String name, float elapsedTime) {
      logToConsole(String.format("'%s': %.3fs", name, elapsedTime));
    }
  
    @Override
    public void handleSummary() {
      logToConsole("--- SUMMARY ---");
    }
  
    @Override
    public void handleSelfDivergence() {
      logToConsole("Seen self divergence");
    }
  
    @Override
    public void handleMessage(String msg) {
      logToConsole(msg);
    }
  }
  