Переглянути джерело

Merge branch 'master' of https://github.com/ugorji/go

Include fixes to #301
Ugorji Nwoke 6 роки тому
батько
коміт
09134a0411
3 змінених файлів з 32 додано та 1 видалено
  1. 21 0
      codec/codec_test.go
  2. 1 1
      codec/helper.go
  3. 10 0
      codec/values_flex_test.go

+ 21 - 0
codec/codec_test.go

@@ -133,6 +133,7 @@ var (
 var wrapInt64Typ = reflect.TypeOf(wrapInt64(0))
 var wrapBytesTyp = reflect.TypeOf(wrapBytes(nil))
 var testSelfExtTyp = reflect.TypeOf((*TestSelfExtImpl)(nil)).Elem()
+var testSelfExt2Typ = reflect.TypeOf((*TestSelfExtImpl2)(nil)).Elem()
 
 func testByteBuf(in []byte) *bytes.Buffer {
 	return bytes.NewBuffer(in)
@@ -418,6 +419,12 @@ func testInit() {
 	chkErr(testJsonH.SetInterfaceExt(testSelfExtTyp, 78, SelfExt))
 	chkErr(testCborH.SetInterfaceExt(testSelfExtTyp, 78, SelfExt))
 
+	chkErr(testSimpleH.SetBytesExt(testSelfExt2Typ, 79, SelfExt))
+	chkErr(testMsgpackH.SetBytesExt(testSelfExt2Typ, 79, SelfExt))
+	chkErr(testBincH.SetBytesExt(testSelfExt2Typ, 79, SelfExt))
+	chkErr(testJsonH.SetInterfaceExt(testSelfExt2Typ, 79, SelfExt))
+	chkErr(testCborH.SetInterfaceExt(testSelfExt2Typ, 79, SelfExt))
+
 	// Now, add extensions for the type wrapInt64 and wrapBytes,
 	// so we can execute the Encode/Decode Ext paths.
 
@@ -2456,6 +2463,20 @@ func doTestSelfExt(t *testing.T, name string, h Handle) {
 	bs := testMarshalErr(&ts, h, t, name)
 	testUnmarshalErr(&ts2, bs, h, t, name)
 	testDeepEqualErr(&ts, &ts2, t, name)
+
+	var ts3 TestSelfExtImpl2
+	ts3.M = "moo"
+	ts3.O = true
+
+	s := TestTwoNakedInterfaces{
+		A: ts,
+		B: ts3,
+	}
+	var s2 TestTwoNakedInterfaces
+
+	bs = testMarshalErr(&s, h, t, name)
+	testUnmarshalErr(&s2, bs, h, t, name)
+	testDeepEqualErr(&s, &s2, t, name)
 }
 
 func doTestBytesEncodedAsArray(t *testing.T, name string, h Handle) {

+ 1 - 1
codec/helper.go

@@ -717,7 +717,7 @@ func (x *BasicHandle) fnVia(rt reflect.Type, fs *atomicRtidFnSlice, checkExt boo
 			copy(sp2, sp[:idx])
 			copy(sp2[idx+1:], sp[idx:])
 			sp2[idx] = codecRtidFn{rtid, fn}
-			x.rtidFns.store(sp2)
+			fs.store(sp2)
 			// xdebugf(">>>> adding rt: %v to rtidfns of size: %v", rt, len(sp2))
 
 		}

+ 10 - 0
codec/values_flex_test.go

@@ -146,6 +146,16 @@ type TestSelfExtImpl struct {
 	testSelfExtHelper
 }
 
+type TestSelfExtImpl2 struct {
+	M string
+	O bool
+}
+
+type TestTwoNakedInterfaces struct {
+	A interface{}
+	B interface{}
+}
+
 var testWRepeated512 wrapBytes
 var testStrucTime = time.Date(2012, 2, 2, 2, 2, 2, 2000, time.UTC).UTC()