func TestApp_RunAsSubcommandParseFlags(t *testing.T) { var context *cli.Context a := cli.NewApp() a.Commands = []cli.Command{ { Name: "foo", Action: func(c *cli.Context) { context = c }, Flags: []cli.Flag{ cli.StringFlag{ Name: "lang", Value: "english", Usage: "language for the greeting", }, }, Before: func(_ *cli.Context) error { return nil }, }, } a.Run([]string{"", "foo", "--lang", "spanish", "abcd"}) expect(t, context.Args().Get(0), "abcd") expect(t, context.String("lang"), "spanish") }
func runMain(c *cli.Context) int { var expression string if c.String("expr-file") != "" { byteExpr, err := ioutil.ReadFile(c.String("expr-file")) expression = string(byteExpr) if err != nil { return errMsg("Error opening expression file: %s", err) } } else { if len(c.Args()) == 0 { return errMsg("Must provide at least one argument.") } expression = c.Args()[0] } if c.Bool("ast") { parser := jmespath.NewParser() parsed, err := parser.Parse(expression) if err != nil { if syntaxError, ok := err.(jmespath.SyntaxError); ok { return errMsg("%s\n%s\n", syntaxError, syntaxError.HighlightLocation()) } return errMsg("%s", err) } fmt.Println("") fmt.Printf("%s\n", parsed) return 0 } var input interface{} var jsonParser *json.Decoder if c.String("filename") != "" { f, err := os.Open(c.String("filename")) if err != nil { return errMsg("Error opening input file: %s", err) } jsonParser = json.NewDecoder(f) } else { jsonParser = json.NewDecoder(os.Stdin) } if err := jsonParser.Decode(&input); err != nil { errMsg("Error parsing input json: %s\n", err) return 2 } result, err := jmespath.Search(expression, input) if err != nil { if syntaxError, ok := err.(jmespath.SyntaxError); ok { return errMsg("%s\n%s\n", syntaxError, syntaxError.HighlightLocation()) } return errMsg("Error evaluating JMESPath expression: %s", err) } converted, isString := result.(string) if c.Bool("unquoted") && isString { os.Stdout.WriteString(converted) } else { toJSON, err := json.MarshalIndent(result, "", " ") if err != nil { errMsg("Error marshalling result to JSON: %s\n", err) return 3 } os.Stdout.Write(toJSON) } os.Stdout.WriteString("\n") return 0 }