/***********************************************************************************
* Copyright (c) 2013. Nickolay Gerilovich. Russia.
* Some Rights Reserved.
************************************************************************************/
package com.github.nickvl.xspring.core.log.aop;
import java.io.IOException;
import java.util.BitSet;
import org.junit.Before;
import org.junit.Test;
import static com.github.nickvl.xspring.core.log.aop.TestSupportUtility.createArgumentDescriptor;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
/**
* Tests {@link AbstractLogAdapter}.
*/
public class AbstractLogAdapterTestCase {
private LogAdapter logAdapter;
@Before
public void setUp() throws Exception {
logAdapter = new AbstractLogAdapter() {
@Override
protected String asString(Object value) {
return String.valueOf(value);
}
};
}
@Test
public void testGetLogByClass() throws Exception {
assertNotNull(logAdapter.getLog(this.getClass()));
}
@Test
public void testGetLogByName() throws Exception {
assertNotNull(logAdapter.getLog("custom-logger"));
}
@Test
public void testToMessageBeforeNoArgs() throws Exception {
ArgumentDescriptor descriptor = createArgumentDescriptor(new BitSet(), null);
Object message = logAdapter.toMessage("fooMethod", new Object[]{}, descriptor);
assertEquals("calling: fooMethod()", message);
}
@Test
public void testToMessageBeforeOneArg() throws Exception {
String[] arNames = {"first"};
ArgumentDescriptor descriptor = createArgumentDescriptor(arNames, true);
Object message = logAdapter.toMessage("fooMethod", new Object[]{"v1"}, descriptor);
assertEquals("calling: fooMethod(first=v1)", message);
}
@Test
public void testToMessageBeforeOneArgNoName() throws Exception {
ArgumentDescriptor descriptor = createArgumentDescriptor(null, true);
Object message = logAdapter.toMessage("fooMethod", new Object[]{"v1"}, descriptor);
assertEquals("calling: fooMethod(v1)", message);
}
@Test
public void testToMessageBeforeSomeArgs() throws Exception {
String[] arNames = {"first", "second"};
ArgumentDescriptor descriptor = createArgumentDescriptor(arNames, false, true);
Object message = logAdapter.toMessage("fooMethod", new Object[]{"v1", "v2"}, descriptor);
assertEquals("calling: fooMethod(2 arguments: second=v2)", message);
}
@Test
public void testToMessageBeforeSomeArgsNoNames() throws Exception {
ArgumentDescriptor descriptor = createArgumentDescriptor(null, false, true);
Object message = logAdapter.toMessage("fooMethod", new Object[]{"v1", "v2"}, descriptor);
assertEquals("calling: fooMethod(2 arguments: ?, v2)", message);
}
@Test
public void testToMessageBeforeAllArgs() throws Exception {
String[] arNames = {"first", "second"};
ArgumentDescriptor descriptor = createArgumentDescriptor(arNames, true, true);
Object message = logAdapter.toMessage("fooMethod", new Object[]{"v1", "v2"}, descriptor);
assertEquals("calling: fooMethod(2 arguments: first=v1, second=v2)", message);
}
@Test
public void testToMessageBeforeAllArgsNoNames() throws Exception {
ArgumentDescriptor descriptor = createArgumentDescriptor(null, true, true);
Object message = logAdapter.toMessage("fooMethod", new Object[]{"v1", "v2"}, descriptor);
assertEquals("calling: fooMethod(2 arguments: v1, v2)", message);
}
@Test
public void testToMessageAfterNoArgs() throws Exception {
Object message = logAdapter.toMessage("fooMethod", 0, "res");
assertEquals("returning: fooMethod():res", message);
}
@Test
public void testToMessageAfterNoArgsVoid() throws Exception {
Object message = logAdapter.toMessage("fooMethod", 0, Void.TYPE);
assertEquals("returning: fooMethod():void", message);
}
@Test
public void testToMessageAfter() throws Exception {
Object message = logAdapter.toMessage("fooMethod", 2, "res");
assertEquals("returning: fooMethod(2 arguments):res", message);
}
@Test
public void testToMessageAfterVoid() throws Exception {
Object message = logAdapter.toMessage("fooMethod", 2, Void.TYPE);
assertEquals("returning: fooMethod(2 arguments):void", message);
}
@Test
public void testToMessageExceptionNoArgs() throws Exception {
Object message = logAdapter.toMessage("fooMethod", 0, new IOException("storage disconnected"), false);
assertEquals("throwing: fooMethod():class java.io.IOException=storage disconnected", message);
}
@Test
public void testToMessageException() throws Exception {
Object message = logAdapter.toMessage("fooMethod", 2, new IllegalArgumentException("second is negative"), false);
assertEquals("throwing: fooMethod(2 arguments):class java.lang.IllegalArgumentException=second is negative", message);
}
@Test
public void testToMessageExceptionNullMessage() throws Exception {
Object message = logAdapter.toMessage("fooMethod", 2, new Exception(), false);
assertEquals("throwing: fooMethod(2 arguments):class java.lang.Exception", message);
}
}