package cutil

import (
	"testing"

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

func TestCommandInput(t *testing.T) {
	t.Run("newAndFree", func(_ *testing.T) {
		ci := NewCommandInput(
			[][]byte{[]byte("foobar")},
			nil)
		ci.Free()
	})
	t.Run("cmd", func(t *testing.T) {
		ci := NewCommandInput(
			[][]byte{[]byte("foobar")},
			nil)
		defer ci.Free()
		assert.Len(t, ci.cmd, 1)
		assert.EqualValues(t, 1, ci.CmdLen())
		assert.NotNil(t, ci.Cmd())
	})
	t.Run("cmd2", func(t *testing.T) {
		ci := NewCommandInput(
			[][]byte{[]byte("foobar"), []byte("snarf")},
			nil)
		defer ci.Free()
		assert.Len(t, ci.cmd, 2)
		assert.EqualValues(t, 2, ci.CmdLen())
		assert.NotNil(t, ci.Cmd())
	})
	t.Run("noInBuf", func(t *testing.T) {
		ci := NewCommandInput(
			[][]byte{[]byte("foobar")},
			nil)
		defer ci.Free()
		assert.EqualValues(t, 0, ci.InBufLen())
		assert.Equal(t, CharPtr(nil), ci.InBuf())
	})
	t.Run("hasInBuf", func(t *testing.T) {
		ci := NewCommandInput(
			[][]byte{[]byte("foobar")},
			[]byte("original oregano"))
		defer ci.Free()
		assert.EqualValues(t, 16, ci.InBufLen())
		assert.NotEqual(t, CharPtr(nil), ci.InBuf())
	})
}
