This commit is contained in:
2025-02-02 21:07:51 +01:00
parent 73e817d408
commit 12a641c86f
3 changed files with 130 additions and 23 deletions

View File

@@ -7,6 +7,7 @@ fi
while true; do
go test --run "$1"
inotifywait --exclude 'node_modules' -qqr -e close_write .. && clear;
inotifywait --exclude 'node_modules' -qqr -e close_write .. && clear
sleep 0.2
done

53
workflow-pr/submodules.go Normal file
View File

@@ -0,0 +1,53 @@
package main
import (
"errors"
"io"
"text/scanner"
)
type Submodule struct {
Name string
Path string
}
var SyntaxError error = errors.New("Syntax error")
func (sub *Submodule) parseSubmoduleName(s *scanner.Scanner) error {
s.Scan()
if s.TokenText() != "submodule" {
return SyntaxError
}
s.Scan()
sub.Name = s.TokenText()
l := len(sub.Name)
if sub.Name[0] != '"' || sub.Name[l-1] != '"' || s.ErrorCount > 0 {
return SyntaxError
}
sub.Name = sub.Name[1 : len(sub.Name)-1]
s.Scan()
if s.TokenText() != "]" {
return SyntaxError
}
return nil
}
func ParseSubmodulesFile(reader io.Reader) ([]Submodule, error) {
ret := make([]Submodule, 0, 100)
s := new(scanner.Scanner)
s.Init(reader)
sub := &Submodule{}
for tok := s.Scan(); tok != scanner.EOF; tok = s.Scan() {
t := s.TokenText()
if t == "[" {
if err := sub.parseSubmoduleName(s); err != nil {
return nil, err
}
}
ret = append(ret, *sub)
}
return ret, nil
}

View File

@@ -8,9 +8,10 @@ import (
func TestSubmodules(t *testing.T) {
tests := []struct {
name string
file string
subs []Submodule
name string
file string
subs []Submodule
has_error bool
}{
{
name: "Empty submodules file",
@@ -18,34 +19,87 @@ func TestSubmodules(t *testing.T) {
subs: []Submodule{},
},
{
name: "Simple submodule",
file: `[submodule "libfoo"]
path = include/foo
url = git://foo.com/git/lib.git
[submodule "libbar"]
path = include/bar
url = git://bar.com/git/lib.git`,
name: "Empty single submodule",
file: "[submodule \"Foo\"]",
subs: []Submodule{
{Name: "Foo"},
},
},
{
name: "Invalid submodule name",
file: "[submodule \"Foo']",
has_error: true,
},
{
name: "Invalid submodule name",
file: "[submodule 'Foo']",
has_error: true,
},
{
name: "Invalid submodule name",
file: "[submodule Foo]",
has_error: true,
},
{
name: "Invalid submodule name",
file: "[submodul \"Foo\"]",
has_error: true,
},
{
name: "Invalid submodule name",
file: "[submodule \"Foo\"",
has_error: true,
},
{
name: "Gerbage input",
file: "asdf kjasf[d;fkl",
has_error: true,
},
{
name: "Submodule with one entry",
file: "[submodule \"libfoo\"]\npath = foo\n\n",
subs: []Submodule{
{
Name: "libfoo",
Path: "include/foo",
Url: "git://foo.com/git/lib.git",
},
{
Name: "libbar",
Path: "include/bar",
Url: "git://bar.com/git/lib.git",
Path: "foo",
},
},
},
/*
{
name: "Simple submodule",
file: `[submodule "libfoo"]
path = include/foo
url = git://foo.com/git/lib.git
[submodule "libbar"]
path = include/bar
url = git://bar.com/git/lib.git`,
subs: []Submodule{
{
Name: "libfoo",
Path: "include/foo",
Url: "git://foo.com/git/lib.git",
},
{
Name: "libbar",
Path: "include/bar",
Url: "git://bar.com/git/lib.git",
},
},
},
*/
}
for _, test := range tests {
t.Run(test.name, func(t *testing.T) {
mods, err := ParseSubmodules(strings.NewReader(test.file))
if err != nil {
mods, err := ParseSubmodulesFile(strings.NewReader(test.file))
if test.has_error {
if err == nil {
t.Error("Expected an error")
}
} else if err != nil {
t.Error("unexpected error:", err)
}
if !slices.Equal(mods, test.subs) {
@@ -54,4 +108,3 @@ func TestSubmodules(t *testing.T) {
})
}
}