Merge pull request #1086 from gucio321/anim-data-encoder

animation data: methods for edition animation data records count and animation entries
This commit is contained in:
Tim Sarbin 2021-03-04 16:52:14 -05:00 committed by GitHub
commit 5e29ea8219
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 135 additions and 1 deletions

View File

@ -61,6 +61,61 @@ func (ad *AnimationData) GetRecordsCount() int {
return len(ad.entries)
}
// PushRecord adds a new record to entry named 'name'
func (ad *AnimationData) PushRecord(name string) {
ad.entries[name] = append(
ad.entries[name],
&AnimationDataRecord{
name: name,
},
)
}
// DeleteRecord teletes specified index from specified entry
func (ad *AnimationData) DeleteRecord(name string, recordIdx int) error {
newRecords := make([]*AnimationDataRecord, 0)
for n, i := range ad.entries[name] {
if n == recordIdx {
continue
}
newRecords = append(newRecords, i)
}
if len(ad.entries[name]) == len(newRecords) {
return fmt.Errorf("index %d not found", recordIdx)
}
ad.entries[name] = newRecords
return nil
}
// AddEntry adds a new animation entry with name given
func (ad *AnimationData) AddEntry(name string) error {
_, found := ad.entries[name]
if found {
return fmt.Errorf("entry of name %s already exist", name)
}
ad.entries[name] = make([]*AnimationDataRecord, 0)
return nil
}
// DeleteEntry deltees entry with specified name
func (ad *AnimationData) DeleteEntry(name string) error {
_, found := ad.entries[name]
if !found {
return fmt.Errorf("entry named %s doesn't exist", name)
}
delete(ad.entries, name)
return nil
}
// Load loads the data into an AnimationData struct
//nolint:gocognit,funlen // can't reduce
func Load(data []byte) (*AnimationData, error) {

View File

@ -155,7 +155,7 @@ func TestAnimationDataRecord_FPS(t *testing.T) {
}
}
func TestAnimationDataRecord_Marshal(t *testing.T) {
func TestAnimationData_Marshal(t *testing.T) {
file, fileErr := os.Open("testdata/AnimData.d2")
if fileErr != nil {
t.Error("cannot open test data file")
@ -209,3 +209,82 @@ func TestAnimationDataRecord_Marshal(t *testing.T) {
}
}
}
func TestAnimationData_DeleteRecord(t *testing.T) {
ad := &AnimationData{
entries: map[string][]*AnimationDataRecord{
"a": {
{name: "a", speed: 1, framesPerDirection: 1},
{name: "a", speed: 2, framesPerDirection: 2},
{name: "a", speed: 3, framesPerDirection: 3},
},
},
}
err := ad.DeleteRecord("a", 1)
if err != nil {
t.Error(err)
}
if len(ad.entries["a"]) != 2 {
t.Fatal("Delete record error")
}
if ad.entries["a"][1].speed != 3 {
t.Fatal("Invalid index deleted")
}
}
func TestAnimationData_PushRecord(t *testing.T) {
ad := &AnimationData{
entries: map[string][]*AnimationDataRecord{
"a": {
{name: "a", speed: 1, framesPerDirection: 1},
{name: "a", speed: 2, framesPerDirection: 2},
},
},
}
ad.PushRecord("a")
if len(ad.entries["a"]) != 3 {
t.Fatal("No record was pushed")
}
if ad.entries["a"][2].name != "a" {
t.Fatal("unexpected name of new record was set")
}
}
func TestAnimationData_AddEntry(t *testing.T) {
ad := &AnimationData{
entries: make(map[string][]*AnimationDataRecord),
}
err := ad.AddEntry("a")
if err != nil {
t.Error(err)
}
if _, found := ad.entries["a"]; !found {
t.Fatal("entry wasn't added")
}
}
func TestAnimationData_DeleteEntry(t *testing.T) {
ad := &AnimationData{
entries: map[string][]*AnimationDataRecord{
"a": {{}, {}},
},
}
err := ad.DeleteEntry("a")
if err != nil {
t.Error(err)
}
if _, found := ad.entries["a"]; found {
t.Fatal("Entry wasn't deleted")
}
}