package org.wikipedia.json;
import android.net.Uri;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.ParameterizedRobolectricTestRunner;
import org.robolectric.ParameterizedRobolectricTestRunner.Parameters;
import org.wikipedia.Constants;
import java.util.Arrays;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.is;
import static org.wikipedia.json.GsonMarshaller.marshal;
import static org.wikipedia.json.GsonUnmarshaller.unmarshal;
@RunWith(ParameterizedRobolectricTestRunner.class) public class UriTypeAdapterTest {
@Parameters(name = "{0}") public static Iterable<Object[]> data() {
return Arrays.asList(new Object[][] {{DeferredParam.NULL}, {DeferredParam.STRING},
{DeferredParam.OPAQUE}, {DeferredParam.HIERARCHICAL}});
}
@Nullable private final Uri uri;
public UriTypeAdapterTest(@NonNull DeferredParam param) {
this.uri = param.val();
}
@Test public void testWriteRead() {
Uri result = unmarshal(Uri.class, marshal(uri));
assertThat(result, is(uri));
}
// Namespace uses a roboelectric mocked class internally, SparseArray, which is unavailable at
// static time; defer evaluation until TestRunner is executed
private enum DeferredParam {
NULL() {
@Nullable @Override Uri val() {
return null;
}
},
STRING() {
@Nullable @Override Uri val() {
return Uri.parse(Constants.WIKIPEDIA_URL);
}
},
OPAQUE() {
@Nullable @Override Uri val() {
return Uri.fromParts("http", "mediawiki.org", null);
}
},
HIERARCHICAL() {
@Nullable @Override Uri val() {
return Uri.EMPTY;
}
};
@Nullable abstract Uri val();
}
}