package assert

import (
	"github.com/v2ray/v2ray-core/common/serial"
	v2testing "github.com/v2ray/v2ray-core/testing"
)

type Subject struct {
	name string
}

func NewSubject() *Subject {
	return &Subject{
		name: "",
	}
}

func (subject *Subject) Fail(displayString string, verb string, other serial.String) {
	subject.FailWithMessage("Not true that " + displayString + " " + verb + " <" + other.String() + ">.")
}

func (subject *Subject) FailWithMessage(message string) {
	v2testing.Fail(message)
}

func (subject *Subject) Named(name string) {
	subject.name = name
}

func (subject *Subject) DisplayString(value string) string {
	if len(value) == 0 {
		value = "unknown"
	}
	if len(subject.name) == 0 {
		return "<" + value + ">"
	}
	return subject.name + "(<" + value + ">)"
}