Skip to content

Commit

Permalink
#107 Extract entries by prefix exclude prefix path
Browse files Browse the repository at this point in the history
  • Loading branch information
oleg-cherednik committed Dec 24, 2024
1 parent edfb5bc commit d851b4a
Show file tree
Hide file tree
Showing 7 changed files with 28 additions and 26 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;

import java.io.IOException;
import java.io.OutputStream;
Expand Down Expand Up @@ -86,10 +87,10 @@ protected Map<String, String> getEntriesByPrefix(Set<String> fileNames) {
if (zipModel.hasEntry(entryName)) {
ZipEntry zipEntry = zipModel.getZipEntryByFileName(entryName);
map.put(entryName, FilenameUtils.getName(zipEntry.getFileName()));
} else {
for (ZipEntry zipEntry : getEntriesByPrefix(entryName + '/'))
map.put(zipEntry.getFileName(), zipEntry.getFileName());
}

for (ZipEntry zipEntry : getEntriesByPrefix(entryName + '/'))
map.put(zipEntry.getFileName(), StringUtils.substring(zipEntry.getFileName(), fileName.length() + 1));
}

return map.isEmpty() ? Collections.emptyMap() : Collections.unmodifiableMap(map);
Expand Down
11 changes: 5 additions & 6 deletions src/test/java/ru/olegcherednik/zip4jvm/UnzipItSolidTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@
import static ru.olegcherednik.zip4jvm.TestDataAssert.fileBentleyAssert;
import static ru.olegcherednik.zip4jvm.TestDataAssert.fileFerrariAssert;
import static ru.olegcherednik.zip4jvm.TestDataAssert.fileSaintPetersburgAssert;
import static ru.olegcherednik.zip4jvm.TestDataAssert.rootAssert;
import static ru.olegcherednik.zip4jvm.assertj.Zip4jvmAssertions.assertThatDirectory;
import static ru.olegcherednik.zip4jvm.assertj.Zip4jvmAssertions.assertThatFile;

Expand Down Expand Up @@ -86,9 +87,7 @@ public void shouldUnzipOneFileIgnorePath() throws IOException {
public void shouldUnzipFolder() throws IOException {
Path dstDir = Zip4jvmSuite.subDirNameAsMethodNameWithTime(rootDir);
UnzipIt.zip(zipDeflateSolid).dstDir(dstDir).extract(dirNameBikes);

assertThatDirectory(dstDir).exists().hasEntries(1).hasDirectories(1);
assertThatDirectory(dstDir.resolve(dirNameBikes)).matches(dirBikesAssert);
assertThatDirectory(dstDir).matches(dirBikesAssert);
}

public void shouldExtractZipArchiveWhenEntryNameWithCustomCharset() throws IOException {
Expand All @@ -108,9 +107,9 @@ public void shouldExtractZipArchiveWhenZipWasCreatedUnderMac() throws IOExceptio

UnzipIt.zip(zip).dstDir(dstDir).extract();

// TODO commented tests
// assertThatDirectory(dstDir).hasDirectories(0).hasFiles(2);
// assertThatDirectory(dstDir).file("fff - 副本.txt").exists();
assertThatDirectory(dstDir).hasDirectories(2).hasRegularFiles(0);
assertThatDirectory(dstDir.resolve("__MACOSX")).exists();
assertThatDirectory(dstDir.resolve("data")).matches(rootAssert);
}

public void shouldExtractZipArchiveWhenUtf8Charset() throws IOException {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -229,4 +229,9 @@ public DirectoryAssert isEmpty() {
return myself;
}

@Override
public String toString() {
return actual.toString();
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -132,8 +132,7 @@ public void shouldUnzipWhenWhenDeflateCompressionAndPkwareEncryption() throws IO
Path dstDir = Zip4jvmSuite.subDirNameAsMethodName(rootDir);

UnzipIt.zip(zipDeflateSolidPkware).dstDir(dstDir).password(password).extract(dirNameCars);
assertThatDirectory(dstDir).exists().hasDirectories(1).hasRegularFiles(0);
assertThatDirectory(dstDir.resolve(dirNameCars)).matches(dirCarsAssert);
assertThatDirectory(dstDir).matches(dirCarsAssert);
}

public void shouldUnzipWhenWhenDeflateCompressionAndAesEncryption() throws IOException {
Expand All @@ -144,8 +143,7 @@ public void shouldUnzipWhenWhenDeflateCompressionAndAesEncryption() throws IOExc
.build();

UnzipIt.zip(zipDeflateSolidAes).dstDir(dstDir).settings(settings).extract(dirNameCars);
assertThatDirectory(dstDir).exists().hasDirectories(1).hasRegularFiles(0);
assertThatDirectory(dstDir.resolve(dirNameCars)).matches(dirCarsAssert);
assertThatDirectory(dstDir).matches(dirCarsAssert);
}

public void shouldUseCompressStoreWhenFileEmpty() throws IOException {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -123,8 +123,7 @@ public void shouldUnzipWhenWhenStoreCompressionAndPkwareEncryption() throws IOEx
Path dstDir = Zip4jvmSuite.subDirNameAsMethodName(rootDir);

UnzipIt.zip(zipStoreSolidPkware).dstDir(dstDir).password(password).extract(dirNameCars);
assertThatDirectory(dstDir).exists().hasDirectories(1).hasRegularFiles(0);
assertThatDirectory(dstDir.resolve(dirNameCars)).matches(dirCarsAssert);
assertThatDirectory(dstDir).matches(dirCarsAssert);
}

public void shouldUnzipWhenWhenStoreCompressionAndAesEncryption() throws IOException {
Expand All @@ -133,8 +132,7 @@ public void shouldUnzipWhenWhenStoreCompressionAndAesEncryption() throws IOExcep
UnzipSettings settings = UnzipSettings.builder().passwordProvider(fileNamePasswordProvider).build();

UnzipIt.zip(zipStoreSolidAes).dstDir(dstDir).settings(settings).extract(dirNameCars);
assertThatDirectory(dstDir).exists().hasDirectories(1).hasRegularFiles(0);
assertThatDirectory(dstDir.resolve(dirNameCars)).matches(dirCarsAssert);
assertThatDirectory(dstDir).matches(dirCarsAssert);
}

}
19 changes: 10 additions & 9 deletions src/test/java/ru/olegcherednik/zip4jvm/engine/UnzipEngineTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -70,29 +70,23 @@ public void shouldUnzipZipFileIntoDestinationFolderWhenDeflateSolid() throws IOE
Path dstDir = Zip4jvmSuite.subDirNameAsMethodName(rootDir);

UnzipIt.zip(zipDeflateSolid).dstDir(dstDir).extract(dirNameCars);

assertThatDirectory(dstDir).exists().hasDirectories(1).hasRegularFiles(0);
assertThatDirectory(dstDir.resolve(dirNameCars)).matches(dirCarsAssert);
assertThatDirectory(dstDir).matches(dirCarsAssert);
}

public void shouldUnzipZipFileIntoDestinationFolderWhenDeflateSolidPkware() throws IOException {
Path dstDir = Zip4jvmSuite.subDirNameAsMethodName(rootDir);
UnzipSettings settings = UnzipSettings.builder().password(password).build();

UnzipIt.zip(zipDeflateSolid).settings(settings).dstDir(dstDir).extract(dirNameCars);

assertThatDirectory(dstDir).exists().hasDirectories(1).hasRegularFiles(0);
assertThatDirectory(dstDir.resolve(dirNameCars)).matches(dirCarsAssert);
assertThatDirectory(dstDir).matches(dirCarsAssert);
}

public void shouldUnzipZipFileIntoDestinationFolderWhenDeflateSolidAes() throws IOException {
Path dstDir = Zip4jvmSuite.subDirNameAsMethodName(rootDir);
UnzipSettings settings = UnzipSettings.builder().passwordProvider(fileNamePasswordProvider).build();

UnzipIt.zip(zipDeflateSolid).settings(settings).dstDir(dstDir).extract(dirNameCars);

assertThatDirectory(dstDir).exists().hasDirectories(1).hasRegularFiles(0);
assertThatDirectory(dstDir.resolve(dirNameCars)).matches(dirCarsAssert);
assertThatDirectory(dstDir).matches(dirCarsAssert);
}

public void shouldCorrectlySetLastTimeStampWhenUnzip() throws IOException, ParseException {
Expand All @@ -113,6 +107,13 @@ public void shouldCorrectlySetLastTimeStampWhenUnzip() throws IOException, Parse
assertThat(convert(Files.getLastModifiedTime(fileFooUnzip).toMillis())).isEqualTo(str);
}

public void shouldUnzipZipFileIntoDestinationFolderWhenStoreSolid() throws IOException {
Path dstDir = Zip4jvmSuite.subDirNameAsMethodName(rootDir);

UnzipIt.zip(zipDeflateSolid).dstDir(dstDir).extract(dirNameCars);
assertThatDirectory(dstDir).matches(dirCarsAssert);
}

private static long convert(String str) throws ParseException {
return new SimpleDateFormat("yyyy.MM.dd'T'HH:mm:ss", Locale.ENGLISH).parse(str).getTime();
}
Expand Down
Binary file modified src/test/resources/zip/macos_10.zip
Binary file not shown.

0 comments on commit d851b4a

Please sign in to comment.