1 /* 2 * Copyright (C) 2017 The Guava Authors 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.google.common.io; 18 19 import static com.google.common.truth.Truth.assertThat; 20 21 import com.google.common.collect.Iterables; 22 import com.google.errorprone.annotations.CanIgnoreReturnValue; 23 import java.io.File; 24 import java.io.IOException; 25 26 /** 27 * Tests for {@link Files#fileTraverser()}. 28 * 29 * @author Jens Nyman 30 */ 31 32 public class FilesFileTraverserTest extends IoTestCase { 33 34 private File rootDir; 35 36 @Override setUp()37 public void setUp() throws IOException { 38 rootDir = createTempDir(); 39 } 40 testFileTraverser_emptyDirectory()41 public void testFileTraverser_emptyDirectory() throws Exception { 42 assertThat(Files.fileTraverser().breadthFirst(rootDir)).containsExactly(rootDir); 43 } 44 testFileTraverser_nonExistingFile()45 public void testFileTraverser_nonExistingFile() throws Exception { 46 File file = new File(rootDir, "file-that-doesnt-exist"); 47 48 assertThat(Files.fileTraverser().breadthFirst(file)).containsExactly(file); 49 } 50 testFileTraverser_file()51 public void testFileTraverser_file() throws Exception { 52 File file = newFile("some-file"); 53 54 assertThat(Files.fileTraverser().breadthFirst(file)).containsExactly(file); 55 } 56 testFileTraverser_singleFile()57 public void testFileTraverser_singleFile() throws Exception { 58 File file = newFile("some-file"); 59 60 assertThat(Files.fileTraverser().breadthFirst(rootDir)).containsExactly(rootDir, file); 61 } 62 testFileTraverser_singleDirectory()63 public void testFileTraverser_singleDirectory() throws Exception { 64 File file = newDir("some-dir"); 65 66 assertThat(Files.fileTraverser().breadthFirst(rootDir)).containsExactly(rootDir, file); 67 } 68 testFileTraverser_multipleFilesAndDirectories()69 public void testFileTraverser_multipleFilesAndDirectories() throws Exception { 70 File fileA = newFile("file-a"); 71 File fileB = newFile("file-b"); 72 File dir1 = newDir("dir-1"); 73 File dir2 = newDir("dir-2"); 74 75 assertThat(Files.fileTraverser().breadthFirst(rootDir)) 76 .containsExactly(rootDir, fileA, fileB, dir1, dir2); 77 } 78 testFileTraverser_multipleDirectoryLayers_breadthFirstStartsWithTopLayer()79 public void testFileTraverser_multipleDirectoryLayers_breadthFirstStartsWithTopLayer() 80 throws Exception { 81 File fileA = newFile("file-a"); 82 File dir1 = newDir("dir-1"); 83 newFile("dir-1/file-b"); 84 newFile("dir-1/dir-2"); 85 86 assertThat(Iterables.limit(Files.fileTraverser().breadthFirst(rootDir), 3)) 87 .containsExactly(rootDir, fileA, dir1); 88 } 89 testFileTraverser_multipleDirectoryLayers_traversalReturnsAll()90 public void testFileTraverser_multipleDirectoryLayers_traversalReturnsAll() throws Exception { 91 File fileA = newFile("file-a"); 92 File dir1 = newDir("dir-1"); 93 File fileB = newFile("dir-1/file-b"); 94 File dir2 = newFile("dir-1/dir-2"); 95 96 assertThat(Files.fileTraverser().breadthFirst(rootDir)) 97 .containsExactly(rootDir, fileA, fileB, dir1, dir2); 98 } 99 100 @CanIgnoreReturnValue newDir(String name)101 private File newDir(String name) { 102 File file = new File(rootDir, name); 103 file.mkdir(); 104 return file; 105 } 106 107 @CanIgnoreReturnValue newFile(String name)108 private File newFile(String name) throws IOException { 109 File file = new File(rootDir, name); 110 file.createNewFile(); 111 return file; 112 } 113 } 114