@@ -109,6 +109,75 @@ object ZipOpTests extends TestSuite {
109
109
assert(paths == expected)
110
110
}
111
111
112
+ test(" zipEmptyDir" ) {
113
+ def prepare (wd : os.Path ) = {
114
+ val zipFileName = " zipEmptyDirs"
115
+
116
+ val emptyDir = wd / " empty"
117
+ os.makeDir(emptyDir)
118
+
119
+ val containsEmptyDir = wd / " outer"
120
+ os.makeDir.all(containsEmptyDir)
121
+ os.makeDir(containsEmptyDir / " emptyInnerDir" )
122
+
123
+ (zipFileName, emptyDir, containsEmptyDir)
124
+ }
125
+
126
+ test(" zipEmptyDir" ) - prep { wd =>
127
+ val (zipFileName, emptyDir, containsEmptyDir) = prepare(wd)
128
+
129
+ val zipped = os.zip(
130
+ dest = wd / s " ${zipFileName}.zip " ,
131
+ sources = Seq (emptyDir, containsEmptyDir)
132
+ )
133
+
134
+ val unzipped = os.unzip(zipped, wd / zipFileName)
135
+ // should include empty dirs inside source
136
+ assert(os.isDir(unzipped / " emptyInnerDir" ))
137
+ // should ignore empty dirs specified in sources without dest
138
+ assert(! os.exists(unzipped / " empty" ))
139
+ }
140
+
141
+ test(" includePatterns" ) - prep { wd =>
142
+ val (zipFileName, _, containsEmptyDir) = prepare(wd)
143
+
144
+ val zipped = os.zip(
145
+ dest = wd / s " ${zipFileName}.zip " ,
146
+ sources = Seq (containsEmptyDir),
147
+ includePatterns = Seq (raw " .*Inner.* " .r)
148
+ )
149
+
150
+ val unzipped = os.unzip(zipped, wd / zipFileName)
151
+ assert(os.isDir(unzipped / " emptyInnerDir" ))
152
+ }
153
+
154
+ test(" excludePatterns" ) - prep { wd =>
155
+ val (zipFileName, _, containsEmptyDir) = prepare(wd)
156
+
157
+ val zipped = os.zip(
158
+ dest = wd / s " ${zipFileName}.zip " ,
159
+ sources = Seq (containsEmptyDir),
160
+ excludePatterns = Seq (raw " .*Inner.* " .r)
161
+ )
162
+
163
+ val unzipped = os.unzip(zipped, wd / zipFileName)
164
+ assert(! os.exists(unzipped / " emptyInnerDir" ))
165
+ }
166
+
167
+ test(" withDest" ) - prep { wd =>
168
+ val (zipFileName, emptyDir, _) = prepare(wd)
169
+
170
+ val zipped = os.zip(
171
+ dest = wd / s " ${zipFileName}.zip " ,
172
+ sources = Seq ((emptyDir, os.sub / " empty" ))
173
+ )
174
+
175
+ val unzipped = os.unzip(zipped, wd / zipFileName)
176
+ // should include empty dirs specified in sources with dest
177
+ assert(os.isDir(unzipped / " empty" ))
178
+ }
179
+ }
180
+
112
181
test(" zipStream" ) - prep { wd =>
113
182
val zipFileName = " zipStreamFunction.zip"
114
183
0 commit comments