github.com/hattya/go.sh@v0.0.0-20240328132134-f53276d95cc6/pattern/pattern_windows_test.go (about)

     1  //
     2  // go.sh/pattern :: pattern_windows_test.go
     3  //
     4  //   Copyright (c) 2021 Akinori Hattori <hattya@gmail.com>
     5  //
     6  //   SPDX-License-Identifier: MIT
     7  //
     8  
     9  package pattern
    10  
    11  import "testing"
    12  
    13  var indexTests = []struct {
    14  	pattern string
    15  	i, w    int
    16  }{
    17  	{`_\\_`, 1, 2},
    18  	{`_/_`, 1, 1},
    19  	{`_\/_`, 1, 2},
    20  	{`_\?\\_`, 3, 2},
    21  	{`_\?/_`, 3, 1},
    22  	{`_\?\/_`, 3, 2},
    23  	{`\\`, 0, 2},
    24  	{`/`, 0, 1},
    25  	{`\/`, 0, 2},
    26  	{`\`, 0, 1},
    27  	{`\?`, -1, 0},
    28  	{"", -1, 0},
    29  }
    30  
    31  func TestIndex(t *testing.T) {
    32  	for _, tt := range indexTests {
    33  		switch i, w := indexSep(tt.pattern); {
    34  		case i != tt.i:
    35  			t.Errorf("expected %v, got %v", tt.i, i)
    36  		case w != tt.w:
    37  			t.Errorf("expected %v, got %v", tt.w, w)
    38  		}
    39  	}
    40  }
    41  
    42  var splitTests = []struct {
    43  	pattern    string
    44  	base, path string
    45  }{
    46  	// abs
    47  	{`C:\\Windows\\Temp`, `C:\`, `Windows\\Temp`},
    48  	{`C:/Windows/Temp`, `C:/`, `Windows/Temp`},
    49  	{`C:\/Windows\/Temp`, `C:/`, `Windows\/Temp`},
    50  	{`\\Windows\\Temp`, `\`, `Windows\\Temp`},
    51  	{`/Windows/Temp`, `/`, `Windows/Temp`},
    52  	{`\/Windows\/Temp`, `/`, `Windows\/Temp`},
    53  	// rel
    54  	{`Program Files\\Windows Defender`, `.`, `Program Files\\Windows Defender`},
    55  	{`Program Files/Windows Defender`, `.`, `Program Files/Windows Defender`},
    56  	{`Program Files\/Windows Defender`, `.`, `Program Files\/Windows Defender`},
    57  	{`C:Program Files\\Windows Defender`, `C:`, `Program Files\\Windows Defender`},
    58  	{`C:Program Files/Windows Defender`, `C:`, `Program Files/Windows Defender`},
    59  	{`C:Program Files\/Windows Defender`, `C:`, `Program Files\/Windows Defender`},
    60  	{`.\\Program Files\\Windows Defender`, `.`, `.\\Program Files\\Windows Defender`},
    61  	{`./Program Files/Windows Defender`, `.`, `./Program Files/Windows Defender`},
    62  	{`.\/Program Files\/Windows Defender`, `.`, `.\/Program Files\/Windows Defender`},
    63  	// unc
    64  	{`\\\\Server\\Share`, `\\Server\Share`, ""},
    65  	{`//Server/Share`, `//Server/Share`, ""},
    66  	{`\/\/Server\/Share`, `//Server/Share`, ""},
    67  	{`\\\\Server\\Share\\Folder\\File`, `\\Server\Share\`, `Folder\\File`},
    68  	{`//Server/Share/Folder/File`, `//Server/Share/`, `Folder/File`},
    69  	{`\/\/Server\/Share\/Folder\/File`, `//Server/Share/`, `Folder\/File`},
    70  	// dev
    71  	{`\\\\.\\C:\\Windows\\Temp`, `\\.\C:\`, `Windows\\Temp`},
    72  	{`//./C:/Windows/Temp`, `//./C:/`, `Windows/Temp`},
    73  	{`\/\/.\/C:\/Windows\/Temp`, `//./C:/`, `Windows\/Temp`},
    74  	{`\\\\\?\\C:\\Windows\\Temp`, `\\?\C:\`, `Windows\\Temp`},
    75  	{`//\?/C:/Windows/Temp`, `//?/C:/`, `Windows/Temp`},
    76  	{`\/\/\?\/C:\/Windows\/Temp`, `//?/C:/`, `Windows\/Temp`},
    77  
    78  	{`\\\\.\\UNC\\Server\\Share`, `\\.\UNC\Server\Share`, ""},
    79  	{`//./UNC/Server/Share`, `//./UNC/Server/Share`, ""},
    80  	{`\/\/.\/UNC\/Server\/Share`, `//./UNC/Server/Share`, ""},
    81  	{`\\\\\?\\UNC\\Server\\Share`, `\\?\UNC\Server\Share`, ""},
    82  	{`//\?/UNC/Server/Share`, `//?/UNC/Server/Share`, ""},
    83  	{`\/\/\?\/UNC\/Server\/Share`, `//?/UNC/Server/Share`, ""},
    84  
    85  	{`\\\\.\\UNC\\Server\\Share\\Folder\\File`, `\\.\UNC\Server\Share\`, `Folder\\File`},
    86  	{`//./UNC/Server/Share/Folder/File`, `//./UNC/Server/Share/`, `Folder/File`},
    87  	{`\/\/.\/UNC\/Server\/Share\/Folder\/File`, `//./UNC/Server/Share/`, `Folder\/File`},
    88  	{`\\\\?\\UNC\\Server\\Share\\Folder\\File`, `\\?\UNC\Server\Share\`, `Folder\\File`},
    89  	{`//\?/UNC/Server/Share/Folder/File`, `//?/UNC/Server/Share/`, `Folder/File`},
    90  	{`\/\/\?\/UNC\/Server\/Share\/Folder\/File`, `//?/UNC/Server/Share/`, `Folder\/File`},
    91  	// error
    92  	{`\\\\`, `\`, `\\`},
    93  	{`\\\\Server`, `\`, `\\Server`},
    94  	{`\\\\.\\`, `\\.\`, ""},
    95  	{`\\\\.\\UNC`, `\\.\UNC`, ""},
    96  	{`\\\\.\\UNC\\Server`, `\\.\UNC\Server`, ""},
    97  }
    98  
    99  func TestSplit(t *testing.T) {
   100  	for _, tt := range splitTests {
   101  		switch base, path := split(tt.pattern); {
   102  		case base != tt.base:
   103  			t.Errorf("expected %q, got %q", tt.base, base)
   104  		case path != tt.path:
   105  			t.Errorf("expected %q, got %q", tt.path, path)
   106  		}
   107  	}
   108  }