ensure unique diagram hash based on appearance
This commit is contained in:
parent
4c74a05705
commit
ce40826d51
2 changed files with 65 additions and 0 deletions
|
|
@ -77,6 +77,15 @@ func Compile(ctx context.Context, input string, compileOpts *CompileOptions, ren
|
||||||
|
|
||||||
d, err := compile(ctx, g, compileOpts, renderOpts)
|
d, err := compile(ctx, g, compileOpts, renderOpts)
|
||||||
if d != nil {
|
if d != nil {
|
||||||
|
if config == nil {
|
||||||
|
config = &d2target.Config{}
|
||||||
|
}
|
||||||
|
// These are fields that affect a diagram's appearance, so feed them back
|
||||||
|
// into diagram.Config to ensure the hash computed for CSS styling purposes
|
||||||
|
// is unique to its appearance
|
||||||
|
config.ThemeID = renderOpts.ThemeID
|
||||||
|
config.DarkThemeID = renderOpts.DarkThemeID
|
||||||
|
config.Sketch = renderOpts.Sketch
|
||||||
d.Config = config
|
d.Config = config
|
||||||
}
|
}
|
||||||
return d, g, err
|
return d, g, err
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,65 @@
|
||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"context"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"oss.terrastruct.com/d2/d2graph"
|
||||||
|
"oss.terrastruct.com/d2/d2layouts/d2dagrelayout"
|
||||||
|
"oss.terrastruct.com/d2/d2lib"
|
||||||
|
"oss.terrastruct.com/d2/d2renderers/d2svg"
|
||||||
|
"oss.terrastruct.com/d2/d2themes/d2themescatalog"
|
||||||
|
"oss.terrastruct.com/d2/lib/log"
|
||||||
|
"oss.terrastruct.com/d2/lib/textmeasure"
|
||||||
|
"oss.terrastruct.com/util-go/assert"
|
||||||
|
"oss.terrastruct.com/util-go/go2"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestMain_(t *testing.T) {
|
func TestMain_(t *testing.T) {
|
||||||
main()
|
main()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestConfigHash(t *testing.T) {
|
||||||
|
var hash1, hash2 string
|
||||||
|
var err error
|
||||||
|
|
||||||
|
{
|
||||||
|
ruler, _ := textmeasure.NewRuler()
|
||||||
|
layoutResolver := func(engine string) (d2graph.LayoutGraph, error) {
|
||||||
|
return d2dagrelayout.DefaultLayout, nil
|
||||||
|
}
|
||||||
|
renderOpts := &d2svg.RenderOpts{
|
||||||
|
Pad: go2.Pointer(int64(5)),
|
||||||
|
ThemeID: &d2themescatalog.GrapeSoda.ID,
|
||||||
|
}
|
||||||
|
compileOpts := &d2lib.CompileOptions{
|
||||||
|
LayoutResolver: layoutResolver,
|
||||||
|
Ruler: ruler,
|
||||||
|
}
|
||||||
|
ctx := log.WithDefault(context.Background())
|
||||||
|
diagram, _, _ := d2lib.Compile(ctx, "x -> y", compileOpts, renderOpts)
|
||||||
|
hash1, err = diagram.HashID()
|
||||||
|
assert.Success(t, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
ruler, _ := textmeasure.NewRuler()
|
||||||
|
layoutResolver := func(engine string) (d2graph.LayoutGraph, error) {
|
||||||
|
return d2dagrelayout.DefaultLayout, nil
|
||||||
|
}
|
||||||
|
renderOpts := &d2svg.RenderOpts{
|
||||||
|
Pad: go2.Pointer(int64(5)),
|
||||||
|
ThemeID: &d2themescatalog.NeutralGrey.ID,
|
||||||
|
}
|
||||||
|
compileOpts := &d2lib.CompileOptions{
|
||||||
|
LayoutResolver: layoutResolver,
|
||||||
|
Ruler: ruler,
|
||||||
|
}
|
||||||
|
ctx := log.WithDefault(context.Background())
|
||||||
|
diagram, _, _ := d2lib.Compile(ctx, "x -> y", compileOpts, renderOpts)
|
||||||
|
hash2, err = diagram.HashID()
|
||||||
|
assert.Success(t, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
assert.NotEqual(t, hash1, hash2)
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue