/**
* This file is part of muCommander, http://www.mucommander.com
* Copyright (C) 2002-2016 Maxence Bernard
*
* muCommander is free software; you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* muCommander is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.mucommander.commons.file.protocol.local;
import com.mucommander.commons.file.AuthenticationType;
import com.mucommander.commons.file.Credentials;
import com.mucommander.commons.file.FileURL;
import com.mucommander.commons.file.FileURLTestCase;
import com.mucommander.commons.runtime.OsFamily;
import org.testng.annotations.Test;
import java.net.MalformedURLException;
/**
* A {@link FileURLTestCase} implementation for local file URLs.
*
* @author Maxence Bernard
*/
public class LocalFileURLTest extends FileURLTestCase {
//////////////////
// Extra tests //
/////////////////
/**
* Tests the resolution of local paths (e.g. /path/to/file). This test is system-dependant.
*
* @throws MalformedURLException should not happen
*/
@Test
public void testLocalPathParsing() throws MalformedURLException {
FileURL url;
// For OSes that use backslash as a path separator and have a notion of 'root drives' like Windows (C:\ D:\ ...).
if("\\".equals(getPathSeparator())) {
assert "\\".equals(getPathSeparator());
url = FileURL.getFileURL("C:\\");
assert "file".equals(url.getScheme());
assert "localhost".equals(url.getHost());
assert "/C:\\".equals(url.getPath());
url = FileURL.getFileURL("C:\\dir\\file");
assert "file".equals(url.getScheme());
assert "localhost".equals(url.getHost());
assert "/C:\\dir\\file".equals(url.getPath());
assert "file".equals(url.getFilename());
url = url.getParent();
assert "file".equals(url.getScheme());
assert "localhost".equals(url.getHost());
assert "/C:\\dir\\".equals(url.getPath());
assert "dir".equals(url.getFilename());
url = FileURL.getFileURL("C:\\direc/tory");
assert "file".equals(url.getScheme());
assert "localhost".equals(url.getHost());
assert "/C:\\direc/tory".equals(url.getPath());
assert "direc/tory".equals(url.getFilename());
// Test forward-separated paths which are also supported
url = FileURL.getFileURL("C:/");
assert "file".equals(url.getScheme());
assert "localhost".equals(url.getHost());
assert "/C:\\".equals(url.getPath());
url = FileURL.getFileURL("C:/dir/file");
assert "file".equals(url.getScheme());
assert "localhost".equals(url.getHost());
assert "/C:\\dir\\file".equals(url.getPath());
assert "file".equals(url.getFilename());
url = url.getParent();
assert "file".equals(url.getScheme());
assert "localhost".equals(url.getHost());
assert "/C:\\dir\\".equals(url.getPath());
assert "dir".equals(url.getFilename());
url = FileURL.getFileURL("C:/direc\\tory");
assert "file".equals(url.getScheme());
assert "localhost".equals(url.getHost());
assert "/C:\\direc\\tory".equals(url.getPath());
assert "tory".equals(url.getFilename());
}
// For OSes that use forward slash as a path separator
else {
url = FileURL.getFileURL("/path");
assert "file".equals(url.getScheme());
assert "localhost".equals(url.getHost());
assert "/path".equals(url.getPath());
assert "path".equals(url.getFilename());
url = FileURL.getFileURL("/path/to");
assert "file".equals(url.getScheme());
assert "localhost".equals(url.getHost());
assert "/path/to".equals(url.getPath());
assert "to".equals(url.getFilename());
url = url.getParent();
assert "file".equals(url.getScheme());
assert "localhost".equals(url.getHost());
assert "/path/".equals(url.getPath());
assert "path".equals(url.getFilename());
url = FileURL.getFileURL("/direc\\tory");
assert "file".equals(url.getScheme());
assert "localhost".equals(url.getHost());
assert "/direc\\tory".equals(url.getPath());
assert "direc\\tory".equals(url.getFilename());
}
}
/**
* Tests the resolution of Windows UNC paths (e.g. \\host\\share). This test is system-dependant.
*
* @throws MalformedURLException should not happen
*/
@Test
public void testUNCParsing() throws MalformedURLException {
FileURL url = FileURL.getFileURL("\\\\host\\share");
// UNC path will be transformed into either a 'file' or a 'smb' URL, depending on the current OS
assert (OsFamily.WINDOWS.isCurrent()?"file":"smb").equals(url.getScheme());
assert "host".equals(url.getHost());
assert "/share".equals(url.getPath());
}
////////////////////////////////////
// FileURLTestCase implementation //
////////////////////////////////////
@Override
protected String getScheme() {
return "file";
}
@Override
protected int getDefaultPort() {
return -1;
}
@Override
protected AuthenticationType getAuthenticationType() {
return AuthenticationType.NO_AUTHENTICATION;
}
@Override
protected Credentials getGuestCredentials() {
return null;
}
@Override
protected String getPathSeparator() {
return System.getProperty("file.separator");
}
@Override
protected boolean isQueryParsed() {
return false;
}
}