github.com/telepresenceio/telepresence/v2@v2.20.0-pro.6.0.20240517030216-236ea954e789/integration_test/testdata/stdiotest/main.go (about)

     1  package main
     2  
     3  import (
     4  	"fmt"
     5  	"io"
     6  	"os"
     7  
     8  	"github.com/spf13/cobra"
     9  )
    10  
    11  type runner struct {
    12  	useStdErr bool
    13  	noNL      bool
    14  }
    15  
    16  func main() {
    17  	r := runner{}
    18  	cmd := cobra.Command{
    19  		Use:   "stdiotest",
    20  		Short: "Test stdin, stdout, and stderr",
    21  		Long:  "stdiotest will echo either echo its arguments, or when no arguments are given, its stdin",
    22  		RunE:  r.run,
    23  	}
    24  	flags := cmd.Flags()
    25  	flags.BoolVarP(&r.useStdErr, "stderr", "e", false, "send output to stderr (default is stdout)")
    26  	flags.BoolVarP(&r.useStdErr, "nonl", "n", false, "don't append a newline to each echoed argument (invalid when echoing stdin)")
    27  	if err := cmd.Execute(); err != nil {
    28  		fmt.Fprintln(os.Stderr, err.Error())
    29  		os.Exit(1)
    30  	}
    31  }
    32  
    33  func (r runner) run(cmd *cobra.Command, args []string) error {
    34  	var out io.Writer
    35  	if r.useStdErr {
    36  		out = cmd.ErrOrStderr()
    37  	} else {
    38  		out = cmd.OutOrStdout()
    39  	}
    40  	if len(args) == 0 {
    41  		_, err := io.Copy(out, cmd.InOrStdin())
    42  		return err
    43  	}
    44  
    45  	if r.noNL {
    46  		for _, arg := range args {
    47  			if _, err := out.Write([]byte(arg)); err != nil {
    48  				return err
    49  			}
    50  		}
    51  	} else {
    52  		for _, arg := range args {
    53  			if _, err := fmt.Fprintln(out, arg); err != nil {
    54  				return err
    55  			}
    56  		}
    57  	}
    58  	return nil
    59  }