diff options
| author | ewy <ewy0@protonmail.com> | 2026-04-22 20:44:06 +0200 |
|---|---|---|
| committer | ewy <ewy0@protonmail.com> | 2026-04-22 20:44:06 +0200 |
| commit | 086a0cc0eb75c0c3a15cf6a715427df1e2d589a2 (patch) | |
| tree | 0bcc881b202f94a7ea39f94f13aea89ca2046312 /describe | |
| parent | c6a362a039b1662dfc0badeb8badc4458e446787 (diff) | |
slowly working on that test coverage
Diffstat (limited to 'describe')
| -rw-r--r-- | describe/describe.go | 23 | ||||
| -rw-r--r-- | describe/describe_test.go | 88 |
2 files changed, 108 insertions, 3 deletions
diff --git a/describe/describe.go b/describe/describe.go index 443c0e6..0863b6d 100644 --- a/describe/describe.go +++ b/describe/describe.go @@ -2,6 +2,7 @@ package describe import ( "bufio" + "io" "os" "pik/model" "strings" @@ -25,7 +26,17 @@ func Describe(key model.Target, file string) (string, error) { return "", err } defer fd.Close() - scanner := bufio.NewScanner(fd) + text, err := FromReader(fd) + if err != nil { + return text, err + } else { + descriptions[key] = &text + } + return text, err +} + +func FromReader(reader io.Reader) (string, error) { + scanner := bufio.NewScanner(reader) scanner.Split(bufio.ScanLines) scanner.Scan() text := scanner.Text() @@ -34,13 +45,19 @@ func Describe(key model.Target, file string) (string, error) { text = scanner.Text() } text = strings.TrimSpace(text) - if !strings.HasPrefix(text, "#") { + hasPrefix := false + for _, p := range DescriptionPrefixes { + if strings.HasPrefix(text, p) { + hasPrefix = true + break + } + } + if !hasPrefix { return "", nil } for _, c := range DescriptionPrefixes { text = strings.TrimPrefix(text, c) text = strings.TrimSpace(text) } - descriptions[key] = &text return text, nil } diff --git a/describe/describe_test.go b/describe/describe_test.go new file mode 100644 index 0000000..283be64 --- /dev/null +++ b/describe/describe_test.go @@ -0,0 +1,88 @@ +//go:build test + +package describe + +import ( + "github.com/stretchr/testify/assert" + "os" + "path/filepath" + "pik/runner" + "testing" +) + +type key struct { + *runner.Stub +} + +func Key() *key { + return &key{ + Stub: &runner.Stub{}, + } +} + +func TestDescribe(t *testing.T) { + dir := t.TempDir() + f := filepath.Join(dir, "file") + err := os.WriteFile(f, []byte("# this is a comment"), 0666) + assert.NoError(t, err) + result, err := Describe(Key(), f) + assert.NoError(t, err) + assert.Contains(t, result, "this is a comment") +} + +func TestDescribe_Slashes(t *testing.T) { + dir := t.TempDir() + f := filepath.Join(dir, "file") + err := os.WriteFile(f, []byte(" // this is a comment"), 0666) + assert.NoError(t, err) + result, err := Describe(Key(), f) + assert.NoError(t, err) + assert.Contains(t, result, "this is a comment") +} + +func TestDescribe_Cache(t *testing.T) { + dir := t.TempDir() + f := filepath.Join(dir, "file") + k := Key() + err := os.WriteFile(f, []byte(" // this is a comment"), 0666) + assert.NoError(t, err) + result, err := Describe(k, f) + assert.NoError(t, err) + assert.Contains(t, result, "this is a comment") + err = os.Remove(f) + if err != nil { + assert.NoError(t, err) + } + cached, err := Describe(k, f) + assert.NoError(t, err) + assert.Equal(t, result, cached) + +} + +func TestDescribe_NoDescription(t *testing.T) { + dir := t.TempDir() + f := filepath.Join(dir, "file") + err := os.WriteFile(f, []byte("1230987324091823740918237409283"), 0666) + assert.NoError(t, err) + result, err := Describe(Key(), f) + assert.NoError(t, err) + assert.Empty(t, result) +} + +func TestDescribe_Shebang_NoDescription(t *testing.T) { + dir := t.TempDir() + f := filepath.Join(dir, "file") + err := os.WriteFile(f, []byte("#!/usr/bin/env bash\nkjausdhuahsdf"), 0666) + assert.NoError(t, err) + result, err := Describe(Key(), f) + assert.Empty(t, result) + assert.NoError(t, err) +} + +func TestDescribe_Error(t *testing.T) { + dir := t.TempDir() + f := filepath.Join(dir, "file") + result, err := Describe(Key(), f) + assert.Empty(t, result) + assert.Error(t, err) +} |
