package utils

import (
	"testing"

	. "github.com/smartystreets/goconvey/convey"
)

func TestCmdArgumentParser(t *testing.T) {
	var args []string
	var str string

	Convey("Parse Cmd Arguments ["+str+"]", t, func() {
		args = ParseCmdArguments(str)
		So(len(args), ShouldEqual, 0)
	})

	str = "    "
	Convey("Parse Cmd Arguments ["+str+"]", t, func() {
		args = ParseCmdArguments(str)
		So(len(args), ShouldEqual, 0)
	})

	str = "aa bbb  ccc "
	Convey("Parse Cmd Arguments ["+str+"]", t, func() {
		args = ParseCmdArguments(str)
		So(len(args), ShouldEqual, 3)
		So(args[0], ShouldEqual, "aa")
		So(args[1], ShouldEqual, "bbb")
		So(args[2], ShouldEqual, "ccc")
	})

	str = "' \\\""
	Convey("Parse Cmd Arguments ["+str+"]", t, func() {
		args = ParseCmdArguments(str)
		So(len(args), ShouldEqual, 1)
		So(args[0], ShouldEqual, " \\\"")
	})

	str = `a "b c"` // a "b c"
	Convey("Parse Cmd Arguments ["+str+"]", t, func() {
		args = ParseCmdArguments(str)
		So(len(args), ShouldEqual, 2)
		So(args[0], ShouldEqual, "a")
		So(args[1], ShouldEqual, "b c")
	})

	str = `a '\''"`
	Convey("Parse Cmd Arguments ["+str+"]", t, func() {
		args = ParseCmdArguments(str)
		So(len(args), ShouldEqual, 2)
		So(args[0], ShouldEqual, "a")
		So(args[1], ShouldEqual, "'")
	})

	str = `   \\a   'b c'   c\ d\  `
	Convey("Parse Cmd Arguments ["+str+"]", t, func() {
		args = ParseCmdArguments(str)
		So(len(args), ShouldEqual, 3)
		So(args[0], ShouldEqual, "\\a")
		So(args[1], ShouldEqual, "b c")
		So(args[2], ShouldEqual, "c d ")
	})

	str = `\`
	Convey("Parse Cmd Arguments ["+str+"]", t, func() {
		args = ParseCmdArguments(str)
		So(len(args), ShouldEqual, 1)
		So(args[0], ShouldEqual, "\\")
	})

	str = `  \   ` // \SPACE
	Convey("Parse Cmd Arguments ["+str+"]", t, func() {
		args = ParseCmdArguments(str)
		So(len(args), ShouldEqual, 1)
		So(args[0], ShouldEqual, " ")
	})
}