github.com/profzone/eden-framework@v1.0.10/pkg/codegen/snippet_stmt_test.go (about)

     1  package codegen
     2  
     3  import (
     4  	"go/token"
     5  	"testing"
     6  
     7  	"github.com/stretchr/testify/require"
     8  )
     9  
    10  func TestSnippet_SwitchStmt(t *testing.T) {
    11  	tt := require.New(t)
    12  
    13  	tt.Equal(`switch os := runtime.GOOS; os {
    14  case "darwin", "darwin32":
    15  case "linux":
    16  default:
    17  }`, Stringify(
    18  		Switch(
    19  			Id("os"),
    20  		).InitWith(Expr("os := runtime.GOOS")).When(
    21  			Clause(Val("darwin"), Val("darwin32")),
    22  			Clause(Val("linux")),
    23  			Clause(),
    24  		),
    25  	))
    26  
    27  	tt.Equal(`switch i {
    28  case 0:
    29  case fn():
    30  }`, Stringify(
    31  		Switch(
    32  			Id("i"),
    33  		).When(
    34  			Clause(Val(0)),
    35  			Clause(Call("fn")),
    36  		),
    37  	))
    38  
    39  	tt.Equal(`switch {
    40  case t.Hour() < 12:
    41  case t.Hour() < 17:
    42  default:
    43  i++
    44  }`, Stringify(
    45  		Switch(nil).When(
    46  			Clause(Expr("t.Hour() < 12")),
    47  			Clause(Expr("t.Hour() < 17")),
    48  			Clause().Do(Expr("i++")),
    49  		),
    50  	))
    51  }
    52  
    53  func TestSnippet_SelectStmt(t *testing.T) {
    54  	tt := require.New(t)
    55  
    56  	tt.Equal(`select {
    57  case c <- x:
    58  x, y = y, x+y
    59  case <- quit:
    60  fmt.Println("quit")
    61  return
    62  }`, Stringify(
    63  		Select(
    64  			Clause(Expr("c <- x")).Do(Expr("x, y = y, x+y")),
    65  			Clause(Expr("<- quit")).Do(
    66  				Expr(`fmt.Println("quit")`),
    67  				Return(),
    68  			),
    69  		),
    70  	))
    71  }
    72  
    73  func TestSnippet_IfStmt(t *testing.T) {
    74  	tt := require.New(t)
    75  
    76  	tt.Equal(`if i := 1; i == 1 {
    77  }`, Stringify(
    78  		If(Expr("i == 1")).InitWith(Expr("i := 1")),
    79  	))
    80  
    81  	tt.Equal(`if i == 1 {
    82  } else {
    83  }`, Stringify(
    84  		If(Expr("i == 1")).Else(
    85  			If(nil),
    86  		),
    87  	))
    88  
    89  	tt.Equal(`if i := 1; i == 1 {
    90  i++
    91  } else if i == 2 {
    92  }`, Stringify(
    93  		If(Expr("i == 1")).InitWith(Expr("i := 1")).Do(Expr("i++")).
    94  			Else(If(Expr("i == 2"))),
    95  	))
    96  }
    97  
    98  func TestSnippet_For(t *testing.T) {
    99  	tt := require.New(t)
   100  
   101  	tt.Equal(`for i := 1; i < 10; i++ {
   102  }`, Stringify(
   103  		For(Expr("i := 1"), Expr("i < 10"), Expr("i++")).Do(),
   104  	))
   105  
   106  	tt.Equal(`for a < 1 {
   107  }`, Stringify(
   108  		For(nil, Expr("a < 1"), nil),
   109  	))
   110  
   111  	tt.Equal(`for {
   112  }`, Stringify(
   113  		For(nil, nil, nil),
   114  	))
   115  
   116  	tt.Equal(`for _, v := range []string{
   117  "1",
   118  "2",
   119  } {
   120  }`, Stringify(
   121  		ForRange(Val([]string{"1", "2"}), "_", "v"),
   122  	))
   123  
   124  	tt.Equal(`for range []string{
   125  "1",
   126  "2",
   127  } {
   128  i++
   129  }`, Stringify(
   130  		ForRange(Val([]string{"1", "2"})).Do(Expr("i++")),
   131  	))
   132  }
   133  
   134  func TestSnippet_AssignStmt(t *testing.T) {
   135  	tt := require.New(t)
   136  
   137  	tt.Equal(`a = Fn("1")`, Stringify(
   138  		Assign(Id("a")).By(Call("Fn", Val("1"))),
   139  	))
   140  
   141  	tt.Equal(`a += Fn("1")`, Stringify(
   142  		AssignWith(token.ADD_ASSIGN, Id("a")).By(Call("Fn", Val("1"))),
   143  	))
   144  
   145  	tt.Equal(`a := Fn("1")`, Stringify(
   146  		Define(Id("a")).By(Call("Fn", Val("1"))),
   147  	))
   148  
   149  	tt.Equal(`a, b := "1", 1`, Stringify(
   150  		Define(Id("a"), Id("b")).By(Val("1"), Val(1)),
   151  	))
   152  }
   153  
   154  func TestSnippet_ReturnStmt(t *testing.T) {
   155  	tt := require.New(t)
   156  
   157  	tt.Equal(`return`, Stringify(
   158  		Return(),
   159  	))
   160  
   161  	tt.Equal(`return a`, Stringify(
   162  		Return(Id("a")),
   163  	))
   164  
   165  	tt.Equal(`return a, fmt.Sprintf("%s", 1)`, Stringify(
   166  		Return(Id("a"), Call("fmt.Sprintf", Val("%s"), Val(1))),
   167  	))
   168  }