github.com/hattya/nazuna@v0.7.1-0.20240331055452-55e14c275c1c/cmd/nzn/link_test.go (about) 1 // 2 // nazuna/cmd/nzn :: link_test.go 3 // 4 // Copyright (c) 2013-2022 Akinori Hattori <hattya@gmail.com> 5 // 6 // SPDX-License-Identifier: MIT 7 // 8 9 package main 10 11 import ( 12 "os" 13 "testing" 14 15 "github.com/hattya/go.cli" 16 ) 17 18 func TestLink(t *testing.T) { 19 sep := string(os.PathListSeparator) 20 s := script{ 21 { 22 cmd: []string{"setup"}, 23 }, 24 { 25 cmd: []string{"mkdir", "$public/go/misc/vim"}, 26 }, 27 { 28 cmd: []string{"mkdir", "$public/gocode/src/github.com/nsf/gocode/vim"}, 29 }, 30 { 31 cmd: []string{"cd", "$wc"}, 32 }, 33 { 34 cmd: []string{"nzn", "init", "--vcs", "git"}, 35 }, 36 { 37 cmd: []string{"nzn", "layer", "-c", "a"}, 38 }, 39 { 40 cmd: []string{"touch", ".nzn/r/a/.vimrc"}, 41 }, 42 { 43 cmd: []string{"nzn", "vcs", "add", "."}, 44 }, 45 { 46 cmd: []string{"nzn", "link", "-l", "a", "$public/go/misc/vim", ".vim/bundle/golang"}, 47 }, 48 { 49 cmd: []string{"export", "GOPATH="}, 50 }, 51 { 52 cmd: []string{"nzn", "link", "-l", "a", "-p", "$GOPATH" + sep + "$public/gocode", "src/github.com/nsf/gocode/vim", ".vim/bundle/gocode"}, 53 }, 54 { 55 cmd: []string{"nzn", "update"}, 56 out: cli.Dedent(` 57 link .vim/bundle/gocode/ --> .+` + quote("/gocode/src/github.com/nsf/gocode/vim/") + ` (re) 58 link .vim/bundle/golang/ --> .+` + quote("/go/misc/vim/") + ` (re) 59 link .vimrc --> a 60 3 updated, 0 removed, 0 failed 61 `), 62 }, 63 { 64 cmd: []string{"rm", "-r", "$public/go"}, 65 }, 66 { 67 cmd: []string{"nzn", "update"}, 68 out: cli.Dedent(` 69 unlink .vim/bundle/golang/ -/- .+` + quote("/go/misc/vim/") + ` (re) 70 0 updated, 1 removed, 0 failed 71 `), 72 }, 73 { 74 cmd: []string{"rm", "-r", "$public"}, 75 }, 76 { 77 cmd: []string{"nzn", "update"}, 78 out: cli.Dedent(` 79 unlink .vim/bundle/gocode/ -/- .+` + quote("/gocode/src/github.com/nsf/gocode/vim/") + ` (re) 80 0 updated, 1 removed, 0 failed 81 `), 82 }, 83 { 84 cmd: []string{"ls", "."}, 85 out: cli.Dedent(` 86 .nzn/ 87 .vimrc 88 `), 89 }, 90 } 91 if err := s.exec(t); err != nil { 92 t.Error(err) 93 } 94 } 95 96 func TestLinkError(t *testing.T) { 97 s := script{ 98 { 99 cmd: []string{"setup"}, 100 }, 101 { 102 cmd: []string{"nzn", "link"}, 103 out: cli.Dedent(` 104 nzn: no repository found in '.+' \(\.nzn not found\)! (re) 105 [1] 106 `), 107 }, 108 { 109 cmd: []string{"cd", "$wc"}, 110 }, 111 { 112 cmd: []string{"nzn", "init", "--vcs", "git"}, 113 }, 114 { 115 cmd: []string{"touch", ".nzn/state.json"}, 116 }, 117 { 118 cmd: []string{"nzn", "link"}, 119 out: cli.Dedent(` 120 nzn: ` + path(".nzn/state.json") + `: unexpected end of JSON input 121 [1] 122 `), 123 }, 124 { 125 cmd: []string{"rm", ".nzn/state.json"}, 126 }, 127 { 128 cmd: []string{"nzn", "link"}, 129 out: cli.Dedent(` 130 nzn link: --layer flag is required 131 usage: nzn link -l <layer> [-p <path>] <src> <dst> 132 133 create a link for the specified path 134 135 link is used to create a link of <src> to <dst>, and will be managed by 136 update. If <src> is not found on update, it will be ignored without error. 137 138 The value of --path flag is a list of directories like PATH or GOPATH 139 environment variables, and it is used to search <src>. 140 141 You can refer environment variables in <path> and <src>. Supported formats 142 are ${var} and $var. 143 144 options: 145 146 -l, --layer <layer> layer name 147 -p, --path <path> list of directories to search <src> 148 149 [2] 150 `), 151 }, 152 { 153 cmd: []string{"nzn", "link", "-l", "a"}, 154 out: cli.Dedent(` 155 nzn: invalid arguments 156 [1] 157 `), 158 }, 159 { 160 cmd: []string{"nzn", "link", "-l", "a", "src", "dst"}, 161 out: cli.Dedent(` 162 nzn: layer 'a' does not exist! 163 [1] 164 `), 165 }, 166 { 167 cmd: []string{"nzn", "layer", "-c", "a"}, 168 }, 169 { 170 cmd: []string{"nzn", "link", "-l", "a", "src", "../dst"}, 171 out: cli.Dedent(` 172 nzn: '../dst' is not under root 173 [1] 174 `), 175 }, 176 { 177 cmd: []string{"touch", ".nzn/r/a/dst"}, 178 }, 179 { 180 cmd: []string{"nzn", "vcs", "add", "."}, 181 }, 182 { 183 cmd: []string{"nzn", "link", "-l", "a", "src", "dst"}, 184 out: cli.Dedent(` 185 nzn: 'dst' already exists! 186 [1] 187 `), 188 }, 189 { 190 cmd: []string{"nzn", "vcs", "rm", "-qf", "a/dst"}, 191 }, 192 { 193 cmd: []string{"mkdir", ".nzn/r/a/dst"}, 194 }, 195 { 196 cmd: []string{"touch", ".nzn/r/a/dst/1"}, 197 }, 198 { 199 cmd: []string{"nzn", "vcs", "add", "."}, 200 }, 201 { 202 cmd: []string{"nzn", "link", "-l", "a", "src", "dst"}, 203 out: cli.Dedent(` 204 nzn: 'dst' already exists! 205 [1] 206 `), 207 }, 208 { 209 cmd: []string{"nzn", "vcs", "rm", "-qrf", "a/dst"}, 210 }, 211 { 212 cmd: []string{"nzn", "link", "-l", "a", "src", "dst"}, 213 }, 214 { 215 cmd: []string{"nzn", "link", "-l", "a", "src", "dst"}, 216 out: cli.Dedent(` 217 nzn: link 'dst' already exists! 218 [1] 219 `), 220 }, 221 { 222 cmd: []string{"touch", "src"}, 223 }, 224 { 225 cmd: []string{"nzn", "update"}, 226 out: cli.Dedent(` 227 link dst --> src 228 1 updated, 0 removed, 0 failed 229 `), 230 }, 231 { 232 cmd: []string{"nzn", "layer", "-c", "b"}, 233 }, 234 { 235 cmd: []string{"nzn", "link", "-l", "b", "src", "dst"}, 236 }, 237 { 238 cmd: []string{"rm", "dst"}, 239 }, 240 { 241 cmd: []string{"touch", "_"}, 242 }, 243 { 244 cmd: []string{"ln", "-s", "_", "dst"}, 245 }, 246 { 247 cmd: []string{"nzn", "update"}, 248 out: cli.Dedent(` 249 unlink dst -/- src 250 nzn: not linked to 'src' 251 [1] 252 `), 253 }, 254 { 255 cmd: []string{"rm", "dst"}, 256 }, 257 { 258 cmd: []string{"rm", "_"}, 259 }, 260 { 261 cmd: []string{"touch", ".nzn/r/b/dst"}, 262 }, 263 { 264 cmd: []string{"nzn", "vcs", "add", "."}, 265 }, 266 { 267 cmd: []string{"nzn", "update"}, 268 out: cli.Dedent(` 269 warning: link: 'dst' exists in the repository 270 link dst --> b 271 1 updated, 0 removed, 0 failed 272 `), 273 }, 274 { 275 cmd: []string{"nzn", "layer", "-c", "c/1"}, 276 }, 277 { 278 cmd: []string{"nzn", "link", "-l", "c", "src", "dst"}, 279 out: cli.Dedent(` 280 nzn: layer 'c' is abstract 281 [1] 282 `), 283 }, 284 } 285 if err := s.exec(t); err != nil { 286 t.Error(err) 287 } 288 }