package com.mixpanel.android.mpmetrics; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.test.AndroidTestCase; public class MixpanelInstallReferrerTest extends AndroidTestCase { public void setUp() { mReceiver = new InstallReferrerReceiver(); mIntent = new Intent(); SharedPreferences prefs = getContext().getSharedPreferences(MPConfig.REFERRER_PREFS_NAME, Context.MODE_PRIVATE); prefs.edit().clear().commit(); } public void testNoReferrer() { mIntent.putExtra("Bananas", "utm_source=should no appear"); mReceiver.onReceive(getContext(), mIntent); SharedPreferences stored = getContext().getSharedPreferences(MPConfig.REFERRER_PREFS_NAME, Context.MODE_PRIVATE); assertFalse(stored.contains("referrer")); assertFalse(stored.contains("utm_source")); assertFalse(stored.contains("utm_medium")); assertFalse(stored.contains("utm_campaign")); assertFalse(stored.contains("utm_content")); assertFalse(stored.contains("utm_term")); } public void testWeirdReferrer() { mIntent.putExtra("referrer", "utm_source=source%3Dvalue&utm_medium=medium%26value&utm_term=term%20value&utm_content=content%2Bvalue&utm_campaign=name%3Fvalue"); mReceiver.onReceive(getContext(), mIntent); SharedPreferences stored = getContext().getSharedPreferences(MPConfig.REFERRER_PREFS_NAME, Context.MODE_PRIVATE); assertEquals("utm_source=source%3Dvalue&utm_medium=medium%26value&utm_term=term%20value&utm_content=content%2Bvalue&utm_campaign=name%3Fvalue", stored.getString("referrer", "FAIL")); assertEquals("source=value", stored.getString("utm_source", "FAIL")); assertEquals("medium&value", stored.getString("utm_medium", "FAIL")); assertEquals("name?value", stored.getString("utm_campaign", "FAIL")); assertEquals("content+value", stored.getString("utm_content", "FAIL")); assertEquals("term value", stored.getString("utm_term", "FAIL")); } public void testNonParameter() { mIntent.putExtra("referrer", "utm_campaign=starts but isn't really a param, neither is utm_source=still no go or utm_medium=nope"); mReceiver.onReceive(getContext(), mIntent); SharedPreferences stored = getContext().getSharedPreferences(MPConfig.REFERRER_PREFS_NAME, Context.MODE_PRIVATE); assertEquals("utm_campaign=starts but isn't really a param, neither is utm_source=still no go or utm_medium=nope", stored.getString("referrer", "FAIL")); assertFalse(stored.contains("utm_source")); assertFalse(stored.contains("utm_medium")); assertFalse(stored.contains("utm_campaign")); assertFalse(stored.contains("utm_content")); assertFalse(stored.contains("utm_term")); } public void testWackyUnicodeParameter() { mIntent.putExtra("referrer", "not utm_campaign=Nope&utm_source=%E2%98%83"); mReceiver.onReceive(getContext(), mIntent); SharedPreferences stored = getContext().getSharedPreferences(MPConfig.REFERRER_PREFS_NAME, Context.MODE_PRIVATE); assertEquals("not utm_campaign=Nope&utm_source=%E2%98%83", stored.getString("referrer", "FAIL")); assertFalse(stored.contains("utm_campaign")); assertEquals("\u2603", stored.getString("utm_source", "FAIL")); } public void testMixedParameters() { mIntent.putExtra("referrer", "utm_source=source&SOMETHING STRANGE&utm_campaign=campaign&nope=utm_term&utm_content=content"); mReceiver.onReceive(getContext(), mIntent); SharedPreferences stored = getContext().getSharedPreferences(MPConfig.REFERRER_PREFS_NAME, Context.MODE_PRIVATE); assertEquals("utm_source=source&SOMETHING STRANGE&utm_campaign=campaign&nope=utm_term&utm_content=content", stored.getString("referrer", "FAIL")); assertEquals("source", stored.getString("utm_source", "FAIL")); assertFalse(stored.contains("utm_medium")); assertEquals("campaign", stored.getString("utm_campaign", "FAIL")); assertEquals("content", stored.getString("utm_content", "FAIL")); assertFalse(stored.contains("utm_term")); } private InstallReferrerReceiver mReceiver; private Intent mIntent; }