blob: 689b5405fe0f13048e82054e666793cd804bcd9b [file] [log] [blame]
// Copyright 2024 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package fix
import "testing"
func TestSetterSwap(t *testing.T) {
tests := []test{
{
desc: "int32 swap",
srcfiles: []string{"pkg.go"},
in: `
mypb := &pb2.M2{
I32: proto.Int32(23),
Build: proto.Int32(42),
}
mypb.I32, mypb.Build = mypb.Build, mypb.I32
`,
want: map[Level]string{
Green: `
mypb := &pb2.M2{}
mypb.SetI32(23)
mypb.SetBuild_(42)
mypb.I32, mypb.Build = mypb.Build, mypb.I32
`,
Yellow: `
mypb := &pb2.M2{}
mypb.SetI32(23)
mypb.SetBuild_(42)
m2h2, m2h3 := proto.ValueOrNil(mypb.HasBuild_(), mypb.GetBuild_), proto.ValueOrNil(mypb.HasI32(), mypb.GetI32)
mypb.I32 = m2h2
mypb.Build = m2h3
`,
Red: `
mypb := &pb2.M2{}
mypb.SetI32(23)
mypb.SetBuild_(42)
m2h2, m2h3 := proto.ValueOrNil(mypb.HasBuild_(), mypb.GetBuild_), proto.ValueOrNil(mypb.HasI32(), mypb.GetI32)
if m2h2 != nil {
mypb.SetI32(*m2h2)
} else {
mypb.ClearI32()
}
if m2h3 != nil {
mypb.SetBuild_(*m2h3)
} else {
mypb.ClearBuild_()
}
`,
},
},
{
desc: "int32 oneof copy",
srcfiles: []string{"pkg.go"},
extra: `func defaultVal() *pb2.M2 { return nil }`,
in: `
mypb := &pb2.M2{
M: &pb2.M2{
OneofField: &pb2.M2_IntOneof{
IntOneof: 23,
},
},
}
mypb.M.OneofField = defaultVal().M.OneofField
`,
want: map[Level]string{
Green: `
m2h2 := &pb2.M2{}
m2h2.SetIntOneof(23)
mypb := &pb2.M2{}
mypb.SetM(m2h2)
mypb.GetM().OneofField = defaultVal().GetM().OneofField
`,
Yellow: `
m2h2 := &pb2.M2{}
m2h2.SetIntOneof(23)
mypb := &pb2.M2{}
mypb.SetM(m2h2)
mypb.GetM().OneofField = defaultVal().GetM().OneofField
`,
},
},
{
desc: "int32 proto3 getter swap",
srcfiles: []string{"pkg.go"},
in: `
mypb := pb3.M3_builder{
I32: 23,
SecondI32: 42,
}.Build()
mypb.I32, mypb.SecondI32 = mypb.GetSecondI32(), mypb.GetI32()
`,
want: map[Level]string{
Green: `
mypb := pb3.M3_builder{
I32: 23,
SecondI32: 42,
}.Build()
mypb.I32, mypb.SecondI32 = mypb.GetSecondI32(), mypb.GetI32()
`,
Yellow: `
mypb := pb3.M3_builder{
I32: 23,
SecondI32: 42,
}.Build()
m3h2, m3h3 := mypb.GetSecondI32(), mypb.GetI32()
mypb.SetI32(m3h2)
mypb.SetSecondI32(m3h3)
`,
Red: `
mypb := pb3.M3_builder{
I32: 23,
SecondI32: 42,
}.Build()
m3h2, m3h3 := mypb.GetSecondI32(), mypb.GetI32()
mypb.SetI32(m3h2)
mypb.SetSecondI32(m3h3)
`,
},
},
{
desc: "int32 nested proto3 getter swap",
srcfiles: []string{"pkg.go"},
in: `
mypb := pb3.M3_builder{
M: pb3.M3_builder{
I32: 23,
SecondI32: 42,
}.Build(),
}.Build()
mypb.M.I32, mypb.M.SecondI32 = mypb.M.GetSecondI32(), mypb.M.GetI32()
`,
want: map[Level]string{
Green: `
mypb := pb3.M3_builder{
M: pb3.M3_builder{
I32: 23,
SecondI32: 42,
}.Build(),
}.Build()
mypb.GetM().I32, mypb.GetM().SecondI32 = mypb.GetM().GetSecondI32(), mypb.GetM().GetI32()
`,
Yellow: `
mypb := pb3.M3_builder{
M: pb3.M3_builder{
I32: 23,
SecondI32: 42,
}.Build(),
}.Build()
m3h2, m3h3 := mypb.GetM().GetSecondI32(), mypb.GetM().GetI32()
mypb.GetM().SetI32(m3h2)
mypb.GetM().SetSecondI32(m3h3)
`,
Red: `
mypb := pb3.M3_builder{
M: pb3.M3_builder{
I32: 23,
SecondI32: 42,
}.Build(),
}.Build()
m3h2, m3h3 := mypb.GetM().GetSecondI32(), mypb.GetM().GetI32()
mypb.GetM().SetI32(m3h2)
mypb.GetM().SetSecondI32(m3h3)
`,
},
},
{
desc: "int32 double-nested proto3 getter swap",
srcfiles: []string{"pkg.go"},
in: `
mypb := pb3.M3_builder{
M: pb3.M3_builder{
M: pb3.M3_builder{
I32: 23,
SecondI32: 42,
}.Build(),
}.Build(),
}.Build()
mypb.M.M.I32, mypb.M.M.SecondI32 = mypb.M.M.GetSecondI32(), mypb.M.M.GetI32()
`,
want: map[Level]string{
Green: `
mypb := pb3.M3_builder{
M: pb3.M3_builder{
M: pb3.M3_builder{
I32: 23,
SecondI32: 42,
}.Build(),
}.Build(),
}.Build()
mypb.GetM().GetM().I32, mypb.GetM().GetM().SecondI32 = mypb.GetM().GetM().GetSecondI32(), mypb.GetM().GetM().GetI32()
`,
Yellow: `
mypb := pb3.M3_builder{
M: pb3.M3_builder{
M: pb3.M3_builder{
I32: 23,
SecondI32: 42,
}.Build(),
}.Build(),
}.Build()
m3h2, m3h3 := mypb.GetM().GetM().GetSecondI32(), mypb.GetM().GetM().GetI32()
mypb.GetM().GetM().SetI32(m3h2)
mypb.GetM().GetM().SetSecondI32(m3h3)
`,
Red: `
mypb := pb3.M3_builder{
M: pb3.M3_builder{
M: pb3.M3_builder{
I32: 23,
SecondI32: 42,
}.Build(),
}.Build(),
}.Build()
m3h2, m3h3 := mypb.GetM().GetM().GetSecondI32(), mypb.GetM().GetM().GetI32()
mypb.GetM().GetM().SetI32(m3h2)
mypb.GetM().GetM().SetSecondI32(m3h3)
`,
},
},
}
runTableTests(t, tests)
}