...

Source file src/sigs.k8s.io/kustomize/kyaml/yaml/util_test.go

Documentation: sigs.k8s.io/kustomize/kyaml/yaml

     1  // Copyright 2021 The Kubernetes Authors.
     2  // SPDX-License-Identifier: Apache-2.0
     3  
     4  package yaml
     5  
     6  import (
     7  	"testing"
     8  
     9  	"github.com/stretchr/testify/assert"
    10  )
    11  
    12  func TestDeriveSeqIndentStyle(t *testing.T) {
    13  	type testCase struct {
    14  		name           string
    15  		input          string
    16  		expectedOutput string
    17  	}
    18  
    19  	testCases := []testCase{
    20  		{
    21  			name: "detect simple wide indent",
    22  			input: `apiVersion: apps/v1
    23  kind: Deployment
    24  spec:
    25    - foo
    26    - bar
    27    - baz
    28  `,
    29  			expectedOutput: `wide`,
    30  		},
    31  		{
    32  			name: "detect simple compact indent",
    33  			input: `apiVersion: apps/v1
    34  kind: Deployment
    35  spec:
    36  - foo
    37  - bar
    38  - baz
    39  `,
    40  			expectedOutput: `compact`,
    41  		},
    42  		{
    43  			name: "read with mixed indentation, wide first",
    44  			input: `apiVersion: apps/v1
    45  kind: Deployment
    46  spec:
    47    - foo
    48    - bar
    49    - baz
    50  env:
    51  - foo
    52  - bar
    53  `,
    54  			expectedOutput: `wide`,
    55  		},
    56  		{
    57  			name: "read with mixed indentation, compact first",
    58  			input: `apiVersion: apps/v1
    59  kind: Deployment
    60  spec:
    61  - foo
    62  - bar
    63  - baz
    64  env:
    65    - foo
    66    - bar
    67  `,
    68  			expectedOutput: `compact`,
    69  		},
    70  		{
    71  			name: "read with mixed indentation, compact first with less elements",
    72  			input: `apiVersion: apps/v1
    73  kind: Deployment
    74  spec:
    75  - foo
    76  - bar
    77  env:
    78    - foo
    79    - bar
    80    - baz
    81  `,
    82  			expectedOutput: `compact`,
    83  		},
    84  		{
    85  			name: "skip wrapped sequence strings, pipe hyphen",
    86  			input: `apiVersion: apps/v1
    87  kind: Deployment
    88  spec: |-
    89    - foo
    90    - bar
    91  `,
    92  			expectedOutput: `compact`,
    93  		},
    94  		{
    95  			name: "skip wrapped sequence strings, pipe",
    96  			input: `apiVersion: apps/v1
    97  kind: Deployment
    98  spec: |
    99    - foo
   100    - bar
   101  `,
   102  			expectedOutput: `compact`,
   103  		},
   104  		{
   105  			name: "skip wrapped sequence strings, right angle bracket",
   106  			input: `apiVersion: apps/v1
   107  kind: Deployment
   108  spec: >
   109    - foo
   110    - bar
   111  `,
   112  			expectedOutput: `compact`,
   113  		},
   114  		{
   115  			name: "skip wrapped sequence strings, plus",
   116  			input: `apiVersion: apps/v1
   117  kind: Deployment
   118  spec: +
   119    - foo
   120    - bar
   121  `,
   122  			expectedOutput: `compact`,
   123  		},
   124  		{
   125  			name: "handle comments",
   126  			input: `apiVersion: v1
   127  kind: Service
   128  spec:
   129    ports: # comment 1
   130      # comment 2
   131      - name: etcd-server-ssl
   132        port: 2380
   133      # comment 3
   134      - name: etcd-client-ssl
   135        port: 2379
   136  `,
   137  			expectedOutput: `wide`,
   138  		},
   139  		{
   140  			name: "nested wide vs compact",
   141  			input: `apiVersion: apps/v1
   142  kind: Deployment
   143  spec:
   144    foo:
   145      bar:
   146        baz:
   147          bor:
   148            - a
   149            - b
   150  abc:
   151  - a
   152  - b
   153  `,
   154  			expectedOutput: `wide`,
   155  		},
   156  		{
   157  			name:           "invalid resource but valid yaml sequence",
   158  			input:          `  - foo`,
   159  			expectedOutput: `compact`,
   160  		},
   161  		{
   162  			name: "invalid resource but valid yaml sequence with comments",
   163  			input: `
   164  # comment 1
   165    # comment 2
   166    - foo
   167  `,
   168  			expectedOutput: `compact`,
   169  		},
   170  		{
   171  			name: "- within sequence element",
   172  			input: `apiVersion: apps/v1
   173  kind: Deployment
   174  spec:
   175    foo:
   176      - - a`,
   177  			expectedOutput: `wide`,
   178  		},
   179  		{
   180  			name: "- within non sequence element",
   181  			input: `apiVersion: apps/v1
   182  kind: Deployment
   183  spec:
   184    foo:
   185      a: - b`,
   186  			expectedOutput: `compact`,
   187  		},
   188  	}
   189  
   190  	for i := range testCases {
   191  		tc := testCases[i]
   192  		t.Run(tc.name, func(t *testing.T) {
   193  			assert.Equal(t, tc.expectedOutput, DeriveSeqIndentStyle(tc.input))
   194  		})
   195  	}
   196  }
   197  

View as plain text