/* * Copyright (C) 2014 RoboVM AB * * 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.robovm.rt; import static org.junit.Assert.*; import static org.robovm.rt.LineNumbersInStackTracesTestMethods.*; import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; import org.junit.Test; /** * Tests that we get proper line numbers in stack traces. */ public class LineNumbersInStackTracesTest { @Test public void testLineNumbers() { ArrayList<StackTraceElement> stackTrace = new ArrayList<>(); try { LineNumbersInStackTracesTestMethods.m1(); } catch (Error e) { stackTrace.addAll(Arrays.asList(e.getStackTrace())); } assertFalse(stackTrace.isEmpty()); // Just consider the stack trace elements referring to the // LineNumbersInStackTracesTestMethods class and its Java file. for (Iterator<StackTraceElement> it = stackTrace.iterator(); it.hasNext();) { StackTraceElement e = it.next(); if (!e.getClassName().equals(CLASS_NAME) || !e.getFileName().equals(FILE_NAME)) { it.remove(); } } assertEquals(11, stackTrace.size()); assertEquals("m1", stackTrace.get(10).getMethodName()); assertEquals(M1_OFFSET + 0, stackTrace.get(10).getLineNumber()); assertEquals("m2", stackTrace.get(9).getMethodName()); assertEquals(M1_OFFSET + 2, stackTrace.get(9).getLineNumber()); assertEquals("m3", stackTrace.get(8).getMethodName()); assertEquals(M1_OFFSET + 6, stackTrace.get(8).getLineNumber()); assertEquals("m4", stackTrace.get(7).getMethodName()); assertEquals(M1_OFFSET + 10, stackTrace.get(7).getLineNumber()); assertEquals("m5", stackTrace.get(6).getMethodName()); assertEquals(M1_OFFSET + 15, stackTrace.get(6).getLineNumber()); assertEquals("m6", stackTrace.get(5).getMethodName()); assertEquals(M1_OFFSET + 19, stackTrace.get(5).getLineNumber()); assertEquals("m7", stackTrace.get(4).getMethodName()); assertEquals(M1_OFFSET + 32, stackTrace.get(4).getLineNumber()); assertEquals("m8", stackTrace.get(3).getMethodName()); assertEquals(M1_OFFSET + 97, stackTrace.get(3).getLineNumber()); assertEquals("m9", stackTrace.get(2).getMethodName()); assertEquals(M1_OFFSET + 359, stackTrace.get(2).getLineNumber()); assertEquals("m10", stackTrace.get(1).getMethodName()); // Line for this is undefined as its > 65536 assertEquals("m100", stackTrace.get(0).getMethodName()); // Line for this is undefined as its > 65536 } }