11package test .os .watch
22
3+ import scala .util .Properties .isWin
4+ import scala .util .Random
35import utest ._
46
57object WatchTests extends TestSuite with TestSuite .Retries {
@@ -13,127 +15,135 @@ object WatchTests extends TestSuite with TestSuite.Retries {
1315
1416 val tests = Tests {
1517 test(" singleFolder" ) - _root_.test.os.TestUtil .prep { wd =>
16- if (_root_.test.os.Unix ()) {
17- val changedPaths = collection.mutable.Set .empty[os.Path ]
18- _root_.os.watch.watch(
19- Seq (wd),
20- onEvent = _.foreach(changedPaths.add)
21- )
18+ val changedPaths = collection.mutable.Set .empty[os.Path ]
19+ _root_.os.watch.watch(
20+ Seq (wd),
21+ onEvent = _.foreach(changedPaths.add)
22+ )
2223
2324// os.write(wd / "lols", "")
2425// Thread.sleep(100)
2526
26- changedPaths.clear()
27-
28- def checkFileManglingChanges (p : os.Path ) = {
29-
30- checkChanges(
31- os.write(p, " " ),
32- Set (p.subRelativeTo(wd))
33- )
34-
35- checkChanges(
36- os.write.append(p, " hello" ),
37- Set (p.subRelativeTo(wd))
38- )
39-
40- checkChanges(
41- os.write.over(p, " world" ),
42- Set (p.subRelativeTo(wd))
43- )
44-
45- checkChanges(
46- os.truncate(p, 1 ),
47- Set (p.subRelativeTo(wd))
48- )
27+ changedPaths.clear()
4928
50- checkChanges(
51- os.remove(p),
52- Set (p.subRelativeTo(wd))
53- )
54- }
55- def checkChanges (action : => Unit , expectedChangedPaths : Set [os.SubPath ]) = synchronized {
56- changedPaths.clear()
57- action
58- Thread .sleep(200 )
59- val changedSubPaths = changedPaths.map(_.subRelativeTo(wd))
60- assert(expectedChangedPaths == changedSubPaths)
61- }
62-
63- checkFileManglingChanges(wd / " test" )
29+ def checkFileManglingChanges (p : os.Path ) = {
6430
6531 checkChanges(
66- os.remove(wd / " File.txt " ),
67- Set (os.sub / " File.txt " )
32+ os.write(p, Random .nextString( 100 ) ),
33+ Set (p.subRelativeTo(wd) )
6834 )
6935
7036 checkChanges(
71- os.makeDir(wd / " my-new-folder " ),
72- Set (os.sub / " my-new-folder " )
37+ os.write.append(p, " hello " ),
38+ Set (p.subRelativeTo(wd) )
7339 )
7440
75- checkFileManglingChanges(wd / " my-new-folder" / " test" )
76-
7741 checkChanges(
78- os.move(wd / " folder2" , wd / " folder3" ),
79- Set (
80- os.sub / " folder2" ,
81- os.sub / " folder3" ,
82- os.sub / " folder3" / " nestedA" ,
83- os.sub / " folder3" / " nestedA" / " a.txt" ,
84- os.sub / " folder3" / " nestedB" ,
85- os.sub / " folder3" / " nestedB" / " b.txt"
86- )
42+ os.write.over(p, " world" ),
43+ Set (p.subRelativeTo(wd))
8744 )
8845
8946 checkChanges(
90- os.copy(wd / " folder3" , wd / " folder4" ),
91- Set (
92- os.sub / " folder4" ,
93- os.sub / " folder4" / " nestedA" ,
94- os.sub / " folder4" / " nestedA" / " a.txt" ,
95- os.sub / " folder4" / " nestedB" ,
96- os.sub / " folder4" / " nestedB" / " b.txt"
97- )
47+ os.truncate(p, 1 ),
48+ Set (p.subRelativeTo(wd))
9849 )
9950
10051 checkChanges(
101- os.remove.all(wd / " folder4" ),
102- Set (
103- os.sub / " folder4" ,
104- os.sub / " folder4" / " nestedA" ,
105- os.sub / " folder4" / " nestedA" / " a.txt" ,
106- os.sub / " folder4" / " nestedB" ,
107- os.sub / " folder4" / " nestedB" / " b.txt"
108- )
52+ os.remove(p),
53+ Set (p.subRelativeTo(wd))
10954 )
55+ }
56+ def checkChanges (action : => Unit , expectedChangedPaths : Set [os.SubPath ]) = synchronized {
57+ changedPaths.clear()
58+ action
59+ Thread .sleep(200 )
60+ val changedSubPaths = changedPaths.map(_.subRelativeTo(wd))
61+ // on Windows sometimes we get more changes
62+ if (isWin) assert(expectedChangedPaths.subsetOf(changedSubPaths))
63+ else assert(expectedChangedPaths == changedSubPaths)
64+ }
11065
111- checkFileManglingChanges(wd / " folder3" / " nestedA" / " double-nested-file" )
112- checkFileManglingChanges(wd / " folder3" / " nestedB" / " double-nested-file" )
66+ checkFileManglingChanges(wd / " test" )
11367
114- checkChanges(
115- os.symlink (wd / " newlink " , wd / " doesntexist " ),
116- Set (os.sub / " newlink " )
117- )
68+ checkChanges(
69+ os.remove (wd / " File.txt " ),
70+ Set (os.sub / " File.txt " )
71+ )
11872
119- checkChanges(
120- os.symlink(wd / " newlink2" , wd / " folder3" ),
121- Set (os.sub / " newlink2" )
122- )
73+ checkChanges(
74+ os.makeDir(wd / " my-new-folder" ),
75+ Set (os.sub / " my-new-folder" )
76+ )
77+
78+ checkFileManglingChanges(wd / " my-new-folder" / " test" )
12379
80+ locally {
81+ val expectedChanges = if (isWin) Set (
82+ os.sub / " folder2" ,
83+ os.sub / " folder3"
84+ )
85+ else Set (
86+ os.sub / " folder2" ,
87+ os.sub / " folder3" ,
88+ os.sub / " folder3" / " nestedA" ,
89+ os.sub / " folder3" / " nestedA" / " a.txt" ,
90+ os.sub / " folder3" / " nestedB" ,
91+ os.sub / " folder3" / " nestedB" / " b.txt"
92+ )
12493 checkChanges(
125- os.hardlink(wd / " newlink3" , wd / " folder3" / " nestedA" / " a.txt" ),
126- System .getProperty(" os.name" ) match {
127- case " Linux" => Set (os.sub / " newlink3" )
128- case " Mac OS X" =>
129- Set (
130- os.sub / " newlink3" ,
131- os.sub / " folder3" / " nestedA" ,
132- os.sub / " folder3" / " nestedA" / " a.txt"
133- )
134- }
94+ os.move(wd / " folder2" , wd / " folder3" ),
95+ expectedChanges
13596 )
13697 }
98+
99+ checkChanges(
100+ os.copy(wd / " folder3" , wd / " folder4" ),
101+ Set (
102+ os.sub / " folder4" ,
103+ os.sub / " folder4" / " nestedA" ,
104+ os.sub / " folder4" / " nestedA" / " a.txt" ,
105+ os.sub / " folder4" / " nestedB" ,
106+ os.sub / " folder4" / " nestedB" / " b.txt"
107+ )
108+ )
109+
110+ checkChanges(
111+ os.remove.all(wd / " folder4" ),
112+ Set (
113+ os.sub / " folder4" ,
114+ os.sub / " folder4" / " nestedA" ,
115+ os.sub / " folder4" / " nestedA" / " a.txt" ,
116+ os.sub / " folder4" / " nestedB" ,
117+ os.sub / " folder4" / " nestedB" / " b.txt"
118+ )
119+ )
120+
121+ checkFileManglingChanges(wd / " folder3" / " nestedA" / " double-nested-file" )
122+ checkFileManglingChanges(wd / " folder3" / " nestedB" / " double-nested-file" )
123+
124+ checkChanges(
125+ os.symlink(wd / " newlink" , wd / " doesntexist" ),
126+ Set (os.sub / " newlink" )
127+ )
128+
129+ checkChanges(
130+ os.symlink(wd / " newlink2" , wd / " folder3" ),
131+ Set (os.sub / " newlink2" )
132+ )
133+
134+ checkChanges(
135+ os.hardlink(wd / " newlink3" , wd / " folder3" / " nestedA" / " a.txt" ),
136+ System .getProperty(" os.name" ) match {
137+ case " Mac OS X" =>
138+ Set (
139+ os.sub / " newlink3" ,
140+ os.sub / " folder3" / " nestedA" ,
141+ os.sub / " folder3" / " nestedA" / " a.txt"
142+ )
143+ case _ => Set (os.sub / " newlink3" )
144+ }
145+ )
146+
137147 }
138148 }
139149}
0 commit comments