github.com/lmorg/murex@v0.0.0-20240217211045-e081c89cd4ef/lang/types/cast_test.go (about)

     1  package types_test
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/lmorg/murex/lang/types"
     7  	"github.com/lmorg/murex/test/count"
     8  )
     9  
    10  type test struct {
    11  	In       interface{}
    12  	DataType string
    13  	Out      interface{}
    14  	Error    bool
    15  }
    16  
    17  func testConvertGoType(t *testing.T, tests []test) {
    18  	count.Tests(t, len(tests))
    19  
    20  	for i := range tests {
    21  		var failed bool
    22  
    23  		v, err := types.ConvertGoType(tests[i].In, tests[i].DataType)
    24  		if (err != nil && !tests[i].Error) ||
    25  			(err == nil && tests[i].Error) {
    26  
    27  			t.Error("ConvertGoType failed with an error:")
    28  			failed = true
    29  
    30  		} else if tests[i].Out != v {
    31  			t.Error("ConvertGoType out mismatch:")
    32  			failed = true
    33  		}
    34  
    35  		if failed {
    36  			t.Logf("  Test #:    %d", i)
    37  			t.Logf("  Mx Type:   %s", tests[i].DataType)
    38  			t.Logf("  In Type:   %T", tests[i].In)
    39  			t.Logf("  Exp Type:  %T", tests[i].Out)
    40  			t.Logf("  Act Type:  %T", v)
    41  			t.Log("  In Value: ", tests[i].In)
    42  			t.Log("  Exp Value:", tests[i].Out)
    43  			t.Log("  Act Value:", v)
    44  			t.Log("  Error:    ", err)
    45  			t.Log("  Exp Err:  ", tests[i].Error)
    46  		}
    47  	}
    48  }
    49  func TestConvertGoTypeBaseline(t *testing.T) {
    50  	tests := []test{
    51  		{
    52  			In:       nil,
    53  			DataType: types.Null,
    54  			Out:      "",
    55  		},
    56  		{
    57  			In:       "foobar",
    58  			DataType: types.String,
    59  			Out:      "foobar",
    60  		},
    61  		{
    62  			In:       42,
    63  			DataType: types.Integer,
    64  			Out:      42,
    65  		},
    66  		{
    67  			In:       42.12345,
    68  			DataType: types.Float,
    69  			Out:      float64(42.12345),
    70  		},
    71  		{
    72  			In:       42,
    73  			DataType: types.Number,
    74  			Out:      float64(42),
    75  		},
    76  		{
    77  			In:       42.12345,
    78  			DataType: types.Number,
    79  			Out:      float64(42.12345),
    80  		},
    81  		{
    82  			In:       true,
    83  			DataType: types.Boolean,
    84  			Out:      true,
    85  		},
    86  		{
    87  			In:       false,
    88  			DataType: types.Boolean,
    89  			Out:      false,
    90  		},
    91  		{
    92  			In:       `{ out: "testing" }`,
    93  			DataType: types.CodeBlock,
    94  			Out:      ` out: "testing" `,
    95  		},
    96  		{
    97  			In:       `foobar`,
    98  			DataType: types.Json,
    99  			//Out:      `{ "Value": "foobar" }`,
   100  			Out: `foobar`,
   101  		},
   102  	}
   103  
   104  	testConvertGoType(t, tests)
   105  }