github.com/influx6/npkg@v0.8.8/njs/njs_test.go (about)

     1  package njs_test
     2  
     3  import (
     4  	"strings"
     5  	"testing"
     6  
     7  	"github.com/influx6/npkg/njs/producers"
     8  
     9  	"github.com/influx6/npkg/njs"
    10  	"github.com/stretchr/testify/require"
    11  )
    12  
    13  func TestClassBlock(t *testing.T) {
    14  	var funcDecl = njs.ClassBlock(njs.Class{
    15  		Name:    "Mix",
    16  		Extends: "",
    17  		Body: njs.Join(
    18  			njs.Function(njs.Func{
    19  				Name:   "Mixer",
    20  				Args:   "name",
    21  				Body:   `console.log("Mixing: ", name)`,
    22  				Async:  true,
    23  				Static: false,
    24  			}),
    25  			njs.Function(njs.Func{
    26  				Name:   "Mix",
    27  				Args:   "name",
    28  				Body:   `console.log("Mixing: ", name)`,
    29  				Async:  false,
    30  				Static: true,
    31  			}),
    32  		),
    33  	})
    34  	require.Equal(t, funcDecl, "\n\n\n\n\n\n\n\n\n\n\n\n\n\nclass Mix {\n    \n    \n  "+
    35  		"  \n    async function Mixer(name) {\n        console.log(\"Mixing: \", name)\n    };\n "+
    36  		"   \n    \n    \n    static Mix(name) {\n        console.log(\"Mixing: \", name)\n    };\n};")
    37  }
    38  
    39  func TestAsyncFunctionCall(t *testing.T) {
    40  	var funcDecl = njs.FunctionCall(njs.Func{
    41  		Name:   "Mix",
    42  		Args:   "name",
    43  		Body:   "",
    44  		Async:  true,
    45  		Static: false,
    46  	})
    47  	require.Equal(t, funcDecl, `await Mix(name);`)
    48  }
    49  
    50  func TestFunctionCall(t *testing.T) {
    51  	var funcDecl = njs.FunctionCall(njs.Func{
    52  		Name:   "Mix",
    53  		Args:   "name",
    54  		Body:   "",
    55  		Async:  false,
    56  		Static: false,
    57  	})
    58  	require.Equal(t, funcDecl, `Mix(name);`)
    59  }
    60  
    61  func TestStaticFunction(t *testing.T) {
    62  	var funcDecl = njs.Function(njs.Func{
    63  		Name:   "Mix",
    64  		Args:   "name",
    65  		Body:   `console.log("Mixing: ", name)`,
    66  		Async:  false,
    67  		Static: true,
    68  	})
    69  	require.Equal(t, funcDecl, "\n\n\nstatic Mix(name) {\n    console.log(\"Mixing: \", name)\n};")
    70  }
    71  
    72  func TestAsyncStaticFunction(t *testing.T) {
    73  	var funcDecl = njs.Function(njs.Func{
    74  		Name:   "Mix",
    75  		Args:   "name",
    76  		Body:   `console.log("Mixing: ", name)`,
    77  		Async:  true,
    78  		Static: true,
    79  	})
    80  
    81  	require.Equal(t, funcDecl, "\n\n\nstatic async Mix(name) {\n    console.log(\"Mixing: \", name)\n};")
    82  }
    83  
    84  func TestAsyncFunction(t *testing.T) {
    85  	var funcDecl = njs.Function(njs.Func{
    86  		Name:   "Mix",
    87  		Args:   "name",
    88  		Body:   `console.log("Mixing: ", name)`,
    89  		Async:  true,
    90  		Static: false,
    91  	})
    92  
    93  	require.Equal(t, funcDecl, "\n\n\nasync function Mix(name) {\n    console.log(\"Mixing: \", name)\n};")
    94  }
    95  
    96  func TestFunction(t *testing.T) {
    97  	var funcDecl = njs.Function(njs.Func{
    98  		Name:   "Mix",
    99  		Args:   "name",
   100  		Body:   `console.log("Mixing: ", name)`,
   101  		Async:  false,
   102  		Static: false,
   103  	})
   104  
   105  	require.Equal(t, funcDecl, "\n\n\nfunction Mix(name) {\n    console.log(\"Mixing: \", name)\n};")
   106  }
   107  
   108  func TestVariable(t *testing.T) {
   109  	var variableDecl = njs.Variable(njs.Var{Name: "name", Value: `"Alex"`})
   110  	require.Equal(t, variableDecl, `var name = "Alex";`)
   111  }
   112  
   113  func TestComposeProducers(t *testing.T) {
   114  	var composed = njs.ComposeProducers(
   115  		true,
   116  		producers.ComposeVariable(njs.Var{Name: "name", Value: `"Alex"`}),
   117  		producers.ComposeVariable(njs.Var{Name: "age", Value: `20`}),
   118  		producers.ComposeVariable(njs.Var{Name: "range", Value: `1`}),
   119  	)
   120  
   121  	var builder strings.Builder
   122  	require.NoError(t, composed(&builder))
   123  	require.Equal(t, builder.String(), "var name = \"Alex\";\nvar age = 20;\nvar range = 1;")
   124  }