package com.facebook; import android.app.Activity; import android.content.Intent; import android.net.Uri; import android.os.Bundle; public class AppLinkDataTests extends FacebookTestCase { private static final String TARGET_URI_STRING = "http://test.app/foo"; private static final String FB_REF_KEY = "fb_ref"; private static final String FB_REF_VALUE = "foobar"; private static final String REFERER_DATA_KEY = "referer_data"; private static final String EXTRA_ARGS_KEY = "extra_args"; private static final String EXTRA_ARGS_VALUE = "extra_value"; private static final String TARGET_URL_KEY = "target_url"; private static final String USER_AGENT_KEY = "user_agent"; private static final String USER_AGENT_VALUE = "foobarUserAgent"; private static final String JSON_DATA_REGULAR = "{" + "\"version\":2," + "\"bridge_args\": {\"method\": \"applink\"}," + "\"method_args\": {" + " \"ref\": \"" + FB_REF_VALUE + "\"," + " \"" + TARGET_URL_KEY + "\": \"" + TARGET_URI_STRING + "\"" + " }" + "}"; private static final String JSON_DATA_REGULAR_WITH_NESTED_ARRAY = "{" + "\"version\":2," + "\"bridge_args\": {\"method\": \"applink\"}," + "\"method_args\": {" + " \"ref\": \"" + FB_REF_VALUE + "\"," + " \"" + TARGET_URL_KEY + "\": \"" + TARGET_URI_STRING + "\"," + " \"other\": [ [1, 2], [3, 4] ]" + " }" + "}"; private static final String JSON_DATA_WITH_REFERER_DATA = "{" + "\"version\":2," + "\"bridge_args\": {\"method\": \"applink\"}," + "\"method_args\": {" + " \"referer_data\" : {" + " \"" + FB_REF_KEY + "\": \"" + FB_REF_VALUE + "\"," + " \"" + EXTRA_ARGS_KEY + "\": \"" + EXTRA_ARGS_VALUE + "\"" + " }," + " \"" + TARGET_URL_KEY + "\": \"" + TARGET_URI_STRING + "\"" + " }" + "}"; private static class MockActivityWithAppLinkData extends Activity { public Intent getIntent() { Uri targetUri = Uri.parse(TARGET_URI_STRING); Intent intent = new Intent(Intent.ACTION_VIEW, targetUri); Bundle applinks = new Bundle(); Bundle refererData = new Bundle(); refererData.putString(FB_REF_KEY, FB_REF_VALUE); refererData.putString(EXTRA_ARGS_KEY, EXTRA_ARGS_VALUE); applinks.putBundle(REFERER_DATA_KEY, refererData); applinks.putString(TARGET_URL_KEY, TARGET_URI_STRING); applinks.putString(USER_AGENT_KEY, USER_AGENT_VALUE); intent.putExtra("al_applink_data", applinks); return intent; } } private static class MockActivityWithJsonData extends Activity { private boolean useRefererData; public MockActivityWithJsonData(boolean useRefererData) { this.useRefererData = useRefererData; } public Intent getIntent() { Intent intent = new Intent(Intent.ACTION_VIEW); intent.putExtra(AppLinkData.BUNDLE_APPLINK_ARGS_KEY, useRefererData ? JSON_DATA_WITH_REFERER_DATA : JSON_DATA_REGULAR); return intent; } } private static class MockActivityWithErrorJsonData extends Activity { public Intent getIntent() { Intent intent = new Intent(Intent.ACTION_VIEW); intent.putExtra(AppLinkData.BUNDLE_APPLINK_ARGS_KEY, JSON_DATA_REGULAR_WITH_NESTED_ARRAY); return intent; } } public void testCreateFromAlApplinkData() { AppLinkData appLinkData = AppLinkData.createFromActivity(new MockActivityWithAppLinkData()); assertNotNull("app link data not null", appLinkData); assertEquals("ref param", FB_REF_VALUE, appLinkData.getRef()); assertEquals("target_url", TARGET_URI_STRING, appLinkData.getTargetUri().toString()); Bundle args = appLinkData.getArgumentBundle(); assertNotNull("app link args not null", args); assertEquals("user agent", USER_AGENT_VALUE, args.getString(USER_AGENT_KEY)); Bundle refererData = appLinkData.getRefererData(); assertNotNull("referer data not null", refererData); assertEquals("ref param in referer data", FB_REF_VALUE, refererData.getString(FB_REF_KEY)); assertEquals("extra param", EXTRA_ARGS_VALUE, refererData.getString(EXTRA_ARGS_KEY)); } public void testCreateFromJson() { AppLinkData appLinkData = AppLinkData.createFromActivity(new MockActivityWithJsonData(false)); assertNotNull("app link data not null", appLinkData); assertEquals("ref param", FB_REF_VALUE, appLinkData.getRef()); assertEquals("target_url", TARGET_URI_STRING, appLinkData.getTargetUri().toString()); Bundle args = appLinkData.getArgumentBundle(); assertNotNull("app link args not null", args); assertNull("user agent", args.getString(USER_AGENT_KEY)); Bundle refererData = appLinkData.getRefererData(); assertNull("referer data", refererData); } public void testCreateFromJsonWithNestedArray() { AppLinkData appLinkData = AppLinkData.createFromActivity(new MockActivityWithErrorJsonData()); assertNull(appLinkData); } public void testCreateFromJsonWithRefererData() { AppLinkData appLinkData = AppLinkData.createFromActivity(new MockActivityWithJsonData(true)); assertNotNull("app link data not null", appLinkData); assertEquals("ref param", FB_REF_VALUE, appLinkData.getRef()); assertEquals("target_url", TARGET_URI_STRING, appLinkData.getTargetUri().toString()); Bundle args = appLinkData.getArgumentBundle(); assertNotNull("app link args not null", args); assertNull("user agent", args.getString(USER_AGENT_KEY)); Bundle refererData = appLinkData.getRefererData(); assertNotNull("referer data", refererData); assertEquals("ref param in referer data", FB_REF_VALUE, refererData.getString(FB_REF_KEY)); assertEquals("extra param", EXTRA_ARGS_VALUE, refererData.getString(EXTRA_ARGS_KEY)); } }