rasta/rasta_exp/tester/wognsen_et_al_tester.py
Jean-Marie Mineau cd1e91bb99
first commit
2023-11-16 14:30:24 +01:00

66 lines
1.8 KiB
Python

from .abstract_tester import abstract_tester
import utils
import error_collector as errors
import datetime
import re
from typing import Type
from pathlib import Path
from typing import Optional
from more_itertools import peekable
class XsbError(errors.LoggedError):
def __init__(
self,
first_line_nb: int,
last_line_nb: int,
msg: str,
logfile_name: str = "",
):
self.first_line_nb = first_line_nb
self.last_line_nb = last_line_nb
self.msg = msg
self.logfile_name = logfile_name
def __str__(self):
return f"++Error{self.msg}"
def get_dict(self) -> dict:
return {
"error_type": "Xsb",
"msg": self.msg,
"first_line": self.first_line_nb,
"last_line": self.last_line_nb,
"logfile_name": self.logfile_name,
}
@staticmethod
def parse_error(logs: peekable) -> Optional["XsbError"]:
line_nb, line = logs.peek((None, None))
if line is None or line_nb is None:
return None
if not line.startswith("++Error"):
return None
error = XsbError(line_nb, line_nb, line.strip())
next(logs)
return error
class wognsen_et_al_tester(abstract_tester):
EXPECTED_ERROR_TYPES: list = [
errors.JavaError,
errors.NoPrefixJavaError,
errors.PythonError,
XsbError,
]
TOOL_NAME = "wognsen_et_al"
def __init__(self):
super().__init__()
@classmethod
def check_success(cls, path: Path, apk_filename: str):
"""Check if the analysis finished without crashing."""
# The tool is supposed to print the graph to stdout, if stdout
# is empty, it means the tool failed.
return (path / "stdout").stat().st_size > 1