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 }