Skip to content

Commit

Permalink
tiltfile: make a link object a struct (#3843)
Browse files Browse the repository at this point in the history
  • Loading branch information
nicks committed Oct 9, 2020
1 parent 0100843 commit d2e3ff2
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 18 deletions.
24 changes: 6 additions & 18 deletions internal/tiltfile/links/links.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import (

"github.com/pkg/errors"
"go.starlark.net/starlark"
"go.starlark.net/starlarkstruct"

"github.com/tilt-dev/tilt/pkg/model"

Expand All @@ -14,29 +15,12 @@ import (
)

type Link struct {
*starlarkstruct.Struct
model.Link
}

var _ starlark.Value = Link{}

func (l Link) String() string {
return fmt.Sprintf("Link(url=%q, name=%q)", l.URL, l.Name)
}

func (l Link) Type() string {
return "Link"
}

func (l Link) Freeze() {}

func (l Link) Truth() starlark.Bool {
return l.Link != model.Link{}
}

func (l Link) Hash() (uint32, error) {
return 0, fmt.Errorf("unhashable type: port_forward")
}

// Parse resource links (string or `link`) into model.Link
// Not to be confused with a LinkED List :P
type LinkList struct {
Expand Down Expand Up @@ -117,6 +101,10 @@ func (e Extension) link(thread *starlark.Thread, fn *starlark.Builtin, args star
}

return Link{
Struct: starlarkstruct.FromStringDict(starlark.String("link"), starlark.StringDict{
"url": starlark.String(withScheme),
"name": starlark.String(name),
}),
Link: model.Link{
URL: withScheme,
Name: name,
Expand Down
31 changes: 31 additions & 0 deletions internal/tiltfile/links/links_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,10 @@ package links
import (
"testing"

"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"

"github.com/tilt-dev/tilt/internal/tiltfile/starkit"
)

func TestMaybeAddScheme(t *testing.T) {
Expand Down Expand Up @@ -42,3 +45,31 @@ func TestMaybeAddScheme(t *testing.T) {
})
}
}

func TestLinkProps(t *testing.T) {
f := starkit.NewFixture(t, NewExtension())
defer f.TearDown()

f.File("Tiltfile", `
l = link("localhost:4000", "web")
print(l.url)
print(l.name)
`)

_, err := f.ExecFile("Tiltfile")
require.NoError(t, err)
assert.Equal(t, "localhost:4000\nweb\n", f.PrintOutput())
}
func TestLinkPropsImmutable(t *testing.T) {
f := starkit.NewFixture(t, NewExtension())
defer f.TearDown()

f.File("Tiltfile", `
l = link("localhost:4000", "web")
l.url = "XXX"
`)

_, err := f.ExecFile("Tiltfile")
require.Error(t, err)
assert.Contains(t, err.Error(), "can't assign to .url field of struct")
}

0 comments on commit d2e3ff2

Please sign in to comment.