github.com/pbberlin/tools@v0.0.0-20160910141205-7aa5421c2169/os/fsi/tests/canonical-paths_test.go (about)

     1  // +build pathing
     2  // go test -tags=pathing
     3  
     4  package tests
     5  
     6  import (
     7  	"fmt"
     8  	"log"
     9  	"path"
    10  	"testing"
    11  
    12  	"github.com/pbberlin/tools/os/fsi/common"
    13  	"github.com/pbberlin/tools/os/fsi/memfs"
    14  )
    15  
    16  func splitIsWhatWeWant() {
    17  
    18  	s := "rt/"
    19  
    20  	dir1, f1 := path.Split(s)
    21  
    22  	dir2 := path.Dir(s)
    23  	f2 := path.Base(s)
    24  
    25  	fmt.Printf("%q %q \n", dir1, f1) //  "rt/"   ""   - good
    26  	fmt.Printf("%q %q \n", dir2, f2) //  "rt"    "rt" - bad
    27  
    28  }
    29  
    30  func TestPathCleanage(t *testing.T) {
    31  
    32  	log.SetFlags(0)
    33  
    34  	_, c := initFileSystems()
    35  	defer c.Close()
    36  
    37  	cases := [][]string{
    38  		[]string{"", "mntX/", ""},
    39  		[]string{"/", "mntX/", ""},
    40  		[]string{".", "mntX/", ""},
    41  		[]string{"./", "mntX/", ""},
    42  		[]string{"mntX", "mntX/", ""},
    43  		[]string{"mntX/", "mntX/", ""},
    44  		// 5...
    45  		[]string{"file", "mntX/", "file"},
    46  		[]string{"dir/", "mntX/", "dir/"},
    47  		[]string{"./dir1/", "mntX/", "dir1/"},
    48  		[]string{"mntX/dir1", "mntX/", "dir1"},
    49  		[]string{"mntX/dir1/file2", "mntX/dir1/", "file2"},
    50  		// 10
    51  		[]string{"mntY/dir1/file2", "mntX/mntY/dir1/", "file2"},
    52  		[]string{"///mntX/dir1/dir2///dir3/", "mntX/dir1/dir2/", "dir3/"},
    53  		[]string{"mntX/dir1/dir2///file3", "mntX/dir1/dir2/", "file3"},
    54  		[]string{"/dir1/dir2///file3", "mntX/dir1/dir2/", "file3"},
    55  		[]string{"dir1/dir2///dir3/", "mntX/dir1/dir2/", "dir3/"},
    56  		// 15
    57  		[]string{"c:\\dir1\\dir2", "mntX/c:/dir1/", "dir2"},
    58  	}
    59  
    60  	fs := memfs.New(
    61  		memfs.Ident("mntX"),
    62  	)
    63  	for i, v := range cases {
    64  		inpt := v[0]
    65  		_ = inpt
    66  		wnt1 := v[1]
    67  		wnt2 := v[2]
    68  		dir, bname := common.UnixPather(v[0], fs.RootDir())
    69  		fullpath := dir + bname
    70  
    71  		log.Printf("#%2v %-30q %-24q => %-16q %-12q ", i, inpt, dir, bname, fullpath)
    72  
    73  		if wnt1 != dir {
    74  			t.Errorf("dir   #%2v got %-24v - wnt %-16v\n", i, dir, wnt1)
    75  		}
    76  		if wnt2 != bname {
    77  			t.Errorf("bname #%2v got %-24v - wnt %-16v\n", i, bname, wnt2)
    78  		}
    79  		if wnt1+wnt2 != fullpath {
    80  			t.Errorf("fullp #%2v got %-24v - wnt %-16v\n", i, fullpath, wnt1+wnt2)
    81  		}
    82  	}
    83  
    84  }