• Inphi's avatar
    cannon: Multi VM executor (#12072) · 56502ddc
    Inphi authored
    * cannon: Multi VM executor
    
    * fix run subcmd arg fwding
    
    * fix mt prestate
    
    * add list subcmd; multicannon in op-stack-go
    
    * remove cannon-latest
    
    * safer strconv
    
    * lint
    
    * include .gitkeep in embed
    
    * fix .git copy
    
    * add detect.go tests
    
    * add nosemgrep
    
    * review comments
    
    * list filtering
    
    * add note to MIPS.sol in version stf ref
    
    * use fork-exec
    
    * minimal flag parsing
    
    * load old cannon binaries from docker images
    
    * note
    
    * --help flag defaults
    
    * remove redundant copy from cannon-builder-0
    56502ddc
util_test.go 1.23 KB
package main

import (
	"strings"
	"testing"

	"github.com/stretchr/testify/require"
)

func TestParseFlag(t *testing.T) {
	cases := []struct {
		name      string
		args      string
		flag      string
		expect    string
		expectErr string
	}{
		{
			name:   "bar=one",
			args:   "--foo --bar=one --baz",
			flag:   "--bar",
			expect: "one",
		},
		{
			name:   "bar one",
			args:   "--foo --bar one --baz",
			flag:   "--bar",
			expect: "one",
		},
		{
			name:   "bar one first flag",
			args:   "--bar one --foo two --baz three",
			flag:   "--bar",
			expect: "one",
		},
		{
			name:   "bar one last flag",
			args:   "--foo --baz --bar one",
			flag:   "--bar",
			expect: "one",
		},
		{
			name:      "non-existent flag",
			args:      "--foo one",
			flag:      "--bar",
			expectErr: "missing flag",
		},
		{
			name:      "empty args",
			args:      "",
			flag:      "--foo",
			expectErr: "missing flag",
		},
	}
	for _, tt := range cases {
		tt := tt
		t.Run(tt.name, func(t *testing.T) {
			args := strings.Split(tt.args, " ")
			result, err := parseFlag(args, tt.flag)
			if tt.expectErr != "" {
				require.ErrorContains(t, err, tt.expectErr)
			} else {
				require.NoError(t, err)
				require.Equal(t, tt.expect, result)
			}
		})
	}
}