package command

import (
	"testing"
)

func TestCommand(t *testing.T) {
	c := &cmd{
		name:        "test",
		usage:       "test usage",
		description: "test description",
		exec: func(args ...string) ([]byte, error) {
			return []byte("test"), nil
		},
	}

	if c.String() != c.name {
		t.Fatalf("expected name %s got %s", c.name, c.String())
	}

	if c.Usage() != c.usage {
		t.Fatalf("expected usage %s got %s", c.usage, c.Usage())
	}

	if c.Description() != c.description {
		t.Fatalf("expected description %s got %s", c.description, c.Description())
	}

	if r, err := c.Exec(); err != nil {
		t.Fatal(err)
	} else if string(r) != "test" {
		t.Fatalf("expected exec result test got %s", string(r))
	}
}

func TestNewCommand(t *testing.T) {
	c := &cmd{
		name:        "test",
		usage:       "test usage",
		description: "test description",
		exec: func(args ...string) ([]byte, error) {
			return []byte("test"), nil
		},
	}

	nc := NewCommand(c.name, c.usage, c.description, c.exec)

	if nc.String() != c.name {
		t.Fatalf("expected name %s got %s", c.name, nc.String())
	}

	if nc.Usage() != c.usage {
		t.Fatalf("expected usage %s got %s", c.usage, nc.Usage())
	}

	if nc.Description() != c.description {
		t.Fatalf("expected description %s got %s", c.description, nc.Description())
	}

	if r, err := nc.Exec(); err != nil {
		t.Fatal(err)
	} else if string(r) != "test" {
		t.Fatalf("expected exec result test got %s", string(r))
	}
}