1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 package com.jcabi.log;
31
32 import org.apache.commons.text.StringEscapeUtils;
33 import org.apache.log4j.Level;
34 import org.apache.log4j.spi.LoggingEvent;
35 import org.hamcrest.MatcherAssert;
36 import org.hamcrest.Matchers;
37 import org.junit.jupiter.api.Assertions;
38 import org.junit.jupiter.api.Test;
39 import org.mockito.Mockito;
40
41
42
43
44
45
46 final class MulticolorLayoutTest {
47
48
49
50
51 private static final String CONV_PATTERN = "[%color{%p}] %color{%m}";
52
53 @Test
54 void transformsLoggingEventToText() {
55 final MulticolorLayout layout = new MulticolorLayout();
56 layout.setConversionPattern(MulticolorLayoutTest.CONV_PATTERN);
57 final LoggingEvent event = Mockito.mock(LoggingEvent.class);
58 Mockito.doReturn(Level.DEBUG).when(event).getLevel();
59 Mockito.doReturn("hello").when(event).getRenderedMessage();
60 MatcherAssert.assertThat(
61 StringEscapeUtils.escapeJava(layout.format(event)),
62 Matchers.equalTo(
63 "[\\u001B[2;37mDEBUG\\u001B[m] \\u001B[2;37mhello\\u001B[m"
64 )
65 );
66 }
67
68 @Test
69 void overwriteDefaultColor() {
70 final MulticolorLayout layout = new MulticolorLayout();
71 layout.setConversionPattern(MulticolorLayoutTest.CONV_PATTERN);
72 layout.setLevels("INFO:2;10");
73 final LoggingEvent event = Mockito.mock(LoggingEvent.class);
74 Mockito.doReturn(Level.INFO).when(event).getLevel();
75 Mockito.doReturn("change").when(event).getRenderedMessage();
76 MatcherAssert.assertThat(
77 StringEscapeUtils.escapeJava(layout.format(event)),
78 Matchers.equalTo(
79 "[\\u001B[2;10mINFO\\u001B[m] \\u001B[2;10mchange\\u001B[m"
80 )
81 );
82 }
83
84 @Test
85 void rendersCustomConstantColor() {
86 final MulticolorLayout layout = new MulticolorLayout();
87 layout.setConversionPattern("%color-red{%p} %m");
88 final LoggingEvent event = Mockito.mock(LoggingEvent.class);
89 Mockito.doReturn(Level.DEBUG).when(event).getLevel();
90 Mockito.doReturn("foo").when(event).getRenderedMessage();
91 MatcherAssert.assertThat(
92 StringEscapeUtils.escapeJava(layout.format(event)),
93 Matchers.equalTo("\\u001B[31mDEBUG\\u001B[m foo")
94 );
95 }
96
97 @Test
98 void overwriteCustomConstantColor() {
99 final MulticolorLayout layout = new MulticolorLayout();
100 layout.setConversionPattern("%color-white{%p} %m");
101 layout.setColors("white:10");
102 final LoggingEvent event = Mockito.mock(LoggingEvent.class);
103 Mockito.doReturn(Level.DEBUG).when(event).getLevel();
104 Mockito.doReturn("const").when(event).getRenderedMessage();
105 MatcherAssert.assertThat(
106 StringEscapeUtils.escapeJava(layout.format(event)),
107 Matchers.equalTo("\\u001B[10mDEBUG\\u001B[m const")
108 );
109 }
110
111 @Test
112 void rendersAnsiConstantColor() {
113 final MulticolorLayout layout = new MulticolorLayout();
114 layout.setConversionPattern("%color-0;0;31{%p} %m");
115 final LoggingEvent event = Mockito.mock(LoggingEvent.class);
116 Mockito.doReturn(Level.DEBUG).when(event).getLevel();
117 Mockito.doReturn("bar").when(event).getRenderedMessage();
118 MatcherAssert.assertThat(
119 StringEscapeUtils.escapeJava(layout.format(event)),
120 Matchers.equalTo("\\u001B[0;0;31mDEBUG\\u001B[m bar")
121 );
122 }
123
124 @Test
125 void throwsOnIllegalColorName() {
126 Assertions.assertThrows(
127 IllegalArgumentException.class,
128 () -> {
129 final MulticolorLayout layout = new MulticolorLayout();
130 layout.setConversionPattern("%color-oops{%p} %m");
131 final LoggingEvent event = Mockito.mock(LoggingEvent.class);
132 Mockito.doReturn(Level.DEBUG).when(event).getLevel();
133 Mockito.doReturn("text").when(event).getRenderedMessage();
134 layout.format(event);
135 }
136 );
137 }
138
139 }