github.com/webx-top/com@v1.2.12/cmd_test.go (about) 1 package com 2 3 import ( 4 "bufio" 5 "context" 6 "io" 7 "os" 8 "sync" 9 "testing" 10 11 "github.com/stretchr/testify/assert" 12 ) 13 14 func TestParseArgs(t *testing.T) { 15 parts := ParseArgs(`tower.exe -c tower.yaml -p "eee\"ddd" -t aaaa`) 16 expected := []string{"tower.exe", "-c", "tower.yaml", "-p", "eee\"ddd", "-t", "aaaa"} 17 assert.Equal(t, expected, parts) 18 19 parts = ParseArgs(`tower.exe -c tower.yaml -p "eee\"ddd" -t aaaa`) // more space 20 assert.Equal(t, expected, parts) 21 22 parts = ParseArgs(`tower.exe -c=tower.yaml -p="eee\"ddd" -t=aaaa`) 23 assert.Equal(t, expected, parts) 24 parts = ParseArgs(`tower.exe -c=tower.yaml -p='eee"ddd' -t=aaaa`) 25 assert.Equal(t, expected, parts) 26 27 parts = ParseArgs(`tower.exe -c tower.yaml -p "eee\"ddd" -t aaaa`) // space and tab 28 assert.Equal(t, expected, parts) 29 30 parts = ParseArgs(`tower.exe -c tower.yaml -p 'eee\'ddd' -t aaaa`) 31 assert.Equal(t, []string{"tower.exe", "-c", "tower.yaml", "-p", "eee'ddd", "-t", "aaaa"}, parts) 32 parts = ParseArgs(`tower.exe -c tower.yaml -p ' eee\'ddd ' -t aaaa`) 33 assert.Equal(t, []string{"tower.exe", "-c", "tower.yaml", "-p", " eee'ddd ", "-t", "aaaa"}, parts) 34 } 35 36 func TestParseFields(t *testing.T) { 37 parts := ParseFields(`drwxr-xr-x 1 root root 0 2023-11-19 04:18 'test test2'`) 38 expected := []string{"drwxr-xr-x", "1", "root", "root", "0", "2023-11-19", "04:18", "test test2"} 39 assert.Equal(t, expected, parts) 40 } 41 42 func TestParseEnvVar(t *testing.T) { 43 os.Setenv(`TESTENV`, `1`) 44 v := ParseEnvVar(`ab{$TESTENV}c`) 45 assert.Equal(t, `ab1c`, v) 46 v = ParseEnvVar(`ab{$NOTEXISTS:ok}c`) 47 assert.Equal(t, `abokc`, v) 48 } 49 50 func TestParseWindowsEnvVar(t *testing.T) { 51 os.Setenv(`TESTENV`, `2`) 52 v := ParseWindowsEnvVar(`ab{%TESTENV%}c`) 53 assert.Equal(t, `ab2c`, v) 54 v = ParseWindowsEnvVar(`ab{%NOTEXISTS:ok%}c`) 55 assert.Equal(t, `abokc`, v) 56 } 57 58 func TestCmdChanReader(t *testing.T) { 59 c := NewCmdChanReader() 60 ctx, cancel := context.WithCancel(context.Background()) 61 defer func() { 62 cancel() 63 c.Close() 64 }() 65 wg := sync.WaitGroup{} 66 wg.Add(5) 67 go func() { 68 in := bufio.NewReader(c) 69 for { 70 select { 71 case <-ctx.Done(): 72 return 73 default: 74 input, err := in.ReadString(LF) 75 if err != nil && err != io.EOF { 76 t.Log(err.Error()) 77 return 78 } 79 wg.Done() 80 t.Log(input) 81 } 82 } 83 }() 84 c.SendStringAndWait("OK\n") 85 c.SendStringAndWait("OK1\n") 86 c.SendStringAndWait("OK2\n") 87 c.SendStringAndWait("OK3\n") 88 c.SendStringAndWait("OK4\n") 89 wg.Wait() 90 }