-
Notifications
You must be signed in to change notification settings - Fork 2
/
jcs_test.go
93 lines (80 loc) · 2.49 KB
/
jcs_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
// Copyright 2021 Bret Jordan & Benedikt Thoma, All rights reserved.
// Copyright 2006-2019 WebPKI.org (http://webpki.org).
//
// Use of this source code is governed by an Apache 2.0 license that can be
// found in the LICENSE file in the root of the source tree.
package jcs
import (
"bytes"
"fmt"
"io/ioutil"
"path/filepath"
"testing"
"github.com/stretchr/testify/require"
)
const (
pathTestData = "./testdata"
pathInputRelativeToTestData = "/input"
pathOutputRelativeToTestData = "/output"
)
func failedBecause(errormsg string) string {
return fmt.Sprintf("Failed because %s", errormsg)
}
func errorOccurred(activity string, err error) string {
return failedBecause(fmt.Sprintf("an error occurred while %s: %s\n", activity, err))
}
func doesNotMatchExpected(expectedField, expectedValue, actualField, actualValue string) string {
return failedBecause(fmt.Sprintf("%s [%s] does not match expected %s [%s]\n", actualField, actualValue, expectedField, expectedValue))
}
func TestTransform(t *testing.T) {
r := require.New(t)
testCases := []struct {
desc string
filename string
}{
{
desc: "Arrays",
filename: "arrays.json",
},
{
desc: "French",
filename: "french.json",
},
{
desc: "SimpleString",
filename: "simpleString.json",
},
{
desc: "Structures",
filename: "structures.json",
},
{
desc: "Unicode",
filename: "unicode.json",
},
{
desc: "Values",
filename: "values.json",
},
{
desc: "Weird",
filename: "weird.json",
},
}
for _, tC := range testCases {
t.Run(tC.desc, func(t *testing.T) {
input, err := ioutil.ReadFile(filepath.Join(pathTestData,
pathInputRelativeToTestData, tC.filename))
r.NoError(err, errorOccurred("reading test input json", err))
output, err := ioutil.ReadFile(filepath.Join(pathTestData,
pathOutputRelativeToTestData, tC.filename))
r.NoError(err, errorOccurred("reading expected transformed output sample", err))
transformed, err := Transform(input)
r.NoError(err, errorOccurred("transforming test input", err))
twiceTransformed, err := Transform(input)
r.NoError(err, errorOccurred("transforming transformed input", err))
r.True(bytes.Equal(transformed, output), doesNotMatchExpected("JSON", string(output), "transformed JSON", string(transformed)))
r.True(bytes.Equal(twiceTransformed, transformed), doesNotMatchExpected("transformed JSON", string(transformed), "twice transformed JSON", string(twiceTransformed)))
})
}
}