package org.onebusaway.android.io.test;
import org.onebusaway.android.UriAssert;
import org.onebusaway.android.app.Application;
import org.onebusaway.android.io.elements.ObaRegion;
import org.onebusaway.android.io.request.ObaArrivalInfoRequest;
import org.onebusaway.android.mock.MockRegion;
import org.onebusaway.android.util.RegionUtils;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
/**
* Tests various URL formats to ensure URI building/encoding is correct
*/
public class UrlFormatTest extends ObaTestCase {
public void testBasicUrlUsingCustomUrl() {
/*
Puget Sound fits this profile (i.e., http://api.pugetsound.onebusaway.org),
so use Puget Sound base URL
*/
ObaRegion region = MockRegion.getPugetSound(getContext());
// Test by setting API directly
Application.get().setCustomApiUrl(region.getObaBaseUrl());
_assertBasicUrl();
}
public void testBasicUrlUsingRegion() {
/*
Puget Sound fits this profile (i.e., http://api.pugetsound.onebusaway.org),
so use Puget Sound base URL
*/
ObaRegion region = MockRegion.getPugetSound(getContext());
// Test by setting region
Application.get().setCurrentRegion(region);
_assertBasicUrl();
}
private void _assertBasicUrl() {
ObaArrivalInfoRequest.Builder builder =
new ObaArrivalInfoRequest.Builder(getContext(), "1_29261");
ObaArrivalInfoRequest request = builder.build();
UriAssert.assertUriMatch(
"http://api.pugetsound.onebusaway.org/api/where/arrivals-and-departures-for-stop/1_29261.json",
new HashMap<String, String>() {{
put("key", "*");
put("version", "2");
}},
request
);
}
public void testUrlWithSpacesUsingCustomUrl() {
// Tampa fits this profile, so use Tampa URL
ObaRegion region = MockRegion.getTampa(getContext());
// Test by setting API directly
Application.get().setCustomApiUrl(region.getObaBaseUrl());
_assertUrlWithSpaces();
}
public void testUrlWithSpacesUsingRegion() {
// Tampa fits this profile, so use Tampa URL
ObaRegion region = MockRegion.getTampa(getContext());
// Test by setting region
Application.get().setCurrentRegion(region);
_assertUrlWithSpaces();
}
private void _assertUrlWithSpaces() {
// Spaces are included in agency name
ObaArrivalInfoRequest.Builder builder =
new ObaArrivalInfoRequest.Builder(getContext(),
"Hillsborough Area Regional Transit_3105");
ObaArrivalInfoRequest request = builder.build();
UriAssert.assertUriMatch(
"http://api.tampa.onebusaway.org/api/api/where/arrivals-and-departures-for-stop/Hillsborough%20Area%20Regional%20Transit_3105.json",
new HashMap<String, String>() {{
put("key", "*");
put("version", "2");
}},
request
);
}
public void testUrlWithPathAndSeparatorUsingCustomUrl() {
// Tampa fits this profile, so use Tampa URL
ObaRegion region = MockRegion.getTampa(getContext());
// Test by setting API directly
Application.get().setCustomApiUrl(region.getObaBaseUrl());
_assertUrlWithPathAndSeparator();
}
public void testUrlWithPathAndSeparatorUsingRegion() {
// Tampa fits this profile, so use Tampa URL
ObaRegion region = MockRegion.getTampa(getContext());
// Test by setting region
Application.get().setCurrentRegion(region);
_assertUrlWithPathAndSeparator();
}
private void _assertUrlWithPathAndSeparator() {
ObaArrivalInfoRequest.Builder builder =
new ObaArrivalInfoRequest.Builder(getContext(),
"Hillsborough Area Regional Transit_3105");
ObaArrivalInfoRequest request = builder.build();
UriAssert.assertUriMatch(
"http://api.tampa.onebusaway.org/api/api/where/arrivals-and-departures-for-stop/Hillsborough%20Area%20Regional%20Transit_3105.json",
new HashMap<String, String>() {{
put("key", "*");
put("version", "2");
}},
request
);
}
public void testUrlWithPathNoSeparatorUsingCustomUrl() {
ObaRegion region = MockRegion.getRegionWithPathNoSeparator(getContext());
// Test by setting API directly
Application.get().setCustomApiUrl(region.getObaBaseUrl());
_assertUrlWithPathNoSeparator();
}
public void testUrlWithPathNoSeparatorUsingRegion() {
ObaRegion region = MockRegion.getRegionWithPathNoSeparator(getContext());
// Test by setting region
Application.get().setCurrentRegion(region);
_assertUrlWithPathNoSeparator();
}
private void _assertUrlWithPathNoSeparator() {
ObaArrivalInfoRequest.Builder builder =
new ObaArrivalInfoRequest.Builder(getContext(),
"Hillsborough Area Regional Transit_3105");
ObaArrivalInfoRequest request = builder.build();
UriAssert.assertUriMatch(
"http://api.tampa.onebusaway.org/api/api/where/arrivals-and-departures-for-stop/Hillsborough%20Area%20Regional%20Transit_3105.json",
new HashMap<String, String>() {{
put("key", "*");
put("version", "2");
}},
request
);
}
public void testUrlNoSeparatorUsingCustomUrl() {
ObaRegion region = MockRegion.getRegionNoSeparator(getContext());
// Test by setting API directly
Application.get().setCustomApiUrl(region.getObaBaseUrl());
_assertUrlNoSeparator();
}
public void testUrlNoSeparatorUsingRegion() {
ObaRegion region = MockRegion.getRegionNoSeparator(getContext());
// Test by setting region
Application.get().setCurrentRegion(region);
_assertUrlNoSeparator();
}
private void _assertUrlNoSeparator() {
ObaArrivalInfoRequest.Builder builder =
new ObaArrivalInfoRequest.Builder(getContext(),
"1_29261");
ObaArrivalInfoRequest request = builder.build();
UriAssert.assertUriMatch(
"http://api.pugetsound.onebusaway.org/api/where/arrivals-and-departures-for-stop/1_29261.json",
new HashMap<String, String>() {{
put("key", "*");
put("version", "2");
}},
request
);
}
public void testUrlWithPortUsingCustomUrl() {
ObaRegion region = MockRegion.getRegionWithPort(getContext());
// Test by setting API directly
Application.get().setCustomApiUrl(region.getObaBaseUrl());
_assertUrlWithPort();
}
public void testUrlWithPortUsingRegion() {
ObaRegion region = MockRegion.getRegionWithPort(getContext());
// Test by setting region
Application.get().setCurrentRegion(region);
_assertUrlWithPort();
}
private void _assertUrlWithPort() {
ObaArrivalInfoRequest.Builder builder =
new ObaArrivalInfoRequest.Builder(getContext(),
"Hillsborough Area Regional Transit_3105");
ObaArrivalInfoRequest request = builder.build();
UriAssert.assertUriMatch(
"http://api.tampa.onebusaway.org:8088/api/api/where/arrivals-and-departures-for-stop/Hillsborough%20Area%20Regional%20Transit_3105.json",
new HashMap<String, String>() {{
put("key", "*");
put("version", "2");
}},
request
);
}
public void testUrlNoSchemeUsingCustomUrl() {
ObaRegion region = MockRegion.getRegionNoScheme(getContext());
// Test by setting API directly
Application.get().setCustomApiUrl(region.getObaBaseUrl());
_assertUrlNoScheme();
/*
We don't have a similar test for regions, since all regions in OBA Server Directory should
be a full URL with scheme (which is tested in "testRegionBaseUrls()")
*/
}
private void _assertUrlNoScheme() {
ObaArrivalInfoRequest.Builder builder =
new ObaArrivalInfoRequest.Builder(getContext(),
"Hillsborough Area Regional Transit_3105");
ObaArrivalInfoRequest request = builder.build();
UriAssert.assertUriMatch(
"http://api.tampa.onebusaway.org/api/api/where/arrivals-and-departures-for-stop/Hillsborough%20Area%20Regional%20Transit_3105.json",
new HashMap<String, String>() {{
put("key", "*");
put("version", "2");
}},
request
);
}
public void testHttps() {
ObaRegion region = MockRegion.getRegionWithHttps();
// Test by setting API directly
Application.get().setCustomApiUrl(region.getObaBaseUrl());
_assertUrlHttps();
}
private void _assertUrlHttps() {
ObaArrivalInfoRequest.Builder builder =
new ObaArrivalInfoRequest.Builder(getContext(),
"Hillsborough Area Regional Transit_3105");
ObaArrivalInfoRequest request = builder.build();
UriAssert.assertUriMatch(
"https://api.tampa.onebusaway.org/api/api/where/arrivals-and-departures-for-stop/Hillsborough%20Area%20Regional%20Transit_3105.json",
new HashMap<String, String>() {{
put("key", "*");
put("version", "2");
}},
request
);
}
public void testHttpsAndPort() {
ObaRegion region = MockRegion.getRegionWithHttpsAndPort();
// Test by setting API directly
Application.get().setCustomApiUrl(region.getObaBaseUrl());
_assertUrlHttpsWithPort();
}
private void _assertUrlHttpsWithPort() {
ObaArrivalInfoRequest.Builder builder =
new ObaArrivalInfoRequest.Builder(getContext(),
"Hillsborough Area Regional Transit_3105");
ObaArrivalInfoRequest request = builder.build();
UriAssert.assertUriMatch(
"https://api.tampa.onebusaway.org:8443/api/api/where/arrivals-and-departures-for-stop/Hillsborough%20Area%20Regional%20Transit_3105.json",
new HashMap<String, String>() {{
put("key", "*");
put("version", "2");
}},
request
);
}
public void testRegionBaseUrls() {
// Checks all bundled region base URLs to make sure they are real URLs
ArrayList<ObaRegion> regions = RegionUtils.getRegionsFromResources(getContext());
for (ObaRegion r : regions) {
try {
URL url = new URL(r.getObaBaseUrl());
} catch (MalformedURLException e) {
fail("Region '" + r.getName() + "' has an invalid base URL: " + e.getMessage());
}
}
}
public void testRegionTwitterUrls() {
// Checks all bundled region Twitter URLs to make sure they are real URLs
ArrayList<ObaRegion> regions = RegionUtils.getRegionsFromResources(getContext());
for (ObaRegion r : regions) {
try {
if (r.getTwitterUrl() != null && !r.getTwitterUrl().isEmpty()) {
URL url = new URL(r.getTwitterUrl());
}
} catch (MalformedURLException e) {
fail("Region '" + r.getName() + "' has an invalid Twitter URL: " + e.getMessage());
}
}
}
}