143 lines
3.7 KiB
Go
143 lines
3.7 KiB
Go
|
// 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)")
|
||
|
}
|