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  }