| Index: base/android/junit/src/org/chromium/base/LogTest.java
|
| diff --git a/base/android/junit/src/org/chromium/base/LogTest.java b/base/android/junit/src/org/chromium/base/LogTest.java
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..14726fe254a00ca1e8b52264d8cf260223083776
|
| --- /dev/null
|
| +++ b/base/android/junit/src/org/chromium/base/LogTest.java
|
| @@ -0,0 +1,93 @@
|
| +// Copyright 2015 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +package org.chromium.base;
|
| +
|
| +import static org.junit.Assert.assertEquals;
|
| +import static org.junit.Assert.assertNull;
|
| +import static org.junit.Assert.assertTrue;
|
| +
|
| +import org.chromium.testing.local.LocalRobolectricTestRunner;
|
| +import org.junit.Test;
|
| +import org.junit.runner.RunWith;
|
| +import org.robolectric.annotation.Config;
|
| +import org.robolectric.annotation.Implementation;
|
| +import org.robolectric.annotation.Implements;
|
| +import org.robolectric.shadows.ShadowLog;
|
| +
|
| +import java.util.List;
|
| +
|
| +/** Unit tests for {@link Log}. */
|
| +@RunWith(LocalRobolectricTestRunner.class)
|
| +@Config(manifest = Config.NONE, shadows = {LogTest.PermissiveShadowLog.class})
|
| +public class LogTest {
|
| + /** Test method for {@link Log#makeTag(String)} */
|
| + @Test
|
| + public void testMakeTag() {
|
| + assertEquals("chromium.Foo", Log.makeTag("Foo"));
|
| + assertEquals("chromium", Log.makeTag(null));
|
| + assertEquals("chromium", Log.makeTag(""));
|
| + }
|
| +
|
| + /** Tests that the computed call origin is the correct one. */
|
| + @Test
|
| + public void callOriginTest() {
|
| + Log.d("Foo", "Bar");
|
| +
|
| + List<ShadowLog.LogItem> logs = ShadowLog.getLogs();
|
| + assertEquals("Only one log should be written", 1, logs.size());
|
| +
|
| + assertTrue("The origin of the log message (" + logs.get(0).msg + ") looks wrong.",
|
| + logs.get(0).msg.matches("\\[LogTest.java:\\d+\\].*"));
|
| + }
|
| +
|
| + /** Tests that exceptions provided to the log functions are properly recognized and printed. */
|
| + @Test
|
| + public void exceptionLoggingTest() {
|
| + Throwable t = new Throwable() {
|
| + @Override
|
| + public String toString() {
|
| + return "MyThrowable";
|
| + }
|
| + };
|
| +
|
| + Throwable t2 = new Throwable() {
|
| + @Override
|
| + public String toString() {
|
| + return "MyOtherThrowable";
|
| + }
|
| + };
|
| +
|
| + List<ShadowLog.LogItem> logs = ShadowLog.getLogs();
|
| +
|
| + // The throwable gets printed out
|
| + Log.i("Foo", "Bar", t);
|
| + assertEquals(t, logs.get(logs.size() - 1).throwable);
|
| + assertEquals("Bar", logs.get(logs.size() - 1).msg);
|
| +
|
| + // The throwable can be both added to the message itself and printed out
|
| + Log.i("Foo", "Bar %s", t);
|
| + assertEquals(t, logs.get(logs.size() - 1).throwable);
|
| + assertEquals("Bar MyThrowable", logs.get(logs.size() - 1).msg);
|
| +
|
| + // Non throwable are properly identified
|
| + Log.i("Foo", "Bar %s", t, "Baz");
|
| + assertNull(logs.get(logs.size() - 1).throwable);
|
| + assertEquals("Bar MyThrowable", logs.get(logs.size() - 1).msg);
|
| +
|
| + // The last throwable is the one used that is going to be printed out
|
| + Log.i("Foo", "Bar %s %s", t, t2);
|
| + assertEquals(t2, logs.get(logs.size() - 1).throwable);
|
| + assertEquals("Bar MyThrowable MyOtherThrowable", logs.get(logs.size() - 1).msg);
|
| + }
|
| +
|
| + /** Needed to allow debug/verbose logging that is disabled by default. */
|
| + @Implements(android.util.Log.class)
|
| + public static class PermissiveShadowLog extends ShadowLog {
|
| + @Implementation
|
| + public static boolean isLoggable(String tag, int level) {
|
| + return true;
|
| + }
|
| + }
|
| +}
|
|
|