OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [libgo/] [go/] [exp/] [winfsnotify/] [winfsnotify_test.go] - Blame information for rev 747

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 747 jeremybenn
// Copyright 2011 The Go Authors. All rights reserved.
2
// Use of this source code is governed by a BSD-style
3
// license that can be found in the LICENSE file.
4
 
5
// +build windows
6
 
7
package winfsnotify
8
 
9
import (
10
        "os"
11
        "testing"
12
        "time"
13
)
14
 
15
func expect(t *testing.T, eventstream <-chan *Event, name string, mask uint32) {
16
        t.Logf(`expected: "%s": 0x%x`, name, mask)
17
        select {
18
        case event := <-eventstream:
19
                if event == nil {
20
                        t.Fatal("nil event received")
21
                }
22
                t.Logf("received: %s", event)
23
                if event.Name != name || event.Mask != mask {
24
                        t.Fatal("did not receive expected event")
25
                }
26
        case <-time.After(1 * time.Second):
27
                t.Fatal("timed out waiting for event")
28
        }
29
}
30
 
31
func TestNotifyEvents(t *testing.T) {
32
        watcher, err := NewWatcher()
33
        if err != nil {
34
                t.Fatalf("NewWatcher() failed: %s", err)
35
        }
36
 
37
        testDir := "TestNotifyEvents.testdirectory"
38
        testFile := testDir + "/TestNotifyEvents.testfile"
39
        testFile2 := testFile + ".new"
40
        const mask = FS_ALL_EVENTS & ^(FS_ATTRIB|FS_CLOSE) | FS_IGNORED
41
 
42
        // Add a watch for testDir
43
        os.RemoveAll(testDir)
44
        if err = os.Mkdir(testDir, 0777); err != nil {
45
                t.Fatalf("Failed to create test directory: %s", err)
46
        }
47
        defer os.RemoveAll(testDir)
48
        err = watcher.AddWatch(testDir, mask)
49
        if err != nil {
50
                t.Fatalf("Watcher.Watch() failed: %s", err)
51
        }
52
 
53
        // Receive errors on the error channel on a separate goroutine
54
        go func() {
55
                for err := range watcher.Error {
56
                        t.Fatalf("error received: %s", err)
57
                }
58
        }()
59
 
60
        // Create a file
61
        file, err := os.Create(testFile)
62
        if err != nil {
63
                t.Fatalf("creating test file failed: %s", err)
64
        }
65
        expect(t, watcher.Event, testFile, FS_CREATE)
66
 
67
        err = watcher.AddWatch(testFile, mask)
68
        if err != nil {
69
                t.Fatalf("Watcher.Watch() failed: %s", err)
70
        }
71
 
72
        if _, err = file.WriteString("hello, world"); err != nil {
73
                t.Fatalf("failed to write to test file: %s", err)
74
        }
75
        if err = file.Close(); err != nil {
76
                t.Fatalf("failed to close test file: %s", err)
77
        }
78
        expect(t, watcher.Event, testFile, FS_MODIFY)
79
        expect(t, watcher.Event, testFile, FS_MODIFY)
80
 
81
        if err = os.Rename(testFile, testFile2); err != nil {
82
                t.Fatalf("failed to rename test file: %s", err)
83
        }
84
        expect(t, watcher.Event, testFile, FS_MOVED_FROM)
85
        expect(t, watcher.Event, testFile2, FS_MOVED_TO)
86
        expect(t, watcher.Event, testFile, FS_MOVE_SELF)
87
 
88
        if err = os.RemoveAll(testDir); err != nil {
89
                t.Fatalf("failed to remove test directory: %s", err)
90
        }
91
        expect(t, watcher.Event, testFile2, FS_DELETE_SELF)
92
        expect(t, watcher.Event, testFile2, FS_IGNORED)
93
        expect(t, watcher.Event, testFile2, FS_DELETE)
94
        expect(t, watcher.Event, testDir, FS_DELETE_SELF)
95
        expect(t, watcher.Event, testDir, FS_IGNORED)
96
 
97
        t.Log("calling Close()")
98
        if err = watcher.Close(); err != nil {
99
                t.Fatalf("failed to close watcher: %s", err)
100
        }
101
}
102
 
103
func TestNotifyClose(t *testing.T) {
104
        watcher, _ := NewWatcher()
105
        watcher.Close()
106
 
107
        done := false
108
        go func() {
109
                watcher.Close()
110
                done = true
111
        }()
112
 
113
        time.Sleep(50 * time.Millisecond)
114
        if !done {
115
                t.Fatal("double Close() test failed: second Close() call didn't return")
116
        }
117
 
118
        err := watcher.Watch("_test")
119
        if err == nil {
120
                t.Fatal("expected error on Watch() after Close(), got nil")
121
        }
122
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.