git.sr.ht/~pingoo/stdx@v0.0.0-20240218134121-094174641f6e/validate/converter_test.go (about)

     1  package validate
     2  
     3  import (
     4  	"fmt"
     5  	"testing"
     6  )
     7  
     8  func TestToInt(t *testing.T) {
     9  	tests := []interface{}{"1000", "-123", "abcdef", "100000000000000000000000000000000000000000000", false}
    10  	expected := []int64{1000, -123, 0, 0, 0}
    11  	for i := 0; i < len(tests); i++ {
    12  		result, _ := ToInt(tests[i])
    13  		if result != expected[i] {
    14  			t.Log("Case ", i, ": expected ", expected[i], " when result is ", result)
    15  			t.FailNow()
    16  		}
    17  	}
    18  }
    19  
    20  func TestToBoolean(t *testing.T) {
    21  	tests := []string{"true", "1", "True", "false", "0", "abcdef"}
    22  	expected := []bool{true, true, true, false, false, false}
    23  	for i := 0; i < len(tests); i++ {
    24  		res, _ := ToBoolean(tests[i])
    25  		if res != expected[i] {
    26  			t.Log("Case ", i, ": expected ", expected[i], " when result is ", res)
    27  			t.FailNow()
    28  		}
    29  	}
    30  }
    31  
    32  func toString(t *testing.T, test interface{}, expected string) {
    33  	res := ToString(test)
    34  	if res != expected {
    35  		t.Log("Case ToString: expected ", expected, " when result is ", res)
    36  		t.FailNow()
    37  	}
    38  }
    39  
    40  func TestToString(t *testing.T) {
    41  	toString(t, "str123", "str123")
    42  	toString(t, 123, "123")
    43  	toString(t, 12.3, "12.3")
    44  	toString(t, true, "true")
    45  	toString(t, 1.5+10i, "(1.5+10i)")
    46  	// Sprintf function not guarantee that maps with equal keys always will be equal in string  representation
    47  	//toString(t, struct{ Keys map[int]int }{Keys: map[int]int{1: 2, 3: 4}}, "{map[1:2 3:4]}")
    48  }
    49  
    50  func TestToFloat(t *testing.T) {
    51  	tests := []string{"", "123", "-.01", "10.", "string", "1.23e3", ".23e10"}
    52  	expected := []float64{0, 123, -0.01, 10.0, 0, 1230, 0.23e10}
    53  	for i := 0; i < len(tests); i++ {
    54  		res, _ := ToFloat(tests[i])
    55  		if res != expected[i] {
    56  			t.Log("Case ", i, ": expected ", expected[i], " when result is ", res)
    57  			t.FailNow()
    58  		}
    59  	}
    60  }
    61  
    62  func TestToJSON(t *testing.T) {
    63  	tests := []interface{}{"test", map[string]string{"a": "b", "b": "c"}, func() error { return fmt.Errorf("Error") }}
    64  	expected := [][]string{
    65  		{"\"test\"", "<nil>"},
    66  		{"{\"a\":\"b\",\"b\":\"c\"}", "<nil>"},
    67  		{"", "json: unsupported type: func() error"},
    68  	}
    69  	for i, test := range tests {
    70  		actual, err := ToJSON(test)
    71  		if actual != expected[i][0] {
    72  			t.Errorf("Expected toJSON(%v) to return '%v', got '%v'", test, expected[i][0], actual)
    73  		}
    74  		if fmt.Sprintf("%v", err) != expected[i][1] {
    75  			t.Errorf("Expected error returned from toJSON(%v) to return '%v', got '%v'", test, expected[i][1], fmt.Sprintf("%v", err))
    76  		}
    77  	}
    78  }