v / vlib / log / log_test.v
153 lines · 135 sloc · 3.79 KB · 13645e24569811a61a49d1e85d76e24f653eac42
Raw
1module log
2
3fn log_mutable_statements(mut l Log) {
4 println(@FN + ' start')
5 l.info('info')
6 l.warn('warn')
7 l.error('error')
8 l.debug('no output for debug')
9 l.set_level(.debug)
10 l.debug('debug now')
11 l.set_level(level_from_tag('INFO') or { Level.disabled })
12 l.info('info again')
13 l.set_level(level_from_tag('') or { Level.disabled })
14 l.error('no output anymore')
15 println(@FN + ' end')
16}
17
18fn logger_mutable_statements(mut l Logger) {
19 println(@FN + ' start')
20 // the given logger instance could have a level to filter some levels used here
21 l.info('info')
22 l.warn('warn')
23 l.error('error')
24 l.debug('no output for debug')
25 l.set_level(.debug) // change logging level, now part of the Logger interface
26 l.debug('output for debug now')
27 l.info('output for info now')
28 println(@FN + ' end')
29}
30
31// Note that Log and Logger methods requires a mutable instance
32
33// new_log create and return a new Log reference
34pub fn new_log() &Log {
35 return &Log{
36 level: .info
37 } // reference needed for its parallel usage
38}
39
40// new_log_as_logger create and return a new Log reference as a generic Logger
41pub fn new_log_as_logger() &Logger {
42 return &Log{
43 level: .info
44 } // reference needed for its parallel usage
45}
46
47fn test_log_mutable() {
48 println(@FN + ' start')
49 mut l := Log{}
50 l.set_level(.info)
51 log_mutable_statements(mut l)
52 assert true
53 println(@FN + ' end')
54}
55
56fn test_log_mutable_reference() {
57 println(@FN + ' start')
58 mut l := new_log()
59 assert typeof(l).name == '&log.Log'
60 t := spawn log_mutable_statements(mut l)
61 t.wait()
62 assert true
63 println(@FN + ' end')
64}
65
66fn test_logger_mutable_reference() {
67 println(@FN + ' start')
68 // get log as Logger and use it
69 mut logger := new_log_as_logger()
70 logger.set_level(.warn)
71 assert typeof(logger).name == '&log.Logger'
72 t := spawn logger_mutable_statements(mut logger)
73 t.wait()
74 assert true
75 println(@FN + ' end')
76}
77
78fn test_log_mutable_short_tag() {
79 println(@FN + ' start')
80 mut l := Log{}
81 l.set_level(.info)
82 l.set_short_tag(true)
83 log_mutable_statements(mut l)
84 assert true
85 println(@FN + ' end')
86}
87
88fn test_level_from_tag() ? {
89 assert level_from_tag('INFO')? == .info
90 assert level_from_tag('FATAL')? == .fatal
91 assert level_from_tag('WARN')? == .warn
92 assert level_from_tag('ERROR')? == .error
93 assert level_from_tag('DEBUG')? == .debug
94 assert level_from_tag('I')? == .info
95 assert level_from_tag('F')? == .fatal
96 assert level_from_tag('W')? == .warn
97 assert level_from_tag('E')? == .error
98 assert level_from_tag('D')? == .debug
99
100 invalid := ['', 'FOO', 'nope']
101
102 for value in invalid {
103 mut passed := false
104 level_from_tag(value) or { passed = true }
105 assert passed
106 }
107}
108
109fn test_target_from_label() ? {
110 assert target_from_label('console')? == .console
111 assert target_from_label('file')? == .file
112 assert target_from_label('both')? == .both
113
114 invalid := ['', 'FOO', 'nope']
115
116 for value in invalid {
117 mut passed := false
118 target_from_label(value) or { passed = true }
119 assert passed
120 }
121}
122
123fn test_log_time_format() {
124 println(@FN + ' start')
125 mut l := Log{}
126 l.set_level(.info)
127 l.set_time_format(.tf_rfc3339_nano)
128 assert TimeFormat.tf_rfc3339_nano == l.get_time_format()
129 l.info('${@FN} rfc3339_nano == YYYY-MM-DDTHH:mm:ss.123456789Z')
130 l.set_time_format(.tf_ymmdd)
131 assert TimeFormat.tf_ymmdd == l.get_time_format()
132 l.info('${@FN} ymmdd == YYYY-MM-DD')
133 l.set_custom_time_format('MMMM Do YY N kk:mm:ss A')
134 assert TimeFormat.tf_custom_format == l.get_time_format()
135 l.info('${@FN} custom like January 1st 22 AD 13:45:33 PM')
136 assert true
137 l.set_time_format(.tf_default)
138 l.set_local_time(true)
139 l.info('${@FN} time log in local time')
140 assert l.get_local_time()
141 l.set_local_time(false)
142 l.info('${@FN} time log in utc time')
143 assert !l.get_local_time()
144 println(@FN + ' end')
145}
146
147fn make_error() ?string {
148 return 'ok'
149}
150
151fn test_log_default_fatal_has_noreturn() {
152 _ := make_error() or { fatal('error') }
153}
154