diff options
Diffstat (limited to 'WordPress/src/androidTest/java/org/wordpress/android/TestUtils.java')
-rw-r--r-- | WordPress/src/androidTest/java/org/wordpress/android/TestUtils.java | 168 |
1 files changed, 168 insertions, 0 deletions
diff --git a/WordPress/src/androidTest/java/org/wordpress/android/TestUtils.java b/WordPress/src/androidTest/java/org/wordpress/android/TestUtils.java new file mode 100644 index 000000000..0bf1d8563 --- /dev/null +++ b/WordPress/src/androidTest/java/org/wordpress/android/TestUtils.java @@ -0,0 +1,168 @@ +package org.wordpress.android; + +import android.content.Context; +import android.content.SharedPreferences; +import android.content.SharedPreferences.Editor; +import android.database.sqlite.SQLiteDatabase; +import android.preference.PreferenceManager; +import android.text.TextUtils; + +import org.wordpress.android.util.DateTimeUtils; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.lang.reflect.Field; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Locale; +import java.util.Map; + +import de.greenrobot.event.EventBus; + +import static junit.framework.Assert.assertNotNull; +import static junit.framework.Assert.assertTrue; + +public class TestUtils { + private static String DATABASE_NAME = "wordpress"; + + public static SQLiteDatabase loadDBFromDump(Context targetContext, Context testContext, String filename) { + targetContext.deleteDatabase(DATABASE_NAME); + WordPress.wpDB = new WordPressDB(targetContext); + + Field dbField; + try { + dbField = WordPressDB.class.getDeclaredField("db"); + dbField.setAccessible(true); + SQLiteDatabase db = (SQLiteDatabase) dbField.get(WordPress.wpDB); + assertNotNull(db); + + // Load file + InputStream is = testContext.getAssets().open(filename); + InputStreamReader inputStreamReader = new InputStreamReader(is); + BufferedReader f = new BufferedReader(inputStreamReader); + for (String line = f.readLine(); line != null; line = f.readLine()) { + if (TextUtils.isEmpty(line)) { + continue; + } + try { + db.execSQL(line); + } catch (android.database.sqlite.SQLiteException e) { + // ignore import errors + } + } + f.close(); + return db; + } catch (NoSuchFieldException e) { + assertTrue(e.toString(), false); + } catch (IllegalAccessException e) { + assertTrue(e.toString(), false); + } catch (IOException e) { + assertTrue(e.toString(), false); + } + return null; + } + + public static void resetEventBus() { + Field dbField; + try { + dbField = EventBus.class.getDeclaredField("defaultInstance"); + dbField.setAccessible(true); + dbField.set(EventBus.class, null); + } catch (NoSuchFieldException e) { + assertTrue(e.toString(), false); + } catch (IllegalAccessException e) { + assertTrue(e.toString(), false); + } + } + + public static void clearDefaultSharedPreferences(Context targetContext) { + SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(targetContext); + Editor editor = settings.edit(); + editor.clear(); + editor.commit(); + } + + public static void dropDB(Context targetContext) { + targetContext.deleteDatabase(DATABASE_NAME); + } + + public static void clearApplicationState(Context context) { + WordPress.currentBlog = null; + if (WordPress.getContext() != null) { + try { + WordPress.WordPressComSignOut(context); + } catch (Exception e) { + // noop + } + } + TestUtils.clearDefaultSharedPreferences(context); + TestUtils.dropDB(context); + } + + public static String convertStreamToString(java.io.InputStream is) { + java.util.Scanner s = new java.util.Scanner(is).useDelimiter("\\A"); + return s.hasNext() ? s.next() : ""; + } + + public static Date gsonStringToJavaDate(final String strDate) { + try { + SimpleDateFormat df = new SimpleDateFormat("MMM dd, yyyy hh:mm:ss a", Locale.ENGLISH); + return df.parse(strDate); + } catch (ParseException e) { + return null; + } + } + + public static Date parseStringToDate(String value) { + // try do parseit as a Date + Date newValue = DateTimeUtils.dateFromIso8601(value); + if (newValue != null) { + return newValue; + } + newValue = gsonStringToJavaDate(value); + if (newValue != null) { + return newValue; + } + return null; + } + + public static Object castIt(Object value) { + if (value instanceof HashMap) { + return injectDateInMap((Map<String, Object>) value); + } else if (value instanceof String) { + Date newValue = parseStringToDate((String) value); + if (newValue != null) { + return newValue; + } else { + return value; + } + } else if (value instanceof Double) { + return (int) Math.round((Double) value); + } else if (value instanceof Object[]) { + return injectDateInArray((Object[]) value); + } + return value; + } + + public static Object[] injectDateInArray(Object[] array) { + HashSet<Object> res = new HashSet<Object>(); + for (Object value : array) { + res.add(castIt(value)); + } + return res.toArray(); + } + + public static Map<String, Object> injectDateInMap(Map<String, Object> hashMap) { + Map<String, Object> res = new HashMap<String, Object>(); + for (String key : hashMap.keySet()) { + Object value = hashMap.get(key); + res.put(key, castIt(value)); + } + return res; + } +} |