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 htmlWithoutImagesIsNotRecognizedAsComic() {
40 State state = new HtmlState("http://foo/", null);
41 ComicSiteFilter comicSiteFilter = new TestComicSiteFilter("Title", Collections.<String>emptyList(), null);
42 State newState = comicSiteFilter.filter(state);
43 assertThat(newState.success(), is(false));
47 public void everyUrlGetAStrip() {
48 State state = new HtmlState("http://foo/", null);
49 ComicSiteFilter comicSiteFilter = new TestComicSiteFilter("Title", asList("url1.gif", "url2.gif", "url3.gif"), asList("Comment 1", "Comment 2"));
50 State newState = comicSiteFilter.filter(state);
51 assertThat(newState instanceof ComicState, is(true));
52 ComicState comicState = (ComicState) newState;
53 assertThat(comicState.comics(), hasSize(1));
54 Comic comic = comicState.comics().get(0);
55 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", "")));
58 @Test(expected = IllegalStateException.class)
59 public void illegalUrlThrowsException() {
60 State state = new HtmlState("http://foo/^", null);
61 ComicSiteFilter comicSiteFilter = new TestComicSiteFilter("Title", asList("url1.gif"), Collections.<String>emptyList());
62 comicSiteFilter.filter(state);
65 private static class TestComicSiteFilter extends ComicSiteFilter {
67 private final String title;
68 private final List<String> urls;
69 private final List<String> comments;
71 public TestComicSiteFilter(String title, List<String> urls, List<String> comments) {
74 this.comments = comments;
78 protected Optional<String> extractTitle(Document document) {
79 return fromNullable(title);
83 protected List<String> extractImageUrls(Document document) {
88 protected List<String> extractImageComments(Document document) {