mirror of
https://github.com/httprunner/httprunner.git
synced 2026-05-17 13:17:36 +08:00
154 lines
4.3 KiB
Go
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()
|
|
}
|