Skip to content

Commit fd8d0bf

Browse files
authored
Add cmd/gotoml-test-encoder (#907)
1 parent a76e18e commit fd8d0bf

File tree

4 files changed

+72
-5
lines changed

4 files changed

+72
-5
lines changed

Diff for: ci.sh

+1-1
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ cover() {
7777

7878
pushd "$dir"
7979
go test -covermode=atomic -coverpkg=./... -coverprofile=coverage.out.tmp ./...
80-
cat coverage.out.tmp | grep -v fuzz | grep -v testsuite | grep -v tomltestgen | grep -v gotoml-test-decoder > coverage.out
80+
grep -Ev '(fuzz|testsuite|tomltestgen|gotoml-test-decoder|gotoml-test-encoder)' coverage.out.tmp > coverage.out
8181
go tool cover -func=coverage.out
8282
echo "Coverage profile for ${branch}: ${dir}/coverage.out" >&2
8383
popd

Diff for: cmd/gotoml-test-encoder/gotoml-test-encoder.go

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package main
2+
3+
import (
4+
"flag"
5+
"log"
6+
"os"
7+
"path"
8+
9+
"github.com/pelletier/go-toml/v2/internal/testsuite"
10+
)
11+
12+
func main() {
13+
log.SetFlags(0)
14+
flag.Usage = usage
15+
flag.Parse()
16+
if flag.NArg() != 0 {
17+
flag.Usage()
18+
}
19+
20+
err := testsuite.EncodeStdin()
21+
if err != nil {
22+
log.Fatal(err)
23+
}
24+
}
25+
26+
func usage() {
27+
log.Printf("Usage: %s < toml-file\n", path.Base(os.Args[0]))
28+
flag.PrintDefaults()
29+
os.Exit(1)
30+
}

Diff for: internal/testsuite/rm.go

+23-4
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ import (
44
"fmt"
55
"strconv"
66
"time"
7+
8+
"github.com/pelletier/go-toml/v2"
79
)
810

911
// Remove JSON tags to a data structure as returned by toml-test.
@@ -76,14 +78,31 @@ func untag(typed map[string]interface{}) (interface{}, error) {
7678
return nil, fmt.Errorf("untag: %w", err)
7779
}
7880
return f, nil
81+
82+
//toml.LocalDate{Year:2020, Month:12, Day:12}
7983
case "datetime":
80-
return parseTime(v, "2006-01-02T15:04:05.999999999Z07:00", false)
84+
return time.Parse("2006-01-02T15:04:05.999999999Z07:00", v)
8185
case "datetime-local":
82-
return parseTime(v, "2006-01-02T15:04:05.999999999", true)
86+
var t toml.LocalDateTime
87+
err := t.UnmarshalText([]byte(v))
88+
if err != nil {
89+
return nil, fmt.Errorf("untag: %w", err)
90+
}
91+
return t, nil
8392
case "date-local":
84-
return parseTime(v, "2006-01-02", true)
93+
var t toml.LocalDate
94+
err := t.UnmarshalText([]byte(v))
95+
if err != nil {
96+
return nil, fmt.Errorf("untag: %w", err)
97+
}
98+
return t, nil
8599
case "time-local":
86-
return parseTime(v, "15:04:05.999999999", true)
100+
var t toml.LocalTime
101+
err := t.UnmarshalText([]byte(v))
102+
if err != nil {
103+
return nil, fmt.Errorf("untag: %w", err)
104+
}
105+
return t, nil
87106
case "bool":
88107
switch v {
89108
case "true":

Diff for: internal/testsuite/testsuite.go

+18
Original file line numberDiff line numberDiff line change
@@ -48,3 +48,21 @@ func DecodeStdin() error {
4848

4949
return nil
5050
}
51+
52+
// EncodeStdin is a helper function for the toml-test binary interface. Tagged
53+
// JSON is read from STDIN and a resulting TOML representation is written to
54+
// STDOUT.
55+
func EncodeStdin() error {
56+
var j interface{}
57+
err := json.NewDecoder(os.Stdin).Decode(&j)
58+
if err != nil {
59+
return err
60+
}
61+
62+
rm, err := rmTag(j)
63+
if err != nil {
64+
return fmt.Errorf("removing tags: %w", err)
65+
}
66+
67+
return toml.NewEncoder(os.Stdout).Encode(rm)
68+
}

0 commit comments

Comments
 (0)