1: %% 2: %% %CopyrightBegin% 3: %% 4: %% Copyright Ericsson AB 1997-2012. All Rights Reserved. 5: %% 6: %% The contents of this file are subject to the Erlang Public License, 7: %% Version 1.1, (the "License"); you may not use this file except in 8: %% compliance with the License. You should have received a copy of the 9: %% Erlang Public License along with this software. If not, it can be 10: %% retrieved online at http://www.erlang.org/. 11: %% 12: %% Software distributed under the License is distributed on an "AS IS" 13: %% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See 14: %% the License for the specific language governing rights and limitations 15: %% under the License. 16: %% 17: %% %CopyrightEnd% 18: %% 19: -module(filename_SUITE). 20: -export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1, 21: init_per_group/2,end_per_group/2]). 22: -export([absname/1, absname_2/1, 23: basename_1/1, basename_2/1, 24: dirname/1, extension/1, join/1, t_nativename/1]). 25: -export([pathtype/1,rootname/1,split/1,find_src/1]). 26: -export([absname_bin/1, absname_bin_2/1, 27: basename_bin_1/1, basename_bin_2/1, 28: dirname_bin/1, extension_bin/1, join_bin/1, t_nativename_bin/1]). 29: -export([pathtype_bin/1,rootname_bin/1,split_bin/1]). 30: 31: -include_lib("test_server/include/test_server.hrl"). 32: 33: suite() -> [{ct_hooks,[ts_install_cth]}]. 34: 35: all() -> 36: [absname, absname_2, basename_1, basename_2, dirname, 37: extension, 38: join, pathtype, rootname, split, t_nativename, find_src, 39: absname_bin, absname_bin_2, basename_bin_1, basename_bin_2, dirname_bin, 40: extension_bin, 41: join_bin, pathtype_bin, rootname_bin, split_bin, t_nativename_bin]. 42: 43: groups() -> 44: []. 45: 46: init_per_suite(Config) -> 47: Config. 48: 49: end_per_suite(_Config) -> 50: ok. 51: 52: init_per_group(_GroupName, Config) -> 53: Config. 54: 55: end_per_group(_GroupName, Config) -> 56: Config. 57: 58: 59: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 60: 61: absname(Config) when is_list(Config) -> 62: case os:type() of 63: {win32, _} -> 64: ?line [Drive|_] = ?config(priv_dir, Config), 65: ?line Temp = filename:join([Drive|":/"], "temp"), 66: ?line case file:make_dir(Temp) of 67: ok -> ok; 68: {error,eexist} -> ok 69: end, 70: ?line {ok,Cwd} = file:get_cwd(), 71: ?line ok = file:set_cwd(Temp), 72: ?line [Drive|":/temp/foo"] = filename:absname(foo), 73: ?line [Drive|":/temp/foo"] = filename:absname("foo"), 74: ?line [Drive|":/temp/../ebin"] = filename:absname("../ebin"), 75: ?line [Drive|":/erlang"] = filename:absname("/erlang"), 76: ?line [Drive|":/erlang/src"] = filename:absname("/erlang/src"), 77: ?line [Drive|":/erlang/src"] = filename:absname("\\erlang\\src"), 78: ?line [Drive|":/temp/erlang"] = filename:absname([Drive|":erlang"]), 79: ?line [Drive|":/temp/erlang/src"] = 80: filename:absname([Drive|":erlang/src"]), 81: ?line [Drive|":/temp/erlang/src"] = 82: filename:absname([Drive|":erlang\\src\\"]), 83: ?line "a:/erlang" = filename:absname("a:erlang"), 84: 85: ?line file:set_cwd([Drive|":/"]), 86: ?line [Drive|":/foo"] = filename:absname(foo), 87: ?line [Drive|":/foo"] = filename:absname("foo"), 88: ?line [Drive|":/../ebin"] = filename:absname("../ebin"), 89: ?line [Drive|":/erlang"] = filename:absname("/erlang"), 90: ?line [Drive|":/erlang/src"] = filename:absname("/erlang/src"), 91: ?line [Drive|":/erlang/src"] = filename:absname(["/erlang",'/src']), 92: ?line [Drive|":/erlang/src"] = filename:absname("\\erlang\\\\src"), 93: ?line [Drive|":/erlang"] = filename:absname([Drive|":erlang"]), 94: ?line [Drive|":/erlang/src"] = filename:absname([Drive|":erlang/src"]), 95: ?line "a:/erlang" = filename:absname("a:erlang"), 96: 97: ?line file:set_cwd(Cwd), 98: ok; 99: {unix, _} -> 100: ?line ok = file:set_cwd("/usr"), 101: ?line "/usr/foo" = filename:absname(foo), 102: ?line "/usr/foo" = filename:absname("foo"), 103: ?line "/usr/../ebin" = filename:absname("../ebin"), 104: 105: ?line file:set_cwd("/"), 106: ?line "/foo" = filename:absname(foo), 107: ?line "/foo" = filename:absname("foo"), 108: ?line "/../ebin" = filename:absname("../ebin"), 109: ?line "/erlang" = filename:absname("/erlang"), 110: ?line "/erlang/src" = filename:absname("/erlang/src"), 111: ?line "/erlang/src" = filename:absname(["/erl",'ang/s',"rc"]), 112: ?line "/erlang/src" = filename:absname(["/erl",'a','ng',"/",'s',"rc"]), 113: ?line "/erlang/src" = filename:absname("/erlang///src"), 114: ?line "/file_sorter.erl" = filename:absname([file_sorter|'.erl']), 115: ok 116: end. 117: 118: 119: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 120: 121: absname_2(Config) when is_list(Config) -> 122: case os:type() of 123: {win32, _} -> 124: ?line [Drive|_] = ?config(priv_dir, Config), 125: ?line [Drive|":/temp/foo"] = filename:absname(foo, [Drive|":/temp"]), 126: ?line [Drive|":/temp/foo"] = filename:absname("foo", [Drive|":/temp"]), 127: ?line [Drive|":/temp/../ebin"] = filename:absname("../ebin", 128: [Drive|":/temp"]), 129: ?line [Drive|":/erlang"] = filename:absname("/erlang", [Drive|":/temp"]), 130: ?line [Drive|":/erlang/src"] = filename:absname("/erlang/src", 131: [Drive|":/temp"]), 132: ?line [Drive|":/erlang/src"] = filename:absname("\\erlang\\src", 133: [Drive|":/temp"]), 134: ?line [Drive|":/temp/erlang"] = filename:absname([Drive|":erlang"], 135: [Drive|":/temp"]), 136: ?line [Drive|":/temp/erlang/src"] = filename:absname([Drive|":erlang/src"], 137: [Drive|":/temp"]), 138: ?line [Drive|":/temp/erlang/src"] = 139: filename:absname([Drive|":erlang\\src\\"], [Drive|":/temp"]), 140: ?line "a:/erlang" = filename:absname("a:erlang", [Drive|":/temp"]), 141: 142: ?line file:set_cwd([Drive|":/"]), 143: ?line [Drive|":/foo"] = filename:absname(foo, [Drive|":/"]), 144: ?line [Drive|":/foo"] = filename:absname("foo", [Drive|":/"]), 145: ?line [Drive|":/../ebin"] = filename:absname("../ebin", [Drive|":/"]), 146: ?line [Drive|":/erlang"] = filename:absname("/erlang", [Drive|":/"]), 147: ?line [Drive|":/erlang/src"] = filename:absname("/erlang/src", 148: [Drive|":/"]), 149: ?line [Drive|":/erlang/src"] = filename:absname("\\erlang\\\\src", 150: [Drive|":/"]), 151: ?line [Drive|":/erlang"] = filename:absname([Drive|":erlang"], 152: [Drive|":/"]), 153: ?line [Drive|":/erlang/src"] = filename:absname([Drive|":erlang/src"], 154: [Drive|":/"]), 155: ?line "a:/erlang" = filename:absname("a:erlang", [Drive|":/"]), 156: 157: ok; 158: {unix, _} -> 159: ?line "/usr/foo" = filename:absname(foo, "/usr"), 160: ?line "/usr/foo" = filename:absname("foo", "/usr"), 161: ?line "/usr/../ebin" = filename:absname("../ebin", "/usr"), 162: 163: ?line "/foo" = filename:absname(foo, "/"), 164: ?line "/foo" = filename:absname("foo", "/"), 165: ?line "/../ebin" = filename:absname("../ebin", "/"), 166: ?line "/erlang" = filename:absname("/erlang", "/"), 167: ?line "/erlang/src" = filename:absname("/erlang/src", "/"), 168: ?line "/erlang/src" = filename:absname("/erlang///src", "/"), 169: ok 170: end. 171: 172: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 173: 174: basename_1(Config) when is_list(Config) -> 175: ?line Dog = test_server:timetrap(test_server:seconds(10)), 176: ?line "." = filename:basename("."), 177: ?line "foo" = filename:basename("foo"), 178: ?line "foo" = filename:basename("/usr/foo"), 179: ?line "foo.erl" = filename:basename("A:usr/foo.erl"), 180: ?line "foo" = filename:basename('/usr/foo'), 181: ?line "foo" = filename:basename(["/usr","/","f","o","o"]), 182: ?line "foo" = filename:basename(["/usr/",foo]), 183: ?line "foo" = filename:basename(["/usr/f",oo]), 184: ?line "foo" = filename:basename(["usr/", "foo"]), 185: ?line "foo" = filename:basename(["usr/"|foo]), 186: ?line "foo" = filename:basename(["usr/foo/"]), 187: ?line case os:type() of 188: {win32, _} -> 189: ?line "foo" = filename:basename(["usr\\foo\\"]), 190: ?line "foo" = filename:basename("A:\\usr\\foo"), 191: ?line "foo" = filename:basename("A:foo"); 192: {unix, _} -> 193: ?line "strange\\but\\true" = 194: filename:basename("strange\\but\\true") 195: end, 196: ?line test_server:timetrap_cancel(Dog), 197: ok. 198: 199: basename_2(Config) when is_list(Config) -> 200: ?line Dog = test_server:timetrap(test_server:seconds(10)), 201: ?line "." = filename:basename(".", ".erl"), 202: ?line "foo" = filename:basename("foo.erl", ".erl"), 203: ?line "foo" = filename:basename('foo.erl', ".erl"), 204: ?line "foo" = filename:basename("foo.erl", '.erl'), 205: ?line "foo" = filename:basename(["/usr","/","f","oo"], ".erl"), 206: ?line "foo.erl" = filename:basename("/usr/foo.erl", ".hrl"), 207: ?line "foo.erl" = filename:basename("/usr.hrl/foo.erl", ".hrl"), 208: ?line "foo" = filename:basename("/usr.hrl/foo", ".hrl"), 209: ?line "foo" = filename:basename("usr/foo/", ".erl"), 210: ?line "foo.erl" = filename:basename("usr/foo.erl/", ".erl"), 211: ?line "foo.erl" = filename:basename("usr/foo.erl/", '.erl'), 212: ?line "foo" = filename:basename(["/usr",'/','f','oo'], ".erl"), 213: ?line "foo.erl" = filename:basename(["usr/foo.e",'rl/'], ".erl"), 214: ?line case os:type() of 215: {win32, _} -> 216: ?line "foo" = filename:basename("A:foo", ".erl"), 217: ?line "foo.erl" = filename:basename("a:\\usr\\foo.erl", 218: ".hrl"), 219: ?line "foo.erl" = filename:basename("c:\\usr.hrl\\foo.erl", 220: ".hrl"), 221: ?line "foo" = filename:basename("A:\\usr\\foo", ".hrl"); 222: {unix, _} -> 223: ?line "strange\\but\\true" = 224: filename:basename("strange\\but\\true.erl", ".erl"), 225: ?line "strange\\but\\true" = 226: filename:basename("strange\\but\\true", ".erl") 227: end, 228: ?line test_server:timetrap_cancel(Dog), 229: ok. 230: 231: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 232: 233: dirname(Config) when is_list(Config) -> 234: case os:type() of 235: {win32,_} -> 236: "A:/usr" = filename:dirname("A:/usr/foo.erl"), 237: "A:usr" = filename:dirname("A:usr/foo.erl"), 238: "/usr" = filename:dirname("\\usr\\foo.erl"), 239: "/" = filename:dirname("\\usr"), 240: "A:" = filename:dirname("A:"); 241: _ -> true 242: end, 243: "usr" = filename:dirname("usr///foo.erl"), 244: "." = filename:dirname("foo.erl"), 245: "." = filename:dirname("."), 246: "usr" = filename:dirname('usr/foo.erl'), 247: "usr" = filename:dirname(['usr','/foo.erl']), 248: "usr" = filename:dirname(['us','r/foo.erl']), 249: "usr" = filename:dirname(['usr/','/foo.erl']), 250: "usr" = filename:dirname(['usr/','foo.erl']), 251: "usr" = filename:dirname(['usr/'|'foo.erl']), 252: "usr" = filename:dirname(['usr/f','oo.erl']), 253: "/" = filename:dirname("/"), 254: "/" = filename:dirname("/usr"), 255: ok. 256: 257: 258: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 259: 260: extension(Config) when is_list(Config) -> 261: ?line ".erl" = filename:extension("A:/usr/foo.erl"), 262: ?line ".erl" = filename:extension("A:/usr/foo.nisse.erl"), 263: ?line ".erl" = filename:extension(["A:/usr/", 'foo.ni', "sse.erl"]), 264: ?line ".erl" = filename:extension(["A:/usr/", 'foo.ni', "sse.e", 'rl']), 265: ?line ".erl" = filename:extension(["A:/usr/", 'foo.ni', "sse.e"|'rl']), 266: ?line ".erl" = filename:extension("A:/usr.bar/foo.nisse.erl"), 267: ?line "" = filename:extension("A:/usr.bar/foo"), 268: ?line "" = filename:extension("A:/usr/foo"), 269: ?line case os:type() of 270: {win32, _} -> 271: ?line "" = filename:extension("A:\\usr\\foo"), 272: ?line ".erl" = 273: filename:extension("A:/usr.bar/foo.nisse.erl"), 274: ?line "" = filename:extension("A:/usr.bar/foo"), 275: ok; 276: _ -> ok 277: end. 278: 279: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 280: 281: join(Config) when is_list(Config) -> 282: ?line "/" = filename:join(["/"]), 283: ?line "/" = filename:join(["//"]), 284: ?line "usr/foo.erl" = filename:join("usr","foo.erl"), 285: ?line "/src/foo.erl" = filename:join(usr, "/src/foo.erl"), 286: ?line "/src/foo.erl" = filename:join(["/src/",'foo.erl']), 287: ?line "/src/foo.erl" = filename:join(usr, ["/sr", 'c/foo.erl']), 288: ?line "/src/foo.erl" = filename:join("usr", "/src/foo.erl"), 289: 290: %% Make sure that redundant slashes work too. 291: ?line "a/b/c/d/e/f/g" = filename:join(["a//b/c/////d//e/f/g"]), 292: ?line "a/b/c/d/e/f/g" = filename:join(["a//b/c/", "d//e/f/g"]), 293: ?line "a/b/c/d/e/f/g" = filename:join(["a//b/c", "d//e/f/g"]), 294: ?line "/d/e/f/g" = filename:join(["a//b/c", "/d//e/f/g"]), 295: ?line "/d/e/f/g" = filename:join(["a//b/c", "//d//e/f/g"]), 296: 297: ?line "foo/bar" = filename:join([$f,$o,$o,$/,[]], "bar"), 298: 299: ?line case os:type() of 300: {win32, _} -> 301: ?line "d:/" = filename:join(["D:/"]), 302: ?line "d:/" = filename:join(["D:\\"]), 303: ?line "d:/abc" = filename:join(["D:/", "abc"]), 304: ?line "d:abc" = filename:join(["D:", "abc"]), 305: ?line "a/b/c/d/e/f/g" = 306: filename:join(["a//b\\c//\\/\\d/\\e/f\\g"]), 307: ?line "a:usr/foo.erl" = 308: filename:join(["A:","usr","foo.erl"]), 309: ?line "/usr/foo.erl" = 310: filename:join(["A:","/usr","foo.erl"]), 311: ?line "c:usr" = filename:join("A:","C:usr"), 312: ?line "a:usr" = filename:join("A:","usr"), 313: ?line "c:/usr" = filename:join("A:", "C:/usr"), 314: ?line "c:/usr/foo.erl" = 315: filename:join(["A:","C:/usr","foo.erl"]), 316: ?line "c:usr/foo.erl" = 317: filename:join(["A:","C:usr","foo.erl"]), 318: ?line "d:/foo" = filename:join([$D, $:, $/, []], "foo"), 319: ok; 320: {unix, _} -> 321: ok 322: end. 323: 324: pathtype(Config) when is_list(Config) -> 325: ?line relative = filename:pathtype(".."), 326: ?line relative = filename:pathtype("foo"), 327: ?line relative = filename:pathtype("foo/bar"), 328: ?line relative = filename:pathtype('foo/bar'), 329: ?line relative = filename:pathtype(['f','oo',"/bar"]), 330: case os:type() of 331: {win32, _} -> 332: ?line volumerelative = filename:pathtype("/usr/local/bin"), 333: ?line volumerelative = filename:pathtype("A:usr/local/bin"), 334: ok; 335: {unix, _} -> 336: ?line absolute = filename:pathtype("/"), 337: ?line absolute = filename:pathtype("/usr/local/bin"), 338: ok 339: end. 340: 341: rootname(Config) when is_list(Config) -> 342: ?line "/jam.src/kalle" = filename:rootname("/jam.src/kalle"), 343: ?line "/jam.src/foo" = filename:rootname("/jam.src/foo.erl"), 344: ?line "/jam.src/foo" = filename:rootname(["/ja",'m.sr',"c/foo.erl"]), 345: ?line "/jam.src/foo" = filename:rootname("/jam.src/foo.erl", ".erl"), 346: ?line "/jam.src/foo.jam" = filename:rootname("/jam.src/foo.jam", ".erl"), 347: ?line "/jam.src/foo.jam" = filename:rootname(["/jam.sr",'c/foo.j',"am"],".erl"), 348: ?line "/jam.src/foo.jam" = filename:rootname(["/jam.sr",'c/foo.j'|am],".erl"), 349: ok. 350: 351: split(Config) when is_list(Config) -> 352: ?line ["/","usr","local","bin"] = filename:split("/usr/local/bin"), 353: ?line ["foo","bar"]= filename:split("foo/bar"), 354: ?line ["foo", "bar", "hello"]= filename:split("foo////bar//hello"), 355: ?line ["foo", "bar", "hello"]= filename:split(["foo//",'//bar//h',"ello"]), 356: ?line ["foo", "bar", "hello"]= filename:split(["foo//",'//bar//h'|ello]), 357: case os:type() of 358: {win32,_} -> 359: ?line ["a:/","msdev","include"] = 360: filename:split("a:/msdev/include"), 361: ?line ["a:/","msdev","include"] = 362: filename:split("A:/msdev/include"), 363: ?line ["msdev","include"] = 364: filename:split("msdev\\include"), 365: ?line ["a:/","msdev","include"] = 366: filename:split("a:\\msdev\\include"), 367: ?line ["a:","msdev","include"] = 368: filename:split("a:msdev\\include"), 369: ok; 370: _ -> 371: ok 372: end. 373: 374: t_nativename(Config) when is_list(Config) -> 375: ?line "abcedf" = filename:nativename(abcedf), 376: ?line "abcedf" = filename:nativename(["abc", "edf"]), 377: ?line "abcgluff" = filename:nativename(["abc", gluff]), 378: case os:type() of 379: {win32, _} -> 380: ?line "a:\\temp\\arne.exe" = 381: filename:nativename("A:/temp//arne.exe/"); 382: _ -> 383: ?line "/usr/tmp/arne" = 384: filename:nativename("/usr/tmp//arne/") 385: end. 386: 387: find_src(Config) when is_list(Config) -> 388: ?line {Source,_} = filename:find_src(file), 389: ?line ["file"|_] = lists:reverse(filename:split(Source)), 390: ?line {_,_} = filename:find_src(init, [{".","."}, {"ebin","src"}]), 391: 392: %% Try to find the source for a preloaded module. 393: ?line {error,{preloaded,init}} = filename:find_src(init), 394: 395: %% Make sure that find_src works for a slim BEAM file. 396: OldPath = code:get_path(), 397: try 398: PrivDir = ?config(priv_dir, Config), 399: code:add_patha(PrivDir), 400: Src = "simple", 401: SrcPath = filename:join(PrivDir, Src) ++ ".erl", 402: SrcContents = "-module(simple).\n", 403: ok = file:write_file(SrcPath, SrcContents), 404: {ok,simple} = compile:file(SrcPath, [slim,{outdir,PrivDir}]), 405: BeamPath = filename:join(PrivDir, Src), 406: {BeamPath,[]} = filename:find_src(simple) 407: after 408: code:set_path(OldPath) 409: end, 410: ok. 411: 412: %% 413: %% 414: %% With binaries 415: %% 416: %% 417: 418: absname_bin(Config) when is_list(Config) -> 419: case os:type() of 420: {win32, _} -> 421: ?line [Drive|_] = ?config(priv_dir, Config), 422: ?line Temp = filename:join([Drive|":/"], "temp"), 423: ?line case file:make_dir(Temp) of 424: ok -> ok; 425: {error,eexist} -> ok 426: end, 427: ?line {ok,Cwd} = file:get_cwd(), 428: ?line ok = file:set_cwd(Temp), 429: ?line <<Drive:8,":/temp/foo">> = filename:absname(<<"foo">>), 430: ?line <<Drive:8,":/temp/../ebin">> = filename:absname(<<"../ebin">>), 431: ?line <<Drive:8,":/erlang">> = filename:absname(<<"/erlang">>), 432: ?line <<Drive:8,":/erlang/src">> = filename:absname(<<"/erlang/src">>), 433: ?line <<Drive:8,":/erlang/src">> = filename:absname(<<"\\erlang\\src">>), 434: ?line <<Drive:8,":/temp/erlang">> = filename:absname(<<Drive:8,":erlang">>), 435: ?line <<Drive:8,":/temp/erlang/src">> = 436: filename:absname(<<Drive:8,":erlang/src">>), 437: ?line <<Drive:8,":/temp/erlang/src">> = 438: filename:absname(<<Drive:8,":erlang\\src\\">>), 439: ?line <<"a:/erlang">> = filename:absname(<<"a:erlang">>), 440: 441: ?line file:set_cwd(<<Drive:8,":/">>), 442: ?line <<Drive:8,":/foo">> = filename:absname(<<"foo">>), 443: ?line <<Drive:8,":/../ebin">> = filename:absname(<<"../ebin">>), 444: ?line <<Drive:8,":/erlang">> = filename:absname(<<"/erlang">>), 445: ?line <<Drive:8,":/erlang/src">> = filename:absname(<<"/erlang/src">>), 446: ?line <<Drive:8,":/erlang/src">> = filename:absname(<<"\\erlang\\\\src">>), 447: ?line <<Drive:8,":/erlang">> = filename:absname(<<Drive:8,":erlang">>), 448: ?line <<Drive:8,":/erlang/src">> = filename:absname(<<Drive:8,":erlang/src">>), 449: ?line <<"a:/erlang">> = filename:absname(<<"a:erlang">>), 450: 451: ?line file:set_cwd(Cwd), 452: ok; 453: {unix, _} -> 454: ?line ok = file:set_cwd(<<"/usr">>), 455: ?line <<"/usr/foo">> = filename:absname(<<"foo">>), 456: ?line <<"/usr/../ebin">> = filename:absname(<<"../ebin">>), 457: 458: ?line file:set_cwd(<<"/">>), 459: ?line <<"/foo">> = filename:absname(<<"foo">>), 460: ?line <<"/../ebin">> = filename:absname(<<"../ebin">>), 461: ?line <<"/erlang">> = filename:absname(<<"/erlang">>), 462: ?line <<"/erlang/src">> = filename:absname(<<"/erlang/src">>), 463: ?line <<"/erlang/src">> = filename:absname(<<"/erlang///src">>), 464: ok 465: end. 466: 467: 468: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 469: 470: absname_bin_2(Config) when is_list(Config) -> 471: case os:type() of 472: {win32, _} -> 473: ?line [Drive|_] = ?config(priv_dir, Config), 474: ?line <<Drive:8,":/temp/foo">> = filename:absname(<<"foo">>, <<Drive:8,":/temp">>), 475: ?line <<Drive:8,":/temp/../ebin">> = filename:absname(<<"../ebin">>, 476: <<Drive:8,":/temp">>), 477: ?line <<Drive:8,":/erlang">> = filename:absname(<<"/erlang">>, <<Drive:8,":/temp">>), 478: ?line <<Drive:8,":/erlang/src">> = filename:absname(<<"/erlang/src">>, 479: <<Drive:8,":/temp">>), 480: ?line <<Drive:8,":/erlang/src">> = filename:absname(<<"\\erlang\\src">>, 481: <<Drive:8,":/temp">>), 482: ?line <<Drive:8,":/temp/erlang">> = filename:absname(<<Drive:8,":erlang">>, 483: <<Drive:8,":/temp">>), 484: ?line <<Drive:8,":/temp/erlang/src">> = filename:absname(<<Drive:8,":erlang/src">>, 485: <<Drive:8,":/temp">>), 486: ?line <<Drive:8,":/temp/erlang/src">> = 487: filename:absname(<<Drive:8,":erlang\\src\\">>, <<Drive:8,":/temp">>), 488: ?line <<"a:/erlang">> = filename:absname(<<"a:erlang">>, <<Drive:8,":/temp">>), 489: 490: ?line file:set_cwd(<<Drive:8,":/">>), 491: ?line <<Drive:8,":/foo">> = filename:absname(foo, <<Drive:8,":/">>), 492: ?line <<Drive:8,":/foo">> = filename:absname(<<"foo">>, <<Drive:8,":/">>), 493: ?line <<Drive:8,":/../ebin">> = filename:absname(<<"../ebin">>, <<Drive:8,":/">>), 494: ?line <<Drive:8,":/erlang">> = filename:absname(<<"/erlang">>, <<Drive:8,":/">>), 495: ?line <<Drive:8,":/erlang/src">> = filename:absname(<<"/erlang/src">>, 496: <<Drive:8,":/">>), 497: ?line <<Drive:8,":/erlang/src">> = filename:absname(<<"\\erlang\\\\src">>, 498: <<Drive:8,":/">>), 499: ?line <<Drive:8,":/erlang">> = filename:absname(<<Drive:8,":erlang">>, 500: <<Drive:8,":/">>), 501: ?line <<Drive:8,":/erlang/src">> = filename:absname(<<Drive:8,":erlang/src">>, 502: <<Drive:8,":/">>), 503: ?line <<"a:/erlang">> = filename:absname(<<"a:erlang">>, <<Drive:8,":/">>), 504: 505: ok; 506: {unix, _} -> 507: ?line <<"/usr/foo">> = filename:absname(<<"foo">>, <<"/usr">>), 508: ?line <<"/usr/../ebin">> = filename:absname(<<"../ebin">>, <<"/usr">>), 509: 510: ?line <<"/foo">> = filename:absname(<<"foo">>, <<"/">>), 511: ?line <<"/../ebin">> = filename:absname(<<"../ebin">>, <<"/">>), 512: ?line <<"/erlang">> = filename:absname(<<"/erlang">>, <<"/">>), 513: ?line <<"/erlang/src">> = filename:absname(<<"/erlang/src">>, <<"/">>), 514: ?line <<"/erlang/src">> = filename:absname(<<"/erlang///src">>, <<"/">>), 515: ok 516: end. 517: 518: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 519: 520: basename_bin_1(Config) when is_list(Config) -> 521: ?line Dog = test_server:timetrap(test_server:seconds(10)), 522: ?line <<".">> = filename:basename(<<".">>), 523: ?line <<"foo">> = filename:basename(<<"foo">>), 524: ?line <<"foo">> = filename:basename(<<"/usr/foo">>), 525: ?line <<"foo.erl">> = filename:basename(<<"A:usr/foo.erl">>), 526: ?line case os:type() of 527: {win32, _} -> 528: ?line <<"foo">> = filename:basename(<<"A:\\usr\\foo">>), 529: ?line <<"foo">> = filename:basename(<<"A:foo">>); 530: {unix, _} -> 531: ?line <<"strange\\but\\true">> = 532: filename:basename(<<"strange\\but\\true">>) 533: end, 534: ?line test_server:timetrap_cancel(Dog), 535: ok. 536: 537: basename_bin_2(Config) when is_list(Config) -> 538: ?line Dog = test_server:timetrap(test_server:seconds(10)), 539: ?line <<".">> = filename:basename(<<".">>, <<".erl">>), 540: ?line <<"foo">> = filename:basename(<<"foo.erl">>, <<".erl">>), 541: ?line <<"foo.erl">> = filename:basename(<<"/usr/foo.erl">>, <<".hrl">>), 542: ?line <<"foo.erl">> = filename:basename(<<"/usr.hrl/foo.erl">>, <<".hrl">>), 543: ?line <<"foo">> = filename:basename(<<"/usr.hrl/foo">>, <<".hrl">>), 544: ?line <<"foo">> = filename:basename(<<"usr/foo/">>, <<".erl">>), 545: ?line <<"foo.erl">> = filename:basename(<<"usr/foo.erl/">>, <<".erl">>), 546: ?line case os:type() of 547: {win32, _} -> 548: ?line <<"foo">> = filename:basename(<<"A:foo">>, <<".erl">>), 549: ?line <<"foo.erl">> = filename:basename(<<"a:\\usr\\foo.erl">>, 550: <<".hrl">>), 551: ?line <<"foo.erl">> = filename:basename(<<"c:\\usr.hrl\\foo.erl">>, 552: <<".hrl">>), 553: ?line <<"foo">> = filename:basename(<<"A:\\usr\\foo">>, <<".hrl">>); 554: {unix, _} -> 555: ?line <<"strange\\but\\true">> = 556: filename:basename(<<"strange\\but\\true.erl">>, <<".erl">>), 557: ?line <<"strange\\but\\true">> = 558: filename:basename(<<"strange\\but\\true">>, <<".erl">>) 559: end, 560: ?line test_server:timetrap_cancel(Dog), 561: ok. 562: 563: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 564: 565: dirname_bin(Config) when is_list(Config) -> 566: case os:type() of 567: {win32,_} -> 568: <<"A:/usr">> = filename:dirname(<<"A:/usr/foo.erl">>), 569: <<"A:usr">> = filename:dirname(<<"A:usr/foo.erl">>), 570: <<"/usr">> = filename:dirname(<<"\\usr\\foo.erl">>), 571: <<"/">> = filename:dirname(<<"\\usr">>), 572: <<"A:">> = filename:dirname(<<"A:">>); 573: _ -> true 574: end, 575: <<"usr">> = filename:dirname(<<"usr///foo.erl">>), 576: <<".">> = filename:dirname(<<"foo.erl">>), 577: <<".">> = filename:dirname(<<".">>), 578: <<"/">> = filename:dirname(<<"/">>), 579: <<"/">> = filename:dirname(<<"/usr">>), 580: ok. 581: 582: 583: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 584: 585: extension_bin(Config) when is_list(Config) -> 586: <<".erl">> = filename:extension(<<"A:/usr/foo.erl">>), 587: <<".erl">> = filename:extension(<<"A:/usr/foo.nisse.erl">>), 588: <<".erl">> = filename:extension(<<"A:/usr.bar/foo.nisse.erl">>), 589: <<"">> = filename:extension(<<"A:/usr.bar/foo">>), 590: <<"">> = filename:extension(<<"A:/usr/foo">>), 591: case os:type() of 592: {win32, _} -> 593: ?line <<"">> = filename:extension(<<"A:\\usr\\foo">>), 594: ?line <<".erl">> = 595: filename:extension(<<"A:/usr.bar/foo.nisse.erl">>), 596: ?line <<"">> = filename:extension(<<"A:/usr.bar/foo">>), 597: ok; 598: _ -> ok 599: end. 600: 601: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 602: 603: join_bin(Config) when is_list(Config) -> 604: ?line <<"/">> = filename:join([<<"/">>]), 605: ?line <<"/">> = filename:join([<<"//">>]), 606: ?line <<"usr/foo.erl">> = filename:join(<<"usr">>,<<"foo.erl">>), 607: ?line <<"/src/foo.erl">> = filename:join(usr, <<"/src/foo.erl">>), 608: ?line <<"/src/foo.erl">> = filename:join([<<"/src/">>,'foo.erl']), 609: ?line <<"/src/foo.erl">> = filename:join(<<"usr">>, ["/sr", 'c/foo.erl']), 610: ?line <<"/src/foo.erl">> = filename:join(<<"usr">>, <<"/src/foo.erl">>), 611: 612: %% Make sure that redundant slashes work too. 613: ?line <<"a/b/c/d/e/f/g">> = filename:join([<<"a//b/c/////d//e/f/g">>]), 614: ?line <<"a/b/c/d/e/f/g">> = filename:join([<<"a//b/c/">>, <<"d//e/f/g">>]), 615: ?line <<"a/b/c/d/e/f/g">> = filename:join([<<"a//b/c">>, <<"d//e/f/g">>]), 616: ?line <<"/d/e/f/g">> = filename:join([<<"a//b/c">>, <<"/d//e/f/g">>]), 617: ?line <<"/d/e/f/g">> = filename:join([<<"a//b/c">>, <<"//d//e/f/g">>]), 618: 619: ?line <<"foo/bar">> = filename:join([$f,$o,$o,$/,[]], <<"bar">>), 620: 621: ?line case os:type() of 622: {win32, _} -> 623: ?line <<"d:/">> = filename:join([<<"D:/">>]), 624: ?line <<"d:/">> = filename:join([<<"D:\\">>]), 625: ?line <<"d:/abc">> = filename:join([<<"D:/">>, <<"abc">>]), 626: ?line <<"d:abc">> = filename:join([<<"D:">>, <<"abc">>]), 627: ?line <<"a/b/c/d/e/f/g">> = 628: filename:join([<<"a//b\\c//\\/\\d/\\e/f\\g">>]), 629: ?line <<"a:usr/foo.erl">> = 630: filename:join([<<"A:">>,<<"usr">>,<<"foo.erl">>]), 631: ?line <<"/usr/foo.erl">> = 632: filename:join([<<"A:">>,<<"/usr">>,<<"foo.erl">>]), 633: ?line <<"c:usr">> = filename:join(<<"A:">>,<<"C:usr">>), 634: ?line <<"a:usr">> = filename:join(<<"A:">>,<<"usr">>), 635: ?line <<"c:/usr">> = filename:join(<<"A:">>, <<"C:/usr">>), 636: ?line <<"c:/usr/foo.erl">> = 637: filename:join([<<"A:">>,<<"C:/usr">>,<<"foo.erl">>]), 638: ?line <<"c:usr/foo.erl">> = 639: filename:join([<<"A:">>,<<"C:usr">>,<<"foo.erl">>]), 640: ?line <<"d:/foo">> = filename:join([$D, $:, $/, []], <<"foo">>), 641: ok; 642: {unix, _} -> 643: ok 644: end. 645: 646: pathtype_bin(Config) when is_list(Config) -> 647: relative = filename:pathtype(<<"..">>), 648: relative = filename:pathtype(<<"foo">>), 649: relative = filename:pathtype(<<"foo/bar">>), 650: relative = filename:pathtype('foo/bar'), 651: case os:type() of 652: {win32, _} -> 653: volumerelative = filename:pathtype(<<"/usr/local/bin">>), 654: volumerelative = filename:pathtype(<<"A:usr/local/bin">>), 655: ok; 656: {unix, _} -> 657: absolute = filename:pathtype(<<"/">>), 658: absolute = filename:pathtype(<<"/usr/local/bin">>), 659: ok 660: end. 661: 662: rootname_bin(Config) when is_list(Config) -> 663: <<"/jam.src/kalle">> = filename:rootname(<<"/jam.src/kalle">>), 664: <<"/jam.src/foo">> = filename:rootname(<<"/jam.src/foo.erl">>), 665: <<"/jam.src/foo">> = filename:rootname(<<"/jam.src/foo.erl">>, <<".erl">>), 666: <<"/jam.src/foo.jam">> = filename:rootname(<<"/jam.src/foo.jam">>, <<".erl">>), 667: <<"/jam.src/foo.jam">> = filename:rootname(["/jam.sr",'c/foo.j',"am"],<<".erl">>), 668: <<"/jam.src/foo.jam">> = filename:rootname(["/jam.sr",'c/foo.j'|am],<<".erl">>), 669: ok. 670: 671: split_bin(Config) when is_list(Config) -> 672: [<<"/">>,<<"usr">>,<<"local">>,<<"bin">>] = filename:split(<<"/usr/local/bin">>), 673: [<<"foo">>,<<"bar">>]= filename:split(<<"foo/bar">>), 674: [<<"foo">>, <<"bar">>, <<"hello">>]= filename:split(<<"foo////bar//hello">>), 675: case os:type() of 676: {win32,_} -> 677: [<<"a:/">>,<<"msdev">>,<<"include">>] = 678: filename:split(<<"a:/msdev/include">>), 679: [<<"a:/">>,<<"msdev">>,<<"include">>] = 680: filename:split(<<"A:/msdev/include">>), 681: [<<"msdev">>,<<"include">>] = 682: filename:split(<<"msdev\\include">>), 683: [<<"a:/">>,<<"msdev">>,<<"include">>] = 684: filename:split(<<"a:\\msdev\\include">>), 685: [<<"a:">>,<<"msdev">>,<<"include">>] = 686: filename:split(<<"a:msdev\\include">>), 687: ok; 688: _ -> 689: ok 690: end. 691: 692: t_nativename_bin(Config) when is_list(Config) -> 693: ?line <<"abcedf">> = filename:nativename(<<"abcedf">>), 694: case os:type() of 695: {win32, _} -> 696: ?line <<"a:\\temp\\arne.exe">> = 697: filename:nativename(<<"A:/temp//arne.exe/">>); 698: _ -> 699: ?line <<"/usr/tmp/arne">> = 700: filename:nativename(<<"/usr/tmp//arne/">>) 701: end.