Update GaCy-GO
This commit is contained in:
1 parent
da8a32f60d
commit
0cbe460e49
345 files changed
+98202
-77559
No files matched your search
@@ -0,0 +1,95 @@
|
||||
package common
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestStellaJumpResultMergesCasesAndPreservesOtherSaves(t *testing.T) {
|
||||
raw, err := os.ReadFile(filepath.Join("..", "..", "resources", "StellaJumpConfig.json"))
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
t.Chdir(t.TempDir())
|
||||
if err = os.Mkdir("resources", 0755); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err = os.WriteFile(filepath.Join("resources", "StellaJumpConfig.json"), raw, 0644); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
initial := []byte(`{"currency_wars":{"saved_run":42},"aha_help_level":0,"ex_ranks_unlocked":{"1204":false}}`)
|
||||
if err = os.WriteFile("persistent", initial, 0644); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
cases, err := LoadStellaJumpCases()
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
var selected []StellaJumpCase
|
||||
for _, row := range cases {
|
||||
if len(row.Challenges) > 0 {
|
||||
selected = append(selected, row)
|
||||
}
|
||||
if len(selected) == 2 {
|
||||
break
|
||||
}
|
||||
}
|
||||
if len(selected) != 2 {
|
||||
t.Fatal("need multiple captured cases")
|
||||
}
|
||||
a, b := selected[0], selected[1]
|
||||
if _, err = ReadStellaJumpRecord(a.ID); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
afterRead, _ := os.ReadFile("persistent")
|
||||
if !bytes.Equal(initial, afterRead) {
|
||||
t.Fatal("read rewrote persistent")
|
||||
}
|
||||
first, err := SaveStellaJumpResult(a.ID, 100, []uint32{a.Challenges[0]})
|
||||
if err != nil || first.BestTime != 100 {
|
||||
t.Fatalf("first finish: %+v %v", first, err)
|
||||
}
|
||||
if _, err = SaveStellaJumpResult(b.ID, 80, nil); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, err = SaveStellaJumpResult(a.ID, 120, []uint32{a.Challenges[0]}); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
beforeBad, _ := os.ReadFile("persistent")
|
||||
if _, err = SaveStellaJumpResult(a.ID, 1, []uint32{^uint32(0)}); err == nil {
|
||||
t.Fatal("accepted invalid challenge")
|
||||
}
|
||||
afterBad, _ := os.ReadFile("persistent")
|
||||
if !bytes.Equal(beforeBad, afterBad) {
|
||||
t.Fatal("invalid request mutated save")
|
||||
}
|
||||
result, err := ReadStellaJumpRecord(a.ID)
|
||||
if err != nil || result.BestTime != 100 || len(result.FinishedChallenges) != 1 {
|
||||
t.Fatalf("merged record: %+v %v", result, err)
|
||||
}
|
||||
other, _ := ReadStellaJumpRecord(b.ID)
|
||||
if other.BestTime != 80 {
|
||||
t.Fatal("lost other case")
|
||||
}
|
||||
root, err := readCurrencyWarsPersistentRoot()
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
var original map[string]json.RawMessage
|
||||
if err = json.Unmarshal(initial, &original); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
for key, value := range original {
|
||||
var a, b any
|
||||
json.Unmarshal(value, &a)
|
||||
json.Unmarshal(root[key], &b)
|
||||
left, _ := json.Marshal(a)
|
||||
right, _ := json.Marshal(b)
|
||||
if !bytes.Equal(left, right) {
|
||||
t.Fatalf("changed %s", key)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user