1
- import TerminalLoggers. default_metafmt
1
+ using TerminalLoggers: default_metafmt, format_message
2
2
3
3
@noinline func1 () = backtrace ()
4
4
5
+ function dummy_metafmt (level, _module, group, id, file, line)
6
+ :cyan ," PREFIX" ," SUFFIX"
7
+ end
8
+
9
+ # Log formatting
10
+ function genmsgs (events; level= Info, _module= Main,
11
+ file= " some/path.jl" , line= 101 , color= false , width= 75 ,
12
+ meta_formatter= dummy_metafmt, show_limited= true ,
13
+ right_justify= 0 )
14
+ buf = IOBuffer ()
15
+ io = IOContext (buf, :displaysize => (30 ,width), :color => color)
16
+ logger = TerminalLogger (io, Debug,
17
+ meta_formatter= meta_formatter,
18
+ show_limited= show_limited,
19
+ right_justify= right_justify)
20
+ prev_have_color = Base. have_color
21
+ return map (events) do (message, kws)
22
+ kws = Dict (pairs (kws))
23
+ id = pop! (kws, :_id , :an_id )
24
+ # Avoid markdown formatting while testing layouting. Don't wrap
25
+ # progress messages though; ProgressLogging.asprogress() doesn't
26
+ # like that.
27
+ is_progress = message isa Progress || haskey (kws, :progress )
28
+ handle_message (logger, level, message, _module, :a_group , id,
29
+ file, line; kws... )
30
+ String (take! (buf))
31
+ end
32
+ end
33
+
34
+ function genmsg (message; kwargs... )
35
+ kws = Dict (kwargs)
36
+ logconfig = Dict (
37
+ k => pop! (kws, k)
38
+ for k in [
39
+ :level ,
40
+ :_module ,
41
+ :file ,
42
+ :line ,
43
+ :color ,
44
+ :width ,
45
+ :meta_formatter ,
46
+ :show_limited ,
47
+ :right_justify ,
48
+ ] if haskey (kws, k)
49
+ )
50
+ return genmsgs ([(message, kws)]; logconfig... )[1 ]
51
+ end
52
+
5
53
@testset " TerminalLogger" begin
6
54
# First pass log limiting
7
55
@test min_enabled_level (TerminalLogger (devnull , Debug)) == Debug
@@ -35,59 +83,15 @@ import TerminalLoggers.default_metafmt
35
83
(:yellow , " Warning:" , " @ Main b.jl:2-5" )
36
84
end
37
85
38
- function dummy_metafmt (level, _module, group, id, file, line)
39
- :cyan ," PREFIX" ," SUFFIX"
40
- end
41
-
42
- # Log formatting
43
- function genmsgs (events; level= Info, _module= Main,
44
- file= " some/path.jl" , line= 101 , color= false , width= 75 ,
45
- meta_formatter= dummy_metafmt, show_limited= true ,
46
- right_justify= 0 )
47
- buf = IOBuffer ()
48
- io = IOContext (buf, :displaysize => (30 ,width), :color => color)
49
- logger = TerminalLogger (io, Debug,
50
- meta_formatter= meta_formatter,
51
- show_limited= show_limited,
52
- right_justify= right_justify)
53
- prev_have_color = Base. have_color
54
- return map (events) do (message, kws)
55
- kws = Dict (pairs (kws))
56
- id = pop! (kws, :_id , :an_id )
57
- handle_message (logger, level, message, _module, :a_group , id,
58
- file, line; kws... )
59
- String (take! (buf))
60
- end
61
- end
62
- function genmsg (message; kwargs... )
63
- kws = Dict (kwargs)
64
- logconfig = Dict (
65
- k => pop! (kws, k)
66
- for k in [
67
- :level ,
68
- :_module ,
69
- :file ,
70
- :line ,
71
- :color ,
72
- :width ,
73
- :meta_formatter ,
74
- :show_limited ,
75
- :right_justify ,
76
- ] if haskey (kws, k)
77
- )
78
- return genmsgs ([(message, kws)]; logconfig... )[1 ]
79
- end
80
-
81
86
# Basic tests for the default setup
82
87
@test genmsg (" msg" , level= Info, meta_formatter= default_metafmt) ==
83
88
"""
84
89
[ Info: msg
85
90
"""
86
- @test genmsg (" line1 \n line2 " , level= Warn, _module= Base,
91
+ @test genmsg (" msg " , level= Warn, _module= Base,
87
92
file= " other.jl" , line= 42 , meta_formatter= default_metafmt) ==
88
93
"""
89
- ┌ Warning: line1
90
- │ line2
94
+ ┌ Warning: msg
91
95
└ @ Base other.jl:42
92
96
"""
93
97
# Full metadata formatting
@@ -127,10 +131,10 @@ import TerminalLoggers.default_metafmt
127
131
"""
128
132
[ PREFIX xxx SUFFIX
129
133
"""
130
- @test genmsg (" xxx \n xxx " , width= 20 , right_justify= 200 ) ==
134
+ @test genmsg (" xxxxxxxx xxxxxxxx " , width= 20 , right_justify= 200 ) ==
131
135
"""
132
- ┌ PREFIX xxx
133
- └ xxx SUFFIX
136
+ ┌ PREFIX xxxxxxxx
137
+ └ xxxxxxxx SUFFIX
134
138
"""
135
139
# When adding the suffix would overflow the display width, add it on
136
140
# the next line:
@@ -239,9 +243,10 @@ import TerminalLoggers.default_metafmt
239
243
end
240
244
241
245
# Basic colorization test.
242
- @test genmsg (" line1\n line2" , color= true ) ==
246
+ @test genmsg (" line1\n\ n line2" , color= true ) ==
243
247
"""
244
248
\e [36m\e [1m┌ \e [22m\e [39m\e [36m\e [1mPREFIX \e [22m\e [39mline1
249
+ \e [36m\e [1m│ \e [22m\e [39m
245
250
\e [36m\e [1m│ \e [22m\e [39mline2
246
251
\e [36m\e [1m└ \e [22m\e [39m\e [90mSUFFIX\e [39m
247
252
"""
@@ -260,6 +265,34 @@ import TerminalLoggers.default_metafmt
260
265
@test genmsgs ([(" " , (progress = 0.1 ,)), (" " , (progress = " done" ,))], width = 60 )[end ] ⊏
261
266
r" Progress: 100%\| █+\| Time: .*"
262
267
268
+ @testset " Message formatting" begin
269
+ io_ctx = IOContext (IOBuffer (), :displaysize => (20 ,20 ))
270
+
271
+ # Short paragraph on a single line
272
+ @test format_message (" Hi `code`" , 6 , io_ctx) ==
273
+ [" Hi code" ]
274
+
275
+ # Longer paragraphs wrap around the prefix
276
+ @test format_message (" x x x x x x x x x x x x x x x x x x x x x" , 6 , io_ctx) ==
277
+ [" x x x x x"
278
+ " x x x x x x x x"
279
+ " x x x x x x x x" ]
280
+
281
+ # Markdown block elements get their own lines
282
+ @test format_message (" # Hi" , 6 , io_ctx) ==
283
+ [" " ,
284
+ " Hi" ,
285
+ " ≡≡≡≡" ]
286
+
287
+ # For non-strings a blank line is added so that any formatting for
288
+ # vertical alignment isn't broken
289
+ @test format_message ([1 2 ; 3 4 ], 6 , io_ctx) ==
290
+ [" " ,
291
+ " 2×2 Array{Int64,2}:" ,
292
+ " 1 2" ,
293
+ " 3 4" ]
294
+ end
295
+
263
296
@testset " Independent progress bars" begin
264
297
msgs = genmsgs ([
265
298
(" Bar1" , (progress = 0.0 , _id = 1111 )), # 1
0 commit comments