選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

command_test.go 2.0KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. // Copyright 2022 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package git
  4. import (
  5. "context"
  6. "testing"
  7. "github.com/stretchr/testify/assert"
  8. )
  9. func TestRunWithContextStd(t *testing.T) {
  10. cmd := NewCommand(context.Background(), "--version")
  11. stdout, stderr, err := cmd.RunStdString(&RunOpts{})
  12. assert.NoError(t, err)
  13. assert.Empty(t, stderr)
  14. assert.Contains(t, stdout, "git version")
  15. cmd = NewCommand(context.Background(), "--no-such-arg")
  16. stdout, stderr, err = cmd.RunStdString(&RunOpts{})
  17. if assert.Error(t, err) {
  18. assert.Equal(t, stderr, err.Stderr())
  19. assert.Contains(t, err.Stderr(), "unknown option:")
  20. assert.Contains(t, err.Error(), "exit status 129 - unknown option:")
  21. assert.Empty(t, stdout)
  22. }
  23. cmd = NewCommand(context.Background())
  24. cmd.AddDynamicArguments("-test")
  25. assert.ErrorIs(t, cmd.Run(&RunOpts{}), ErrBrokenCommand)
  26. cmd = NewCommand(context.Background())
  27. cmd.AddDynamicArguments("--test")
  28. assert.ErrorIs(t, cmd.Run(&RunOpts{}), ErrBrokenCommand)
  29. subCmd := "version"
  30. cmd = NewCommand(context.Background()).AddDynamicArguments(subCmd) // for test purpose only, the sub-command should never be dynamic for production
  31. stdout, stderr, err = cmd.RunStdString(&RunOpts{})
  32. assert.NoError(t, err)
  33. assert.Empty(t, stderr)
  34. assert.Contains(t, stdout, "git version")
  35. }
  36. func TestGitArgument(t *testing.T) {
  37. assert.True(t, isValidArgumentOption("-x"))
  38. assert.True(t, isValidArgumentOption("--xx"))
  39. assert.False(t, isValidArgumentOption(""))
  40. assert.False(t, isValidArgumentOption("x"))
  41. assert.True(t, isSafeArgumentValue(""))
  42. assert.True(t, isSafeArgumentValue("x"))
  43. assert.False(t, isSafeArgumentValue("-x"))
  44. }
  45. func TestCommandString(t *testing.T) {
  46. cmd := NewCommandContextNoGlobals(context.Background(), "a", "-m msg", "it's a test", `say "hello"`)
  47. assert.EqualValues(t, cmd.prog+` a "-m msg" "it's a test" "say \"hello\""`, cmd.String())
  48. cmd = NewCommandContextNoGlobals(context.Background(), "url: https://a:b@c/")
  49. assert.EqualValues(t, cmd.prog+` "url: https://sanitized-credential@c/"`, cmd.toString(true))
  50. }