package ui import ( "errors" "fmt" "go_dreamfactory/cmd/v2/model" "go_dreamfactory/cmd/v2/service/observer" formview "go_dreamfactory/cmd/v2/ui/views" "go_dreamfactory/comm" "go_dreamfactory/lego/core" "go_dreamfactory/modules/friend" "go_dreamfactory/modules/hero" "go_dreamfactory/modules/linestory" "go_dreamfactory/modules/mainline" "go_dreamfactory/modules/rtask" "go_dreamfactory/modules/sys" "go_dreamfactory/modules/task" "go_dreamfactory/modules/user" "go_dreamfactory/pb" "strings" "fyne.io/fyne/v2" "github.com/sirupsen/logrus" "google.golang.org/protobuf/proto" ) type MyCaseView interface { Init(obs observer.Observer, w fyne.Window) CreateView(t *model.TestCase) fyne.CanvasObject Load() } // 1 注册接口测试的表单试图 var ( viewRegister = map[string]MyCaseView{ // gm ff(comm.ModuleGM, "cmd"): &formview.BingoView{}, //sys ff(comm.ModuleSys, "funclist"): &formview.SysFuncListView{}, //user ff(comm.ModuleUser, user.UserSubTypeModifyName): &formview.UserModifynameView{}, ff(comm.ModuleUser, user.UserSubTypeModifySign): &formview.UserSignView{}, // items ff(comm.ModuleItems, "getlist"): &formview.ItemListView{}, ff(comm.ModuleItems, "sellitem"): &formview.ItemsSellView{}, ff(comm.ModuleItems, "useitem"): &formview.ItemsUseView{}, //mail ff(comm.ModuleMail, "getlist"): &formview.MailListView{}, ff(comm.ModuleMail, "readmail"): &formview.MailReadMailView{}, ff(comm.ModuleMail, "delmail"): &formview.MailDelView{}, ff(comm.ModuleMail, "getusermailattachment"): &formview.MailAttachmentView{}, ff(comm.ModuleMail, "getallmailattachment"): &formview.MailAttachmentAllView{}, //task ff(comm.ModuleTask, task.TaskSubTypeList): &formview.TaskListView{}, ff(comm.ModuleTask, task.TaskSubTypeActiveList): &formview.TaskActiveListView{}, ff(comm.ModuleTask, task.TaskSubTypeActiveReceive): &formview.TaskActiveReceiveView{}, // hero ff(comm.ModuleHero, hero.HeroSubTypeList): &formview.HeroListView{}, ff(comm.ModuleHero, hero.StrengthenUplv): &formview.HeroStrengthenUplvView{}, ff(comm.ModuleHero, hero.StrengthenUpStar): &formview.HeroStrengthenUpStarView{}, //equip ff(comm.ModuleEquipment, "getlist"): &formview.EquipListView{}, ff(comm.ModuleEquipment, "equip"): &formview.EquipUpDownView{}, ff(comm.ModuleEquipment, "upgrade"): &formview.EquipUpgradeView{}, //friend ff(comm.ModuleFriend, friend.FriendSubTypeList): &formview.FriendListView{}, ff(comm.ModuleFriend, friend.FriendSubTypeApply): &formview.FriendApplyView{}, ff(comm.ModuleFriend, friend.FriendSubTypeAgree): &formview.FriendAgreeView{}, ff(comm.ModuleFriend, friend.FriendSubTypeBlacklist): &formview.FriendBlacklistView{}, ff(comm.ModuleFriend, friend.FriendSubTypeAddBlack): &formview.FriendAddBlackView{}, ff(comm.ModuleFriend, friend.FriendSubTypeDelBlack): &formview.FriendDelblackView{}, ff(comm.ModuleFriend, friend.FriendSubTypeSearch): &formview.FriendSearchView{}, ff(comm.ModuleFriend, friend.FriendSubTypeZanList): &formview.FriendZanView{}, ff(comm.ModuleFriend, friend.FriendSubTypeRandList): &formview.FriendRandListView{}, // shop ff(comm.ModuleShop, "getlist"): &formview.ShopListView{}, ff(comm.ModuleShop, "buy"): &formview.ShopBuyView{}, // mailine ff(comm.ModuleMainline, mainline.MainlineGetListResp): &formview.MainlineListView{}, ff(comm.ModuleMainline, mainline.MainlineChallengeResp): &formview.MainlineChallengeView{}, ff(comm.ModuleMainline, mainline.MainlineGetRewardResp): &formview.MainlineRewardView{}, // pagoda ff(comm.ModulePagoda, "getlist"): &formview.PagodaListView{}, // rtask ff(comm.ModuleRtask, rtask.RtaskSubTypeList): &formview.RtaskListView{}, ff(comm.ModuleRtask, rtask.RtaskSubTypeApply): &formview.RtaskDoitView{}, ff(comm.ModuleRtask, rtask.RtaskSubTypeChoose): &formview.RtaskChooseView{}, ff(comm.ModuleRtask, rtask.RtaskSubTypeReward): &formview.RtaskRewardView{}, ff(comm.ModuleRtask, "rtest"): &formview.RtaskTestView{}, // linestory ff(comm.ModuleLinestory, linestory.LinestorySubTypeDostart): &formview.LinestoryStartView{}, ff(comm.ModuleLinestory, linestory.LinestorySubTypeDotask): &formview.LinestoryTaskView{}, } ) // 2 添加导航菜单 var ( CaseIndex = map[string][]string{ "": { string(comm.ModuleGM), string(comm.ModuleSys), string(comm.ModuleUser), string(comm.ModuleHero), string(comm.ModuleTask), string(comm.ModuleFriend), string(comm.ModuleMail), string(comm.ModuleItems), string(comm.ModuleEquipment), string(comm.ModuleShop), string(comm.ModuleMainline), string(comm.ModulePagoda), string(comm.ModuleRtask), string(comm.ModuleLinestory), }, "gm": {ff(comm.ModuleGM, "cmd")}, "sys": { ff(comm.ModuleSys, "funclist"), }, "user": { ff(comm.ModuleUser, user.UserSubTypeModifyName), ff(comm.ModuleUser, user.UserSubTypeModifySign), }, "items": { ff(comm.ModuleItems, "getlist"), ff(comm.ModuleItems, "sellitem"), ff(comm.ModuleItems, "useitem"), }, "mail": { ff(comm.ModuleMail, "getlist"), ff(comm.ModuleMail, "readmail"), ff(comm.ModuleMail, "delmail"), ff(comm.ModuleMail, "getusermailattachment"), ff(comm.ModuleMail, "getallmailattachment"), }, "hero": { ff(comm.ModuleHero, hero.HeroSubTypeList), ff(comm.ModuleHero, hero.StrengthenUplv), ff(comm.ModuleHero, hero.StrengthenUpStar), }, "equipment": { ff(comm.ModuleEquipment, "getlist"), ff(comm.ModuleEquipment, "equip"), ff(comm.ModuleEquipment, "upgrade"), }, "task": { ff(comm.ModuleTask, task.TaskSubTypeList), ff(comm.ModuleTask, task.TaskSubTypeActiveList), ff(comm.ModuleTask, task.TaskSubTypeActiveReceive), }, "friend": { ff(comm.ModuleFriend, friend.FriendSubTypeList), ff(comm.ModuleFriend, friend.FriendSubTypeApply), ff(comm.ModuleFriend, friend.FriendSubTypeAgree), ff(comm.ModuleFriend, friend.FriendSubTypeBlacklist), ff(comm.ModuleFriend, friend.FriendSubTypeAddBlack), ff(comm.ModuleFriend, friend.FriendSubTypeDelBlack), ff(comm.ModuleFriend, friend.FriendSubTypeSearch), ff(comm.ModuleFriend, friend.FriendSubTypeZanList), ff(comm.ModuleFriend, friend.FriendSubTypeRandList), }, "shop": { ff(comm.ModuleShop, "getlist"), ff(comm.ModuleShop, "buy"), }, "mainline": { ff(comm.ModuleMainline, mainline.MainlineGetListResp), ff(comm.ModuleMainline, mainline.MainlineChallengeResp), ff(comm.ModuleMainline, mainline.MainlineGetRewardResp), }, "pagoda": { ff(comm.ModulePagoda, "getlist"), }, "rtask": { ff(comm.ModuleRtask, rtask.RtaskSubTypeList), ff(comm.ModuleRtask, rtask.RtaskSubTypeApply), ff(comm.ModuleRtask, rtask.RtaskSubTypeChoose), ff(comm.ModuleRtask, rtask.RtaskSubTypeReward), ff(comm.ModuleRtask, "rtest"), }, "linestory": { ff(comm.ModuleLinestory, linestory.LinestorySubTypeDostart), ff(comm.ModuleLinestory, linestory.LinestorySubTypeDotask), }, } ) // 3 注册测试用例 var ( CaseNav = map[string]*model.TestCase{ // gm "gm": { NavLabel: "GM", MainType: string(comm.ModuleGM), Enabled: true, }, ff(comm.ModuleGM, "cmd"): { Desc: "eg. bingo:item,10001,1 bingo:attr,gold,1000000", MainType: string(comm.ModuleGM), SubType: "cmd", Req: &pb.GMCmdReq{}, Rsp: &pb.GMCmdResp{}, Enabled: true, }, "sys": { NavLabel: "系统", MainType: string(comm.ModuleSys), Enabled: true, }, ff(comm.ModuleSys, "funclist"): { NavLabel: "功能列表", Desc: "返回未开启的功能列表", MainType: string(comm.ModuleSys), SubType: sys.SysSubTypeFunc, Enabled: true, }, // user "user": { NavLabel: "用户", MainType: "user", Enabled: true, }, "user.modifyname": { Desc: "用户昵称修改", NavLabel: "修改昵称", MainType: "user", SubType: "modifyname", Req: &pb.UserModifynameReq{}, Rsp: &pb.UserModifynameResp{}, Print: func(rsp proto.Message) string { logrus.WithFields(logrus.Fields{"main": "user", "stype": "modifyname"}).Debug("print") var formatStr strings.Builder if in, ok := rsp.(*pb.UserMessage); ok { out := &pb.UserModifynameResp{} if !comm.ProtoUnmarshal(in, out) { return errors.New("unmarshal err").Error() } formatStr.WriteString(fmt.Sprintf("Uid:%s count:%d", out.Uid, out.Count)) } return formatStr.String() }, Enabled: true, }, ff(comm.ModuleUser, user.UserSubTypeModifySign): { NavLabel: "修改签名", Desc: "用户签名修改", MainType: string(comm.ModuleUser), SubType: user.UserSubTypeModifySign, Enabled: true, }, //items string(comm.ModuleItems): { NavLabel: "道具", MainType: string(comm.ModuleItems), Enabled: true, }, ff(comm.ModuleItems, "getlist"): { NavLabel: "道具列表", Desc: "道具列表", MainType: string(comm.ModuleItems), SubType: "getlist", Enabled: true, }, ff(comm.ModuleItems, "sellitem"): { NavLabel: "道具售卖", Desc: "道具售卖", MainType: string(comm.ModuleItems), SubType: "sellitem", Enabled: true, }, ff(comm.ModuleItems, "useitem"): { NavLabel: "道具使用", Desc: "道具使用", MainType: string(comm.ModuleItems), SubType: "useitem", Enabled: true, }, //mail string(comm.ModuleMail): { NavLabel: "邮箱", MainType: string(comm.ModuleMail), Enabled: true, }, ff(comm.ModuleMail, "getlist"): { NavLabel: "邮件列表", Desc: "邮件列表", MainType: string(comm.ModuleMail), SubType: "getlist", Enabled: true, }, ff(comm.ModuleMail, "readmail"): { NavLabel: "读邮件", Desc: "读取邮件", MainType: string(comm.ModuleMail), SubType: "readmail", Enabled: true, }, ff(comm.ModuleMail, "delmail"): { NavLabel: "删除邮件", Desc: "删除邮件", MainType: string(comm.ModuleMail), SubType: "delmail", Enabled: true, }, ff(comm.ModuleMail, "getusermailattachment"): { NavLabel: "领取附件", Desc: "领取附件", MainType: string(comm.ModuleMail), SubType: "getusermailattachment", Enabled: true, }, ff(comm.ModuleMail, "getallmailattachment"): { NavLabel: "一键领取", Desc: "领取所有附件", MainType: string(comm.ModuleMail), SubType: "getallmailattachment", Enabled: true, }, // task "task": { NavLabel: "任务", MainType: "task", Enabled: true, }, "task.list": { NavLabel: "任务列表", Desc: "用户任务列表", MainType: "task", SubType: "list", Req: &pb.TaskListReq{}, Rsp: &pb.TaskListResp{}, Enabled: true, Print: func(rsp proto.Message) string { logrus.WithFields(logrus.Fields{"main": "task", "stype": "list"}).Debug("print") var formatStr strings.Builder if in, ok := rsp.(*pb.UserMessage); ok { out := &pb.TaskListResp{} if !comm.ProtoUnmarshal(in, out) { return errors.New("unmarshal err").Error() } for i, v := range out.List { formatStr.WriteString(fmt.Sprintf("%d- %v\n", (i + 1), v)) } } return formatStr.String() }, }, ff(comm.ModuleTask, task.TaskSubTypeActiveList): { NavLabel: "活跃度列表", Desc: "用户活跃度列表", MainType: string(comm.ModuleTask), SubType: task.TaskSubTypeActiveList, Req: &pb.TaskActiveListReq{}, Rsp: &pb.TaskActiveListResp{}, Enabled: true, }, ff(comm.ModuleTask, task.TaskSubTypeActiveReceive): { NavLabel: "活跃度领取", Desc: "用户活跃度领取", MainType: string(comm.ModuleTask), SubType: task.TaskSubTypeActiveReceive, Req: &pb.TaskActiveReceiveReq{}, Rsp: &pb.TaskActiveReceiveResp{}, Enabled: true, }, // hero string(comm.ModuleHero): { NavLabel: "英雄", MainType: string(comm.ModuleHero), Enabled: true, }, ff(comm.ModuleHero, hero.HeroSubTypeList): { NavLabel: "英雄列表", Desc: "英雄列表", MainType: string(comm.ModuleHero), SubType: hero.HeroSubTypeList, Print: func(rsp proto.Message) string { logrus.WithFields(logrus.Fields{"main": comm.ModuleHero, "stype": hero.HeroSubTypeList}).Debug("print") var formatStr strings.Builder if in, ok := rsp.(*pb.UserMessage); ok { out := &pb.HeroListResp{} if !comm.ProtoUnmarshal(in, out) { return errors.New("unmarshal err").Error() } for i, v := range out.List { formatStr.WriteString(fmt.Sprintf("%d- %v\n", (i + 1), v)) } } return formatStr.String() }, Enabled: true, }, ff(comm.ModuleHero, hero.StrengthenUplv): { NavLabel: "英雄升级", Desc: "英雄等级升级", MainType: string(comm.ModuleHero), SubType: hero.StrengthenUplv, Req: &pb.HeroStrengthenUplvReq{}, Rsp: &pb.HeroStrengthenUplvResp{}, Enabled: true, }, ff(comm.ModuleHero, hero.StrengthenUpStar): { NavLabel: "英雄升星", Desc: "英雄星级升级", MainType: string(comm.ModuleHero), SubType: hero.StrengthenUpStar, Req: &pb.HeroStrengthenUpStarReq{}, Rsp: &pb.HeroStrengthenUpStarResp{}, Enabled: true, }, //equipment string(comm.ModuleEquipment): { NavLabel: "装备", MainType: string(comm.ModuleEquipment), Enabled: true, }, ff(comm.ModuleEquipment, "getlist"): { NavLabel: "装备列表", Desc: "装备列表", MainType: string(comm.ModuleEquipment), SubType: "getlist", Enabled: true, }, ff(comm.ModuleEquipment, "equip"): { NavLabel: "穿卸装备", Desc: "穿/卸装备", MainType: string(comm.ModuleEquipment), SubType: "equip", Enabled: true, }, ff(comm.ModuleEquipment, "upgrade"): { NavLabel: "升级装备", Desc: "升级装备", MainType: string(comm.ModuleEquipment), SubType: "upgrade", Enabled: true, }, //friend string(comm.ModuleFriend): { NavLabel: "好友", MainType: string(comm.ModuleFriend), Enabled: true, }, ff(comm.ModuleFriend, friend.FriendSubTypeRandList): { NavLabel: "在线玩家", Desc: "在线玩家列表", MainType: string(comm.ModuleFriend), SubType: friend.FriendSubTypeRandList, Enabled: true, }, ff(comm.ModuleFriend, friend.FriendSubTypeList): { NavLabel: "好友列表", Desc: "好友列表", MainType: string(comm.ModuleFriend), SubType: friend.FriendSubTypeList, Req: &pb.FriendListReq{}, Rsp: &pb.FriendListResp{}, Enabled: true, }, ff(comm.ModuleFriend, friend.FriendSubTypeApply): { NavLabel: "好友申请", Desc: "好友申请", MainType: string(comm.ModuleFriend), SubType: friend.FriendSubTypeApply, Req: &pb.FriendApplyReq{}, Rsp: &pb.FriendApplyResp{}, Enabled: true, }, ff(comm.ModuleFriend, friend.FriendSubTypeBlacklist): { NavLabel: "黑名单", Desc: "黑名单列表", MainType: string(comm.ModuleFriend), SubType: friend.FriendSubTypeBlacklist, Req: &pb.FriendBlackListReq{}, Rsp: &pb.FriendBlackListResp{}, Enabled: true, }, ff(comm.ModuleFriend, friend.FriendSubTypeAddBlack): { NavLabel: "加黑名单", Desc: "添加黑名单", MainType: string(comm.ModuleFriend), SubType: friend.FriendSubTypeAddBlack, Req: &pb.FriendAddBlackReq{}, Rsp: &pb.FriendAddBlackResp{}, Enabled: true, }, ff(comm.ModuleFriend, friend.FriendSubTypeDelBlack): { NavLabel: "删黑名单", Desc: "删除黑名单", MainType: string(comm.ModuleFriend), SubType: friend.FriendSubTypeDelBlack, Req: &pb.FriendDelBlackReq{}, Rsp: &pb.FriendDelBlackResp{}, Enabled: true, }, ff(comm.ModuleFriend, friend.FriendSubTypeAgree): { NavLabel: "好友审批", Desc: "好友申请审批", MainType: string(comm.ModuleFriend), SubType: friend.FriendSubTypeAgree, Req: &pb.FriendAgreeReq{}, Rsp: &pb.FriendAgreeResp{}, Enabled: true, }, ff(comm.ModuleFriend, friend.FriendSubTypeSearch): { NavLabel: "好友搜索", Desc: "搜索好友", MainType: string(comm.ModuleFriend), SubType: friend.FriendSubTypeSearch, Req: &pb.FriendSearchReq{}, Rsp: &pb.FriendSearchResp{}, Enabled: true, }, ff(comm.ModuleFriend, friend.FriendSubTypeZanList): { NavLabel: "好友点赞", Desc: "点赞好友", MainType: string(comm.ModuleFriend), SubType: friend.FriendSubTypeZanList, Enabled: true, }, //shop string(comm.ModuleShop): { NavLabel: "商店", MainType: string(comm.ModuleShop), Enabled: true, }, ff(comm.ModuleShop, "getlist"): { NavLabel: "商店列表", Desc: "商店列表", MainType: string(comm.ModuleShop), SubType: "getlist", Enabled: true, }, ff(comm.ModuleShop, "buy"): { NavLabel: "购买商品", Desc: "购买商品", MainType: string(comm.ModuleShop), SubType: "buy", Enabled: true, }, // mainline string(comm.ModuleMainline): { NavLabel: "主线关卡", MainType: string(comm.ModuleShop), Enabled: true, }, ff(comm.ModuleMainline, mainline.MainlineGetListResp): { NavLabel: "主线关卡", Desc: "主线关卡", MainType: string(comm.ModuleMainline), SubType: mainline.MainlineGetListResp, Enabled: true, }, ff(comm.ModuleMainline, mainline.MainlineChallengeResp): { NavLabel: "关卡挑战", Desc: "关卡挑战", MainType: string(comm.ModuleMainline), SubType: mainline.MainlineChallengeResp, Enabled: true, }, ff(comm.ModuleMainline, mainline.MainlineGetRewardResp): { NavLabel: "关卡奖励", Desc: "获取关卡奖励", MainType: string(comm.ModuleMainline), SubType: mainline.MainlineGetRewardResp, Enabled: true, }, //pagoda string(comm.ModulePagoda): { NavLabel: "魔塔", MainType: string(comm.ModulePagoda), Enabled: true, }, ff(comm.ModulePagoda, "getlist"): { NavLabel: "魔塔列表", Desc: "魔塔列表", MainType: string(comm.ModulePagoda), SubType: "getlist", Enabled: true, }, // rtask string(comm.ModuleRtask): { NavLabel: "随机任务", MainType: string(comm.ModuleRtask), Enabled: true, }, ff(comm.ModuleRtask, rtask.RtaskSubTypeList): { NavLabel: "任务列表", MainType: string(comm.ModuleRtask), SubType: rtask.RtaskSubTypeList, Enabled: true, }, ff(comm.ModuleRtask, rtask.RtaskSubTypeApply): { NavLabel: "做任务", Desc: "执行随机任务", MainType: string(comm.ModuleRtask), SubType: rtask.RtaskSubTypeApply, Enabled: true, }, ff(comm.ModuleRtask, rtask.RtaskSubTypeChoose): { NavLabel: "情景对答", Desc: "情景对答", MainType: string(comm.ModuleRtask), SubType: rtask.RtaskSubTypeChoose, Enabled: true, }, ff(comm.ModuleRtask, rtask.RtaskSubTypeReward): { NavLabel: "领奖", Desc: "领奖", MainType: string(comm.ModuleRtask), SubType: rtask.RtaskSubTypeReward, Enabled: true, }, ff(comm.ModuleRtask, "rtest"): { NavLabel: "测试", Desc: "测试任务触发", MainType: string(comm.ModuleRtask), SubType: "rtest", Enabled: true, }, //linestory string(comm.ModuleLinestory): { NavLabel: "支线剧情任务", MainType: string(comm.ModuleLinestory), Enabled: true, }, ff(comm.ModuleLinestory, linestory.LinestorySubTypeDostart): { NavLabel: "启动", Desc: "启动剧情任务", MainType: string(comm.ModuleLinestory), SubType: linestory.LinestorySubTypeDostart, Enabled: true, }, ff(comm.ModuleLinestory, linestory.LinestorySubTypeDotask): { NavLabel: "做任务", Desc: "做任务", MainType: string(comm.ModuleLinestory), SubType: linestory.LinestorySubTypeDotask, Enabled: true, }, } ) func ff(s1 core.M_Modules, s2 string) string { return fmt.Sprintf("%s.%s", s1, s2) }