wip
This commit is contained in:
@@ -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
53
workflow-pr/submodules.go
Normal 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
|
||||
}
|
@@ -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) {
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user