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// ==============
18errmsg1 = msprintf(_("%s: Wrong number of input argument(s): %d to %d expected.\n"), "fileparts", 1, 2);
19assert_checkerror("fileparts(SCI+''/etc/scilab.start'', ""extension"", ""extension"")", errmsg1);
20
21errmsg2 = msprintf(_("%s: Wrong number of output arguments: %d expected.\n"),  "fileparts", 1);
22assert_checkerror("[a,b] = fileparts(SCI+''/etc/scilab.start'',""extension"")", errmsg2);
23
24errmsg3 = msprintf(_("%s: Wrong type for input argument #%d: string expected.\n"), "fileparts", 1);
25assert_checkerror("[path,fname,extension] = fileparts([]);", errmsg3);
26
27errmsg4 = msprintf(_("%s: Wrong value for input argument #%d.\n"), "fileparts", 2);
28assert_checkerror("extension = fileparts(SCI+''/etc/scilab.start'',''rpr'');", errmsg4);
29
30errmsg5 = msprintf(_("%s: Wrong type for input argument #%d: string expected.\n"), "fileparts", 2);
31assert_checkerror("extension = fileparts(SCI+''/etc/scilab.start'',10);", errmsg5);
32
33errmsg6 = msprintf(_("%s: Wrong type for input argument #%d: string expected.\n"), "fileparts", 1);
34assert_checkerror("extension = fileparts(10,10);", errmsg6);
35
36errmsg7 = msprintf(_("%s: Wrong size for input argument #%d: string expected.\n"), "fileparts", 2);
37assert_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
42pathfiles = ["c:/", "c:/abc" "c:/.abc" "/" "/abc" "/.abc"];
43[path, fname, ext] = fileparts(pathfiles);
44pathref = ['c:/','c:/','c:/','/','/','/'];
45if getos()=="Windows"
46    pathref = strsubst(pathref, "/", "\");
47end
48assert_checkequal(path, pathref);
49assert_checkequal(fname, ["" "abc" ".abc" "" "abc" ".abc"]);
50assert_checkequal(ext, emptystr(1,6));
51
52// With the "." directory
53// ----------------------
54// With absolute paths
55pathfiles = ["c:/.", "c:/./", "c:/./.", "c:/abc/.", "c:/abc/./", "c:/abc/./.tmp"];
56[path, fname, ext] = fileparts(pathfiles);
57pathref = ['c:/','c:/./','c:/./','c:/abc/','c:/abc/./', 'c:/abc/./'];
58if getos()=="Windows"
59    pathref = strsubst(pathref, "/", "\");
60end
61assert_checkequal(path, pathref);
62assert_checkequal(fname, ["."  "" "." "." "" ".tmp"]);
63assert_checkequal(ext, emptystr(1,6));
64
65pathfiles = ["/.", "/./", "/./.", "/abc/.", "/abc/./", "/abc/./.tmp"];
66[path, fname, ext] = fileparts(pathfiles);
67pathref = pathconvert(['/','/./','/./','/abc/','/abc/./', '/abc/./'],%t,%t);
68assert_checkequal(path, pathref);
69assert_checkequal(fname, ["." "" "." "." "" ".tmp"]);
70assert_checkequal(ext, emptystr(1,6));
71
72// With relative paths
73pathfiles = ["./abc", "./." "./.abc", "./abc/./def"];
74[path, fname, ext] = fileparts(pathfiles);
75pathref = ['./' './' './' './abc/./'];
76if getos()=="Windows"
77    pathref = strsubst(pathref, "/", "\");
78end
79assert_checkequal(path, pathref);
80assert_checkequal(fname, ["abc"  "." ".abc" "def"]);
81assert_checkequal(ext, emptystr(1,4));
82
83// With the ".." directory
84// -----------------------
85// With absolute paths
86pathfiles = ["c:/..", "c:/abc/..", "c:/abc/../efg", "/..", "/abc/..", "/abc/../efg"];
87
88[path, fname, ext] = fileparts(pathfiles);
89pathref = ['c:/','c:/abc/','c:/abc/../', '/','/abc/','/abc/../'];
90if getos()=="Windows"
91    pathref = strsubst(pathref, "/", "\");
92end
93assert_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
99pathfiles = ["abc/..", "./..", "./../", "abc/../def", "abc/../.."];
100
101[path, fname, ext] = fileparts(pathfiles);
102pathref = pathconvert(['abc/','./','./../','abc/../','abc/../'],%t,%t);
103assert_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');
111assert_checkequal(path, pathconvert(SCI+'/etc/',%t,%t));
112assert_checkequal(fname, 'scilab');
113assert_checkequal(extension, '.start');
114r = fileparts(SCI+'/etc/scilab.start','path');
115assert_checkequal(r, pathconvert(SCI+'/etc/',%t,%f));
116r = fileparts(SCI+'/etc/scilab.start','fname');
117assert_checkequal(r, 'scilab');
118r = fileparts(SCI+'/etc/scilab.start','extension');
119assert_checkequal(r, '.start');
120
121// Filename starting with "."
122// --------------------------
123[path,fname,extension] = fileparts('/tmp/.scilab');
124assert_checkequal(path, pathconvert('/tmp/',%t,%t));
125assert_checkequal(fname, '.scilab');
126assert_checkequal(extension, '');
127r = fileparts('/tmp/.scilab','path');
128assert_checkequal(r, pathconvert('/tmp/',%t,%f));
129r = fileparts('/tmp/.scilab','fname');
130assert_checkequal(r, '.scilab');
131r = fileparts('/tmp/.scilab','extension');
132assert_checkequal(r, '');
133
134// Filename with multiple "."
135// --------------------------
136pathfile = '/tmp/scilab.inc.txt'
137[path,fname,extension] = fileparts(pathfile);
138assert_checkequal(path, pathconvert('/tmp/',%t,%t));
139assert_checkequal(fname, 'scilab.inc');
140assert_checkequal(extension, '.txt');
141r = fileparts(pathfile,'path');
142assert_checkequal(r, pathconvert('/tmp/',%t,%f));
143r = fileparts(pathfile,'fname');
144assert_checkequal(r, 'scilab.inc');
145r = fileparts(pathfile,'extension');
146assert_checkequal(r, '.txt');
147
148// For the empty string
149// --------------------
150[path,fname,extension] = fileparts("");
151assert_checkequal(path, "");
152assert_checkequal(fname, "");
153assert_checkequal(extension, "");
154
155r = fileparts("", 'path');
156assert_checkequal(r, "");
157r = fileparts("", 'fname');
158assert_checkequal(fname, "");
159r = fileparts("", 'extension');
160assert_checkequal(extension, "");
161
162// For a row of strings
163// --------------------
164[path,fname,extension] = fileparts([SCI+'/etc/scilab.start', SCI+'/etc/scilab.start']);
165assert_checkequal(path, [pathconvert(SCI+'/etc/',%t,%t), pathconvert(SCI+'/etc/',%t,%t)]);
166assert_checkequal(fname, ['scilab', 'scilab']);
167assert_checkequal(extension, ['.start', '.start']);
168
169r = fileparts([SCI+'/etc/scilab.start', SCI+'/etc/scilab.start'],'path');
170assert_checkequal(r, [pathconvert(SCI+'/etc/',%t,%f), pathconvert(SCI+'/etc/',%t,%f)]);
171r = fileparts([SCI+'/etc/scilab.start', SCI+'/etc/scilab.start'],'fname');
172assert_checkequal(r, ['scilab', 'scilab']);
173r = fileparts([SCI+'/etc/scilab.start', SCI+'/etc/scilab.start'],'extension');
174assert_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']);
179assert_checkequal(path, [pathconvert(SCI+'/etc/',%t,%t); pathconvert(SCI+'/etc/',%t,%t)]);
180assert_checkequal(fname, ['scilab'; 'scilab']);
181assert_checkequal(extension, ['.start'; '.start']);
182
183r = fileparts([SCI+'/etc/scilab.start'; SCI+'/etc/scilab.start'],'path');
184assert_checkequal(r, [pathconvert(SCI+'/etc/',%t,%f); pathconvert(SCI+'/etc/',%t,%f)]);
185r = fileparts([SCI+'/etc/scilab.start'; SCI+'/etc/scilab.start'],'fname');
186assert_checkequal(r, ['scilab'; 'scilab']);
187r = fileparts([SCI+'/etc/scilab.start'; SCI+'/etc/scilab.start'],'extension');
188assert_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']);
193assert_checkequal(path, [pathconvert(SCI+'/etc/',%t,%t), pathconvert(SCI+'/etc/',%t,%t)]);
194assert_checkequal(fname, ['scilab', 'scilab']);
195assert_checkequal(extension, ['.start', ""]);
196
197r = fileparts([SCI+'/etc/scilab.start', SCI+'/etc/scilab'],'path');
198assert_checkequal(r, [pathconvert(SCI+'/etc/',%t,%f), pathconvert(SCI+'/etc/',%t,%f)]);
199r = fileparts([SCI+'/etc/scilab.start', SCI+'/etc/scilab'],'fname');
200assert_checkequal(r, ['scilab', 'scilab']);
201r = fileparts([SCI+'/etc/scilab.start', SCI+'/etc/scilab'],'extension');
202assert_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']);
207assert_checkequal(path, [pathconvert(SCI+'/etc/',%t,%t), ""]);
208assert_checkequal(fname, ['scilab', 'scilab']);
209assert_checkequal(extension, ['.start', ".start"]);
210
211r = fileparts([SCI+'/etc/scilab.start', 'scilab.start'], 'path');
212assert_checkequal(r, [pathconvert(SCI+'/etc/',%t,%f), ""]);
213r = fileparts([SCI+'/etc/scilab.start', 'scilab.start'], 'fname');
214assert_checkequal(r, ['scilab', 'scilab']);
215r = fileparts([SCI+'/etc/scilab.start', 'scilab.start'], 'extension');
216assert_checkequal(r, ['.start', '.start']);
217