/**
* Copyright (c) 2014-present, Facebook, Inc. All rights reserved.
*
* You are hereby granted a non-exclusive, worldwide, royalty-free license to use,
* copy, modify, and distribute this software in source code or binary form for use
* in connection with the web services and APIs provided by Facebook.
*
* As with any software that integrates with the Facebook platform, your use of
* this software is subject to the Facebook Developer Principles and Policies
* [http://developers.facebook.com/policy/]. This copyright notice shall be
* included in all copies or substantial portions of the software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
package com.facebook.appevents;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.support.v4.content.LocalBroadcastManager;
import com.facebook.AccessToken;
import com.facebook.AccessTokenSource;
import com.facebook.FacebookSdk;
import com.facebook.FacebookTestCase;
import com.facebook.WaitForBroadcastReceiver;
import com.facebook.appevents.AppEventsLogger;
import com.facebook.internal.FetchedAppSettingsManager;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.util.HashMap;
import java.util.List;
public class AppEventsLoggerTests extends FacebookTestCase {
public void testSimpleCall() throws InterruptedException {
AppEventsLogger.setFlushBehavior(AppEventsLogger.FlushBehavior.EXPLICIT_ONLY);
AccessToken accessToken1 = getAccessTokenForSharedUser();
AccessToken accessToken2 = getAccessTokenForSharedUser(SECOND_TEST_USER_TAG);
AppEventsLogger logger1 = AppEventsLogger.newLogger(getActivity(), accessToken1);
AppEventsLogger logger2 = AppEventsLogger.newLogger(getActivity(), accessToken2);
final WaitForBroadcastReceiver waitForBroadcastReceiver = new WaitForBroadcastReceiver();
waitForBroadcastReceiver.incrementExpectCount();
final LocalBroadcastManager broadcastManager =
LocalBroadcastManager.getInstance(getActivity());
try {
// Need to get notifications on another thread so we can wait for them.
runOnBlockerThread(new Runnable() {
@Override
public void run() {
broadcastManager.registerReceiver(waitForBroadcastReceiver,
new IntentFilter(AppEventsLogger.ACTION_APP_EVENTS_FLUSHED));
}
}, true);
logger1.logEvent("an_event");
logger2.logEvent("another_event");
// test illegal event name and event key, should not crash in non-debug environment.
logger1.logEvent("$illegal_event_name");
Bundle params = new Bundle();
params.putString("illegal%key", "good_value");
logger1.logEvent("legal_event_name", params);
char[] val = {'b', 'a', 'd'};
params.putCharArray("legal_key", val);
logger1.logEvent("legal_event",params);
logger1.flush();
waitForBroadcastReceiver.waitForExpectedCalls();
closeBlockerAndAssertSuccess();
} finally {
broadcastManager.unregisterReceiver(waitForBroadcastReceiver);
}
}
public void testExplicitCallWithNoAppSettings() throws InterruptedException {
AppEventsLogger.setFlushBehavior(AppEventsLogger.FlushBehavior.EXPLICIT_ONLY);
AccessToken accessToken1 = getFakeAccessToken();
FacebookSdk.setApplicationId("234");
AppEventsLogger logger1 = AppEventsLogger.newLogger(getActivity(), accessToken1);
final WaitForBroadcastReceiver waitForBroadcastReceiver = new WaitForBroadcastReceiver();
waitForBroadcastReceiver.incrementExpectCount();
final LocalBroadcastManager broadcastManager =
LocalBroadcastManager.getInstance(getActivity());
try {
// Need to get notifications on another thread so we can wait for them.
runOnBlockerThread(new Runnable() {
@Override
public void run() {
broadcastManager.registerReceiver(waitForBroadcastReceiver,
new IntentFilter(AppEventsLogger.ACTION_APP_EVENTS_FLUSHED));
}
}, true);
logger1.logEvent("an_event");
logger1.flush();
waitForBroadcastReceiver.waitForExpectedCalls();
closeBlockerAndAssertSuccess();
} finally {
broadcastManager.unregisterReceiver(waitForBroadcastReceiver);
}
}
private AccessToken getFakeAccessToken() {
return new AccessToken(
"foobar",
"234",
"567",
null,
null,
AccessTokenSource.TEST_USER,
null,
null);
}
}