Skip to content

Commit 9bdfb7e

Browse files
fix: properly parse players with 'and' in their names (#323)
* add test and testdata for character Mieluffy * fix: properly parse players with 'and' in their names --------- Co-authored-by: Tobias Lindberg <tobias.ehlert@gmail.com>
1 parent 4405dc6 commit 9bdfb7e

File tree

3 files changed

+965
-6
lines changed

3 files changed

+965
-6
lines changed

src/TibiaCharactersCharacter.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -484,13 +484,13 @@ func TibiaCharactersCharacterImpl(BoxContentHTML string) (CharacterResponse, err
484484
// get a list of killers
485485
ListOfKillers := strings.Split(rawListofKillers, ", ")
486486

487-
// extract if "and" is in last ss1
488-
ListOfKillersTmp := strings.Split(ListOfKillers[len(ListOfKillers)-1], " and ")
487+
const andStr = " and "
488+
lastItem := ListOfKillers[len(ListOfKillers)-1]
489+
lastAndIdx := strings.LastIndex(lastItem, andStr)
489490

490-
// if there is an "and", then we split it..
491-
if len(ListOfKillersTmp) > 1 {
492-
ListOfKillers[len(ListOfKillers)-1] = ListOfKillersTmp[0]
493-
ListOfKillers = append(ListOfKillers, ListOfKillersTmp[1])
491+
if lastAndIdx > -1 {
492+
ListOfKillers[len(ListOfKillers)-1] = lastItem[:lastAndIdx]
493+
ListOfKillers = append(ListOfKillers, lastItem[lastAndIdx+len(andStr):])
494494
}
495495

496496
// loop through all killers and append to result

src/TibiaCharactersCharacter_test.go

Lines changed: 160 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2901,6 +2901,166 @@ func TestNumber7(t *testing.T) {
29012901
assert.Equal("___$$$$$$$$_______$$$$$$$$\n_$$$$$$$$$$$$__$$$$$$$$$$$$$$\n$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n_$$$$$$$$$$-Snulliz-$$$$$$$$$$$\n__$$$$$$$$$$$$$$$$$$$$$$$$$$\n____$$$$$$$$$$$$$$$$$$$$$$\n______$$$$$$$$$$$$$$$$$$\n________$$$$$$$$$$$$$$\n___________$$$$$$$$$\n____________$$$$$$\n_____________$$", character.Comment)
29022902
}
29032903

2904+
func TestNumber8(t *testing.T) {
2905+
file, err := static.TestFiles.Open("testdata/characters/Mieluffy.html")
2906+
if err != nil {
2907+
t.Fatalf("file opening error: %s", err)
2908+
}
2909+
defer file.Close()
2910+
2911+
data, err := io.ReadAll(file)
2912+
if err != nil {
2913+
t.Fatalf("File reading error: %s", err)
2914+
}
2915+
2916+
characterJson, err := TibiaCharactersCharacterImpl(string(data))
2917+
if err != nil {
2918+
t.Fatal(err)
2919+
}
2920+
2921+
assert := assert.New(t)
2922+
character := characterJson.Character.CharacterInfo
2923+
2924+
assert.Len(characterJson.Character.Achievements, 0)
2925+
assert.Equal("Mieluffy", character.Name)
2926+
assert.False(characterJson.Character.DeathsTruncated)
2927+
2928+
// validate death data
2929+
assert.Equal(4, len(characterJson.Character.Deaths))
2930+
deaths := characterJson.Character.Deaths
2931+
2932+
for idx, tc := range []struct {
2933+
Assists []Killers
2934+
Killers []Killers
2935+
Level int
2936+
Reason string
2937+
Time string
2938+
}{
2939+
{
2940+
Assists: []Killers{
2941+
{Name: "Merlinxd", Player: true, Traded: false, Summon: ""},
2942+
{Name: "Paletero Kriminal", Player: true, Traded: false, Summon: ""},
2943+
},
2944+
Killers: []Killers{
2945+
{Name: "Pecas Creator", Player: true, Traded: false, Summon: ""},
2946+
{Name: "El Unico", Player: true, Traded: false, Summon: ""},
2947+
{Name: "Supperiore", Player: true, Traded: false, Summon: ""},
2948+
{Name: "Flaco El Pobre", Player: true, Traded: false, Summon: ""},
2949+
{Name: "Rii Rox", Player: true, Traded: false, Summon: ""},
2950+
{Name: "Tiz to", Player: true, Traded: false, Summon: ""},
2951+
{Name: "True Merlinus Druid", Player: true, Traded: false, Summon: ""},
2952+
{Name: "Antii Druida", Player: true, Traded: false, Summon: ""},
2953+
{Name: "El Inestable", Player: true, Traded: false, Summon: ""},
2954+
{Name: "Ga to Relaxsz", Player: true, Traded: false, Summon: ""},
2955+
{Name: "Frodin la Maquina", Player: true, Traded: false, Summon: ""},
2956+
{Name: "Mich Jogadorcaro", Player: true, Traded: false, Summon: ""},
2957+
},
2958+
Level: 508,
2959+
Reason: "Crushed at Level 508 by Pecas Creator, El Unico, Supperiore, Flaco El Pobre, Rii Rox, Tiz to, True Merlinus Druid, Antii Druida, El Inestable, Ga to Relaxsz, Frodin la Maquina and Mich Jogadorcaro. Assisted by Merlinxd and Paletero Kriminal.",
2960+
Time: "2024-02-01T06:20:46Z",
2961+
},
2962+
{
2963+
Assists: []Killers{},
2964+
Killers: []Killers{
2965+
{Name: "El Unico", Player: true, Traded: false, Summon: ""},
2966+
{Name: "Naireth Sorcerer", Player: true, Traded: false, Summon: ""},
2967+
{Name: "Pedritox Soulfire", Player: true, Traded: false, Summon: ""},
2968+
{Name: "Pepiisho", Player: true, Traded: false, Summon: ""},
2969+
{Name: "Egon Leme", Player: true, Traded: false, Summon: ""},
2970+
{Name: "Queen Marii", Player: true, Traded: false, Summon: ""},
2971+
{Name: "Jicuri Guardian", Player: true, Traded: false, Summon: ""},
2972+
{Name: "Athob Senian", Player: true, Traded: false, Summon: ""},
2973+
{Name: "Noo Friends", Player: true, Traded: false, Summon: ""},
2974+
{Name: "Dhanielz Unstoppable", Player: true, Traded: false, Summon: ""},
2975+
{Name: "Ilysz Sin Tales", Player: true, Traded: false, Summon: ""},
2976+
{Name: "Spy Crusitho Sauvage", Player: true, Traded: false, Summon: ""},
2977+
{Name: "Tiz to", Player: true, Traded: false, Summon: ""},
2978+
{Name: "King Asmiito", Player: true, Traded: false, Summon: ""},
2979+
{Name: "Bolchecoqe", Player: true, Traded: false, Summon: ""},
2980+
{Name: "Jobi", Player: true, Traded: false, Summon: ""},
2981+
{Name: "El Inestable", Player: true, Traded: false, Summon: ""},
2982+
{Name: "Bloomzs", Player: true, Traded: false, Summon: ""},
2983+
{Name: "Natalie Bearskin", Player: true, Traded: false, Summon: ""},
2984+
},
2985+
Level: 508,
2986+
Reason: "Eliminated at Level 508 by El Unico, Naireth Sorcerer, Pedritox Soulfire, Pepiisho, Egon Leme, Queen Marii, Jicuri Guardian, Athob Senian, Noo Friends, Dhanielz Unstoppable, Ilysz Sin Tales, Spy Crusitho Sauvage, Tiz to, King Asmiito, Bolchecoqe, Jobi, El Inestable, Bloomzs and Natalie Bearskin.",
2987+
Time: "2024-02-01T04:53:23Z",
2988+
},
2989+
{
2990+
Assists: []Killers{
2991+
{Name: "Swiifti", Player: true, Traded: false, Summon: ""},
2992+
{Name: "Duende blanco", Player: true, Traded: false, Summon: ""},
2993+
},
2994+
Killers: []Killers{
2995+
{Name: "Shantty", Player: true, Traded: false, Summon: ""},
2996+
{Name: "Sin Primalbazzar", Player: true, Traded: false, Summon: ""},
2997+
{Name: "Supperiore", Player: true, Traded: false, Summon: ""},
2998+
{Name: "Righo", Player: true, Traded: false, Summon: ""},
2999+
{Name: "Beltran Tzawayak", Player: true, Traded: false, Summon: ""},
3000+
{Name: "Ilysz Sin Tales", Player: true, Traded: false, Summon: ""},
3001+
{Name: "Flaco El Pobre", Player: true, Traded: false, Summon: ""},
3002+
{Name: "Pecaas", Player: true, Traded: false, Summon: ""},
3003+
{Name: "Knightsitaz", Player: true, Traded: false, Summon: ""},
3004+
{Name: "Dhanielz Acorazado", Player: true, Traded: false, Summon: ""},
3005+
{Name: "Jobi", Player: true, Traded: false, Summon: ""},
3006+
{Name: "Aeronabic", Player: true, Traded: false, Summon: ""},
3007+
{Name: "Side Effectss", Player: true, Traded: false, Summon: ""},
3008+
{Name: "Ekizdd", Player: true, Traded: false, Summon: ""},
3009+
{Name: "Baby Mikoh", Player: true, Traded: false, Summon: ""},
3010+
{Name: "Sneki", Player: true, Traded: false, Summon: ""},
3011+
{Name: "Love and Death", Player: true, Traded: true, Summon: ""},
3012+
{Name: "Next Generation", Player: true, Traded: false, Summon: ""},
3013+
},
3014+
Level: 508,
3015+
Reason: "Eliminated at Level 508 by Shantty, Sin Primalbazzar, Supperiore, Righo, Beltran Tzawayak, Ilysz Sin Tales, Flaco El Pobre, Pecaas, Knightsitaz, Dhanielz Acorazado, Jobi, Aeronabic, Side Effectss, Ekizdd, Baby Mikoh, Sneki, Love and Death (traded) and Next Generation. Assisted by Swiifti and Duende blanco.",
3016+
Time: "2024-01-12T19:38:09Z",
3017+
},
3018+
{
3019+
Assists: []Killers{},
3020+
Killers: []Killers{
3021+
{Name: "Sir Alpha", Player: true, Traded: false, Summon: ""},
3022+
{Name: "Chic Unixzion", Player: true, Traded: false, Summon: ""},
3023+
{Name: "Cadiwax", Player: true, Traded: false, Summon: ""},
3024+
{Name: "Pecaas", Player: true, Traded: false, Summon: ""},
3025+
{Name: "Eveo Zeff", Player: true, Traded: false, Summon: ""},
3026+
{Name: "Monkey Flash", Player: true, Traded: false, Summon: ""},
3027+
{Name: "Flaco Maldito", Player: true, Traded: false, Summon: ""},
3028+
{Name: "Mieluffy", Player: true, Traded: false, Summon: ""},
3029+
{Name: "Geass Evangelion", Player: true, Traded: false, Summon: ""},
3030+
},
3031+
Level: 508,
3032+
Reason: "Slain at Level 508 by Sir Alpha, Chic Unixzion, Cadiwax, Pecaas, Eveo Zeff, Monkey Flash, Flaco Maldito, Mieluffy and Geass Evangelion.",
3033+
Time: "2024-01-10T21:31:52Z",
3034+
},
3035+
} {
3036+
assert.True(
3037+
reflect.DeepEqual(deaths[idx].Assists, tc.Assists),
3038+
"Wrong assists\nidx: %d\nwant: %#v\n\ngot: %#v",
3039+
idx, tc.Assists, deaths[idx].Assists,
3040+
)
3041+
assert.True(
3042+
reflect.DeepEqual(deaths[idx].Killers, tc.Killers),
3043+
"Wrong killers\nidx: %d\nwant: %#v\n\ngot: %#v",
3044+
idx, tc.Killers, deaths[idx].Killers,
3045+
)
3046+
assert.Equal(
3047+
deaths[idx].Level, tc.Level,
3048+
"Wrong Level\nidx: %d\nwant: %d\n\ngot: %d",
3049+
idx, tc.Level, deaths[idx].Level,
3050+
)
3051+
assert.Equal(
3052+
deaths[idx].Reason, tc.Reason,
3053+
"Wrong Reason\nidx: %d\nwant: %s\n\ngot: %s",
3054+
idx, tc.Reason, deaths[idx].Reason,
3055+
)
3056+
assert.Equal(
3057+
deaths[idx].Time, tc.Time,
3058+
"Wrong Time\nidx: %d\nwant: %s\n\ngot: %s",
3059+
idx, tc.Time, deaths[idx].Time,
3060+
)
3061+
}
3062+
}
3063+
29043064
func TestNumber9(t *testing.T) {
29053065
file, err := static.TestFiles.Open("testdata/characters/Akura Aleus.html")
29063066
if err != nil {

0 commit comments

Comments
 (0)