Skip to content

Commit 71db285

Browse files
MGaetan89gpolak
authored andcommitted
Migrate Robolectric's deprecated code to the recommended alternatives
- Add `:libraries:robolectric-base` to the list of Gradle modules to load. - Add missing jUnit dependency to `:libraries:robolectric-base`. - Replace `BuckRobolectricTestRunner#getAppManifest(Config)` with `BuckRobolectricTestRunner#getManifestFactory(Config)`. The former is no longer public, and the recommended alternative is to use a custom `ManifestFactory`. - Create `BuckManifestFactory` to provide custom information for the creation of `AndroidManifest`.
1 parent 6160366 commit 71db285

4 files changed

Lines changed: 55 additions & 41 deletions

File tree

libraries/robolectric-base/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,5 @@ apply plugin: "java-library"
22

33
dependencies {
44
implementation deps.test.robolectric
5+
implementation deps.test.junit
56
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package com.uber.okbuck;
2+
3+
import org.robolectric.annotation.Config;
4+
import org.robolectric.internal.ManifestFactory;
5+
import org.robolectric.internal.ManifestIdentifier;
6+
import org.robolectric.res.Fs;
7+
8+
import java.io.File;
9+
import java.nio.file.Path;
10+
import java.util.ArrayList;
11+
import java.util.Arrays;
12+
import java.util.Collections;
13+
import java.util.LinkedHashSet;
14+
import java.util.List;
15+
import java.util.ListIterator;
16+
import java.util.Set;
17+
18+
public class BuckManifestFactory implements ManifestFactory {
19+
20+
private final String buckManifest;
21+
private final String buckResourcesProperty;
22+
23+
public BuckManifestFactory(String buckManifest, String buckResourcesProperty) {
24+
this.buckManifest = buckManifest;
25+
this.buckResourcesProperty = buckResourcesProperty;
26+
}
27+
28+
@Override
29+
public ManifestIdentifier identify(Config config) {
30+
final List<String> buckResources =
31+
Arrays.asList(buckResourcesProperty.split(File.pathSeparator));
32+
33+
final String packageName = config.packageName();
34+
final Path res = Fs.fromUrl(buckResources.get(buckResources.size() - 1));
35+
final Path assets = Fs.fromUrl(buckResources.get(buckResources.size() - 1));
36+
final Path manifest = Fs.fromUrl(buckManifest);
37+
38+
final Set<ManifestIdentifier> libraries = new LinkedHashSet<>();
39+
ListIterator<String> it = buckResources.listIterator(buckResources.size());
40+
while (it.hasPrevious()) {
41+
libraries.add(new ManifestIdentifier(packageName, manifest, Fs.fromUrl(it.previous()), assets,
42+
Collections.emptyList()));
43+
}
44+
45+
return new ManifestIdentifier(packageName, manifest, res, assets, new ArrayList<>(libraries));
46+
}
47+
}
Lines changed: 6 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,14 @@
11
package com.uber.okbuck;
22

3-
import java.io.File;
4-
import java.util.ArrayList;
5-
import java.util.Arrays;
6-
import java.util.Collection;
7-
import java.util.LinkedHashSet;
8-
import java.util.List;
9-
import java.util.ListIterator;
103
import org.junit.runners.model.InitializationError;
114
import org.robolectric.RobolectricTestRunner;
125
import org.robolectric.annotation.Config;
13-
import org.robolectric.manifest.AndroidManifest;
14-
import org.robolectric.res.Fs;
15-
import org.robolectric.res.FsFile;
16-
import org.robolectric.res.ResourcePath;
6+
import org.robolectric.internal.ManifestFactory;
177

188
/**
199
* The example test runner only runs robolectric tests with buck. If you want to run unit tests with
2010
* both gradle and buck, you can use the example test runner and create a hybrid with robolectric's
21-
* {@link org.robolectric.RobolectricGradleTestRunner}.
11+
* {@link org.robolectric.RobolectricTestRunner}.
2212
*/
2313
public class BuckRobolectricTestRunner extends RobolectricTestRunner {
2414

@@ -30,39 +20,14 @@ public BuckRobolectricTestRunner(Class<?> testClass) throws InitializationError
3020
}
3121

3222
@Override
33-
protected AndroidManifest getAppManifest(Config config) {
23+
protected ManifestFactory getManifestFactory(Config config) {
3424
String buckManifest = System.getProperty(ROBOLECTRIC_MANIFEST);
3525
String buckResourcesProperty = System.getProperty(ROBOLECTRIC_RESOURCE_DIRECTORIES);
3626

3727
if (buckManifest != null && buckResourcesProperty != null) {
38-
final List<String> buckResources =
39-
Arrays.asList(buckResourcesProperty.split(File.pathSeparator));
40-
41-
final FsFile res = Fs.fileFromPath(buckResources.get(buckResources.size() - 1));
42-
final FsFile assets = Fs.fileFromPath(buckResources.get(buckResources.size() - 1));
43-
final FsFile manifest = Fs.fileFromPath(buckManifest);
44-
45-
return new AndroidManifest(manifest, res, assets, config.packageName()) {
46-
47-
@Override
48-
public List<ResourcePath> getIncludedResourcePaths() {
49-
Collection<ResourcePath> resourcePaths = new LinkedHashSet<>();
50-
resourcePaths.add(super.getResourcePath());
51-
52-
ListIterator<String> it = buckResources.listIterator(buckResources.size());
53-
while (it.hasPrevious()) {
54-
resourcePaths.add(
55-
new ResourcePath(
56-
getRClass(),
57-
getPackageName(),
58-
Fs.fileFromPath(it.previous()),
59-
getAssetsDirectory()));
60-
}
61-
return new ArrayList<>(resourcePaths);
62-
}
63-
};
64-
} else {
65-
return null;
28+
return new BuckManifestFactory(buckManifest, buckResourcesProperty);
6629
}
30+
31+
return super.getManifestFactory(config);
6732
}
6833
}

settings.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ include "libraries:kotlinandroidlibrary"
1414
include "libraries:kotlinlibrary"
1515
include "libraries:lintErrorLibrary"
1616
include "libraries:parcelable"
17+
include "libraries:robolectric-base"
1718
include "libraries:scalalibrary"
1819
include "manifest-merger-cli"
1920
include "plugin"

0 commit comments

Comments
 (0)