From 2350b4e694565323611e6ef1f11ae3295aee4269 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Fri, 7 Oct 2016 12:15:15 +0200 Subject: [PATCH] move shareable test classes into new separate section: testShared This allows some of the mock classes to be shared across Robolectric and emulator tests. --- app/build.gradle | 10 +++ .../fdroid/updater/RepoXMLHandlerTest.java | 72 +--------------- .../java/org/fdroid/fdroid/mock/MockRepo.java | 0 .../org/fdroid/fdroid/mock/RepoDetails.java | 85 +++++++++++++++++++ 4 files changed, 99 insertions(+), 68 deletions(-) rename app/src/{test => testShared}/java/org/fdroid/fdroid/mock/MockRepo.java (100%) create mode 100644 app/src/testShared/java/org/fdroid/fdroid/mock/RepoDetails.java diff --git a/app/build.gradle b/app/build.gradle index b99c16ec1..c4a97632e 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -189,6 +189,16 @@ android { } } + sourceSets { + test { + java.srcDirs += "$projectDir/src/testShared/java" + } + + androidTest { + java.srcDirs += "$projectDir/src/testShared/java" + } + } + lintOptions { checkReleaseBuilds false abortOnError true diff --git a/app/src/test/java/org/fdroid/fdroid/updater/RepoXMLHandlerTest.java b/app/src/test/java/org/fdroid/fdroid/updater/RepoXMLHandlerTest.java index 193c8dc23..6f6eabc4e 100644 --- a/app/src/test/java/org/fdroid/fdroid/updater/RepoXMLHandlerTest.java +++ b/app/src/test/java/org/fdroid/fdroid/updater/RepoXMLHandlerTest.java @@ -28,23 +28,18 @@ import android.util.Log; import org.apache.commons.io.FileUtils; import org.fdroid.fdroid.BuildConfig; -import org.fdroid.fdroid.RepoXMLHandler; import org.fdroid.fdroid.data.Apk; import org.fdroid.fdroid.data.App; import org.fdroid.fdroid.data.Repo; import org.fdroid.fdroid.data.RepoPushRequest; -import org.fdroid.fdroid.mock.MockRepo; +import org.fdroid.fdroid.mock.RepoDetails; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RobolectricGradleTestRunner; import org.robolectric.annotation.Config; import org.robolectric.shadows.ShadowLog; -import org.xml.sax.InputSource; -import org.xml.sax.SAXException; -import org.xml.sax.XMLReader; -import java.io.BufferedInputStream; import java.io.File; import java.io.IOException; import java.io.InputStream; @@ -55,16 +50,11 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import javax.xml.parsers.ParserConfigurationException; -import javax.xml.parsers.SAXParser; -import javax.xml.parsers.SAXParserFactory; - import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; // TODO: Use sdk=24 when Robolectric supports this @Config(constants = BuildConfig.class, sdk = 23) @@ -835,41 +825,6 @@ public class RepoXMLHandlerTest { assertEquals(apks.size(), apkCount); } - private static class RepoDetails implements RepoXMLHandler.IndexReceiver { - - public String name; - public String description; - public String signingCert; - public int maxAge; - public int version; - public long timestamp; - - public List apks = new ArrayList<>(); - public List apps = new ArrayList<>(); - public List repoPushRequestList = new ArrayList<>(); - - @Override - public void receiveRepo(String name, String description, String signingCert, int maxage, int version, long timestamp) { - this.name = name; - this.description = description; - this.signingCert = signingCert; - this.maxAge = maxage; - this.version = version; - this.timestamp = timestamp; - } - - @Override - public void receiveApp(App app, List packages) { - apks.addAll(packages); - apps.add(app); - } - - @Override - public void receiveRepoPushRequest(RepoPushRequest repoPushRequest) { - repoPushRequestList.add(repoPushRequest); - } - } - @NonNull private RepoDetails getFromFile(String indexFilename) { return getFromFile(indexFilename, Repo.PUSH_REQUEST_IGNORE); @@ -877,28 +832,9 @@ public class RepoXMLHandlerTest { @NonNull private RepoDetails getFromFile(String indexFilename, int pushRequests) { - try { - SAXParserFactory factory = SAXParserFactory.newInstance(); - factory.setNamespaceAware(true); - SAXParser parser = factory.newSAXParser(); - XMLReader reader = parser.getXMLReader(); - RepoDetails repoDetails = new RepoDetails(); - MockRepo mockRepo = new MockRepo(100, pushRequests); - RepoXMLHandler handler = new RepoXMLHandler(mockRepo, repoDetails); - reader.setContentHandler(handler); - Log.i(TAG, "test file: " + getClass().getClassLoader().getResource(indexFilename)); - InputStream input = getClass().getClassLoader().getResourceAsStream(indexFilename); - InputSource is = new InputSource(new BufferedInputStream(input)); - reader.parse(is); - return repoDetails; - } catch (ParserConfigurationException | SAXException | IOException e) { - e.printStackTrace(); - fail(); - - // Satisfies the compiler, but fail() will always throw a runtime exception so we never - // reach this return statement. - return null; - } + Log.i(TAG, "test file: " + getClass().getClassLoader().getResource(indexFilename)); + InputStream inputStream = getClass().getClassLoader().getResourceAsStream(indexFilename); + return RepoDetails.getFromFile(inputStream, pushRequests); } private void writeResourceToObbDir(String assetName) throws IOException { diff --git a/app/src/test/java/org/fdroid/fdroid/mock/MockRepo.java b/app/src/testShared/java/org/fdroid/fdroid/mock/MockRepo.java similarity index 100% rename from app/src/test/java/org/fdroid/fdroid/mock/MockRepo.java rename to app/src/testShared/java/org/fdroid/fdroid/mock/MockRepo.java diff --git a/app/src/testShared/java/org/fdroid/fdroid/mock/RepoDetails.java b/app/src/testShared/java/org/fdroid/fdroid/mock/RepoDetails.java new file mode 100644 index 000000000..4371bbaa4 --- /dev/null +++ b/app/src/testShared/java/org/fdroid/fdroid/mock/RepoDetails.java @@ -0,0 +1,85 @@ +package org.fdroid.fdroid.mock; + +import android.support.annotation.NonNull; + +import org.fdroid.fdroid.RepoXMLHandler; +import org.fdroid.fdroid.data.Apk; +import org.fdroid.fdroid.data.App; +import org.fdroid.fdroid.data.RepoPushRequest; +import org.xml.sax.InputSource; +import org.xml.sax.SAXException; +import org.xml.sax.XMLReader; + +import java.io.BufferedInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; + +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.parsers.SAXParser; +import javax.xml.parsers.SAXParserFactory; + +import static org.junit.Assert.fail; + +public class RepoDetails implements RepoXMLHandler.IndexReceiver { + public static final String TAG = "RepoDetails"; + + public String name; + public String description; + public String signingCert; + public int maxAge; + public int version; + public long timestamp; + + public List apks = new ArrayList<>(); + public List apps = new ArrayList<>(); + public List repoPushRequestList = new ArrayList<>(); + + @Override + public void receiveRepo(String name, String description, String signingCert, int maxage, int version, long timestamp) { + this.name = name; + this.description = description; + this.signingCert = signingCert; + this.maxAge = maxage; + this.version = version; + this.timestamp = timestamp; + } + + @Override + public void receiveApp(App app, List packages) { + apks.addAll(packages); + apps.add(app); + } + + @Override + public void receiveRepoPushRequest(RepoPushRequest repoPushRequest) { + repoPushRequestList.add(repoPushRequest); + } + + @NonNull + public static RepoDetails getFromFile(InputStream inputStream, int pushRequests) { + try { + SAXParserFactory factory = SAXParserFactory.newInstance(); + factory.setNamespaceAware(true); + SAXParser parser = factory.newSAXParser(); + XMLReader reader = parser.getXMLReader(); + RepoDetails repoDetails = new RepoDetails(); + MockRepo mockRepo = new MockRepo(100, pushRequests); + RepoXMLHandler handler = new RepoXMLHandler(mockRepo, repoDetails); + reader.setContentHandler(handler); + InputSource is = new InputSource(new BufferedInputStream(inputStream)); + reader.parse(is); + return repoDetails; + } catch (ParserConfigurationException | SAXException | IOException e) { + e.printStackTrace(); + fail(); + + // Satisfies the compiler, but fail() will always throw a runtime exception so we never + // reach this return statement. + return null; + } + } + +} +