mirror of
https://github.com/Eaglercraft-TeaVM-Fork/eagler-teavm.git
synced 2024-12-22 08:14:09 -08:00
Remove excessive file
This commit is contained in:
parent
47973face1
commit
ee0ebd4c2b
|
@ -1,189 +0,0 @@
|
|||
/*
|
||||
* Copyright 2018 Alexey Andreev.
|
||||
*
|
||||
* 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 org.teavm.junit;
|
||||
|
||||
import static java.nio.charset.StandardCharsets.UTF_8;
|
||||
import java.io.BufferedReader;
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.Reader;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
import net.sourceforge.htmlunit.corejs.javascript.Scriptable;
|
||||
import org.teavm.debugging.information.DebugInformation;
|
||||
import org.teavm.debugging.information.GeneratedLocation;
|
||||
import org.teavm.debugging.information.SourceLocation;
|
||||
import org.teavm.model.MethodReference;
|
||||
|
||||
final class RhinoResultParser {
|
||||
private static Pattern pattern = Pattern.compile("(([A-Za-z_$][A-Za-z0-9_$]*)\\(\\))?@.+:([0-9]+)");
|
||||
private static Pattern lineSeparator = Pattern.compile("\\r\\n|\r|\n");
|
||||
private DebugInformation debugInformation;
|
||||
private String[] script;
|
||||
|
||||
RhinoResultParser(File debugFile) {
|
||||
if (debugFile != null) {
|
||||
debugInformation = getDebugInformation(debugFile);
|
||||
script = getScript(new File(debugFile.getParentFile(),
|
||||
debugFile.getName().substring(0, debugFile.getName().length() - 9)));
|
||||
}
|
||||
}
|
||||
|
||||
void parseResult(Scriptable result, TestRunCallback callback) {
|
||||
if (result == null) {
|
||||
callback.complete();
|
||||
return;
|
||||
}
|
||||
String status = result.get("status", result).toString();
|
||||
switch (status) {
|
||||
case "ok":
|
||||
callback.complete();
|
||||
break;
|
||||
case "exception": {
|
||||
String className = String.valueOf(result.get("className", result));
|
||||
if (debugInformation != null) {
|
||||
String decodedName = debugInformation.getClassNameByJsName(className);
|
||||
if (decodedName != null) {
|
||||
className = decodedName;
|
||||
}
|
||||
}
|
||||
String message = String.valueOf(result.get("message", result));
|
||||
|
||||
String stack = result.get("stack", result).toString();
|
||||
StackTraceElement[] decodedStack = null;
|
||||
if (debugInformation != null) {
|
||||
List<StackTraceElement> elements = new ArrayList<>(Arrays.asList(decodeStack(stack)));
|
||||
List<StackTraceElement> currentElements = Arrays.asList(Thread.currentThread().getStackTrace());
|
||||
elements.addAll(currentElements.subList(2, currentElements.size()));
|
||||
decodedStack = elements.toArray(new StackTraceElement[0]);
|
||||
stack = "";
|
||||
} else {
|
||||
stack = "\n" + stack;
|
||||
}
|
||||
|
||||
Throwable e;
|
||||
if (className.equals("java.lang.AssertionError")) {
|
||||
e = new AssertionError(message + stack);
|
||||
} else {
|
||||
e = new RuntimeException(className + ": " + message + stack);
|
||||
}
|
||||
if (decodedStack != null) {
|
||||
e.setStackTrace(decodedStack);
|
||||
}
|
||||
callback.error(e);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
StackTraceElement[] decodeStack(String stack) {
|
||||
List<StackTraceElement> elements = new ArrayList<>();
|
||||
for (String line : lineSeparator.split(stack)) {
|
||||
Matcher matcher = pattern.matcher(line);
|
||||
if (!matcher.matches()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
String functionName = matcher.group(2);
|
||||
int jsLineNumber = Integer.parseInt(matcher.group(3)) - 1;
|
||||
|
||||
String scriptLine = script[jsLineNumber];
|
||||
int jsColumn = firstNonSpace(scriptLine);
|
||||
|
||||
int layer = 0;
|
||||
List<StackTraceElement> elementsByLine = new ArrayList<>();
|
||||
GeneratedLocation jsLocation = new GeneratedLocation(jsLineNumber, jsColumn);
|
||||
while (true) {
|
||||
int lineNumber = jsLineNumber;
|
||||
|
||||
MethodReference method = debugInformation.getMethodAt(jsLocation, layer);
|
||||
String className;
|
||||
String methodName;
|
||||
|
||||
if (method != null) {
|
||||
className = method.getClassName();
|
||||
methodName = method.getName();
|
||||
} else if (layer > 0) {
|
||||
break;
|
||||
} else {
|
||||
className = "<JS>";
|
||||
methodName = functionName != null ? functionName : "<unknown_function>";
|
||||
}
|
||||
|
||||
String fileName;
|
||||
SourceLocation location = debugInformation.getSourceLocation(jsLocation, layer);
|
||||
if (location != null && location.getFileName() != null) {
|
||||
fileName = location.getFileName();
|
||||
fileName = fileName.substring(fileName.lastIndexOf('/') + 1);
|
||||
lineNumber = location.getLine();
|
||||
} else {
|
||||
fileName = "test.js";
|
||||
lineNumber++;
|
||||
}
|
||||
|
||||
elementsByLine.add(new StackTraceElement(className, methodName, fileName, lineNumber));
|
||||
|
||||
++layer;
|
||||
}
|
||||
|
||||
Collections.reverse(elementsByLine);
|
||||
elements.addAll(elementsByLine);
|
||||
}
|
||||
|
||||
return elements.toArray(new StackTraceElement[0]);
|
||||
}
|
||||
|
||||
private static DebugInformation getDebugInformation(File debugFile) {
|
||||
try (InputStream input = new FileInputStream(debugFile)) {
|
||||
return DebugInformation.read(input);
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
private static String[] getScript(File file) {
|
||||
List<String> lines = new ArrayList<>();
|
||||
try (InputStream input = new FileInputStream(file);
|
||||
Reader reader = new InputStreamReader(input, UTF_8);
|
||||
BufferedReader bufferedReader = new BufferedReader(reader)) {
|
||||
while (true) {
|
||||
String line = bufferedReader.readLine();
|
||||
if (line == null) {
|
||||
break;
|
||||
}
|
||||
lines.add(line);
|
||||
}
|
||||
return lines.toArray(new String[0]);
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
private static int firstNonSpace(String s) {
|
||||
int i = 0;
|
||||
while (i < s.length() && s.charAt(i) == ' ') {
|
||||
i++;
|
||||
}
|
||||
return i;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user