/*******************************************************************************
* Copyright (c) 2005 David Corbin and others
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* David Corbin: dcorbin@users.sourceforge.net
*******************************************************************************/
package org.rubypeople.rdt.internal.ui;
import org.rubypeople.eclipse.shams.resources.ShamProject;
import org.rubypeople.rdt.internal.ui.util.StackTraceLine;
import junit.framework.TestCase;
public class TC_StackTraceLine extends TestCase {
private static final String BACKSLASH_FILE_PATH = "C:\\ruby\\lib\\ruby\\gems\\1.8\\gems\\activesupport-1.4.2\\lib/active_support/dependencies.rb:376:in `new_constants_in': undefined method `empty?' for nil:NilClass (NoMethodError)";
private static final String RUBY_CONSOLE_TEST_FAILURE = "testA(BTest) [/RdtTestLib/anotherFile.rb:12]:";
private static final String TEST_UNIT_VIEW_BACKTRACE = " /RdtTestLib/anotherFile.rb:12";
private static final String BACKTRACE_WITH_IN = " /RdtTestLib/anotherFile.rb:12:in `testB'";
private static final String WITH_FROM = "\tfrom /RdtTestLib/anotherFile.rb:4";
private static final String ODD_WITH_FROM = " ^ from /RdtTestLib/anotherFile.rb:4";
private static final String WITH_OUT_FROM = "/RdtTestLib/anotherFile.rb:4";
private static final String WITH_TRAILING_SPACE = "/RdtTestLib/anotherFile.rb:4 ";
private static final String LOOKS_ABSOLUTE = "\t/app/controllers/tags_controller.rb:5:in `index'";
public void testWithFrom() {
assertFalse("has a stack trace", StackTraceLine.isTraceLine(WITH_TRAILING_SPACE));
}
public void testRelativePathWithPeriod() {
assertTrue("has a stack trace", StackTraceLine.isTraceLine(" ./content/scripts/WatirScripts/byFeature/../lib/lib_atf_base.rb:240:in `treeNavigation'"));
}
public void testRelativePathWithoutPeriod() {
assertTrue("has a stack trace", StackTraceLine.isTraceLine("content/scripts/WatirScripts/byFeature/serialized_framework_validation_IT13_script.rb:43:in `test_tc85'"));
}
public void testWithTrailingSpace() {
assertTrue("has a stack trace", StackTraceLine.isTraceLine(WITH_FROM));
StackTraceLine traceLine = new StackTraceLine(WITH_FROM);
assertEquals("Filename", "/RdtTestLib/anotherFile.rb", traceLine.getFilename());
assertEquals("Line Number", 4, traceLine.getLineNumber());
assertEquals("Offset", 6, traceLine.offset());
assertEquals("Length", 28, traceLine.length());
}
public void testWithOutFrom() {
assertTrue("has a stack trace", StackTraceLine.isTraceLine(WITH_OUT_FROM));
StackTraceLine traceLine = new StackTraceLine(WITH_OUT_FROM);
assertEquals("Filename", "/RdtTestLib/anotherFile.rb", traceLine.getFilename());
assertEquals("Line Number", 4, traceLine.getLineNumber());
assertEquals("Offset", 0, traceLine.offset());
assertEquals("Length", 28, traceLine.length());
}
public void testOddWithFrom() {
assertTrue("has a stack trace", StackTraceLine.isTraceLine(ODD_WITH_FROM));
StackTraceLine traceLine = new StackTraceLine(ODD_WITH_FROM);
assertEquals("Filename", "/RdtTestLib/anotherFile.rb", traceLine.getFilename());
assertEquals("Line Number", 4, traceLine.getLineNumber());
assertEquals("Offset", 8, traceLine.offset());
assertEquals("Length", 28, traceLine.length());
}
public void testBacktraceWithInTestFailure() {
assertTrue("has a stack trace", StackTraceLine.isTraceLine(BACKTRACE_WITH_IN));
StackTraceLine traceLine = new StackTraceLine(BACKTRACE_WITH_IN);
assertEquals("Filename", "/RdtTestLib/anotherFile.rb", traceLine.getFilename());
assertEquals("Line Number", 12, traceLine.getLineNumber());
assertEquals("Offset", 3, traceLine.offset());
assertEquals("Length", 29, traceLine.length());
}
public void testConsoleTestFailure() {
assertTrue(StackTraceLine.isTraceLine(RUBY_CONSOLE_TEST_FAILURE));
StackTraceLine traceLine = new StackTraceLine(RUBY_CONSOLE_TEST_FAILURE);
assertEquals("Filename", "/RdtTestLib/anotherFile.rb", traceLine.getFilename());
assertEquals("Line Number", 12, traceLine.getLineNumber());
assertEquals("Offset", 14, traceLine.offset());
assertEquals("Length", 29, traceLine.length());
}
public void testTestUnitViewBackTrace() {
StackTraceLine traceLine = new StackTraceLine(TEST_UNIT_VIEW_BACKTRACE);
assertEquals("Filename", "/RdtTestLib/anotherFile.rb", traceLine.getFilename());
assertEquals("Line Number", 12, traceLine.getLineNumber());
assertEquals("Offset", 3, traceLine.offset());
assertEquals("Length", 29, traceLine.length());
}
public void testLooksAbsoluteButIsRelativeToProject() {
StackTraceLine traceLine = new StackTraceLine(LOOKS_ABSOLUTE, new ShamProject("testing"));
assertEquals("Filename", "/testing/app/controllers/tags_controller.rb", traceLine.getFilename());
assertEquals("Line Number", 5, traceLine.getLineNumber());
assertEquals("Offset", 1, traceLine.offset());
assertEquals("Length", 37, traceLine.length());
}
public void testBackslashInFilePath() {
StackTraceLine traceLine = new StackTraceLine(BACKSLASH_FILE_PATH, new ShamProject("testing"));
assertEquals("Filename", "C:\\ruby\\lib\\ruby\\gems\\1.8\\gems\\activesupport-1.4.2\\lib/active_support/dependencies.rb", traceLine.getFilename());
assertEquals("Line Number", 376, traceLine.getLineNumber());
assertEquals("Offset", 0, traceLine.offset());
assertEquals("Length", 89, traceLine.length());
}
}