...

Source file src/oss.terrastruct.com/util-go/assert/assert.go

Documentation: oss.terrastruct.com/util-go/assert

     1  // Package assert provides test assertion helpers.
     2  package assert
     3  
     4  import (
     5  	"io"
     6  	"os"
     7  	"path/filepath"
     8  	"testing"
     9  
    10  	"go.uber.org/multierr"
    11  
    12  	"oss.terrastruct.com/util-go/diff"
    13  	"oss.terrastruct.com/util-go/xjson"
    14  )
    15  
    16  func Success(tb testing.TB, err error) {
    17  	tb.Helper()
    18  	if err != nil {
    19  		tb.Fatalf("unexpected error: %v", err)
    20  	}
    21  }
    22  
    23  func Error(tb testing.TB, err error) {
    24  	tb.Helper()
    25  	if err == nil {
    26  		tb.Fatal("expected error")
    27  	}
    28  }
    29  
    30  func ErrorString(tb testing.TB, err error, msg string) {
    31  	tb.Helper()
    32  	if err == nil {
    33  		tb.Fatalf("expected error containing %q", msg)
    34  	}
    35  	String(tb, msg, err.Error())
    36  }
    37  
    38  func StringJSON(tb testing.TB, exp string, got interface{}) {
    39  	tb.Helper()
    40  	String(tb, exp, string(xjson.Marshal(got)))
    41  }
    42  
    43  func String(tb testing.TB, exp, got string) {
    44  	tb.Helper()
    45  	diff, err := diff.Strings(exp, got)
    46  	Success(tb, err)
    47  	if diff != "" {
    48  		tb.Fatalf("\n%s", diff)
    49  	}
    50  }
    51  
    52  func JSON(tb testing.TB, exp, got interface{}) {
    53  	tb.Helper()
    54  	diff, err := diff.JSON(exp, got)
    55  	Success(tb, err)
    56  	if diff != "" {
    57  		tb.Fatalf("\n%s", diff)
    58  	}
    59  }
    60  
    61  func Runes(tb testing.TB, exp, got string) {
    62  	tb.Helper()
    63  	err := diff.Runes(exp, got)
    64  	Success(tb, err)
    65  }
    66  
    67  func TestdataJSON(tb testing.TB, got interface{}) {
    68  	tb.Helper()
    69  	err := diff.TestdataJSON(filepath.Join("testdata", tb.Name()), got)
    70  	Success(tb, err)
    71  }
    72  
    73  func Testdata(tb testing.TB, ext string, got []byte) {
    74  	tb.Helper()
    75  	err := diff.Testdata(filepath.Join("testdata", tb.Name()), ext, got)
    76  	Success(tb, err)
    77  }
    78  
    79  func TestdataDir(tb testing.TB, dir string) {
    80  	tb.Helper()
    81  	err := diff.TestdataDir(filepath.Join("testdata", tb.Name()), dir)
    82  	if err != nil {
    83  		for _, err = range multierr.Errors(err) {
    84  			tb.Error(err)
    85  		}
    86  	}
    87  	if tb.Failed() {
    88  		tb.FailNow()
    89  	}
    90  }
    91  
    92  func Close(tb testing.TB, c io.Closer) {
    93  	tb.Helper()
    94  	err := c.Close()
    95  	if err != nil {
    96  		tb.Fatalf("failed to close %T: %v", c, err)
    97  	}
    98  }
    99  
   100  func Equal(tb testing.TB, exp, got interface{}) {
   101  	tb.Helper()
   102  	if exp == got {
   103  		return
   104  	}
   105  	exps, ok := exp.(string)
   106  	if ok {
   107  		gots, ok := got.(string)
   108  		if ok {
   109  			String(tb, exps, gots)
   110  			return
   111  		}
   112  	}
   113  	tb.Fatalf("expected %#v but got %#v", exp, got)
   114  }
   115  
   116  func NotEqual(tb testing.TB, v1, v2 interface{}) {
   117  	tb.Helper()
   118  	if v1 != v2 {
   119  		return
   120  	}
   121  	tb.Fatalf("did not expect %#v", v2)
   122  }
   123  
   124  func True(tb testing.TB, v bool) {
   125  	tb.Helper()
   126  	Equal(tb, true, v)
   127  }
   128  
   129  func False(tb testing.TB, v bool) {
   130  	tb.Helper()
   131  	Equal(tb, false, v)
   132  }
   133  
   134  func TempDir(tb testing.TB) (dir string, cleanup func()) {
   135  	tb.Helper()
   136  
   137  	dir, err := os.MkdirTemp("", "util-go.assert.TempDir")
   138  	Success(tb, err)
   139  	return dir, func() {
   140  		tb.Helper()
   141  		err = os.RemoveAll(dir)
   142  		Success(tb, err)
   143  	}
   144  }
   145  
   146  func WriteFile(tb testing.TB, fp string, data []byte, perms os.FileMode) {
   147  	tb.Helper()
   148  
   149  	err := os.WriteFile(fp, data, perms)
   150  	Success(tb, err)
   151  }
   152  
   153  func ReadFile(tb testing.TB, fp string) (data []byte) {
   154  	tb.Helper()
   155  
   156  	data, err := os.ReadFile(fp)
   157  	Success(tb, err)
   158  	return data
   159  }
   160  
   161  func Remove(tb testing.TB, fp string) {
   162  	tb.Helper()
   163  
   164  	err := os.Remove(fp)
   165  	Success(tb, err)
   166  }
   167  
   168  func RemoveAll(tb testing.TB, fp string) {
   169  	tb.Helper()
   170  
   171  	err := os.RemoveAll(fp)
   172  	Success(tb, err)
   173  }
   174  

View as plain text