@@ -8,15 +8,14 @@ import (
88 "embed"
99 "encoding/json"
1010 "errors"
11- "fmt"
1211 "io"
1312 "io/fs"
1413 "iter"
1514 "path/filepath"
1615 "regexp"
1716 "testing"
1817
19- "github.com/go-openapi/testify/v2/assert"
18+ _ "github.com/go-openapi/testify/enable/yaml/v2" // enable yaml in testify
2019 "github.com/go-openapi/testify/v2/require"
2120 yaml "go.yaml.in/yaml/v3"
2221)
@@ -199,11 +198,19 @@ func loadFixture(fsys fs.FS, pth string) ([]byte, error) {
199198func JSONEqualOrdered (t testing.TB , expected , actual string ) {
200199 t .Helper ()
201200
202- bufExpected := bytes .NewBufferString (expected )
201+ JSONEqualOrderedBytes (t , []byte (expected ), []byte (actual ))
202+ }
203+
204+ // JSONEqualOrderedBytes is a replacement for [require.JSONEqBytes] that checks further that
205+ // two JSONs are exactly equal. See [JSONEqualOrdered].
206+ func JSONEqualOrderedBytes (t testing.TB , expected , actual []byte ) {
207+ t .Helper ()
208+
209+ bufExpected := bytes .NewBuffer (expected )
203210 decExpected := json .NewDecoder (bufExpected )
204211 expectedTokens := make ([]json.Token , 0 )
205212
206- bufActual := bytes .NewBufferString (actual )
213+ bufActual := bytes .NewBuffer (actual )
207214 decActual := json .NewDecoder (bufActual )
208215
209216 for {
@@ -266,53 +273,25 @@ var (
266273func YAMLEqualOrdered (t testing.TB , expected , actual string ) {
267274 t .Helper ()
268275
269- RequireYAMLEq (t , expected , actual ) // necessary but not sufficient condition
270-
271- // strip all indentation and comments (anchors not supported)
272- strippedExpected := rexStripIndent .ReplaceAllString (expected , "" )
273- strippedExpected = rexStripComment .ReplaceAllString (strippedExpected , "" )
274- strippedExpected = rexStripInlineComment .ReplaceAllString (strippedExpected , "$1" )
275- strippedExpected = rexStripEmpty .ReplaceAllString (strippedExpected , "" )
276-
277- strippedActual := rexStripIndent .ReplaceAllString (expected , "" )
278- strippedActual = rexStripComment .ReplaceAllString (strippedActual , "" )
279- strippedActual = rexStripInlineComment .ReplaceAllString (strippedActual , "$1" )
280- strippedActual = rexStripEmpty .ReplaceAllString (strippedActual , "" )
281-
282- require .Equal (t , strippedExpected , strippedActual )
276+ YAMLEqualOrderedBytes (t , []byte (expected ), []byte (actual ))
283277}
284278
285- // RequireYAMLEq is the same as [require.YAMLEq] but without the dependency to go.pkg.in/yaml.v3.
286- //
287- // NOTE: this could be reverted once https://github.com/stretchr/testify/pull/1772 is merged.
288- func RequireYAMLEq (t testing.TB , expected string , actual string , msgAndArgs ... any ) {
279+ func YAMLEqualOrderedBytes (t testing.TB , expected , actual []byte ) {
289280 t .Helper ()
290281
291- if AssertYAMLEq (t , expected , actual , msgAndArgs ... ) {
292- return
293- }
294- t .FailNow ()
295- }
296-
297- // AssertYAMLEq is the same as [assert.YAMLEq] but without the dependency to go.pkg.in/yaml.v3.
298- //
299- // NOTE: this could be reverted once https://github.com/stretchr/testify/pull/1772 is merged.
300- func AssertYAMLEq (t testing.TB , expected string , actual string , msgAndArgs ... any ) bool {
301- t .Helper ()
302- var expectedYAMLAsInterface , actualYAMLAsInterface any
303-
304- if err := yaml .Unmarshal ([]byte (expected ), & expectedYAMLAsInterface ); err != nil {
305- return assert .Fail (t , fmt .Sprintf ("Expected value ('%s') is not valid yaml.\n YAML parsing error: '%s'" , expected , err .Error ()), msgAndArgs ... )
306- }
282+ // TODO: add YAMLEqBytes to testify
283+ require .YAMLEq (t , string (expected ), string (actual )) // necessary but not sufficient condition
307284
308- // Shortcut if same bytes
309- if actual == expected {
310- return true
311- }
285+ // strip all indentation and comments (anchors not supported)
286+ strippedExpected := rexStripIndent .ReplaceAll (expected , []byte ("" ))
287+ strippedExpected = rexStripComment .ReplaceAll (strippedExpected , []byte ("" ))
288+ strippedExpected = rexStripInlineComment .ReplaceAll (strippedExpected , []byte ("$1" ))
289+ strippedExpected = rexStripEmpty .ReplaceAll (strippedExpected , []byte ("" ))
312290
313- if err := yaml .Unmarshal ([]byte (actual ), & actualYAMLAsInterface ); err != nil {
314- return assert .Fail (t , fmt .Sprintf ("Input ('%s') needs to be valid yaml.\n YAML error: '%s'" , actual , err .Error ()), msgAndArgs ... )
315- }
291+ strippedActual := rexStripIndent .ReplaceAll (expected , []byte ("" ))
292+ strippedActual = rexStripComment .ReplaceAll (strippedActual , []byte ("" ))
293+ strippedActual = rexStripInlineComment .ReplaceAll (strippedActual , []byte ("$1" ))
294+ strippedActual = rexStripEmpty .ReplaceAll (strippedActual , []byte ("" ))
316295
317- return assert .Equal (t , expectedYAMLAsInterface , actualYAMLAsInterface , msgAndArgs ... )
296+ require .Equal (t , strippedExpected , strippedActual )
318297}
0 commit comments