summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/java/net/yacy/document/parser/html/ContentScraperTest.java100
1 files changed, 100 insertions, 0 deletions
diff --git a/test/java/net/yacy/document/parser/html/ContentScraperTest.java b/test/java/net/yacy/document/parser/html/ContentScraperTest.java
index 236824fa1..1990a2fcd 100644
--- a/test/java/net/yacy/document/parser/html/ContentScraperTest.java
+++ b/test/java/net/yacy/document/parser/html/ContentScraperTest.java
@@ -343,6 +343,106 @@ public class ContentScraperTest {
}
/**
+ * Test base tag URL resolution
+ * @throws IOException when an unexpected error occurred
+ */
+ @Test
+ public void testBaseTagUrlResolution() throws IOException {
+ final String htmlHeaderBeginning = "<!DOCTYPE html><head><title>Test document</title>";
+ final DigestURL docUrl = new DigestURL("http://example.org/parent/base.html");
+
+ final String htmlLinksList = "<ul>"
+ + "<li><a href=\"http://example.org/sameDomain/absolute.html\">Absolute on same domain</a></li>"
+ + "<li><a href=\"http://localhost/otherDomain/absolute.html\">Absolute on another domain</a></li>"
+ + "<li><a href=\"//example.org/sameDomain/scheme-relative.html\">scheme-relative on same domain</a></li>"
+ + "<li><a href=\"//example.net/otherDomain/scheme-relative.html\">scheme-relative on another domain</a></li>"
+ + "<li><a href=\"/path/absolute.html\">path-absolute</a></li>"
+ + "<li><a href=\"path/relative/schemeless.html\">path-relative-scheme-less</a></li>"
+ + "</ul>";
+
+
+ final Map<String, String[]> html2Results = new HashMap<>();
+ /* No base tag */
+ String html = htmlHeaderBeginning + "</head>" + htmlLinksList;
+ String[] expectedUrls = { "http://example.org/sameDomain/absolute.html",
+ "http://localhost/otherDomain/absolute.html", "http://example.org/sameDomain/scheme-relative.html",
+ "http://example.net/otherDomain/scheme-relative.html", "http://example.org/path/absolute.html",
+ "http://example.org/parent/path/relative/schemeless.html" };
+ html2Results.put(html, expectedUrls);
+
+ /* Base with absolute href on same domain */
+ html = htmlHeaderBeginning + "<base href=\"http://example.org/base/index.html\"/>"
+ + "</head>" + htmlLinksList;
+ expectedUrls = new String[]{ "http://example.org/sameDomain/absolute.html",
+ "http://localhost/otherDomain/absolute.html", "http://example.org/sameDomain/scheme-relative.html",
+ "http://example.net/otherDomain/scheme-relative.html", "http://example.org/path/absolute.html",
+ "http://example.org/base/path/relative/schemeless.html" };
+ html2Results.put(html, expectedUrls);
+
+ /* Base with absolute href on another domain */
+ html = htmlHeaderBeginning + "<base href=\"http://example.net/base/index.html\"/>"
+ + "</head>" + htmlLinksList;
+ expectedUrls = new String[]{ "http://example.org/sameDomain/absolute.html",
+ "http://localhost/otherDomain/absolute.html", "http://example.org/sameDomain/scheme-relative.html",
+ "http://example.net/otherDomain/scheme-relative.html", "http://example.net/path/absolute.html",
+ "http://example.net/base/path/relative/schemeless.html" };
+ html2Results.put(html, expectedUrls);
+
+ /* Base with scheme-relative href on same domain */
+ html = htmlHeaderBeginning + "<base href=\"//example.org/base/index.html\"/>"
+ + "</head>" + htmlLinksList;
+ expectedUrls = new String[]{ "http://example.org/sameDomain/absolute.html",
+ "http://localhost/otherDomain/absolute.html", "http://example.org/sameDomain/scheme-relative.html",
+ "http://example.net/otherDomain/scheme-relative.html", "http://example.org/path/absolute.html",
+ "http://example.org/base/path/relative/schemeless.html" };
+ html2Results.put(html, expectedUrls);
+
+ /* Base with scheme-relative href on another domain */
+ html = htmlHeaderBeginning + "<base href=\"//example.net/base/index.html\"/>"
+ + "</head>" + htmlLinksList;
+ expectedUrls = new String[]{ "http://example.org/sameDomain/absolute.html",
+ "http://localhost/otherDomain/absolute.html", "http://example.org/sameDomain/scheme-relative.html",
+ "http://example.net/otherDomain/scheme-relative.html", "http://example.net/path/absolute.html",
+ "http://example.net/base/path/relative/schemeless.html" };
+ html2Results.put(html, expectedUrls);
+
+ /* Base with path-absolute relative href */
+ html = htmlHeaderBeginning + "<base href=\"/base/index.html\"/>"
+ + "</head>" + htmlLinksList;
+ expectedUrls = new String[]{ "http://example.org/sameDomain/absolute.html",
+ "http://localhost/otherDomain/absolute.html", "http://example.org/sameDomain/scheme-relative.html",
+ "http://example.net/otherDomain/scheme-relative.html", "http://example.org/path/absolute.html",
+ "http://example.org/base/path/relative/schemeless.html" };
+ html2Results.put(html, expectedUrls);
+
+ /* Base with path-relative-scheme-less relative href */
+ html = htmlHeaderBeginning + "<base href=\"base/index.html\"/>"
+ + "</head>" + htmlLinksList;
+ expectedUrls = new String[]{ "http://example.org/sameDomain/absolute.html",
+ "http://localhost/otherDomain/absolute.html", "http://example.org/sameDomain/scheme-relative.html",
+ "http://example.net/otherDomain/scheme-relative.html", "http://example.org/path/absolute.html",
+ "http://example.org/parent/base/path/relative/schemeless.html" };
+ html2Results.put(html, expectedUrls);
+
+ for (final Entry<String, String[]> html2Result : html2Results.entrySet()) {
+ ContentScraper scraper = new ContentScraper(docUrl, 10, new HashSet<String>(), new VocabularyScraper(), 0);
+ try (final Writer writer = new TransformerWriter(null, null, scraper, false)) {
+ FileUtils.copy(new StringReader(html2Result.getKey()), writer);
+
+ final Set<DigestURL> expected = new HashSet<>();
+ for (final String url : html2Result.getValue()) {
+ expected.add(new DigestURL(url));
+ }
+
+ Assert.assertEquals(expected.size(), scraper.getAnchors().size());
+ Assert.assertTrue(expected.containsAll(scraper.getAnchors()));
+ } finally {
+ scraper.close();
+ }
+ }
+ }
+
+ /**
* Test microdata itemtype attribute parsing
* @throws IOException
*/