227 lines
5.9 KiB
Go
227 lines
5.9 KiB
Go
package gocmdDaemon
|
|
|
|
import (
|
|
"encoding/json"
|
|
"flag"
|
|
"fmt"
|
|
"os"
|
|
"testing"
|
|
)
|
|
|
|
func TestMFlag_Int(t *testing.T) {
|
|
// 保存原始参数,以便测试后恢复
|
|
oldArgs := os.Args
|
|
defer func() { os.Args = oldArgs }()
|
|
|
|
// 重置flag包状态
|
|
flag.CommandLine = flag.NewFlagSet(os.Args[0], flag.ExitOnError)
|
|
|
|
// 设置测试参数
|
|
os.Args = []string{"cmd", "-i", "123", "--int-flag", "456"}
|
|
|
|
m := &MFlag{
|
|
flags: make(map[string]interface{}),
|
|
}
|
|
|
|
// 注册标志
|
|
m.Int("i", "int-flag", 0, "测试整数标志")
|
|
m.Parse()
|
|
|
|
// 测试短标志
|
|
if got := m.GetIntFlag("int-flag"); got != 456 {
|
|
t.Errorf("GetIntFlag() = %v, want %v", got, 456)
|
|
}
|
|
}
|
|
|
|
func TestMFlag_String(t *testing.T) {
|
|
// 保存原始参数,以便测试后恢复
|
|
oldArgs := os.Args
|
|
defer func() { os.Args = oldArgs }()
|
|
|
|
// 重置flag包状态
|
|
flag.CommandLine = flag.NewFlagSet(os.Args[0], flag.ExitOnError)
|
|
|
|
// 设置测试参数
|
|
os.Args = []string{"cmd", "-s", "hello", "--str-flag", "world"}
|
|
|
|
m := &MFlag{
|
|
flags: make(map[string]interface{}),
|
|
}
|
|
|
|
// 注册标志
|
|
m.String("s", "str-flag", "", "测试字符串标志")
|
|
m.Parse()
|
|
|
|
// 测试长标志
|
|
if got := m.GetStringFlag("str-flag"); got != "world" {
|
|
t.Errorf("GetStringFlag() = %v, want %v", got, "world")
|
|
}
|
|
}
|
|
|
|
func TestMFlag_Bool(t *testing.T) {
|
|
// 保存原始参数,以便测试后恢复
|
|
oldArgs := os.Args
|
|
defer func() { os.Args = oldArgs }()
|
|
|
|
// 重置flag包状态
|
|
flag.CommandLine = flag.NewFlagSet(os.Args[0], flag.ExitOnError)
|
|
|
|
// 设置测试参数
|
|
os.Args = []string{"cmd", "-b", "--bool-flag"}
|
|
|
|
m := &MFlag{
|
|
flags: make(map[string]interface{}),
|
|
}
|
|
|
|
// 注册标志
|
|
m.Bool("b", "bool-flag", false, "测试布尔标志")
|
|
m.Parse()
|
|
|
|
// 测试布尔标志
|
|
if got := m.GetBoolFlag("bool-flag"); !got {
|
|
t.Errorf("GetBoolFlag() = %v, want %v", got, true)
|
|
}
|
|
}
|
|
|
|
func TestMFlag_GetNonExistentFlags(t *testing.T) {
|
|
m := &MFlag{
|
|
flags: make(map[string]interface{}),
|
|
}
|
|
|
|
// 测试获取不存在的标志
|
|
if got := m.GetIntFlag("non-existent"); got != -1 {
|
|
t.Errorf("GetIntFlag() for non-existent flag = %v, want %v", got, -1)
|
|
}
|
|
|
|
if got := m.GetStringFlag("non-existent"); got != "" {
|
|
t.Errorf("GetStringFlag() for non-existent flag = %v, want %v", got, "")
|
|
}
|
|
|
|
if got := m.GetBoolFlag("non-existent"); got != false {
|
|
t.Errorf("GetBoolFlag() for non-existent flag = %v, want %v", got, false)
|
|
}
|
|
}
|
|
|
|
func TestMFlag_RemainArgs(t *testing.T) {
|
|
// 保存原始参数,以便测试后恢复
|
|
oldArgs := os.Args
|
|
defer func() { os.Args = oldArgs }()
|
|
|
|
// 重置flag包状态
|
|
flag.CommandLine = flag.NewFlagSet(os.Args[0], flag.ExitOnError)
|
|
|
|
// 设置测试参数,包括剩余参数
|
|
os.Args = []string{"cmd", "-i", "123", "arg1", "arg2", "arg3", "-d"}
|
|
|
|
m := &MFlag{
|
|
flags: make(map[string]interface{}),
|
|
}
|
|
|
|
// 注册标志
|
|
m.Int("i", "int-flag", 0, "测试整数标志")
|
|
m.Parse()
|
|
|
|
// 测试剩余参数
|
|
expectedArgs := []string{"arg1", "arg2", "arg3", "-d"}
|
|
if len(m.RemainArgs) != len(expectedArgs) {
|
|
t.Errorf("RemainArgs length = %v, want %v", len(m.RemainArgs), len(expectedArgs))
|
|
}
|
|
|
|
for i, arg := range expectedArgs {
|
|
if i < len(m.RemainArgs) && m.RemainArgs[i] != arg {
|
|
t.Errorf("RemainArgs[%d] = %v, want %v", i, m.RemainArgs[i], arg)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestMFlag_MultipleFlags(t *testing.T) {
|
|
// 保存原始参数,以便测试后恢复
|
|
oldArgs := os.Args
|
|
defer func() { os.Args = oldArgs }()
|
|
|
|
// 重置flag包状态
|
|
flag.CommandLine = flag.NewFlagSet(os.Args[0], flag.ExitOnError)
|
|
|
|
// 设置测试参数
|
|
os.Args = []string{"cmd", "-i", "123", "-s", "hello", "-b", "subcmd", "-s", "h1"}
|
|
|
|
m := &MFlag{
|
|
flags: make(map[string]interface{}),
|
|
}
|
|
|
|
// 注册多个标志
|
|
m.Int("i", "int-flag", 0, "测试整数标志")
|
|
m.String("s", "str-flag", "", "测试字符串标志")
|
|
m.Bool("b", "bool-flag", false, "测试布尔标志")
|
|
m.Parse()
|
|
|
|
// 测试所有标志值
|
|
if got := m.GetIntFlag("int-flag"); got != 123 {
|
|
t.Errorf("GetIntFlag() = %v, want %v", got, 123)
|
|
}
|
|
|
|
if got := m.GetStringFlag("str-flag"); got != "hello" {
|
|
t.Errorf("GetStringFlag() = %v, want %v", got, "hello")
|
|
}
|
|
|
|
if got := m.GetBoolFlag("bool-flag"); !got {
|
|
t.Errorf("GetBoolFlag() = %v, want %v", got, true)
|
|
}
|
|
}
|
|
|
|
func TestMFlag_MarshalJSON(t *testing.T) {
|
|
oldArgs := os.Args
|
|
defer func() { os.Args = oldArgs }()
|
|
|
|
// 重置flag包状态
|
|
flag.CommandLine = flag.NewFlagSet(os.Args[0], flag.ExitOnError)
|
|
|
|
// 设置测试参数
|
|
os.Args = []string{"cmd", "-i", "123", "-s", "hello", "-b", "subcmd", "-s", "h1"}
|
|
|
|
m := &MFlag{
|
|
flags: make(map[string]interface{}),
|
|
}
|
|
|
|
// 注册多个标志
|
|
m.Int("i", "int-flag", 0, "测试整数标志")
|
|
m.String("s", "str-flag", "", "测试字符串标志")
|
|
m.Bool("b", "bool-flag", false, "测试布尔标志")
|
|
m.Parse()
|
|
fmt.Println(m.GetIntFlag("int-flag"))
|
|
jsonBytes, err := m.MarshalJSON()
|
|
if err != nil {
|
|
t.Errorf("MarshalJSON() error = %v, want nil", err)
|
|
}
|
|
var result map[string]interface{}
|
|
err = json.Unmarshal(jsonBytes, &result)
|
|
if err != nil {
|
|
t.Errorf("UnmarshalJSON() error = %v, want nil", err)
|
|
}
|
|
if int(result["int-flag"].(float64)) != 123 {
|
|
t.Errorf("MarshalJSON() int-flag = %v, want %v", result["int-flag"], 123)
|
|
}
|
|
if result["str-flag"] != "hello" {
|
|
t.Errorf("MarshalJSON() str-flag = %v, want %v", result["str-flag"], "hello")
|
|
}
|
|
if result["bool-flag"] != true {
|
|
t.Errorf("MarshalJSON() bool-flag = %v, want %v", result["bool-flag"], true)
|
|
}
|
|
m1 := &MFlag{
|
|
flags: make(map[string]interface{}),
|
|
}
|
|
err1 := json.Unmarshal(jsonBytes, m1)
|
|
if err1 != nil {
|
|
t.Errorf("UnmarshalJSON() error = %v, want nil", err)
|
|
}
|
|
if int(m1.GetIntFlag("int-flag")) != 123 {
|
|
t.Errorf("MarshalJSON() int-flag = %v, want %v", m1.GetIntFlag("int-flag"), 123)
|
|
}
|
|
if m1.GetStringFlag("str-flag") != "hello" {
|
|
t.Errorf("MarshalJSON() str-flag = %v, want %v", m1.GetStringFlag("str-flag"), "hello")
|
|
}
|
|
if m1.GetBoolFlag("bool-flag") != true {
|
|
t.Errorf("MarshalJSON() bool-flag = %v, want %v", m1.GetBoolFlag("bool-flag"), true)
|
|
}
|
|
}
|