package container

import (
	"fmt"
	"reflect"
	"testing"
)

func TestInstance_GetCaller(t *testing.T) {

	var content = "content"
	instance := Instance(reflect.ValueOf(&TestServiceImplement{content}))
	caller, err := instance.GetCaller("String")
	if err != nil {
		t.Fatalf("意外错误:%s", err.Error())
	}
	result := caller([]reflect.Value{})
	if len(result) != 2 {
		t.Fatalf("调用器返回结果数量错误!")
	}
	if result[0].Interface() != content {
		t.Fatalf("调用器返回内容错误!")
	}
}

func TestInstance_GetCaller_EmptyMethodNameError(t *testing.T) {

	_, err := serviceInstance.GetCaller("")
	if err == nil {
		t.Fatalf("意外的没有错误!")
	}
	if err.Error() != fmt.Sprintf("方法名不能为空!") {
		t.Fatalf("意外错误:%s", err.Error())
	}
}

func TestInstance_GetCaller_MissingMethodError(t *testing.T) {

	_, err := serviceInstance.GetCaller("NoMethod")
	if err == nil {
		t.Fatalf("意外的没有错误!")
	}
	if err.Error() != fmt.Sprintf("未找到方法!") {
		t.Fatalf("意外错误:%s", err.Error())
	}
}
