flags.go 973 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. package main
  2. import (
  3. "encoding/csv"
  4. "strings"
  5. "github.com/pkg/errors"
  6. "gotest.tools/gotestsum/testjson"
  7. )
  8. type noSummaryValue struct {
  9. value testjson.Summary
  10. }
  11. func newNoSummaryValue() *noSummaryValue {
  12. return &noSummaryValue{value: testjson.SummarizeAll}
  13. }
  14. func readAsCSV(val string) ([]string, error) {
  15. if val == "" {
  16. return nil, nil
  17. }
  18. return csv.NewReader(strings.NewReader(val)).Read()
  19. }
  20. func (s *noSummaryValue) Set(val string) error {
  21. v, err := readAsCSV(val)
  22. if err != nil {
  23. return err
  24. }
  25. for _, item := range v {
  26. summary, ok := testjson.NewSummary(item)
  27. if !ok {
  28. return errors.Errorf("value must be one or more of: %s",
  29. testjson.SummarizeAll.String())
  30. }
  31. s.value -= summary
  32. }
  33. return nil
  34. }
  35. func (s *noSummaryValue) Type() string {
  36. return "summary"
  37. }
  38. func (s *noSummaryValue) String() string {
  39. // flip all the bits, since the flag value is the negative of what is stored
  40. return (testjson.SummarizeAll ^ s.value).String()
  41. }