[fileio] fileparts() unit tests extended
[scilab.git] / scilab / modules / fileio / tests / unit_tests / fileparts.tst
1 // =============================================================================
2 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 // Copyright (C) 2008 - INRIA
4 // Copyright (C) 2019 - Samuel GOUGEON
5 //
6 //  This file is distributed under the same license as the Scilab package.
7 // =============================================================================
8
9 // <-- CLI SHELL MODE -->
10 // <-- NO CHECK REF -->
11
12 //===============================
13 // Tests fileparts
14 //===============================
15
16 // Error messages
17 // ==============
18 errmsg1 = msprintf(_("%s: Wrong number of input argument(s): %d to %d expected.\n"), "fileparts", 1, 2);
19 assert_checkerror("fileparts(SCI+''/etc/scilab.start'', ""extension"", ""extension"")", errmsg1);
20
21 errmsg2 = msprintf(_("%s: Wrong number of output arguments: %d expected.\n"),  "fileparts", 1);
22 assert_checkerror("[a,b] = fileparts(SCI+''/etc/scilab.start'',""extension"")", errmsg2);
23
24 errmsg3 = msprintf(_("%s: Wrong type for input argument #%d: string expected.\n"), "fileparts", 1);
25 assert_checkerror("[path,fname,extension] = fileparts([]);", errmsg3);
26
27 errmsg4 = msprintf(_("%s: Wrong value for input argument #%d.\n"), "fileparts", 2);
28 assert_checkerror("extension = fileparts(SCI+''/etc/scilab.start'',''rpr'');", errmsg4);
29
30 errmsg5 = msprintf(_("%s: Wrong type for input argument #%d: string expected.\n"), "fileparts", 2);
31 assert_checkerror("extension = fileparts(SCI+''/etc/scilab.start'',10);", errmsg5);
32
33 errmsg6 = msprintf(_("%s: Wrong type for input argument #%d: string expected.\n"), "fileparts", 1);
34 assert_checkerror("extension = fileparts(10,10);", errmsg6);
35
36 errmsg7 = msprintf(_("%s: Wrong size for input argument #%d: string expected.\n"), "fileparts", 2);
37 assert_checkerror("fileparts(SCI+''/etc/scilab.start'', [""extension"", ""extension""])", errmsg7);
38
39 // On the root directory
40 // ---------------------
41 // fileparts("c:") => "": WRONG. "c:/" expected : http://bugzilla.scilab.org/16063
42 pathfiles = ["c:/", "c:/abc" "c:/.abc" "/" "/abc" "/.abc"];
43 [path, fname, ext] = fileparts(pathfiles);
44 pathref = ['c:/','c:/','c:/','/','/','/'];
45 if getos()=="Windows"
46     pathref = strsubst(pathref, "/", "\");
47 end
48 assert_checkequal(path, pathref);
49 assert_checkequal(fname, ["" "abc" ".abc" "" "abc" ".abc"]);
50 assert_checkequal(ext, emptystr(1,6));
51
52 // With the "." directory
53 // ----------------------
54 // With absolute paths
55 pathfiles = ["c:/.", "c:/./", "c:/./.", "c:/abc/.", "c:/abc/./", "c:/abc/./.tmp"];
56 [path, fname, ext] = fileparts(pathfiles);
57 pathref = ['c:/','c:/./','c:/./','c:/abc/','c:/abc/./', 'c:/abc/./'];
58 if getos()=="Windows"
59     pathref = strsubst(pathref, "/", "\");
60 end
61 assert_checkequal(path, pathref);
62 assert_checkequal(fname, ["."  "" "." "." "" ".tmp"]);
63 assert_checkequal(ext, emptystr(1,6));
64
65 pathfiles = ["/.", "/./", "/./.", "/abc/.", "/abc/./", "/abc/./.tmp"];
66 [path, fname, ext] = fileparts(pathfiles);
67 pathref = pathconvert(['/','/./','/./','/abc/','/abc/./', '/abc/./'],%t,%t);
68 assert_checkequal(path, pathref);
69 assert_checkequal(fname, ["." "" "." "." "" ".tmp"]);
70 assert_checkequal(ext, emptystr(1,6));
71
72 // With relative paths
73 pathfiles = ["./abc", "./." "./.abc", "./abc/./def"];
74 [path, fname, ext] = fileparts(pathfiles);
75 pathref = ['./' './' './' './abc/./'];
76 if getos()=="Windows"
77     pathref = strsubst(pathref, "/", "\");
78 end
79 assert_checkequal(path, pathref);
80 assert_checkequal(fname, ["abc"  "." ".abc" "def"]);
81 assert_checkequal(ext, emptystr(1,4));
82
83 // With the ".." directory
84 // -----------------------
85 // With absolute paths
86 pathfiles = ["c:/..", "c:/abc/..", "c:/abc/../efg", "/..", "/abc/..", "/abc/../efg"];
87
88 [path, fname, ext] = fileparts(pathfiles);
89 pathref = ['c:/','c:/abc/','c:/abc/../', '/','/abc/','/abc/../'];
90 if getos()=="Windows"
91     pathref = strsubst(pathref, "/", "\");
92 end
93 assert_checkequal(path, pathref);
94 //assert_checkequal(fname, ["."  "." "efg" "." "." "efg"]); // WRONG
95 //assert_checkequal(ext, ["." "." "" "." "." ""]);          // WRONG
96 // => http://bugzilla.scilab.org/16063
97
98 // With relative paths
99 pathfiles = ["abc/..", "./..", "./../", "abc/../def", "abc/../.."];
100
101 [path, fname, ext] = fileparts(pathfiles);
102 pathref = pathconvert(['abc/','./','./../','abc/../','abc/../'],%t,%t);
103 assert_checkequal(path, pathref);
104 //assert_checkequal(fname, ["."  "."  ""  "def"  "."]); // WRONG
105 //assert_checkequal(ext,   ["."  "."  ""  ""     "."]); // WRONG
106 // => http://bugzilla.scilab.org/16063
107
108 // For SCI+'/etc/scilab.start'
109 // --------------------------
110 [path,fname,extension] = fileparts(SCI+'/etc/scilab.start');
111 assert_checkequal(path, pathconvert(SCI+'/etc/',%t,%t));
112 assert_checkequal(fname, 'scilab');
113 assert_checkequal(extension, '.start');
114 r = fileparts(SCI+'/etc/scilab.start','path');
115 assert_checkequal(r, pathconvert(SCI+'/etc/',%t,%f));
116 r = fileparts(SCI+'/etc/scilab.start','fname');
117 assert_checkequal(r, 'scilab');
118 r = fileparts(SCI+'/etc/scilab.start','extension');
119 assert_checkequal(r, '.start');
120
121 // Filename starting with "."
122 // --------------------------
123 [path,fname,extension] = fileparts('/tmp/.scilab');
124 assert_checkequal(path, pathconvert('/tmp/',%t,%t));
125 assert_checkequal(fname, '.scilab');
126 assert_checkequal(extension, '');
127 r = fileparts('/tmp/.scilab','path');
128 assert_checkequal(r, pathconvert('/tmp/',%t,%f));
129 r = fileparts('/tmp/.scilab','fname');
130 assert_checkequal(r, '.scilab');
131 r = fileparts('/tmp/.scilab','extension');
132 assert_checkequal(r, '');
133
134 // Filename with multiple "."
135 // --------------------------
136 pathfile = '/tmp/scilab.inc.txt'
137 [path,fname,extension] = fileparts(pathfile);
138 assert_checkequal(path, pathconvert('/tmp/',%t,%t));
139 assert_checkequal(fname, 'scilab.inc');
140 assert_checkequal(extension, '.txt');
141 r = fileparts(pathfile,'path');
142 assert_checkequal(r, pathconvert('/tmp/',%t,%f));
143 r = fileparts(pathfile,'fname');
144 assert_checkequal(r, 'scilab.inc');
145 r = fileparts(pathfile,'extension');
146 assert_checkequal(r, '.txt');
147
148 // For the empty string
149 // --------------------
150 [path,fname,extension] = fileparts("");
151 assert_checkequal(path, "");
152 assert_checkequal(fname, "");
153 assert_checkequal(extension, "");
154
155 r = fileparts("", 'path');
156 assert_checkequal(r, "");
157 r = fileparts("", 'fname');
158 assert_checkequal(fname, "");
159 r = fileparts("", 'extension');
160 assert_checkequal(extension, "");
161
162 // For a row of strings
163 // --------------------
164 [path,fname,extension] = fileparts([SCI+'/etc/scilab.start', SCI+'/etc/scilab.start']);
165 assert_checkequal(path, [pathconvert(SCI+'/etc/',%t,%t), pathconvert(SCI+'/etc/',%t,%t)]);
166 assert_checkequal(fname, ['scilab', 'scilab']);
167 assert_checkequal(extension, ['.start', '.start']);
168
169 r = fileparts([SCI+'/etc/scilab.start', SCI+'/etc/scilab.start'],'path');
170 assert_checkequal(r, [pathconvert(SCI+'/etc/',%t,%f), pathconvert(SCI+'/etc/',%t,%f)]);
171 r = fileparts([SCI+'/etc/scilab.start', SCI+'/etc/scilab.start'],'fname');
172 assert_checkequal(r, ['scilab', 'scilab']);
173 r = fileparts([SCI+'/etc/scilab.start', SCI+'/etc/scilab.start'],'extension');
174 assert_checkequal(r, ['.start', '.start']);
175
176 // For a column of strings
177 // -----------------------
178 [path,fname,extension] = fileparts([SCI+'/etc/scilab.start'; SCI+'/etc/scilab.start']);
179 assert_checkequal(path, [pathconvert(SCI+'/etc/',%t,%t); pathconvert(SCI+'/etc/',%t,%t)]);
180 assert_checkequal(fname, ['scilab'; 'scilab']);
181 assert_checkequal(extension, ['.start'; '.start']);
182
183 r = fileparts([SCI+'/etc/scilab.start'; SCI+'/etc/scilab.start'],'path');
184 assert_checkequal(r, [pathconvert(SCI+'/etc/',%t,%f); pathconvert(SCI+'/etc/',%t,%f)]);
185 r = fileparts([SCI+'/etc/scilab.start'; SCI+'/etc/scilab.start'],'fname');
186 assert_checkequal(r, ['scilab'; 'scilab']);
187 r = fileparts([SCI+'/etc/scilab.start'; SCI+'/etc/scilab.start'],'extension');
188 assert_checkequal(r, ['.start'; '.start']);
189
190 // For a matrix of strings with no extension
191 // -----------------------------------------
192 [path,fname,extension] = fileparts([SCI+'/etc/scilab.start', SCI+'/etc/scilab']);
193 assert_checkequal(path, [pathconvert(SCI+'/etc/',%t,%t), pathconvert(SCI+'/etc/',%t,%t)]);
194 assert_checkequal(fname, ['scilab', 'scilab']);
195 assert_checkequal(extension, ['.start', ""]);
196
197 r = fileparts([SCI+'/etc/scilab.start', SCI+'/etc/scilab'],'path');
198 assert_checkequal(r, [pathconvert(SCI+'/etc/',%t,%f), pathconvert(SCI+'/etc/',%t,%f)]);
199 r = fileparts([SCI+'/etc/scilab.start', SCI+'/etc/scilab'],'fname');
200 assert_checkequal(r, ['scilab', 'scilab']);
201 r = fileparts([SCI+'/etc/scilab.start', SCI+'/etc/scilab'],'extension');
202 assert_checkequal(r, ['.start', ""]);
203
204 // For a matrix of strings with no path
205 // ====================================
206 [path,fname,extension] = fileparts([SCI+'/etc/scilab.start', 'scilab.start']);
207 assert_checkequal(path, [pathconvert(SCI+'/etc/',%t,%t), ""]);
208 assert_checkequal(fname, ['scilab', 'scilab']);
209 assert_checkequal(extension, ['.start', ".start"]);
210
211 r = fileparts([SCI+'/etc/scilab.start', 'scilab.start'], 'path');
212 assert_checkequal(r, [pathconvert(SCI+'/etc/',%t,%f), ""]);
213 r = fileparts([SCI+'/etc/scilab.start', 'scilab.start'], 'fname');
214 assert_checkequal(r, ['scilab', 'scilab']);
215 r = fileparts([SCI+'/etc/scilab.start', 'scilab.start'], 'extension');
216 assert_checkequal(r, ['.start', '.start']);