diff --git a/astrid/src/com/todoroo/astrid/utility/TitleParser.java b/astrid/src/com/todoroo/astrid/utility/TitleParser.java index b0c6bd0e6..497b6c5f0 100644 --- a/astrid/src/com/todoroo/astrid/utility/TitleParser.java +++ b/astrid/src/com/todoroo/astrid/utility/TitleParser.java @@ -29,14 +29,15 @@ public class TitleParser { priorityHelper(task); } - public static String trimParenthesis(String pattern){ + public static String[] trimParenthesisAndSplit(String pattern){ if (pattern.charAt(0) == '#' || pattern.charAt(0) == '@') { pattern = pattern.substring(1); } if ('(' == pattern.charAt(0)) { - return pattern.substring(1, pattern.length()-2); + String lists = pattern.substring(1, pattern.length()-1); + return lists.split("\\s+"); } - return pattern; + return new String[] { pattern }; } public static void listHelper(Task task, ArrayList tags) { String inputText = task.getValue(Task.TITLE); @@ -46,12 +47,20 @@ public class TitleParser { while(true) { Matcher m = tagPattern.matcher(inputText); if(m.find()) { - tags.add(TitleParser.trimParenthesis(m.group(2))); + String[] splitTags = TitleParser.trimParenthesisAndSplit(m.group(2)); + if (splitTags != null) { + for (String tag : splitTags) + tags.add(tag); + } } else { m = contextPattern.matcher(inputText); if(m.find()) { - tags.add(TitleParser.trimParenthesis(m.group(2))); - }else{ + String[] splitTags = TitleParser.trimParenthesisAndSplit(m.group(2)); + if (splitTags != null) { + for (String tag : splitTags) + tags.add(tag); + } + } else{ break; } } diff --git a/tests/src/com/todoroo/andlib/utility/TitleParserTest.java b/tests/src/com/todoroo/andlib/utility/TitleParserTest.java index 704b0d3ed..06c25fa8b 100644 --- a/tests/src/com/todoroo/andlib/utility/TitleParserTest.java +++ b/tests/src/com/todoroo/andlib/utility/TitleParserTest.java @@ -39,7 +39,6 @@ public class TitleParserTest extends DatabaseTestCase { public void testMonthDate() { TaskService taskService = new TaskService(); Task task = new Task(); - Task nothing = new Task(); String[] titleMonthStrings = { "Jan.", "January", "Feb.", "February", @@ -66,7 +65,6 @@ public class TitleParserTest extends DatabaseTestCase { public void testMonthSlashDay() { TaskService taskService = new TaskService(); Task task = new Task(); - Task nothing = new Task(); for (int i = 1; i < 13; i++) { String testTitle = "Jog on " + i + "/12/13"; insertTitleAddTask(testTitle, task, taskService); @@ -80,7 +78,6 @@ public class TitleParserTest extends DatabaseTestCase { public void testArmyTime() { TaskService taskService = new TaskService(); Task task = new Task(); - Task nothing = new Task(); String testTitle = "Jog on 23:21."; insertTitleAddTask(testTitle, task, taskService); Date date = new Date(task.getValue(Task.DUE_DATE)); @@ -91,7 +88,6 @@ public class TitleParserTest extends DatabaseTestCase { public void test_AM_PM() { TaskService taskService = new TaskService(); Task task = new Task(); - Task nothing = new Task(); String testTitle = "Jog at 8:33 PM."; insertTitleAddTask(testTitle, task, taskService); Date date = new Date(task.getValue(Task.DUE_DATE)); @@ -102,7 +98,6 @@ public class TitleParserTest extends DatabaseTestCase { public void test_at_hour() { TaskService taskService = new TaskService(); Task task = new Task(); - Task nothing = new Task(); String testTitle = "Jog at 8 PM."; insertTitleAddTask(testTitle, task, taskService); Date date = new Date(task.getValue(Task.DUE_DATE)); @@ -113,7 +108,6 @@ public class TitleParserTest extends DatabaseTestCase { public void test_oclock_AM() { TaskService taskService = new TaskService(); Task task = new Task(); - Task nothing = new Task(); String testTitle = "Jog at 8 o'clock AM."; insertTitleAddTask(testTitle, task, taskService); Date date = new Date(task.getValue(Task.DUE_DATE)); @@ -124,7 +118,6 @@ public class TitleParserTest extends DatabaseTestCase { public void test_several_forms_of_eight() { TaskService taskService = new TaskService(); Task task = new Task(); - Task nothing = new Task(); String[] testTitles = { "Jog 8 AM", "Jog 8 o'clock AM", @@ -141,7 +134,6 @@ public class TitleParserTest extends DatabaseTestCase { public void test_several_forms_of_1230PM() { TaskService taskService = new TaskService(); Task task = new Task(); - Task nothing = new Task(); String[] testTitles = { "Jog 12:30 PM", "at 12:30 PM", @@ -515,14 +507,16 @@ public class TitleParserTest extends DatabaseTestCase { "#(a cool tag)", "#(cool)" }; - TaskService taskService = new TaskService(); Task task = new Task(); for (String acceptedString:acceptedStrings){ task = new Task(); task.setValue(Task.TITLE, "Jog " + acceptedString); //test at end of task. should set importance. ArrayList tags = new ArrayList(); TitleParser.listHelper(task, tags); - assertTrue("test pound at failed for string: " + acceptedString + " for tags: " + tags.toString(),tags.contains(TitleParser.trimParenthesis(acceptedString))); + String[] splitTags = TitleParser.trimParenthesisAndSplit(acceptedString); + for (String tag : splitTags) { + assertTrue("test pound at failed for string: " + acceptedString + " for tags: " + tags.toString(),tags.contains(tag)); + } } } @@ -534,14 +528,16 @@ public class TitleParserTest extends DatabaseTestCase { "@(a cool tag)", "@(cool)" }; - TaskService taskService = new TaskService(); Task task = new Task(); for (String acceptedString:acceptedStrings){ task = new Task(); task.setValue(Task.TITLE, "Jog " + acceptedString); //test at end of task. should set importance. ArrayList tags = new ArrayList(); TitleParser.listHelper(task, tags); - assertTrue("testTagsAt failed for string: " + acceptedString+ " for tags: " + tags.toString(),tags.contains(TitleParser.trimParenthesis(acceptedString))); + String[] splitTags = TitleParser.trimParenthesisAndSplit(acceptedString); + for (String tag : splitTags) { + assertTrue("testTagsAt failed for string: " + acceptedString+ " for tags: " + tags.toString(), tags.contains(tag)); + } } }