...

Source file src/github.com/go-openapi/analysis/internal/antest/helpers.go

Documentation: github.com/go-openapi/analysis/internal/antest

     1  package antest
     2  
     3  import (
     4  	"encoding/json"
     5  	"flag"
     6  	"os"
     7  	"path/filepath"
     8  	"sync"
     9  	"testing"
    10  
    11  	"github.com/go-openapi/spec"
    12  	"github.com/go-openapi/swag"
    13  	"github.com/stretchr/testify/require"
    14  )
    15  
    16  var (
    17  	oncePathLoader  sync.Once
    18  	enableLongTests bool
    19  )
    20  
    21  func init() {
    22  	if flag.Lookup("enable-long") == nil {
    23  		flag.BoolVar(&enableLongTests, "enable-long", false, "enable long runnning tests")
    24  	}
    25  }
    26  
    27  // LongTestsEnabled returns the CLI flag
    28  func LongTestsEnabled() bool {
    29  	return enableLongTests
    30  }
    31  
    32  func initPathLoader() {
    33  	spec.PathLoader = func(path string) (json.RawMessage, error) {
    34  		ext := filepath.Ext(path)
    35  		if ext == ".yml" || ext == ".yaml" {
    36  			return swag.YAMLDoc(path)
    37  		}
    38  
    39  		data, err := swag.LoadFromFileOrHTTP(path)
    40  		if err != nil {
    41  			return nil, err
    42  		}
    43  
    44  		return json.RawMessage(data), nil
    45  	}
    46  }
    47  
    48  // LoadSpec loads a json or a yaml spec
    49  func LoadSpec(path string) (*spec.Swagger, error) {
    50  	oncePathLoader.Do(initPathLoader)
    51  
    52  	data, err := spec.PathLoader(path)
    53  	if err != nil {
    54  		return nil, err
    55  	}
    56  
    57  	var sw spec.Swagger
    58  	if err := json.Unmarshal(data, &sw); err != nil {
    59  		return nil, err
    60  	}
    61  
    62  	return &sw, nil
    63  }
    64  
    65  // LoadOrFail fetches a spec from a relative path or dies if the spec cannot be loaded properly
    66  func LoadOrFail(t testing.TB, relative string) *spec.Swagger {
    67  	cwd, _ := os.Getwd()
    68  	sp, err := LoadSpec(filepath.Join(cwd, relative))
    69  	require.NoError(t, err)
    70  
    71  	return sp
    72  }
    73  
    74  // AsJSON unmarshals anything as JSON or dies
    75  func AsJSON(t testing.TB, in interface{}) string {
    76  	bbb, err := json.MarshalIndent(in, "", " ")
    77  	require.NoError(t, err)
    78  
    79  	return string(bbb)
    80  }
    81  

View as plain text