63 lines
2.0 KiB
Go
63 lines
2.0 KiB
Go
|
|
package catalog
|
|||
|
|
|
|||
|
|
import (
|
|||
|
|
"reflect"
|
|||
|
|
"testing"
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
func TestLoadSRD5E2014Catalog(t *testing.T) {
|
|||
|
|
catalog, err := LoadSRD5E2014()
|
|||
|
|
if err != nil {
|
|||
|
|
t.Fatalf("LoadSRD5E2014() error = %v", err)
|
|||
|
|
}
|
|||
|
|
if catalog.ID() != SRD5E2014ID || catalog.Ruleset() != SRD5E2014Ruleset {
|
|||
|
|
t.Fatalf("catalog identity = %q/%q", catalog.ID(), catalog.Ruleset())
|
|||
|
|
}
|
|||
|
|
if source := catalog.Source(); source.Version != "5.1" || source.License != "CC-BY-4.0" || source.URL == "" {
|
|||
|
|
t.Fatalf("catalog source = %#v", source)
|
|||
|
|
}
|
|||
|
|
spells := catalog.Spells()
|
|||
|
|
if len(spells) != 319 {
|
|||
|
|
t.Fatalf("spell count = %d, want 319", len(spells))
|
|||
|
|
}
|
|||
|
|
memberships := 0
|
|||
|
|
for _, spell := range spells {
|
|||
|
|
memberships += len(spell.Classes)
|
|||
|
|
}
|
|||
|
|
if memberships != 779 {
|
|||
|
|
t.Fatalf("class memberships = %d, want 779", memberships)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
cureWounds, ok := catalog.Lookup("cure wounds")
|
|||
|
|
if !ok || cureWounds.Name != "Cure Wounds" || cureWounds.Level != 1 ||
|
|||
|
|
!reflect.DeepEqual(cureWounds.Classes, []string{"bard", "cleric", "druid", "paladin", "ranger"}) {
|
|||
|
|
t.Fatalf("Cure Wounds lookup = %#v, present=%t", cureWounds, ok)
|
|||
|
|
}
|
|||
|
|
if huntersMark, ok := catalog.Lookup(" HUNTER'S MARK "); !ok || huntersMark.Name != "Hunter’s Mark" {
|
|||
|
|
t.Fatalf("Hunter's Mark lookup = %#v, present=%t", huntersMark, ok)
|
|||
|
|
}
|
|||
|
|
if _, ok := catalog.Lookup("Definitely Not A Spell"); ok {
|
|||
|
|
t.Fatal("unknown spell lookup succeeded")
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
func TestCatalogResultsDoNotExposeMutableStorage(t *testing.T) {
|
|||
|
|
catalog, err := LoadSRD5E2014()
|
|||
|
|
if err != nil {
|
|||
|
|
t.Fatal(err)
|
|||
|
|
}
|
|||
|
|
spells := catalog.Spells()
|
|||
|
|
spells[0].Name = "changed"
|
|||
|
|
spells[0].Classes[0] = "changed"
|
|||
|
|
|
|||
|
|
acidArrow, ok := catalog.Lookup("Acid Arrow")
|
|||
|
|
if !ok || acidArrow.Name != "Acid Arrow" || !reflect.DeepEqual(acidArrow.Classes, []string{"wizard"}) {
|
|||
|
|
t.Fatalf("catalog mutated through Spells(): %#v, present=%t", acidArrow, ok)
|
|||
|
|
}
|
|||
|
|
acidArrow.Classes[0] = "changed"
|
|||
|
|
again, ok := catalog.Lookup("Acid Arrow")
|
|||
|
|
if !ok || !reflect.DeepEqual(again.Classes, []string{"wizard"}) {
|
|||
|
|
t.Fatalf("catalog mutated through Lookup(): %#v, present=%t", again, ok)
|
|||
|
|
}
|
|||
|
|
}
|