/** * 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.share.model; import android.graphics.Bitmap; import android.net.Uri; import android.os.Environment; import junit.framework.Assert; import java.util.*; public class ShareModelTestUtility { public static final String OPEN_GRAPH_ACTION_TYPE = "myActionType"; public static final boolean OPEN_GRAPH_BOOLEAN_VALUE = true; public static final String OPEN_GRAPH_BOOLEAN_VALUE_KEY = "OPEN_GRAPH_BOOLEAN_VALUE"; public static final boolean[] OPEN_GRAPH_BOOLEAN_ARRAY = { true, false }; public static final String OPEN_GRAPH_BOOLEAN_ARRAY_KEY = "OPEN_GRAPH_BOOLEAN_ARRAY"; public static final ShareOpenGraphAction OPEN_GRAPH_CONTENT_ACTION = getOpenGraphActionBuilder().build(); public static final String OPEN_GRAPH_CONTENT_PREVIEW_PROPERTY_NAME = "myActionProperty"; public static final String OPEN_GRAPH_CONTENT_PREVIEW_PROPERTY_VALUE = "myActionPropertyValue"; public static final double OPEN_GRAPH_DOUBLE_VALUE = Double.MAX_VALUE; public static final String OPEN_GRAPH_DOUBLE_VALUE_KEY = "OPEN_GRAPH_DOUBLE_VALUE"; public static final double[] OPEN_GRAPH_DOUBLE_ARRAY = { Double.MIN_VALUE, -7, 0, 42, Double.MAX_VALUE }; public static final String OPEN_GRAPH_DOUBLE_ARRAY_KEY = "OPEN_GRAPH_DOUBLE_ARRAY"; public static final int OPEN_GRAPH_INT_VALUE = 42; public static final String OPEN_GRAPH_INT_VALUE_KEY = "OPEN_GRAPH_INT_VALUE"; public static final int[] OPEN_GRAPH_INT_ARRAY = { Integer.MIN_VALUE, -7, 0, 42, Integer.MAX_VALUE }; public static final String OPEN_GRAPH_INT_ARRAY_KEY = "OPEN_GRAPH_INT_ARRAY"; public static final long OPEN_GRAPH_LONG_VALUE = Long.MAX_VALUE; public static final String OPEN_GRAPH_LONG_VALUE_KEY = "OPEN_GRAPH_LONG_VALUE"; public static final long[] OPEN_GRAPH_LONG_ARRAY = { Long.MIN_VALUE, -7, 0, 42, Long.MAX_VALUE }; public static final String OPEN_GRAPH_LONG_ARRAY_KEY = "OPEN_GRAPH_LONG_ARRAY"; public static final String OPEN_GRAPH_STRING = "this is a string"; public static final String OPEN_GRAPH_STRING_KEY = "OPEN_GRAPH_STRING"; public static final ArrayList<String> OPEN_GRAPH_STRING_ARRAY_LIST = new ArrayList<String>() {{ add("string1"); add("string2"); add("string3"); }}; public static final String OPEN_GRAPH_STRING_ARRAY_LIST_KEY = "OPEN_GRAPH_STRING_ARRAY_LIST"; public static final String OPEN_GRAPH_UNUSED_KEY = "unused"; public static final Bitmap PHOTO_BITMAP = Bitmap.createBitmap(10, 10, Bitmap.Config.ALPHA_8); public static final ArrayList<SharePhoto> PHOTO_CONTENT_PHOTOS = new ArrayList<SharePhoto>() {{ add(getPhotoBuilder(PhotoBuilderType.LOCAL_URL).build()); }}; public static final boolean PHOTO_USER_GENERATED = true; public static final String STATUS_CONTENT_DESCRIPTION = "this is a description"; public static final Uri STATUS_CONTENT_IMAGE_URL = Uri.parse( "http://www.facebook.com/image/url"); public static final String STATUS_CONTENT_TITLE = "this is a title"; public static final SharePhoto VIDEO_CONTENT_PREVIEW_PHOTO = getPhotoBuilder( PhotoBuilderType.LOCAL_URL).build(); public static final ShareVideo VIDEO_CONTENT_VIDEO = getVideoBuilder().build(); public enum PhotoBuilderType { BITMAP, LOCAL_URL, } public static Uri getTestPhotoImageUrl() { return Uri.parse("file://" + Environment.getExternalStorageDirectory().getPath() + "crazy-cat-photo.jpg"); } public static Uri getTestVideoLocalUrl() { return Uri.parse("file://" + Environment.getExternalStorageDirectory().getPath() + "crazy-cat-video.mp4"); } public static ShareOpenGraphAction.Builder getOpenGraphActionBuilder() { return prepareOpenGraphValueContainerBuilder( new ShareOpenGraphAction.Builder()) .setActionType(OPEN_GRAPH_ACTION_TYPE) .putString( OPEN_GRAPH_CONTENT_PREVIEW_PROPERTY_NAME, OPEN_GRAPH_CONTENT_PREVIEW_PROPERTY_VALUE); } public static ShareOpenGraphContent.Builder getOpenGraphContentBuilder() { return new ShareOpenGraphContent.Builder() .setAction(OPEN_GRAPH_CONTENT_ACTION) .setPreviewPropertyName(OPEN_GRAPH_CONTENT_PREVIEW_PROPERTY_NAME) ; } public static ShareOpenGraphObject.Builder getOpenGraphObjectBuilder() { return prepareOpenGraphValueContainerBuilder(new ShareOpenGraphObject.Builder()); } public static SharePhoto.Builder getPhotoBuilder(final PhotoBuilderType type) { final SharePhoto.Builder builder = new SharePhoto.Builder().setUserGenerated( PHOTO_USER_GENERATED); switch (type) { case BITMAP: builder.setBitmap(PHOTO_BITMAP); break; case LOCAL_URL: builder.setImageUrl(getTestPhotoImageUrl()); break; } return builder; } public static SharePhotoContent.Builder getPhotoContentBuilder() { return new SharePhotoContent.Builder().addPhotos(PHOTO_CONTENT_PHOTOS); } public static ShareLinkContent.Builder getLinkContentBuilder() { return new ShareLinkContent.Builder() .setContentDescription(STATUS_CONTENT_DESCRIPTION) .setImageUrl(STATUS_CONTENT_IMAGE_URL) .setContentTitle(STATUS_CONTENT_TITLE) ; } public static ShareVideo.Builder getVideoBuilder() { return new ShareVideo.Builder().setLocalUrl(getTestVideoLocalUrl()); } public static ShareVideoContent.Builder getVideoContentBuilder() { return new ShareVideoContent.Builder() .setPreviewPhoto(VIDEO_CONTENT_PREVIEW_PHOTO) .setVideo(VIDEO_CONTENT_VIDEO) ; } private static <E extends ShareOpenGraphValueContainer.Builder> E prepareOpenGraphValueContainerBuilder( final E builder ) { return (E)builder .putBoolean(OPEN_GRAPH_BOOLEAN_VALUE_KEY, OPEN_GRAPH_BOOLEAN_VALUE) .putBooleanArray(OPEN_GRAPH_BOOLEAN_ARRAY_KEY, OPEN_GRAPH_BOOLEAN_ARRAY) .putDouble(OPEN_GRAPH_DOUBLE_VALUE_KEY, OPEN_GRAPH_DOUBLE_VALUE) .putDoubleArray(OPEN_GRAPH_DOUBLE_ARRAY_KEY, OPEN_GRAPH_DOUBLE_ARRAY) .putInt(OPEN_GRAPH_INT_VALUE_KEY, OPEN_GRAPH_INT_VALUE) .putIntArray(OPEN_GRAPH_INT_ARRAY_KEY, OPEN_GRAPH_INT_ARRAY) .putLong(OPEN_GRAPH_LONG_VALUE_KEY, OPEN_GRAPH_LONG_VALUE) .putLongArray(OPEN_GRAPH_LONG_ARRAY_KEY, OPEN_GRAPH_LONG_ARRAY) .putString(OPEN_GRAPH_STRING_KEY, OPEN_GRAPH_STRING) .putStringArrayList(OPEN_GRAPH_STRING_ARRAY_LIST_KEY, OPEN_GRAPH_STRING_ARRAY_LIST) ; } public static <E> void assertEquals(final E a, final E b) { if (a == null) { // if a is null, b should be null Assert.assertNull(b); } else if ((a instanceof boolean[]) && (b instanceof boolean[])) { // check for arrays of all of the primitive types, then arrays of Object, and route // those through Arrays equals Assert.assertTrue(Arrays.equals((boolean[]) a, (boolean[]) b)); } else if ((a instanceof byte[]) && (b instanceof byte[])) { Assert.assertTrue(Arrays.equals((byte[])a, (byte[])b)); } else if ((a instanceof char[]) && (b instanceof char[])) { Assert.assertTrue(Arrays.equals((char[])a, (char[])b)); } else if ((a instanceof double[]) && (b instanceof double[])) { Assert.assertTrue(Arrays.equals((double[])a, (double[])b)); } else if ((a instanceof float[]) && (b instanceof float[])) { Assert.assertTrue(Arrays.equals((float[])a, (float[])b)); } else if ((a instanceof int[]) && (b instanceof int[])) { Assert.assertTrue(Arrays.equals((int[])a, (int[])b)); } else if ((a instanceof long[]) && (b instanceof long[])) { Assert.assertTrue(Arrays.equals((long[])a, (long[])b)); } else if ((a instanceof short[]) && (b instanceof short[])) { Assert.assertTrue(Arrays.equals((short[])a, (short[])b)); } else if ((a instanceof Object[]) && (b instanceof Object[])) { Assert.assertTrue(Arrays.deepEquals((Object[])a, (Object[])b)); } else if ((a instanceof List) && (b instanceof List)) { // check for Lists assertEquals((List)a, (List)b); } else if ((a instanceof ShareModel) && (b instanceof ShareModel)) { // check for ShareModels assertEquals((ShareModel)a, (ShareModel)b); } else { // now use Object.equals Assert.assertTrue(a.equals(b)); } } public static void assertEquals(final List a, final List b) { final int size = a.size(); Assert.assertEquals(size, b.size()); for (int i = 0; i < size; ++i) { assertEquals(a.get(i), b.get(i)); } } public static <E extends ShareModel> void assertEquals(final E a, final E b) { if ((a instanceof ShareOpenGraphAction) && (b instanceof ShareOpenGraphAction)) { assertEquals((ShareOpenGraphAction)a, (ShareOpenGraphAction)b); } else if ((a instanceof ShareOpenGraphObject) && (b instanceof ShareOpenGraphObject)) { assertEquals((ShareOpenGraphObject) a, (ShareOpenGraphObject) b); } else if ((a instanceof ShareOpenGraphContent) && (b instanceof ShareOpenGraphContent)) { assertEquals((ShareOpenGraphContent)a, (ShareOpenGraphContent)b); } else if ((a instanceof SharePhoto) && (b instanceof SharePhoto)) { assertEquals((SharePhoto)a, (SharePhoto)b); } else if ((a instanceof SharePhotoContent) && (b instanceof SharePhotoContent)) { assertEquals((SharePhotoContent)a, (SharePhotoContent)b); } else if ((a instanceof ShareLinkContent) && (b instanceof ShareLinkContent)) { assertEquals((ShareLinkContent)a, (ShareLinkContent)b); } else if ((a instanceof ShareVideo) && (b instanceof ShareVideo)) { assertEquals((ShareVideo)a, (ShareVideo)b); } else if ((a instanceof ShareVideoContent) && (b instanceof ShareVideoContent)) { assertEquals((ShareVideoContent)a, (ShareVideoContent)b); } else { Assert.fail(a.getClass().toString() + " models do not have an equality test"); } } public static void assertEquals(final ShareOpenGraphAction a, final ShareOpenGraphAction b) { Assert.assertEquals(a.getActionType(), b.getActionType()); assertOpenGraphValueContainerEquals(a, b); } public static void assertEquals(final ShareOpenGraphContent a, final ShareOpenGraphContent b) { assertEquals(a.getAction(), b.getAction()); Assert.assertEquals(a.getPreviewPropertyName(), b.getPreviewPropertyName()); assertContentEquals(a, b); } public static void assertEquals(final ShareOpenGraphObject a, final ShareOpenGraphObject b) { assertOpenGraphValueContainerEquals(a, b); } public static void assertEquals(final SharePhoto a, final SharePhoto b) { Assert.assertEquals(a.getBitmap(), b.getBitmap()); Assert.assertEquals(a.getImageUrl(), b.getImageUrl()); Assert.assertEquals(a.getUserGenerated(), b.getUserGenerated()); } public static void assertEquals(final SharePhotoContent a, final SharePhotoContent b) { assertEquals(a.getPhotos(), b.getPhotos()); assertContentEquals(a, b); } public static void assertEquals(final ShareLinkContent a, final ShareLinkContent b) { Assert.assertEquals(a.getContentDescription(), b.getContentDescription()); Assert.assertEquals(a.getImageUrl(), b.getImageUrl()); Assert.assertEquals(a.getContentTitle(), b.getContentTitle()); assertContentEquals(a, b); } public static void assertEquals(final ShareVideo a, final ShareVideo b) { Assert.assertEquals(a.getLocalUrl(), b.getLocalUrl()); } public static void assertEquals(final ShareVideoContent a, final ShareVideoContent b) { assertEquals(a.getPreviewPhoto(), b.getPreviewPhoto()); assertEquals(a.getVideo(), b.getVideo()); assertContentEquals(a, b); } private static void assertContentEquals(final ShareContent a, final ShareContent b) { Assert.assertEquals(a.getContentUrl(), b.getContentUrl()); Assert.assertEquals(a.getPeopleIds(), b.getPeopleIds()); Assert.assertEquals(a.getPlaceId(), b.getPlaceId()); Assert.assertEquals(a.getRef(), b.getRef()); } private static void assertOpenGraphValueContainerEquals( final ShareOpenGraphValueContainer a, final ShareOpenGraphValueContainer b ) { final HashSet<String> keySet = new HashSet<String>(); keySet.addAll(a.keySet()); keySet.addAll(b.keySet()); for (String key : keySet) { assertEquals(a.get(key), b.get(key)); } } private ShareModelTestUtility() {} }