51 lines
1.7 KiB
Go
51 lines
1.7 KiB
Go
package sourcemaps
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
const testMap = `{"version":3,"file":"a.js","sources":["src/a.ts"],"sourcesContent":["const a = 1\nthrow new Error('x')\n"],"names":[],"mappings":"AAAA;AACA"}`
|
|
|
|
func TestReloadFromDisk(t *testing.T) {
|
|
dir := t.TempDir()
|
|
r, _ := New(dir)
|
|
if err := r.Upload("rel1", "https://h/assets/a.js", strings.NewReader(testMap)); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
r2, _ := New(dir) // simulates a restart
|
|
if l := r2.List(); len(l) != 1 || l[0].Release != "rel1" || l[0].Source != "/assets/a.js" {
|
|
t.Fatalf("list after reload = %+v", l)
|
|
}
|
|
frames := r2.ResolveFrames("rel1", "Error: x\n at f (https://h/assets/a.js:2:1)")
|
|
if len(frames) != 1 || frames[0].Status != "mapped" || frames[0].Source != "src/a.ts" || len(frames[0].Context) == 0 {
|
|
t.Fatalf("frames = %+v", frames)
|
|
}
|
|
}
|
|
|
|
func TestLazyLoadAndEviction(t *testing.T) {
|
|
dir := t.TempDir()
|
|
r, _ := New(dir)
|
|
for _, f := range []string{"a", "b", "c"} {
|
|
if err := r.Upload("rel", "/assets/"+f+".js", strings.NewReader(testMap)); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
r2, _ := New(dir)
|
|
if len(r2.cache) != 0 || len(r2.List()) != 3 {
|
|
t.Fatalf("startup should index without parsing: cached=%d listed=%d", len(r2.cache), len(r2.List()))
|
|
}
|
|
r2.maxBytes = int64(len(testMap)) * 2 // room for two parsed maps
|
|
for _, f := range []string{"a", "b", "c"} {
|
|
if fr := r2.ResolveFrames("rel", "at f (https://h/assets/"+f+".js:2:1)"); len(fr) != 1 || fr[0].Status != "mapped" {
|
|
t.Fatalf("%s not resolved: %+v", f, fr)
|
|
}
|
|
}
|
|
if len(r2.cache) != 2 {
|
|
t.Fatalf("cache should hold 2 entries, has %d", len(r2.cache))
|
|
}
|
|
if r2.get(key("rel", "/assets/a.js")) == nil { // evicted, reloads from disk
|
|
t.Fatal("evicted map did not reload")
|
|
}
|
|
}
|