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

     1  package types_test
     2  
     3  import (
     4  	"strings"
     5  	"testing"
     6  
     7  	"github.com/lmorg/murex/lang/types"
     8  	"github.com/lmorg/murex/test/count"
     9  )
    10  
    11  func testIsTrue(t *testing.T, val string, exp bool, exitNum int) {
    12  	t.Helper()
    13  	count.Tests(t, 3)
    14  	var act bool
    15  
    16  	act = types.IsTrue([]byte(strings.ToLower(val)), exitNum)
    17  	if act != exp {
    18  		t.Error("IsTrue output does not match expected:")
    19  		t.Log("Value:   ", val)
    20  		t.Log("Expected:", exp)
    21  		t.Log("Actual:  ", act)
    22  		t.Log("Exit num:", exitNum)
    23  		t.Log("Case:      lower")
    24  	}
    25  
    26  	act = types.IsTrue([]byte(strings.Title(val)), exitNum)
    27  	if act != exp {
    28  		t.Error("IsTrue output does not match expected (title):")
    29  		t.Log("Value:   ", val)
    30  		t.Log("Expected:", exp)
    31  		t.Log("Actual:  ", act)
    32  		t.Log("Exit num:", exitNum)
    33  		t.Log("Case:      title")
    34  	}
    35  
    36  	act = types.IsTrue([]byte(strings.ToUpper(val)), exitNum)
    37  	if act != exp {
    38  		t.Error("IsTrue output does not match expected (upper):")
    39  		t.Log("Value:   ", val)
    40  		t.Log("Expected:", exp)
    41  		t.Log("Actual:  ", act)
    42  		t.Log("Exit num:", exitNum)
    43  		t.Log("Case:      upper")
    44  	}
    45  }
    46  
    47  func TestIsTrue(t *testing.T) {
    48  	tests := map[string]bool{
    49  		"":              false,
    50  		"random string": true,
    51  		"true":          true,
    52  		"false":         false,
    53  		"null":          false,
    54  		"-1":            true,
    55  		"-0":            true,
    56  		"0":             false,
    57  		"1":             true,
    58  		"yes":           true,
    59  		"no":            false,
    60  		"on":            true,
    61  		"of":            true,
    62  		"off":           false,
    63  		"success":       true,
    64  		"pass":          true,
    65  		"fail":          false,
    66  		"failed":        false,
    67  		"positive":      true,
    68  		"negative":      true,
    69  		"enabled":       true,
    70  		"disabled":      false,
    71  	}
    72  
    73  	exitNums := map[int]interface{}{
    74  		-42: true,
    75  		-1:  true,
    76  		0:   nil,
    77  		1:   false,
    78  		42:  false,
    79  	}
    80  
    81  	for exitNum, override := range exitNums {
    82  
    83  		for val, exp := range tests {
    84  
    85  			if override != nil {
    86  				exp = override.(bool)
    87  			}
    88  
    89  			testIsTrue(t, val, exp, exitNum)
    90  
    91  		}
    92  
    93  	}
    94  
    95  }
    96  
    97  func TestIsBlock(t *testing.T) {
    98  	tests := map[string]bool{
    99  		"": false,
   100  
   101  		"{":   false,
   102  		" {":  false,
   103  		"{ ":  false,
   104  		" { ": false,
   105  
   106  		"}":   false,
   107  		" }":  false,
   108  		"} ":  false,
   109  		" } ": false,
   110  
   111  		"}{":   false,
   112  		" }{":  false,
   113  		"}{ ":  false,
   114  		" }{ ": false,
   115  
   116  		"} {":   false,
   117  		" } {":  false,
   118  		"} { ":  false,
   119  		" } { ": false,
   120  
   121  		"{}":   true,
   122  		" {}":  true,
   123  		"{} ":  true,
   124  		" {} ": true,
   125  
   126  		"{ }":   true,
   127  		" { }":  true,
   128  		"{ } ":  true,
   129  		" { } ": true,
   130  
   131  		"{1}":   true,
   132  		" {1}":  true,
   133  		"{1} ":  true,
   134  		" {1} ": true,
   135  
   136  		"{ 1}":   true,
   137  		" { 1}":  true,
   138  		"{ 1} ":  true,
   139  		" { 1} ": true,
   140  
   141  		"{1 }":   true,
   142  		" {1 }":  true,
   143  		"{1 } ":  true,
   144  		" {1 } ": true,
   145  
   146  		"{ 1 }":   true,
   147  		" { 1 }":  true,
   148  		"{ 1 } ":  true,
   149  		" { 1 } ": true,
   150  
   151  		"{42}":   true,
   152  		" {42}":  true,
   153  		"{42} ":  true,
   154  		" {42} ": true,
   155  
   156  		"{ 42}":   true,
   157  		" { 42}":  true,
   158  		"{ 42} ":  true,
   159  		" { 42} ": true,
   160  
   161  		"{42 }":   true,
   162  		" {42 }":  true,
   163  		"{42 } ":  true,
   164  		" {42 } ": true,
   165  
   166  		"{ 42 }":   true,
   167  		" { 42 }":  true,
   168  		"{ 42 } ":  true,
   169  		" { 42 } ": true,
   170  
   171  		"{f}":   true,
   172  		" {f}":  true,
   173  		"{f} ":  true,
   174  		" {f} ": true,
   175  
   176  		"{ f}":   true,
   177  		" { f}":  true,
   178  		"{ f} ":  true,
   179  		" { f} ": true,
   180  
   181  		"{f }":   true,
   182  		" {f }":  true,
   183  		"{f } ":  true,
   184  		" {f } ": true,
   185  
   186  		"{ f }":   true,
   187  		" { f }":  true,
   188  		"{ f } ":  true,
   189  		" { f } ": true,
   190  
   191  		"{foobar}":   true,
   192  		" {foobar}":  true,
   193  		"{foobar} ":  true,
   194  		" {foobar} ": true,
   195  
   196  		"{ foobar}":   true,
   197  		" { foobar}":  true,
   198  		"{ foobar} ":  true,
   199  		" { foobar} ": true,
   200  
   201  		"{foobar }":   true,
   202  		" {foobar }":  true,
   203  		"{foobar } ":  true,
   204  		" {foobar } ": true,
   205  
   206  		"{ foobar }":   true,
   207  		" { foobar }":  true,
   208  		"{ foobar } ":  true,
   209  		" { foobar } ": true,
   210  
   211  		"{$}":   true,
   212  		" {$}":  true,
   213  		"{$} ":  true,
   214  		" {$} ": true,
   215  
   216  		"{ $}":   true,
   217  		" { $}":  true,
   218  		"{ $} ":  true,
   219  		" { $} ": true,
   220  
   221  		"{$ }":   true,
   222  		" {$ }":  true,
   223  		"{$ } ":  true,
   224  		" {$ } ": true,
   225  
   226  		"{ $ }":   true,
   227  		" { $ }":  true,
   228  		"{ $ } ":  true,
   229  		" { $ } ": true,
   230  
   231  		"{$foobar}":   true,
   232  		" {$foobar}":  true,
   233  		"{$foobar} ":  true,
   234  		" {$foobar} ": true,
   235  
   236  		"{ $foobar}":   true,
   237  		" { $foobar}":  true,
   238  		"{ $foobar} ":  true,
   239  		" { $foobar} ": true,
   240  
   241  		"{$foobar }":   true,
   242  		" {$foobar }":  true,
   243  		"{$foobar } ":  true,
   244  		" {$foobar } ": true,
   245  
   246  		"{ $foobar }":   true,
   247  		" { $foobar }":  true,
   248  		"{ $foobar } ":  true,
   249  		" { $foobar } ": true,
   250  
   251  		`{!"£$%^&*()}`:   true,
   252  		` {!"£$%^&*()}`:  true,
   253  		`{!"£$%^&*()} `:  true,
   254  		` {!"£$%^&*()} `: true,
   255  
   256  		`{!"£$%^&*() }`:   true,
   257  		` {!"£$%^&*() }`:  true,
   258  		`{!"£$%^&*() } `:  true,
   259  		` {!"£$%^&*() } `: true,
   260  
   261  		`{ !"£$%^&*()}`:   true,
   262  		` { !"£$%^&*()}`:  true,
   263  		`{ !"£$%^&*()} `:  true,
   264  		` { !"£$%^&*()} `: true,
   265  
   266  		`{ !"£$%^&*() }`:   true,
   267  		` { !"£$%^&*() }`:  true,
   268  		`{ !"£$%^&*() } `:  true,
   269  		` { !"£$%^&*() } `: true,
   270  	}
   271  
   272  	count.Tests(t, len(tests))
   273  	for val, exp := range tests {
   274  		act := types.IsBlock([]byte(val))
   275  		if act != exp {
   276  			t.Error("IsBlock output does not match expected:")
   277  			t.Log("Value:   ", val)
   278  			t.Log("Expected:", exp)
   279  			t.Log("Actual:  ", act)
   280  		}
   281  	}
   282  }