138 lines
4.6 KiB
Go
138 lines
4.6 KiB
Go
package regression
|
|
|
|
import (
|
|
"modify/processor"
|
|
"modify/utils"
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
)
|
|
|
|
func ApiAdaptor(content string, regex string, lua string) (string, int, int, error) {
|
|
command := utils.ModifyCommand{
|
|
Regex: regex,
|
|
Lua: lua,
|
|
LogLevel: "TRACE",
|
|
}
|
|
|
|
commands, err := processor.ProcessRegex(content, command, "test")
|
|
if err != nil {
|
|
return "", 0, 0, err
|
|
}
|
|
|
|
result, modifications := utils.ExecuteModifications(commands, content)
|
|
return result, modifications, len(commands), nil
|
|
}
|
|
|
|
func TestTalentsMechanicOutOfRange(t *testing.T) {
|
|
given := `<Talent identifier="quickfixer">
|
|
<Icon texture="Content/UI/TalentsIcons2.png" sheetindex="5,2" sheetelementsize="128,128"/>
|
|
<Description tag="talentdescription.quickfixer">
|
|
<Replace tag="[amount]" value="20" color="gui.green"/>
|
|
<Replace tag="[duration]" value="10" color="gui.green"/>
|
|
</Description>
|
|
<Description tag="talentdescription.repairmechanicaldevicestwiceasfast"/>
|
|
<AbilityGroupEffect abilityeffecttype="None">
|
|
<Abilities>
|
|
<CharacterAbilityGiveStat stattype="MechanicalRepairSpeed" value="1"/>
|
|
</Abilities>
|
|
</AbilityGroupEffect>
|
|
<AbilityGroupEffect abilityeffecttype="OnRepairComplete">
|
|
<Conditions>
|
|
<AbilityConditionItem tags="fabricator,door,engine,oxygengenerator,pump,turretammosource,deconstructor,medicalfabricator,ductblock"/>
|
|
</Conditions>
|
|
<Abilities>
|
|
<CharacterAbilityApplyStatusEffects>
|
|
<StatusEffects>
|
|
<StatusEffect type="OnAbility" target="Character" disabledeltatime="true">
|
|
<Affliction identifier="quickfixer" amount="10.0"/>
|
|
</StatusEffect>
|
|
</StatusEffects>
|
|
</CharacterAbilityApplyStatusEffects>
|
|
</Abilities>
|
|
</AbilityGroupEffect>
|
|
</Talent>`
|
|
|
|
actual := `<Talent identifier="quickfixer">
|
|
<Icon texture="Content/UI/TalentsIcons2.png" sheetindex="5,2" sheetelementsize="128,128"/>
|
|
<Description tag="talentdescription.quickfixer">
|
|
<Replace tag="[amount]" value="30" color="gui.green"/>
|
|
<Replace tag="[duration]" value="20" color="gui.green"/>
|
|
</Description>
|
|
<Description tag="talentdescription.repairmechanicaldevicestwiceasfast"/>
|
|
<AbilityGroupEffect abilityeffecttype="None">
|
|
<Abilities>
|
|
<CharacterAbilityGiveStat stattype="MechanicalRepairSpeed" value="2"/>
|
|
</Abilities>
|
|
</AbilityGroupEffect>
|
|
<AbilityGroupEffect abilityeffecttype="OnRepairComplete">
|
|
<Conditions>
|
|
<AbilityConditionItem tags="fabricator,door,engine,oxygengenerator,pump,turretammosource,deconstructor,medicalfabricator,ductblock"/>
|
|
</Conditions>
|
|
<Abilities>
|
|
<CharacterAbilityApplyStatusEffects>
|
|
<StatusEffects>
|
|
<StatusEffect type="OnAbility" target="Character" disabledeltatime="true">
|
|
<Affliction identifier="quickfixer" amount="20"/>
|
|
</StatusEffect>
|
|
</StatusEffects>
|
|
</CharacterAbilityApplyStatusEffects>
|
|
</Abilities>
|
|
</AbilityGroupEffect>
|
|
</Talent>`
|
|
|
|
result, mods, matches, err := ApiAdaptor(given, `<Talent identifier="quickfixer">!anyvalue="(?<movementspeed>!num)"!anyvalue="(?<duration>!num)"!anyvalue="(?<repairspeed>!num)"!anyamount="(?<durationv>!num)"`, "movementspeed=round(movementspeed*1.5, 2) duration=round(duration*2, 2) repairspeed=round(repairspeed*2, 2) durationv=duration")
|
|
|
|
if err != nil {
|
|
t.Fatalf("Error processing content: %v", err)
|
|
}
|
|
|
|
if matches != 4 {
|
|
t.Errorf("Expected 4 matches, got %d", matches)
|
|
}
|
|
|
|
if mods != 4 {
|
|
t.Errorf("Expected 4 modifications, got %d", mods)
|
|
}
|
|
|
|
if result != actual {
|
|
t.Errorf("expected %s, got %s", actual, result)
|
|
}
|
|
}
|
|
|
|
func TestIndexExplosions_ShouldNotPanic(t *testing.T) {
|
|
cwd, err := os.Getwd()
|
|
if err != nil {
|
|
t.Fatalf("Error getting current working directory: %v", err)
|
|
}
|
|
|
|
given, err := os.ReadFile(filepath.Join(cwd, "..", "testfiles", "OutpostItems.xml"))
|
|
if err != nil {
|
|
t.Fatalf("Error reading file: %v", err)
|
|
}
|
|
|
|
expected, err := os.ReadFile(filepath.Join(cwd, "..", "testfiles", "OutpostItemsExpected.xml"))
|
|
if err != nil {
|
|
t.Fatalf("Error reading file: %v", err)
|
|
}
|
|
|
|
result, _, _, err := ApiAdaptor(string(given), `(?-s)LightComponent!anyrange="(!num)"`, "*4")
|
|
|
|
if err != nil {
|
|
t.Fatalf("Error processing content: %v", err)
|
|
}
|
|
|
|
// We don't really care how many god damn matches there are as long as the result is correct
|
|
// if matches != 45 {
|
|
// t.Errorf("Expected 45 match, got %d", matches)
|
|
// }
|
|
//
|
|
// if mods != 45 {
|
|
// t.Errorf("Expected 45 modification, got %d", mods)
|
|
// }
|
|
|
|
if string(result) != string(expected) {
|
|
t.Errorf("expected %s, got %s", expected, result)
|
|
}
|
|
}
|