diff -Nru go-dlib-5.6.0.9+dfsg/appinfo/desktopappinfo/desktopappinfo.go go-dlib-5.7.12/appinfo/desktopappinfo/desktopappinfo.go --- go-dlib-5.6.0.9+dfsg/appinfo/desktopappinfo/desktopappinfo.go 2020-11-13 14:56:32.000000000 +0000 +++ go-dlib-5.7.12/appinfo/desktopappinfo/desktopappinfo.go 2021-09-18 16:47:56.000000000 +0000 @@ -25,7 +25,6 @@ "os" "os/exec" "path/filepath" - "regexp" "strings" "sync" "time" @@ -99,11 +98,11 @@ type DesktopAppInfo struct { *keyfile.KeyFile - filename string - id string - - name string - icon string + filename string + id string + name string + icon string + overrideExec string } func NewDesktopAppInfo(id string) *DesktopAppInfo { @@ -131,12 +130,8 @@ var ErrInvalidFirstSection = errors.New("first section is not " + MainSection) var ErrInvalidType = errors.New("type is not " + TypeApplication) -// Only the characters A-Za-z0-9- may be used in key names. -var keyReg = regexp.MustCompile(`^[A-Za-z0-9\-]+(\[[A-Za-z0-9@_\-.]+])?$`) - func newDesktopAppInfoFromFile(filename string) (*DesktopAppInfo, error) { kfile := keyfile.NewKeyFile() - kfile.SetKeyRegexp(keyReg) err := kfile.LoadFromFile(filename) if err != nil { return nil, err @@ -419,6 +414,18 @@ return err == nil } +func (ai *DesktopAppInfo) IsDesktopOverrideExecSet() bool { + return ai.overrideExec != "" +} + +func (ai *DesktopAppInfo) GetDesktopOverrideExec() string { + return ai.overrideExec +} + +func (ai *DesktopAppInfo) SetDesktopOverrideExec(exec string) { + ai.overrideExec = exec +} + var _startddeGs *gio.Settings var _startddeGsMu sync.Mutex @@ -506,12 +513,8 @@ if bytes.Contains(data, []byte(turboInvokerFailedMsg)) || bytes.Contains(data, []byte(turboInvokerErrMsg)) { w.done = true w.buf = bytes.Buffer{} - select { - case w.ch <- struct{}{}: // 告知 turbo invoker 启动失败 - default: - // 表示 ch 已经没有接收者了 - } + w.ch <- struct{}{} } else { // 把最后一个 \n 前面的数据清除 idx := bytes.LastIndexByte(data, '\n') @@ -536,11 +539,16 @@ if shouldUseTurboInvoker(ai, isAction, turboInvokerPath, launchContext) { args := []string{"--desktop-file"} args = append(args, ai.GetFileName()) + + if ai.IsDesktopOverrideExecSet() { + args = append(args, "--desktop-override-exec="+ai.GetDesktopOverrideExec()) + } + for _, file := range files { args = append(args, file) } cmd := exec.Command(turboInvokerPath, args...) - failCh := make(chan struct{}) + failCh := make(chan struct{}, 2) fdOut := newFailDetector(failCh) fdErr := newFailDetector(failCh) cmd.Stdout = fdOut diff -Nru go-dlib-5.6.0.9+dfsg/appinfo/desktopappinfo/desktopappinfo_test.go go-dlib-5.7.12/appinfo/desktopappinfo/desktopappinfo_test.go --- go-dlib-5.6.0.9+dfsg/appinfo/desktopappinfo/desktopappinfo_test.go 2020-11-13 14:56:32.000000000 +0000 +++ go-dlib-5.7.12/appinfo/desktopappinfo/desktopappinfo_test.go 2021-09-18 16:47:56.000000000 +0000 @@ -381,18 +381,24 @@ c.So(err, ShouldBeNil) c.So(parts, ShouldResemble, []string{"abc"}) + parts, err = splitExec(`"$abcdef"`) + c.So(err, ShouldBeNil) + c.So(parts, ShouldResemble, []string{"$abcdef"}) + + parts, err = splitExec("\"`abcdef\" def") + c.So(err, ShouldBeNil) + c.So(parts, ShouldResemble, []string{"`abcdef", "def"}) + + parts, err = splitExec(`sh -c 'if ! [ -e "/usr/bin/ibus-daemon" ] && [ "x$XDG_SESSION_TYPE" = "xwayland" ] ; then exec env IM_CONFIG_CHECK_ENV=1 deepin-terminal true; fi'`) + c.So(err, ShouldBeNil) + c.So(parts, ShouldResemble, []string{"sh", "-c", `if ! [ -e "/usr/bin/ibus-daemon" ] && [ "x$XDG_SESSION_TYPE" = "xwayland" ] ; then exec env IM_CONFIG_CHECK_ENV=1 deepin-terminal true; fi`}) + _, err = splitExec(`"abcdef`) c.So(err, ShouldEqual, ErrQuotingNotClosed) _, err = splitExec(`"abcdef\"`) c.So(err, ShouldEqual, ErrQuotingNotClosed) - _, err = splitExec(`"$abcdef"`) - c.So(err, ShouldResemble, ErrCharNotEscaped{'$'}) - - _, err = splitExec("\"`abcdef\" def") - c.So(err, ShouldResemble, ErrCharNotEscaped{'`'}) - _, err = splitExec(`"abc\def"`) c.So(err, ShouldResemble, ErrInvalidEscapeSequence{'d'}) @@ -452,12 +458,12 @@ cmdline = []string{"start", "%u", "end"} parts, err = expandFieldCode(cmdline, files, translatedName, icon, desktopFile) c.So(err, ShouldBeNil) - c.So(parts, ShouldResemble, []string{"start", "file:///dir1/dir2/a", "end"}) + c.So(parts, ShouldResemble, []string{"start", "/dir1/dir2/a", "end"}) cmdline = []string{"start", "%U", "end"} parts, err = expandFieldCode(cmdline, files, translatedName, icon, desktopFile) c.So(err, ShouldBeNil) - c.So(parts, ShouldResemble, []string{"start", "file:///dir1/dir2/a", "file:///dir1/dir2/b", "end"}) + c.So(parts, ShouldResemble, []string{"start", "/dir1/dir2/a", "/dir1/dir2/b", "end"}) cmdline = []string{"start", "%%", "%abc", "end"} _, err = expandFieldCode(cmdline, files, translatedName, icon, desktopFile) @@ -478,12 +484,12 @@ cmdline = []string{"start", "file=%u", "end"} parts, err = expandFieldCode(cmdline, files, translatedName, icon, desktopFile) c.So(err, ShouldBeNil) - c.So(parts, ShouldResemble, []string{"start", "file=file:///a/b/log", "end"}) + c.So(parts, ShouldResemble, []string{"start", "file=/a/b/log", "end"}) cmdline = []string{"start", "file=%u+++", "end"} parts, err = expandFieldCode(cmdline, files, translatedName, icon, desktopFile) c.So(err, ShouldBeNil) - c.So(parts, ShouldResemble, []string{"start", "file=file:///a/b/log+++", "end"}) + c.So(parts, ShouldResemble, []string{"start", "file=/a/b/log+++", "end"}) cmdline = []string{"start", "icon:%i", "end"} parts, err = expandFieldCode(cmdline, files, translatedName, icon, desktopFile) diff -Nru go-dlib-5.6.0.9+dfsg/appinfo/desktopappinfo/exec.go go-dlib-5.7.12/appinfo/desktopappinfo/exec.go --- go-dlib-5.6.0.9+dfsg/appinfo/desktopappinfo/exec.go 2020-11-13 14:56:32.000000000 +0000 +++ go-dlib-5.7.12/appinfo/desktopappinfo/exec.go 2021-09-18 16:47:56.000000000 +0000 @@ -111,12 +111,12 @@ var buf bytes.Buffer var outlist []string reader := strings.NewReader(exec) - var in bool + var quoteChar byte for { ch, err := reader.ReadByte() if err != nil { // err is EOF - if in { + if quoteChar != 0 { return nil, ErrQuotingNotClosed } outlist = append(outlist, buf.String()) @@ -125,16 +125,18 @@ switch ch { case ' ': - if in { + if quoteChar != 0 { buf.WriteByte(ch) } else { eatAllSpace(reader) outlist = append(outlist, buf.String()) buf.Reset() } - case '"': - in = !in - if !in { + case '"', '\'': + if quoteChar == 0 { + quoteChar = ch + } else if quoteChar == ch { + quoteChar = 0 ch0, err0 := reader.ReadByte() if err0 != nil { continue @@ -143,16 +145,23 @@ return nil, ErrNoSpaceAfterQuoting } _ = reader.UnreadByte() + } else { + buf.WriteByte(ch) } case '\\': - if in { + if quoteChar != 0 { ch1, err1 := reader.ReadByte() if err1 != nil { // err1 is EOF return nil, ErrEscapeCharAtEnd } + if quoteChar == ch1 { + buf.WriteByte(ch1) + continue + } + if shouldEscapeChar(ch1) { // \# buf.WriteByte(ch1) @@ -183,10 +192,7 @@ default: if isReservedChar(ch) { - if in { - if shouldEscapeChar(ch) { - return nil, ErrCharNotEscaped{ch} - } + if quoteChar != 0 { buf.WriteByte(ch) } else { return nil, ErrReservedCharNotQuoted{ch} @@ -257,25 +263,27 @@ } switch fieldCode { case 'f': - // a single file name + // a single filepath if len(files) > 0 { buf.WriteString(toLocalPath(files[0])) } case 'F': - // a list of files + // a list of filepaths for _, file := range files { buf.WriteString(toLocalPath(file)) submitBuf() } case 'u': - // a single URL + // a single filepath or URL + // file URI 转为 filepath 传入,避免应用不兼容 file URI 的情况 if len(files) > 0 { - buf.WriteString(toURL(files[0])) + buf.WriteString(toLocalPath(files[0])) } case 'U': - // a list of URLs + // a list of filepaths or URLs + // file URI 转为 filepath 传入,避免应用不兼容 file URI 的情况 for _, file := range files { - buf.WriteString(toURL(file)) + buf.WriteString(toLocalPath(file)) submitBuf() } case 'i': diff -Nru go-dlib-5.6.0.9+dfsg/appinfo/desktopappinfo/fail_detector_test.go go-dlib-5.7.12/appinfo/desktopappinfo/fail_detector_test.go --- go-dlib-5.6.0.9+dfsg/appinfo/desktopappinfo/fail_detector_test.go 2020-11-13 14:56:32.000000000 +0000 +++ go-dlib-5.7.12/appinfo/desktopappinfo/fail_detector_test.go 2021-09-18 16:47:56.000000000 +0000 @@ -8,7 +8,7 @@ // 测试简单的情况 func TestFailDetectorSimple(t *testing.T) { - ch := make(chan struct{}) + ch := make(chan struct{}, 2) fd := newFailDetector(ch) _, err := fd.Write([]byte("Failed to invoke: Booster: abcdef")) assert.Nil(t, err) @@ -22,7 +22,7 @@ // 测试多次写入,\n 后有其他字符的情况 func TestFailDetectorWrite(t *testing.T) { - ch := make(chan struct{}) + ch := make(chan struct{}, 2) fd := newFailDetector(ch) _, err := fd.Write([]byte("line1\n")) assert.Nil(t, err) diff -Nru go-dlib-5.6.0.9+dfsg/arch/arch.go go-dlib-5.7.12/arch/arch.go --- go-dlib-5.6.0.9+dfsg/arch/arch.go 2020-11-13 14:56:32.000000000 +0000 +++ go-dlib-5.7.12/arch/arch.go 2021-09-18 16:47:56.000000000 +0000 @@ -33,7 +33,7 @@ func Get() ArchFamilyType { switch runtime.GOARCH { - case "sw_64": + case "sw_64","sw64": return Sunway case "amd64": return AMD64 Binary files /tmp/tmp2a1cqeqq/KamUlgCg1j/go-dlib-5.6.0.9+dfsg/backlight/display/testdata/intel_backlight/device/edid and /tmp/tmp2a1cqeqq/PBJiRIeXdP/go-dlib-5.7.12/backlight/display/testdata/intel_backlight/device/edid differ diff -Nru go-dlib-5.6.0.9+dfsg/dbusutil/dbusutil.go go-dlib-5.7.12/dbusutil/dbusutil.go --- go-dlib-5.6.0.9+dfsg/dbusutil/dbusutil.go 2020-11-13 14:56:32.000000000 +0000 +++ go-dlib-5.7.12/dbusutil/dbusutil.go 2021-09-18 16:47:58.000000000 +0000 @@ -591,7 +591,7 @@ // Methods returns the description of the methods of v. This can be used to // create a Node which can be passed to NewIntrospectable. -func getMethods(v interface{}, methodDetailMap map[string]methodDetail) []introspect.Method { +func getMethodsOld(v interface{}, methodDetailMap map[string]methodDetail) []introspect.Method { t := reflect.TypeOf(v) ms := make([]introspect.Method, 0, t.NumMethod()) for i := 0; i < t.NumMethod(); i++ { @@ -638,6 +638,78 @@ return ms } +func (em *ExportedMethod) getInArgName(index int, type0 reflect.Type, methodName string) string { + if index >= len(em.InArgs) { + panic(fmt.Errorf("failed to get %s.%s in[%d] argument name", + type0, methodName, index)) + } + return em.InArgs[index] +} + +func (em *ExportedMethod) getOutArgName(index int, type0 reflect.Type, methodName string) string { + if index >= len(em.OutArgs) { + panic(fmt.Errorf("failed to get %s.%s out[%d] argument name", + type0, methodName, index)) + } + return em.OutArgs[index] +} + +var ( + typeOfDBusErrorPtr = reflect.TypeOf((*dbus.Error)(nil)) + typeOfDBusSender = reflect.TypeOf((*dbus.Sender)(nil)).Elem() + typeOfDBusMessage = reflect.TypeOf((*dbus.Message)(nil)).Elem() +) + +// Methods returns the description of the methods of v. This can be used to +// create a Node which can be passed to NewIntrospectable. +func getMethods(v interface{}, methods ExportedMethods) []introspect.Method { + t := reflect.TypeOf(v) + result := make([]introspect.Method, 0, len(methods)) + for _, method := range methods { + methodType := reflect.TypeOf(method.Fn) + + numIn := methodType.NumIn() + numOut := methodType.NumOut() + if numOut == 0 || + methodType.Out(numOut-1) != typeOfDBusErrorPtr { + + continue + } + var m introspect.Method + m.Name = method.Name + m.Args = make([]introspect.Arg, 0, numIn+numOut-1) + inArgIndex := 0 + for j := 0; j < numIn; j++ { + argType := methodType.In(j) + if argType == typeOfDBusSender || argType == typeOfDBusMessage { + // 忽略类型为 dbus.Sender 或 dbus.Message 的参数 + continue + } + + argName := method.getInArgName(inArgIndex, t, m.Name) + inArgIndex++ + arg := introspect.Arg{ + Name: argName, + Type: dbus.SignatureOfType(methodType.In(j)).String(), + Direction: "in", + } + m.Args = append(m.Args, arg) + } + for j := 0; j < numOut-1; j++ { + argName := method.getOutArgName(j, t, m.Name) + arg := introspect.Arg{ + Name: argName, + Type: dbus.SignatureOfType(methodType.Out(j)).String(), + Direction: "out", + } + m.Args = append(m.Args, arg) + } + m.Annotations = make([]introspect.Annotation, 0) + result = append(result, m) + } + return result +} + type PropertyReadCallback func(read *PropertyRead) *dbus.Error type PropertyWriteCallback func(write *PropertyWrite) *dbus.Error diff -Nru go-dlib-5.6.0.9+dfsg/dbusutil/err_test.go go-dlib-5.7.12/dbusutil/err_test.go --- go-dlib-5.6.0.9+dfsg/dbusutil/err_test.go 2020-11-13 14:56:32.000000000 +0000 +++ go-dlib-5.7.12/dbusutil/err_test.go 2021-09-18 16:47:58.000000000 +0000 @@ -10,6 +10,10 @@ type impl1 struct { } +func (*impl1) GetExportedMethods() ExportedMethods { + return nil +} + func (*impl1) GetInterfaceName() string { return "com.deepin.lib.Exportable1" } diff -Nru go-dlib-5.6.0.9+dfsg/dbusutil/gsprop/gsprop_test.go go-dlib-5.7.12/dbusutil/gsprop/gsprop_test.go --- go-dlib-5.6.0.9+dfsg/dbusutil/gsprop/gsprop_test.go 2020-11-13 14:56:32.000000000 +0000 +++ go-dlib-5.7.12/dbusutil/gsprop/gsprop_test.go 2021-09-18 16:47:58.000000000 +0000 @@ -7,9 +7,9 @@ "testing" "time" - "pkg.deepin.io/gir/gio-2.0" "github.com/godbus/dbus" "github.com/godbus/dbus/introspect" + "pkg.deepin.io/gir/gio-2.0" "pkg.deepin.io/lib/dbusutil" "pkg.deepin.io/lib/gsettings" ) @@ -32,6 +32,10 @@ return srvObj1Interface } +func (o *srvObject1) GetExportedMethods() dbusutil.ExportedMethods { + return nil +} + func TestAll(t *testing.T) { err := exec.Command("gsettings", "list-recursively", demoSchemaId).Run() if err != nil { @@ -302,6 +306,7 @@ t.Error("Unexpected error setting the Strv property:", err) } + pStrv = nil err = clientObj1.Call("org.freedesktop.DBus.Properties.Get", 0, srvObj1Interface, "Strv").Store(&pStrv) if err != nil { @@ -364,7 +369,7 @@ case <-ch: close(ch) case <-time.After(5 * time.Second): - t.Error("Failed to announce that the Bool PropertyChanged signal emitted") + t.Log("Failed to announce that the Bool PropertyChanged signal emitted") } err = rule.RemoveFrom(service.Conn()) diff -Nru go-dlib-5.6.0.9+dfsg/dbusutil/implementer_static.go go-dlib-5.7.12/dbusutil/implementer_static.go --- go-dlib-5.6.0.9+dfsg/dbusutil/implementer_static.go 2020-11-13 14:56:32.000000000 +0000 +++ go-dlib-5.7.12/dbusutil/implementer_static.go 2021-09-18 16:47:58.000000000 +0000 @@ -13,11 +13,19 @@ structType := structValue.Type() s.props = getFieldPropStaticMap(structType, structValue) + // 对旧代码实现兼容 + var methods []introspect.Method + if implExt, ok := impl.(ImplementerExt); ok { + methods = getMethods(implExt, implExt.GetExportedMethods()) + } else { + methods = getMethodsOld(impl, getMethodDetailMap(structType)) + } + s.introspectInterface = introspect.Interface{ Name: impl.GetInterfaceName(), Signals: getSignals(structType), Properties: getPropsIntrospection(s.props), - Methods: getMethods(impl, getMethodDetailMap(structType)), + Methods: methods, } return s } diff -Nru go-dlib-5.6.0.9+dfsg/dbusutil/implementor.go go-dlib-5.7.12/dbusutil/implementor.go --- go-dlib-5.6.0.9+dfsg/dbusutil/implementor.go 2020-11-13 14:56:32.000000000 +0000 +++ go-dlib-5.7.12/dbusutil/implementor.go 2021-09-18 16:47:58.000000000 +0000 @@ -13,6 +13,40 @@ GetInterfaceName() string } +type ImplementerExt interface { + Implementer + GetExportedMethods() ExportedMethods +} + +type ExportedMethods []ExportedMethod + +func (methods ExportedMethods) Len() int { + return len(methods) +} + +func (methods ExportedMethods) Less(i, j int) bool { + return methods[i].Name < methods[j].Name +} + +func (methods ExportedMethods) Swap(i, j int) { + methods[i], methods[j] = methods[j], methods[i] +} + +func (methods ExportedMethods) toMethodTable() map[string]interface{} { + result := make(map[string]interface{}, len(methods)) + for _, method := range methods { + result[method.Name] = method.Fn + } + return result +} + +type ExportedMethod struct { + Name string + Fn interface{} + InArgs []string + OutArgs []string +} + func getImplementerPointer(impl Implementer) unsafe.Pointer { return unsafe.Pointer(reflect.ValueOf(impl).Pointer()) } diff -Nru go-dlib-5.6.0.9+dfsg/dbusutil/object.go go-dlib-5.7.12/dbusutil/object.go --- go-dlib-5.6.0.9+dfsg/dbusutil/object.go 2020-11-13 14:56:32.000000000 +0000 +++ go-dlib-5.7.12/dbusutil/object.go 2021-09-18 16:47:58.000000000 +0000 @@ -37,9 +37,17 @@ return errors.New("implementer is exported") } - err := conn.Export(core, so.path, core.GetInterfaceName()) - if err != nil { - return err + // 对旧代码实现兼容 + if coreExt, ok := core.(ImplementerExt); ok { + err := conn.ExportMethodTable(coreExt.GetExportedMethods().toMethodTable(), so.path, core.GetInterfaceName()) + if err != nil { + return err + } + } else { + err := conn.Export(core, so.path, core.GetInterfaceName()) + if err != nil { + return err + } } s.implObjMap[corePtr] = so @@ -82,6 +90,8 @@ return errors.New("server object is not exported") } + // TODO: 等 github.com/godbus/dbus 升级之后,需要把所有 conn.Export 都换成 conn.ExportMethodTable。 + // 目前是由于 conn.ExportMethodTable 方法在 methods 参数为 nil 时有 bug,才用了 conn.Export 方法。 err := conn.Export(nil, path, orgFreedesktopDBus+".Properties") if err != nil { return err diff -Nru go-dlib-5.6.0.9+dfsg/dbusutil/properties.go go-dlib-5.7.12/dbusutil/properties.go --- go-dlib-5.6.0.9+dfsg/dbusutil/properties.go 2020-11-13 14:56:32.000000000 +0000 +++ go-dlib-5.7.12/dbusutil/properties.go 2021-09-18 16:47:58.000000000 +0000 @@ -105,7 +105,7 @@ return setErr } if changed { - impl.notifyChanged(so.service, so.path, p, propStatic, newVarValue) + impl.notifyChanged(so.service, so.path, p, propStatic, propWrite.Value) } return nil } diff -Nru go-dlib-5.6.0.9+dfsg/dbusutil/proxy/object.go go-dlib-5.7.12/dbusutil/proxy/object.go --- go-dlib-5.6.0.9+dfsg/dbusutil/proxy/object.go 2020-11-13 14:56:32.000000000 +0000 +++ go-dlib-5.7.12/dbusutil/proxy/object.go 2021-09-18 16:47:58.000000000 +0000 @@ -9,15 +9,26 @@ "pkg.deepin.io/lib/dbusutil" ) -type Object struct { - obj dbus.BusObject - conn *dbus.Conn - mu sync.Mutex +type Object interface { + Path_() dbus.ObjectPath + ServiceName_() string + InitSignalExt(sigLoop *dbusutil.SignalLoop, ruleAuto bool) + RemoveAllHandlers() + RemoveHandler(handlerId dbusutil.SignalHandlerId) + ConnectPropertiesChanged( + cb func(interfaceName string, changedProperties map[string]dbus.Variant, + invalidatedProperties []string)) (dbusutil.SignalHandlerId, error) +} + +type ImplObject struct { + obj dbus.BusObject + conn *dbus.Conn + mu sync.Mutex extraMap map[string]interface{} *objectSignalExt } -func (o *Object) SetExtra(key string, v interface{}) { +func (o *ImplObject) SetExtra(key string, v interface{}) { o.mu.Lock() if o.extraMap == nil { @@ -28,7 +39,7 @@ o.mu.Unlock() } -func (o *Object) GetExtra(key string) (interface{}, bool) { +func (o *ImplObject) GetExtra(key string) (interface{}, bool) { o.mu.Lock() v, ok := o.extraMap[key] o.mu.Unlock() @@ -46,7 +57,7 @@ // used when ruleAuto is false handleIds []dbusutil.SignalHandlerId //nolint: - propChangedHandlerId dbusutil.SignalHandlerId //nolint: + propChangedHandlerId dbusutil.SignalHandlerId //nolint: propChangedCallbacks map[propChangedKey][]PropChangedCallback //nolint: } @@ -56,26 +67,26 @@ type PropChangedCallback func(hasValue bool, value interface{}) -func (o *Object) Init_(conn *dbus.Conn, serviceName string, +func (o *ImplObject) Init_(conn *dbus.Conn, serviceName string, path dbus.ObjectPath) { o.conn = conn o.obj = conn.Object(serviceName, path) } -func (o *Object) Path_() dbus.ObjectPath { +func (o *ImplObject) Path_() dbus.ObjectPath { return o.obj.Path() } -func (o *Object) ServiceName_() string { +func (o *ImplObject) ServiceName_() string { return o.obj.Destination() } -func (o *Object) Go_(method string, flags dbus.Flags, +func (o *ImplObject) Go_(method string, flags dbus.Flags, ch chan *dbus.Call, args ...interface{}) *dbus.Call { return o.obj.Go(method, flags, ch, args...) } -func (o *Object) GetProperty_(flags dbus.Flags, interfaceName, propName string, +func (o *ImplObject) GetProperty_(flags dbus.Flags, interfaceName, propName string, value interface{}) error { call := o.obj.Call("org.freedesktop.DBus.Properties.Get", flags, interfaceName, propName) return storeGetProperty(call, value) @@ -90,25 +101,25 @@ return dbus.Store([]interface{}{variant.Value()}, value) } -func (o *Object) SetProperty_(flags dbus.Flags, interfaceName, propName string, +func (o *ImplObject) SetProperty_(flags dbus.Flags, interfaceName, propName string, value interface{}) error { return o.obj.Call("org.freedesktop.DBus.Properties.Set", flags, interfaceName, propName, dbus.MakeVariant(value)).Err } -func (o *Object) addRuleHandlerId(rule string, handlerId dbusutil.SignalHandlerId) { +func (o *ImplObject) addRuleHandlerId(rule string, handlerId dbusutil.SignalHandlerId) { if o.ruleHandlersMap == nil { o.ruleHandlersMap = make(map[string][]dbusutil.SignalHandlerId) } o.ruleHandlersMap[rule] = append(o.ruleHandlersMap[rule], handlerId) } -func (o *Object) getMatchRulePropertiesChanged() string { +func (o *ImplObject) getMatchRulePropertiesChanged() string { return fmt.Sprintf("type='signal',interface='org.freedesktop.DBus.Properties',"+ "member='PropertiesChanged',path='%s',sender='%s'", o.obj.Path(), o.obj.Destination()) } -func (o *Object) propChangedHandler(sig *dbus.Signal) { +func (o *ImplObject) propChangedHandler(sig *dbus.Signal) { var interfaceName string var changedProps map[string]dbus.Variant var invalidatedProps []string @@ -140,7 +151,7 @@ } } -func (o *Object) initPropertiesChangedHandler() error { +func (o *ImplObject) initPropertiesChangedHandler() error { o.checkSignalExt() if o.propChangedHandlerId != 0 { return nil @@ -165,7 +176,7 @@ return nil } -func (o *Object) ConnectPropertyChanged_(interfaceName, propName string, callback PropChangedCallback) error { +func (o *ImplObject) ConnectPropertyChanged_(interfaceName, propName string, callback PropChangedCallback) error { o.mu.Lock() defer o.mu.Unlock() @@ -183,13 +194,13 @@ return nil } -func (o *Object) checkSignalExt() { +func (o *ImplObject) checkSignalExt() { if o.objectSignalExt == nil { panic(fmt.Sprintf("you should call %T.InitSignalExt() first", o)) } } -func (o *Object) addMatch(rule string) error { +func (o *ImplObject) addMatch(rule string) error { handlerIds := o.ruleHandlersMap[rule] if len(handlerIds) == 0 { return globalRuleCounter.addMatch(o.conn, rule) @@ -211,7 +222,7 @@ return -1 } -func (o *Object) removeHandler(handlerId dbusutil.SignalHandlerId) { +func (o *ImplObject) removeHandler(handlerId dbusutil.SignalHandlerId) { o.sigLoop.RemoveHandler(handlerId) if o.ruleAuto { for rule, handlerIds := range o.ruleHandlersMap { @@ -233,14 +244,14 @@ } } -func (o *Object) removePropertiesChangedHandler() { +func (o *ImplObject) removePropertiesChangedHandler() { if o.propChangedHandlerId != 0 { o.removeHandler(o.propChangedHandlerId) o.propChangedHandlerId = 0 } } -func (o *Object) removeAllHandlers() { +func (o *ImplObject) removeAllHandlers() { if o.ruleAuto { for rule, handlerIds := range o.ruleHandlersMap { for _, hId := range handlerIds { @@ -257,7 +268,7 @@ o.removePropertiesChangedHandler() } -func (o *Object) ConnectSignal_(rule string, sigRule *dbusutil.SignalRule, cb dbusutil.SignalHandlerFunc) (dbusutil.SignalHandlerId, error) { +func (o *ImplObject) ConnectSignal_(rule string, sigRule *dbusutil.SignalRule, cb dbusutil.SignalHandlerFunc) (dbusutil.SignalHandlerId, error) { o.mu.Lock() defer o.mu.Unlock() @@ -265,7 +276,7 @@ return o.connectSignal(rule, sigRule, cb) } -func (o *Object) connectSignal(rule string, sigRule *dbusutil.SignalRule, cb dbusutil.SignalHandlerFunc) (dbusutil.SignalHandlerId, error) { +func (o *ImplObject) connectSignal(rule string, sigRule *dbusutil.SignalRule, cb dbusutil.SignalHandlerFunc) (dbusutil.SignalHandlerId, error) { if o.ruleAuto { err := o.addMatch(rule) if err != nil { @@ -285,7 +296,7 @@ // Object public methods: -func (o *Object) InitSignalExt(sigLoop *dbusutil.SignalLoop, ruleAuto bool) { +func (o *ImplObject) InitSignalExt(sigLoop *dbusutil.SignalLoop, ruleAuto bool) { if o.conn != sigLoop.Conn() { panic("dbus conn not same") } @@ -304,11 +315,11 @@ RemovePropertiesChangedHandler = -2 ) -func (o *Object) RemoveAllHandlers() { +func (o *ImplObject) RemoveAllHandlers() { o.removeAllHandlers() } -func (o *Object) RemoveHandler(handlerId dbusutil.SignalHandlerId) { +func (o *ImplObject) RemoveHandler(handlerId dbusutil.SignalHandlerId) { o.mu.Lock() defer o.mu.Unlock() @@ -324,7 +335,7 @@ } } -func (o *Object) ConnectPropertiesChanged( +func (o *ImplObject) ConnectPropertiesChanged( cb func(interfaceName string, changedProperties map[string]dbus.Variant, invalidatedProperties []string)) (dbusutil.SignalHandlerId, error) { @@ -357,6 +368,6 @@ } type Implementer interface { - GetObject_() *Object + GetObject_() *ImplObject GetInterfaceName_() string } diff -Nru go-dlib-5.6.0.9+dfsg/dbusutil/proxy/prop.go go-dlib-5.7.12/dbusutil/proxy/prop.go --- go-dlib-5.6.0.9+dfsg/dbusutil/proxy/prop.go 2020-11-13 14:56:32.000000000 +0000 +++ go-dlib-5.7.12/dbusutil/proxy/prop.go 2021-09-18 16:47:58.000000000 +0000 @@ -1,25 +1,36 @@ package proxy -import "errors" -import "github.com/godbus/dbus" +import ( + "errors" + "fmt" + + "github.com/godbus/dbus" + "github.com/stretchr/testify/mock" +) var errNilCallback = errors.New("nil callback") -type PropBool struct { +type PropBool interface { + Get(flags dbus.Flags) (value bool, err error) + Set(flags dbus.Flags, value bool) error + ConnectChanged(cb func(hasValue bool, value bool)) error +} + +type ImplPropBool struct { Impl Implementer Name string } -func (p PropBool) Get(flags dbus.Flags) (value bool, err error) { +func (p ImplPropBool) Get(flags dbus.Flags) (value bool, err error) { err = p.Impl.GetObject_().GetProperty_(flags, p.Impl.GetInterfaceName_(), p.Name, &value) return } -func (p PropBool) Set(flags dbus.Flags, value bool) error { +func (p ImplPropBool) Set(flags dbus.Flags, value bool) error { return p.Impl.GetObject_().SetProperty_(flags, p.Impl.GetInterfaceName_(), p.Name, value) } -func (p PropBool) ConnectChanged(cb func(hasValue bool, value bool)) error { +func (p ImplPropBool) ConnectChanged(cb func(hasValue bool, value bool)) error { if cb == nil { return errNilCallback } @@ -36,21 +47,57 @@ return p.Impl.GetObject_().ConnectPropertyChanged_(p.Impl.GetInterfaceName_(), p.Name, cb0) } -type PropString struct { +type MockPropBool struct { + mock.Mock +} + +func (p *MockPropBool) Get(flags dbus.Flags) (value bool, err error) { + args := p.Called(flags) + + var ok bool + value, ok = args.Get(0).(bool) + if !ok { + panic(fmt.Sprintf("assert: arguments: %d failed because object wasn't correct type: %v", 0, args.Get(0))) + } + + err = args.Error(1) + + return +} + +func (p *MockPropBool) Set(flags dbus.Flags, value bool) error { + args := p.Called(flags, value) + + return args.Error(0) +} + +func (p *MockPropBool) ConnectChanged(cb func(hasValue bool, value bool)) error { + args := p.Called(cb) + + return args.Error(0) +} + +type PropString interface { + Get(flags dbus.Flags) (value string, err error) + Set(flags dbus.Flags, value string) error + ConnectChanged(cb func(hasValue bool, value string)) error +} + +type ImplPropString struct { Impl Implementer Name string } -func (p PropString) Get(flags dbus.Flags) (value string, err error) { +func (p ImplPropString) Get(flags dbus.Flags) (value string, err error) { err = p.Impl.GetObject_().GetProperty_(flags, p.Impl.GetInterfaceName_(), p.Name, &value) return } -func (p PropString) Set(flags dbus.Flags, value string) error { +func (p ImplPropString) Set(flags dbus.Flags, value string) error { return p.Impl.GetObject_().SetProperty_(flags, p.Impl.GetInterfaceName_(), p.Name, value) } -func (p PropString) ConnectChanged(cb func(hasValue bool, value string)) error { +func (p ImplPropString) ConnectChanged(cb func(hasValue bool, value string)) error { if cb == nil { return errNilCallback } @@ -67,21 +114,57 @@ return p.Impl.GetObject_().ConnectPropertyChanged_(p.Impl.GetInterfaceName_(), p.Name, cb0) } -type PropObjectPath struct { +type MockPropString struct { + mock.Mock +} + +func (p *MockPropString) Get(flags dbus.Flags) (value string, err error) { + args := p.Called(flags) + + var ok bool + value, ok = args.Get(0).(string) + if !ok { + panic(fmt.Sprintf("assert: arguments: %d failed because object wasn't correct type: %v", 0, args.Get(0))) + } + + err = args.Error(1) + + return +} + +func (p *MockPropString) Set(flags dbus.Flags, value string) error { + args := p.Called(flags, value) + + return args.Error(0) +} + +func (p *MockPropString) ConnectChanged(cb func(hasValue bool, value string)) error { + args := p.Called(cb) + + return args.Error(0) +} + +type PropObjectPath interface { + Get(flags dbus.Flags) (value dbus.ObjectPath, err error) + Set(flags dbus.Flags, value dbus.ObjectPath) error + ConnectChanged(cb func(hasValue bool, value dbus.ObjectPath)) error +} + +type ImplPropObjectPath struct { Impl Implementer Name string } -func (p PropObjectPath) Get(flags dbus.Flags) (value dbus.ObjectPath, err error) { +func (p ImplPropObjectPath) Get(flags dbus.Flags) (value dbus.ObjectPath, err error) { err = p.Impl.GetObject_().GetProperty_(flags, p.Impl.GetInterfaceName_(), p.Name, &value) return } -func (p PropObjectPath) Set(flags dbus.Flags, value dbus.ObjectPath) error { +func (p ImplPropObjectPath) Set(flags dbus.Flags, value dbus.ObjectPath) error { return p.Impl.GetObject_().SetProperty_(flags, p.Impl.GetInterfaceName_(), p.Name, value) } -func (p PropObjectPath) ConnectChanged(cb func(hasValue bool, value dbus.ObjectPath)) error { +func (p ImplPropObjectPath) ConnectChanged(cb func(hasValue bool, value dbus.ObjectPath)) error { if cb == nil { return errNilCallback } @@ -98,21 +181,57 @@ return p.Impl.GetObject_().ConnectPropertyChanged_(p.Impl.GetInterfaceName_(), p.Name, cb0) } -type PropDouble struct { +type MockPropObjectPath struct { + mock.Mock +} + +func (p *MockPropObjectPath) Get(flags dbus.Flags) (value dbus.ObjectPath, err error) { + args := p.Called(flags) + + var ok bool + value, ok = args.Get(0).(dbus.ObjectPath) + if !ok { + panic(fmt.Sprintf("assert: arguments: %d failed because object wasn't correct type: %v", 0, args.Get(0))) + } + + err = args.Error(1) + + return +} + +func (p *MockPropObjectPath) Set(flags dbus.Flags, value dbus.ObjectPath) error { + args := p.Called(flags, value) + + return args.Error(0) +} + +func (p *MockPropObjectPath) ConnectChanged(cb func(hasValue bool, value dbus.ObjectPath)) error { + args := p.Called(cb) + + return args.Error(0) +} + +type PropDouble interface { + Get(flags dbus.Flags) (value float64, err error) + Set(flags dbus.Flags, value float64) error + ConnectChanged(cb func(hasValue bool, value float64)) error +} + +type ImplPropDouble struct { Impl Implementer Name string } -func (p PropDouble) Get(flags dbus.Flags) (value float64, err error) { +func (p ImplPropDouble) Get(flags dbus.Flags) (value float64, err error) { err = p.Impl.GetObject_().GetProperty_(flags, p.Impl.GetInterfaceName_(), p.Name, &value) return } -func (p PropDouble) Set(flags dbus.Flags, value float64) error { +func (p ImplPropDouble) Set(flags dbus.Flags, value float64) error { return p.Impl.GetObject_().SetProperty_(flags, p.Impl.GetInterfaceName_(), p.Name, value) } -func (p PropDouble) ConnectChanged(cb func(hasValue bool, value float64)) error { +func (p ImplPropDouble) ConnectChanged(cb func(hasValue bool, value float64)) error { if cb == nil { return errNilCallback } @@ -129,21 +248,57 @@ return p.Impl.GetObject_().ConnectPropertyChanged_(p.Impl.GetInterfaceName_(), p.Name, cb0) } -type PropByte struct { +type MockPropDouble struct { + mock.Mock +} + +func (p *MockPropDouble) Get(flags dbus.Flags) (value float64, err error) { + args := p.Called(flags) + + var ok bool + value, ok = args.Get(0).(float64) + if !ok { + panic(fmt.Sprintf("assert: arguments: %d failed because object wasn't correct type: %v", 0, args.Get(0))) + } + + err = args.Error(1) + + return +} + +func (p *MockPropDouble) Set(flags dbus.Flags, value float64) error { + args := p.Called(flags, value) + + return args.Error(0) +} + +func (p *MockPropDouble) ConnectChanged(cb func(hasValue bool, value float64)) error { + args := p.Called(cb) + + return args.Error(0) +} + +type PropByte interface { + Get(flags dbus.Flags) (value byte, err error) + Set(flags dbus.Flags, value byte) error + ConnectChanged(cb func(hasValue bool, value byte)) error +} + +type ImplPropByte struct { Impl Implementer Name string } -func (p PropByte) Get(flags dbus.Flags) (value byte, err error) { +func (p ImplPropByte) Get(flags dbus.Flags) (value byte, err error) { err = p.Impl.GetObject_().GetProperty_(flags, p.Impl.GetInterfaceName_(), p.Name, &value) return } -func (p PropByte) Set(flags dbus.Flags, value byte) error { +func (p ImplPropByte) Set(flags dbus.Flags, value byte) error { return p.Impl.GetObject_().SetProperty_(flags, p.Impl.GetInterfaceName_(), p.Name, value) } -func (p PropByte) ConnectChanged(cb func(hasValue bool, value byte)) error { +func (p ImplPropByte) ConnectChanged(cb func(hasValue bool, value byte)) error { if cb == nil { return errNilCallback } @@ -160,21 +315,57 @@ return p.Impl.GetObject_().ConnectPropertyChanged_(p.Impl.GetInterfaceName_(), p.Name, cb0) } -type PropInt16 struct { +type MockPropByte struct { + mock.Mock +} + +func (p *MockPropByte) Get(flags dbus.Flags) (value byte, err error) { + args := p.Called(flags) + + var ok bool + value, ok = args.Get(0).(byte) + if !ok { + panic(fmt.Sprintf("assert: arguments: %d failed because object wasn't correct type: %v", 0, args.Get(0))) + } + + err = args.Error(1) + + return +} + +func (p *MockPropByte) Set(flags dbus.Flags, value byte) error { + args := p.Called(flags, value) + + return args.Error(0) +} + +func (p *MockPropByte) ConnectChanged(cb func(hasValue bool, value byte)) error { + args := p.Called(cb) + + return args.Error(0) +} + +type PropInt16 interface { + Get(flags dbus.Flags) (value int16, err error) + Set(flags dbus.Flags, value int16) error + ConnectChanged(cb func(hasValue bool, value int16)) error +} + +type ImplPropInt16 struct { Impl Implementer Name string } -func (p PropInt16) Get(flags dbus.Flags) (value int16, err error) { +func (p ImplPropInt16) Get(flags dbus.Flags) (value int16, err error) { err = p.Impl.GetObject_().GetProperty_(flags, p.Impl.GetInterfaceName_(), p.Name, &value) return } -func (p PropInt16) Set(flags dbus.Flags, value int16) error { +func (p ImplPropInt16) Set(flags dbus.Flags, value int16) error { return p.Impl.GetObject_().SetProperty_(flags, p.Impl.GetInterfaceName_(), p.Name, value) } -func (p PropInt16) ConnectChanged(cb func(hasValue bool, value int16)) error { +func (p ImplPropInt16) ConnectChanged(cb func(hasValue bool, value int16)) error { if cb == nil { return errNilCallback } @@ -191,21 +382,57 @@ return p.Impl.GetObject_().ConnectPropertyChanged_(p.Impl.GetInterfaceName_(), p.Name, cb0) } -type PropUint16 struct { +type MockPropInt16 struct { + mock.Mock +} + +func (p *MockPropInt16) Get(flags dbus.Flags) (value int16, err error) { + args := p.Called(flags) + + var ok bool + value, ok = args.Get(0).(int16) + if !ok { + panic(fmt.Sprintf("assert: arguments: %d failed because object wasn't correct type: %v", 0, args.Get(0))) + } + + err = args.Error(1) + + return +} + +func (p *MockPropInt16) Set(flags dbus.Flags, value int16) error { + args := p.Called(flags, value) + + return args.Error(0) +} + +func (p *MockPropInt16) ConnectChanged(cb func(hasValue bool, value int16)) error { + args := p.Called(cb) + + return args.Error(0) +} + +type PropUint16 interface { + Get(flags dbus.Flags) (value uint16, err error) + Set(flags dbus.Flags, value uint16) error + ConnectChanged(cb func(hasValue bool, value uint16)) error +} + +type ImplPropUint16 struct { Impl Implementer Name string } -func (p PropUint16) Get(flags dbus.Flags) (value uint16, err error) { +func (p ImplPropUint16) Get(flags dbus.Flags) (value uint16, err error) { err = p.Impl.GetObject_().GetProperty_(flags, p.Impl.GetInterfaceName_(), p.Name, &value) return } -func (p PropUint16) Set(flags dbus.Flags, value uint16) error { +func (p ImplPropUint16) Set(flags dbus.Flags, value uint16) error { return p.Impl.GetObject_().SetProperty_(flags, p.Impl.GetInterfaceName_(), p.Name, value) } -func (p PropUint16) ConnectChanged(cb func(hasValue bool, value uint16)) error { +func (p ImplPropUint16) ConnectChanged(cb func(hasValue bool, value uint16)) error { if cb == nil { return errNilCallback } @@ -222,21 +449,57 @@ return p.Impl.GetObject_().ConnectPropertyChanged_(p.Impl.GetInterfaceName_(), p.Name, cb0) } -type PropInt32 struct { +type MockPropUint16 struct { + mock.Mock +} + +func (p *MockPropUint16) Get(flags dbus.Flags) (value uint16, err error) { + args := p.Called(flags) + + var ok bool + value, ok = args.Get(0).(uint16) + if !ok { + panic(fmt.Sprintf("assert: arguments: %d failed because object wasn't correct type: %v", 0, args.Get(0))) + } + + err = args.Error(1) + + return +} + +func (p *MockPropUint16) Set(flags dbus.Flags, value uint16) error { + args := p.Called(flags, value) + + return args.Error(0) +} + +func (p *MockPropUint16) ConnectChanged(cb func(hasValue bool, value uint16)) error { + args := p.Called(cb) + + return args.Error(0) +} + +type PropInt32 interface { + Get(flags dbus.Flags) (value int32, err error) + Set(flags dbus.Flags, value int32) error + ConnectChanged(cb func(hasValue bool, value int32)) error +} + +type ImplPropInt32 struct { Impl Implementer Name string } -func (p PropInt32) Get(flags dbus.Flags) (value int32, err error) { +func (p ImplPropInt32) Get(flags dbus.Flags) (value int32, err error) { err = p.Impl.GetObject_().GetProperty_(flags, p.Impl.GetInterfaceName_(), p.Name, &value) return } -func (p PropInt32) Set(flags dbus.Flags, value int32) error { +func (p ImplPropInt32) Set(flags dbus.Flags, value int32) error { return p.Impl.GetObject_().SetProperty_(flags, p.Impl.GetInterfaceName_(), p.Name, value) } -func (p PropInt32) ConnectChanged(cb func(hasValue bool, value int32)) error { +func (p ImplPropInt32) ConnectChanged(cb func(hasValue bool, value int32)) error { if cb == nil { return errNilCallback } @@ -253,21 +516,57 @@ return p.Impl.GetObject_().ConnectPropertyChanged_(p.Impl.GetInterfaceName_(), p.Name, cb0) } -type PropUint32 struct { +type MockPropInt32 struct { + mock.Mock +} + +func (p *MockPropInt32) Get(flags dbus.Flags) (value int32, err error) { + args := p.Called(flags) + + var ok bool + value, ok = args.Get(0).(int32) + if !ok { + panic(fmt.Sprintf("assert: arguments: %d failed because object wasn't correct type: %v", 0, args.Get(0))) + } + + err = args.Error(1) + + return +} + +func (p *MockPropInt32) Set(flags dbus.Flags, value int32) error { + args := p.Called(flags, value) + + return args.Error(0) +} + +func (p *MockPropInt32) ConnectChanged(cb func(hasValue bool, value int32)) error { + args := p.Called(cb) + + return args.Error(0) +} + +type PropUint32 interface { + Get(flags dbus.Flags) (value uint32, err error) + Set(flags dbus.Flags, value uint32) error + ConnectChanged(cb func(hasValue bool, value uint32)) error +} + +type ImplPropUint32 struct { Impl Implementer Name string } -func (p PropUint32) Get(flags dbus.Flags) (value uint32, err error) { +func (p ImplPropUint32) Get(flags dbus.Flags) (value uint32, err error) { err = p.Impl.GetObject_().GetProperty_(flags, p.Impl.GetInterfaceName_(), p.Name, &value) return } -func (p PropUint32) Set(flags dbus.Flags, value uint32) error { +func (p ImplPropUint32) Set(flags dbus.Flags, value uint32) error { return p.Impl.GetObject_().SetProperty_(flags, p.Impl.GetInterfaceName_(), p.Name, value) } -func (p PropUint32) ConnectChanged(cb func(hasValue bool, value uint32)) error { +func (p ImplPropUint32) ConnectChanged(cb func(hasValue bool, value uint32)) error { if cb == nil { return errNilCallback } @@ -284,21 +583,57 @@ return p.Impl.GetObject_().ConnectPropertyChanged_(p.Impl.GetInterfaceName_(), p.Name, cb0) } -type PropInt64 struct { +type MockPropUint32 struct { + mock.Mock +} + +func (p *MockPropUint32) Get(flags dbus.Flags) (value uint32, err error) { + args := p.Called(flags) + + var ok bool + value, ok = args.Get(0).(uint32) + if !ok { + panic(fmt.Sprintf("assert: arguments: %d failed because object wasn't correct type: %v", 0, args.Get(0))) + } + + err = args.Error(1) + + return +} + +func (p *MockPropUint32) Set(flags dbus.Flags, value uint32) error { + args := p.Called(flags, value) + + return args.Error(0) +} + +func (p *MockPropUint32) ConnectChanged(cb func(hasValue bool, value uint32)) error { + args := p.Called(cb) + + return args.Error(0) +} + +type PropInt64 interface { + Get(flags dbus.Flags) (value int64, err error) + Set(flags dbus.Flags, value int64) error + ConnectChanged(cb func(hasValue bool, value int64)) error +} + +type ImplPropInt64 struct { Impl Implementer Name string } -func (p PropInt64) Get(flags dbus.Flags) (value int64, err error) { +func (p ImplPropInt64) Get(flags dbus.Flags) (value int64, err error) { err = p.Impl.GetObject_().GetProperty_(flags, p.Impl.GetInterfaceName_(), p.Name, &value) return } -func (p PropInt64) Set(flags dbus.Flags, value int64) error { +func (p ImplPropInt64) Set(flags dbus.Flags, value int64) error { return p.Impl.GetObject_().SetProperty_(flags, p.Impl.GetInterfaceName_(), p.Name, value) } -func (p PropInt64) ConnectChanged(cb func(hasValue bool, value int64)) error { +func (p ImplPropInt64) ConnectChanged(cb func(hasValue bool, value int64)) error { if cb == nil { return errNilCallback } @@ -315,21 +650,57 @@ return p.Impl.GetObject_().ConnectPropertyChanged_(p.Impl.GetInterfaceName_(), p.Name, cb0) } -type PropUint64 struct { +type MockPropInt64 struct { + mock.Mock +} + +func (p *MockPropInt64) Get(flags dbus.Flags) (value int64, err error) { + args := p.Called(flags) + + var ok bool + value, ok = args.Get(0).(int64) + if !ok { + panic(fmt.Sprintf("assert: arguments: %d failed because object wasn't correct type: %v", 0, args.Get(0))) + } + + err = args.Error(1) + + return +} + +func (p *MockPropInt64) Set(flags dbus.Flags, value int64) error { + args := p.Called(flags, value) + + return args.Error(0) +} + +func (p *MockPropInt64) ConnectChanged(cb func(hasValue bool, value int64)) error { + args := p.Called(cb) + + return args.Error(0) +} + +type PropUint64 interface { + Get(flags dbus.Flags) (value uint64, err error) + Set(flags dbus.Flags, value uint64) error + ConnectChanged(cb func(hasValue bool, value uint64)) error +} + +type ImplPropUint64 struct { Impl Implementer Name string } -func (p PropUint64) Get(flags dbus.Flags) (value uint64, err error) { +func (p ImplPropUint64) Get(flags dbus.Flags) (value uint64, err error) { err = p.Impl.GetObject_().GetProperty_(flags, p.Impl.GetInterfaceName_(), p.Name, &value) return } -func (p PropUint64) Set(flags dbus.Flags, value uint64) error { +func (p ImplPropUint64) Set(flags dbus.Flags, value uint64) error { return p.Impl.GetObject_().SetProperty_(flags, p.Impl.GetInterfaceName_(), p.Name, value) } -func (p PropUint64) ConnectChanged(cb func(hasValue bool, value uint64)) error { +func (p ImplPropUint64) ConnectChanged(cb func(hasValue bool, value uint64)) error { if cb == nil { return errNilCallback } @@ -346,21 +717,57 @@ return p.Impl.GetObject_().ConnectPropertyChanged_(p.Impl.GetInterfaceName_(), p.Name, cb0) } -type PropBoolArray struct { +type MockPropUint64 struct { + mock.Mock +} + +func (p *MockPropUint64) Get(flags dbus.Flags) (value uint64, err error) { + args := p.Called(flags) + + var ok bool + value, ok = args.Get(0).(uint64) + if !ok { + panic(fmt.Sprintf("assert: arguments: %d failed because object wasn't correct type: %v", 0, args.Get(0))) + } + + err = args.Error(1) + + return +} + +func (p *MockPropUint64) Set(flags dbus.Flags, value uint64) error { + args := p.Called(flags, value) + + return args.Error(0) +} + +func (p *MockPropUint64) ConnectChanged(cb func(hasValue bool, value uint64)) error { + args := p.Called(cb) + + return args.Error(0) +} + +type PropBoolArray interface { + Get(flags dbus.Flags) (value []bool, err error) + Set(flags dbus.Flags, value []bool) error + ConnectChanged(cb func(hasValue bool, value []bool)) error +} + +type ImplPropBoolArray struct { Impl Implementer Name string } -func (p PropBoolArray) Get(flags dbus.Flags) (value []bool, err error) { +func (p ImplPropBoolArray) Get(flags dbus.Flags) (value []bool, err error) { err = p.Impl.GetObject_().GetProperty_(flags, p.Impl.GetInterfaceName_(), p.Name, &value) return } -func (p PropBoolArray) Set(flags dbus.Flags, value []bool) error { +func (p ImplPropBoolArray) Set(flags dbus.Flags, value []bool) error { return p.Impl.GetObject_().SetProperty_(flags, p.Impl.GetInterfaceName_(), p.Name, value) } -func (p PropBoolArray) ConnectChanged(cb func(hasValue bool, value []bool)) error { +func (p ImplPropBoolArray) ConnectChanged(cb func(hasValue bool, value []bool)) error { if cb == nil { return errNilCallback } @@ -377,21 +784,57 @@ return p.Impl.GetObject_().ConnectPropertyChanged_(p.Impl.GetInterfaceName_(), p.Name, cb0) } -type PropStringArray struct { +type MockPropBoolArray struct { + mock.Mock +} + +func (p *MockPropBoolArray) Get(flags dbus.Flags) (value []bool, err error) { + args := p.Called(flags) + + var ok bool + value, ok = args.Get(0).([]bool) + if !ok { + panic(fmt.Sprintf("assert: arguments: %d failed because object wasn't correct type: %v", 0, args.Get(0))) + } + + err = args.Error(1) + + return +} + +func (p *MockPropBoolArray) Set(flags dbus.Flags, value []bool) error { + args := p.Called(flags, value) + + return args.Error(0) +} + +func (p *MockPropBoolArray) ConnectChanged(cb func(hasValue bool, value []bool)) error { + args := p.Called(cb) + + return args.Error(0) +} + +type PropStringArray interface { + Get(flags dbus.Flags) (value []string, err error) + Set(flags dbus.Flags, value []string) error + ConnectChanged(cb func(hasValue bool, value []string)) error +} + +type ImplPropStringArray struct { Impl Implementer Name string } -func (p PropStringArray) Get(flags dbus.Flags) (value []string, err error) { +func (p ImplPropStringArray) Get(flags dbus.Flags) (value []string, err error) { err = p.Impl.GetObject_().GetProperty_(flags, p.Impl.GetInterfaceName_(), p.Name, &value) return } -func (p PropStringArray) Set(flags dbus.Flags, value []string) error { +func (p ImplPropStringArray) Set(flags dbus.Flags, value []string) error { return p.Impl.GetObject_().SetProperty_(flags, p.Impl.GetInterfaceName_(), p.Name, value) } -func (p PropStringArray) ConnectChanged(cb func(hasValue bool, value []string)) error { +func (p ImplPropStringArray) ConnectChanged(cb func(hasValue bool, value []string)) error { if cb == nil { return errNilCallback } @@ -408,21 +851,57 @@ return p.Impl.GetObject_().ConnectPropertyChanged_(p.Impl.GetInterfaceName_(), p.Name, cb0) } -type PropObjectPathArray struct { +type MockPropStringArray struct { + mock.Mock +} + +func (p *MockPropStringArray) Get(flags dbus.Flags) (value []string, err error) { + args := p.Called(flags) + + var ok bool + value, ok = args.Get(0).([]string) + if !ok { + panic(fmt.Sprintf("assert: arguments: %d failed because object wasn't correct type: %v", 0, args.Get(0))) + } + + err = args.Error(1) + + return +} + +func (p *MockPropStringArray) Set(flags dbus.Flags, value []string) error { + args := p.Called(flags, value) + + return args.Error(0) +} + +func (p *MockPropStringArray) ConnectChanged(cb func(hasValue bool, value []string)) error { + args := p.Called(cb) + + return args.Error(0) +} + +type PropObjectPathArray interface { + Get(flags dbus.Flags) (value []dbus.ObjectPath, err error) + Set(flags dbus.Flags, value []dbus.ObjectPath) error + ConnectChanged(cb func(hasValue bool, value []dbus.ObjectPath)) error +} + +type ImplPropObjectPathArray struct { Impl Implementer Name string } -func (p PropObjectPathArray) Get(flags dbus.Flags) (value []dbus.ObjectPath, err error) { +func (p ImplPropObjectPathArray) Get(flags dbus.Flags) (value []dbus.ObjectPath, err error) { err = p.Impl.GetObject_().GetProperty_(flags, p.Impl.GetInterfaceName_(), p.Name, &value) return } -func (p PropObjectPathArray) Set(flags dbus.Flags, value []dbus.ObjectPath) error { +func (p ImplPropObjectPathArray) Set(flags dbus.Flags, value []dbus.ObjectPath) error { return p.Impl.GetObject_().SetProperty_(flags, p.Impl.GetInterfaceName_(), p.Name, value) } -func (p PropObjectPathArray) ConnectChanged(cb func(hasValue bool, value []dbus.ObjectPath)) error { +func (p ImplPropObjectPathArray) ConnectChanged(cb func(hasValue bool, value []dbus.ObjectPath)) error { if cb == nil { return errNilCallback } @@ -439,21 +918,57 @@ return p.Impl.GetObject_().ConnectPropertyChanged_(p.Impl.GetInterfaceName_(), p.Name, cb0) } -type PropDoubleArray struct { +type MockPropObjectPathArray struct { + mock.Mock +} + +func (p *MockPropObjectPathArray) Get(flags dbus.Flags) (value []dbus.ObjectPath, err error) { + args := p.Called(flags) + + var ok bool + value, ok = args.Get(0).([]dbus.ObjectPath) + if !ok { + panic(fmt.Sprintf("assert: arguments: %d failed because object wasn't correct type: %v", 0, args.Get(0))) + } + + err = args.Error(1) + + return +} + +func (p *MockPropObjectPathArray) Set(flags dbus.Flags, value []dbus.ObjectPath) error { + args := p.Called(flags, value) + + return args.Error(0) +} + +func (p *MockPropObjectPathArray) ConnectChanged(cb func(hasValue bool, value []dbus.ObjectPath)) error { + args := p.Called(cb) + + return args.Error(0) +} + +type PropDoubleArray interface { + Get(flags dbus.Flags) (value []float64, err error) + Set(flags dbus.Flags, value []float64) error + ConnectChanged(cb func(hasValue bool, value []float64)) error +} + +type ImplPropDoubleArray struct { Impl Implementer Name string } -func (p PropDoubleArray) Get(flags dbus.Flags) (value []float64, err error) { +func (p ImplPropDoubleArray) Get(flags dbus.Flags) (value []float64, err error) { err = p.Impl.GetObject_().GetProperty_(flags, p.Impl.GetInterfaceName_(), p.Name, &value) return } -func (p PropDoubleArray) Set(flags dbus.Flags, value []float64) error { +func (p ImplPropDoubleArray) Set(flags dbus.Flags, value []float64) error { return p.Impl.GetObject_().SetProperty_(flags, p.Impl.GetInterfaceName_(), p.Name, value) } -func (p PropDoubleArray) ConnectChanged(cb func(hasValue bool, value []float64)) error { +func (p ImplPropDoubleArray) ConnectChanged(cb func(hasValue bool, value []float64)) error { if cb == nil { return errNilCallback } @@ -470,21 +985,57 @@ return p.Impl.GetObject_().ConnectPropertyChanged_(p.Impl.GetInterfaceName_(), p.Name, cb0) } -type PropByteArray struct { +type MockPropDoubleArray struct { + mock.Mock +} + +func (p *MockPropDoubleArray) Get(flags dbus.Flags) (value []float64, err error) { + args := p.Called(flags) + + var ok bool + value, ok = args.Get(0).([]float64) + if !ok { + panic(fmt.Sprintf("assert: arguments: %d failed because object wasn't correct type: %v", 0, args.Get(0))) + } + + err = args.Error(1) + + return +} + +func (p *MockPropDoubleArray) Set(flags dbus.Flags, value []float64) error { + args := p.Called(flags, value) + + return args.Error(0) +} + +func (p *MockPropDoubleArray) ConnectChanged(cb func(hasValue bool, value []float64)) error { + args := p.Called(cb) + + return args.Error(0) +} + +type PropByteArray interface { + Get(flags dbus.Flags) (value []byte, err error) + Set(flags dbus.Flags, value []byte) error + ConnectChanged(cb func(hasValue bool, value []byte)) error +} + +type ImplPropByteArray struct { Impl Implementer Name string } -func (p PropByteArray) Get(flags dbus.Flags) (value []byte, err error) { +func (p ImplPropByteArray) Get(flags dbus.Flags) (value []byte, err error) { err = p.Impl.GetObject_().GetProperty_(flags, p.Impl.GetInterfaceName_(), p.Name, &value) return } -func (p PropByteArray) Set(flags dbus.Flags, value []byte) error { +func (p ImplPropByteArray) Set(flags dbus.Flags, value []byte) error { return p.Impl.GetObject_().SetProperty_(flags, p.Impl.GetInterfaceName_(), p.Name, value) } -func (p PropByteArray) ConnectChanged(cb func(hasValue bool, value []byte)) error { +func (p ImplPropByteArray) ConnectChanged(cb func(hasValue bool, value []byte)) error { if cb == nil { return errNilCallback } @@ -501,21 +1052,57 @@ return p.Impl.GetObject_().ConnectPropertyChanged_(p.Impl.GetInterfaceName_(), p.Name, cb0) } -type PropInt16Array struct { +type MockPropByteArray struct { + mock.Mock +} + +func (p *MockPropByteArray) Get(flags dbus.Flags) (value []byte, err error) { + args := p.Called(flags) + + var ok bool + value, ok = args.Get(0).([]byte) + if !ok { + panic(fmt.Sprintf("assert: arguments: %d failed because object wasn't correct type: %v", 0, args.Get(0))) + } + + err = args.Error(1) + + return +} + +func (p *MockPropByteArray) Set(flags dbus.Flags, value []byte) error { + args := p.Called(flags, value) + + return args.Error(0) +} + +func (p *MockPropByteArray) ConnectChanged(cb func(hasValue bool, value []byte)) error { + args := p.Called(cb) + + return args.Error(0) +} + +type PropInt16Array interface { + Get(flags dbus.Flags) (value []int16, err error) + Set(flags dbus.Flags, value []int16) error + ConnectChanged(cb func(hasValue bool, value []int16)) error +} + +type ImplPropInt16Array struct { Impl Implementer Name string } -func (p PropInt16Array) Get(flags dbus.Flags) (value []int16, err error) { +func (p ImplPropInt16Array) Get(flags dbus.Flags) (value []int16, err error) { err = p.Impl.GetObject_().GetProperty_(flags, p.Impl.GetInterfaceName_(), p.Name, &value) return } -func (p PropInt16Array) Set(flags dbus.Flags, value []int16) error { +func (p ImplPropInt16Array) Set(flags dbus.Flags, value []int16) error { return p.Impl.GetObject_().SetProperty_(flags, p.Impl.GetInterfaceName_(), p.Name, value) } -func (p PropInt16Array) ConnectChanged(cb func(hasValue bool, value []int16)) error { +func (p ImplPropInt16Array) ConnectChanged(cb func(hasValue bool, value []int16)) error { if cb == nil { return errNilCallback } @@ -532,21 +1119,57 @@ return p.Impl.GetObject_().ConnectPropertyChanged_(p.Impl.GetInterfaceName_(), p.Name, cb0) } -type PropUint16Array struct { +type MockPropInt16Array struct { + mock.Mock +} + +func (p *MockPropInt16Array) Get(flags dbus.Flags) (value []int16, err error) { + args := p.Called(flags) + + var ok bool + value, ok = args.Get(0).([]int16) + if !ok { + panic(fmt.Sprintf("assert: arguments: %d failed because object wasn't correct type: %v", 0, args.Get(0))) + } + + err = args.Error(1) + + return +} + +func (p *MockPropInt16Array) Set(flags dbus.Flags, value []int16) error { + args := p.Called(flags, value) + + return args.Error(0) +} + +func (p *MockPropInt16Array) ConnectChanged(cb func(hasValue bool, value []int16)) error { + args := p.Called(cb) + + return args.Error(0) +} + +type PropUint16Array interface { + Get(flags dbus.Flags) (value []uint16, err error) + Set(flags dbus.Flags, value []uint16) error + ConnectChanged(cb func(hasValue bool, value []uint16)) error +} + +type ImplPropUint16Array struct { Impl Implementer Name string } -func (p PropUint16Array) Get(flags dbus.Flags) (value []uint16, err error) { +func (p ImplPropUint16Array) Get(flags dbus.Flags) (value []uint16, err error) { err = p.Impl.GetObject_().GetProperty_(flags, p.Impl.GetInterfaceName_(), p.Name, &value) return } -func (p PropUint16Array) Set(flags dbus.Flags, value []uint16) error { +func (p ImplPropUint16Array) Set(flags dbus.Flags, value []uint16) error { return p.Impl.GetObject_().SetProperty_(flags, p.Impl.GetInterfaceName_(), p.Name, value) } -func (p PropUint16Array) ConnectChanged(cb func(hasValue bool, value []uint16)) error { +func (p ImplPropUint16Array) ConnectChanged(cb func(hasValue bool, value []uint16)) error { if cb == nil { return errNilCallback } @@ -563,21 +1186,57 @@ return p.Impl.GetObject_().ConnectPropertyChanged_(p.Impl.GetInterfaceName_(), p.Name, cb0) } -type PropInt32Array struct { +type MockPropUint16Array struct { + mock.Mock +} + +func (p *MockPropUint16Array) Get(flags dbus.Flags) (value []uint16, err error) { + args := p.Called(flags) + + var ok bool + value, ok = args.Get(0).([]uint16) + if !ok { + panic(fmt.Sprintf("assert: arguments: %d failed because object wasn't correct type: %v", 0, args.Get(0))) + } + + err = args.Error(1) + + return +} + +func (p *MockPropUint16Array) Set(flags dbus.Flags, value []uint16) error { + args := p.Called(flags, value) + + return args.Error(0) +} + +func (p *MockPropUint16Array) ConnectChanged(cb func(hasValue bool, value []uint16)) error { + args := p.Called(cb) + + return args.Error(0) +} + +type PropInt32Array interface { + Get(flags dbus.Flags) (value []int32, err error) + Set(flags dbus.Flags, value []int32) error + ConnectChanged(cb func(hasValue bool, value []int32)) error +} + +type ImplPropInt32Array struct { Impl Implementer Name string } -func (p PropInt32Array) Get(flags dbus.Flags) (value []int32, err error) { +func (p ImplPropInt32Array) Get(flags dbus.Flags) (value []int32, err error) { err = p.Impl.GetObject_().GetProperty_(flags, p.Impl.GetInterfaceName_(), p.Name, &value) return } -func (p PropInt32Array) Set(flags dbus.Flags, value []int32) error { +func (p ImplPropInt32Array) Set(flags dbus.Flags, value []int32) error { return p.Impl.GetObject_().SetProperty_(flags, p.Impl.GetInterfaceName_(), p.Name, value) } -func (p PropInt32Array) ConnectChanged(cb func(hasValue bool, value []int32)) error { +func (p ImplPropInt32Array) ConnectChanged(cb func(hasValue bool, value []int32)) error { if cb == nil { return errNilCallback } @@ -594,21 +1253,57 @@ return p.Impl.GetObject_().ConnectPropertyChanged_(p.Impl.GetInterfaceName_(), p.Name, cb0) } -type PropUint32Array struct { +type MockPropInt32Array struct { + mock.Mock +} + +func (p *MockPropInt32Array) Get(flags dbus.Flags) (value []int32, err error) { + args := p.Called(flags) + + var ok bool + value, ok = args.Get(0).([]int32) + if !ok { + panic(fmt.Sprintf("assert: arguments: %d failed because object wasn't correct type: %v", 0, args.Get(0))) + } + + err = args.Error(1) + + return +} + +func (p *MockPropInt32Array) Set(flags dbus.Flags, value []int32) error { + args := p.Called(flags, value) + + return args.Error(0) +} + +func (p *MockPropInt32Array) ConnectChanged(cb func(hasValue bool, value []int32)) error { + args := p.Called(cb) + + return args.Error(0) +} + +type PropUint32Array interface { + Get(flags dbus.Flags) (value []uint32, err error) + Set(flags dbus.Flags, value []uint32) error + ConnectChanged(cb func(hasValue bool, value []uint32)) error +} + +type ImplPropUint32Array struct { Impl Implementer Name string } -func (p PropUint32Array) Get(flags dbus.Flags) (value []uint32, err error) { +func (p ImplPropUint32Array) Get(flags dbus.Flags) (value []uint32, err error) { err = p.Impl.GetObject_().GetProperty_(flags, p.Impl.GetInterfaceName_(), p.Name, &value) return } -func (p PropUint32Array) Set(flags dbus.Flags, value []uint32) error { +func (p ImplPropUint32Array) Set(flags dbus.Flags, value []uint32) error { return p.Impl.GetObject_().SetProperty_(flags, p.Impl.GetInterfaceName_(), p.Name, value) } -func (p PropUint32Array) ConnectChanged(cb func(hasValue bool, value []uint32)) error { +func (p ImplPropUint32Array) ConnectChanged(cb func(hasValue bool, value []uint32)) error { if cb == nil { return errNilCallback } @@ -625,21 +1320,57 @@ return p.Impl.GetObject_().ConnectPropertyChanged_(p.Impl.GetInterfaceName_(), p.Name, cb0) } -type PropInt64Array struct { +type MockPropUint32Array struct { + mock.Mock +} + +func (p *MockPropUint32Array) Get(flags dbus.Flags) (value []uint32, err error) { + args := p.Called(flags) + + var ok bool + value, ok = args.Get(0).([]uint32) + if !ok { + panic(fmt.Sprintf("assert: arguments: %d failed because object wasn't correct type: %v", 0, args.Get(0))) + } + + err = args.Error(1) + + return +} + +func (p *MockPropUint32Array) Set(flags dbus.Flags, value []uint32) error { + args := p.Called(flags, value) + + return args.Error(0) +} + +func (p *MockPropUint32Array) ConnectChanged(cb func(hasValue bool, value []uint32)) error { + args := p.Called(cb) + + return args.Error(0) +} + +type PropInt64Array interface { + Get(flags dbus.Flags) (value []int64, err error) + Set(flags dbus.Flags, value []int64) error + ConnectChanged(cb func(hasValue bool, value []int64)) error +} + +type ImplPropInt64Array struct { Impl Implementer Name string } -func (p PropInt64Array) Get(flags dbus.Flags) (value []int64, err error) { +func (p ImplPropInt64Array) Get(flags dbus.Flags) (value []int64, err error) { err = p.Impl.GetObject_().GetProperty_(flags, p.Impl.GetInterfaceName_(), p.Name, &value) return } -func (p PropInt64Array) Set(flags dbus.Flags, value []int64) error { +func (p ImplPropInt64Array) Set(flags dbus.Flags, value []int64) error { return p.Impl.GetObject_().SetProperty_(flags, p.Impl.GetInterfaceName_(), p.Name, value) } -func (p PropInt64Array) ConnectChanged(cb func(hasValue bool, value []int64)) error { +func (p ImplPropInt64Array) ConnectChanged(cb func(hasValue bool, value []int64)) error { if cb == nil { return errNilCallback } @@ -656,21 +1387,57 @@ return p.Impl.GetObject_().ConnectPropertyChanged_(p.Impl.GetInterfaceName_(), p.Name, cb0) } -type PropUint64Array struct { +type MockPropInt64Array struct { + mock.Mock +} + +func (p *MockPropInt64Array) Get(flags dbus.Flags) (value []int64, err error) { + args := p.Called(flags) + + var ok bool + value, ok = args.Get(0).([]int64) + if !ok { + panic(fmt.Sprintf("assert: arguments: %d failed because object wasn't correct type: %v", 0, args.Get(0))) + } + + err = args.Error(1) + + return +} + +func (p *MockPropInt64Array) Set(flags dbus.Flags, value []int64) error { + args := p.Called(flags, value) + + return args.Error(0) +} + +func (p *MockPropInt64Array) ConnectChanged(cb func(hasValue bool, value []int64)) error { + args := p.Called(cb) + + return args.Error(0) +} + +type PropUint64Array interface { + Get(flags dbus.Flags) (value []uint64, err error) + Set(flags dbus.Flags, value []uint64) error + ConnectChanged(cb func(hasValue bool, value []uint64)) error +} + +type ImplPropUint64Array struct { Impl Implementer Name string } -func (p PropUint64Array) Get(flags dbus.Flags) (value []uint64, err error) { +func (p ImplPropUint64Array) Get(flags dbus.Flags) (value []uint64, err error) { err = p.Impl.GetObject_().GetProperty_(flags, p.Impl.GetInterfaceName_(), p.Name, &value) return } -func (p PropUint64Array) Set(flags dbus.Flags, value []uint64) error { +func (p ImplPropUint64Array) Set(flags dbus.Flags, value []uint64) error { return p.Impl.GetObject_().SetProperty_(flags, p.Impl.GetInterfaceName_(), p.Name, value) } -func (p PropUint64Array) ConnectChanged(cb func(hasValue bool, value []uint64)) error { +func (p ImplPropUint64Array) ConnectChanged(cb func(hasValue bool, value []uint64)) error { if cb == nil { return errNilCallback } @@ -686,3 +1453,33 @@ } return p.Impl.GetObject_().ConnectPropertyChanged_(p.Impl.GetInterfaceName_(), p.Name, cb0) } + +type MockPropUint64Array struct { + mock.Mock +} + +func (p *MockPropUint64Array) Get(flags dbus.Flags) (value []uint64, err error) { + args := p.Called(flags) + + var ok bool + value, ok = args.Get(0).([]uint64) + if !ok { + panic(fmt.Sprintf("assert: arguments: %d failed because object wasn't correct type: %v", 0, args.Get(0))) + } + + err = args.Error(1) + + return +} + +func (p *MockPropUint64Array) Set(flags dbus.Flags, value []uint64) error { + args := p.Called(flags, value) + + return args.Error(0) +} + +func (p *MockPropUint64Array) ConnectChanged(cb func(hasValue bool, value []uint64)) error { + args := p.Called(cb) + + return args.Error(0) +} diff -Nru go-dlib-5.6.0.9+dfsg/dbusutil/service_test.go go-dlib-5.7.12/dbusutil/service_test.go --- go-dlib-5.6.0.9+dfsg/dbusutil/service_test.go 2020-11-13 14:56:32.000000000 +0000 +++ go-dlib-5.7.12/dbusutil/service_test.go 2021-09-18 16:47:58.000000000 +0000 @@ -2,6 +2,7 @@ import ( "errors" + "fmt" "os" "reflect" "strings" @@ -12,7 +13,22 @@ "github.com/godbus/dbus" ) +func isSessionBusExists() bool { + address := fmt.Sprintf("/run/user/%d/bus", os.Getuid()) + _, err := os.Stat(address) + if err != nil { + return false + } + + return true +} + func TestService_GetNameOwner(t *testing.T) { + if !isSessionBusExists() { + t.Skip() + return + } + service, err := NewSessionService() if err != nil { t.Error("Unexpected error:", err) @@ -32,6 +48,11 @@ } func TestService_NameHasOwner(t *testing.T) { + if !isSessionBusExists() { + t.Skip() + return + } + service, err := NewSessionService() if err != nil { t.Error("Unexpected error:", err) @@ -54,6 +75,11 @@ } func TestService_RequestName(t *testing.T) { + if !isSessionBusExists() { + t.Skip() + return + } + service, err := NewSessionService() if err != nil { t.Error("Unexpected error:", err) @@ -71,10 +97,16 @@ } } -//nolint type srvObject1 struct { - methods *struct { - Method1 func() `out:"num"` +} + +func (o *srvObject1) GetExportedMethods() ExportedMethods { + return ExportedMethods{ + { + Name: "Method1", + Fn: o.Method1, + OutArgs: []string{"num"}, + }, } } @@ -88,17 +120,34 @@ type srvObject12 struct{} +func (o srvObject12) GetExportedMethods() ExportedMethods { + return nil +} + +func (o srvObject12) GetMethodTable() map[string]interface{} { + return nil +} + func (srvObject12) GetInterfaceName() string { return "com.deepin.lib.Object12" } type srvString string +func (srvString) GetExportedMethods() ExportedMethods { + return nil +} + func (srvString) GetInterfaceName() string { return "com.deepin.lib.String" } func TestService_Export(t *testing.T) { + if !isSessionBusExists() { + t.Skip() + return + } + service, err := NewSessionService() if err != nil { t.Error("Unexpected error:", err) @@ -148,8 +197,8 @@ } } -//nolint type srvObject2 struct { + //nolint signals *struct { Signal1 struct{} Signal2 struct { @@ -159,6 +208,10 @@ } } +func (*srvObject2) GetExportedMethods() ExportedMethods { + return nil +} + func (*srvObject2) GetInterfaceName() string { return "com.deepin.lib.Object2" } @@ -178,6 +231,11 @@ } func TestService_Emit(t *testing.T) { + if !isSessionBusExists() { + t.Skip() + return + } + service, err := NewSessionService() if err != nil { t.Error("Unexpected error:", err) @@ -220,7 +278,7 @@ case <-ch1: close(ch1) case <-time.After(30 * time.Second): - t.Errorf("Failed to announce that the Signal1 was emitted") + t.Log("Failed to announce that the Signal1 was emitted") } err = ruleSig1.RemoveFrom(service.conn) @@ -261,7 +319,7 @@ case <-ch2: close(ch2) case <-time.After(30 * time.Second): - t.Errorf("Failed to announce that the Signal2 was emitted") + t.Log("Failed to announce that the Signal2 was emitted") } err = ruleSig2.RemoveFrom(service.conn) @@ -291,6 +349,10 @@ Prop2 uint32 } +func (*srvObject3) GetExportedMethods() ExportedMethods { + return nil +} + func (*srvObject3) GetInterfaceName() string { return "com.deepin.lib.Object3" } @@ -318,6 +380,11 @@ } func TestService_EmitPropertyChanged(t *testing.T) { + if !isSessionBusExists() { + t.Skip() + return + } + service, err := NewSessionService() if err != nil { t.Error("Unexpected error:", err) @@ -370,7 +437,7 @@ case <-ch: close(ch) case <-time.After(5 * time.Second): - t.Error("Failed to announce that the PropertiesChanged signal was emitted") + t.Log("Failed to announce that the PropertiesChanged signal was emitted") } } } @@ -387,6 +454,10 @@ Prop2 uint32 } +func (*srvObject4) GetExportedMethods() ExportedMethods { + return nil +} + func (*srvObject4) GetInterfaceName() string { return "com.deepin.lib.Object4" } @@ -460,6 +531,11 @@ } func TestService_EmitPropertiesChanged(t *testing.T) { + if !isSessionBusExists() { + t.Skip() + return + } + service, err := NewSessionService() if err != nil { t.Error("Unexpected error:", err) @@ -489,6 +565,15 @@ s *Service } +func (obj *srvObject5) GetExportedMethods() ExportedMethods { + return ExportedMethods{ + { + Name: "Method1", + Fn: obj.Method1, + }, + } +} + func (*srvObject5) GetInterfaceName() string { return "com.deepin.lib.Object5" } @@ -499,6 +584,11 @@ } func TestService_AutoQuit(t *testing.T) { + if !isSessionBusExists() { + t.Skip() + return + } + ch := make(chan struct{}) bus, err := dbus.SessionBusPrivate() @@ -557,11 +647,16 @@ // ok close(ch) case <-time.After(5 * time.Second): - t.Error("Failed to announce that the service has quit") + t.Log("Failed to announce that the service has quit") } } func TestService_GetConnPIDAndUID(t *testing.T) { + if !isSessionBusExists() { + t.Skip() + return + } + service, err := NewSessionService() if err != nil { t.Error("Unexpected error:", err) @@ -593,11 +688,20 @@ prop1ReadCount int } +func (*srvObject6) GetExportedMethods() ExportedMethods { + return nil +} + func (*srvObject6) GetInterfaceName() string { return "com.deepin.lib.Object6" } func TestService_SetReadCallback(t *testing.T) { + if !isSessionBusExists() { + t.Skip() + return + } + service, err := NewSessionService() if err != nil { t.Error("Unexpected error:", err) @@ -675,11 +779,20 @@ prop1WriteCount int } +func (*srvObject7) GetExportedMethods() ExportedMethods { + return nil +} + func (*srvObject7) GetInterfaceName() string { return "com.deepin.lib.Object7" } func TestService_SetWriteCallback(t *testing.T) { + if !isSessionBusExists() { + t.Skip() + return + } + service, err := NewSessionService() if err != nil { t.Error("Unexpected error:", err) @@ -762,11 +875,20 @@ changedCountB int } +func (*srvObject8) GetExportedMethods() ExportedMethods { + return nil +} + func (*srvObject8) GetInterfaceName() string { return "com.deepin.lib.Object8" } func TestService_ConnectChanged(t *testing.T) { + if !isSessionBusExists() { + t.Skip() + return + } + service, err := NewSessionService() if err != nil { t.Error("Unexpected error:", err) @@ -787,7 +909,7 @@ }) if err != nil { - t.Error("Unexpected error set write callabck for Prop1:", err) + t.Error("Unexpected error set write callback for Prop1:", err) } err = serverObject8.ConnectChanged(srvObj8, "Prop1", @@ -855,11 +977,20 @@ Prop6 int32 `prop:"access:rw,emit:false"` } +func (*srvObject9) GetExportedMethods() ExportedMethods { + return nil +} + func (*srvObject9) GetInterfaceName() string { return "com.deepin.lib.Object9" } func TestService_PropTag(t *testing.T) { + if !isSessionBusExists() { + t.Skip() + return + } + service, err := NewSessionService() if err != nil { t.Error("Unexpected error:", err) @@ -999,7 +1130,7 @@ case <-chP4: close(chP4) case <-time.After(5 * time.Second): - t.Error("Failed to announce that the Prop4 PropertyChanged signal emitted") + t.Log("Failed to announce that the Prop4 PropertyChanged signal emitted") } // Test Prop5 emit: invalidates @@ -1046,7 +1177,7 @@ case <-chP5: close(chP5) case <-time.After(5 * time.Second): - t.Error("Failed to announce that the Prop5 PropertyChanged signal emitted") + t.Log("Failed to announce that the Prop5 PropertyChanged signal emitted") } // Test Prop6 emit: false @@ -1104,11 +1235,20 @@ prop4ChangedCount int } +func (*srvObject10) GetExportedMethods() ExportedMethods { + return nil +} + func (*srvObject10) GetInterfaceName() string { return "com.deepin.lib.Object10" } func TestService_StructProp(t *testing.T) { + if !isSessionBusExists() { + t.Skip() + return + } + service, err := NewSessionService() if err != nil { t.Error("Unexpected error:", err) @@ -1252,6 +1392,10 @@ Prop5 *customProperty } +func (*srvObject11) GetExportedMethods() ExportedMethods { + return nil +} + func (*srvObject11) GetInterfaceName() string { return "com.deepin.lib.Object11" } @@ -1276,6 +1420,11 @@ } func TestService_DumpProperties(t *testing.T) { + if !isSessionBusExists() { + t.Skip() + return + } + service, err := NewSessionService() if err != nil { t.Error("Unexpected error:", err) @@ -1313,11 +1462,20 @@ prop3ChangedCount int } +func (*srvObject13) GetExportedMethods() ExportedMethods { + return nil +} + func (*srvObject13) GetInterfaceName() string { return "com.deepin.lib.Object13" } func TestService_IntUintProp(t *testing.T) { + if !isSessionBusExists() { + t.Skip() + return + } + service, err := NewSessionService() if err != nil { t.Error("Unexpected error:", err) diff -Nru go-dlib-5.6.0.9+dfsg/dbusutil/_tool/dbusutil-gen/exported_methods.go go-dlib-5.7.12/dbusutil/_tool/dbusutil-gen/exported_methods.go --- go-dlib-5.6.0.9+dfsg/dbusutil/_tool/dbusutil-gen/exported_methods.go 1970-01-01 00:00:00.000000000 +0000 +++ go-dlib-5.7.12/dbusutil/_tool/dbusutil-gen/exported_methods.go 2021-09-18 16:47:58.000000000 +0000 @@ -0,0 +1,209 @@ +package main + +import ( + "fmt" + "go/ast" + "go/parser" + "go/token" + "log" + "os" + "path/filepath" + "sort" + "unicode" + + "pkg.deepin.io/lib/strv" + + "pkg.deepin.io/lib/dbusutil" +) + +func (g *Generator) genExportedMethods(types strv.Strv) { + fSet := token.NewFileSet() + pkgs, err := parser.ParseDir(fSet, ".", func(info os.FileInfo) bool { + if info.Name() == filepath.Base(_outputFile) { + return false + } + return true + }, 0) + if err != nil { + log.Fatal(err) + } + result := make(map[string]dbusutil.ExportedMethods) + for _, typ := range types { + result[typ] = dbusutil.ExportedMethods{} + } + for _, pkg := range pkgs { + + for _, file := range pkg.Files { + dbusIdent := getDBusIdent(file.Imports) + + ast.Inspect(file, func(node ast.Node) bool { + funcDecl, ok := node.(*ast.FuncDecl) + if !ok { + return true + } + + if funcDecl.Recv != nil && len(funcDecl.Recv.List) == 1 { + var recvTypeName string + recv := funcDecl.Recv.List[0] + starExpr, ok := recv.Type.(*ast.StarExpr) + if ok { + if ident, ok := starExpr.X.(*ast.Ident); ok { + recvTypeName = ident.Name + if !types.Contains(recvTypeName) { + return false + } + } else { + return false + } + } else { + return false + } + if isTargetFunc(funcDecl, dbusIdent) { + in, out := getArgs(funcDecl, dbusIdent) + result[recvTypeName] = append(result[recvTypeName], dbusutil.ExportedMethod{ + Name: funcDecl.Name.Name, + InArgs: in, + OutArgs: out, + }) + } + + } + + return false + }) + } + + } + g.genGetExportedMethodsFn(result) +} + +func (g *Generator) genGetExportedMethodsFn(result map[string]dbusutil.ExportedMethods) { + typeNames := make([]string, 0, len(result)) + for typeName := range result { + typeNames = append(typeNames, typeName) + } + sort.Strings(typeNames) + for _, typeName := range typeNames { + methods := result[typeName] + sort.Sort(methods) + g.printf("func (v *%v) GetExportedMethods() dbusutil.ExportedMethods {\n", typeName) + if len(methods) == 0 { + g.printf("return nil\n") + } else { + g.printf("return dbusutil.ExportedMethods{\n") + for _, method := range methods { + g.printf("{\n") + g.printf("Name: %q,\n", method.Name) + g.printf("Fn: v.%v,\n", method.Name) + if len(method.InArgs) > 0 { + g.printf("InArgs: %#v,\n", method.InArgs) + } + if len(method.OutArgs) > 0 { + g.printf("OutArgs: %#v,\n", method.OutArgs) + } + g.printf("},\n") + } + g.printf("}\n") // end struct + } + g.printf("}\n") // end func + } +} + +func getDBusIdent(imports []*ast.ImportSpec) string { + for _, spec := range imports { + if spec.Path.Value == `"github.com/godbus/dbus"` { + if spec.Name != nil { + return spec.Name.Name + } + } + } + return "dbus" +} + +func isTargetFunc(funcDecl *ast.FuncDecl, dbusIdent string) bool { + if !unicode.IsUpper(rune(funcDecl.Name.Name[0])) { + // 非导出的 + return false + } + if funcDecl.Type.Results != nil && len(funcDecl.Type.Results.List) > 0 { + resultList := funcDecl.Type.Results.List + lastField := resultList[len(resultList)-1] + // 检查最后一个字段的类型是 *dbus.Error + if starExpr, ok := lastField.Type.(*ast.StarExpr); ok { + if selExpr, ok := starExpr.X.(*ast.SelectorExpr); ok { + if selExpr.Sel.Name == "Error" { + if ident, ok := selExpr.X.(*ast.Ident); ok { + if ident.Name == dbusIdent { + return true + } + } + } + } + } + } + return false +} + +func getArgs(funcDel *ast.FuncDecl, dbusIdent string) (in, out []string) { + getArg := func(idx *int, name string, in bool) string { + if name != "" && name != "_" { + return name + } + dir := "out" + if in { + dir = "in" + } + name = fmt.Sprintf("%vArg%v", dir, *idx) + *idx++ + return name + } + + if funcDel.Type.Params != nil { + params := funcDel.Type.Params.List + var argIdx int + for _, param := range params { + if selExpr, ok := param.Type.(*ast.SelectorExpr); ok { + if selExpr.Sel.Name == "Sender" || selExpr.Sel.Name == "Message" { + if ident, ok := selExpr.X.(*ast.Ident); ok { + if ident.Name == dbusIdent { + // 跳过 dbus.Sender 和 dbus.Message 类型的参数 + continue + } + } + } + } + + var argName string + if len(param.Names) > 0 { + for _, name := range param.Names { + argName = getArg(&argIdx, name.Name, true) + in = append(in, argName) + } + } else { + argName = getArg(&argIdx, "", true) + in = append(in, argName) + } + } + } + + if funcDel.Type.Results != nil { + results := funcDel.Type.Results.List + if len(results) > 1 { + var argIdx int + for _, result := range results[:len(results)-1] { + var argName string + if len(result.Names) > 0 { + for _, name := range result.Names { + argName = getArg(&argIdx, name.Name, false) + out = append(out, argName) + } + } else { + argName = getArg(&argIdx, "", false) + out = append(out, argName) + } + } + } + } + + return in, out +} diff -Nru go-dlib-5.6.0.9+dfsg/dbusutil/_tool/dbusutil-gen/main.go go-dlib-5.7.12/dbusutil/_tool/dbusutil-gen/main.go --- go-dlib-5.6.0.9+dfsg/dbusutil/_tool/dbusutil-gen/main.go 2020-11-13 14:56:32.000000000 +0000 +++ go-dlib-5.7.12/dbusutil/_tool/dbusutil-gen/main.go 2021-09-18 16:47:58.000000000 +0000 @@ -18,9 +18,9 @@ "pkg.deepin.io/lib/strv" ) -func astNodeToStr(fset *token.FileSet, node interface{}) (string, error) { +func astNodeToStr(fSet *token.FileSet, node interface{}) (string, error) { var buf bytes.Buffer - err := printer.Fprint(&buf, fset, node) + err := printer.Fprint(&buf, fSet, node) if err != nil { return "", err } @@ -38,16 +38,18 @@ pkg Package } -func (g *Generator) printf(format string, args ...interface{}) (int, error) { - return fmt.Fprintf(&g.buf, format, args...) +func (g *Generator) printf(format string, args ...interface{}) { + _, err := fmt.Fprintf(&g.buf, format, args...) + if err != nil { + log.Fatal(err) + } } const propsMuField = "PropsMu" -func (g *Generator) generate() { +func (g *Generator) genHeader() { cmdline := strings.Join(os.Args, " ") g.printf("// Code generated by %q; DO NOT EDIT.\n\n", cmdline) - g.printf("package %s\n", g.pkg.name) if len(g.pkg.extraImports) > 0 { @@ -59,6 +61,10 @@ // end import g.printf(")\n\n") } +} + +func (g *Generator) genSetProps(files []string, types strv.Strv) { + g.parseFiles(files, types) for typ, props := range g.pkg.typePropMap { for _, prop := range props { @@ -173,30 +179,45 @@ } var ( - typeNames string - extraImports string - outputFile string + _typeNames string + _extraImports string + _outputFile string ) +var defaultFlagSet = flag.NewFlagSet("default", flag.PanicOnError) + +var emFlagSet = flag.NewFlagSet("em", flag.PanicOnError) + func init() { - flag.StringVar(&typeNames, "type", "", "comma-separated list of type names; must be set") - flag.StringVar(&extraImports, "import", "", "") - flag.StringVar(&outputFile, "output", "", "output file") + defaultFlagSet.StringVar(&_typeNames, "type", "", "comma-separated list of type names; must be set") + defaultFlagSet.StringVar(&_extraImports, "import", "", "") + defaultFlagSet.StringVar(&_outputFile, "output", "", "output file") + + emFlagSet.StringVar(&_typeNames, "type", "", "comma-separated list of type names; must be set") + emFlagSet.StringVar(&_extraImports, "import", "", "") + emFlagSet.StringVar(&_outputFile, "output", "", "output file") } func main() { log.SetFlags(log.Lshortfile) log.SetPrefix("dbusutil-gen: ") - flag.Parse() - - types := strv.Strv(strings.Split(typeNames, ",")) - goPackage := os.Getenv("GOPACKAGE") - - files := flag.Args() - + modeExportedMethods := false + if len(os.Args) > 1 && os.Args[1] == "em" { + modeExportedMethods = true + err := emFlagSet.Parse(os.Args[2:]) + if err != nil { + log.Fatal(err) + } + } else { + err := defaultFlagSet.Parse(os.Args[1:]) + if err != nil { + log.Fatal(err) + } + } + types := strv.Strv(strings.Split(_typeNames, ",")) var parsedExtraImports []string - for _, imp := range strings.Split(extraImports, ",") { + for _, imp := range strings.Split(_extraImports, ",") { if imp == "" { continue } @@ -211,24 +232,34 @@ parsedExtraImports = append(parsedExtraImports, `"`+imp+`"`) } } - + goPackage := os.Getenv("GOPACKAGE") + if goPackage == "" { + log.Fatal("env GOPACKAGE is empty") + } g := &Generator{ pkg: Package{ name: goPackage, extraImports: parsedExtraImports, }, } - - g.parseFiles(files, types) - g.generate() - - code := g.format() - - if outputFile == "" { - outputFile = g.pkg.name + "_dbusutil.go" - } - log.Println("output file:", outputFile) - err := ioutil.WriteFile(outputFile, code, 0644) + if modeExportedMethods { + if _outputFile == "" { + _outputFile = "exported_methods_auto.go" + } + g.pkg.extraImports = append(g.pkg.extraImports, `"pkg.deepin.io/lib/dbusutil"`) + g.genHeader() + g.genExportedMethods(types) + } else { + files := defaultFlagSet.Args() + if _outputFile == "" { + _outputFile = g.pkg.name + "_dbusutil.go" + } + g.genHeader() + g.genSetProps(files, types) + } + log.Println("output file:", _outputFile) + data := g.format() + err := ioutil.WriteFile(_outputFile, data, 0644) if err != nil { log.Fatal(err) } diff -Nru go-dlib-5.6.0.9+dfsg/debian/changelog go-dlib-5.7.12/debian/changelog --- go-dlib-5.6.0.9+dfsg/debian/changelog 2021-02-04 21:21:00.000000000 +0000 +++ go-dlib-5.7.12/debian/changelog 2021-09-18 16:56:49.000000000 +0000 @@ -1,21 +1,5 @@ -go-dlib (5.6.0.9+dfsg-2) unstable; urgency=high +go-dlib (5.7.12-1) impish; urgency=medium - * Team upload. - * Disable broken /etc/group test in group_test.go. (Closes: #981894) + * New upstream release. - -- Boyuan Yang Thu, 04 Feb 2021 16:21:00 -0500 - -go-dlib (5.6.0.9+dfsg-1) unstable; urgency=medium - - * Team upload. - * Upload to unstable. - * debian/control: Add missing build-dependency (dbus-x11 ). - * debian/rules: Fix typo in using $(CURDIR). - - -- Boyuan Yang Wed, 03 Feb 2021 22:01:33 -0500 - -go-dlib (5.6.0.9+dfsg-1~exp1) experimental; urgency=medium - - * New upstream version 5.6.0.9+dfsg (Closes: #979444). - - -- Arun Kumar Pariyar Wed, 27 Jan 2021 21:40:47 +0545 + -- Arun Kumar Pariyar Sat, 18 Sep 2021 22:41:49 +0545 diff -Nru go-dlib-5.6.0.9+dfsg/debian/clean go-dlib-5.7.12/debian/clean --- go-dlib-5.6.0.9+dfsg/debian/clean 2021-02-04 03:08:32.000000000 +0000 +++ go-dlib-5.7.12/debian/clean 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -backlight/display/display_test.go -gdkpixbuf/gdkpixbuf_test.go -graphic/graphic_test.go diff -Nru go-dlib-5.6.0.9+dfsg/debian/control go-dlib-5.7.12/debian/control --- go-dlib-5.6.0.9+dfsg/debian/control 2021-02-04 03:08:46.000000000 +0000 +++ go-dlib-5.7.12/debian/control 2021-09-18 16:56:49.000000000 +0000 @@ -1,65 +1,55 @@ Source: go-dlib Section: devel -Priority: optional -Maintainer: Debian Deepin Packaging Team -Uploaders: - Arun Kumar Pariyar -Build-Depends: - dbus-x11 , - debhelper-compat (= 13), - dh-golang, - golang-any, - golang-dbus-dev, - golang-gir-gio-2.0-dev (>> 1.2.0+), - golang-gir-glib-2.0-dev (>> 1.2.0+), - golang-gir-gobject-2.0-dev (>> 1.2.0+), - golang-github-cryptix-wav-dev, - golang-github-fsnotify-fsnotify-dev, - golang-github-linuxdeepin-go-x11-client-dev, - golang-github-mozillazg-go-pinyin-dev, - golang-github-smartystreets-goconvey-dev, - golang-github-stretchr-testify-dev, - golang-golang-x-image-dev, - golang-golang-x-net-dev, - golang-gopkg-alecthomas-kingpin.v2-dev, - golang-gopkg-check.v1-dev, - iso-codes, - libasound2-dev, - libcanberra-dev, - libgdk-pixbuf2.0-dev, - libgtk-3-dev, - libpam0g-dev, - libpulse-dev, - locales, - mobile-broadband-provider-info, +Priority: extra +Maintainer: Deepin Packages Builder +Build-Depends: dbus-x11, + debhelper-compat (=13), + dh-golang, + golang-dbus-dev, + golang-gir-gio-2.0-dev (>> 1.2.0+), + golang-gir-glib-2.0-dev (>> 1.2.0+), + golang-gir-gobject-2.0-dev (>> 1.2.0+), + golang-github-cryptix-wav-dev, + golang-github-fsnotify-fsnotify-dev, + golang-github-linuxdeepin-go-x11-client-dev, + golang-github-mozillazg-go-pinyin-dev, + golang-github-smartystreets-goconvey-dev, + golang-github-stretchr-testify-dev, + golang-go, + golang-golang-x-image-dev, + golang-golang-x-net-dev, + golang-gopkg-alecthomas-kingpin.v2-dev, + golang-gopkg-check.v1-dev, + iso-codes, + libasound2-dev, + libcanberra-dev, + libgdk-pixbuf2.0-dev, + libgtk-3-dev, + libpam0g-dev, + libpulse-dev, + mobile-broadband-provider-info Standards-Version: 4.5.1 -Rules-Requires-Root: no -Homepage: https://github.com/linuxdeepin/go-lib -Vcs-Git: https://salsa.debian.org/pkg-deepin-team/go-lib.git -Vcs-Browser: https://salsa.debian.org/pkg-deepin-team/go-lib -XS-Go-Import-Path: pkg.deepin.io/lib +Homepage: http://www.deepin.org Package: golang-dlib-dev Architecture: all -Depends: - golang-dbus-dev, - golang-gir-gio-2.0-dev (>> 1.2.0+), - golang-gir-glib-2.0-dev (>> 1.2.0+), - golang-gir-gobject-2.0-dev (>> 1.2.0+), - golang-github-cryptix-wav-dev, - golang-github-fsnotify-fsnotify-dev, - golang-github-linuxdeepin-go-x11-client-dev, - golang-github-mozillazg-go-pinyin-dev, - golang-golang-x-image-dev, - golang-golang-x-net-dev, - libasound2-dev, - libgtk-3-dev, - libpam0g-dev, - libpulse-dev, - ${misc:Depends}, -Description: Go bindings for Deepin Desktop Environment (development files) - go-dlib is a set of go bindings for D-Bus, glib, gdkpixbuf, pulse and more. - . - This package provides set of golang bindings and libraries for DDE development. - . - This package is part of DDE (Deepin Desktop Environment). +Depends: golang-dbus-dev, + golang-gir-gio-2.0-dev (>> 1.2.0+), + golang-gir-glib-2.0-dev (>> 1.2.0+), + golang-gir-gobject-2.0-dev (>> 1.2.0+), + golang-github-cryptix-wav-dev, + golang-github-fsnotify-fsnotify-dev, + golang-github-linuxdeepin-go-x11-client-dev, + golang-github-mozillazg-go-pinyin-dev, + golang-golang-x-image-dev, + golang-golang-x-net-dev, + libasound2-dev, + libgtk-3-dev, + libpam0g-dev, + libpulse-dev, + ${misc:Depends} +Built-Using: ${misc:Built-Using} +Provides: go-dlib +Description: Go bindings for Deepin Desktop Environment development + DLib is a set of Go bindings/libraries for DDE development. + Containing dbus (forking from guelfey), glib, gdkpixbuf, pulse and more. diff -Nru go-dlib-5.6.0.9+dfsg/debian/copyright go-dlib-5.7.12/debian/copyright --- go-dlib-5.6.0.9+dfsg/debian/copyright 2021-02-04 03:08:32.000000000 +0000 +++ go-dlib-5.7.12/debian/copyright 2021-09-18 16:47:59.000000000 +0000 @@ -1,44 +1,9 @@ -Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ -Upstream-Name: go-lib -Upstream-Contact: https://github.com/linuxdeepin/go-lib/issues -Source: https://github.com/linuxdeepin/go-lib -Files-Excluded: backlight/display/testdata/intel_backlight/device - gdkpixbuf/testdata/origin_1920x1080.jpg - gdkpixbuf/testdata/origin_small_200x200.png - graphic/testdata/origin_1920x1080.jpg - graphic/testdata/origin_small_200x200.png - graphic/testdata/sniff_format.tiff - gettext/testdata/locale_def -Comment: Removed some non-free files and locale files. +Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: go-dlib +Source: https://gitcafe.com/Deepin/go-lib.git Files: * -Copyright: 2014-2018, Deepin Technology Co., Ltd. -License: GPL-3+ - -Files: debian/* -Copyright: 2020-2021, Arun Kumar Pariyar -License: GPL-3+ - -Files: multierr/* -Copyright: 2014, HashiCorp -License: MPL-2.0 - -Files: pam/pam.go - pam/transaction.c -Copyright: 2011, krockot - 2015, Michael Steinert -License: BSD-2-Clause - -Files: stb_vorbis/stb_vorbis.c - stb_vorbis/stb_vorbis.h -Copyright: 2007-2017, Sean Barrett -License: Expat or public-domain - -Files: event/event.go -Copyright: 2017-2018, Deepin Technology Co., Ltd. - 2015, pocke -License: Expat and GPL-3+ - +Copyright: 2017 Deepin Technology Co., Ltd. License: GPL-3+ This package is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -55,80 +20,3 @@ . On Debian systems, the complete text of the GNU General Public License version 3 can be found in "/usr/share/common-licenses/GPL-3". - -License: Expat - Permission is hereby granted, free of charge, to any person obtaining a - copy of this software and associated documentation files (the "Software"), - to deal in the Software without restriction, including without limitation - the rights to use, copy, modify, merge, publish, distribute, sublicense, - and/or sell copies of the Software, and to permit persons to whom the - Software is furnished to do so, subject to the following conditions: - . - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - . - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -License: BSD-2-clause - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - . - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - . - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - . - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED - TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -License: MPL-2.0 - This Source Code Form is subject to the terms of the Mozilla Public License, - v. 2.0. If a copy of the MPL was not distributed with this file, You can - obtain one at http://mozilla.org/MPL/2.0/. - . - On Debian system, the complete text of the Mozilla Public License - version 2.0 can be found in /usr/share/common-licenses/MPL-2.0 - -License: public-domain - This is free and unencumbered software released into the public domain. - . - Anyone is free to copy, modify, publish, use, compile, sell, or - distribute this software, either in source code form or as a compiled - binary, for any purpose, commercial or non-commercial, and by any - means. - . - In jurisdictions that recognize copyright laws, the author or authors - of this software dedicate any and all copyright interest in the - software to the public domain. We make this dedication for the benefit - of the public at large and to the detriment of our heirs and - successors. We intend this dedication to be an overt act of - relinquishment in perpetuity of all present and future rights to this - software under copyright law. - . - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR - OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - OTHER DEALINGS IN THE SOFTWARE. - . - For more information, please refer to diff -Nru go-dlib-5.6.0.9+dfsg/debian/patches/0001-group_test.go-Disable-broken-etc-group-assumption.patch go-dlib-5.7.12/debian/patches/0001-group_test.go-Disable-broken-etc-group-assumption.patch --- go-dlib-5.6.0.9+dfsg/debian/patches/0001-group_test.go-Disable-broken-etc-group-assumption.patch 2021-02-04 21:20:57.000000000 +0000 +++ go-dlib-5.7.12/debian/patches/0001-group_test.go-Disable-broken-etc-group-assumption.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,19 +0,0 @@ -From: Boyuan Yang -Date: Thu, 4 Feb 2021 16:20:41 -0500 -Subject: group_test.go: Disable broken etc/group assumption - ---- - users/group/group_test.go | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/users/group/group_test.go b/users/group/group_test.go -index 1205742..ab25724 100644 ---- a/users/group/group_test.go -+++ b/users/group/group_test.go -@@ -57,5 +57,5 @@ func (*testWrapper) TestGetGroupByGid(c *C.C) { - func (*testWrapper) TestGetGroupEntry(c *C.C) { - groups := GetGroupEntry() - c.Check(len(groups), C.Not(C.Equals), 0) -- c.Check(groups[0].Name, C.Equals, "root") -+ // c.Check(groups[0].Name, C.Equals, "root") - } diff -Nru go-dlib-5.6.0.9+dfsg/debian/patches/series go-dlib-5.7.12/debian/patches/series --- go-dlib-5.6.0.9+dfsg/debian/patches/series 2021-02-04 21:20:43.000000000 +0000 +++ go-dlib-5.7.12/debian/patches/series 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -0001-group_test.go-Disable-broken-etc-group-assumption.patch diff -Nru go-dlib-5.6.0.9+dfsg/debian/rules go-dlib-5.7.12/debian/rules --- go-dlib-5.6.0.9+dfsg/debian/rules 2021-02-04 03:08:46.000000000 +0000 +++ go-dlib-5.7.12/debian/rules 2021-09-18 16:56:49.000000000 +0000 @@ -1,14 +1,18 @@ #!/usr/bin/make -f -#export DH_VERBOSE = 1 +export GOCACHE := /tmp/gocache + +export DH_GOPKG := pkg.deepin.io/lib export DH_GOLANG_INSTALL_ALL := 1 %: - dh $@ --builddirectory=_build --buildsystem=golang --with=golang + dh $@ --buildsystem=golang --with=golang -execute_before_dh_auto_configure: - cd gettext; ./build_test_locale_data +override_dh_auto_install: + dh_auto_install + find ${CURDIR}/debian/golang-dlib-dev -regex '.*\.git\|.*testdata\|.*LICENSE\|.*\.gitignore' | xargs rm -rf -execute_after_dh_auto_install: - find $(CURDIR)/debian/golang-dlib-dev -regex '.*\.git\|.*testdata\|.*LICENSE\|.*\.gitignore' | xargs rm -rf +override_dh_fixperms: + dh_fixperms + find debian -name 'build_test_locale_data' -exec chmod 755 {} \; diff -Nru go-dlib-5.6.0.9+dfsg/debian/source/format go-dlib-5.7.12/debian/source/format --- go-dlib-5.6.0.9+dfsg/debian/source/format 2021-02-04 03:08:32.000000000 +0000 +++ go-dlib-5.7.12/debian/source/format 2021-09-18 16:47:59.000000000 +0000 @@ -1 +1 @@ -3.0 (quilt) +3.0 (native) diff -Nru go-dlib-5.6.0.9+dfsg/debian/upstream/metadata go-dlib-5.7.12/debian/upstream/metadata --- go-dlib-5.6.0.9+dfsg/debian/upstream/metadata 2021-02-04 03:08:32.000000000 +0000 +++ go-dlib-5.7.12/debian/upstream/metadata 1970-01-01 00:00:00.000000000 +0000 @@ -1,4 +0,0 @@ -Bug-Database: https://github.com/linuxdeepin/go-lib/issues -Bug-Submit: https://github.com/linuxdeepin/go-lib/issues/new -Repository: https://github.com/linuxdeepin/go-lib.git -Repository-Browse: https://github.com/linuxdeepin/go-lib diff -Nru go-dlib-5.6.0.9+dfsg/debian/watch go-dlib-5.7.12/debian/watch --- go-dlib-5.6.0.9+dfsg/debian/watch 2021-02-04 03:08:32.000000000 +0000 +++ go-dlib-5.7.12/debian/watch 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -version=4 - -# GitHub hosted projects -opts="dversionmangle=s/\+dfsg\d*$//,repacksuffix=+dfsg,filenamemangle=s%(?:.*?)?v?(\d[\d.]*)\.tar\.gz%go-lib-$1.tar.gz%" \ - https://github.com/linuxdeepin/go-lib/tags \ - (?:.*?/)?v?(\d[\d.]*)\.tar\.gz debian uupdate - diff -Nru go-dlib-5.6.0.9+dfsg/gdkpixbuf/gdkpixbuf_test.go go-dlib-5.7.12/gdkpixbuf/gdkpixbuf_test.go --- go-dlib-5.6.0.9+dfsg/gdkpixbuf/gdkpixbuf_test.go 2020-11-13 14:56:32.000000000 +0000 +++ go-dlib-5.7.12/gdkpixbuf/gdkpixbuf_test.go 2021-09-18 16:48:00.000000000 +0000 @@ -21,9 +21,10 @@ import ( "fmt" - C "gopkg.in/check.v1" "os" "testing" + + C "gopkg.in/check.v1" ) // Hook up gocheck into the "go test" runner. @@ -37,16 +38,16 @@ originImg = "testdata/origin_1920x1080.jpg" originImgWidth = 1920 originImgHeight = 1080 - originImgDominantColorH = 198.6 - originImgDominantColorS = 0.40 - originImgDominantColorV = 0.43 - - originImgIconBmp = "testdata/origin_icon_48x48.bmp" - originImgIconGif = "testdata/origin_icon_48x48.gif" - originImgIconTxt = "testdata/origin_icon_48x48.txt" + originImgDominantColorH = 219.6 + originImgDominantColorS = 0.5625 + originImgDominantColorV = 0.3137 + + originImgIconPng = "testdata/origin_icon_1_48x48.png" + originImgIconBmp = "testdata/origin_icon_1_48x48.bmp" + originImgIconGif = "testdata/origin_icon_1_48x48.gif" + originImgIconTxt = "testdata/origin_icon_1_48x48.txt" - originImgPngSmall = "testdata/origin_small_200x200.png" - originImgIconPng1 = "testdata/origin_icon_1_48x48.png" + originImgPngSmall = "testdata/origin_small_200x200.png" originImgNotImage = "testdata/origin_not_image" ) @@ -59,7 +60,7 @@ func (*testWrapper) TestGetImageFormat(c *C.C) { var f Format - f, _ = GetImageFormat(originImgIconPng1) + f, _ = GetImageFormat(originImgIconPng) c.Check(f, C.Equals, FormatPng) f, _ = GetImageFormat(originImgIconBmp) c.Check(f, C.Equals, FormatBmp) @@ -68,7 +69,7 @@ } func (*testWrapper) TestIsSupportedImage(c *C.C) { - c.Check(IsSupportedImage(originImgIconPng1), C.Equals, true) + c.Check(IsSupportedImage(originImgIconPng), C.Equals, true) c.Check(IsSupportedImage(originImgIconBmp), C.Equals, true) c.Check(IsSupportedImage(originImgIconGif), C.Equals, true) c.Check(IsSupportedImage(originImgIconTxt), C.Equals, false) Binary files /tmp/tmp2a1cqeqq/KamUlgCg1j/go-dlib-5.6.0.9+dfsg/gdkpixbuf/testdata/origin_1920x1080.jpg and /tmp/tmp2a1cqeqq/PBJiRIeXdP/go-dlib-5.7.12/gdkpixbuf/testdata/origin_1920x1080.jpg differ Binary files /tmp/tmp2a1cqeqq/KamUlgCg1j/go-dlib-5.6.0.9+dfsg/gdkpixbuf/testdata/origin_icon_1_48x48.bmp and /tmp/tmp2a1cqeqq/PBJiRIeXdP/go-dlib-5.7.12/gdkpixbuf/testdata/origin_icon_1_48x48.bmp differ Binary files /tmp/tmp2a1cqeqq/KamUlgCg1j/go-dlib-5.6.0.9+dfsg/gdkpixbuf/testdata/origin_icon_1_48x48.gif and /tmp/tmp2a1cqeqq/PBJiRIeXdP/go-dlib-5.7.12/gdkpixbuf/testdata/origin_icon_1_48x48.gif differ Binary files /tmp/tmp2a1cqeqq/KamUlgCg1j/go-dlib-5.6.0.9+dfsg/gdkpixbuf/testdata/origin_icon_1_48x48.png and /tmp/tmp2a1cqeqq/PBJiRIeXdP/go-dlib-5.7.12/gdkpixbuf/testdata/origin_icon_1_48x48.png differ diff -Nru go-dlib-5.6.0.9+dfsg/gdkpixbuf/testdata/origin_icon_1_48x48.txt go-dlib-5.7.12/gdkpixbuf/testdata/origin_icon_1_48x48.txt --- go-dlib-5.6.0.9+dfsg/gdkpixbuf/testdata/origin_icon_1_48x48.txt 1970-01-01 00:00:00.000000000 +0000 +++ go-dlib-5.7.12/gdkpixbuf/testdata/origin_icon_1_48x48.txt 2021-09-18 16:48:01.000000000 +0000 @@ -0,0 +1,32 @@ + + + .',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,'. + ..'''',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,'''.. + .','..'',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,''..','. + .'''.'';lxxxkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkxxdl;''''',. + .''',';:dKXXXXXXKXXXKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK0d:;'''''. + '''''ck0XXXXXXXXXKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKOxc''''' + '''''o0KKKXXXXXKKXXKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK00l''''. + .''''o0KXXXXXXXK00KKKKKKKKKKKKKKKKKKKKK000KKKKKKKK0Ol''''. + .''''l0KXXXK0OOkxxkOOOOO0K0OOOO00OOOOO0OkkOOOOKKKK0Ol''''. + .''''l0KKKKOkOOOxxdxxkkxxkxxkkxxkkkOOkxkxdxOOxkKKK0Ol''''. + .''''l00KKKOxkkkxxddxxxkkxddxxxkkxxOkxxxxox00xkKKK0Ol''''. + ....'l0KKKKK0OOOO00OOOO000OOOOOOkxkOOO00OO0KK00KKK0Ol'.... + .'l00KKKKKKKKKKKKKKKKKKKKKKKK000KKKKKKKKKKKKKKK0Ol'. + ..l00KKKKK000000KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK0Ol'. + ...'l00KKKK0OOOOOO00000000000KKKKKKKKKKKKKKKKKKKK0Ol'... + ..''''l00KKKK0OOOOOOOOOOOOOOOOOOOOOOOOOOOO00O000KKK0Ol''''.. + .'.''lO0KKKK0OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO0KKK0Ol''''. + .'.'.l00KKKK0OOOOOOOOOOOOOOOOOOOOOOOOOOOOO00000KKK0Ol'.... + .'''.l00KKKK0OOOOOOOOOOO000000000000000000KKKKKKKK0Ol..'.. + .....l00KKKK0OOOOOOOOOOO00000KKKKKKKKKKKKKKKKKKKKK0Ol..... + .....lO0KKKK00000000000000000KKKKKKKKKKKKKKKKKKK0K0Ol..... + .....ckOKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK00KOxc..... + .....,:d0KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK0Oo:,..... + .......,lkOO000000000000000000000000000000000OOOxl,....... + .......',;;:::::::::::::::::::::::::::::::::;;;,'....... + ........................................................ + .................................................. + + + Binary files /tmp/tmp2a1cqeqq/KamUlgCg1j/go-dlib-5.6.0.9+dfsg/gdkpixbuf/testdata/origin_icon_2_48x48.png and /tmp/tmp2a1cqeqq/PBJiRIeXdP/go-dlib-5.7.12/gdkpixbuf/testdata/origin_icon_2_48x48.png differ Binary files /tmp/tmp2a1cqeqq/KamUlgCg1j/go-dlib-5.6.0.9+dfsg/gdkpixbuf/testdata/origin_icon_48x48.bmp and /tmp/tmp2a1cqeqq/PBJiRIeXdP/go-dlib-5.7.12/gdkpixbuf/testdata/origin_icon_48x48.bmp differ Binary files /tmp/tmp2a1cqeqq/KamUlgCg1j/go-dlib-5.6.0.9+dfsg/gdkpixbuf/testdata/origin_icon_48x48.gif and /tmp/tmp2a1cqeqq/PBJiRIeXdP/go-dlib-5.7.12/gdkpixbuf/testdata/origin_icon_48x48.gif differ diff -Nru go-dlib-5.6.0.9+dfsg/gdkpixbuf/testdata/origin_icon_48x48.txt go-dlib-5.7.12/gdkpixbuf/testdata/origin_icon_48x48.txt --- go-dlib-5.6.0.9+dfsg/gdkpixbuf/testdata/origin_icon_48x48.txt 2020-11-13 14:56:32.000000000 +0000 +++ go-dlib-5.7.12/gdkpixbuf/testdata/origin_icon_48x48.txt 1970-01-01 00:00:00.000000000 +0000 @@ -1,24 +0,0 @@ - - voZXXXXXXXXXXXXXXXXs - ]SXXXXXXXXXXXXXXXXXXS( - oXXXXXX2!^=-+!1q2XXXXX - ZXXXXX":.--::.]#1XXXXX - XXXX2`:-_====.dm:SSXXX - XXXX'::=|||||> "$supplementFile" + done + #exit + echo "gotest dir:$(getTestPath)" + + env GOPATH="$(getGOPath)" go test $(getTestPath) -cover -coverprofile=coverage.data + env GOPATH="$(getGOPath)" go tool cover -func=coverage.data -o coverage.txt + # 下面命令可以生成查看具体覆盖情况的html文件 + #env GOPATH=$(getGOPath) go tool cover -html=coverage.data -o coverage.html + + find ./ -type f -name "auto_generate_temp_go_test.go" -exec rm -rf {} \; + + while read -r line + do + arrData=($line) + if [ ${#arrData[*]} != 3 ]; then + continue + fi + gRowTotal=$((gRowTotal+arrData[1])) + + if [ "${arrData[1]}" != "0" ] && [ "${arrData[2]}" != "0" ]; then + gRowHit=$((gRowHit+arrData[1])) + fi + done < coverage.data + rm coverage.data -f + + while read -r line + do + if [ ${line:0-5} != "0.0%" ]; then + ((gFuncHit++)) + fi + ((gFuncTotal++)) + done < coverage.txt + # 去掉最后一行统计 + ((gFuncHit--)) + ((gFuncTotal--)) +} + +function genHtml() { + + mkdir -pv ./cover_report + echo "generate html report." + curdir=$(pwd) + dirName=${curdir##*/} + + datetime=$(date +"%Y/%m/%d %H:%M:%S") + echo "" > $gHTMLFile + echo "" >> $gHTMLFile + echo "" >> $gHTMLFile + echo "

$dirName code coverage report - gotest[$datetime]

" >> $gHTMLFile + echo "
" >> $gHTMLFile + + rowCoverage=0 + if [ $gRowTotal -ne 0 ];then + rowCoverage=$(awk -v v1=$gRowHit -v v2=$gRowTotal 'BEGIN{printf "%.2f",v1*100/v2}') + fi + funcCoverage=0 + if [ $gFuncTotal -ne 0 ];then + funcCoverage=$(awk -v v1=$gFuncHit -v v2=$gFuncTotal 'BEGIN{printf "%.2f",v1*100/v2}') + fi + + echo "

total:

" >> $gHTMLFile + echo "" >> $gHTMLFile + echo "" >> $gHTMLFile + echo "" >> $gHTMLFile + echo "" >> $gHTMLFile + echo "
HitTotalCoverage
Lines$gRowHit$gRowTotal$rowCoverage%
Functions$gFuncHit$gFuncTotal$funcCoverage%
" >> $gHTMLFile + + echo "

per function:

" >> $gHTMLFile + echo "" >> $gHTMLFile + echo "" >> $gHTMLFile + while read line || [[ -n ${line} ]] + do + arrLine=($line) + if [ "${arrLine[0]}" == "total:" ];then + continue + fi + echo "" >> $gHTMLFile + done < coverage.txt + + echo "
go文件函数覆盖率
$dirName${arrLine[0]#*$dirName}${arrLine[1]}${arrLine[2]}
" >> $gHTMLFile + rm coverage.txt +} + +makeTest +genHtml Binary files /tmp/tmp2a1cqeqq/KamUlgCg1j/go-dlib-5.6.0.9+dfsg/gettext/testdata/locale_def/en_US.UTF-8/LC_ADDRESS and /tmp/tmp2a1cqeqq/PBJiRIeXdP/go-dlib-5.7.12/gettext/testdata/locale_def/en_US.UTF-8/LC_ADDRESS differ Binary files /tmp/tmp2a1cqeqq/KamUlgCg1j/go-dlib-5.6.0.9+dfsg/gettext/testdata/locale_def/en_US.UTF-8/LC_COLLATE and /tmp/tmp2a1cqeqq/PBJiRIeXdP/go-dlib-5.7.12/gettext/testdata/locale_def/en_US.UTF-8/LC_COLLATE differ Binary files /tmp/tmp2a1cqeqq/KamUlgCg1j/go-dlib-5.6.0.9+dfsg/gettext/testdata/locale_def/en_US.UTF-8/LC_CTYPE and /tmp/tmp2a1cqeqq/PBJiRIeXdP/go-dlib-5.7.12/gettext/testdata/locale_def/en_US.UTF-8/LC_CTYPE differ Binary files /tmp/tmp2a1cqeqq/KamUlgCg1j/go-dlib-5.6.0.9+dfsg/gettext/testdata/locale_def/en_US.UTF-8/LC_IDENTIFICATION and /tmp/tmp2a1cqeqq/PBJiRIeXdP/go-dlib-5.7.12/gettext/testdata/locale_def/en_US.UTF-8/LC_IDENTIFICATION differ Binary files /tmp/tmp2a1cqeqq/KamUlgCg1j/go-dlib-5.6.0.9+dfsg/gettext/testdata/locale_def/en_US.UTF-8/LC_MEASUREMENT and /tmp/tmp2a1cqeqq/PBJiRIeXdP/go-dlib-5.7.12/gettext/testdata/locale_def/en_US.UTF-8/LC_MEASUREMENT differ Binary files /tmp/tmp2a1cqeqq/KamUlgCg1j/go-dlib-5.6.0.9+dfsg/gettext/testdata/locale_def/en_US.UTF-8/LC_MESSAGES/SYS_LC_MESSAGES and /tmp/tmp2a1cqeqq/PBJiRIeXdP/go-dlib-5.7.12/gettext/testdata/locale_def/en_US.UTF-8/LC_MESSAGES/SYS_LC_MESSAGES differ Binary files /tmp/tmp2a1cqeqq/KamUlgCg1j/go-dlib-5.6.0.9+dfsg/gettext/testdata/locale_def/en_US.UTF-8/LC_MONETARY and /tmp/tmp2a1cqeqq/PBJiRIeXdP/go-dlib-5.7.12/gettext/testdata/locale_def/en_US.UTF-8/LC_MONETARY differ Binary files /tmp/tmp2a1cqeqq/KamUlgCg1j/go-dlib-5.6.0.9+dfsg/gettext/testdata/locale_def/en_US.UTF-8/LC_NAME and /tmp/tmp2a1cqeqq/PBJiRIeXdP/go-dlib-5.7.12/gettext/testdata/locale_def/en_US.UTF-8/LC_NAME differ Binary files /tmp/tmp2a1cqeqq/KamUlgCg1j/go-dlib-5.6.0.9+dfsg/gettext/testdata/locale_def/en_US.UTF-8/LC_NUMERIC and /tmp/tmp2a1cqeqq/PBJiRIeXdP/go-dlib-5.7.12/gettext/testdata/locale_def/en_US.UTF-8/LC_NUMERIC differ Binary files /tmp/tmp2a1cqeqq/KamUlgCg1j/go-dlib-5.6.0.9+dfsg/gettext/testdata/locale_def/en_US.UTF-8/LC_PAPER and /tmp/tmp2a1cqeqq/PBJiRIeXdP/go-dlib-5.7.12/gettext/testdata/locale_def/en_US.UTF-8/LC_PAPER differ Binary files /tmp/tmp2a1cqeqq/KamUlgCg1j/go-dlib-5.6.0.9+dfsg/gettext/testdata/locale_def/en_US.UTF-8/LC_TELEPHONE and /tmp/tmp2a1cqeqq/PBJiRIeXdP/go-dlib-5.7.12/gettext/testdata/locale_def/en_US.UTF-8/LC_TELEPHONE differ Binary files /tmp/tmp2a1cqeqq/KamUlgCg1j/go-dlib-5.6.0.9+dfsg/gettext/testdata/locale_def/en_US.UTF-8/LC_TIME and /tmp/tmp2a1cqeqq/PBJiRIeXdP/go-dlib-5.7.12/gettext/testdata/locale_def/en_US.UTF-8/LC_TIME differ diff -Nru go-dlib-5.6.0.9+dfsg/.gitignore go-dlib-5.7.12/.gitignore --- go-dlib-5.6.0.9+dfsg/.gitignore 2020-11-13 14:56:32.000000000 +0000 +++ go-dlib-5.7.12/.gitignore 1970-01-01 00:00:00.000000000 +0000 @@ -1,8 +0,0 @@ -*/*.test -_tmp -graphic/testdata/test_* -gdkpixbuf/testdata/test* -*.bak -_* -!dbusutil/_tool -**/*.test diff -Nru go-dlib-5.6.0.9+dfsg/graphic/graphic_test.go go-dlib-5.7.12/graphic/graphic_test.go --- go-dlib-5.6.0.9+dfsg/graphic/graphic_test.go 2020-11-13 14:56:32.000000000 +0000 +++ go-dlib-5.7.12/graphic/graphic_test.go 2021-09-18 16:48:03.000000000 +0000 @@ -29,21 +29,21 @@ originImg = "testdata/origin_1920x1080.jpg" originImgWidth = 1920 originImgHeight = 1080 - originImgDominantColorH = 198.6 - originImgDominantColorS = 0.40 - originImgDominantColorV = 0.43 - - originImgPngSmall = "testdata/origin_small_200x200.png" - originImgPngIcon1 = "testdata/origin_icon_1_48x48.png" - originImgPngIcon2 = "testdata/origin_icon_2_48x48.png" - originIconWidth = 48 - originIconHeight = 48 + originImgDominantColorH = 219.6 + originImgDominantColorS = 0.5625 + originImgDominantColorV = 0.3137 + + originImgPngSmall = "testdata/origin_small_200x200.png" + originImgPngIcon1 = "testdata/origin_icon_1_48x48.png" + originImgPngIcon2 = "testdata/origin_icon_2_48x48.png" + originIconWidth = 48 + originIconHeight = 48 originImgNotImage = "testdata/origin_not_image" ) // data uri for originImgPngIcon2 -const testDataUri = `data:image/png;base64,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` +const testDataUri = `data:image/png;base64,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` // Hook up gocheck into the "go test" runner. func Test(t *testing.T) { C.TestingT(t) } @@ -226,7 +226,7 @@ if delta(h, originImgDominantColorH) > 1 || delta(s, originImgDominantColorS) > 0.1 || delta(v, originImgDominantColorV) > 0.1 { - c.Error("h, s, v = ", h, s, v) + c.Error("dh, ds, dv, h, s, v = ", delta(h, originImgDominantColorH), delta(s, originImgDominantColorS), delta(v, originImgDominantColorV), h, s, v) } } @@ -456,11 +456,11 @@ formatName: "jpeg", }, { - file: "testdata/origin_icon.bmp", + file: "testdata/origin_icon_1_48x48.bmp", formatName: "bmp", }, { - file: "testdata/origin_icon.gif", + file: "testdata/origin_icon_1_48x48.gif", formatName: "gif", }, { Binary files /tmp/tmp2a1cqeqq/KamUlgCg1j/go-dlib-5.6.0.9+dfsg/graphic/testdata/origin_1920x1080.jpg and /tmp/tmp2a1cqeqq/PBJiRIeXdP/go-dlib-5.7.12/graphic/testdata/origin_1920x1080.jpg differ Binary files /tmp/tmp2a1cqeqq/KamUlgCg1j/go-dlib-5.6.0.9+dfsg/graphic/testdata/origin_icon_1_48x48.bmp and /tmp/tmp2a1cqeqq/PBJiRIeXdP/go-dlib-5.7.12/graphic/testdata/origin_icon_1_48x48.bmp differ Binary files /tmp/tmp2a1cqeqq/KamUlgCg1j/go-dlib-5.6.0.9+dfsg/graphic/testdata/origin_icon_1_48x48.gif and /tmp/tmp2a1cqeqq/PBJiRIeXdP/go-dlib-5.7.12/graphic/testdata/origin_icon_1_48x48.gif differ Binary files /tmp/tmp2a1cqeqq/KamUlgCg1j/go-dlib-5.6.0.9+dfsg/graphic/testdata/origin_icon_1_48x48.png and /tmp/tmp2a1cqeqq/PBJiRIeXdP/go-dlib-5.7.12/graphic/testdata/origin_icon_1_48x48.png differ diff -Nru go-dlib-5.6.0.9+dfsg/graphic/testdata/origin_icon_1_48x48.txt go-dlib-5.7.12/graphic/testdata/origin_icon_1_48x48.txt --- go-dlib-5.6.0.9+dfsg/graphic/testdata/origin_icon_1_48x48.txt 1970-01-01 00:00:00.000000000 +0000 +++ go-dlib-5.7.12/graphic/testdata/origin_icon_1_48x48.txt 2021-09-18 16:48:03.000000000 +0000 @@ -0,0 +1,32 @@ + + + .',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,'. + ..'''',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,'''.. + .','..'',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,''..','. + .'''.'';lxxxkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkxxdl;''''',. + .''',';:dKXXXXXXKXXXKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK0d:;'''''. + '''''ck0XXXXXXXXXKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKOxc''''' + '''''o0KKKXXXXXKKXXKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK00l''''. + .''''o0KXXXXXXXK00KKKKKKKKKKKKKKKKKKKKK000KKKKKKKK0Ol''''. + .''''l0KXXXK0OOkxxkOOOOO0K0OOOO00OOOOO0OkkOOOOKKKK0Ol''''. + .''''l0KKKKOkOOOxxdxxkkxxkxxkkxxkkkOOkxkxdxOOxkKKK0Ol''''. + .''''l00KKKOxkkkxxddxxxkkxddxxxkkxxOkxxxxox00xkKKK0Ol''''. + ....'l0KKKKK0OOOO00OOOO000OOOOOOkxkOOO00OO0KK00KKK0Ol'.... + .'l00KKKKKKKKKKKKKKKKKKKKKKKK000KKKKKKKKKKKKKKK0Ol'. + ..l00KKKKK000000KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK0Ol'. + ...'l00KKKK0OOOOOO00000000000KKKKKKKKKKKKKKKKKKKK0Ol'... + ..''''l00KKKK0OOOOOOOOOOOOOOOOOOOOOOOOOOOO00O000KKK0Ol''''.. + .'.''lO0KKKK0OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO0KKK0Ol''''. + .'.'.l00KKKK0OOOOOOOOOOOOOOOOOOOOOOOOOOOOO00000KKK0Ol'.... + .'''.l00KKKK0OOOOOOOOOOO000000000000000000KKKKKKKK0Ol..'.. + .....l00KKKK0OOOOOOOOOOO00000KKKKKKKKKKKKKKKKKKKKK0Ol..... + .....lO0KKKK00000000000000000KKKKKKKKKKKKKKKKKKK0K0Ol..... + .....ckOKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK00KOxc..... + .....,:d0KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK0Oo:,..... + .......,lkOO000000000000000000000000000000000OOOxl,....... + .......',;;:::::::::::::::::::::::::::::::::;;;,'....... + ........................................................ + .................................................. + + + Binary files /tmp/tmp2a1cqeqq/KamUlgCg1j/go-dlib-5.6.0.9+dfsg/graphic/testdata/origin_icon_2_48x48.png and /tmp/tmp2a1cqeqq/PBJiRIeXdP/go-dlib-5.7.12/graphic/testdata/origin_icon_2_48x48.png differ Binary files /tmp/tmp2a1cqeqq/KamUlgCg1j/go-dlib-5.6.0.9+dfsg/graphic/testdata/origin_icon.bmp and /tmp/tmp2a1cqeqq/PBJiRIeXdP/go-dlib-5.7.12/graphic/testdata/origin_icon.bmp differ Binary files /tmp/tmp2a1cqeqq/KamUlgCg1j/go-dlib-5.6.0.9+dfsg/graphic/testdata/origin_icon.gif and /tmp/tmp2a1cqeqq/PBJiRIeXdP/go-dlib-5.7.12/graphic/testdata/origin_icon.gif differ diff -Nru go-dlib-5.6.0.9+dfsg/graphic/testdata/origin_icon.txt go-dlib-5.7.12/graphic/testdata/origin_icon.txt --- go-dlib-5.6.0.9+dfsg/graphic/testdata/origin_icon.txt 2020-11-13 14:56:32.000000000 +0000 +++ go-dlib-5.7.12/graphic/testdata/origin_icon.txt 1970-01-01 00:00:00.000000000 +0000 @@ -1,24 +0,0 @@ - - voZXXXXXXXXXXXXXXXXs - ]SXXXXXXXXXXXXXXXXXXS( - oXXXXXX2!^=-+!1q2XXXXX - ZXXXXX":.--::.]#1XXXXX - XXXX2`:-_====.dm:SSXXX - XXXX'::=||||| diff -Nru go-dlib-5.6.0.9+dfsg/Makefile go-dlib-5.7.12/Makefile --- go-dlib-5.6.0.9+dfsg/Makefile 2020-11-13 14:56:32.000000000 +0000 +++ go-dlib-5.7.12/Makefile 2021-09-18 16:47:56.000000000 +0000 @@ -15,3 +15,9 @@ check_code_quality: prepare env GOPATH="${CURDIR}/${GOPATH_DIR}:${GOPATH}" go vet ./... + +test: prepare + env GOPATH="${CURDIR}/${GOBUILD_DIR}:${GOPATH}" go test -v ./... + +test-coverage: prepare + env GOPATH="${CURDIR}/${GOBUILD_DIR}:${GOPATH}" go test -cover -v ./... | awk '$$1 ~ "^(ok|\\?)" {print $$2","$$5}' | sed "s:${CURDIR}::g" | sed 's/files\]/0\.0%/g' > coverage.csv diff -Nru go-dlib-5.6.0.9+dfsg/.packit.yaml go-dlib-5.7.12/.packit.yaml --- go-dlib-5.6.0.9+dfsg/.packit.yaml 1970-01-01 00:00:00.000000000 +0000 +++ go-dlib-5.7.12/.packit.yaml 2021-09-18 16:47:56.000000000 +0000 @@ -0,0 +1,17 @@ +# See the documentation for more information: +# https://packit.dev/docs/configuration/ + +specfile_path: rpm/golang-deepin-go-lib.spec + +# add or remove files that should be synced +synced_files: + - rpm/golang-deepin-go-lib.spec + - .packit.yaml + +upstream_package_name: go-lib +# downstream (Fedora) RPM package name +downstream_package_name: golang-deepin-go-lib + +actions: + fix-spec-file: | + bash -c "sed -i -r \"0,/Version:/ s/Version:(\s*)\S*/Version:\1${PACKIT_PROJECT_VERSION}/\" rpm/golang-deepin-go-lib.spec" diff -Nru go-dlib-5.6.0.9+dfsg/pinyin/pinyin_test.go go-dlib-5.7.12/pinyin/pinyin_test.go --- go-dlib-5.6.0.9+dfsg/pinyin/pinyin_test.go 1970-01-01 00:00:00.000000000 +0000 +++ go-dlib-5.7.12/pinyin/pinyin_test.go 2021-09-18 16:48:05.000000000 +0000 @@ -0,0 +1,17 @@ +package pinyin + +import ( + "github.com/stretchr/testify/assert" + "testing" +) + +func Test_HansToPinyin(t *testing.T) { + pinyinMap := make(map[int]string) + array := HansToPinyin("统信软件") + for i, a := range array { + pinyinMap[i] = a + } + assert.Len(t, pinyinMap, 2) + assert.Equal(t, pinyinMap[0], "tongxinruanjian") + assert.Equal(t, pinyinMap[1], "tongshenruanjian") +} diff -Nru go-dlib-5.6.0.9+dfsg/proxy/proxy.go go-dlib-5.7.12/proxy/proxy.go --- go-dlib-5.6.0.9+dfsg/proxy/proxy.go 2020-11-13 14:56:32.000000000 +0000 +++ go-dlib-5.7.12/proxy/proxy.go 2021-09-18 16:48:06.000000000 +0000 @@ -142,10 +142,10 @@ case proxyModeAuto: doSetEnv(envAutoProxy, proxySettings.GetString(gkeyProxyAuto)) case proxyModeManual: - doSetEnv(envHttpProxy, getProxyValue(proxyTypeHttp)) - doSetEnv(envHttpsProxy, getProxyValue(proxyTypeHttps)) - doSetEnv(envFtpProxy, getProxyValue(proxyTypeFtp)) - doSetEnv(envSocksProxy, getProxyValue(proxyTypeSocks)) + doSetEnv(envHttpProxy, getProxyValue(proxyTypeHttp, proxyTypeHttp)) + doSetEnv(envHttpsProxy, getProxyValue(proxyTypeHttps, proxyTypeHttp)) + doSetEnv(envFtpProxy, getProxyValue(proxyTypeFtp, proxyTypeHttp)) + doSetEnv(envSocksProxy, getProxyValue(proxyTypeSocks, proxyTypeSocks)) arrayIgnoreHosts := proxySettings.GetStrv(gkeyProxyIgnoreHosts) ignoreHosts := strings.Join(arrayIgnoreHosts, ",") @@ -165,7 +165,7 @@ } } -func getProxyValue(proxyType string) (proxyValue string) { +func getProxyValue(proxyType string, protocol string) (proxyValue string) { childSettings, err := getProxyChildSettings(proxyType) if err != nil { return @@ -175,7 +175,7 @@ return } port := strconv.Itoa(int(childSettings.GetInt(gkeyProxyPort))) - proxyValue = fmt.Sprintf("%s://%s:%s", proxyType, host, port) + proxyValue = fmt.Sprintf("%s://%s:%s", protocol, host, port) return } diff -Nru go-dlib-5.6.0.9+dfsg/rpm/golang-deepin-go-lib.spec go-dlib-5.7.12/rpm/golang-deepin-go-lib.spec --- go-dlib-5.6.0.9+dfsg/rpm/golang-deepin-go-lib.spec 1970-01-01 00:00:00.000000000 +0000 +++ go-dlib-5.7.12/rpm/golang-deepin-go-lib.spec 2021-09-18 16:48:06.000000000 +0000 @@ -0,0 +1,85 @@ +# Run tests in check section +# disable for bootstrapping +%bcond_with check +%global import_path pkg.deepin.io/lib + +%global goipath pkg.deepin.io/lib +%global forgeurl https://github.com/linuxdeepin/go-lib + +%global with_debug 1 + +%if 0%{?with_debug} +%global debug_package %{nil} +%endif +%gometa + +Name: go-lib +Version: 5.7.5 +Release: 1 +Summary: Go bindings for Deepin Desktop Environment development +License: GPLv3 +URL: http://shuttle.corp.deepin.com/cache/tasks/18990/unstable-amd64/ +Source0: go-dlib_%{version}.orig.tar.xz +BuildRequires: compiler(go-compiler) + +%description +DLib is a set of Go bindings/libraries for DDE development. +Containing dbus (forking from guelfey), glib, gdkpixbuf, pulse and more. + +%package devel +Summary: %{summary} +BuildArch: noarch +%if %{with check} +# Required for tests +BuildRequires: deepin-gir-generator +BuildRequires: dbus-x11 +BuildRequires: iso-codes +BuildRequires: mobile-broadband-provider-info +BuildRequires: golang(github.com/linuxdeepin/go-x11-client) +BuildRequires: golang(github.com/smartystreets/goconvey/convey) +BuildRequires: golang(gopkg.in/check.v1) +BuildRequires: pkgconfig(gio-2.0) +BuildRequires: pkgconfig(gdk-3.0) +BuildRequires: pkgconfig(gdk-x11-3.0) +BuildRequires: pkgconfig(gdk-pixbuf-xlib-2.0) +BuildRequires: pkgconfig(libpulse) +%endif + +%description devel +%{summary}. + +Provides: golang(pkg.deepin.io/lib) + +This package contains library source intended for +building other packages which use import path with +%{goipath} prefix. + +%prep +%setup -q -n go-dlib-%{version} +%forgeautosetup -n go-dlib-%{version} + +%install +install -d -p %{buildroot}/%{gopath}/src/%{import_path}/ +for file in $(find . -iname "*.go" -o -iname "*.c" -o -iname "*.h") ; do + install -d -p %{buildroot}/%{gopath}/src/%{import_path}/$(dirname $file) + cp -pav $file %{buildroot}/%{gopath}/src/%{import_path}/$file + echo "%%{gopath}/src/%%{import_path}/$file" >> devel.file-list +done + +cp -pav README.md %{buildroot}/%{gopath}/src/%{goipath}/README.md +cp -pav CHANGELOG.md %{buildroot}/%{gopath}/src/%{goipath}/CHANGELOG.md +echo "%%{gopath}/src/%%{goipath}/README.md" >> devel.file-list +echo "%%{gopath}/src/%%{goipath}/CHANGELOG.md" >> devel.file-list + +%if %{with check} +%check +%gochecks +%endif + +%files devel -f devel.file-list +%doc README.md +%license LICENSE + +%changelog +* Wed Mar 12 2021 uoser - 5.7.5-1 +- Update to 5.7.5 \ No newline at end of file diff -Nru go-dlib-5.6.0.9+dfsg/sound/utils_test.go go-dlib-5.7.12/sound/utils_test.go --- go-dlib-5.6.0.9+dfsg/sound/utils_test.go 1970-01-01 00:00:00.000000000 +0000 +++ go-dlib-5.7.12/sound/utils_test.go 2021-09-18 16:48:06.000000000 +0000 @@ -0,0 +1,16 @@ +package sound + +import ( + "fmt" + "github.com/stretchr/testify/assert" + "testing" +) + +func Test_findThemeFile(t *testing.T) { + file, err := findThemeFile("freedesktop", "service-login") + if err != nil { + assert.Equal(t, err, fmt.Errorf("invalid theme event")) + } else { + assert.Equal(t, file, "/usr/share/sounds/freedesktop/stereo/service-login.oga") + } +} diff -Nru go-dlib-5.6.0.9+dfsg/users/group/group_test.go go-dlib-5.7.12/users/group/group_test.go --- go-dlib-5.6.0.9+dfsg/users/group/group_test.go 2020-11-13 14:56:32.000000000 +0000 +++ go-dlib-5.7.12/users/group/group_test.go 2021-09-18 16:48:06.000000000 +0000 @@ -57,5 +57,4 @@ func (*testWrapper) TestGetGroupEntry(c *C.C) { groups := GetGroupEntry() c.Check(len(groups), C.Not(C.Equals), 0) - c.Check(groups[0].Name, C.Equals, "root") } diff -Nru go-dlib-5.6.0.9+dfsg/utils/file.go go-dlib-5.7.12/utils/file.go --- go-dlib-5.6.0.9+dfsg/utils/file.go 2020-11-13 14:56:32.000000000 +0000 +++ go-dlib-5.7.12/utils/file.go 2021-09-18 16:48:07.000000000 +0000 @@ -177,6 +177,19 @@ return files, nil } +// 同步写入文件 +func SyncWriteFile(filename string, data []byte, perm os.FileMode) error { + f, err := os.OpenFile(filename, os.O_WRONLY|os.O_CREATE|os.O_SYNC|os.O_TRUNC, perm) + if err != nil { + return err + } + _, err = f.Write(data) + if err1 := f.Close(); err == nil { + err = err1 + } + return err +} + func iterCopyDir(src, dest string, mode os.FileMode) error { sr, err := os.Open(src) if err != nil {