| // 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.junit.Test; |
| import org.junit.runner.RunWith; |
| import org.robolectric.annotation.Config; |
| import org.robolectric.shadows.ShadowLog; |
| |
| import org.chromium.base.test.BaseRobolectricTestRunner; |
| |
| import java.util.List; |
| |
| /** Unit tests for {@link Log}. */ |
| @RunWith(BaseRobolectricTestRunner.class) |
| @Config(manifest = Config.NONE) |
| public class LogTest { |
| /** 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+\\].*")); |
| } |
| |
| @Test |
| public void normalizeTagTest() { |
| assertEquals("cr_foo", Log.normalizeTag("cr.foo")); |
| assertEquals("cr_foo", Log.normalizeTag("cr_foo")); |
| assertEquals("cr_foo", Log.normalizeTag("foo")); |
| assertEquals("cr_ab_foo", Log.normalizeTag("ab_foo")); |
| } |
| |
| /** 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; |
| |
| // The throwable gets printed out |
| Log.i("Foo", "Bar", t); |
| logs = ShadowLog.getLogs(); |
| 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); |
| logs = ShadowLog.getLogs(); |
| 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"); |
| logs = ShadowLog.getLogs(); |
| 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); |
| logs = ShadowLog.getLogs(); |
| assertEquals(t2, logs.get(logs.size() - 1).throwable); |
| assertEquals("Bar MyThrowable MyOtherThrowable", logs.get(logs.size() - 1).msg); |
| } |
| } |