mirror of https://github.com/grafana/grafana.git
				
				
				
			
		
			
				
	
	
		
			160 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			160 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			Go
		
	
	
	
| package util
 | |
| 
 | |
| import (
 | |
| 	"testing"
 | |
| 	"time"
 | |
| 
 | |
| 	"github.com/stretchr/testify/assert"
 | |
| )
 | |
| 
 | |
| func TestStringsFallback2(t *testing.T) {
 | |
| 	tests := []struct {
 | |
| 		val1     string
 | |
| 		val2     string
 | |
| 		expected string
 | |
| 	}{
 | |
| 		// testing every scenario
 | |
| 		{"", "", ""},
 | |
| 		{"1", "", "1"},
 | |
| 		{"1", "2", "1"},
 | |
| 		{"", "2", "2"},
 | |
| 	}
 | |
| 	for _, testcase := range tests {
 | |
| 		assert.EqualValues(t, testcase.expected, StringsFallback2(testcase.val1, testcase.val2))
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func TestStringsFallback3(t *testing.T) {
 | |
| 	tests := []struct {
 | |
| 		val1     string
 | |
| 		val2     string
 | |
| 		val3     string
 | |
| 		expected string
 | |
| 	}{
 | |
| 		{"", "", "", ""},
 | |
| 		{"1", "", "", "1"},
 | |
| 		{"1", "2", "", "1"},
 | |
| 		{"1", "2", "3", "1"},
 | |
| 		{"", "2", "", "2"},
 | |
| 		{"", "2", "3", "2"},
 | |
| 		{"", "", "3", "3"},
 | |
| 	}
 | |
| 	for _, testcase := range tests {
 | |
| 		assert.EqualValues(t, testcase.expected, StringsFallback3(testcase.val1, testcase.val2, testcase.val3))
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func TestSplitString(t *testing.T) {
 | |
| 	tests := map[string][]string{
 | |
| 		"":                       {},
 | |
| 		"test":                   {"test"},
 | |
| 		"  test1 test2 test3":    {"test1", "test2", "test3"},
 | |
| 		"test1,test2,test3":      {"test1", "test2", "test3"},
 | |
| 		"test1, test2, test3":    {"test1", "test2", "test3"},
 | |
| 		"test1 , test2 test3":    {"test1", "test2", "test3"},
 | |
| 		"foo, bar baz":           {"foo", "bar", "baz"},
 | |
| 		`["foo", "bar baz"]`:     {"foo", "bar baz"},
 | |
| 		`["foo", "bar \"baz\""]`: {"foo", "bar \"baz\""},
 | |
| 		` ["foo", "bar baz"]`:    {"foo", "bar baz"},
 | |
| 		`[]`:                     {},
 | |
| 	}
 | |
| 	for input, expected := range tests {
 | |
| 		assert.EqualValues(t, expected, SplitString(input))
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func BenchmarkSplitString(b *testing.B) {
 | |
| 	b.Run("empty input", func(b *testing.B) {
 | |
| 		for i := 0; i < b.N; i++ {
 | |
| 			SplitString("")
 | |
| 		}
 | |
| 	})
 | |
| 	b.Run("single string", func(b *testing.B) {
 | |
| 		for i := 0; i < b.N; i++ {
 | |
| 			SplitString("test")
 | |
| 		}
 | |
| 	})
 | |
| 	b.Run("space-separated", func(b *testing.B) {
 | |
| 		for i := 0; i < b.N; i++ {
 | |
| 			SplitString("test1 test2 test3")
 | |
| 		}
 | |
| 	})
 | |
| 	b.Run("comma-separated", func(b *testing.B) {
 | |
| 		for i := 0; i < b.N; i++ {
 | |
| 			SplitString("test1,test2,test3")
 | |
| 		}
 | |
| 	})
 | |
| 	b.Run("comma-separated with spaces", func(b *testing.B) {
 | |
| 		for i := 0; i < b.N; i++ {
 | |
| 			SplitString("test1 , test2 test3")
 | |
| 		}
 | |
| 	})
 | |
| 	b.Run("mixed commas and spaces", func(b *testing.B) {
 | |
| 		for i := 0; i < b.N; i++ {
 | |
| 			SplitString("test1 , test2 test3,test4")
 | |
| 		}
 | |
| 	})
 | |
| 	b.Run("very long mixed", func(b *testing.B) {
 | |
| 		for i := 0; i < b.N; i++ {
 | |
| 			SplitString("test1 , test2 test3,test4, test5 test6 test7,test8 test9 test10" +
 | |
| 				" test11 test12 test13,test14 test15 test16,test17 test18 test19,test20 test21 test22" +
 | |
| 				" test23,test24 test25 test26,test27 test28 test29,test30 test31 test32" +
 | |
| 				" test33,test34 test35 test36,test37 test38 test39,test40 test41 test42" +
 | |
| 				" test43,test44 test45 test46,test47 test48 test49,test50 test51 test52" +
 | |
| 				" test53,test54 test55 test56,test57 test58 test59,test60 test61 test62" +
 | |
| 				" test63,test64 test65 test66,test67 test68 test69,test70 test71 test72" +
 | |
| 				" test73,test74 test75 test76,test77 test78 test79,test80 test81 test82" +
 | |
| 				" test83,test84 test85 test86,test87 test88 test89,test90 test91 test92" +
 | |
| 				" test93,test94 test95 test96,test97 test98 test99,test100 ")
 | |
| 		}
 | |
| 	})
 | |
| }
 | |
| 
 | |
| func TestDateAge(t *testing.T) {
 | |
| 	assert.Equal(t, "?", GetAgeString(time.Time{})) // base case
 | |
| 
 | |
| 	tests := map[time.Duration]string{
 | |
| 		-1 * time.Hour:       "< 1 minute", // one hour in the future
 | |
| 		0:                    "< 1 minute",
 | |
| 		2 * time.Second:      "< 1 minute",
 | |
| 		2 * time.Minute:      "2 minutes",
 | |
| 		2 * time.Hour:        "2 hours",
 | |
| 		3 * 24 * time.Hour:   "3 days",
 | |
| 		67 * 24 * time.Hour:  "2 months",
 | |
| 		409 * 24 * time.Hour: "1 year",
 | |
| 	}
 | |
| 	for elapsed, expected := range tests {
 | |
| 		assert.Equalf(
 | |
| 			t,
 | |
| 			expected,
 | |
| 			GetAgeString(time.Now().Add(-elapsed)),
 | |
| 			"duration '%s'",
 | |
| 			elapsed.String(),
 | |
| 		)
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func TestToCamelCase(t *testing.T) {
 | |
| 	tests := map[string]string{
 | |
| 		"kebab-case-string": "kebabCaseString",
 | |
| 		"snake_case_string": "snakeCaseString",
 | |
| 		"mixed-case_string": "mixedCaseString",
 | |
| 		"alreadyCamelCase":  "alreadyCamelCase",
 | |
| 		"":                  "",
 | |
| 	}
 | |
| 	for input, expected := range tests {
 | |
| 		assert.Equal(t, expected, ToCamelCase(input))
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func TestCapitalize(t *testing.T) {
 | |
| 	tests := map[string]string{
 | |
| 		"properly capitalizes": "Properly capitalizes",
 | |
| 		"Already capitalized":  "Already capitalized",
 | |
| 		"":                     "",
 | |
| 	}
 | |
| 	for input, expected := range tests {
 | |
| 		assert.Equal(t, expected, Capitalize(input))
 | |
| 	}
 | |
| }
 |