// Copyright (c) 2014-2015 The Notify Authors. All rights reserved. // Use of this source code is governed by the MIT license that can be // found in the LICENSE file. package notify import ( "path/filepath" "testing" ) type caseCanonical struct { path string full string } func testCanonical(t *testing.T, cases []caseCanonical) { for i, cas := range cases { full, err := canonical(cas.path) if err != nil { t.Errorf("want err=nil; got %v (i=%d)", err, i) continue } if full != cas.full { t.Errorf("want full=%q; got %q (i=%d)", cas.full, full, i) continue } } } func TestCanonicalNoSymlink(t *testing.T) { td := filepath.Join(wd, "testdata") cases := [...]caseCanonical{ {".", wd}, {"testdata", td}, {filepath.Join("testdata", ".."), wd}, } testCanonical(t, cases[:]) } func TestJoinevents(t *testing.T) { cases := [...]struct { evs []Event ev Event }{ 0: {nil, All}, 1: {[]Event{}, All}, 2: {[]Event{Create}, Create}, 3: {[]Event{Rename}, Rename}, 4: {[]Event{Create, Write, Remove}, Create | Write | Remove}, } for i, cas := range cases { if ev := joinevents(cas.evs); ev != cas.ev { t.Errorf("want event=%v; got %v (i=%d)", cas.ev, ev, i) } } } func TestTreeSplit(t *testing.T) { cases := [...]struct { path string dir string base string }{ {"/github.com/rjeczalik/fakerpc", "/github.com/rjeczalik", "fakerpc"}, {"/home/rjeczalik/src", "/home/rjeczalik", "src"}, {"/Users/pknap/porn/gopher.avi", "/Users/pknap/porn", "gopher.avi"}, {"C:/Documents and Users", "C:", "Documents and Users"}, {"C:/Documents and Users/pblaszczyk/wiertarka.exe", "C:/Documents and Users/pblaszczyk", "wiertarka.exe"}, {"/home/(╯°□°)╯︵ ┻━┻", "/home", "(╯°□°)╯︵ ┻━┻"}, } for i, cas := range cases { dir, base := split(filepath.FromSlash(cas.path)) if want := filepath.FromSlash(cas.dir); dir != want { t.Errorf("want dir=%s; got %s (i=%d)", want, dir, i) } if want := filepath.FromSlash(cas.base); base != want { t.Errorf("want base=%s; got %s (i=%d)", want, base, i) } } } func TestTreeBase(t *testing.T) { cases := [...]struct { path string base string }{ {"/github.com/rjeczalik/fakerpc", "fakerpc"}, {"/home/rjeczalik/src", "src"}, {"/Users/pknap/porn/gopher.avi", "gopher.avi"}, {"C:/Documents and Users", "Documents and Users"}, {"C:/Documents and Users/pblaszczyk/wiertarka.exe", "wiertarka.exe"}, {"/home/(╯°□°)╯︵ ┻━┻", "(╯°□°)╯︵ ┻━┻"}, } for i, cas := range cases { if base := base(filepath.FromSlash(cas.path)); base != cas.base { t.Errorf("want base=%s; got %s (i=%d)", cas.base, base, i) } } } func TestTreeIndexSep(t *testing.T) { cases := [...]struct { path string n int }{ {"github.com/rjeczalik/fakerpc", 10}, {"home/rjeczalik/src", 4}, {"Users/pknap/porn/gopher.avi", 5}, {"C:/Documents and Users", 2}, {"Documents and Users/pblaszczyk/wiertarka.exe", 19}, {"(╯°□°)╯︵ ┻━┻/Downloads", 30}, } for i, cas := range cases { if n := indexSep(filepath.FromSlash(cas.path)); n != cas.n { t.Errorf("want n=%d; got %d (i=%d)", cas.n, n, i) } } } func TestTreeLastIndexSep(t *testing.T) { cases := [...]struct { path string n int }{ {"github.com/rjeczalik/fakerpc", 20}, {"home/rjeczalik/src", 14}, {"Users/pknap/porn/gopher.avi", 16}, {"C:/Documents and Users", 2}, {"Documents and Users/pblaszczyk/wiertarka.exe", 30}, {"/home/(╯°□°)╯︵ ┻━┻", 5}, } for i, cas := range cases { if n := lastIndexSep(filepath.FromSlash(cas.path)); n != cas.n { t.Errorf("want n=%d; got %d (i=%d)", cas.n, n, i) } } } func TestCleanpath(t *testing.T) { t.Skip("TODO(rjeczalik)") }