Fix broken test introduced in previous commit
This commit is contained in:
9
go.mod
9
go.mod
@@ -13,7 +13,6 @@ require (
|
|||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/davecgh/go-spew v1.1.1 // indirect
|
github.com/davecgh/go-spew v1.1.1 // indirect
|
||||||
github.com/google/go-cmp v0.6.0 // indirect
|
|
||||||
github.com/hexops/valast v1.5.0 // indirect
|
github.com/hexops/valast v1.5.0 // indirect
|
||||||
github.com/jinzhu/inflection v1.0.0 // indirect
|
github.com/jinzhu/inflection v1.0.0 // indirect
|
||||||
github.com/jinzhu/now v1.1.5 // indirect
|
github.com/jinzhu/now v1.1.5 // indirect
|
||||||
@@ -21,10 +20,8 @@ require (
|
|||||||
github.com/mattn/go-sqlite3 v1.14.22 // indirect
|
github.com/mattn/go-sqlite3 v1.14.22 // indirect
|
||||||
github.com/pmezard/go-difflib v1.0.0 // indirect
|
github.com/pmezard/go-difflib v1.0.0 // indirect
|
||||||
github.com/rogpeppe/go-internal v1.14.1 // indirect
|
github.com/rogpeppe/go-internal v1.14.1 // indirect
|
||||||
github.com/tidwall/gjson v1.18.0 // indirect
|
|
||||||
github.com/tidwall/match v1.1.1 // indirect
|
github.com/tidwall/match v1.1.1 // indirect
|
||||||
github.com/tidwall/pretty v1.2.0 // indirect
|
github.com/tidwall/pretty v1.2.0 // indirect
|
||||||
github.com/tidwall/sjson v1.2.5 // indirect
|
|
||||||
golang.org/x/mod v0.21.0 // indirect
|
golang.org/x/mod v0.21.0 // indirect
|
||||||
golang.org/x/sync v0.11.0 // indirect
|
golang.org/x/sync v0.11.0 // indirect
|
||||||
golang.org/x/text v0.22.0 // indirect
|
golang.org/x/text v0.22.0 // indirect
|
||||||
@@ -33,4 +30,8 @@ require (
|
|||||||
mvdan.cc/gofumpt v0.4.0 // indirect
|
mvdan.cc/gofumpt v0.4.0 // indirect
|
||||||
)
|
)
|
||||||
|
|
||||||
require gorm.io/driver/sqlite v1.6.0
|
require (
|
||||||
|
github.com/google/go-cmp v0.6.0
|
||||||
|
github.com/tidwall/gjson v1.18.0
|
||||||
|
gorm.io/driver/sqlite v1.6.0
|
||||||
|
)
|
||||||
|
3
go.sum
3
go.sum
@@ -36,15 +36,12 @@ github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0t
|
|||||||
github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc=
|
github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc=
|
||||||
github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
|
github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
|
||||||
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
|
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
|
||||||
github.com/tidwall/gjson v1.14.2/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
|
|
||||||
github.com/tidwall/gjson v1.18.0 h1:FIDeeyB800efLX89e5a8Y0BNH+LOngJyGrIWxG2FKQY=
|
github.com/tidwall/gjson v1.18.0 h1:FIDeeyB800efLX89e5a8Y0BNH+LOngJyGrIWxG2FKQY=
|
||||||
github.com/tidwall/gjson v1.18.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
|
github.com/tidwall/gjson v1.18.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
|
||||||
github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA=
|
github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA=
|
||||||
github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM=
|
github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM=
|
||||||
github.com/tidwall/pretty v1.2.0 h1:RWIZEg2iJ8/g6fDDYzMpobmaoGh5OLl4AXtGUGPcqCs=
|
github.com/tidwall/pretty v1.2.0 h1:RWIZEg2iJ8/g6fDDYzMpobmaoGh5OLl4AXtGUGPcqCs=
|
||||||
github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU=
|
github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU=
|
||||||
github.com/tidwall/sjson v1.2.5 h1:kLy8mja+1c9jlljvWTlSazM7cKDRfJuR/bOJhcY5NcY=
|
|
||||||
github.com/tidwall/sjson v1.2.5/go.mod h1:Fvgq9kS/6ociJEDnK0Fk1cpYF4FIW6ZF7LAe+6jwd28=
|
|
||||||
github.com/yuin/gopher-lua v1.1.1 h1:kYKnWBjvbNP4XLT3+bPEwAXJx262OhaHDWDVOPjL46M=
|
github.com/yuin/gopher-lua v1.1.1 h1:kYKnWBjvbNP4XLT3+bPEwAXJx262OhaHDWDVOPjL46M=
|
||||||
github.com/yuin/gopher-lua v1.1.1/go.mod h1:GBR0iDaNXjAgGg9zfCvksxSRnQx76gclCIb7kdAd1Pw=
|
github.com/yuin/gopher-lua v1.1.1/go.mod h1:GBR0iDaNXjAgGg9zfCvksxSRnQx76gclCIb7kdAd1Pw=
|
||||||
golang.org/x/mod v0.21.0 h1:vvrHzRwRfVKSiLrG+d4FMl/Qi4ukBCE6kZlTUkDYRT0=
|
golang.org/x/mod v0.21.0 h1:vvrHzRwRfVKSiLrG+d4FMl/Qi4ukBCE6kZlTUkDYRT0=
|
||||||
|
@@ -89,10 +89,11 @@ func ProcessJSON(content string, command utils.ModifyCommand, filename string) (
|
|||||||
return commands, fmt.Errorf("failed to convert Lua table back to Go: %v", err)
|
return commands, fmt.Errorf("failed to convert Lua table back to Go: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
commands, err = applyJSONChanges(content, jsonData, goData)
|
processJsonLogger.Debug("About to call applyChanges with original data and modified data")
|
||||||
|
commands, err = applyChanges(content, jsonData, goData)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
processJsonLogger.Error("Failed to apply JSON changes: %v", err)
|
processJsonLogger.Error("Failed to apply surgical JSON changes: %v", err)
|
||||||
return commands, fmt.Errorf("failed to apply JSON changes: %v", err)
|
return commands, fmt.Errorf("failed to apply surgical JSON changes: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
processJsonLogger.Debug("Total JSON processing time: %v", time.Since(startTime))
|
processJsonLogger.Debug("Total JSON processing time: %v", time.Since(startTime))
|
||||||
@@ -145,24 +146,23 @@ func applyChanges(content string, originalData, modifiedData interface{}) ([]uti
|
|||||||
// Apply removals first (from end to beginning to avoid index shifting)
|
// Apply removals first (from end to beginning to avoid index shifting)
|
||||||
for _, removalPath := range removals {
|
for _, removalPath := range removals {
|
||||||
actualPath := strings.TrimSuffix(removalPath, "@remove")
|
actualPath := strings.TrimSuffix(removalPath, "@remove")
|
||||||
index := extractIndexFromRemovalPath(removalPath)
|
elementIndex := extractIndexFromRemovalPath(actualPath)
|
||||||
arrayPath := getArrayPathFromElementPath(actualPath)
|
arrayPath := getArrayPathFromElementPath(actualPath)
|
||||||
|
|
||||||
// Get the array element to remove
|
jsonLogger.Debug("Processing removal: path=%s, index=%d, arrayPath=%s", actualPath, elementIndex, arrayPath)
|
||||||
result := gjson.Get(content, actualPath)
|
|
||||||
if !result.Exists() {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
// Find the exact byte range to remove (including comma/formatting)
|
// Find the exact byte range to remove
|
||||||
startPos, endPos := findArrayElementRemovalRange(content, arrayPath, index)
|
from, to := findArrayElementRemovalRange(content, arrayPath, elementIndex)
|
||||||
if startPos >= 0 && endPos > startPos {
|
|
||||||
commands = append(commands, utils.ReplaceCommand{
|
jsonLogger.Debug("Removing bytes %d-%d", from, to)
|
||||||
From: startPos,
|
|
||||||
To: endPos,
|
commands = append(commands, utils.ReplaceCommand{
|
||||||
With: "", // Remove the element
|
From: from,
|
||||||
})
|
To: to,
|
||||||
}
|
With: "",
|
||||||
|
})
|
||||||
|
|
||||||
|
jsonLogger.Debug("Added removal command: From=%d, To=%d, With=\"\"", from, to)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Apply additions (new fields)
|
// Apply additions (new fields)
|
||||||
@@ -199,11 +199,12 @@ func applyChanges(content string, originalData, modifiedData interface{}) ([]uti
|
|||||||
|
|
||||||
// Convert the new value to JSON string
|
// Convert the new value to JSON string
|
||||||
newValueStr := convertValueToJSONString(newValue)
|
newValueStr := convertValueToJSONString(newValue)
|
||||||
|
|
||||||
// Insert the new field
|
|
||||||
insertText := fmt.Sprintf(`,"%s":%s`, fieldName, newValueStr)
|
// Insert the new field with pretty-printed formatting
|
||||||
|
// Format: ,"fieldName": { ... }
|
||||||
jsonLogger.Debug("Inserting text: %q", insertText)
|
insertText := fmt.Sprintf(`,"%s": %s`, fieldName, newValueStr)
|
||||||
|
|
||||||
|
|
||||||
commands = append(commands, utils.ReplaceCommand{
|
commands = append(commands, utils.ReplaceCommand{
|
||||||
From: startPos,
|
From: startPos,
|
||||||
@@ -311,10 +312,31 @@ func convertValueToJSONString(value interface{}) string {
|
|||||||
return strconv.FormatBool(v)
|
return strconv.FormatBool(v)
|
||||||
case nil:
|
case nil:
|
||||||
return "null"
|
return "null"
|
||||||
|
case map[string]interface{}:
|
||||||
|
// Handle maps specially to avoid double-escaping of keys
|
||||||
|
var pairs []string
|
||||||
|
for key, val := range v {
|
||||||
|
// The key might already have escaped quotes from Lua, so we need to be careful
|
||||||
|
// If the key already contains escaped quotes, we need to unescape them first
|
||||||
|
keyStr := key
|
||||||
|
if strings.Contains(key, `\"`) {
|
||||||
|
// Key already has escaped quotes, use it as-is
|
||||||
|
keyStr = `"` + key + `"`
|
||||||
|
} else {
|
||||||
|
// Normal key, escape quotes
|
||||||
|
keyStr = `"` + strings.ReplaceAll(key, `"`, `\"`) + `"`
|
||||||
|
}
|
||||||
|
valStr := convertValueToJSONString(val)
|
||||||
|
pairs = append(pairs, keyStr+":"+valStr)
|
||||||
|
}
|
||||||
|
return "{" + strings.Join(pairs, ",") + "}"
|
||||||
default:
|
default:
|
||||||
// For complex types, we need to avoid json.Marshal
|
// For other complex types (arrays), we need to use json.Marshal
|
||||||
// This should not happen if we're doing true surgical edits
|
jsonBytes, err := json.Marshal(v)
|
||||||
return ""
|
if err != nil {
|
||||||
|
return "null" // Fallback to null if marshaling fails
|
||||||
|
}
|
||||||
|
return string(jsonBytes)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -3,6 +3,8 @@ package processor
|
|||||||
import (
|
import (
|
||||||
"cook/utils"
|
"cook/utils"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/google/go-cmp/cmp"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestSurgicalJSONEditing(t *testing.T) {
|
func TestSurgicalJSONEditing(t *testing.T) {
|
||||||
@@ -591,6 +593,7 @@ func TestRetardedJSONEditing(t *testing.T) {
|
|||||||
for _, cmd := range commands {
|
for _, cmd := range commands {
|
||||||
result = result[:cmd.From] + cmd.With + result[cmd.To:]
|
result = result[:cmd.From] + cmd.With + result[cmd.To:]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Check that the weight was changed
|
// Check that the weight was changed
|
||||||
if result != expected {
|
if result != expected {
|
||||||
@@ -777,9 +780,7 @@ func TestRetardedJSONEditing2(t *testing.T) {
|
|||||||
],
|
],
|
||||||
"ParentTags": []
|
"ParentTags": []
|
||||||
}
|
}
|
||||||
,"AdditionalStats": {
|
,"AdditionalStats": {"(Value=\"BaseDeepMiningDrillSpeed_+%\")":4000}}
|
||||||
"(Value=\"BaseDeepMiningDrillSpeed_+%\")": 4000
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@@ -818,8 +819,9 @@ func TestRetardedJSONEditing2(t *testing.T) {
|
|||||||
result = result[:cmd.From] + cmd.With + result[cmd.To:]
|
result = result[:cmd.From] + cmd.With + result[cmd.To:]
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check that the weight was changed
|
|
||||||
if result != expected {
|
diff := cmp.Diff(result, expected)
|
||||||
t.Errorf("Expected:\n%s\nGot:\n%s", expected, result)
|
if diff != "" {
|
||||||
}
|
t.Errorf("Differences:\n%s", diff)
|
||||||
|
}
|
||||||
}
|
}
|
Reference in New Issue
Block a user