@Test public void testFormatStringArgsWithTrailingText() { final String testMsg = "Test message {}{} {}Text"; final String[] args = { "a", "b", "c" }; final String result = new ReusableParameterizedMessage().set(testMsg, (Object[]) args).getFormattedMessage(); assertEquals("Test message ab cText", result); }
@Override public String toString() { return "ReusableParameterizedMessage[messagePattern=" + getFormat() + ", stringArgs=" + Arrays.toString(getParameters()) + ", throwable=" + getThrowable() + ']'; }
private void init(final String messagePattern, final int argCount, final Object[] paramArray) { this.varargs = null; this.messagePattern = messagePattern; this.argCount = argCount; final int placeholderCount = count(messagePattern, indices); initThrowable(paramArray, argCount, placeholderCount); this.usedCount = Math.min(placeholderCount, argCount); }
private static ReusableParameterizedMessage getParameterized() { ReusableParameterizedMessage result = threadLocalParameterized.get(); if (result == null) { result = new ReusableParameterizedMessage(); threadLocalParameterized.set(result); } return result.reserved ? new ReusableParameterizedMessage().reserve() : result.reserve(); }
@Override public Message newMessage(final String message, final Object p0, final Object p1, final Object p2, final Object p3, final Object p4) { return getParameterized().set(message, p0, p1, p2, p3, p4); }
@Test public void testThrowable() { final String testMsg = "Test message {}"; final ReusableParameterizedMessage msg = new ReusableParameterizedMessage(); final Throwable EXCEPTION1 = new IllegalAccessError("#1"); msg.set(testMsg, "msg", EXCEPTION1); assertSame(EXCEPTION1, msg.getThrowable()); final Throwable EXCEPTION2 = new UnsupportedOperationException("#2"); msg.set(testMsg, "msgs", EXCEPTION2); assertSame(EXCEPTION2, msg.getThrowable()); }
@Test public void testParameterConsumer() { final String testMsg = "Test message {}"; final ReusableParameterizedMessage msg = new ReusableParameterizedMessage(); final Throwable EXCEPTION1 = new IllegalAccessError("#1"); msg.set(testMsg, "msg", EXCEPTION1); List<Object> expected = new LinkedList<>(); expected.add("msg"); expected.add(EXCEPTION1); final List<Object> actual = new LinkedList<>(); msg.forEachParameter(new ParameterConsumer<Void>() { @Override public void accept(Object parameter, int parameterIndex, Void state) { actual.add(parameter); } }, null); assertEquals(expected, actual); } }
@Test public void testInteractionWithReusableParameterizedMessage() { final MutableLogEvent evt = new MutableLogEvent(); final ReusableParameterizedMessage msg = new ReusableParameterizedMessage(); msg.set("Hello {} {} {}", 1, 2, 3); evt.setMessage(msg); evt.clear(); msg.set("Hello {}", new Object[]{1}); evt.setMessage(msg); evt.clear(); msg.set("Hello {}", 1); evt.setMessage(msg); evt.clear(); msg.set("Hello {} {} {}", 1, 2, 3); evt.setMessage(msg); evt.clear();
private void assertReusableParameterizeMessage(final Message message, final String txt, final Object[] params) { assertTrue(message instanceof ReusableParameterizedMessage); final ReusableParameterizedMessage msg = (ReusableParameterizedMessage) message; assertTrue("reserved", msg.reserved); assertEquals(txt, msg.getFormat()); assertEquals("count", msg.getParameterCount(), params.length); final Object[] messageParams = msg.getParameters(); for (int i = 0; i < params.length; i++) { assertEquals(messageParams[i], params[i]); } }
@Test public void testTraceEntryExit() { currentLevel = Level.TRACE; final FlowMessageFactory fact = new DefaultFlowMessageFactory(); final ParameterizedMessage paramMsg = new ParameterizedMessage("Tracy {}", "Logan"); currentEvent = new LogEvent(ENTRY_MARKER.getName(), fact.newEntryMessage(paramMsg), null); final EntryMessage entry = traceEntry("Tracy {}", "Logan"); final ReusableParameterizedMessage msg = ReusableParameterizedMessageTest.set( new ReusableParameterizedMessage(), "Tracy {}", "Logan"); ReusableParameterizedMessageTest.set(msg, "Some other message {}", 123); currentEvent = new LogEvent(null, msg, null); trace("Some other message {}", 123); // ensure original entry message not overwritten assertEquals("Tracy Logan", entry.getMessage().getFormattedMessage()); currentEvent = new LogEvent(EXIT_MARKER.getName(), fact.newExitMessage(entry), null); traceExit(entry); // ensure original entry message not overwritten assertEquals("Tracy Logan", entry.getMessage().getFormattedMessage()); }
/** * Returns the message parameters. * @return the message parameters. */ @Override public Object[] getParameters() { return getTrimmedParams(); }
@Override public Message newMessage(final String message, final Object p0, final Object p1, final Object p2, final Object p3) { return getParameterized().set(message, p0, p1, p2, p3); }
private static ReusableParameterizedMessage getParameterized() { ReusableParameterizedMessage result = threadLocalParameterized.get(); if (result == null) { result = new ReusableParameterizedMessage(); threadLocalParameterized.set(result); } return result.reserved ? new ReusableParameterizedMessage().reserve() : result.reserve(); }
@Test public void testTraceEntryMessage() { currentLevel = Level.TRACE; final FlowMessageFactory fact = new DefaultFlowMessageFactory(); final ParameterizedMessage paramMsg = new ParameterizedMessage("Tracy {}", "Logan"); currentEvent = new LogEvent(ENTRY_MARKER.getName(), fact.newEntryMessage(paramMsg), null); final ReusableParameterizedMessage msg = ReusableParameterizedMessageTest.set( new ReusableParameterizedMessage(), "Tracy {}", "Logan"); final EntryMessage entry = traceEntry(msg); ReusableParameterizedMessageTest.set(msg, "Some other message {}", 123); currentEvent = new LogEvent(null, msg, null); trace("Some other message {}", 123); // ensure original entry message not overwritten assertEquals("Tracy Logan", entry.getMessage().getFormattedMessage()); currentEvent = new LogEvent(EXIT_MARKER.getName(), fact.newExitMessage(entry), null); traceExit(entry); // ensure original entry message not overwritten assertEquals("Tracy Logan", entry.getMessage().getFormattedMessage()); } }
@Override public Message memento() { return new ParameterizedMessage(messagePattern, getTrimmedParams()); }
@Override public <S> void forEachParameter(ParameterConsumer<S> action, S state) { Object[] parameters = getParams(); for (short i = 0; i < argCount; i++) { action.accept(parameters[i], i, state); } }
@Test public void testFormatStringArgsWithTrailingEscape() { final String testMsg = "Test message {}{} {}\\"; final String[] args = { "a", "b", "c" }; final String result = new ReusableParameterizedMessage().set(testMsg, (Object[]) args).getFormattedMessage(); assertEquals("Test message ab c\\", result); }