GAAS GFrame项目web后台
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

295 lines
8.9 KiB

// Copyright (c) Shenyang Leading Edge Intelligent Technology Co., Ltd. All rights reserved.
package container
import (
"fmt"
"reflect"
"testing"
)
func TestDefaultInformationManager_New(t *testing.T) {
defaultInformationManager := NewDefaultInformationManager()
if defaultInformationManager == nil {
t.Fatalf("创建失败!")
}
if len(defaultInformationManager.informationMapping) != 0 {
t.Fatalf("组件列表数量错误!")
}
}
func TestDefaultInformationManager_Item(t *testing.T) {
informationManager := NewDefaultInformationManager()
elementInformation := NewElementInformation(FactoryOfTestElement)
informationManager.informationMapping[testElementType] = elementInformation
if informationManager.Item(testElementType) == nil {
t.Fatalf("意外未找到了组件信息!")
}
if informationManager.Item(testElementType) != elementInformation {
t.Fatalf("获取组件信息错误!")
}
if informationManager.Item(testServiceType) != nil {
t.Fatalf("意外找到了组件信息!")
}
}
func TestDefaultInformationManager_Item_NullError(t *testing.T) {
informationManager := NewDefaultInformationManager()
information := informationManager.Item(nil)
if information != nil {
t.Fatal("意外的查到了数据!")
}
}
func TestDefaultInformationManager_Items(t *testing.T) {
informationManager := NewDefaultInformationManager()
elementInformation := NewElementInformation(FactoryOfTestElement)
informationManager.informationMapping[testElementType] = elementInformation
if len(informationManager.Items()) != 1 {
t.Fatalf("组件列表数量错误!")
}
if informationManager.Items()[0] != elementInformation {
t.Fatalf("获取组件信息列表错误!")
}
}
func TestDefaultInformationManager_RegisterElement(t *testing.T) {
informationManager := NewDefaultInformationManager()
informationManager.RegisterElement(FactoryOfTestElement, false)
information, ok := informationManager.informationMapping[testElementType]
if !ok {
t.Fatalf("未找到组件!")
}
if information == nil {
t.Fatalf("没找到信息")
}
elementInformation, ok := information.(*ElementInformation)
if !ok {
t.Fatalf("Information类型不正确!")
}
if testElementType != elementInformation.Interface() {
t.Fatalf("接口类型不正确!")
}
}
func TestDefaultInformationManager_RegisterGlobalElement(t *testing.T) {
defer func() {
if err := recover(); err != "目前不支持全局组件!" {
t.Fatalf("意外错误:%s", err)
}
}()
informationManager := NewDefaultInformationManager()
informationManager.RegisterElement(FactoryOfTestElement, true)
t.Fatalf("意外的没有错误!")
}
func TestDefaultInformationManager_RegisterElement_NullError(t *testing.T) {
defer func() {
if err := recover(); err != "工厂不能为空!" {
t.Fatalf("意外错误:%s", err)
}
}()
informationManager := NewDefaultInformationManager()
informationManager.RegisterElement(nil, false)
t.Fatalf("意外的没有错误!")
}
func TestDefaultInformationManager_RegisterElement_FactoryTypeError(t *testing.T) {
defer func() {
if err := recover(); err != "工厂必须是func!" {
t.Fatalf("意外错误:%s", err)
}
}()
informationManager := NewDefaultInformationManager()
informationManager.RegisterElement(reflect.TypeOf(FactoryOfTestElement()), false)
t.Fatalf("意外的没有错误!")
}
func TestDefaultInformationManager_RegisterElement_ParameterCountError(t *testing.T) {
defer func() {
if err := recover(); err != "工厂不能有参数!" {
t.Fatalf("意外错误:%s", err)
}
}()
informationManager := NewDefaultInformationManager()
informationManager.RegisterElement(FactoryOfElementTestInterfaceWithContent, false)
t.Fatalf("意外的没有错误!")
}
func TestDefaultInformationManager_RegisterElement_NoReturnValueError(t *testing.T) {
defer func() {
if err := recover(); err != "工厂必值需有返回值!" {
t.Fatalf("意外错误:%s", err)
}
}()
informationManager := NewDefaultInformationManager()
informationManager.RegisterElement(FactoryWithoutResult, false)
t.Fatalf("意外的没有错误!")
}
func TestDefaultInformationManager_RegisterElement_TooManyResultsError(t *testing.T) {
defer func() {
if err := recover(); err != "工厂只能有一个返回值!" {
t.Fatalf("意外错误:%s", err)
}
}()
informationManager := NewDefaultInformationManager()
informationManager.RegisterElement(FactoryWithTooManyResults, false)
t.Fatalf("意外的没有错误!")
}
func TestDefaultInformationManager_RegisterElement_ReturnValueTypeError(t *testing.T) {
defer func() {
if err := recover(); err != "工厂的返回值必需是interface!" {
t.Fatalf("意外错误:%s", err)
}
}()
informationManager := NewDefaultInformationManager()
informationManager.RegisterElement(FactoryOfTestElementImplement, false)
t.Fatalf("意外的没有错误!")
}
func TestDefaultInformationManager_RegisterElement_Repeat(t *testing.T) {
defer func() {
if err := recover(); err != fmt.Sprintf("组件%s接口已经注册!", testElementType.Name()) {
t.Fatalf("意外错误:%s", err)
}
}()
informationManager := NewDefaultInformationManager()
informationManager.RegisterElement(FactoryOfTestElement, false)
informationManager.RegisterElement(FactoryOfTestElement, false)
t.Fatalf("意外的没有错误!")
}
func TestDefaultInformationManager_RegisterService(t *testing.T) {
informationManager := NewDefaultInformationManager()
serviceInformation := informationManager.RegisterService(FactoryOfTestService, false)
if serviceInformation == nil {
t.Fatalf("注册失败!")
}
information, ok := informationManager.informationMapping[testServiceType]
if !ok {
t.Fatalf("未找到组件!")
}
if information == nil {
t.Fatalf("没找到信息")
}
serviceInformation, ok = information.(*ServiceInformation)
if !ok {
t.Fatalf("Information类型不正确!")
}
if testServiceType != serviceInformation.Interface() {
t.Fatalf("接口类型不正确!")
}
}
func TestDefaultInformationManager_RegisterGlobalService(t *testing.T) {
defer func() {
if err := recover(); err != "目前不支持全局组件!" {
t.Fatalf("意外错误:%s", err)
}
}()
informationManager := NewDefaultInformationManager()
_ = informationManager.RegisterService(FactoryOfTestService, true)
t.Fatalf("意外的没有错误!")
}
func TestDefaultInformationManager_RegisterService_NullError(t *testing.T) {
defer func() {
if err := recover(); err != "工厂不能为空!" {
t.Fatalf("意外错误:%s", err)
}
}()
informationManager := NewDefaultInformationManager()
_ = informationManager.RegisterService(nil, false)
t.Fatalf("意外的没有错误!")
}
func TestDefaultInformationManager_RegisterService_FactoryTypeError(t *testing.T) {
defer func() {
if err := recover(); err != "工厂必须是func!" {
t.Fatalf("意外错误:%s", err)
}
}()
informationManager := NewDefaultInformationManager()
_ = informationManager.RegisterService(reflect.TypeOf(FactoryOfTestElement()), false)
t.Fatalf("意外的没有错误!")
}
func TestDefaultInformationManager_RegisterService_ParameterCountError(t *testing.T) {
defer func() {
if err := recover(); err != "工厂不能有参数!" {
t.Fatalf("意外错误:%s", err)
}
}()
informationManager := NewDefaultInformationManager()
_ = informationManager.RegisterService(FactoryOfServiceTestInterfaceWithContent, false)
t.Fatalf("意外的没有错误!")
}
func TestDefaultInformationManager_RegisterService_NoReturnValueError(t *testing.T) {
defer func() {
if err := recover(); err != "工厂必值需有返回值!" {
t.Fatalf("意外错误:%s", err)
}
}()
informationManager := NewDefaultInformationManager()
_ = informationManager.RegisterService(FactoryWithoutResult, false)
t.Fatalf("意外的没有错误!")
}
func TestDefaultInformationManager_RegisterService_TooManyResultsError(t *testing.T) {
defer func() {
if err := recover(); err != "工厂只能有一个返回值!" {
t.Fatalf("意外错误:%s", err)
}
}()
informationManager := NewDefaultInformationManager()
_ = informationManager.RegisterService(FactoryWithTooManyResults, false)
t.Fatalf("意外的没有错误!")
}
func TestDefaultInformationManager_RegisterService_ReturnValueTypeError(t *testing.T) {
defer func() {
if err := recover(); err != "工厂的返回值必需是interface!" {
t.Fatalf("意外错误:%s", err)
}
}()
informationManager := NewDefaultInformationManager()
_ = informationManager.RegisterService(FactoryOfTestElementImplement, false)
t.Fatalf("意外的没有错误!")
}
func TestDefaultInformationManager_RegisterService_Repeat(t *testing.T) {
defer func() {
if err := recover(); err != fmt.Sprintf("组件%s接口已经注册!", testServiceType.Name()) {
t.Fatalf("意外错误:%s", err)
}
}()
informationManager := NewDefaultInformationManager()
_ = informationManager.RegisterService(FactoryOfTestService, false)
_ = informationManager.RegisterService(FactoryOfTestService, false)
t.Fatalf("意外的没有错误!")
}