github.com/nikron/prototool@v1.3.0/internal/strs/strs_test.go (about)

     1  // Copyright (c) 2018 Uber Technologies, Inc.
     2  //
     3  // Permission is hereby granted, free of charge, to any person obtaining a copy
     4  // of this software and associated documentation files (the "Software"), to deal
     5  // in the Software without restriction, including without limitation the rights
     6  // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
     7  // copies of the Software, and to permit persons to whom the Software is
     8  // furnished to do so, subject to the following conditions:
     9  //
    10  // The above copyright notice and this permission notice shall be included in
    11  // all copies or substantial portions of the Software.
    12  //
    13  // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    14  // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    15  // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    16  // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    17  // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    18  // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
    19  // THE SOFTWARE.
    20  
    21  package strs
    22  
    23  import (
    24  	"strings"
    25  	"testing"
    26  
    27  	"github.com/stretchr/testify/assert"
    28  )
    29  
    30  func TestIsCapitalized(t *testing.T) {
    31  	assert.False(t, IsCapitalized(""))
    32  	assert.False(t, IsCapitalized("hello"))
    33  	assert.True(t, IsCapitalized("Hello"))
    34  	assert.False(t, IsCapitalized("hELLO"))
    35  	assert.True(t, IsCapitalized("HeLLo"))
    36  }
    37  
    38  func TestIsCamelCase(t *testing.T) {
    39  	assert.False(t, IsCamelCase(""))
    40  	assert.True(t, IsCamelCase("hello"))
    41  	assert.True(t, IsCamelCase("helloWorld"))
    42  	assert.False(t, IsCamelCase("hello_world"))
    43  	assert.False(t, IsCamelCase("hello.World"))
    44  	assert.True(t, IsCamelCase("ABBRCamel"))
    45  }
    46  
    47  func TestIsLowerSnakeCase(t *testing.T) {
    48  	assert.False(t, IsLowerSnakeCase(""))
    49  	assert.True(t, IsLowerSnakeCase("hello"))
    50  	assert.False(t, IsLowerSnakeCase("helloWorld"))
    51  	assert.True(t, IsLowerSnakeCase("hello_world"))
    52  	assert.False(t, IsLowerSnakeCase("Hello_world"))
    53  	assert.False(t, IsLowerSnakeCase("_hello_world"))
    54  	assert.False(t, IsLowerSnakeCase("hello_world_"))
    55  	assert.False(t, IsLowerSnakeCase("hello_world.foo"))
    56  }
    57  
    58  func TestIsUpperSnakeCase(t *testing.T) {
    59  	assert.False(t, IsUpperSnakeCase(""))
    60  	assert.False(t, IsUpperSnakeCase("hello"))
    61  	assert.True(t, IsUpperSnakeCase("HELLO"))
    62  	assert.False(t, IsUpperSnakeCase("helloWorld"))
    63  	assert.False(t, IsUpperSnakeCase("hello_world"))
    64  	assert.True(t, IsUpperSnakeCase("HELLO_WORLD"))
    65  	assert.False(t, IsUpperSnakeCase("Hello_world"))
    66  	assert.False(t, IsUpperSnakeCase("_HELLO_WORLD"))
    67  	assert.False(t, IsUpperSnakeCase("HELLO_WORLD_"))
    68  	assert.False(t, IsUpperSnakeCase("HELLO_WORLD.FOO"))
    69  }
    70  
    71  func TestIsLowercase(t *testing.T) {
    72  	assert.False(t, IsLowercase(""))
    73  	assert.True(t, IsLowercase("hello"))
    74  	assert.False(t, IsLowercase("hEllo"))
    75  	assert.False(t, IsLowercase("HELLO"))
    76  }
    77  
    78  func TestIsUppercase(t *testing.T) {
    79  	assert.False(t, IsUppercase(""))
    80  	assert.False(t, IsUppercase("hello"))
    81  	assert.False(t, IsUppercase("hEllo"))
    82  	assert.True(t, IsUppercase("HELLO"))
    83  }
    84  
    85  func TestToUpperSnakeCase(t *testing.T) {
    86  	assert.Equal(t, "", ToUpperSnakeCase(""))
    87  	assert.Equal(t, "CAMEL_CASE", ToUpperSnakeCase("CamelCase"))
    88  	assert.Equal(t, "CAMEL_CASE", ToUpperSnakeCase("camelCase"))
    89  	assert.Equal(t, "CAMEL_CASE_", ToUpperSnakeCase("CamelCase_"))
    90  	assert.Equal(t, "_CAMEL_CASE", ToUpperSnakeCase("_CamelCase"))
    91  	assert.Equal(t, "CAMEL_CASE__HELLO", ToUpperSnakeCase("CamelCase__Hello"))
    92  	assert.Equal(t, "ABBR_CAMEL", ToUpperSnakeCase("ABBRCamel"))
    93  }
    94  
    95  func TestToUpperCamelCase(t *testing.T) {
    96  	assert.Equal(t, "", ToUpperCamelCase(""))
    97  	assert.Equal(t, "", ToUpperCamelCase("  "))
    98  	assert.Equal(t, "CamelCase", ToUpperCamelCase("camel_case"))
    99  	assert.Equal(t, "CamelCase", ToUpperCamelCase("  camel_case"))
   100  	assert.Equal(t, "CamelCase", ToUpperCamelCase("  camel_case  "))
   101  	assert.Equal(t, "CamelCase", ToUpperCamelCase("camel_case  "))
   102  	assert.Equal(t, "CamelCase", ToUpperCamelCase("Camel_case"))
   103  	assert.Equal(t, "CamelCase", ToUpperCamelCase("__Camel___case"))
   104  	assert.Equal(t, "CamelCase", ToUpperCamelCase("__Camel___case__"))
   105  	assert.Equal(t, "CamelCase", ToUpperCamelCase("Camel___case__"))
   106  	assert.Equal(t, "CamelCase", ToUpperCamelCase("Camel-case"))
   107  	assert.Equal(t, "CamelCase", ToUpperCamelCase("Camel case"))
   108  	assert.Equal(t, "CamelCase", ToUpperCamelCase("  Camel case"))
   109  	assert.Equal(t, "CAMELCase", ToUpperCamelCase("CAMEL_case"))
   110  	assert.Equal(t, "CAMELCase", ToUpperCamelCase("__CAMEL___case"))
   111  	assert.Equal(t, "CAMELCase", ToUpperCamelCase("__CAMEL___case__"))
   112  	assert.Equal(t, "CAMELCase", ToUpperCamelCase("CAMEL___case__"))
   113  	assert.Equal(t, "CAMELCase", ToUpperCamelCase("CAMEL-case"))
   114  	assert.Equal(t, "CAMELCase", ToUpperCamelCase("CAMEL case"))
   115  	assert.Equal(t, "CAMELCase", ToUpperCamelCase("  CAMEL case"))
   116  }
   117  
   118  func TestDedupeSort(t *testing.T) {
   119  	assert.Equal(t, []string{"a", "b", "c"}, DedupeSort([]string{"b", "A", "c"}, strings.ToLower))
   120  	assert.Equal(t, []string{"a", "b", "c"}, DedupeSort([]string{"b", "A", "c", "a"}, strings.ToLower))
   121  	assert.Equal(t, []string{"a", "b", "c"}, DedupeSort([]string{"b", "A", "c", "a", "B"}, strings.ToLower))
   122  	assert.Equal(t, []string{"a", "b", "c"}, DedupeSort([]string{"b", "A", "c", "a", "B", "b"}, strings.ToLower))
   123  	assert.Equal(t, []string{"A", "b", "c"}, DedupeSort([]string{"b", "A", "c"}, nil))
   124  	assert.Equal(t, []string{"A", "a", "b", "c"}, DedupeSort([]string{"b", "A", "c", "a"}, nil))
   125  	assert.Equal(t, []string{"A", "B", "b", "c"}, DedupeSort([]string{"b", "A", "c", "A", "B"}, nil))
   126  	assert.Equal(t, []string{"A", "B", "b", "c"}, DedupeSort([]string{"b", "A", "c", "", "A", "B"}, nil))
   127  }
   128  
   129  func TestIntersection(t *testing.T) {
   130  	assert.Equal(t, []string{}, Intersection([]string{"1", "2", "3"}, []string{"4", "5", "6"}))
   131  	assert.Equal(t, []string{"1"}, Intersection([]string{"1", "2", "3"}, []string{"1", "5", "6"}))
   132  	assert.Equal(t, []string{"1", "2"}, Intersection([]string{"1", "2", "3"}, []string{"1", "5", "2"}))
   133  	assert.Equal(t, []string{}, Intersection([]string{"1"}, []string{"4"}))
   134  	assert.Equal(t, []string{"1"}, Intersection([]string{"1"}, []string{"1"}))
   135  	assert.Equal(t, []string{}, Intersection([]string{}, []string{"1"}))
   136  	assert.Equal(t, []string{}, Intersection([]string{"1"}, []string{}))
   137  	assert.Equal(t, []string{}, Intersection([]string{}, []string{}))
   138  	assert.Equal(t, []string{"1", "2"}, Intersection([]string{"1", "2", "3"}, []string{"1", "5", "", "2"}))
   139  	assert.Equal(t, []string{"1", "2"}, Intersection([]string{"1", "2", "", "3"}, []string{"1", "5", "2"}))
   140  	assert.Equal(t, []string{"1", "2"}, Intersection([]string{"1", "2", "", "3"}, []string{"1", "5", "", "2"}))
   141  }