mirror of
https://github.com/mikefarah/yq.git
synced 2025-01-13 11:55:38 +00:00
Handle numbers with underscores #2039
This commit is contained in:
parent
d58870b056
commit
68aafb6a53
@ -135,8 +135,12 @@ func recursiveNodeEqual(lhs *CandidateNode, rhs *CandidateNode) bool {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
// yaml numbers can be hex and octal encoded...
|
// yaml numbers can have underscores, be hex and octal encoded...
|
||||||
func parseInt64(numberString string) (string, int64, error) {
|
func parseInt64(numberString string) (string, int64, error) {
|
||||||
|
if strings.Contains(numberString, "_") {
|
||||||
|
numberString = strings.ReplaceAll(numberString, "_", "")
|
||||||
|
}
|
||||||
|
|
||||||
if strings.HasPrefix(numberString, "0x") ||
|
if strings.HasPrefix(numberString, "0x") ||
|
||||||
strings.HasPrefix(numberString, "0X") {
|
strings.HasPrefix(numberString, "0X") {
|
||||||
num, err := strconv.ParseInt(numberString[2:], 16, 64)
|
num, err := strconv.ParseInt(numberString[2:], 16, 64)
|
||||||
|
@ -106,6 +106,7 @@ func TestParseSnippet(t *testing.T) {
|
|||||||
type parseInt64Scenario struct {
|
type parseInt64Scenario struct {
|
||||||
numberString string
|
numberString string
|
||||||
expectedParsedNumber int64
|
expectedParsedNumber int64
|
||||||
|
expectedFormatString string
|
||||||
}
|
}
|
||||||
|
|
||||||
var parseInt64Scenarios = []parseInt64Scenario{
|
var parseInt64Scenarios = []parseInt64Scenario{
|
||||||
@ -113,10 +114,20 @@ var parseInt64Scenarios = []parseInt64Scenario{
|
|||||||
numberString: "34",
|
numberString: "34",
|
||||||
expectedParsedNumber: 34,
|
expectedParsedNumber: 34,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
numberString: "10_000",
|
||||||
|
expectedParsedNumber: 10000,
|
||||||
|
expectedFormatString: "10000",
|
||||||
|
},
|
||||||
{
|
{
|
||||||
numberString: "0x10",
|
numberString: "0x10",
|
||||||
expectedParsedNumber: 16,
|
expectedParsedNumber: 16,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
numberString: "0x10_000",
|
||||||
|
expectedParsedNumber: 65536,
|
||||||
|
expectedFormatString: "0x10000",
|
||||||
|
},
|
||||||
{
|
{
|
||||||
numberString: "0o10",
|
numberString: "0o10",
|
||||||
expectedParsedNumber: 8,
|
expectedParsedNumber: 8,
|
||||||
@ -132,7 +143,10 @@ func TestParseInt64(t *testing.T) {
|
|||||||
t.Error(err)
|
t.Error(err)
|
||||||
}
|
}
|
||||||
test.AssertResultComplexWithContext(t, tt.expectedParsedNumber, actualNumber, tt.numberString)
|
test.AssertResultComplexWithContext(t, tt.expectedParsedNumber, actualNumber, tt.numberString)
|
||||||
|
if tt.expectedFormatString == "" {
|
||||||
|
tt.expectedFormatString = tt.numberString
|
||||||
|
}
|
||||||
|
|
||||||
test.AssertResultComplexWithContext(t, tt.numberString, fmt.Sprintf(format, actualNumber), fmt.Sprintf("Formatting of: %v", tt.numberString))
|
test.AssertResultComplexWithContext(t, tt.expectedFormatString, fmt.Sprintf(format, actualNumber), fmt.Sprintf("Formatting of: %v", tt.numberString))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user