Skip to content

Commit

Permalink
Add tests
Browse files Browse the repository at this point in the history
  • Loading branch information
NebelNidas committed Apr 15, 2024
1 parent e5eff7c commit 12dfc4d
Show file tree
Hide file tree
Showing 6 changed files with 371 additions and 18 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -227,13 +227,17 @@ public String peekCols(boolean unescape) throws IOException {
*
* @return -1 if nothing has been read (first char was EOL), otherwise the number present.
*/
public int nextIntCol() throws IOException {
public int nextIntCol(boolean rethrowNumberFormatExceptionAsIOException) throws IOException {
String str = nextCol(false);

try {
return str != null ? Integer.parseInt(str) : -1;
} catch (NumberFormatException e) {
throw new IOException("invalid number in line "+lineNumber+": "+str);
if (rethrowNumberFormatExceptionAsIOException) {
throw new IOException("invalid number in line "+lineNumber+": "+str);
} else {
throw e;
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -155,13 +155,14 @@ private static void readClassBody(ColumnFileReader reader, int indent, String sr
}

String dstNameOrSrcDesc = reader.nextCol();
String srcDesc = reader.nextCol();

if (dstNameOrSrcDesc == null || dstNameOrSrcDesc.isEmpty()) {
errorCollector.addWarning("missing member-name-b/member-desc-a in line "+reader.getLineNumber());
dstNameOrSrcDesc = null;
srcDesc = null; // just to be sure
}

String srcDesc = reader.nextCol();
String dstName;

if (srcDesc == null) {
Expand Down Expand Up @@ -222,7 +223,13 @@ private static void readMethod(ColumnFileReader reader, int indent, StringBuilde
submitComment(MappedElementKind.METHOD, commentSb, visitor);

if (reader.nextCol("ARG")) { // method parameter: ARG <lv-index> <name-b>
int lvIndex = reader.nextIntCol();
int lvIndex = -1;

try {
lvIndex = reader.nextIntCol(false);
} catch (NumberFormatException e) {
// lvIndex remains -1, handled below
}

if (lvIndex < 0) {
errorCollector.addError("missing/invalid parameter lv-index in line "+reader.getLineNumber());
Expand All @@ -231,7 +238,14 @@ private static void readMethod(ColumnFileReader reader, int indent, StringBuilde

if (visitor.visitMethodArg(-1, lvIndex, null)) {
String dstName = reader.nextCol();
if (dstName != null && !dstName.isEmpty()) visitor.visitDstName(MappedElementKind.METHOD_ARG, 0, dstName);

if (dstName != null) {
if (dstName.isEmpty()) {
errorCollector.addWarning("missing var-name-b in line "+reader.getLineNumber());
} else {
visitor.visitDstName(MappedElementKind.METHOD_ARG, 0, dstName);
}
}

readElement(reader, MappedElementKind.METHOD_ARG, indent, commentSb, visitor);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,7 @@ private static void read(ColumnFileReader reader, String sourceNs, String target

if (dstName == null || dstName.isEmpty()) {
errorCollector.addWarning("missing class-name-b in line "+reader.getLineNumber());
dstName = null;
}

visitor.visitDstName(MappedElementKind.CLASS, 0, dstName);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -305,7 +305,13 @@ private static void readMethod(ColumnFileReader reader, int dstNsCount, MappingV
if (reader.nextCol("static")) {
// method is static
} else {
int lvIndex = reader.nextIntCol();
int lvIndex = -1;

try {
lvIndex = reader.nextIntCol(false);
} catch (NumberFormatException e) {
// lvIndex remains -1, handled below
}

if (lvIndex < 0) {
errorCollector.addWarning("missing/invalid parameter lv-index in line "+reader.getLineNumber());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,8 +46,8 @@ public static List<String> getNamespaces(Reader reader) throws IOException {

private static List<String> getNamespaces(ColumnFileReader reader) throws IOException {
if (!reader.nextCol("tiny") // magic
|| reader.nextIntCol() != 2 // major version
|| reader.nextIntCol() < 0) { // minor version
|| reader.nextIntCol(true) != 2 // major version
|| reader.nextIntCol(true) < 0) { // minor version
throw new IOException("invalid/unsupported tiny file: no tiny 2 header");
}

Expand All @@ -72,8 +72,8 @@ public static void read(Reader reader, MappingVisitor visitor, ErrorCollector er

private static void read(ColumnFileReader reader, MappingVisitor visitor, ErrorCollector errorCollector) throws IOException {
if (!reader.nextCol("tiny") // magic
|| reader.nextIntCol() != 2 // major version
|| reader.nextIntCol() < 0) { // minor version
|| reader.nextIntCol(true) != 2 // major version
|| reader.nextIntCol(true) < 0) { // minor version
throw new IOException("invalid/unsupported tiny file: no tiny 2 header");
}

Expand Down Expand Up @@ -203,7 +203,14 @@ private static void readMethod(ColumnFileReader reader, int dstNsCount, boolean

while (reader.nextLine(2)) {
if (reader.nextCol("p")) { // method parameter: p <lv-index> <names>...
int lvIndex = reader.nextIntCol();
int lvIndex = -1;

try {
lvIndex = reader.nextIntCol(false);
} catch (NumberFormatException e) {
errorCollector.addError("invalid parameter lv-index in line "+reader.getLineNumber());
continue;
}

if (lvIndex < 0) {
errorCollector.addWarning("missing/invalid parameter lv-index in line "+reader.getLineNumber());
Expand All @@ -224,26 +231,53 @@ private static void readMethod(ColumnFileReader reader, int dstNsCount, boolean
readElement(reader, MappedElementKind.METHOD_ARG, dstNsCount, escapeNames, visitor, errorCollector);
}
} else if (reader.nextCol("v")) { // method variable: v <lv-index> <lv-start-offset> <optional-lvt-index> <names>...
int lvIndex = reader.nextIntCol();
int lvIndex = -1;

try {
lvIndex = reader.nextIntCol(false);
} catch (NumberFormatException e) {
errorCollector.addError("invalid variable lv-index in line "+reader.getLineNumber());
continue;
}

if (lvIndex < 0) {
errorCollector.addWarning("missing/invalid variable lv-index in line "+reader.getLineNumber());
lvIndex = -1;
}

int startOpIdx = reader.nextIntCol();
int startOpIdx = -1;

try {
startOpIdx = reader.nextIntCol(false);
} catch (NumberFormatException e) {
errorCollector.addError("invalid variable lv-start-offset in line "+reader.getLineNumber());
continue;
}

if (startOpIdx < 0) {
errorCollector.addWarning("missing/invalid variable lv-start-offset in line "+reader.getLineNumber());
startOpIdx = -1;
}

int lvtRowIndex = reader.nextIntCol();
String srcName = reader.nextCol(escapeNames);
int lvtRowIndex = -1;

if (srcName == null) {
errorCollector.addWarning("missing var-name-a column in line "+reader.getLineNumber());
} else if (srcName.isEmpty()) {
try {
lvtRowIndex = reader.nextIntCol(false);
} catch (NumberFormatException e) {
errorCollector.addError("invalid variable lvt-index in line "+reader.getLineNumber());
continue;
}

if (lvtRowIndex < -1) {
errorCollector.addWarning("invalid variable lvt-index in line "+reader.getLineNumber());
lvtRowIndex = -1;
}

String srcName = null;

if (reader.isAtEol()) {
errorCollector.addWarning("missing var-name columns in line "+reader.getLineNumber());
} else if ((srcName = reader.nextCol(escapeNames)).isEmpty()) {
srcName = null;
}

Expand Down
Loading

0 comments on commit 12dfc4d

Please sign in to comment.