// 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 "testing" func TestRecursiveTree(t *testing.T) { n := NewRecursiveTreeTest(t, "testdata/vfs.txt") defer n.Close() ch := NewChans(5) watches := [...]RCase{ // i=0 { Call: Call{ F: FuncWatch, P: "src/github.com/rjeczalik/fs/fs.go", C: ch[0], E: Create, }, Record: []Call{ { F: FuncWatch, P: "src/github.com/rjeczalik/fs/fs.go", E: Create, }, }, }, // i=1 { Call: Call{ F: FuncWatch, P: "src/github.com/rjeczalik/fs/cmd/...", C: ch[1], E: Remove, }, Record: []Call{ { F: FuncRecursiveWatch, P: "src/github.com/rjeczalik/fs/cmd", E: Remove, }, }, }, // i=2 { Call: Call{ F: FuncWatch, P: "src/github.com/rjeczalik/fs", C: ch[2], E: Rename, }, Record: []Call{ { F: FuncRecursiveWatch, P: "src/github.com/rjeczalik/fs", E: Create | Remove | Rename, }, { F: FuncRecursiveUnwatch, P: "src/github.com/rjeczalik/fs/cmd", }, { F: FuncUnwatch, P: "src/github.com/rjeczalik/fs/fs.go", }, }, }, // i=3 { Call: Call{ F: FuncWatch, P: "src/github.com/ppknap/link/README.md", C: ch[0], E: Create, }, Record: []Call{ { F: FuncWatch, P: "src/github.com/ppknap/link/README.md", E: Create, }, }, }, // i=4 { Call: Call{ F: FuncWatch, P: "src/github.com/ppknap/link/include/...", C: ch[3], E: Remove, }, Record: []Call{ { F: FuncRecursiveWatch, P: "src/github.com/ppknap/link/include", E: Remove, }, }, }, // i=5 { Call: Call{ F: FuncWatch, P: "src/github.com/ppknap/link/include", C: ch[0], E: Write, }, Record: []Call{ { F: FuncRecursiveRewatch, P: "src/github.com/ppknap/link/include", NP: "src/github.com/ppknap/link/include", E: Remove, NE: Remove | Write, }, }, }, // i=6 { Call: Call{ F: FuncWatch, P: "src/github.com/ppknap/link/test/Jamfile.jam", C: ch[0], E: Rename, }, Record: []Call{ { F: FuncWatch, P: "src/github.com/ppknap/link/test/Jamfile.jam", E: Rename, }, }, }, // i=7 { Call: Call{ F: FuncWatch, P: "src/github.com/ppknap/link/test/Jamfile.jam", C: ch[0], E: Create, }, Record: []Call{ { F: FuncRewatch, P: "src/github.com/ppknap/link/test/Jamfile.jam", E: Rename, NE: Rename | Create, }, }, }, // i=8 { Call: Call{ F: FuncWatch, P: "src/github.com/ppknap/...", C: ch[0], E: Create, }, Record: []Call{ { F: FuncRecursiveWatch, P: "src/github.com/ppknap", E: Create | Remove | Write | Rename, }, { F: FuncUnwatch, P: "src/github.com/ppknap/link/README.md", }, { F: FuncRecursiveUnwatch, P: "src/github.com/ppknap/link/include", }, { F: FuncUnwatch, P: "src/github.com/ppknap/link/test/Jamfile.jam", }, }, }, // i=9 { Call: Call{ F: FuncWatch, P: "src/github.com/rjeczalik/fs/README.md", C: ch[0], E: Rename, }, Record: nil, }, // i=10 { Call: Call{ F: FuncWatch, P: "src/github.com/rjeczalik/fs/cmd/gotree", C: ch[2], E: Create | Remove, }, Record: nil, }, // i=11 { Call: Call{ F: FuncWatch, P: "src/github.com/pblaszczyk/qttu/src/main.cc", C: ch[0], E: Create, }, Record: []Call{ { F: FuncWatch, P: "src/github.com/pblaszczyk/qttu/src/main.cc", E: Create, }, }, }, // i=12 { Call: Call{ F: FuncWatch, P: "src/github.com/pblaszczyk/qttu/src/main.cc", C: ch[0], E: Remove, }, Record: []Call{ { F: FuncRewatch, P: "src/github.com/pblaszczyk/qttu/src/main.cc", E: Create, NE: Create | Remove, }, }, }, // i=13 { Call: Call{ F: FuncWatch, P: "src/github.com/pblaszczyk/qttu/src/main.cc", C: ch[0], E: Create | Remove, }, Record: nil, }, // i=14 { Call: Call{ F: FuncWatch, P: "src/github.com/pblaszczyk/qttu/src", C: ch[0], E: Create, }, Record: []Call{ { F: FuncRecursiveRewatch, P: "src/github.com/pblaszczyk/qttu/src/main.cc", NP: "src/github.com/pblaszczyk/qttu/src", E: Create | Remove, NE: Create | Remove, }, }, }, // i=15 { Call: Call{ F: FuncWatch, P: "src/github.com/pblaszczyk/qttu", C: ch[4], E: Write, }, Record: []Call{ { F: FuncRecursiveRewatch, P: "src/github.com/pblaszczyk/qttu/src", NP: "src/github.com/pblaszczyk/qttu", E: Create | Remove, NE: Create | Remove | Write, }, }, }, // i=16 { Call: Call{ F: FuncWatch, P: "src/github.com/rjeczalik/fs/fs.go", C: ch[3], E: Rename, }, Record: nil, }, } n.ExpectRecordedCalls(watches[:]) events := [...]TCase{ // i=0 { Event: Call{P: "src/github.com/rjeczalik/fs/fs.go", E: Rename}, Receiver: Chans{ch[2], ch[3]}, }, // i=1 { Event: Call{P: "src/github.com/rjeczalik/fs/fs.go", E: Create}, Receiver: Chans{ch[0]}, }, // i=2 { Event: Call{P: "src/github.com/rjeczalik/fs/fs.go/file", E: Create}, Receiver: Chans{ch[0]}, }, // i=3 { Event: Call{P: "src/github.com/rjeczalik/fs", E: Rename}, Receiver: Chans{ch[2]}, }, // i=4 { Event: Call{P: "src/github.com/rjeczalik/fs/fs_test.go", E: Rename}, Receiver: Chans{ch[2]}, }, // i=5 { Event: Call{P: "src/github.com/rjeczalik/fs/cmd/mktree/main.go", E: Remove}, Receiver: Chans{ch[1]}, }, // i=6 { Event: Call{P: "src/github.com/rjeczalik/fs/cmd/gotree", E: Remove}, Receiver: Chans{ch[1], ch[2]}, }, // i=7 { Event: Call{P: "src/github.com/rjeczalik/fs/cmd", E: Remove}, Receiver: Chans{ch[1]}, }, // i=8 { Event: Call{P: "src/github.com/rjeczalik/fs/fs.go/file", E: Write}, Receiver: nil, }, // i=9 { Event: Call{P: "src/github.com/rjeczalik/fs/fs.go/file", E: Write}, Receiver: nil, }, // i=10 { Event: Call{P: "src/github.com/rjeczalik/fs", E: Remove}, Receiver: nil, }, // i=11 { Event: Call{P: "src/github.com/rjeczalik/fs/cmd", E: Rename}, Receiver: Chans{ch[2]}, }, // i=12 { Event: Call{P: "src/github.com/rjeczalik/fs/cmd/mktree/main.go", E: Write}, Receiver: nil, }, // i=13 { Event: Call{P: "src/github.com/rjeczalik/fs/cmd/gotree", E: Rename}, Receiver: nil, }, // i=14 { Event: Call{P: "src/github.com/rjeczalik/fs/cmd/file", E: Rename}, Receiver: nil, }, // i=15 { Event: Call{P: "src/github.com/rjeczalik/fs/fs.go", E: Rename}, Receiver: Chans{ch[2], ch[3]}, }, } n.ExpectTreeEvents(events[:], ch) stops := [...]RCase{ // i=0 { Call: Call{ F: FuncStop, C: ch[1], }, Record: nil, }, { Call: Call{ F: FuncStop, C: ch[4], }, Record: []Call{ { F: FuncRecursiveRewatch, P: "src/github.com/pblaszczyk/qttu", NP: "src/github.com/pblaszczyk/qttu", E: Create | Remove | Write, NE: Create | Remove, }, }, }, } n.ExpectRecordedCalls(stops[:]) } func TestRecursiveTreeWatchInactiveMerge(t *testing.T) { n := NewRecursiveTreeTest(t, "testdata/vfs.txt") defer n.Close() ch := NewChans(1) watches := [...]RCase{ // i=0 { Call: Call{ F: FuncWatch, P: "src/github.com/rjeczalik/fs", C: ch[0], E: Create, }, Record: []Call{ { F: FuncWatch, P: "src/github.com/rjeczalik/fs", E: Create, }, }, }, // i=1 { Call: Call{ F: FuncWatch, P: "src/github.com/rjeczalik/fs/cmd/gotree/...", C: ch[0], E: Remove, }, Record: []Call{ { F: FuncRecursiveRewatch, P: "src/github.com/rjeczalik/fs", NP: "src/github.com/rjeczalik/fs", E: Create, NE: Create | Remove, }, }, }, } n.ExpectRecordedCalls(watches[:]) events := [...]TCase{ // i=0 { Event: Call{P: "src/github.com/rjeczalik/fs/.fs.go.swp", E: Create}, Receiver: Chans{ch[0]}, }, // i=1 { Event: Call{P: "src/github.com/rjeczalik/fs/.fs.go.swp", E: Remove}, Receiver: nil, }, // i=2 { Event: Call{P: "src/github.com/rjeczalik/fs", E: Remove}, Receiver: nil, }, // i=3 { Event: Call{P: "src/github.com/rjeczalik/fs/cmd/gotree/main.go", E: Remove}, Receiver: Chans{ch[0]}, }, } n.ExpectTreeEvents(events[:], ch) } func TestRecursiveTree_Windows(t *testing.T) { n := NewRecursiveTreeTest(t, "testdata/vfs.txt") defer n.Close() const ChangeFileName = Event(0x1) ch := NewChans(1) watches := [...]RCase{ // i=0 { Call: Call{ F: FuncWatch, P: "src/github.com/rjeczalik/fs", C: ch[0], E: ChangeFileName, }, Record: []Call{ { F: FuncWatch, P: "src/github.com/rjeczalik/fs", E: ChangeFileName, }, }, }, } n.ExpectRecordedCalls(watches[:]) events := [...]TCase{ // i=0 { Event: Call{P: "src/github.com/rjeczalik/fs", E: ChangeFileName}, Receiver: Chans{ch[0]}, }, // i=1 { Event: Call{P: "src/github.com/rjeczalik/fs/fs.go", E: ChangeFileName}, Receiver: Chans{ch[0]}, }, } n.ExpectTreeEvents(events[:], ch) }