diff --git a/app/src/main/java/com/owncloud/android/utils/FilesSyncHelper.java b/app/src/main/java/com/owncloud/android/utils/FilesSyncHelper.java index 9a2581bb90ab..c7e8ae3f313b 100644 --- a/app/src/main/java/com/owncloud/android/utils/FilesSyncHelper.java +++ b/app/src/main/java/com/owncloud/android/utils/FilesSyncHelper.java @@ -72,8 +72,8 @@ public static void walkFileTreeRandomly(Path start, FileVisitor vi FileVisitResult preVisitDirectoryResult = visitor.preVisitDirectory(start, (BasicFileAttributes)null); if (preVisitDirectoryResult == FileVisitResult.CONTINUE) { File[] children = start.toFile().listFiles(); - Collections.shuffle(Arrays.asList(children)); if (children != null) { + Collections.shuffle(Arrays.asList(children)); File[] var5 = children; int var6 = children.length; diff --git a/app/src/test/java/com/owncloud/android/utils/FilesSyncHelperTest.java b/app/src/test/java/com/owncloud/android/utils/FilesSyncHelperTest.java new file mode 100644 index 000000000000..c5f0048e39c5 --- /dev/null +++ b/app/src/test/java/com/owncloud/android/utils/FilesSyncHelperTest.java @@ -0,0 +1,79 @@ +/* + * Nextcloud - Android Client + * + * SPDX-FileCopyrightText: 2024 Benedek Major + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +package com.owncloud.android.utils; + +import org.junit.BeforeClass; +import org.junit.Test; + +import org.lukhnos.nnio.file.FileVisitResult; +import org.lukhnos.nnio.file.Path; +import org.lukhnos.nnio.file.Paths; +import org.lukhnos.nnio.file.SimpleFileVisitor; +import org.lukhnos.nnio.file.attribute.BasicFileAttributes; +import org.mockito.Mock; +import org.mockito.Mockito; + + +import java.io.File; +import java.io.IOException; +import java.io.PrintWriter; +import java.io.StringWriter; +import java.util.Arrays; + +import static com.owncloud.android.utils.FilesSyncHelper.walkFileTreeRandomly; +import static org.junit.Assert.fail; +import static org.mockito.Mockito.mock; + + + +public class FilesSyncHelperTest { + @Mock + private File mockFile; + + @Mock + private Path mockPath; + + @Test + public void testWalkFileTreeNullHandling(){ + mockFile = mock(File.class); + mockPath = mock(Path.class); + Mockito.when(mockFile.isDirectory()).thenReturn(true); + Mockito.when(mockPath.toFile()).thenReturn(mockFile); + Mockito.when(mockFile.listFiles()).thenReturn(null); + Mockito.when(mockFile.canRead()).thenReturn(true); + + SimpleFileVisitor visitor = new SimpleFileVisitor() { + @Override + public FileVisitResult visitFile(Path path, BasicFileAttributes attrs) { + return FileVisitResult.CONTINUE; + } + + @Override + public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) { + return FileVisitResult.CONTINUE; + } + + @Override + public FileVisitResult visitFileFailed(Path file, IOException exc) { + return FileVisitResult.CONTINUE; + } + }; + try{ + walkFileTreeRandomly(mockPath,visitor); + } catch (Exception e){ + StringWriter writer = new StringWriter(); + PrintWriter printWriter = new PrintWriter( writer ); + e.printStackTrace( printWriter ); + printWriter.flush(); + + String stackTrace = writer.toString(); + fail("walkFileTree throws an exception: \n" + stackTrace); + } + } + +} \ No newline at end of file