1 package net.pterodactylus.rhynodge.filters;
3 import static com.google.common.base.Optional.fromNullable;
4 import static java.util.Arrays.asList;
5 import static org.hamcrest.MatcherAssert.assertThat;
6 import static org.hamcrest.Matchers.contains;
7 import static org.hamcrest.Matchers.hasSize;
8 import static org.hamcrest.Matchers.is;
10 import java.util.Collections;
11 import java.util.List;
13 import net.pterodactylus.rhynodge.State;
14 import net.pterodactylus.rhynodge.states.ComicState;
15 import net.pterodactylus.rhynodge.states.ComicState.Comic;
16 import net.pterodactylus.rhynodge.states.ComicState.Strip;
17 import net.pterodactylus.rhynodge.states.FailedState;
18 import net.pterodactylus.rhynodge.states.HtmlState;
20 import com.google.common.base.Optional;
21 import org.jsoup.nodes.Document;
22 import org.junit.Test;
25 * Unit test for {@link ComicSiteFilter}.
27 * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
29 public class ComicSiteFilterTest {
31 @Test(expected = IllegalArgumentException.class)
32 public void comicSiteFilterRequiresHtmlState() {
33 State state = new FailedState();
34 ComicSiteFilter comicSiteFilter = new TestComicSiteFilter(null, null, null);
35 comicSiteFilter.filter(state);
39 public void htmlWithoutTitleIsNotRecognizedAsComic() {
40 State state = new HtmlState("http://foo/", null);
41 ComicSiteFilter comicSiteFilter = new TestComicSiteFilter(null, null, null);
42 State newState = comicSiteFilter.filter(state);
43 assertThat(newState.success(), is(false));
47 public void htmlWithTitleButWithoutImagesIsNotRecognizedAsComic() {
48 State state = new HtmlState("http://foo/", null);
49 ComicSiteFilter comicSiteFilter = new TestComicSiteFilter("Title", Collections.<String>emptyList(), null);
50 State newState = comicSiteFilter.filter(state);
51 assertThat(newState.success(), is(false));
55 public void everyUrlGetAStrip() {
56 State state = new HtmlState("http://foo/", null);
57 ComicSiteFilter comicSiteFilter = new TestComicSiteFilter("Title", asList("url1.gif", "url2.gif", "url3.gif"), asList("Comment 1", "Comment 2"));
58 State newState = comicSiteFilter.filter(state);
59 assertThat(newState instanceof ComicState, is(true));
60 ComicState comicState = (ComicState) newState;
61 assertThat(comicState.comics(), hasSize(1));
62 Comic comic = comicState.comics().get(0);
63 assertThat(comic.strips(), contains(new Strip("http://foo/url1.gif", "Comment 1"), new Strip("http://foo/url2.gif", "Comment 2"), new Strip("http://foo/url3.gif", "")));
66 @Test(expected = IllegalStateException.class)
67 public void illegalUrlThrowsException() {
68 State state = new HtmlState("http://foo/^", null);
69 ComicSiteFilter comicSiteFilter = new TestComicSiteFilter("Title", asList("url1.gif"), Collections.<String>emptyList());
70 comicSiteFilter.filter(state);
73 private static class TestComicSiteFilter extends ComicSiteFilter {
75 private final String title;
76 private final List<String> urls;
77 private final List<String> comments;
79 public TestComicSiteFilter(String title, List<String> urls, List<String> comments) {
82 this.comments = comments;
86 protected Optional<String> extractTitle(Document document) {
87 return fromNullable(title);
91 protected List<String> extractImageUrls(Document document) {
96 protected List<String> extractImageComments(Document document) {