blob: 2077cfde05c6138590a80242e50ef7145ff86f90 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.camel.util;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import org.apache.camel.TestSupport;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
public class FileUtilTest extends TestSupport {
@Test
public void testNormalizePath() {
if (FileUtil.isWindows()) {
assertEquals("foo\\bar", FileUtil.normalizePath("foo/bar"));
assertEquals("foo\\bar\\baz", FileUtil.normalizePath("foo/bar\\baz"));
assertEquals("movefile\\sub\\sub2\\.done\\goodday.txt",
FileUtil.normalizePath("movefile/sub/sub2\\.done\\goodday.txt"));
} else {
assertEquals("foo/bar", FileUtil.normalizePath("foo/bar"));
assertEquals("foo/bar/baz", FileUtil.normalizePath("foo/bar\\baz"));
assertEquals("movefile/sub/sub2/.done/goodday.txt",
FileUtil.normalizePath("movefile/sub/sub2\\.done\\goodday.txt"));
}
}
@Test
public void testStripLeadingSeparator() {
assertNull(FileUtil.stripLeadingSeparator(null));
assertEquals("foo", FileUtil.stripLeadingSeparator("foo"));
assertEquals("foo/bar", FileUtil.stripLeadingSeparator("foo/bar"));
assertEquals("foo/", FileUtil.stripLeadingSeparator("foo/"));
assertEquals("foo/bar", FileUtil.stripLeadingSeparator("/foo/bar"));
assertEquals("foo/bar", FileUtil.stripLeadingSeparator("//foo/bar"));
assertEquals("foo/bar", FileUtil.stripLeadingSeparator("///foo/bar"));
}
@Test
public void testHasLeadingSeparator() {
assertFalse(FileUtil.hasLeadingSeparator(null));
assertFalse(FileUtil.hasLeadingSeparator("foo"));
assertFalse(FileUtil.hasLeadingSeparator("foo/bar"));
assertFalse(FileUtil.hasLeadingSeparator("foo/"));
assertTrue(FileUtil.hasLeadingSeparator("/foo/bar"));
assertTrue(FileUtil.hasLeadingSeparator("//foo/bar"));
assertTrue(FileUtil.hasLeadingSeparator("///foo/bar"));
}
@Test
public void testStripFirstLeadingSeparator() {
assertNull(FileUtil.stripFirstLeadingSeparator(null));
assertEquals("foo", FileUtil.stripFirstLeadingSeparator("foo"));
assertEquals("foo/bar", FileUtil.stripFirstLeadingSeparator("foo/bar"));
assertEquals("foo/", FileUtil.stripFirstLeadingSeparator("foo/"));
assertEquals("foo/bar", FileUtil.stripFirstLeadingSeparator("/foo/bar"));
assertEquals("/foo/bar", FileUtil.stripFirstLeadingSeparator("//foo/bar"));
assertEquals("//foo/bar", FileUtil.stripFirstLeadingSeparator("///foo/bar"));
}
@Test
public void testStripTrailingSeparator() {
assertNull(FileUtil.stripTrailingSeparator(null));
assertEquals("foo", FileUtil.stripTrailingSeparator("foo"));
assertEquals("foo/bar", FileUtil.stripTrailingSeparator("foo/bar"));
assertEquals("foo", FileUtil.stripTrailingSeparator("foo/"));
assertEquals("foo/bar", FileUtil.stripTrailingSeparator("foo/bar/"));
assertEquals("/foo/bar", FileUtil.stripTrailingSeparator("/foo/bar"));
assertEquals("/foo/bar", FileUtil.stripTrailingSeparator("/foo/bar/"));
assertEquals("/foo/bar", FileUtil.stripTrailingSeparator("/foo/bar//"));
assertEquals("/foo/bar", FileUtil.stripTrailingSeparator("/foo/bar///"));
assertEquals("/foo", FileUtil.stripTrailingSeparator("/foo"));
assertEquals("/foo", FileUtil.stripTrailingSeparator("/foo/"));
assertEquals("/", FileUtil.stripTrailingSeparator("/"));
assertEquals("//", FileUtil.stripTrailingSeparator("//"));
}
@Test
public void testStripPath() {
assertNull(FileUtil.stripPath(null));
assertEquals("", FileUtil.stripPath("/"));
assertEquals("foo.xml", FileUtil.stripPath("/foo.xml"));
assertEquals("foo", FileUtil.stripPath("foo"));
assertEquals("bar", FileUtil.stripPath("foo/bar"));
assertEquals("bar", FileUtil.stripPath("/foo/bar"));
}
@Test
public void testStripPathWithMixedSeparators() {
assertNull(FileUtil.stripPath(null));
assertEquals("", FileUtil.stripPath("/"));
assertEquals("foo.xml", FileUtil.stripPath("/foo.xml"));
assertEquals("foo", FileUtil.stripPath("foo"));
assertEquals("baz", FileUtil.stripPath("foo/bar\\baz"));
assertEquals("bar", FileUtil.stripPath("\\foo\\bar"));
assertEquals("baz", FileUtil.stripPath("/foo\\bar/baz"));
}
@Test
public void testStripExt() {
assertNull(FileUtil.stripExt(null));
assertEquals("foo", FileUtil.stripExt("foo"));
assertEquals("foo", FileUtil.stripExt("foo.xml"));
assertEquals("/foo/bar", FileUtil.stripExt("/foo/bar.xml"));
}
@Test
public void testOnlyExt() {
assertNull(FileUtil.onlyExt(null));
assertNull(FileUtil.onlyExt("foo"));
assertEquals("xml", FileUtil.onlyExt("foo.xml"));
assertEquals("xml", FileUtil.onlyExt("/foo/bar.xml"));
assertEquals("tar.gz", FileUtil.onlyExt("/foo/bigfile.tar.gz"));
assertEquals("tar.gz", FileUtil.onlyExt("/foo.bar/bigfile.tar.gz"));
}
@Test
public void testOnlyPath() {
assertNull(FileUtil.onlyPath(null));
assertNull(FileUtil.onlyPath("foo"));
assertNull(FileUtil.onlyPath("foo.xml"));
assertEquals("foo", FileUtil.onlyPath("foo/bar.xml"));
assertEquals("/foo", FileUtil.onlyPath("/foo/bar.xml"));
assertEquals("/foo/bar", FileUtil.onlyPath("/foo/bar/baz.xml"));
assertEquals("/", FileUtil.onlyPath("/foo.xml"));
assertEquals("/bar", FileUtil.onlyPath("/bar/foo.xml"));
}
@Test
public void testOnlyPathWithMixedSeparators() {
assertNull(FileUtil.onlyPath(null));
assertNull(FileUtil.onlyPath("foo"));
assertNull(FileUtil.onlyPath("foo.xml"));
assertEquals("foo", FileUtil.onlyPath("foo/bar.xml"));
assertEquals("/foo", FileUtil.onlyPath("/foo\\bar.xml"));
assertEquals("\\foo\\bar", FileUtil.onlyPath("\\foo\\bar/baz.xml"));
assertEquals("\\", FileUtil.onlyPath("\\foo.xml"));
assertEquals("/bar", FileUtil.onlyPath("/bar\\foo.xml"));
}
@Test
public void testOnlyName() {
assertNull(FileUtil.onlyName(null));
assertEquals("foo", FileUtil.onlyName("foo"));
assertEquals("foo", FileUtil.onlyName("foo.xml"));
assertEquals("bar", FileUtil.onlyName("foo/bar.xml"));
assertEquals("bar", FileUtil.onlyName("/foo/bar.xml"));
assertEquals("baz", FileUtil.onlyName("/foo/bar/baz.xml"));
assertEquals("foo", FileUtil.onlyName("/foo.xml"));
assertEquals("foo", FileUtil.onlyName("/bar/foo.xml"));
}
@Test
public void testCompactPath() {
assertNull(FileUtil.compactPath(null));
if (FileUtil.isWindows()) {
assertEquals("..\\foo", FileUtil.compactPath("..\\foo"));
assertEquals("..\\..\\foo", FileUtil.compactPath("..\\..\\foo"));
assertEquals("..\\..\\foo\\bar", FileUtil.compactPath("..\\..\\foo\\bar"));
assertEquals("..\\..\\foo", FileUtil.compactPath("..\\..\\foo\\bar\\.."));
assertEquals("foo", FileUtil.compactPath("foo"));
assertEquals("bar", FileUtil.compactPath("foo\\..\\bar"));
assertEquals("bar\\baz", FileUtil.compactPath("foo\\..\\bar\\baz"));
assertEquals("foo\\baz", FileUtil.compactPath("foo\\bar\\..\\baz"));
assertEquals("baz", FileUtil.compactPath("foo\\bar\\..\\..\\baz"));
assertEquals("..\\baz", FileUtil.compactPath("foo\\bar\\..\\..\\..\\baz"));
assertEquals("..\\foo\\bar", FileUtil.compactPath("..\\foo\\bar"));
assertEquals("foo\\bar\\baz", FileUtil.compactPath("foo\\bar\\.\\baz"));
assertEquals("foo\\bar\\baz", FileUtil.compactPath("foo\\bar\\\\baz"));
assertEquals("\\foo\\bar\\baz", FileUtil.compactPath("\\foo\\bar\\baz"));
// Test that multiple back-slashes at the beginning are preserved,
// this is necessary for network UNC paths.
assertEquals("\\\\foo\\bar\\baz", FileUtil.compactPath("\\\\foo\\bar\\baz"));
assertEquals("\\", FileUtil.compactPath("\\"));
assertEquals("\\", FileUtil.compactPath("/"));
assertEquals("/", FileUtil.compactPath("\\", '/'));
assertEquals("/", FileUtil.compactPath("/", '/'));
} else {
assertEquals("../foo", FileUtil.compactPath("../foo"));
assertEquals("../../foo", FileUtil.compactPath("../../foo"));
assertEquals("../../foo/bar", FileUtil.compactPath("../../foo/bar"));
assertEquals("../../foo", FileUtil.compactPath("../../foo/bar/.."));
assertEquals("foo", FileUtil.compactPath("foo"));
assertEquals("bar", FileUtil.compactPath("foo/../bar"));
assertEquals("bar/baz", FileUtil.compactPath("foo/../bar/baz"));
assertEquals("foo/baz", FileUtil.compactPath("foo/bar/../baz"));
assertEquals("baz", FileUtil.compactPath("foo/bar/../../baz"));
assertEquals("../baz", FileUtil.compactPath("foo/bar/../../../baz"));
assertEquals("../foo/bar", FileUtil.compactPath("../foo/bar"));
assertEquals("foo/bar/baz", FileUtil.compactPath("foo/bar/./baz"));
assertEquals("foo/bar/baz", FileUtil.compactPath("foo/bar//baz"));
assertEquals("/foo/bar/baz", FileUtil.compactPath("/foo/bar/baz"));
// Do not preserve multiple slashes at the beginning if not on
// Windows.
assertEquals("/foo/bar/baz", FileUtil.compactPath("//foo/bar/baz"));
assertEquals("/", FileUtil.compactPath("/"));
assertEquals("/", FileUtil.compactPath("\\"));
assertEquals("/", FileUtil.compactPath("/", '/'));
assertEquals("/", FileUtil.compactPath("\\", '/'));
}
}
@Test
public void testCompactWindowsStylePath() {
String path = "E:\\workspace\\foo\\bar\\some-thing\\.\\target\\processes\\2";
String expected = "E:\\workspace\\foo\\bar\\some-thing\\target\\processes\\2";
assertEquals(expected, FileUtil.compactPath(path, '\\'));
}
@Test
public void testCompactPathSeparator() {
assertNull(FileUtil.compactPath(null, '\''));
assertEquals("..\\foo", FileUtil.compactPath("..\\foo", '\\'));
assertEquals("../foo", FileUtil.compactPath("../foo", '/'));
assertEquals("../foo/bar", FileUtil.compactPath("../foo\\bar", '/'));
assertEquals("..\\foo\\bar", FileUtil.compactPath("../foo\\bar", '\\'));
}
@Test
public void testDefaultTempFileSuffixAndPrefix() throws Exception {
File tmp = FileUtil.createTempFile("tmp-", ".tmp", testDirectory("tmp").toFile());
assertNotNull(tmp);
assertTrue(tmp.isFile(), "Should be a file");
}
@Test
public void testDefaultTempFile() throws Exception {
File tmp = FileUtil.createTempFile(null, null, testDirectory("tmp").toFile());
assertNotNull(tmp);
assertTrue(tmp.isFile(), "Should be a file");
}
@Test
public void testDefaultTempFileParent() throws Exception {
File tmp = FileUtil.createTempFile(null, null, testDirectory().toFile());
assertNotNull(tmp);
assertTrue(tmp.isFile(), "Should be a file");
}
@Test
public void testCreateNewFile() throws Exception {
File file = testFile("foo.txt").toFile();
if (file.exists()) {
FileUtil.deleteFile(file);
}
assertFalse(file.exists(), "File should not exist " + file);
assertTrue(FileUtil.createNewFile(file), "A new file should be created " + file);
}
@Test
public void testRenameUsingDelete() throws Exception {
File file = testFile("foo.txt").toFile();
if (!file.exists()) {
FileUtil.createNewFile(file);
}
File target = testFile("bar.txt").toFile();
FileUtil.renameFileUsingCopy(file, target);
assertTrue(target.exists(), "File not copied");
assertFalse(file.exists(), "File not deleted");
}
@Test
public void testCompactHttpPath() {
String in = "http://foo.com/apps/func/schemas/part/myap/dummy-schema.xsd";
String out = FileUtil.compactPath(in, "/");
assertEquals(in, out);
}
@Test
public void testCompactHttpsPath() {
String in = "https://foo.com/apps/func/schemas/part/myap/dummy-schema.xsd";
String out = FileUtil.compactPath(in, "/");
assertEquals(in, out);
}
@Test
public void testCompactFilePath() {
// should preserve the file: scheme prefix
if (FileUtil.isWindows()) {
assertEquals("file:..\\foo", FileUtil.compactPath("file:..\\foo"));
assertEquals("file:..\\..\\foo", FileUtil.compactPath("file:..\\..\\foo"));
assertEquals("file:..\\..\\foo\\bar", FileUtil.compactPath("file:..\\..\\foo\\bar"));
assertEquals("file:..\\..\\foo", FileUtil.compactPath("file:..\\..\\foo\\bar\\.."));
assertEquals("file:foo", FileUtil.compactPath("file:foo"));
assertEquals("file:bar", FileUtil.compactPath("file:foo\\..\\bar"));
assertEquals("file:bar\\baz", FileUtil.compactPath("file:foo\\..\\bar\\baz"));
assertEquals("file:foo\\baz", FileUtil.compactPath("file:foo\\bar\\..\\baz"));
assertEquals("file:baz", FileUtil.compactPath("file:foo\\bar\\..\\..\\baz"));
assertEquals("file:..\\baz", FileUtil.compactPath("file:foo\\bar\\..\\..\\..\\baz"));
assertEquals("file:..\\foo\\bar", FileUtil.compactPath("file:..\\foo\\bar"));
assertEquals("file:foo\\bar\\baz", FileUtil.compactPath("file:foo\\bar\\.\\baz"));
assertEquals("file:foo\\bar\\baz", FileUtil.compactPath("file:foo\\bar\\\\baz"));
assertEquals("file:\\foo\\bar\\baz", FileUtil.compactPath("file:\\foo\\bar\\baz"));
} else {
assertEquals("file:../foo", FileUtil.compactPath("file:../foo"));
assertEquals("file:../../foo", FileUtil.compactPath("file:../../foo"));
assertEquals("file:../../foo/bar", FileUtil.compactPath("file:../../foo/bar"));
assertEquals("file:../../foo", FileUtil.compactPath("file:../../foo/bar/.."));
assertEquals("file:foo", FileUtil.compactPath("file:foo"));
assertEquals("file:bar", FileUtil.compactPath("file:foo/../bar"));
assertEquals("file:bar/baz", FileUtil.compactPath("file:foo/../bar/baz"));
assertEquals("file:foo/baz", FileUtil.compactPath("file:foo/bar/../baz"));
assertEquals("file:baz", FileUtil.compactPath("file:foo/bar/../../baz"));
assertEquals("file:../baz", FileUtil.compactPath("file:foo/bar/../../../baz"));
assertEquals("file:../foo/bar", FileUtil.compactPath("file:../foo/bar"));
assertEquals("file:foo/bar/baz", FileUtil.compactPath("file:foo/bar/./baz"));
assertEquals("file:foo/bar/baz", FileUtil.compactPath("file:foo/bar//baz"));
assertEquals("file:/foo/bar/baz", FileUtil.compactPath("file:/foo/bar/baz"));
}
}
@BeforeEach
void createTestDir() throws IOException {
Files.createDirectories(testDirectory());
}
}