1a682c725efdc0a0718372c1ac9c28c96773393f7Tyler Schultzpackage com.xtremelabs.robolectric.shadows; 2c2de7d694855e12183711d477c9e654cca3419a3Glenn Jahnke & Lenny Turetsky 3c2de7d694855e12183711d477c9e654cca3419a3Glenn Jahnke & Lenny Turetskyimport android.util.Log; 4c2de7d694855e12183711d477c9e654cca3419a3Glenn Jahnke & Lenny Turetskyimport com.xtremelabs.robolectric.internal.Implementation; 5c2de7d694855e12183711d477c9e654cca3419a3Glenn Jahnke & Lenny Turetskyimport com.xtremelabs.robolectric.internal.Implements; 6c2de7d694855e12183711d477c9e654cca3419a3Glenn Jahnke & Lenny Turetsky 7dc69095c2faf013e3d1fd197a247a0e31f2f10f2Jan Berkelimport java.io.PrintStream; 8c2de7d694855e12183711d477c9e654cca3419a3Glenn Jahnke & Lenny Turetskyimport java.util.ArrayList; 9c2de7d694855e12183711d477c9e654cca3419a3Glenn Jahnke & Lenny Turetskyimport java.util.List; 10c2de7d694855e12183711d477c9e654cca3419a3Glenn Jahnke & Lenny Turetsky 11c2de7d694855e12183711d477c9e654cca3419a3Glenn Jahnke & Lenny Turetsky@Implements(Log.class) 121ce4754cba537b287d24e85e7d5434408ae89f2dTyler Schultzpublic class ShadowLog { 13c2de7d694855e12183711d477c9e654cca3419a3Glenn Jahnke & Lenny Turetsky private static List<LogItem> logs = new ArrayList<LogItem>(); 14dc69095c2faf013e3d1fd197a247a0e31f2f10f2Jan Berkel public static PrintStream stream; 15c2de7d694855e12183711d477c9e654cca3419a3Glenn Jahnke & Lenny Turetsky 16c2de7d694855e12183711d477c9e654cca3419a3Glenn Jahnke & Lenny Turetsky @Implementation 17c2de7d694855e12183711d477c9e654cca3419a3Glenn Jahnke & Lenny Turetsky public static void e(String tag, String msg) { 18c2de7d694855e12183711d477c9e654cca3419a3Glenn Jahnke & Lenny Turetsky e(tag, msg, null); 19c2de7d694855e12183711d477c9e654cca3419a3Glenn Jahnke & Lenny Turetsky } 20c2de7d694855e12183711d477c9e654cca3419a3Glenn Jahnke & Lenny Turetsky 21c2de7d694855e12183711d477c9e654cca3419a3Glenn Jahnke & Lenny Turetsky @Implementation 22c2de7d694855e12183711d477c9e654cca3419a3Glenn Jahnke & Lenny Turetsky public static void e(String tag, String msg, Throwable throwable) { 23dc69095c2faf013e3d1fd197a247a0e31f2f10f2Jan Berkel addLog(Log.ERROR, tag, msg, throwable); 24c2de7d694855e12183711d477c9e654cca3419a3Glenn Jahnke & Lenny Turetsky } 25c2de7d694855e12183711d477c9e654cca3419a3Glenn Jahnke & Lenny Turetsky 26c2de7d694855e12183711d477c9e654cca3419a3Glenn Jahnke & Lenny Turetsky @Implementation 27c2de7d694855e12183711d477c9e654cca3419a3Glenn Jahnke & Lenny Turetsky public static void d(String tag, String msg) { 28c2de7d694855e12183711d477c9e654cca3419a3Glenn Jahnke & Lenny Turetsky d(tag, msg, null); 29c2de7d694855e12183711d477c9e654cca3419a3Glenn Jahnke & Lenny Turetsky } 30c2de7d694855e12183711d477c9e654cca3419a3Glenn Jahnke & Lenny Turetsky 31c2de7d694855e12183711d477c9e654cca3419a3Glenn Jahnke & Lenny Turetsky @Implementation 32c2de7d694855e12183711d477c9e654cca3419a3Glenn Jahnke & Lenny Turetsky public static void d(String tag, String msg, Throwable throwable) { 33dc69095c2faf013e3d1fd197a247a0e31f2f10f2Jan Berkel addLog(Log.DEBUG, tag, msg, throwable); 34c2de7d694855e12183711d477c9e654cca3419a3Glenn Jahnke & Lenny Turetsky } 35c2de7d694855e12183711d477c9e654cca3419a3Glenn Jahnke & Lenny Turetsky 36c2de7d694855e12183711d477c9e654cca3419a3Glenn Jahnke & Lenny Turetsky @Implementation 37c2de7d694855e12183711d477c9e654cca3419a3Glenn Jahnke & Lenny Turetsky public static void i(String tag, String msg) { 38c2de7d694855e12183711d477c9e654cca3419a3Glenn Jahnke & Lenny Turetsky i(tag, msg, null); 39c2de7d694855e12183711d477c9e654cca3419a3Glenn Jahnke & Lenny Turetsky } 40c2de7d694855e12183711d477c9e654cca3419a3Glenn Jahnke & Lenny Turetsky 41c2de7d694855e12183711d477c9e654cca3419a3Glenn Jahnke & Lenny Turetsky @Implementation 42c2de7d694855e12183711d477c9e654cca3419a3Glenn Jahnke & Lenny Turetsky public static void i(String tag, String msg, Throwable throwable) { 43dc69095c2faf013e3d1fd197a247a0e31f2f10f2Jan Berkel addLog(Log.INFO, tag, msg, throwable); 44c2de7d694855e12183711d477c9e654cca3419a3Glenn Jahnke & Lenny Turetsky } 45c2de7d694855e12183711d477c9e654cca3419a3Glenn Jahnke & Lenny Turetsky 46c2de7d694855e12183711d477c9e654cca3419a3Glenn Jahnke & Lenny Turetsky @Implementation 47c2de7d694855e12183711d477c9e654cca3419a3Glenn Jahnke & Lenny Turetsky public static void v(String tag, String msg) { 48c2de7d694855e12183711d477c9e654cca3419a3Glenn Jahnke & Lenny Turetsky v(tag, msg, null); 49c2de7d694855e12183711d477c9e654cca3419a3Glenn Jahnke & Lenny Turetsky } 50c2de7d694855e12183711d477c9e654cca3419a3Glenn Jahnke & Lenny Turetsky 51c2de7d694855e12183711d477c9e654cca3419a3Glenn Jahnke & Lenny Turetsky @Implementation 52c2de7d694855e12183711d477c9e654cca3419a3Glenn Jahnke & Lenny Turetsky public static void v(String tag, String msg, Throwable throwable) { 53dc69095c2faf013e3d1fd197a247a0e31f2f10f2Jan Berkel addLog(Log.VERBOSE, tag, msg, throwable); 54c2de7d694855e12183711d477c9e654cca3419a3Glenn Jahnke & Lenny Turetsky } 55c2de7d694855e12183711d477c9e654cca3419a3Glenn Jahnke & Lenny Turetsky 56c2de7d694855e12183711d477c9e654cca3419a3Glenn Jahnke & Lenny Turetsky @Implementation 57c2de7d694855e12183711d477c9e654cca3419a3Glenn Jahnke & Lenny Turetsky public static void w(String tag, String msg) { 58c2de7d694855e12183711d477c9e654cca3419a3Glenn Jahnke & Lenny Turetsky w(tag, msg, null); 59c2de7d694855e12183711d477c9e654cca3419a3Glenn Jahnke & Lenny Turetsky } 60c2de7d694855e12183711d477c9e654cca3419a3Glenn Jahnke & Lenny Turetsky 61c2de7d694855e12183711d477c9e654cca3419a3Glenn Jahnke & Lenny Turetsky @Implementation 62dc69095c2faf013e3d1fd197a247a0e31f2f10f2Jan Berkel public static void w(String tag, Throwable throwable) { 63dc69095c2faf013e3d1fd197a247a0e31f2f10f2Jan Berkel w(tag, null, throwable); 64dc69095c2faf013e3d1fd197a247a0e31f2f10f2Jan Berkel } 65dc69095c2faf013e3d1fd197a247a0e31f2f10f2Jan Berkel 66dc69095c2faf013e3d1fd197a247a0e31f2f10f2Jan Berkel 67dc69095c2faf013e3d1fd197a247a0e31f2f10f2Jan Berkel @Implementation 68c2de7d694855e12183711d477c9e654cca3419a3Glenn Jahnke & Lenny Turetsky public static void w(String tag, String msg, Throwable throwable) { 69dc69095c2faf013e3d1fd197a247a0e31f2f10f2Jan Berkel addLog(Log.WARN, tag, msg, throwable); 70c2de7d694855e12183711d477c9e654cca3419a3Glenn Jahnke & Lenny Turetsky } 71c2de7d694855e12183711d477c9e654cca3419a3Glenn Jahnke & Lenny Turetsky 72c2de7d694855e12183711d477c9e654cca3419a3Glenn Jahnke & Lenny Turetsky @Implementation 73c2de7d694855e12183711d477c9e654cca3419a3Glenn Jahnke & Lenny Turetsky public static void wtf(String tag, String msg) { 74c2de7d694855e12183711d477c9e654cca3419a3Glenn Jahnke & Lenny Turetsky wtf(tag, msg, null); 75c2de7d694855e12183711d477c9e654cca3419a3Glenn Jahnke & Lenny Turetsky } 76c2de7d694855e12183711d477c9e654cca3419a3Glenn Jahnke & Lenny Turetsky 77c2de7d694855e12183711d477c9e654cca3419a3Glenn Jahnke & Lenny Turetsky @Implementation 78c2de7d694855e12183711d477c9e654cca3419a3Glenn Jahnke & Lenny Turetsky public static void wtf(String tag, String msg, Throwable throwable) { 79dc69095c2faf013e3d1fd197a247a0e31f2f10f2Jan Berkel addLog(Log.ASSERT, tag, msg, throwable); 80dc69095c2faf013e3d1fd197a247a0e31f2f10f2Jan Berkel } 81dc69095c2faf013e3d1fd197a247a0e31f2f10f2Jan Berkel 82dc69095c2faf013e3d1fd197a247a0e31f2f10f2Jan Berkel @Implementation 83dc69095c2faf013e3d1fd197a247a0e31f2f10f2Jan Berkel public static boolean isLoggable(String tag, int level) { 84dc69095c2faf013e3d1fd197a247a0e31f2f10f2Jan Berkel return stream != null || level >= Log.INFO; 85dc69095c2faf013e3d1fd197a247a0e31f2f10f2Jan Berkel } 86dc69095c2faf013e3d1fd197a247a0e31f2f10f2Jan Berkel 87dc69095c2faf013e3d1fd197a247a0e31f2f10f2Jan Berkel private static void addLog(int level, String tag, String msg, Throwable throwable) { 88dc69095c2faf013e3d1fd197a247a0e31f2f10f2Jan Berkel if (stream != null) { 89dc69095c2faf013e3d1fd197a247a0e31f2f10f2Jan Berkel logToStream(stream, level, tag, msg, throwable); 90dc69095c2faf013e3d1fd197a247a0e31f2f10f2Jan Berkel } 91dc69095c2faf013e3d1fd197a247a0e31f2f10f2Jan Berkel logs.add(new LogItem(level, tag, msg, throwable)); 92dc69095c2faf013e3d1fd197a247a0e31f2f10f2Jan Berkel } 93dc69095c2faf013e3d1fd197a247a0e31f2f10f2Jan Berkel 94dc69095c2faf013e3d1fd197a247a0e31f2f10f2Jan Berkel 95dc69095c2faf013e3d1fd197a247a0e31f2f10f2Jan Berkel private static void logToStream(PrintStream ps, int level, String tag, String msg, Throwable throwable) { 96dc69095c2faf013e3d1fd197a247a0e31f2f10f2Jan Berkel final char c; 97dc69095c2faf013e3d1fd197a247a0e31f2f10f2Jan Berkel switch (level) { 98dc69095c2faf013e3d1fd197a247a0e31f2f10f2Jan Berkel case Log.ASSERT: c = 'A'; break; 99dc69095c2faf013e3d1fd197a247a0e31f2f10f2Jan Berkel case Log.DEBUG: c = 'D'; break; 100dc69095c2faf013e3d1fd197a247a0e31f2f10f2Jan Berkel case Log.ERROR: c = 'E'; break; 101dc69095c2faf013e3d1fd197a247a0e31f2f10f2Jan Berkel case Log.WARN: c = 'W'; break; 102dc69095c2faf013e3d1fd197a247a0e31f2f10f2Jan Berkel case Log.INFO: c = 'I'; break; 103dc69095c2faf013e3d1fd197a247a0e31f2f10f2Jan Berkel case Log.VERBOSE:c = 'V'; break; 104dc69095c2faf013e3d1fd197a247a0e31f2f10f2Jan Berkel default: c = '?'; 105dc69095c2faf013e3d1fd197a247a0e31f2f10f2Jan Berkel } 106dc69095c2faf013e3d1fd197a247a0e31f2f10f2Jan Berkel ps.println(c + "/" + tag + ": " + msg); 107dc69095c2faf013e3d1fd197a247a0e31f2f10f2Jan Berkel if (throwable != null) { 108dc69095c2faf013e3d1fd197a247a0e31f2f10f2Jan Berkel throwable.printStackTrace(ps); 109dc69095c2faf013e3d1fd197a247a0e31f2f10f2Jan Berkel } 110c2de7d694855e12183711d477c9e654cca3419a3Glenn Jahnke & Lenny Turetsky } 111c2de7d694855e12183711d477c9e654cca3419a3Glenn Jahnke & Lenny Turetsky 112c2de7d694855e12183711d477c9e654cca3419a3Glenn Jahnke & Lenny Turetsky public static List<LogItem> getLogs() { 113c2de7d694855e12183711d477c9e654cca3419a3Glenn Jahnke & Lenny Turetsky return logs; 114c2de7d694855e12183711d477c9e654cca3419a3Glenn Jahnke & Lenny Turetsky } 115c2de7d694855e12183711d477c9e654cca3419a3Glenn Jahnke & Lenny Turetsky 116c2de7d694855e12183711d477c9e654cca3419a3Glenn Jahnke & Lenny Turetsky public static void reset() { 117c2de7d694855e12183711d477c9e654cca3419a3Glenn Jahnke & Lenny Turetsky logs.clear(); 118c2de7d694855e12183711d477c9e654cca3419a3Glenn Jahnke & Lenny Turetsky } 119c2de7d694855e12183711d477c9e654cca3419a3Glenn Jahnke & Lenny Turetsky 1209eea23b1f94e1be5d7e581ef5675c5b0d6bbb053Glenn Jahnke & Lenny Turetsky public static class LogItem { 121dc69095c2faf013e3d1fd197a247a0e31f2f10f2Jan Berkel public final int type; 122c2de7d694855e12183711d477c9e654cca3419a3Glenn Jahnke & Lenny Turetsky public final String tag; 123c2de7d694855e12183711d477c9e654cca3419a3Glenn Jahnke & Lenny Turetsky public final String msg; 124c2de7d694855e12183711d477c9e654cca3419a3Glenn Jahnke & Lenny Turetsky public final Throwable throwable; 125c2de7d694855e12183711d477c9e654cca3419a3Glenn Jahnke & Lenny Turetsky 126dc69095c2faf013e3d1fd197a247a0e31f2f10f2Jan Berkel public LogItem(int type, String tag, String msg, Throwable throwable) { 127c2de7d694855e12183711d477c9e654cca3419a3Glenn Jahnke & Lenny Turetsky this.type = type; 128c2de7d694855e12183711d477c9e654cca3419a3Glenn Jahnke & Lenny Turetsky this.tag = tag; 129c2de7d694855e12183711d477c9e654cca3419a3Glenn Jahnke & Lenny Turetsky this.msg = msg; 130c2de7d694855e12183711d477c9e654cca3419a3Glenn Jahnke & Lenny Turetsky this.throwable = throwable; 131c2de7d694855e12183711d477c9e654cca3419a3Glenn Jahnke & Lenny Turetsky } 132c2de7d694855e12183711d477c9e654cca3419a3Glenn Jahnke & Lenny Turetsky } 133c2de7d694855e12183711d477c9e654cca3419a3Glenn Jahnke & Lenny Turetsky} 134