Skip to content

Commit 18a01d7

Browse files
committed
lib/log: Expand format codes on @go.log_init
This also precipitated a refactor of `assert_log_equals` and its implementation functions to handle the expanded code, which actually simplified the logic a bit. By the same token, it's no longer required that `format_log_label` be called before other `lib/log` functions, as `__GO_LOG_LEVELS_FORMATTED` will always contain expanded format codes and `@go.log` will strip them out if need be.
1 parent 6f16183 commit 18a01d7

File tree

5 files changed

+25
-59
lines changed

5 files changed

+25
-59
lines changed

lib/log

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -253,7 +253,7 @@ readonly __GO_LOG_COMMAND_EXIT_PATTERN='^@go.log_command (exit|fatal):([0-9]+)$'
253253
if @go.log_timestamp; then
254254
__go_log_timestamp+=' '
255255
fi
256-
printf -v log_msg -- '%s%b %b' "$__go_log_timestamp" \
256+
printf -v log_msg -- '%s%s %b' "$__go_log_timestamp" \
257257
"${__GO_LOG_LEVELS_FORMATTED[$__go_log_level_index]}" "${args[*]}\\e[0m"
258258

259259
local __go_log_level_file_descriptors=('1')
@@ -668,6 +668,8 @@ _@go.log_format_level_labels() {
668668
@go.pad_items __GO_LOG_LEVELS_FORMATTED "${__GO_LOG_LEVELS_FORMATTED[@]}"
669669
@go.zip_items __GO_LOG_LEVELS_FORMAT_CODES __GO_LOG_LEVELS_FORMATTED '' \
670670
__GO_LOG_LEVELS_FORMATTED
671+
@go.array_printf __GO_LOG_LEVELS_FORMATTED '%b' \
672+
"${__GO_LOG_LEVELS_FORMATTED[@]}"
671673
}
672674

673675
# Returns the set of file descriptors for the specified log level index.

lib/testing/log

Lines changed: 19 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -35,23 +35,11 @@ run_log_script() {
3535

3636
# Format a `log` module log level label
3737
#
38-
# Note that this must be called before any other log assertion, because it needs
39-
# to set _GO_LOG_FORMATTING before importing the `log` module.
40-
#
4138
# Arguments:
4239
# label: Log level label to format
4340
format_log_label() {
4441
local label="$1"
4542

46-
if [[ -n "$__GO_LOG_INIT" ]]; then
47-
local err_format=("\`%s\` must be called before any other function"
48-
"or assertion that calls \`. \"\$_GO_USE_MODULES\" 'log'\`"
49-
'because it needs to set `_GO_LOG_FORMATTING`.')
50-
printf "${err_format[*]}" "$FUNCNAME" >&2
51-
exit 1
52-
fi
53-
54-
_GO_LOG_FORMATTING='true'
5543
. "$_GO_USE_MODULES" 'log'
5644
_@go.log_init
5745

@@ -65,24 +53,21 @@ format_log_label() {
6553

6654
assert_log_equals() {
6755
set "$BATS_ASSERTION_DISABLE_SHELL_OPTIONS"
68-
local level
69-
local __padding=''
7056
local __log_level_label
7157
local expected=()
7258
local i
73-
local result=0
7459

75-
. "$_GO_USE_MODULES" 'log'
76-
77-
for level in "${_GO_LOG_LEVELS[@]}"; do
78-
while [[ "${#__padding}" -lt "${#level}" ]]; do
79-
__padding+=' '
80-
done
81-
done
60+
. "$_GO_USE_MODULES" 'format' 'log'
61+
_@go.log_init
8262

8363
for ((i=0; $# != 0; ++i)); do
8464
if __parse_log_level_label "$1"; then
85-
expected+=("$(__expected_log_line "$__log_level_label" "$2")")
65+
expected+=("$__log_level_label $2")
66+
67+
if [[ "${__log_level_label:0:1}" == $'\e' ]]; then
68+
expected["$((${#expected[@]} - 1))"]+=$'\e[0m'
69+
fi
70+
8671
if ! shift 2; then
8772
echo "ERROR: Wrong number of arguments for log line $i." >&2
8873
return_from_bats_assertion 1
@@ -146,33 +131,21 @@ set_log_command_stack_trace_items() {
146131
# --------------------------------
147132

148133
__parse_log_level_label() {
149-
local level="$1"
150-
local try_level="$level"
151-
if [[ "${level:0:3}" == '\e[' ]]; then
152-
try_level="${try_level//\\e\[[0-9]m}"
153-
try_level="${try_level//\\e\[[0-9][0-9]m}"
154-
try_level="${try_level//\\e\[[0-9][0-9][0-9]m}"
155-
try_level="${try_level%% *}"
134+
local level_label="$1"
135+
local try_level
136+
local __go_log_level_index
137+
138+
@go.strip_formatting_codes "$level_label" 'try_level'
139+
if [[ "$try_level" =~ \ +$ ]]; then
140+
try_level="${try_level%${BASH_REMATCH[0]}}"
156141
fi
157142

158143
if ! _@go.log_level_index "$try_level"; then
159144
return 1
160-
fi
161-
__log_level_label="$level"
162-
163-
# If it's a label formatted with `format_label`, it's already padded.
164-
if [[ "${level:0:3}" != '\e[' ]]; then
165-
__log_level_label+="${__padding:0:$((${#__padding} - ${#try_level}))}"
166-
fi
167-
}
168-
169-
__expected_log_line() {
170-
local level="$1"
171-
local message="$2"
172-
173-
if [[ "${level:0:3}" == '\e[' ]]; then
174-
printf '%b\n' "$level $message\e[0m"
145+
elif [[ "$level_label" != "$try_level" ]]; then
146+
__log_level_label="$level_label"
175147
else
176-
printf '%b\n' "$level $message"
148+
@go.strip_formatting_codes \
149+
"${__GO_LOG_LEVELS_FORMATTED[$__go_log_level_index]}" __log_level_label
177150
fi
178151
}

tests/log/log-command.bats

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -115,9 +115,6 @@ teardown() {
115115
}
116116

117117
@test "$SUITE: log failing command to standard error with formatting" {
118-
local formatted_run_level_label="$(format_log_label RUN)"
119-
local formatted_error_level_label="$(format_log_label ERROR)"
120-
121118
_GO_LOG_FORMATTING='true' run_log_script \
122119
'function failing_function() {' \
123120
' printf "%b\n" "\e[1m$*\e[0m" >&2' \
@@ -127,9 +124,9 @@ teardown() {
127124

128125
assert_failure
129126
assert_log_equals \
130-
"$formatted_run_level_label" 'failing_function foo bar baz' \
127+
"$(format_log_label RUN)" 'failing_function foo bar baz' \
131128
"$(printf '%b' '\e[1mfoo bar baz\e[0m')" \
132-
"$formatted_error_level_label" \
129+
"$(format_log_label ERROR)" \
133130
'failing_function foo bar baz (exit status 127)'
134131
assert_log_file_equals "$TEST_LOG_FILE" "${lines[@]}"
135132
}

tests/log/main.bats

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ teardown() {
2323
'echo Goodbye, World!'
2424
assert_success
2525
assert_log_equals \
26-
"$(format_log_label INFO)" '\e[1m\e[36mHello, World!' \
26+
"$(format_log_label INFO)" "$(printf '%b' '\e[1m\e[36mHello, World!')" \
2727
'Goodbye, World!'
2828
}
2929

tests/testing/log.bats

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -48,12 +48,6 @@ teardown() {
4848
assert_success "$expected_message"
4949
}
5050

51-
@test "$SUITE: format_log_label exits if log module already initialized" {
52-
__GO_LOG_INIT='true' run format_log_label INFO
53-
assert_failure
54-
assert_output_matches '^`format_log_label` must be called before any other '
55-
}
56-
5751
@test "$SUITE: format_log_label exits if log level label invalid" {
5852
run format_log_label FOOBAR
5953
assert_failure 'Unknown log level label: FOOBAR'

0 commit comments

Comments
 (0)