Integrate the xml processing with the rest of the project

This commit is contained in:
2025-12-19 11:44:07 +01:00
parent f1ea0f9156
commit 74394cbde9
4 changed files with 380 additions and 22 deletions

View File

@@ -33,21 +33,21 @@ func TestRealWorldGameXML(t *testing.T) {
// Modify: Double all MaxStack values and change Wood weight
modElem := deepCopyXMLElement(origElem)
// Fiber MaxStack: 1000 → 2000
fiberItem := modElem.Children[0]
fiberMaxStack := fiberItem.Children[2]
valueAttr := fiberMaxStack.Attributes["value"]
valueAttr.Value = "2000"
fiberMaxStack.Attributes["value"] = valueAttr
// Wood MaxStack: 500 → 1000
woodItem := modElem.Children[1]
woodMaxStack := woodItem.Children[2]
valueAttr2 := woodMaxStack.Attributes["value"]
valueAttr2.Value = "1000"
woodMaxStack.Attributes["value"] = valueAttr2
// Wood Weight: 0.05 → 0.10
woodWeight := woodItem.Children[1]
weightAttr := woodWeight.Attributes["value"]
@@ -56,7 +56,7 @@ func TestRealWorldGameXML(t *testing.T) {
// Generate changes
changes := findXMLChanges(origElem, modElem, "")
if len(changes) != 3 {
t.Fatalf("Expected 3 changes, got %d", len(changes))
}
@@ -102,13 +102,13 @@ func TestAddRemoveMultipleChildren(t *testing.T) {
// Remove middle two items, add a new one
modElem := deepCopyXMLElement(origElem)
// Remove shield and potion (indices 1 and 2)
modElem.Children = []*XMLElement{
modElem.Children[0], // sword
modElem.Children[3], // scroll
}
// Add a new item
newItem := &XMLElement{
Tag: "item",
@@ -121,14 +121,14 @@ func TestAddRemoveMultipleChildren(t *testing.T) {
// Generate changes
changes := findXMLChanges(origElem, modElem, "")
// The algorithm compares by matching indices:
// orig[0]=sword vs mod[0]=sword (no change)
// orig[1]=shield vs mod[1]=scroll (treated as replace - shows as attribute changes)
// orig[2]=potion vs mod[2]=helmet (treated as replace)
// orig[3]=scroll (removed)
// This is fine - the actual edits will be correct
if len(changes) == 0 {
t.Fatalf("Expected changes, got none")
}
@@ -170,14 +170,14 @@ func TestModifyAttributesAndText(t *testing.T) {
// Modify both items
modElem := deepCopyXMLElement(origElem)
// First item: change damage and text
item1 := modElem.Children[0]
dmgAttr := item1.Attributes["damage"]
dmgAttr.Value = "20"
item1.Attributes["damage"] = dmgAttr
item1.Text = "Steel Sword"
// Second item: change damage and type
item2 := modElem.Children[1]
dmgAttr2 := item2.Attributes["damage"]
@@ -253,7 +253,7 @@ func TestNumericAttributeModification(t *testing.T) {
// Double all numeric values
modElem := deepCopyXMLElement(origElem)
// Helper to modify numeric attributes
modifyNumericAttr := func(attrName string, multiplier float64) {
if attr, exists := modElem.Attributes[attrName]; exists {
@@ -263,18 +263,18 @@ func TestNumericAttributeModification(t *testing.T) {
}
}
}
modifyNumericAttr("health", 2.0)
modifyNumericAttr("mana", 2.0)
modifyNumericAttr("stamina", 2.0)
// Generate and apply changes
changes := findXMLChanges(origElem, modElem, "")
if len(changes) != 3 {
t.Fatalf("Expected 3 changes, got %d", len(changes))
}
commands := applyXMLChanges(changes)
result, _ := utils.ExecuteModifications(commands, original)
@@ -313,12 +313,12 @@ func TestMinimalGitDiff(t *testing.T) {
// Generate changes
changes := findXMLChanges(origElem, modElem, "")
// Should be exactly 1 change
if len(changes) != 1 {
t.Fatalf("Expected exactly 1 change for minimal diff, got %d", len(changes))
}
if changes[0].OldValue != "75" || changes[0].NewValue != "90" {
t.Errorf("Wrong change detected: %v", changes[0])
}