import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.notNullValue;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
import java.io.IOException;
import java.io.StringReader;
import java.util.Arrays;
import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+import net.pterodactylus.sone.data.Post;
import net.pterodactylus.sone.data.Sone;
import net.pterodactylus.sone.data.impl.IdOnlySone;
+import net.pterodactylus.sone.database.PostProvider;
import net.pterodactylus.sone.database.SoneProvider;
import com.google.common.base.Function;
import com.google.common.base.Optional;
import org.junit.Test;
+import org.mockito.Mockito;
+import org.mockito.stubbing.OngoingStubbing;
/**
* JUnit test case for {@link SoneTextParser}.
*/
public class SoneTextParserTest {
- //
- // ACTIONS
- //
+ private final SoneProvider soneProvider = new TestSoneProvider();
+ private final TestPostProvider postProvider = new TestPostProvider();
+ private final SoneTextParser soneTextParser = new SoneTextParser(soneProvider, postProvider);
/**
* Tests basic plain-text operation of the parser.
*/
@Test
public void testPlainText() throws IOException {
- SoneTextParser soneTextParser = new SoneTextParser(null, null);
Iterable<Part> parts;
/* check basic operation. */
*/
@Test
public void testKSKLinks() throws IOException {
- SoneTextParser soneTextParser = new SoneTextParser(null, null);
Iterable<Part> parts;
/* check basic links. */
*/
@Test
public void testEmptyLinesAndSoneLinks() throws IOException {
- SoneTextParser soneTextParser = new SoneTextParser(new TestSoneProvider(), null);
Iterable<Part> parts;
/* check basic links. */
*/
@Test
public void testEmpyHttpLinks() throws IOException {
- SoneTextParser soneTextParser = new SoneTextParser(new TestSoneProvider(), null);
Iterable<Part> parts;
/* check empty http links. */
assertThat(convertText(parts, PlainTextPart.class), is("Some text. Empty link: http:// – nice!"));
}
+ @Test
+ public void linksToPostAreParsedCorrectly() throws IOException {
+ postProvider.addValidPostId("foo", "Post about foo...");
+ Iterable<Part> parts = soneTextParser.parse(null, new StringReader("This post://foo is awesome."));
+ assertThat(convertText(parts, PlainTextPart.class, PostPart.class), is("This [post|foo|Post about foo...] is awesome."));
+ }
+
//
// PRIVATE METHODS
//
} else if (part instanceof SonePart) {
SonePart sonePart = (SonePart) part;
text.append("[Sone|").append(sonePart.getSone().getId()).append(']');
+ } else if (part instanceof PostPart) {
+ PostPart postPart = (PostPart) part;
+ text.append("[post|").append(postPart.getPost().getId()).append('|').append(postPart.getPost().getText()).append(']');
}
}
return text.toString();
}
+ private static class TestPostProvider implements PostProvider {
+
+ private final Map<String, String> posts = new HashMap<String, String>();
+
+ private void addValidPostId(String validPostId, String text) {
+ posts.put(validPostId, text);
+ }
+
+ @Override
+ public Collection<Post> getDirectedPosts(String recipientId) {
+ return Collections.emptyList();
+ }
+
+ @Override
+ public Collection<Post> getPosts(String soneId) {
+ return Collections.emptyList();
+ }
+
+ @Override
+ public Optional<Post> getPost(String postId) {
+ if (posts.containsKey(postId)) {
+ Post post = mock(Post.class);
+ when(post.getId()).thenReturn(postId);
+ when(post.getText()).thenReturn(posts.get(postId));
+ return Optional.of(post);
+ }
+ return Optional.absent();
+ }
+
+ }
+
}