package org.rubypeople.rdt.internal.ui.rubyeditor;
import junit.framework.TestCase;
import org.eclipse.jface.text.DefaultLineTracker;
import org.eclipse.jface.text.Document;
import org.eclipse.jface.text.DocumentCommand;
import org.rubypeople.rdt.internal.ui.rubyeditor.RubyEditor.TabConverter;
public class TC_TabConverter extends TestCase {
private static final String TEST_TEXT = "012345678\n123456789\n";
private static class TestDocumentCommand extends DocumentCommand {
public TestDocumentCommand(int offset) {
this.offset = offset;
}
}
public void testSpacesForTab() {
verifyTabExpansion(4, 0, 4);
verifyTabExpansion(4, 1, 3);
verifyTabExpansion(4, 2, 2);
verifyTabExpansion(4, 3, 1);
verifyTabExpansion(4, 4, 4);
verifyTabExpansion(4, 5, 3);
verifyTabExpansion(5, 4, 1);
}
public void testSubsequentLines() {
verifyTabExpansion(4, 10, 4);
verifyTabExpansion(4, 12, 2);
verifyTabExpansion(4, 14, 4);
}
public void testSpacesOneSpacePerTab() {
verifyTabExpansion(1, 0, 1);
verifyTabExpansion(1, 1, 1);
verifyTabExpansion(1, 2, 1);
verifyTabExpansion(1, 3, 1);
verifyTabExpansion(1, 4, 1);
}
public void testSpacesZeroSpacPerTab() {
verifyTabExpansion(0, 0, 1);
verifyTabExpansion(0, 1, 1);
verifyTabExpansion(0, 2, 1);
verifyTabExpansion(0, 3, 1);
verifyTabExpansion(0, 4, 1);
}
private void verifyTabExpansion(int spacesPerTab, int currentOffset, int expectedCountOfTabs) {
TabConverter converter = new TabConverter();
converter.setNumberOfSpacesPerTab(spacesPerTab);
TestDocumentCommand command = new TestDocumentCommand(currentOffset);
command.text = "\t";
Document document = new Document(TEST_TEXT);
DefaultLineTracker tracker = new DefaultLineTracker();
converter.setLineTracker(tracker);
converter.customizeDocumentCommand(document, command);
String message = "Offset = "+currentOffset + "; tabWidth = "+spacesPerTab;
if (spacesPerTab == 0)
assertEquals(message, "", command.text);
else
assertEquals(message, " ".substring(0,expectedCountOfTabs), command.text);
// assertEquals("Full indent (" + spacesPerTab + ")", " ".substring(0,spacesPerTab), expander.getFullIndent());
}
}