384 lines
14 KiB
Go
384 lines
14 KiB
Go
package sourcemap
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/tspath"
|
|
"gotest.tools/v3/assert"
|
|
)
|
|
|
|
func TestSourceMapGenerator_Empty(t *testing.T) {
|
|
t.Parallel()
|
|
gen := NewGenerator("main.js", "/", "/", tspath.ComparePathsOptions{})
|
|
sourceMap := gen.RawSourceMap()
|
|
assert.DeepEqual(t, sourceMap, &RawSourceMap{
|
|
Version: 3,
|
|
File: "main.js",
|
|
SourceRoot: "/",
|
|
Sources: []string{},
|
|
Mappings: "",
|
|
Names: []string{},
|
|
SourcesContent: nil,
|
|
})
|
|
}
|
|
|
|
func TestSourceMapGenerator_Empty_Serialized(t *testing.T) {
|
|
t.Parallel()
|
|
gen := NewGenerator("main.js", "/", "/", tspath.ComparePathsOptions{})
|
|
actual := gen.String()
|
|
expected := `{"version":3,"file":"main.js","sourceRoot":"/","sources":[],"names":[],"mappings":""}`
|
|
assert.Equal(t, actual, expected)
|
|
}
|
|
|
|
func TestSourceMapGenerator_AddSource(t *testing.T) {
|
|
t.Parallel()
|
|
gen := NewGenerator("main.js", "/", "/", tspath.ComparePathsOptions{})
|
|
sourceIndex := gen.AddSource("/main.ts")
|
|
sourceMap := gen.RawSourceMap()
|
|
assert.Equal(t, int(sourceIndex), 0)
|
|
assert.DeepEqual(t, sourceMap, &RawSourceMap{
|
|
Version: 3,
|
|
File: "main.js",
|
|
SourceRoot: "/",
|
|
Sources: []string{"main.ts"},
|
|
Mappings: "",
|
|
Names: []string{},
|
|
SourcesContent: nil,
|
|
})
|
|
}
|
|
|
|
func TestSourceMapGenerator_SetSourceContent(t *testing.T) {
|
|
t.Parallel()
|
|
gen := NewGenerator("main.js", "/", "/", tspath.ComparePathsOptions{})
|
|
sourceIndex := gen.AddSource("/main.ts")
|
|
sourceContent := "foo"
|
|
assert.NilError(t, gen.SetSourceContent(sourceIndex, sourceContent))
|
|
sourceMap := gen.RawSourceMap()
|
|
assert.Equal(t, int(sourceIndex), 0)
|
|
assert.DeepEqual(t, sourceMap, &RawSourceMap{
|
|
Version: 3,
|
|
File: "main.js",
|
|
SourceRoot: "/",
|
|
Sources: []string{"main.ts"},
|
|
Mappings: "",
|
|
Names: []string{},
|
|
SourcesContent: []*string{&sourceContent},
|
|
})
|
|
}
|
|
|
|
func TestSourceMapGenerator_SetSourceContent_ForSecondSourceOnly(t *testing.T) {
|
|
t.Parallel()
|
|
gen := NewGenerator("main.js", "/", "/", tspath.ComparePathsOptions{})
|
|
gen.AddSource("/skipped.ts")
|
|
sourceIndex := gen.AddSource("/main.ts")
|
|
sourceContent := "foo"
|
|
assert.NilError(t, gen.SetSourceContent(sourceIndex, sourceContent))
|
|
sourceMap := gen.RawSourceMap()
|
|
assert.Equal(t, int(sourceIndex), 1)
|
|
assert.DeepEqual(t, sourceMap, &RawSourceMap{
|
|
Version: 3,
|
|
File: "main.js",
|
|
SourceRoot: "/",
|
|
Sources: []string{"skipped.ts", "main.ts"},
|
|
Mappings: "",
|
|
Names: []string{},
|
|
SourcesContent: []*string{nil, &sourceContent},
|
|
})
|
|
}
|
|
|
|
func TestSourceMapGenerator_SetSourceContent_SourceIndexOutOfRange(t *testing.T) {
|
|
t.Parallel()
|
|
gen := NewGenerator("main.js", "/", "/", tspath.ComparePathsOptions{})
|
|
assert.Error(t, gen.SetSourceContent(-1, ""), "sourceIndex is out of range")
|
|
assert.Error(t, gen.SetSourceContent(0, ""), "sourceIndex is out of range")
|
|
}
|
|
|
|
func TestSourceMapGenerator_SetSourceContent_ForSecondSourceOnly_Serialized(t *testing.T) {
|
|
t.Parallel()
|
|
gen := NewGenerator("main.js", "/", "/", tspath.ComparePathsOptions{})
|
|
gen.AddSource("/skipped.ts")
|
|
sourceIndex := gen.AddSource("/main.ts")
|
|
sourceContent := "foo"
|
|
assert.NilError(t, gen.SetSourceContent(sourceIndex, sourceContent))
|
|
actual := gen.String()
|
|
expected := `{"version":3,"file":"main.js","sourceRoot":"/","sources":["skipped.ts","main.ts"],"names":[],"mappings":"","sourcesContent":[null,"foo"]}`
|
|
assert.Equal(t, actual, expected)
|
|
}
|
|
|
|
func TestSourceMapGenerator_AddName(t *testing.T) {
|
|
t.Parallel()
|
|
gen := NewGenerator("main.js", "/", "/", tspath.ComparePathsOptions{})
|
|
nameIndex := gen.AddName("foo")
|
|
sourceMap := gen.RawSourceMap()
|
|
assert.Equal(t, int(nameIndex), 0)
|
|
assert.DeepEqual(t, sourceMap, &RawSourceMap{
|
|
Version: 3,
|
|
File: "main.js",
|
|
SourceRoot: "/",
|
|
Sources: []string{},
|
|
Mappings: "",
|
|
Names: []string{"foo"},
|
|
SourcesContent: nil,
|
|
})
|
|
}
|
|
|
|
func TestSourceMapGenerator_AddGeneratedMapping(t *testing.T) {
|
|
t.Parallel()
|
|
gen := NewGenerator("main.js", "/", "/", tspath.ComparePathsOptions{})
|
|
assert.NilError(t, gen.AddGeneratedMapping(0, 0))
|
|
sourceMap := gen.RawSourceMap()
|
|
assert.DeepEqual(t, sourceMap, &RawSourceMap{
|
|
Version: 3,
|
|
File: "main.js",
|
|
SourceRoot: "/",
|
|
Sources: []string{},
|
|
Mappings: "A",
|
|
Names: []string{},
|
|
SourcesContent: nil,
|
|
})
|
|
}
|
|
|
|
func TestSourceMapGenerator_AddGeneratedMapping_OnSecondLineOnly(t *testing.T) {
|
|
t.Parallel()
|
|
gen := NewGenerator("main.js", "/", "/", tspath.ComparePathsOptions{})
|
|
assert.NilError(t, gen.AddGeneratedMapping(1, 0))
|
|
sourceMap := gen.RawSourceMap()
|
|
assert.DeepEqual(t, sourceMap, &RawSourceMap{
|
|
Version: 3,
|
|
File: "main.js",
|
|
SourceRoot: "/",
|
|
Sources: []string{},
|
|
Mappings: ";A",
|
|
Names: []string{},
|
|
SourcesContent: nil,
|
|
})
|
|
}
|
|
|
|
func TestSourceMapGenerator_AddSourceMapping(t *testing.T) {
|
|
t.Parallel()
|
|
gen := NewGenerator("main.js", "/", "/", tspath.ComparePathsOptions{})
|
|
sourceIndex := gen.AddSource("/main.ts")
|
|
assert.NilError(t, gen.AddSourceMapping(0, 0, sourceIndex, 0, 0))
|
|
sourceMap := gen.RawSourceMap()
|
|
assert.DeepEqual(t, sourceMap, &RawSourceMap{
|
|
Version: 3,
|
|
File: "main.js",
|
|
SourceRoot: "/",
|
|
Sources: []string{"main.ts"},
|
|
Mappings: "AAAA",
|
|
Names: []string{},
|
|
SourcesContent: nil,
|
|
})
|
|
}
|
|
|
|
func TestSourceMapGenerator_AddSourceMapping_NextGeneratedCharacter(t *testing.T) {
|
|
t.Parallel()
|
|
gen := NewGenerator("main.js", "/", "/", tspath.ComparePathsOptions{})
|
|
sourceIndex := gen.AddSource("/main.ts")
|
|
assert.NilError(t, gen.AddSourceMapping(0, 0, sourceIndex, 0, 0))
|
|
assert.NilError(t, gen.AddSourceMapping(0, 1, sourceIndex, 0, 0))
|
|
sourceMap := gen.RawSourceMap()
|
|
assert.DeepEqual(t, sourceMap, &RawSourceMap{
|
|
Version: 3,
|
|
File: "main.js",
|
|
SourceRoot: "/",
|
|
Sources: []string{"main.ts"},
|
|
Mappings: "AAAA,CAAA",
|
|
Names: []string{},
|
|
SourcesContent: nil,
|
|
})
|
|
}
|
|
|
|
func TestSourceMapGenerator_AddSourceMapping_NextGeneratedAndSourceCharacter(t *testing.T) {
|
|
t.Parallel()
|
|
gen := NewGenerator("main.js", "/", "/", tspath.ComparePathsOptions{})
|
|
sourceIndex := gen.AddSource("/main.ts")
|
|
assert.NilError(t, gen.AddSourceMapping(0, 0, sourceIndex, 0, 0))
|
|
assert.NilError(t, gen.AddSourceMapping(0, 1, sourceIndex, 0, 1))
|
|
sourceMap := gen.RawSourceMap()
|
|
assert.DeepEqual(t, sourceMap, &RawSourceMap{
|
|
Version: 3,
|
|
File: "main.js",
|
|
SourceRoot: "/",
|
|
Sources: []string{"main.ts"},
|
|
Mappings: "AAAA,CAAC",
|
|
Names: []string{},
|
|
SourcesContent: nil,
|
|
})
|
|
}
|
|
|
|
func TestSourceMapGenerator_AddSourceMapping_NextGeneratedLine(t *testing.T) {
|
|
t.Parallel()
|
|
gen := NewGenerator("main.js", "/", "/", tspath.ComparePathsOptions{})
|
|
sourceIndex := gen.AddSource("/main.ts")
|
|
assert.NilError(t, gen.AddSourceMapping(0, 0, sourceIndex, 0, 0))
|
|
assert.NilError(t, gen.AddSourceMapping(1, 0, sourceIndex, 0, 0))
|
|
sourceMap := gen.RawSourceMap()
|
|
assert.DeepEqual(t, sourceMap, &RawSourceMap{
|
|
Version: 3,
|
|
File: "main.js",
|
|
SourceRoot: "/",
|
|
Sources: []string{"main.ts"},
|
|
Mappings: "AAAA;AAAA",
|
|
Names: []string{},
|
|
SourcesContent: nil,
|
|
})
|
|
}
|
|
|
|
func TestSourceMapGenerator_AddSourceMapping_PreviousSourceCharacter(t *testing.T) {
|
|
t.Parallel()
|
|
gen := NewGenerator("main.js", "/", "/", tspath.ComparePathsOptions{})
|
|
sourceIndex := gen.AddSource("/main.ts")
|
|
assert.NilError(t, gen.AddSourceMapping(0, 0, sourceIndex, 0, 1))
|
|
assert.NilError(t, gen.AddSourceMapping(0, 1, sourceIndex, 0, 0))
|
|
sourceMap := gen.RawSourceMap()
|
|
assert.DeepEqual(t, sourceMap, &RawSourceMap{
|
|
Version: 3,
|
|
File: "main.js",
|
|
SourceRoot: "/",
|
|
Sources: []string{"main.ts"},
|
|
Mappings: "AAAC,CAAD",
|
|
Names: []string{},
|
|
SourcesContent: nil,
|
|
})
|
|
}
|
|
|
|
func TestSourceMapGenerator_AddNamedSourceMapping(t *testing.T) {
|
|
t.Parallel()
|
|
gen := NewGenerator("main.js", "/", "/", tspath.ComparePathsOptions{})
|
|
sourceIndex := gen.AddSource("/main.ts")
|
|
nameIndex := gen.AddName("foo")
|
|
assert.NilError(t, gen.AddNamedSourceMapping(0, 0, sourceIndex, 0, 0, nameIndex))
|
|
sourceMap := gen.RawSourceMap()
|
|
assert.DeepEqual(t, sourceMap, &RawSourceMap{
|
|
Version: 3,
|
|
File: "main.js",
|
|
SourceRoot: "/",
|
|
Sources: []string{"main.ts"},
|
|
Mappings: "AAAAA",
|
|
Names: []string{"foo"},
|
|
SourcesContent: nil,
|
|
})
|
|
}
|
|
|
|
func TestSourceMapGenerator_AddNamedSourceMapping_WithPreviousName(t *testing.T) {
|
|
t.Parallel()
|
|
gen := NewGenerator("main.js", "/", "/", tspath.ComparePathsOptions{})
|
|
sourceIndex := gen.AddSource("/main.ts")
|
|
nameIndex1 := gen.AddName("foo")
|
|
nameIndex2 := gen.AddName("bar")
|
|
assert.NilError(t, gen.AddNamedSourceMapping(0, 0, sourceIndex, 0, 0, nameIndex2))
|
|
assert.NilError(t, gen.AddNamedSourceMapping(0, 1, sourceIndex, 0, 0, nameIndex1))
|
|
sourceMap := gen.RawSourceMap()
|
|
assert.DeepEqual(t, sourceMap, &RawSourceMap{
|
|
Version: 3,
|
|
File: "main.js",
|
|
SourceRoot: "/",
|
|
Sources: []string{"main.ts"},
|
|
Mappings: "AAAAC,CAAAD",
|
|
Names: []string{"foo", "bar"},
|
|
SourcesContent: nil,
|
|
})
|
|
}
|
|
|
|
func TestSourceMapGenerator_AddGeneratedMapping_GeneratedLineCannotBacktrack(t *testing.T) {
|
|
t.Parallel()
|
|
gen := NewGenerator("main.js", "/", "/", tspath.ComparePathsOptions{})
|
|
assert.NilError(t, gen.AddGeneratedMapping(1, 0))
|
|
assert.Error(t, gen.AddGeneratedMapping(0, 0), "generatedLine cannot backtrack")
|
|
}
|
|
|
|
func TestSourceMapGenerator_AddGeneratedMapping_GeneratedCharacterCannotBeNegative(t *testing.T) {
|
|
t.Parallel()
|
|
gen := NewGenerator("main.js", "/", "/", tspath.ComparePathsOptions{})
|
|
assert.NilError(t, gen.AddGeneratedMapping(0, 0))
|
|
assert.Error(t, gen.AddGeneratedMapping(0, -1), "generatedCharacter cannot be negative")
|
|
}
|
|
|
|
func TestSourceMapGenerator_AddSourceMapping_GeneratedLineCannotBacktrack(t *testing.T) {
|
|
t.Parallel()
|
|
gen := NewGenerator("main.js", "/", "/", tspath.ComparePathsOptions{})
|
|
sourceIndex := gen.AddSource("/main.ts")
|
|
assert.NilError(t, gen.AddSourceMapping(1, 0, sourceIndex, 0, 0))
|
|
assert.Error(t, gen.AddSourceMapping(0, 0, sourceIndex, 0, 0), "generatedLine cannot backtrack")
|
|
}
|
|
|
|
func TestSourceMapGenerator_AddSourceMapping_GeneratedCharacterCannotBeNegative(t *testing.T) {
|
|
t.Parallel()
|
|
gen := NewGenerator("main.js", "/", "/", tspath.ComparePathsOptions{})
|
|
sourceIndex := gen.AddSource("/main.ts")
|
|
assert.NilError(t, gen.AddSourceMapping(0, 0, sourceIndex, 0, 0))
|
|
assert.Error(t, gen.AddSourceMapping(0, -1, sourceIndex, 0, 0), "generatedCharacter cannot be negative")
|
|
}
|
|
|
|
func TestSourceMapGenerator_AddSourceMapping_SourceIndexIsOutOfRange(t *testing.T) {
|
|
t.Parallel()
|
|
gen := NewGenerator("main.js", "/", "/", tspath.ComparePathsOptions{})
|
|
assert.Error(t, gen.AddSourceMapping(0, 0, -1, 0, 0), "sourceIndex is out of range")
|
|
assert.Error(t, gen.AddSourceMapping(0, 0, 0, 0, 0), "sourceIndex is out of range")
|
|
}
|
|
|
|
func TestSourceMapGenerator_AddSourceMapping_SourceLineCannotBeNegative(t *testing.T) {
|
|
t.Parallel()
|
|
gen := NewGenerator("main.js", "/", "/", tspath.ComparePathsOptions{})
|
|
sourceIndex := gen.AddSource("/main.ts")
|
|
assert.Error(t, gen.AddSourceMapping(0, 0, sourceIndex, -1, 0), "sourceLine cannot be negative")
|
|
}
|
|
|
|
func TestSourceMapGenerator_AddSourceMapping_SourceCharacterCannotBeNegative(t *testing.T) {
|
|
t.Parallel()
|
|
gen := NewGenerator("main.js", "/", "/", tspath.ComparePathsOptions{})
|
|
sourceIndex := gen.AddSource("/main.ts")
|
|
assert.Error(t, gen.AddSourceMapping(0, 0, sourceIndex, 0, -1), "sourceCharacter cannot be negative")
|
|
}
|
|
|
|
func TestSourceMapGenerator_AddNamedSourceMapping_GeneratedLineCannotBacktrack(t *testing.T) {
|
|
t.Parallel()
|
|
gen := NewGenerator("main.js", "/", "/", tspath.ComparePathsOptions{})
|
|
sourceIndex := gen.AddSource("/main.ts")
|
|
nameIndex := gen.AddName("foo")
|
|
assert.NilError(t, gen.AddNamedSourceMapping(1, 0, sourceIndex, 0, 0, nameIndex))
|
|
assert.Error(t, gen.AddNamedSourceMapping(0, 0, sourceIndex, 0, 0, nameIndex), "generatedLine cannot backtrack")
|
|
}
|
|
|
|
func TestSourceMapGenerator_AddNamedSourceMapping_GeneratedCharacterCannotBeNegative(t *testing.T) {
|
|
t.Parallel()
|
|
gen := NewGenerator("main.js", "/", "/", tspath.ComparePathsOptions{})
|
|
sourceIndex := gen.AddSource("/main.ts")
|
|
nameIndex := gen.AddName("foo")
|
|
assert.NilError(t, gen.AddNamedSourceMapping(0, 0, sourceIndex, 0, 0, nameIndex))
|
|
assert.Error(t, gen.AddNamedSourceMapping(0, -1, sourceIndex, 0, 0, nameIndex), "generatedCharacter cannot be negative")
|
|
}
|
|
|
|
func TestSourceMapGenerator_AddNamedSourceMapping_SourceIndexIsOutOfRange(t *testing.T) {
|
|
t.Parallel()
|
|
gen := NewGenerator("main.js", "/", "/", tspath.ComparePathsOptions{})
|
|
nameIndex := gen.AddName("foo")
|
|
assert.Error(t, gen.AddNamedSourceMapping(0, 0, -1, 0, 0, nameIndex), "sourceIndex is out of range")
|
|
assert.Error(t, gen.AddNamedSourceMapping(0, 0, 0, 0, 0, nameIndex), "sourceIndex is out of range")
|
|
}
|
|
|
|
func TestSourceMapGenerator_AddNamedSourceMapping_SourceLineCannotBeNegative(t *testing.T) {
|
|
t.Parallel()
|
|
gen := NewGenerator("main.js", "/", "/", tspath.ComparePathsOptions{})
|
|
nameIndex := gen.AddName("foo")
|
|
sourceIndex := gen.AddSource("/main.ts")
|
|
assert.Error(t, gen.AddNamedSourceMapping(0, 0, sourceIndex, -1, 0, nameIndex), "sourceLine cannot be negative")
|
|
}
|
|
|
|
func TestSourceMapGenerator_AddNamedSourceMapping_SourceCharacterCannotBeNegative(t *testing.T) {
|
|
t.Parallel()
|
|
gen := NewGenerator("main.js", "/", "/", tspath.ComparePathsOptions{})
|
|
nameIndex := gen.AddName("foo")
|
|
sourceIndex := gen.AddSource("/main.ts")
|
|
assert.Error(t, gen.AddNamedSourceMapping(0, 0, sourceIndex, 0, -1, nameIndex), "sourceCharacter cannot be negative")
|
|
}
|
|
|
|
func TestSourceMapGenerator_AddNamedSourceMapping_NameIndexIsOutOfRange(t *testing.T) {
|
|
t.Parallel()
|
|
gen := NewGenerator("main.js", "/", "/", tspath.ComparePathsOptions{})
|
|
sourceIndex := gen.AddSource("/main.ts")
|
|
assert.Error(t, gen.AddNamedSourceMapping(0, 0, sourceIndex, 0, 0, -1), "nameIndex is out of range")
|
|
assert.Error(t, gen.AddNamedSourceMapping(0, 0, sourceIndex, 0, 0, 0), "nameIndex is out of range")
|
|
}
|