Skip to content

Commit

Permalink
code review changes
Browse files Browse the repository at this point in the history
  • Loading branch information
gammazero committed Jan 14, 2021
1 parent 267d6fc commit 20132a8
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 3 deletions.
7 changes: 4 additions & 3 deletions core/commands/cmdenv/env.go
Original file line number Diff line number Diff line change
Expand Up @@ -72,10 +72,11 @@ func GetConfigRoot(env cmds.Environment) (string, error) {
return ctx.ConfigRoot, nil
}

// EscNonPrint converts non-printable characters and backslash into Go
// escape sequences, if the given string contains any.
// EscNonPrint converts non-printable characters and backslash into Go escape
// sequences. This is done to display all characters in a string, including
// those that would otherwise not be displayed or have an undesirable effect on
// the display.
func EscNonPrint(s string) string {
// First see if escaping is needed, to avoid creating garbage.
if !needEscape(s) {
return s
}
Expand Down
48 changes: 48 additions & 0 deletions core/commands/cmdenv/env_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package cmdenv

import (
"strconv"
"testing"
)

func TestEscNonPrint(t *testing.T) {
b := []byte("hello")
b[2] = 0x7f
s := string(b)
if !needEscape(s) {
t.Fatal("string needs escaping")
}
if !hasNonPrintable(s) {
t.Fatal("expected non-printable")
}
if hasNonPrintable(EscNonPrint(s)) {
t.Fatal("escaped string has non-printable")
}
if EscNonPrint(`hel\lo`) != `hel\\lo` {
t.Fatal("backslash not escaped")
}

s = `hello`
if needEscape(s) {
t.Fatal("string does not need escaping")
}
if EscNonPrint(s) != s {
t.Fatal("string should not have changed")
}
s = `"hello"`
if EscNonPrint(s) != s {
t.Fatal("string should not have changed")
}
if EscNonPrint(`"hel\"lo"`) != `"hel\\"lo"` {
t.Fatal("did not get expected escaped string")
}
}

func hasNonPrintable(s string) bool {
for _, r := range s {
if !strconv.IsPrint(r) {
return true
}
}
return false
}

0 comments on commit 20132a8

Please sign in to comment.