Files
httprunner/hrp/pkg/gidevice/xctestmanagerdaemon.go
2022-10-23 22:59:34 +08:00

154 lines
4.3 KiB
Go

package gidevice
import (
"fmt"
"github.com/httprunner/httprunner/v4/hrp/pkg/gidevice/pkg/libimobiledevice"
"github.com/httprunner/httprunner/v4/hrp/pkg/gidevice/pkg/nskeyedarchiver"
)
var _ XCTestManagerDaemon = (*xcTestManagerDaemon)(nil)
func newXcTestManagerDaemon(testmanagerd Testmanagerd, channelCode uint32) *xcTestManagerDaemon {
return &xcTestManagerDaemon{
testmanagerd: testmanagerd,
channelCode: channelCode,
}
}
type xcTestManagerDaemon struct {
testmanagerd Testmanagerd
channelCode uint32
}
func (d *xcTestManagerDaemon) initiateControlSession(XcodeVersion uint64) (err error) {
args := libimobiledevice.NewAuxBuffer()
if err = args.AppendObject(XcodeVersion); err != nil {
return err
}
selector := "_IDE_initiateControlSessionWithProtocolVersion:"
var ret *libimobiledevice.DTXMessageResult
if ret, err = d.testmanagerd.invoke(selector, args, d.channelCode, true); err != nil {
return err
}
if nsErr, ok := ret.Obj.(libimobiledevice.NSError); ok {
return fmt.Errorf("%s", nsErr.NSUserInfo.(map[string]interface{})["NSLocalizedDescription"])
}
return
}
func (d *xcTestManagerDaemon) startExecutingTestPlan(XcodeVersion uint64) (err error) {
args := libimobiledevice.NewAuxBuffer()
if err = args.AppendObject(XcodeVersion); err != nil {
return err
}
selector := "_IDE_startExecutingTestPlanWithProtocolVersion:"
if _, err = d.testmanagerd.invoke(selector, args, 0xFFFFFFFF, false); err != nil {
return err
}
return
}
func (d *xcTestManagerDaemon) initiateSession(XcodeVersion uint64, nsUUID *nskeyedarchiver.NSUUID) (err error) {
args := libimobiledevice.NewAuxBuffer()
if err = args.AppendObject(nsUUID); err != nil {
return err
}
if err = args.AppendObject(nsUUID.String() + "-Go-iDevice"); err != nil {
return err
}
if err = args.AppendObject("/Applications/Xcode.app/Contents/Developer/usr/bin/xcodebuild"); err != nil {
return err
}
if err = args.AppendObject(XcodeVersion); err != nil {
return err
}
selector := "_IDE_initiateSessionWithIdentifier:forClient:atPath:protocolVersion:"
var ret *libimobiledevice.DTXMessageResult
if ret, err = d.testmanagerd.invoke(selector, args, d.channelCode, true); err != nil {
return err
}
if nsErr, ok := ret.Obj.(libimobiledevice.NSError); ok {
return fmt.Errorf("%s", nsErr.NSUserInfo.(map[string]interface{})["NSLocalizedDescription"])
}
return
}
func (d *xcTestManagerDaemon) authorizeTestSession(pid int) (err error) {
args := libimobiledevice.NewAuxBuffer()
if err = args.AppendObject(pid); err != nil {
return err
}
selector := "_IDE_authorizeTestSessionWithProcessID:"
var ret *libimobiledevice.DTXMessageResult
if ret, err = d.testmanagerd.invoke(selector, args, d.channelCode, true); err != nil {
return err
}
if nsErr, ok := ret.Obj.(libimobiledevice.NSError); ok {
return fmt.Errorf("%s", nsErr.NSUserInfo.(map[string]interface{})["NSLocalizedDescription"])
}
return
}
func (d *xcTestManagerDaemon) initiateControlSessionForTestProcessID(pid int) (err error) {
args := libimobiledevice.NewAuxBuffer()
if err = args.AppendObject(pid); err != nil {
return err
}
selector := "_IDE_initiateControlSessionForTestProcessID:"
var ret *libimobiledevice.DTXMessageResult
if ret, err = d.testmanagerd.invoke(selector, args, d.channelCode, true); err != nil {
return err
}
if nsErr, ok := ret.Obj.(libimobiledevice.NSError); ok {
return fmt.Errorf("%s", nsErr.NSUserInfo.(map[string]interface{})["NSLocalizedDescription"])
}
return
}
func (d *xcTestManagerDaemon) initiateControlSessionForTestProcessIDProtocolVersion(pid int, XcodeVersion uint64) (err error) {
args := libimobiledevice.NewAuxBuffer()
if err = args.AppendObject(pid); err != nil {
return err
}
if err = args.AppendObject(XcodeVersion); err != nil {
return err
}
selector := "_IDE_initiateControlSessionForTestProcessID:protocolVersion:"
var ret *libimobiledevice.DTXMessageResult
if ret, err = d.testmanagerd.invoke(selector, args, d.channelCode, true); err != nil {
return err
}
if nsErr, ok := ret.Obj.(libimobiledevice.NSError); ok {
return fmt.Errorf("%s", nsErr.NSUserInfo.(map[string]interface{})["NSLocalizedDescription"])
}
return
}
func (d *xcTestManagerDaemon) registerCallback(obj string, cb func(m libimobiledevice.DTXMessageResult)) {
d.testmanagerd.registerCallback(obj, cb)
}
func (d *xcTestManagerDaemon) close() {
d.testmanagerd.close()
}