### Question:
Tokenizer { public List<List<Token>> process(final String text) { final List<List<Token>> paragraph = new ArrayList<>(); currentSentence = new ArrayList<>(); final Tokens tokens = splitText(text); while (tokens.hasNext()) { final Token t = tokens.next(); final String trimmedWord = t.text.trim(); if (trimmedWord.isEmpty()) continue; if (((mode == WITH_PUNCTUATION) || (mode == WITHOUT_PUNCTUATION && isLetterOrDigit(initChar(t.text))))) { boolean canBreakSentence = true; if (t.text.contains("'")) { wordContainsApostrophe(t); } else if (".".equals(trimmedWord)) { canBreakSentence = wordIsFullStop(t); } else if (":".equals(trimmedWord)) { wordIsColon(tokens, t); } else currentSentence.add(t); if (canBreakSentence && equalss(trimmedWord, ".", ";", "?", "!")) { paragraph.add(currentSentence); currentSentence = new ArrayList<>(); } } } if (!currentSentence.isEmpty()) paragraph.add(currentSentence); return paragraph; } Tokenizer(final Mode mode); List<List<Token>> process(final String text);  }### Answer:
@Test(dataProvider = "text") public void testProcess(final String text, final List<List<Token>> expected) { final Tokenizer t = new Tokenizer(Tokenizer.Mode.WITH_PUNCTUATION); final List<List<Token>> result = t.process(text); Assert.assertEquals(result, expected, "Wrong expected results for the text '" + text + "', expected " + expected + " but got " + result); }