488415: mediawiki-to-doc task can fetch more than 10 images
Support downloading images from newer versions of MediaWiki.
Change-Id: I55d17156ccf134be2dcce0444720169cc38f57b4
Task-Url: https://bugs.eclipse.org/bugs/show_bug.cgi?id=488415
diff --git a/org.eclipse.mylyn.wikitext.mediawiki.core.ant/src/org/eclipse/mylyn/internal/wikitext/mediawiki/core/ant/tasks/MediaWikiApiImageFetchingStrategy.java b/org.eclipse.mylyn.wikitext.mediawiki.core.ant/src/org/eclipse/mylyn/internal/wikitext/mediawiki/core/ant/tasks/MediaWikiApiImageFetchingStrategy.java
index d78a509..3a55e10 100644
--- a/org.eclipse.mylyn.wikitext.mediawiki.core.ant/src/org/eclipse/mylyn/internal/wikitext/mediawiki/core/ant/tasks/MediaWikiApiImageFetchingStrategy.java
+++ b/org.eclipse.mylyn.wikitext.mediawiki.core.ant/src/org/eclipse/mylyn/internal/wikitext/mediawiki/core/ant/tasks/MediaWikiApiImageFetchingStrategy.java
@@ -205,7 +205,7 @@
public void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException {
if ("page".equals(localName)) { //$NON-NLS-1$
currentPage = atts.getValue("title"); //$NON-NLS-1$
- } else if ("images".equals(localName)) { //$NON-NLS-1$
+ } else if ("images".equals(localName) || "continue".equals(localName)) { //$NON-NLS-1$ //$NON-NLS-2$
gimcontinue = atts.getValue("gimcontinue"); //$NON-NLS-1$
} else if ("imageinfo".equals(localName)) { //$NON-NLS-1$
inImageInfo = true;
diff --git a/org.eclipse.mylyn.wikitext.tests/src/org/eclipse/mylyn/internal/wikitext/mediawiki/core/ant/tasks/MediaWikiImageFetcherTest.java b/org.eclipse.mylyn.wikitext.tests/src/org/eclipse/mylyn/internal/wikitext/mediawiki/core/ant/tasks/MediaWikiImageFetcherTest.java
new file mode 100644
index 0000000..ed04bc5
--- /dev/null
+++ b/org.eclipse.mylyn.wikitext.tests/src/org/eclipse/mylyn/internal/wikitext/mediawiki/core/ant/tasks/MediaWikiImageFetcherTest.java
@@ -0,0 +1,47 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 David Green and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * David Green - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.mylyn.internal.wikitext.mediawiki.core.ant.tasks;
+
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+
+import org.apache.tools.ant.Project;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TemporaryFolder;
+
+public class MediaWikiImageFetcherTest {
+ @Rule
+ public final TemporaryFolder temporaryFolder = new TemporaryFolder();
+
+ private final MediaWikiImageFetcher task = new MediaWikiImageFetcher();
+
+ @Before
+ public void before() throws IOException {
+ task.setDest(temporaryFolder.getRoot());
+ task.setProject(new Project());
+ }
+
+ @Test
+ public void processPageWithManyImages() throws MalformedURLException {
+ task.setUrl(new URL("http://wiki.eclipse.org/"));
+ String wikiPageName = "Linux_Tools_Project/Vagrant_Tooling/User_Guide";
+ task.setPageName(wikiPageName);
+
+ task.execute();
+
+ WikiPageAssertions.assertManyImages(temporaryFolder.getRoot());
+ }
+
+}
diff --git a/org.eclipse.mylyn.wikitext.tests/src/org/eclipse/mylyn/internal/wikitext/mediawiki/core/ant/tasks/WikiPageAssertions.java b/org.eclipse.mylyn.wikitext.tests/src/org/eclipse/mylyn/internal/wikitext/mediawiki/core/ant/tasks/WikiPageAssertions.java
new file mode 100644
index 0000000..cb4941b
--- /dev/null
+++ b/org.eclipse.mylyn.wikitext.tests/src/org/eclipse/mylyn/internal/wikitext/mediawiki/core/ant/tasks/WikiPageAssertions.java
@@ -0,0 +1,52 @@
+/*******************************************************************************
+ * Copyright (c) 2016 Tasktop Technologies and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * David Green - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.mylyn.internal.wikitext.mediawiki.core.ant.tasks;
+
+import static java.text.MessageFormat.format;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import java.io.File;
+
+import com.google.common.base.Joiner;
+
+class WikiPageAssertions {
+
+ private static final int MINIMUM_EXPECTED_IMAGES_EXCLUSIVE = 10;
+
+ public static void assertManyImages(File imagesFolder) {
+ assertTrue(imagesFolder.getPath(), imagesFolder.exists() && imagesFolder.isDirectory());
+
+ File[] images = imagesFolder.listFiles();
+ assertNotNull(format("{0} should have files", imagesFolder), images);
+ int imageCount = imageCount(images);
+ assertTrue(
+ format("Expected at least {0} images but got {1} (files in path: {2})",
+ MINIMUM_EXPECTED_IMAGES_EXCLUSIVE, imageCount, Joiner.on(", ").join(images)),
+ imageCount > MINIMUM_EXPECTED_IMAGES_EXCLUSIVE);
+ }
+
+ private static int imageCount(File[] images) {
+ int count = 0;
+ for (File file : images) {
+ String name = file.getName();
+ if (name.endsWith(".png") || name.endsWith(".gif") || name.endsWith(".jpeg") || name.endsWith(".jpg")) {
+ ++count;
+ }
+ }
+ return count;
+ }
+
+ private WikiPageAssertions() {
+ // prevent instantiation
+ }
+}
diff --git a/org.eclipse.mylyn.wikitext.tests/src/org/eclipse/mylyn/internal/wikitext/mediawiki/core/ant/tasks/WikiToDocTaskIntegrationTest.java b/org.eclipse.mylyn.wikitext.tests/src/org/eclipse/mylyn/internal/wikitext/mediawiki/core/ant/tasks/WikiToDocTaskIntegrationTest.java
new file mode 100644
index 0000000..c24cec6
--- /dev/null
+++ b/org.eclipse.mylyn.wikitext.tests/src/org/eclipse/mylyn/internal/wikitext/mediawiki/core/ant/tasks/WikiToDocTaskIntegrationTest.java
@@ -0,0 +1,67 @@
+/*******************************************************************************
+ * Copyright (c) 2016 Tasktop Technologies and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * David Green - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.mylyn.internal.wikitext.mediawiki.core.ant.tasks;
+
+import static org.junit.Assert.assertTrue;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Collections;
+
+import org.apache.tools.ant.Project;
+import org.eclipse.mylyn.internal.wikitext.mediawiki.core.ant.tasks.WikiToDocTask.Path;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TemporaryFolder;
+
+public class WikiToDocTaskIntegrationTest {
+
+ @Rule
+ public final TemporaryFolder temporaryFolder = new TemporaryFolder();
+
+ private WikiToDocTask task;
+
+ @Before
+ public void before() throws IOException {
+ task = new WikiToDocTask();
+ task.setDest(temporaryFolder.getRoot());
+ task.setProject(new Project());
+ }
+
+ @Test
+ public void processPageWithManyImages() {
+ task.setWikiBaseUrl("https://wiki.eclipse.org");
+ task.setPrependImagePrefix("images");
+ task.setFormatOutput(true);
+ task.setGenerateUnifiedToc(false);
+
+ Path path = new Path();
+ path.setTitle("Linux Tools Project - User Guide");
+ String wikiPageName = "Linux_Tools_Project/Vagrant_Tooling/User_Guide";
+ path.setName(wikiPageName);
+ path.setGenerateToc(true);
+
+ task.setPaths(Collections.singletonList(path));
+ task.execute();
+
+ File wikiPageFolder = new File(temporaryFolder.getRoot(), wikiPageName);
+ assertManyImages(wikiPageFolder);
+ }
+
+ private void assertManyImages(File wikiPageFolder) {
+ assertTrue(wikiPageFolder.exists());
+
+ File imagesFolder = new File(wikiPageFolder, "images");
+ WikiPageAssertions.assertManyImages(imagesFolder);
+ }
+}