1
  
2
  
3
  
4
  
5
  
6
  
7
  
8
  
9
  
10
  
11
  
12
  
13
  
14
  
15
  
16
  
17
  
18
  
19
  
20
  
21
  
22
  
23
  
24
  
25
  
26
  
27
  
28
  
29
  
30
  
31
  
32
  
33
  
34
  
35
  
36
  
37
  
38
  
39
  
40
  
41
  
42
  
43
  
44
  
45
  
46
  
47
  
48
  
49
  
50
  
51
  
52
  
53
  
54
  
55
  
56
  
57
  
58
  
59
  
60
  
61
  
62
  
63
  
64
  
65
  
66
  
67
  
68
  
69
  
70
  
71
  
72
  
73
  
74
  
75
  
76
  
77
  
78
  
79
  
80
  
81
  
82
  
83
  
84
  
85
  
86
  
87
  
88
  
89
  
90
  
91
  
92
  
93
  
94
  
95
  
96
  
97
  
98
  
99
  
100
  
101
  
102
  
103
  
104
  
105
  
106
  
107
  
108
  
109
  
110
  
111
  
112
  
113
  
114
  
115
  
#!/usr/local/bin/pike 
 
final constant TEST_SIZE = 16384; 
 
string testdata = random_string(TEST_SIZE); 
 
int verbose; 
int testno; 
 
mixed call_out_id; 
object tf; 
object stream; 
 
/* 
 * Some helper functions. 
 */ 
 
constant log_msg = Tools.Testsuite.log_msg; 
constant log_status = Tools.Testsuite.log_status; 
 
void exit_test (int failure) 
{ 
  Tools.Testsuite.report_result (max (testno - !!failure, 0), !!failure); 
  exit (failure); 
} 
 
/* 
 * The driver function. 
 */ 
 
void next(mixed ... args) 
{ 
  testno++; 
 
  function test; 
  if (!(test = this_object()["test"+testno])) exit_test(0); 
  mixed err; 
  if (err = catch { 
    log_status("System.FSEvents test: %d", testno); 
    test(); 
  }) { 
    catch { 
      log_msg("Test %d failed!\n" 
              "%s\n", 
              testno, 
              describe_backtrace(err)); 
    }; 
    exit_test(1); 
  } 
} 
 
void done() 
{ 
  remove_call_out(call_out_id); 
  tf->close(); 
 if(0) 
 { 
    log_msg("Test %d failed.\n", testno); 
    exit_test(1); 
  } 
  call_out(next, 0); 
} 
 
/* 
 * The actual tests. 
 */ 
 
void test1() 
{ 
 
  stream = System.FSEvents.EventStream(({}), 3.0, System.FSEvents.kFSEventStreamEventIdSinceNow, 
    System.FSEvents.kFSEventStreamCreateFlagNone); 
 
  stream->set_callback(next); 
  stream->add_path("."); 
  stream->start(); 
 
  /* first, create a test file */ 
  tf = Stdio.File("fsevent.test", "crw"); 
  tf->close(); 
 
  // our failure timeout 
  call_out_id = call_out(exit_test, 10, 1);   
  call_out(do_delete, 0.1); 
} 
 
void do_delete() 
{ 
  rm("fsevent.test"); 
} 
 
/* 
 * Start the backend. 
 */ 
 
int main(int argc, array(string) argv) 
{ 
  verbose = (int) (getenv()->TEST_VERBOSITY || 2); 
#if constant(alarm) 
  alarm(5*60);        // 5 minutes should be sufficient for this test. 
#endif 
 
#if constant(Pike.DefaultBackend.HAVE_CORE_FOUNDATION) 
   Pike.DefaultBackend.enable_core_foundation(1); 
#else 
   werror("Pike does not have support for Core Foundation. FSEvents will not function!\n"); 
   exit(1); 
#endif 
 
 
  call_out(next, 0); 
  return -1; 
}