package org.wikipedia.html;
import android.support.annotation.NonNull;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Element;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.wikipedia.test.TestRunner;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.nullValue;
@RunWith(TestRunner.class) public class ImageTagParserTest {
private static final PixelDensityDescriptor DESCRIPTOR_1X = new PixelDensityDescriptor(1);
private static final PixelDensityDescriptor DESCRIPTOR_1_5X = new PixelDensityDescriptor(1.5f);
@Test public void testParseNoSrcNoSrcSet() {
assertThat(parse("<img>").src(), nullValue());
}
@Test public void testParseNoSrcSet() {
assertThat(parse("<img src='src'>").src(), is("src"));
}
@Test public void testParseNoSrc() {
ImageElement img = parse("<img srcset='url1 1x'>");
assertThat(img.src(DESCRIPTOR_1X), is("url1"));
}
@Test public void testParseSrcAndSrcSet() {
ImageElement img = parse("<img src='src' srcset='url1 1X'>");
assertThat(img.src(), is("src"));
assertThat(img.src(DESCRIPTOR_1X), is("url1"));
}
@Test public void testParseSrcSetEmpty() {
ImageElement img = parse("<img srcset=''>");
assertThat(img.srcs().size(), is(0));
}
@Test public void testParseSrcSetBlank() {
ImageElement img = parse("<img srcset=' '>");
assertThat(img.srcs().size(), is(0));
}
@Test public void testParseSrcSetInvalid() {
ImageElement img = parse("<img srcset=', url -1x'>");
assertThat(img.srcs().size(), is(0));
}
@Test public void testParseSrcSetMultiple() {
ImageElement img = parse("<img srcset='url1 1x, url1.5 1.5x'>");
assertThat(img.src(DESCRIPTOR_1X), is("url1"));
assertThat(img.src(DESCRIPTOR_1_5X), is("url1.5"));
}
@Test public void testParsePartiallyInvalid() {
ImageElement img = parse("<img src='src' srcset='url1 1x, url -, ,, url1.5 1.5x'>");
assertThat(img.src(), is("src"));
assertThat(img.src(DESCRIPTOR_1X), is("url1"));
assertThat(img.src(DESCRIPTOR_1_5X), is("url1.5"));
}
@Test public void testParseNoDescriptor() {
ImageElement img = parse("<img srcset='url1'>");
assertThat(img.src(DESCRIPTOR_1X), is("url1"));
}
@Test public void testParseMixedDescriptors() {
ImageElement img = parse("<img srcset='url1, url1.5 1.5x'>");
assertThat(img.src(DESCRIPTOR_1X), is("url1"));
assertThat(img.src(DESCRIPTOR_1_5X), is("url1.5"));
}
@NonNull private ImageElement parse(@NonNull String html) {
ImageTagParser subject = new ImageTagParser();
PixelDensityDescriptorParser descriptorParser = new PixelDensityDescriptorParser();
Element el = Jsoup.parseBodyFragment(html).getElementsByTag("img").first();
return subject.parse(descriptorParser, el);
}
}