[Infer][tests] Adding parser for stats.json, matcher for checking number of files analyzed by stats.json

master
Sam Blackshear 9 years ago
parent 7640b01096
commit daac9c7af7

@ -0,0 +1,84 @@
/*
* Copyright (c) 2015 - present Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*/
package utils;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.io.BufferedReader;
import java.io.File;
import java.io.InputStreamReader;
import java.io.IOException;
import java.io.Reader;
@JsonIgnoreProperties(ignoreUnknown=true)
public class InferStats {
private static class IntFields {
@JsonProperty(value = "files")
int numFiles;
@JsonProperty(value = "lines")
int numLines;
}
private static class FloatFields {
@JsonProperty(value = "reporting_time")
float reportingTime;
@JsonProperty(value = "capture_time")
float captureTime;
@JsonProperty(value = "analysis_time")
float analysisTime;
}
@JsonProperty(value = "int")
private IntFields intFields;
@JsonProperty(value = "float")
private FloatFields floatFields;
private static InferStats parseInferStatsFromJson(Reader reader) throws IOException {
ObjectMapper mapper = new ObjectMapper();
InferStats user = mapper.readValue(reader, InferStats.class);
return user;
}
public static InferStats loadInferStats(Class currentClass, String sourceDir) throws IOException {
BufferedReader reader =
new BufferedReader(
new InputStreamReader(
currentClass.getResourceAsStream(sourceDir + "stats.json")));
return parseInferStatsFromJson(reader);
}
public int getNumFiles() {
return intFields.numFiles;
}
public int getNumLines() {
return intFields.numLines;
}
public float getReportingTime() {
return floatFields.reportingTime;
}
public float getCaptureTime() {
return floatFields.captureTime;
}
public float getAnalysisTime() {
return floatFields.analysisTime;
}
}

@ -0,0 +1,52 @@
/*
* Copyright (c) 2015 - present Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*/
package utils.matchers;
import org.hamcrest.BaseMatcher;
import org.hamcrest.Description;
import org.hamcrest.Matcher;
import utils.InferError;
import utils.InferStats;
public class NumberOfFilesAnalyzed extends BaseMatcher<InferStats> {
private int expectedNumFiles;
private int actualNumFiles;
public NumberOfFilesAnalyzed(int expectedNumFiles) {
this.expectedNumFiles = expectedNumFiles;
this.actualNumFiles = -1;
}
@Override
public boolean matches(Object o) {
InferStats stats = (InferStats) o;
actualNumFiles = stats.getNumFiles();
return actualNumFiles == expectedNumFiles;
}
@Override
public void describeTo(Description description) {
description.appendText(expectedNumFiles + " files analyzed by Infer.");
}
@Override
public void describeMismatch(Object item, Description description) {
InferStats stats = (InferStats) item;
description.appendText("found " + actualNumFiles + " files analyzed by Infer.");
}
public static <T> Matcher<InferStats> numberOfFilesAnalyzed(
int expectedNumFiles) {
return new NumberOfFilesAnalyzed(expectedNumFiles);
}
}
Loading…
Cancel
Save