138 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			138 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package regression
 | |
| 
 | |
| import (
 | |
| 	"cook/processor"
 | |
| 	"cook/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)
 | |
| 	}
 | |
| }
 |