@@ -11,12 +11,34 @@ ext2sym = copy(FileIO.ext2sym)
11
11
magic_list = copy (FileIO. magic_list)
12
12
sym2info = copy (FileIO. sym2info)
13
13
14
+
15
+ module LoadTest1
16
+ import FileIO: @format_str , File
17
+ load (file:: File{format"MultiLib"} ) = error ()
18
+
19
+ save (file:: File{format"MultiLib"} ) = open (file, " w" ) do s
20
+ write (s, magic (format " MultiLib" )) # Write the magic bytes
21
+ write (s, 0 )
22
+ end
23
+
24
+ end
25
+ module LoadTest2
26
+ import FileIO: @format_str , File, magic
27
+ load (file:: File{format"MultiLib"} ) = 42
28
+
29
+ save (file:: File{format"MultiLib"} ) = open (file, " w" ) do s
30
+ write (s, magic (format " MultiLib" )) # Write the magic bytes
31
+ write (s, 42 )
32
+ end
33
+
34
+ end
35
+
14
36
try
15
37
empty! (FileIO. ext2sym)
16
38
empty! (FileIO. magic_list)
17
39
empty! (FileIO. sym2info)
18
40
19
- facts (" DataFormat" ) do
41
+ context (" DataFormat" ) do
20
42
@fact DataFormat{:CSV } --> format " CSV"
21
43
@fact unknown (format " CSV" ) --> false
22
44
@fact unknown (format " UNKNOWN" ) --> true
44
66
45
67
end
46
68
47
- facts (" streams" ) do
69
+ context (" streams" ) do
48
70
io = IOBuffer ()
49
71
s = Stream (format " JUNK" , io)
50
72
@fact typeof (s) --> Stream{DataFormat{:JUNK }, IOBuffer}
56
78
@fact get (filename (s)) --> " junk2.jnk"
57
79
end
58
80
59
- facts (" query" ) do
81
+ context (" query" ) do
60
82
# Streams
61
83
io = IOBuffer ()
62
84
write (io, " Weird format" )
182
204
183
205
del_format (format " JUNK" ) # This triggers del_extension for multiple extensions
184
206
207
+ context (" multiple libs" ) do
208
+ lensave0 = length (FileIO. sym2saver)
209
+ lenload0 = length (FileIO. sym2loader)
210
+ OSKey = @osx ? FileIO. OSX : @windows ? FileIO. Windows : @linux ? FileIO. Linux : error (" os not supported" )
211
+ add_format (
212
+ format " MultiLib" ,
213
+ UInt8[0x42 ,0x4d ],
214
+ " .mlb" ,
215
+ [:LoadTest1 , FileIO. LOAD, OSKey],
216
+ [:LoadTest2 ]
217
+ )
218
+ @fact lensave0 + 1 --> length (FileIO. sym2saver)
219
+ @fact lenload0 + 1 --> length (FileIO. sym2loader)
220
+ @fact length (FileIO. sym2loader[:MultiLib ]) --> 2
221
+ @fact length (FileIO. sym2saver[:MultiLib ]) --> 1
222
+
223
+ mktempdir () do tmpdir
224
+ fn = joinpath (tmpdir, " test.mlb" )
225
+ save (fn)
226
+ x = load (fn)
227
+ open (query (fn), " r" ) do io
228
+ skipmagic (io)
229
+ a = read (io, Int)
230
+ @fact a --> 42 # make sure that LoadTest2 is used for saving, even though its at position 2
231
+ end
232
+ @fact isdefined (:LoadTest1 ) --> true # first module should load first but fail
233
+ @fact x --> 42
234
+ end
235
+
236
+ end
185
237
finally
186
238
# Restore the registry
187
239
empty! (FileIO. ext2sym)
@@ -194,7 +246,7 @@ finally
194
246
end
195
247
196
248
file_dir = joinpath (dirname (@__FILE__ ), " files" )
197
- facts (" STL detection" ) do
249
+ context (" STL detection" ) do
198
250
q = query (joinpath (file_dir, " ascii.stl" ))
199
251
@fact typeof (q) --> File{format " STL_ASCII" }
200
252
q = query (joinpath (file_dir, " binary_stl_from_solidworks.STL" ))
@@ -205,14 +257,14 @@ facts("STL detection") do
205
257
@fact position (io) --> 0 # no skipping for functions
206
258
end
207
259
end
208
- facts (" PLY detection" ) do
260
+ context (" PLY detection" ) do
209
261
q = query (joinpath (file_dir, " ascii.ply" ))
210
262
@fact typeof (q) --> File{format " PLY_ASCII" }
211
263
q = query (joinpath (file_dir, " binary.ply" ))
212
264
@fact typeof (q) --> File{format " PLY_BINARY" }
213
265
214
266
end
215
- facts (" Multiple Magic bytes" ) do
267
+ context (" Multiple Magic bytes" ) do
216
268
q = query (joinpath (file_dir, " magic1.tiff" ))
217
269
@fact typeof (q) --> File{format " TIFF" }
218
270
q = query (joinpath (file_dir, " magic2.tiff" ))
0 commit comments