Skip to content

Commit 63b3dc8

Browse files
authored
Fix auto-numbering of values on builder.EnumBuilder (#569)
1 parent 8baa453 commit 63b3dc8

File tree

2 files changed

+38
-6
lines changed

2 files changed

+38
-6
lines changed

desc/builder/builder_test.go

+33-2
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ package builder
22

33
import (
44
"fmt"
5-
"io/ioutil"
5+
"io"
66
"os"
77
"sort"
88
"strings"
@@ -549,7 +549,7 @@ func loadProtoset(path string) (*desc.FileDescriptor, error) {
549549
return nil, err
550550
}
551551
defer f.Close()
552-
bb, err := ioutil.ReadAll(f)
552+
bb, err := io.ReadAll(f)
553553
if err != nil {
554554
return nil, err
555555
}
@@ -1577,6 +1577,37 @@ func TestPruneDependencies(t *testing.T) {
15771577
testutil.Eq(t, extDesc.GetFile().GetName(), newFileDesc.GetDependencies()[0].GetName())
15781578
}
15791579

1580+
func TestInterleavedEnumNumbers(t *testing.T) {
1581+
en := NewEnum("Options").
1582+
AddValue(NewEnumValue("OPTION_1").SetNumber(-1)).
1583+
AddValue(NewEnumValue("OPTION_2")).
1584+
AddValue(NewEnumValue("OPTION_3").SetNumber(2)).
1585+
AddValue(NewEnumValue("OPTION_4").SetNumber(1)).
1586+
AddValue(NewEnumValue("OPTION_5")).
1587+
AddValue(NewEnumValue("OPTION_6").SetNumber(100))
1588+
1589+
ed, err := en.Build()
1590+
testutil.Ok(t, err)
1591+
1592+
testutil.Require(t, ed.FindValueByName("OPTION_1") != nil)
1593+
testutil.Eq(t, int32(-1), ed.FindValueByName("OPTION_1").GetNumber())
1594+
1595+
testutil.Require(t, ed.FindValueByName("OPTION_2") != nil)
1596+
testutil.Eq(t, int32(0), ed.FindValueByName("OPTION_2").GetNumber())
1597+
1598+
testutil.Require(t, ed.FindValueByName("OPTION_3") != nil)
1599+
testutil.Eq(t, int32(2), ed.FindValueByName("OPTION_3").GetNumber())
1600+
1601+
testutil.Require(t, ed.FindValueByName("OPTION_4") != nil)
1602+
testutil.Eq(t, int32(1), ed.FindValueByName("OPTION_4").GetNumber())
1603+
1604+
testutil.Require(t, ed.FindValueByName("OPTION_5") != nil)
1605+
testutil.Eq(t, int32(3), ed.FindValueByName("OPTION_5").GetNumber())
1606+
1607+
testutil.Require(t, ed.FindValueByName("OPTION_6") != nil)
1608+
testutil.Eq(t, int32(100), ed.FindValueByName("OPTION_6").GetNumber())
1609+
}
1610+
15801611
func TestInvalid(t *testing.T) {
15811612
testCases := []struct {
15821613
name string

desc/builder/enum.go

+5-4
Original file line numberDiff line numberDiff line change
@@ -250,10 +250,11 @@ func (eb *EnumBuilder) buildProto(path []int32, sourceInfo *descriptorpb.SourceC
250250

251251
if len(needNumbersAssigned) > 0 {
252252
tags := make([]int, len(values)-len(needNumbersAssigned))
253-
for i, ev := range values {
254-
tag := ev.GetNumber()
255-
if tag != 0 {
256-
tags[i] = int(tag)
253+
tagsIndex := 0
254+
for _, evb := range eb.values {
255+
if evb.numberSet {
256+
tags[tagsIndex] = int(evb.GetNumber())
257+
tagsIndex++
257258
}
258259
}
259260
sort.Ints(tags)

0 commit comments

Comments
 (0)