[gitfame] Add format tests.
This commit is contained in:
parent
72498e46ac
commit
e074ac385c
7 changed files with 91 additions and 1 deletions
|
@ -1,6 +1,7 @@
|
|||
package integration
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"os/exec"
|
||||
|
@ -57,7 +58,7 @@ func TestGitFame(t *testing.T) {
|
|||
output, err := cmd.Output()
|
||||
if !tc.Error {
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, string(tc.Expected), string(output))
|
||||
CompareResults(t, tc.Expected, output, tc.Format)
|
||||
} else {
|
||||
require.Error(t, err)
|
||||
_, ok := err.(*exec.ExitError)
|
||||
|
@ -115,6 +116,7 @@ type TestDescription struct {
|
|||
Args []string `yaml:"args"`
|
||||
Bundle string `yaml:"bundle"`
|
||||
Error bool `yaml:"error"`
|
||||
Format string `yaml:"format,omitempty"`
|
||||
}
|
||||
|
||||
func ReadTestDescription(t *testing.T, path string) *TestDescription {
|
||||
|
@ -135,3 +137,40 @@ func Unbundle(t *testing.T, src, dst string) {
|
|||
cmd := exec.Command("git", "clone", src, dst)
|
||||
require.NoError(t, cmd.Run())
|
||||
}
|
||||
|
||||
func CompareResults(t *testing.T, expected, actual []byte, format string) {
|
||||
t.Helper()
|
||||
|
||||
switch format {
|
||||
case "json":
|
||||
if len(expected) == 0 {
|
||||
require.Empty(t, string(actual))
|
||||
} else {
|
||||
require.JSONEq(t, string(expected), string(actual))
|
||||
}
|
||||
case "json-lines":
|
||||
if len(expected) == 0 {
|
||||
require.Empty(t, string(actual))
|
||||
} else {
|
||||
CompareJSONLines(t, expected, actual)
|
||||
}
|
||||
default:
|
||||
require.Equal(t, string(expected), string(actual))
|
||||
}
|
||||
}
|
||||
|
||||
func CompareJSONLines(t *testing.T, expected, actual []byte) {
|
||||
t.Helper()
|
||||
|
||||
expectedLines := ParseJSONLines(expected)
|
||||
actualLines := ParseJSONLines(actual)
|
||||
require.Equal(t, len(expectedLines), len(actualLines))
|
||||
|
||||
for i, l := range expectedLines {
|
||||
require.JSONEq(t, string(l), string(actualLines[i]))
|
||||
}
|
||||
}
|
||||
|
||||
func ParseJSONLines(data []byte) [][]byte {
|
||||
return bytes.Split(bytes.TrimSpace(data), []byte("\n"))
|
||||
}
|
||||
|
|
5
gitfame/test/integration/testdata/tests/27/description.yaml
vendored
Normal file
5
gitfame/test/integration/testdata/tests/27/description.yaml
vendored
Normal file
|
@ -0,0 +1,5 @@
|
|||
# go-cmp, HEAD, tabular
|
||||
|
||||
name: go-cmp HEAD tabular
|
||||
args: []
|
||||
bundle: go-cmp.bundle
|
17
gitfame/test/integration/testdata/tests/27/expected.out
vendored
Normal file
17
gitfame/test/integration/testdata/tests/27/expected.out
vendored
Normal file
|
@ -0,0 +1,17 @@
|
|||
Name Lines Commits Files
|
||||
Joe Tsai 13818 94 54
|
||||
colinnewell 130 1 1
|
||||
A. Ishikawa 92 1 2
|
||||
Roger Peppe 59 1 2
|
||||
Tobias Klauser 35 2 3
|
||||
178inaba 27 2 5
|
||||
Kyle Lemons 11 1 1
|
||||
Dmitri Shuralyov 8 1 2
|
||||
ferhat elmas 7 1 4
|
||||
Christian Muehlhaeuser 6 3 4
|
||||
k.nakada 5 1 3
|
||||
LMMilewski 5 1 2
|
||||
Ernest Galbrun 3 1 1
|
||||
Ross Light 2 1 1
|
||||
Chris Morrow 1 1 1
|
||||
Fiisio 1 1 1
|
6
gitfame/test/integration/testdata/tests/28/description.yaml
vendored
Normal file
6
gitfame/test/integration/testdata/tests/28/description.yaml
vendored
Normal file
|
@ -0,0 +1,6 @@
|
|||
# go-cmp, HEAD, json
|
||||
|
||||
name: go-cmp HEAD json
|
||||
args: [--format, json]
|
||||
bundle: go-cmp.bundle
|
||||
format: json
|
1
gitfame/test/integration/testdata/tests/28/expected.out
vendored
Normal file
1
gitfame/test/integration/testdata/tests/28/expected.out
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
[{"name":"Joe Tsai","lines":13818,"commits":94,"files":54},{"name":"colinnewell","lines":130,"commits":1,"files":1},{"name":"A. Ishikawa","lines":92,"commits":1,"files":2},{"name":"Roger Peppe","lines":59,"commits":1,"files":2},{"name":"Tobias Klauser","lines":35,"commits":2,"files":3},{"name":"178inaba","lines":27,"commits":2,"files":5},{"name":"Kyle Lemons","lines":11,"commits":1,"files":1},{"name":"Dmitri Shuralyov","lines":8,"commits":1,"files":2},{"name":"ferhat elmas","lines":7,"commits":1,"files":4},{"name":"Christian Muehlhaeuser","lines":6,"commits":3,"files":4},{"name":"k.nakada","lines":5,"commits":1,"files":3},{"name":"LMMilewski","lines":5,"commits":1,"files":2},{"name":"Ernest Galbrun","lines":3,"commits":1,"files":1},{"name":"Ross Light","lines":2,"commits":1,"files":1},{"name":"Chris Morrow","lines":1,"commits":1,"files":1},{"name":"Fiisio","lines":1,"commits":1,"files":1}]
|
6
gitfame/test/integration/testdata/tests/29/description.yaml
vendored
Normal file
6
gitfame/test/integration/testdata/tests/29/description.yaml
vendored
Normal file
|
@ -0,0 +1,6 @@
|
|||
# go-cmp, HEAD, json-lines
|
||||
|
||||
name: go-cmp HEAD json
|
||||
args: [--format, json-lines]
|
||||
bundle: go-cmp.bundle
|
||||
format: json-lines
|
16
gitfame/test/integration/testdata/tests/29/expected.out
vendored
Normal file
16
gitfame/test/integration/testdata/tests/29/expected.out
vendored
Normal file
|
@ -0,0 +1,16 @@
|
|||
{"name":"Joe Tsai","lines":13818,"commits":94,"files":54}
|
||||
{"name":"colinnewell","lines":130,"commits":1,"files":1}
|
||||
{"name":"A. Ishikawa","lines":92,"commits":1,"files":2}
|
||||
{"name":"Roger Peppe","lines":59,"commits":1,"files":2}
|
||||
{"name":"Tobias Klauser","lines":35,"commits":2,"files":3}
|
||||
{"name":"178inaba","lines":27,"commits":2,"files":5}
|
||||
{"name":"Kyle Lemons","lines":11,"commits":1,"files":1}
|
||||
{"name":"Dmitri Shuralyov","lines":8,"commits":1,"files":2}
|
||||
{"name":"ferhat elmas","lines":7,"commits":1,"files":4}
|
||||
{"name":"Christian Muehlhaeuser","lines":6,"commits":3,"files":4}
|
||||
{"name":"k.nakada","lines":5,"commits":1,"files":3}
|
||||
{"name":"LMMilewski","lines":5,"commits":1,"files":2}
|
||||
{"name":"Ernest Galbrun","lines":3,"commits":1,"files":1}
|
||||
{"name":"Ross Light","lines":2,"commits":1,"files":1}
|
||||
{"name":"Chris Morrow","lines":1,"commits":1,"files":1}
|
||||
{"name":"Fiisio","lines":1,"commits":1,"files":1}
|
Loading…
Reference in a new issue