package org.rubypeople.rdt.internal.core.parser; import java.io.StringReader; import java.util.HashMap; import java.util.List; import java.util.Map; import junit.framework.TestCase; import org.eclipse.core.resources.IMarker; import org.rubypeople.rdt.core.RubyCore; public class TC_TaskParser extends TestCase { private static final String BASIC_MESSAGE = "#TASK test"; private static final String BASIC_MESSAGE_EXPECTED = "TASK test"; private static final String ALTERNATE_MESSAGE = "#CHORE test"; private static final String ALTERNATE_MESSAGE_EXPECTED = "CHORE test"; private Map preferences; private TaskParser parser; public void setUp() { preferences = new HashMap(); preferences.put(RubyCore.COMPILER_TASK_TAGS, "TASK"); parser = new TaskParser(preferences); } public void testSimpleTag() { List tasks = parseTasks("TASK", BASIC_MESSAGE); assertEquals(1, tasks.size()); assertTask(BASIC_MESSAGE_EXPECTED, 1, 1, IMarker.PRIORITY_NORMAL, (TaskTag) tasks.get(0)); } public void testIndentedTag() { List tasks = parseTasks("TASK", "x"+BASIC_MESSAGE); assertEquals(1, tasks.size()); assertTask(BASIC_MESSAGE_EXPECTED, 2, 1, IMarker.PRIORITY_NORMAL, (TaskTag) tasks.get(0)); } public void testCaseInsensitive() { preferences.put(RubyCore.COMPILER_TASK_CASE_SENSITIVE, RubyCore.DISABLED); List tasks = parseTasks("TASK", "x"+BASIC_MESSAGE.toLowerCase()); assertEquals(1, tasks.size()); assertTask(BASIC_MESSAGE_EXPECTED.toLowerCase(), 2, 1, IMarker.PRIORITY_NORMAL, (TaskTag) tasks.get(0)); } public void testLineEndingCRLF() { List tasks = parseTasks("TASK", "\r\n" + BASIC_MESSAGE); assertEquals(1, tasks.size()); assertTask(BASIC_MESSAGE_EXPECTED, 3, 2, IMarker.PRIORITY_NORMAL, (TaskTag) tasks.get(0)); } public void testLineEndingLF() { List tasks = parseTasks("TASK", "\n" + BASIC_MESSAGE); assertEquals(1, tasks.size()); assertTask(BASIC_MESSAGE_EXPECTED, 2, 2, IMarker.PRIORITY_NORMAL, (TaskTag) tasks.get(0)); } public void testLineEndingCR() { List tasks = parseTasks("TASK", "\r" + BASIC_MESSAGE); assertEquals(1, tasks.size()); assertTask(BASIC_MESSAGE_EXPECTED, 2, 2, IMarker.PRIORITY_NORMAL, (TaskTag) tasks.get(0)); } public void testLoadFromReader() throws Exception { StringReader reader = new StringReader(BASIC_MESSAGE + '\n'); preferences.put(RubyCore.COMPILER_TASK_TAGS, "TASK"); parser = new TaskParser(preferences); List tasks = parser.getTasks(reader); assertEquals(1, tasks.size()); assertTask("TASK test", 1, 1, IMarker.PRIORITY_NORMAL, (TaskTag) tasks.get(0)); } public void testDifferentTag() { List tasks = parseTasks("TASK,CHORE", ALTERNATE_MESSAGE); assertEquals(1, tasks.size()); assertTask(ALTERNATE_MESSAGE_EXPECTED, 1, 1, IMarker.PRIORITY_HIGH, (TaskTag) tasks.get(0)); } public void testDoNotMatch() { final String LINE = "puts 'TASK'"; List tasks = parseTasks("TASK", LINE); assertEquals("Should not match " + LINE, 0, tasks.size()); } private List parseTasks(String validTags, String input) { preferences.put(RubyCore.COMPILER_TASK_TAGS, validTags); parser = new TaskParser(preferences); List tasks = parser.getTasks(input); return tasks; } private void assertTask(String expectedMessage, int expectedStart, int expectedLineNumber, int expectedPriority, TaskTag actualTask) { assertEquals("Text", expectedMessage, actualTask.getMessage()); assertEquals("Start", expectedStart, actualTask.getSourceStart()); assertEquals("End", expectedStart + expectedMessage.length(), actualTask.getSourceEnd()); assertEquals("Line number", expectedLineNumber, actualTask.getSourceLineNumber()); assertEquals("Priority", expectedPriority, actualTask.getPriority()); } }