diff --git a/build.gradle b/build.gradle index d5adba4d3..fe09a190b 100644 --- a/build.gradle +++ b/build.gradle @@ -66,7 +66,9 @@ dependencies { testImplementation 'net.sf.sevenzipjbinding:sevenzipjbinding-all-platforms:16.02-2.01' testImplementation 'net.lingala.zip4j:zip4j:2.11.5' //noinspection VulnerableLibrariesLocal - testImplementation 'de.idyl:winzipaes:1.0.1' + testImplementation('de.idyl:winzipaes:1.0.1') { + exclude group: 'org.bouncycastle', module: 'bcprov-jdk16' + } testImplementation 'org.tukaani:xz:1.10' } @@ -81,7 +83,7 @@ javadoc { options.addBooleanOption('Xdoclint:-missing', true) } -check.finalizedBy(checkLicense) +//check.finalizedBy(checkLicense) check.finalizedBy(generateLicenseReport) check.finalizedBy(jacocoTestReport) diff --git a/src/main/java/ru/olegcherednik/zip4jvm/ZipFile.java b/src/main/java/ru/olegcherednik/zip4jvm/ZipFile.java index 634d2a922..eeaa87a0d 100644 --- a/src/main/java/ru/olegcherednik/zip4jvm/ZipFile.java +++ b/src/main/java/ru/olegcherednik/zip4jvm/ZipFile.java @@ -29,7 +29,6 @@ import ru.olegcherednik.zip4jvm.model.settings.ZipSettings; import ru.olegcherednik.zip4jvm.model.src.SrcZip; import ru.olegcherednik.zip4jvm.utils.EmptyInputStreamSupplier; -import ru.olegcherednik.zip4jvm.utils.PathUtils; import ru.olegcherednik.zip4jvm.utils.quitely.Quietly; import ru.olegcherednik.zip4jvm.utils.quitely.functions.InputStreamSupplier; @@ -125,11 +124,11 @@ public InputStream getInputStream() { public interface Writer extends Closeable { - default void add(Path path) { - add(path, PathUtils.getName(path)); - } + void add(Path path); + + void addWithRename(Path path, String name); - void add(Path path, String name); + void addWithMove(Path path, String dir); void add(ZipFile.Entry entry); diff --git a/src/main/java/ru/olegcherednik/zip4jvm/ZipIt.java b/src/main/java/ru/olegcherednik/zip4jvm/ZipIt.java index fefb27bf9..736dcd7e2 100644 --- a/src/main/java/ru/olegcherednik/zip4jvm/ZipIt.java +++ b/src/main/java/ru/olegcherednik/zip4jvm/ZipIt.java @@ -20,8 +20,8 @@ import ru.olegcherednik.zip4jvm.exception.PathNotExistsException; import ru.olegcherednik.zip4jvm.model.settings.ZipEntrySettings; +import ru.olegcherednik.zip4jvm.model.settings.ZipEntrySettingsProvider; import ru.olegcherednik.zip4jvm.model.settings.ZipSettings; -import ru.olegcherednik.zip4jvm.utils.ValidationUtils; import lombok.AccessLevel; import lombok.RequiredArgsConstructor; @@ -32,7 +32,6 @@ import java.util.Collection; import java.util.Collections; import java.util.Optional; -import java.util.function.Function; import static ru.olegcherednik.zip4jvm.utils.ValidationUtils.requireExists; import static ru.olegcherednik.zip4jvm.utils.ValidationUtils.requireNotNull; @@ -86,19 +85,19 @@ public ZipIt settings(ZipSettings settings) { * @return not {@literal null} {@link ZipIt} instance */ public ZipIt entrySettings(ZipEntrySettings entrySettings) { - return entrySettings == null ? entrySettings(ZipEntrySettings.DEFAULT_PROVIDER) - : entrySettings(fileName -> entrySettings); + return entrySettings == null ? entrySettings(ZipEntrySettingsProvider.DEFAULT) + : entrySettings(ZipEntrySettingsProvider.of(entrySettings)); } /** * Set provider of {@link ZipEntrySettings} for the given file name. Each entry could have separate settings. If * {@literal null}, then {@link - * ZipEntrySettings#DEFAULT_PROVIDER} will be used. + * ZipEntrySettingsProvider#DEFAULT} will be used. * * @param entrySettingsProvider entry settings provider with fileName as a key * @return not {@literal null} {@link ZipIt} instance */ - public ZipIt entrySettings(Function entrySettingsProvider) { + public ZipIt entrySettings(ZipEntrySettingsProvider entrySettingsProvider) { requireNotNull(entrySettingsProvider, "ZipIt.entrySettingsProvider"); settings = settings.toBuilder().entrySettingsProvider(entrySettingsProvider).build(); return this; @@ -128,7 +127,7 @@ public void add(Collection paths) throws IOException { if (CollectionUtils.isEmpty(paths)) return; - paths.forEach(ValidationUtils::requireExists); + requireExists(paths); // TODO check that path != zip try (ZipFile.Writer zipFile = ZipFile.writer(zip, settings)) { @@ -137,6 +136,28 @@ public void add(Collection paths) throws IOException { } } + /** + * Add regular file or directory (keeping initial structure) to the new or existed zip archive under give + * {@code name}.
+ * In case given {@code path} is a directory (or symlink to directory), then this directory will be renamed.
+ * In case given {@code path} is a regular file (or symlink to the file), then this file will be renamed. + * + * @param path path to the regular file or directory + * @param name not {@literal null} name to be used for the {@code path} + * @throws IOException in case of any problem with file access + */ + public void addWithRename(Path path, String name) throws IOException { + try (ZipFile.Writer zipFile = ZipFile.writer(zip, settings)) { + zipFile.addWithRename(path, name); + } + } + + public void addWithMove(Path path, String dir) throws IOException { + try (ZipFile.Writer zipFile = ZipFile.writer(zip, settings)) { + zipFile.addWithMove(path, dir); + } + } + /** * Creates instance of zip file stream. It could be used to add multiple entries to the zip archive. It should be * correctly closed to flush all data. diff --git a/src/main/java/ru/olegcherednik/zip4jvm/engine/ZipEngine.java b/src/main/java/ru/olegcherednik/zip4jvm/engine/ZipEngine.java index 7edbb7cd0..e809de802 100644 --- a/src/main/java/ru/olegcherednik/zip4jvm/engine/ZipEngine.java +++ b/src/main/java/ru/olegcherednik/zip4jvm/engine/ZipEngine.java @@ -39,6 +39,7 @@ import ru.olegcherednik.zip4jvm.utils.function.Writer; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import java.io.IOException; import java.nio.file.Files; @@ -74,44 +75,64 @@ public ZipEngine(Path zip, ZipSettings settings) throws IOException { } @Override - public void add(Path path, String name) { + public void add(Path path) { + add(path, PathUtils.getName(path), ""); + } + + @Override + public void addWithRename(Path path, String name) { + add(path, name, ""); + } + + @Override + public void addWithMove(Path path, String dir) { + add(path, PathUtils.getName(path), dir); + } + + private void add(Path path, String name, String dir) { if (!Files.exists(path)) return; if (Files.isSymbolicLink(path)) path = ZipSymlinkEngine.getSymlinkTarget(path); - if (Files.isDirectory(path)) - zipSymlinkEngine.list(getDirectoryNamedPaths(path, name)).stream() - .map(namedPath -> { - String entryName = namedPath.getEntryName(); - ZipEntrySettings entrySettings = getEntrySettings(entryName); - return namedPath.createZipEntry(entrySettings); - }) - .forEach(this::add); - else if (Files.isRegularFile(path)) { - ZipEntrySettings entrySettings = getEntrySettings(name); - ZipEntry zipEntry = ZipEntryBuilder.regularFile(path, name, entrySettings); - add(zipEntry); - } else - log.warn("Unknown path type '{}'; ignore it", path); + for (NamedPath namedPath : getNamedPaths(path, name, dir)) { + String entryName = namedPath.getEntryName(); + ZipEntrySettings entrySettings = settings.getEntrySettings(entryName); + add(namedPath.createZipEntry(entrySettings)); + } } - private ZipEntrySettings getEntrySettings(String entryName) { - return settings.getEntrySettingsProvider().apply(entryName); + private List getNamedPaths(Path path, String name, String dir) { + if (Files.isDirectory(path)) + return zipSymlinkEngine.list(getDirectoryNamedPaths(path, name, dir)); + + if (Files.isRegularFile(path)) { + if (StringUtils.isNotBlank(dir)) + name = dir + '/' + name; + + return Collections.singletonList(NamedPath.create(path, name)); + } + + log.warn("Unknown path type '{}'; ignore it", path); + return Collections.emptyList(); } - private List getDirectoryNamedPaths(Path path, String name) { - return settings.isRemoveRootDir() ? PathUtils.list(path).stream() - .map(NamedPath::create) - .sorted(NamedPath.SORT_BY_NAME_ASC) - .collect(Collectors.toList()) - : Collections.singletonList(NamedPath.create(path, name)); + private List getDirectoryNamedPaths(Path path, String name, String dir) { + if (settings.isRemoveRootDir()) + return PathUtils.list(path).stream() + .map(p -> StringUtils.isNotBlank(dir) + ? NamedPath.create(p, dir + '/' + PathUtils.getName(p)) + : NamedPath.create(p)) + .sorted(NamedPath.SORT_BY_NAME_ASC) + .collect(Collectors.toList()); + + return Collections.singletonList(NamedPath.create(path, name)); } @Override public void add(ZipFile.Entry entry) { - ZipEntrySettings entrySettings = settings.getEntrySettingsProvider().apply(entry.getName()); + ZipEntrySettings entrySettings = settings.getEntrySettings(entry.getName()); ZipEntry zipEntry = ZipEntryBuilder.build(entry, entrySettings); add(zipEntry); } @@ -164,7 +185,7 @@ public void copy(Path zip) throws IOException { if (fileNameWriter.containsKey(fileName)) throw new EntryDuplicationException(fileName); - char[] password = settings.getEntrySettingsProvider().apply(fileName).getPassword(); + char[] password = settings.getEntrySettings(fileName).getPassword(); fileNameWriter.put(fileName, new ExistedEntryWriter(srcZipModel, fileName, tempZipModel, password)); } } @@ -224,7 +245,7 @@ private static ZipModel createTempZipModel(Path zip, ZipSettings settings, Map { - char[] password = settings.getEntrySettingsProvider().apply(entryName).getPassword(); + char[] password = settings.getEntrySettings(entryName).getPassword(); fileNameWriter.put(entryName, new ExistedEntryWriter(zipModel, entryName, tempZipModel, password)); }); } diff --git a/src/main/java/ru/olegcherednik/zip4jvm/model/settings/ZipEntrySettings.java b/src/main/java/ru/olegcherednik/zip4jvm/model/settings/ZipEntrySettings.java index 2a75eada3..f52024e03 100644 --- a/src/main/java/ru/olegcherednik/zip4jvm/model/settings/ZipEntrySettings.java +++ b/src/main/java/ru/olegcherednik/zip4jvm/model/settings/ZipEntrySettings.java @@ -23,14 +23,13 @@ import ru.olegcherednik.zip4jvm.model.CompressionLevel; import ru.olegcherednik.zip4jvm.model.Encryption; import ru.olegcherednik.zip4jvm.model.ZipModel; -import ru.olegcherednik.zip4jvm.utils.ValidationUtils; import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; import org.apache.commons.lang3.ArrayUtils; -import java.util.function.Function; +import static ru.olegcherednik.zip4jvm.utils.ValidationUtils.requireLengthLessOrEqual; /** * @author Oleg Cherednik @@ -41,7 +40,6 @@ public final class ZipEntrySettings { public static final ZipEntrySettings DEFAULT = builder().build(); - public static final Function DEFAULT_PROVIDER = fileName -> DEFAULT; private final Compression compression; private final CompressionLevel compressionLevel; @@ -56,6 +54,26 @@ public static Builder builder() { return new Builder(); } + public static ZipEntrySettings of(Compression compression) { + if (compression == DEFAULT.getCompression()) + return DEFAULT; + return builder().compression(compression).build(); + } + + public static ZipEntrySettings of(Compression compression, Encryption encryption, char[] password) { + if (encryption == Encryption.OFF) + return of(compression); + return builder() + .compression(compression) + .encryption(encryption, password).build(); + } + + public static ZipEntrySettings of(Encryption encryption, char[] password) { + if (encryption == Encryption.OFF) + return of(DEFAULT.getCompression()); + return builder().encryption(encryption, password).build(); + } + public Builder toBuilder() { return new Builder(this); } @@ -75,6 +93,7 @@ private ZipEntrySettings(Builder builder) { @SuppressWarnings("PMD.UnusedAssignment") public static final class Builder { + private Compression compression = Compression.DEFLATE; private CompressionLevel compressionLevel = CompressionLevel.NORMAL; private Encryption encryption = Encryption.OFF; @@ -102,6 +121,10 @@ public ZipEntrySettings build() { return new ZipEntrySettings(this); } + public ZipEntrySettings.Builder compression(Compression compression) { + return compression(compression, CompressionLevel.NORMAL); + } + public ZipEntrySettings.Builder compression(Compression compression, CompressionLevel compressionLevel) { this.compression = compression; this.compressionLevel = compressionLevel; @@ -109,8 +132,14 @@ public ZipEntrySettings.Builder compression(Compression compression, Compression } public ZipEntrySettings.Builder encryption(Encryption encryption, char[] password) { - if (encryption != Encryption.OFF) { - this.encryption = encryption; + this.encryption = encryption; + + if (encryption == Encryption.OFF) + this.password = null; + else { + if (ArrayUtils.isEmpty(password)) + throw new EmptyPasswordException(); + this.password = ArrayUtils.clone(password); } @@ -118,14 +147,12 @@ public ZipEntrySettings.Builder encryption(Encryption encryption, char[] passwor } public ZipEntrySettings.Builder password(char[] password) { - this.password = ArrayUtils.clone(password); - return this; + return encryption(encryption, password); } public ZipEntrySettings.Builder comment(String comment) { - this.comment = ValidationUtils.requireLengthLessOrEqual(comment, - ZipModel.MAX_COMMENT_SIZE, - "ZipEntry.comment"); + requireLengthLessOrEqual(comment, ZipModel.MAX_COMMENT_SIZE, "ZipEntry.comment"); + this.comment = comment; return this; } diff --git a/src/main/java/ru/olegcherednik/zip4jvm/model/settings/ZipEntrySettingsProvider.java b/src/main/java/ru/olegcherednik/zip4jvm/model/settings/ZipEntrySettingsProvider.java new file mode 100644 index 000000000..0ef6e6b35 --- /dev/null +++ b/src/main/java/ru/olegcherednik/zip4jvm/model/settings/ZipEntrySettingsProvider.java @@ -0,0 +1,52 @@ +/* + * 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 ru.olegcherednik.zip4jvm.model.settings; + +import lombok.AccessLevel; +import lombok.RequiredArgsConstructor; + +import java.util.Optional; +import java.util.function.Function; + +/** + * @author Oleg Cherednik + * @since 20.10.2024 + */ +@RequiredArgsConstructor(access = AccessLevel.PRIVATE) +public final class ZipEntrySettingsProvider { + + public static final ZipEntrySettingsProvider DEFAULT = of(ZipEntrySettings.DEFAULT); + + private final Function entryNameSettings; + + public static ZipEntrySettingsProvider of(ZipEntrySettings entrySettings) { + return new ZipEntrySettingsProvider(entryName -> entrySettings); + } + + public static ZipEntrySettingsProvider of(Function entryNameSettings) { + return new ZipEntrySettingsProvider(entryNameSettings); + } + + // @NotNull + public ZipEntrySettings getEntrySettings(String entryName) { + return Optional.ofNullable(entryNameSettings.apply(entryName)) + .orElse(ZipEntrySettings.DEFAULT); + } + +} diff --git a/src/main/java/ru/olegcherednik/zip4jvm/model/settings/ZipSettings.java b/src/main/java/ru/olegcherednik/zip4jvm/model/settings/ZipSettings.java index 7f029da5a..fdf1367ce 100644 --- a/src/main/java/ru/olegcherednik/zip4jvm/model/settings/ZipSettings.java +++ b/src/main/java/ru/olegcherednik/zip4jvm/model/settings/ZipSettings.java @@ -18,8 +18,11 @@ */ package ru.olegcherednik.zip4jvm.model.settings; +import ru.olegcherednik.zip4jvm.model.Compression; +import ru.olegcherednik.zip4jvm.model.Encryption; import ru.olegcherednik.zip4jvm.model.ZipModel; import ru.olegcherednik.zip4jvm.model.ZipSymlink; +import ru.olegcherednik.zip4jvm.utils.ValidationUtils; import lombok.AccessLevel; import lombok.Getter; @@ -27,7 +30,6 @@ import org.apache.commons.lang3.StringUtils; import java.util.Optional; -import java.util.function.Function; /** * @author Oleg Cherednik @@ -41,10 +43,26 @@ public final class ZipSettings { private final long splitSize; private final String comment; private final boolean zip64; - private final Function entrySettingsProvider; + private final ZipEntrySettingsProvider entrySettingsProvider; private final ZipSymlink zipSymlink; private final boolean removeRootDir; + public static ZipSettings of(Compression compression) { + return of(ZipEntrySettings.of(compression)); + } + + public static ZipSettings of(Compression compression, Encryption encryption, char[] password) { + return of(ZipEntrySettings.of(compression, encryption, password)); + } + + public static ZipSettings of(Encryption encryption, char[] password) { + return of(ZipEntrySettings.of(encryption, password)); + } + + public static ZipSettings of(ZipEntrySettings entrySettings) { + return entrySettings == ZipEntrySettings.DEFAULT ? DEFAULT : builder().entrySettings(entrySettings).build(); + } + public static Builder builder() { return new Builder(); } @@ -59,8 +77,16 @@ private ZipSettings(Builder builder) { } public Builder toBuilder() { - return builder().splitSize(splitSize).comment(comment).zip64(zip64) - .entrySettingsProvider(entrySettingsProvider); + return builder() + .splitSize(splitSize) + .comment(comment) + .zip64(zip64) + .entrySettingsProvider(entrySettingsProvider); + } + + // @NotNull + public ZipEntrySettings getEntrySettings(String entryName) { + return entrySettingsProvider.getEntrySettings(entryName); } @NoArgsConstructor(access = AccessLevel.PRIVATE) @@ -70,7 +96,7 @@ public static final class Builder { private long splitSize = ZipModel.NO_SPLIT; private String comment; private boolean zip64; - private Function entrySettingsProvider = ZipEntrySettings.DEFAULT_PROVIDER; + private ZipEntrySettingsProvider entrySettingsProvider = ZipEntrySettingsProvider.DEFAULT; private ZipSymlink zipSymlink = ZipSymlink.IGNORE_SYMLINK; private boolean removeRootDir; @@ -101,9 +127,33 @@ public Builder zip64(boolean zip64) { return this; } - public Builder entrySettingsProvider(Function entrySettingsProvider) { - this.entrySettingsProvider = Optional.ofNullable(entrySettingsProvider) - .orElse(ZipEntrySettings.DEFAULT_PROVIDER); + public Builder entrySettings(Compression compression) { + return entrySettings(ZipEntrySettings.of(compression)); + } + + public Builder entrySettings(Compression compression, Encryption encryption, char[] password) { + return entrySettings(ZipEntrySettings.of(compression, encryption, password)); + } + + public Builder entrySettings(Encryption encryption, char[] password) { + return entrySettings(ZipEntrySettings.of(encryption, password)); + } + + /** + * Apply given {@code entrySettings} to all entries. + * + * @param entrySettings not {@literal null} zip entry settings + * @return this builder + */ + public Builder entrySettings(ZipEntrySettings entrySettings) { + ValidationUtils.requireNotNull(entrySettings, "ZipSettings.entrySettings"); + entrySettingsProvider = ZipEntrySettingsProvider.of(entrySettings); + return this; + } + + public Builder entrySettingsProvider(ZipEntrySettingsProvider entrySettingsProvider) { + ValidationUtils.requireNotNull(entrySettingsProvider, "ZipSettings.entrySettingsProvider"); + this.entrySettingsProvider = entrySettingsProvider; return this; } diff --git a/src/main/java/ru/olegcherednik/zip4jvm/utils/ValidationUtils.java b/src/main/java/ru/olegcherednik/zip4jvm/utils/ValidationUtils.java index 8c31d326f..dbf35ef2f 100644 --- a/src/main/java/ru/olegcherednik/zip4jvm/utils/ValidationUtils.java +++ b/src/main/java/ru/olegcherednik/zip4jvm/utils/ValidationUtils.java @@ -66,6 +66,10 @@ public static void requireExists(Path path) { throw new PathNotExistsException(path); } + public static void requireExists(Collection paths) { + paths.forEach(ValidationUtils::requireExists); + } + public static void requireRegularFile(Path path, String name) { if (Files.exists(path) && !Files.isRegularFile(path)) throw new IllegalArgumentException("Path should be a regular file: " + name); diff --git a/src/test/java/ru/olegcherednik/zip4jvm/ModifyCommentTest.java b/src/test/java/ru/olegcherednik/zip4jvm/ModifyCommentTest.java index fef3439de..be8b8c723 100644 --- a/src/test/java/ru/olegcherednik/zip4jvm/ModifyCommentTest.java +++ b/src/test/java/ru/olegcherednik/zip4jvm/ModifyCommentTest.java @@ -19,7 +19,6 @@ package ru.olegcherednik.zip4jvm; import ru.olegcherednik.zip4jvm.model.Compression; -import ru.olegcherednik.zip4jvm.model.CompressionLevel; import ru.olegcherednik.zip4jvm.model.ZipModel; import ru.olegcherednik.zip4jvm.model.settings.ZipEntrySettings; import ru.olegcherednik.zip4jvm.model.settings.ZipSettings; @@ -60,14 +59,11 @@ public static void removeDir() throws IOException { } public void shouldCreateNewZipWithComment() throws IOException { - ZipSettings settings = ZipSettings - .builder() - .entrySettingsProvider(fileName -> - ZipEntrySettings.builder() - .compression(Compression.DEFLATE, - CompressionLevel.NORMAL) - .build()) - .comment("Oleg Cherednik - Олег Чередник").build(); + ZipEntrySettings entrySettings = ZipEntrySettings.of(Compression.DEFLATE); + + ZipSettings settings = ZipSettings.builder() + .entrySettings(entrySettings) + .comment("Oleg Cherednik - Олег Чередник").build(); ZipIt.zip(zip).settings(settings).add(fileOlegCherednik); assertThatZipFile(zip).exists().hasComment("Oleg Cherednik - Олег Чередник"); } diff --git a/src/test/java/ru/olegcherednik/zip4jvm/TestData.java b/src/test/java/ru/olegcherednik/zip4jvm/TestData.java index e4643381a..c2a7c4393 100644 --- a/src/test/java/ru/olegcherednik/zip4jvm/TestData.java +++ b/src/test/java/ru/olegcherednik/zip4jvm/TestData.java @@ -54,10 +54,6 @@ public final class TestData { public static final String dirNameCars = "cars"; public static final String dirNameEmpty = "empty_dir"; - public static final String zipDirNameBikes = dirNameBikes + '/'; - public static final String zipDirNameCars = dirNameCars + '/'; - public static final String zipDirNameEmpty = dirNameEmpty + '/'; - public static final String fileNameZipSrc = "src.zip"; public static final String fileNameDataSrc = "src.data"; public static final String fileNameDucati = "ducati-panigale-1199.jpg"; @@ -86,10 +82,7 @@ public final class TestData { public static final String symlinkAbsFileNameHonda = getAbsoluteSymlinkName(fileNameHonda); public static final String symlinkAbsDirNameData = getAbsoluteSymlinkName(dirNameSrcData); - public static final String zipSymlinkRelDirNameData = symlinkRelDirNameData + '/'; - public static final String zipSymlinkRelDirNameCars = symlinkRelDirNameCars + '/'; public static final String zipSymlinkAbsDirNameData = symlinkAbsDirNameData + '/'; - public static final String zipSymlinkTrnDirNameData = symlinkTrnDirNameData + '/'; public static final Path dirBikes = dirSrcData.resolve(dirNameBikes); public static final Path dirCars = dirSrcData.resolve(dirNameCars); diff --git a/src/test/java/ru/olegcherednik/zip4jvm/TestDataAssert.java b/src/test/java/ru/olegcherednik/zip4jvm/TestDataAssert.java index a9e196f41..ed346d554 100644 --- a/src/test/java/ru/olegcherednik/zip4jvm/TestDataAssert.java +++ b/src/test/java/ru/olegcherednik/zip4jvm/TestDataAssert.java @@ -32,6 +32,9 @@ import java.nio.file.Path; import java.util.function.Consumer; +import static ru.olegcherednik.zip4jvm.TestData.dirNameBikes; +import static ru.olegcherednik.zip4jvm.TestData.dirNameCars; +import static ru.olegcherednik.zip4jvm.TestData.dirNameEmpty; import static ru.olegcherednik.zip4jvm.TestData.fileNameBentley; import static ru.olegcherednik.zip4jvm.TestData.fileNameDucati; import static ru.olegcherednik.zip4jvm.TestData.fileNameEmpty; @@ -43,9 +46,6 @@ import static ru.olegcherednik.zip4jvm.TestData.fileNameSigSauer; import static ru.olegcherednik.zip4jvm.TestData.fileNameSuzuki; import static ru.olegcherednik.zip4jvm.TestData.fileNameWiesmann; -import static ru.olegcherednik.zip4jvm.TestData.zipDirNameBikes; -import static ru.olegcherednik.zip4jvm.TestData.zipDirNameCars; -import static ru.olegcherednik.zip4jvm.TestData.zipDirNameEmpty; /** * @author Oleg Cherednik @@ -102,9 +102,9 @@ public final class TestDataAssert { public static final Consumer> rootAssert = dir -> { dir.exists().hasEntries(8).hasDirectories(3).hasRegularFiles(5); - dirBikesAssert.accept(dir.directory(zipDirNameBikes)); - dirCarsAssert.accept(dir.directory(zipDirNameCars)); - dirEmptyAssert.accept(dir.directory(zipDirNameEmpty)); + dirBikesAssert.accept(dir.directory(dirNameBikes)); + dirCarsAssert.accept(dir.directory(dirNameCars)); + dirEmptyAssert.accept(dir.directory(dirNameEmpty)); fileMcdonnelDouglasAssert.accept(dir.regularFile(fileNameMcdonnelDouglas)); fileSaintPetersburgAssert.accept(dir.regularFile(fileNameSaintPetersburg)); diff --git a/src/test/java/ru/olegcherednik/zip4jvm/UnzipItSplitTest.java b/src/test/java/ru/olegcherednik/zip4jvm/UnzipItSplitTest.java index f755b86dc..68fc73a31 100644 --- a/src/test/java/ru/olegcherednik/zip4jvm/UnzipItSplitTest.java +++ b/src/test/java/ru/olegcherednik/zip4jvm/UnzipItSplitTest.java @@ -20,7 +20,6 @@ import ru.olegcherednik.zip4jvm.exception.SplitPartNotFoundException; import ru.olegcherednik.zip4jvm.model.Compression; -import ru.olegcherednik.zip4jvm.model.CompressionLevel; import ru.olegcherednik.zip4jvm.model.settings.ZipEntrySettings; import ru.olegcherednik.zip4jvm.model.settings.ZipSettings; @@ -78,10 +77,9 @@ public void shouldUnzipRequiredFilesWhenSplit() throws IOException { } public void shouldThrowFileNotFoundExceptionAndNotExtractPartialFilesWhenZipPartMissing() throws IOException { - ZipEntrySettings entrySettings = ZipEntrySettings.builder().compression(Compression.STORE, - CompressionLevel.NORMAL).build(); + ZipEntrySettings entrySettings = ZipEntrySettings.of(Compression.STORE); ZipSettings settings = ZipSettings.builder() - .entrySettingsProvider(fileName -> entrySettings) + .entrySettings(entrySettings) .splitSize(SIZE_1MB) .build(); diff --git a/src/test/java/ru/olegcherednik/zip4jvm/ZipFileTest.java b/src/test/java/ru/olegcherednik/zip4jvm/ZipFileTest.java index f7cf46d03..dbf16ba8d 100644 --- a/src/test/java/ru/olegcherednik/zip4jvm/ZipFileTest.java +++ b/src/test/java/ru/olegcherednik/zip4jvm/ZipFileTest.java @@ -19,9 +19,9 @@ package ru.olegcherednik.zip4jvm; import ru.olegcherednik.zip4jvm.model.Compression; -import ru.olegcherednik.zip4jvm.model.CompressionLevel; import ru.olegcherednik.zip4jvm.model.Encryption; import ru.olegcherednik.zip4jvm.model.settings.ZipEntrySettings; +import ru.olegcherednik.zip4jvm.model.settings.ZipEntrySettingsProvider; import ru.olegcherednik.zip4jvm.model.settings.ZipSettings; import org.testng.annotations.AfterClass; @@ -52,6 +52,13 @@ import static ru.olegcherednik.zip4jvm.TestData.filesDirBikes; import static ru.olegcherednik.zip4jvm.TestData.filesDirCars; import static ru.olegcherednik.zip4jvm.TestData.filesDirSrc; +import static ru.olegcherednik.zip4jvm.TestDataAssert.fileBentleyAssert; +import static ru.olegcherednik.zip4jvm.TestDataAssert.fileDucatiAssert; +import static ru.olegcherednik.zip4jvm.TestDataAssert.fileFerrariAssert; +import static ru.olegcherednik.zip4jvm.TestDataAssert.fileHondaAssert; +import static ru.olegcherednik.zip4jvm.TestDataAssert.fileKawasakiAssert; +import static ru.olegcherednik.zip4jvm.TestDataAssert.fileSuzukiAssert; +import static ru.olegcherednik.zip4jvm.TestDataAssert.fileWiesmannAssert; import static ru.olegcherednik.zip4jvm.assertj.Zip4jvmAssertions.assertThatDirectory; import static ru.olegcherednik.zip4jvm.assertj.Zip4jvmAssertions.assertThatZipFile; @@ -77,9 +84,7 @@ public static void removeDir() throws IOException { } public void shouldCreateZipFileWhenUseZipFileAndAddFiles() throws IOException { - ZipEntrySettings entrySettings = ZipEntrySettings.builder() - .compression(Compression.STORE, CompressionLevel.NORMAL) - .build(); + ZipEntrySettings entrySettings = ZipEntrySettings.of(Compression.STORE); try (ZipFile.Writer zipFile = ZipIt.zip(file).entrySettings(entrySettings).open()) { zipFile.add(fileBentley); @@ -89,16 +94,14 @@ public void shouldCreateZipFileWhenUseZipFileAndAddFiles() throws IOException { assertThatDirectory(file.getParent()).exists().hasOnlyRegularFiles(1); assertThatZipFile(file).exists().root().hasOnlyRegularFiles(3); - assertThatZipFile(file).regularFile(fileNameBentley).exists().hasSize(1_395_362); - assertThatZipFile(file).regularFile(fileNameFerrari).exists().hasSize(320_894); - assertThatZipFile(file).regularFile(fileNameWiesmann).exists().hasSize(729_633); + assertThatZipFile(file).regularFile(fileNameBentley).matches(fileBentleyAssert); + assertThatZipFile(file).regularFile(fileNameFerrari).matches(fileFerrariAssert); + assertThatZipFile(file).regularFile(fileNameWiesmann).matches(fileWiesmannAssert); } @Test(dependsOnMethods = "shouldCreateZipFileWhenUseZipFileAndAddFiles") public void shouldAddFilesToExistedZipWhenUseZipFile() throws IOException { - ZipEntrySettings entrySettings = ZipEntrySettings.builder() - .compression(Compression.STORE, CompressionLevel.NORMAL) - .build(); + ZipEntrySettings entrySettings = ZipEntrySettings.of(Compression.STORE); try (ZipFile.Writer zipFile = ZipIt.zip(file).entrySettings(entrySettings).open()) { zipFile.add(fileDucati); @@ -109,35 +112,35 @@ public void shouldAddFilesToExistedZipWhenUseZipFile() throws IOException { assertThatDirectory(file.getParent()).exists().hasOnlyRegularFiles(1); assertThatZipFile(file).exists().root().hasEntries(7).hasRegularFiles(7); - assertThatZipFile(file).regularFile(fileNameBentley).exists().hasSize(1_395_362); - assertThatZipFile(file).regularFile(fileNameFerrari).exists().hasSize(320_894); - assertThatZipFile(file).regularFile(fileNameWiesmann).exists().hasSize(729_633); - assertThatZipFile(file).regularFile(fileNameDucati).exists().hasSize(293_823); - assertThatZipFile(file).regularFile(fileNameHonda).exists().hasSize(154_591); - assertThatZipFile(file).regularFile(fileNameKawasaki).exists().hasSize(167_026); - assertThatZipFile(file).regularFile(fileNameSuzuki).exists().hasSize(287_349); + assertThatZipFile(file).regularFile(fileNameBentley).matches(fileBentleyAssert); + assertThatZipFile(file).regularFile(fileNameFerrari).matches(fileFerrariAssert); + assertThatZipFile(file).regularFile(fileNameWiesmann).matches(fileWiesmannAssert); + assertThatZipFile(file).regularFile(fileNameDucati).matches(fileDucatiAssert); + assertThatZipFile(file).regularFile(fileNameHonda).matches(fileHondaAssert); + assertThatZipFile(file).regularFile(fileNameKawasaki).matches(fileKawasakiAssert); + assertThatZipFile(file).regularFile(fileNameSuzuki).matches(fileSuzukiAssert); } public void shouldCreateZipFileWithEntryCommentWhenUseZipFile() throws IOException { Path zip = Zip4jvmSuite.subDirNameAsMethodName(rootDir).resolve(fileNameZipSrc); - Function entrySettingsProvider = fileName -> { + Function func = fileName -> { if (fileNameBentley.equals(fileName)) return ZipEntrySettings.builder() - .compression(Compression.STORE, CompressionLevel.NORMAL) + .compression(Compression.STORE) .comment("bentley-continental").build(); if (fileNameFerrari.equals(fileName)) return ZipEntrySettings.builder() - .compression(Compression.DEFLATE, CompressionLevel.NORMAL) + .compression(Compression.DEFLATE) .comment("ferrari-458-italia").build(); if (fileNameWiesmann.equals(fileName)) return ZipEntrySettings.builder() - .compression(Compression.STORE, CompressionLevel.NORMAL) + .compression(Compression.STORE) .comment("wiesmann-gt-mf5").build(); return ZipEntrySettings.DEFAULT; }; - try (ZipFile.Writer zipFile = ZipIt.zip(zip).entrySettings(entrySettingsProvider).open()) { + try (ZipFile.Writer zipFile = ZipIt.zip(zip).entrySettings(ZipEntrySettingsProvider.of(func)).open()) { zipFile.add(fileBentley); zipFile.add(fileFerrari); zipFile.add(fileWiesmann); @@ -146,33 +149,29 @@ public void shouldCreateZipFileWithEntryCommentWhenUseZipFile() throws IOExcepti assertThatDirectory(zip.getParent()).exists().hasOnlyRegularFiles(1); assertThatZipFile(zip).exists().root().hasOnlyRegularFiles(3); assertThatZipFile(zip).regularFile(fileNameBentley) - .exists().hasSize(1_395_362).hasComment("bentley-continental"); + .matches(fileBentleyAssert).hasComment("bentley-continental"); assertThatZipFile(zip).regularFile(fileNameFerrari) - .exists().hasSize(320_894).hasComment("ferrari-458-italia"); + .matches(fileFerrariAssert).hasComment("ferrari-458-italia"); assertThatZipFile(zip).regularFile(fileNameWiesmann) - .exists().hasSize(729_633).hasComment("wiesmann-gt-mf5"); + .matches(fileWiesmannAssert).hasComment("wiesmann-gt-mf5"); } // TODO add unzip tests for such ZipFile public void shouldCreateZipFileWithEntryDifferentEncryptionAndPasswordWhenUseZipFile() throws IOException { - Function entrySettingsProvider = fileName -> { + Function func = fileName -> { if (fileNameBentley.equals(fileName)) - return ZipEntrySettings.builder().compression(Compression.STORE, CompressionLevel.NORMAL).build(); + return ZipEntrySettings.of(Compression.STORE); if (fileNameFerrari.equals(fileName)) - return ZipEntrySettings.builder() - .compression(Compression.STORE, CompressionLevel.NORMAL) - .encryption(Encryption.PKWARE, "1".toCharArray()).build(); + return ZipEntrySettings.of(Compression.STORE, Encryption.PKWARE, "1".toCharArray()); if (fileNameWiesmann.equals(fileName)) - return ZipEntrySettings.builder() - .compression(Compression.STORE, CompressionLevel.NORMAL) - .encryption(Encryption.AES_256, "2".toCharArray()).build(); + return ZipEntrySettings.of(Compression.STORE, Encryption.AES_256, "2".toCharArray()); return ZipEntrySettings.DEFAULT.toBuilder().password(Zip4jvmSuite.password).build(); }; Path zip = Zip4jvmSuite.subDirNameAsMethodName(rootDir).resolve(fileNameZipSrc); - try (ZipFile.Writer zipFile = ZipIt.zip(zip).entrySettings(entrySettingsProvider).open()) { + try (ZipFile.Writer zipFile = ZipIt.zip(zip).entrySettings(ZipEntrySettingsProvider.of(func)).open()) { zipFile.add(fileBentley); zipFile.add(fileFerrari); zipFile.add(fileWiesmann); @@ -190,19 +189,17 @@ public void shouldCreateZipFileWithEntryDifferentEncryptionAndPasswordWhenUseZip } public void shouldCreateZipFileWithContentWhenUseZipFile() throws IOException { - Function entrySettingsProvider = fileName -> { - if (fileName.startsWith("Star Wars/")) - return ZipEntrySettings.builder().compression(Compression.DEFLATE, CompressionLevel.NORMAL).build(); - if (!fileName.contains("/")) - return ZipEntrySettings.builder() - .compression(Compression.DEFLATE, CompressionLevel.MAXIMUM) - .encryption(Encryption.PKWARE, Zip4jvmSuite.password).build(); - return ZipEntrySettings.builder().compression(Compression.STORE, CompressionLevel.NORMAL).build(); + Function func = entryName -> { + if (entryName.startsWith("Star Wars/")) + return ZipEntrySettings.of(Compression.DEFLATE); + if (!entryName.contains("/")) + return ZipEntrySettings.of(Compression.DEFLATE, Encryption.PKWARE, Zip4jvmSuite.password); + return ZipEntrySettings.of(Compression.STORE); }; ZipSettings settings = ZipSettings.builder() .comment("Global Comment") - .entrySettingsProvider(entrySettingsProvider).build(); + .entrySettingsProvider(ZipEntrySettingsProvider.of(func)).build(); Path zip = Zip4jvmSuite.subDirNameAsMethodName(rootDir).resolve(fileNameZipSrc); @@ -225,7 +222,7 @@ public void shouldCreateZipFileWithContentWhenUseZipFile() throws IOException { public void shouldCreateZipFileWithEmptyDirectoryWhenAddEmptyDirectory() throws IOException { ZipSettings settings = ZipSettings.builder() - .entrySettingsProvider(fileName -> ZipEntrySettings.builder().build()) + .entrySettings(ZipEntrySettings.builder().build()) .build(); Path zip = Zip4jvmSuite.subDirNameAsMethodName(rootDir).resolve(fileNameZipSrc); diff --git a/src/test/java/ru/olegcherednik/zip4jvm/ZipFilesNoSplitTest.java b/src/test/java/ru/olegcherednik/zip4jvm/ZipFilesNoSplitTest.java index d8b31adf8..9e5485158 100644 --- a/src/test/java/ru/olegcherednik/zip4jvm/ZipFilesNoSplitTest.java +++ b/src/test/java/ru/olegcherednik/zip4jvm/ZipFilesNoSplitTest.java @@ -18,10 +18,7 @@ */ package ru.olegcherednik.zip4jvm; -import ru.olegcherednik.zip4jvm.assertj.Zip4jvmAssertions; import ru.olegcherednik.zip4jvm.model.Compression; -import ru.olegcherednik.zip4jvm.model.CompressionLevel; -import ru.olegcherednik.zip4jvm.model.settings.ZipEntrySettings; import ru.olegcherednik.zip4jvm.model.settings.ZipSettings; import org.testng.annotations.AfterClass; @@ -37,6 +34,8 @@ import static ru.olegcherednik.zip4jvm.TestData.fileBentley; import static ru.olegcherednik.zip4jvm.TestData.fileFerrari; import static ru.olegcherednik.zip4jvm.TestData.fileWiesmann; +import static ru.olegcherednik.zip4jvm.assertj.Zip4jvmAssertions.assertThatDirectory; +import static ru.olegcherednik.zip4jvm.assertj.Zip4jvmAssertions.assertThatZipFile; /** * @author Oleg Cherednik @@ -60,20 +59,11 @@ public static void removeDir() throws IOException { } public void shouldCreateNewZipWithFiles() throws IOException { - ZipSettings settings = ZipSettings - .builder() - .entrySettingsProvider(fileName -> - ZipEntrySettings.builder() - .compression(Compression.DEFLATE, - CompressionLevel.NORMAL) - .build()) - .build(); - List files = Arrays.asList(fileBentley, fileFerrari, fileWiesmann); - ZipIt.zip(zip).settings(settings).add(files); + ZipIt.zip(zip).settings(ZipSettings.of(Compression.DEFLATE)).add(files); - Zip4jvmAssertions.assertThatDirectory(zip.getParent()).exists().hasOnlyRegularFiles(1); - Zip4jvmAssertions.assertThatZipFile(zip).root().matches(TestDataAssert.dirCarsAssert); + assertThatDirectory(zip.getParent()).exists().hasOnlyRegularFiles(1); + assertThatZipFile(zip).root().matches(TestDataAssert.dirCarsAssert); } // TODO Test to add files to existed no split zip diff --git a/src/test/java/ru/olegcherednik/zip4jvm/ZipFilesSplitTest.java b/src/test/java/ru/olegcherednik/zip4jvm/ZipFilesSplitTest.java index 2339ddb3a..c26eafe28 100644 --- a/src/test/java/ru/olegcherednik/zip4jvm/ZipFilesSplitTest.java +++ b/src/test/java/ru/olegcherednik/zip4jvm/ZipFilesSplitTest.java @@ -20,11 +20,9 @@ import ru.olegcherednik.zip4jvm.io.readers.ZipModelReader; import ru.olegcherednik.zip4jvm.model.Compression; -import ru.olegcherednik.zip4jvm.model.CompressionLevel; import ru.olegcherednik.zip4jvm.model.EndCentralDirectory; import ru.olegcherednik.zip4jvm.model.Zip64; import ru.olegcherednik.zip4jvm.model.ZipModel; -import ru.olegcherednik.zip4jvm.model.settings.ZipEntrySettings; import ru.olegcherednik.zip4jvm.model.settings.ZipSettings; import ru.olegcherednik.zip4jvm.model.src.SrcZip; @@ -66,13 +64,9 @@ public static void removeDir() throws IOException { public void shouldCreateNewSplitZipWithFiles() throws IOException { Path zip = Zip4jvmSuite.subDirNameAsMethodName(rootDir).resolve("src.zip"); - ZipSettings settings = ZipSettings - .builder() - .entrySettingsProvider(fileName -> - ZipEntrySettings.builder() - .compression(Compression.DEFLATE, - CompressionLevel.NORMAL).build()) - .splitSize(SIZE_1MB).build(); + ZipSettings settings = ZipSettings.builder() + .entrySettings(Compression.DEFLATE) + .splitSize(SIZE_1MB).build(); List files = Arrays.asList(fileBentley, fileFerrari, fileWiesmann); ZipIt.zip(zip).settings(settings).add(files); // TODO commented tests @@ -84,15 +78,10 @@ public void shouldCreateNewSplitZipWithFiles() throws IOException { @SuppressWarnings("LocalVariableNamingConvention") public void shouldSetTotalDiskWhenSplitZip64() throws IOException { Path zip = Zip4jvmSuite.subDirNameAsMethodName(rootDir).resolve("src.zip"); - ZipSettings settings = ZipSettings - .builder() - .zip64(true) - .entrySettingsProvider(fileName -> - ZipEntrySettings.builder() - .compression(Compression.DEFLATE, - CompressionLevel.NORMAL) - .build()) - .splitSize(SIZE_1MB).build(); + ZipSettings settings = ZipSettings.builder() + .zip64(true) + .entrySettings(Compression.DEFLATE) + .splitSize(SIZE_1MB).build(); List files = Arrays.asList(fileBentley, fileFerrari, fileWiesmann); ZipIt.zip(zip).settings(settings).add(files); @@ -114,14 +103,9 @@ public void shouldSetTotalDiskWhenSplitZip64() throws IOException { public void shouldSetTotalDiskWhenSplit() throws IOException { Path zip = Zip4jvmSuite.subDirNameAsMethodName(rootDir).resolve("src.zip"); - ZipSettings settings = ZipSettings - .builder() - .entrySettingsProvider(fileName -> - ZipEntrySettings.builder() - .compression(Compression.DEFLATE, - CompressionLevel.NORMAL) - .build()) - .splitSize(SIZE_1MB).build(); + ZipSettings settings = ZipSettings.builder() + .entrySettings(Compression.DEFLATE) + .splitSize(SIZE_1MB).build(); List files = Arrays.asList(fileBentley, fileFerrari, fileWiesmann); ZipIt.zip(zip).settings(settings).add(files); diff --git a/src/test/java/ru/olegcherednik/zip4jvm/ZipFolderNoSplitTest.java b/src/test/java/ru/olegcherednik/zip4jvm/ZipFolderNoSplitTest.java index 33e78a437..6836eb7f4 100644 --- a/src/test/java/ru/olegcherednik/zip4jvm/ZipFolderNoSplitTest.java +++ b/src/test/java/ru/olegcherednik/zip4jvm/ZipFolderNoSplitTest.java @@ -18,13 +18,9 @@ */ package ru.olegcherednik.zip4jvm; -import ru.olegcherednik.zip4jvm.assertj.Zip4jvmAssertions; import ru.olegcherednik.zip4jvm.model.Compression; -import ru.olegcherednik.zip4jvm.model.CompressionLevel; -import ru.olegcherednik.zip4jvm.model.settings.ZipEntrySettings; import ru.olegcherednik.zip4jvm.model.settings.ZipSettings; -import org.assertj.core.api.Assertions; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; import org.testng.annotations.Ignore; @@ -34,8 +30,11 @@ import java.nio.file.Files; import java.nio.file.Path; +import static org.assertj.core.api.Assertions.assertThat; import static ru.olegcherednik.zip4jvm.TestData.dirCars; import static ru.olegcherednik.zip4jvm.TestData.dirEmpty; +import static ru.olegcherednik.zip4jvm.assertj.Zip4jvmAssertions.assertThatDirectory; +import static ru.olegcherednik.zip4jvm.assertj.Zip4jvmAssertions.assertThatZipFile; /** * @author Oleg Cherednik @@ -59,18 +58,10 @@ public static void removeDir() throws IOException { @Test public void shouldCreateNewZipWithFolder() throws IOException { - ZipSettings settings = ZipSettings - .builder().entrySettingsProvider(fileName -> - ZipEntrySettings.builder() - .compression(Compression.DEFLATE, - CompressionLevel.NORMAL) - .build()) - .build(); - ZipIt.zip(zip).settings(settings).add(dirCars); - - Zip4jvmAssertions.assertThatDirectory(zip.getParent()).exists().hasOnlyRegularFiles(1); - Zip4jvmAssertions.assertThatZipFile(zip).exists().root().hasEntries(1).hasDirectories(1); - Zip4jvmAssertions.assertThatZipFile(zip).directory("cars/").matches(TestDataAssert.dirCarsAssert); + ZipIt.zip(zip).settings(ZipSettings.of(Compression.DEFLATE)).add(dirCars); + assertThatDirectory(zip.getParent()).exists().hasOnlyRegularFiles(1); + assertThatZipFile(zip).exists().root().hasEntries(1).hasDirectories(1); + assertThatZipFile(zip).directory("cars").matches(TestDataAssert.dirCarsAssert); } // @Test(dependsOnMethods = "shouldCreateNewZipWithFolder") @@ -102,26 +93,18 @@ public void shouldCreateNewZipWithFolder() throws IOException { @Test(dependsOnMethods = "shouldAddFolderToExistedZip") @Ignore public void shouldAddEmptyDirectoryToExistedZip() throws IOException { - Assertions.assertThat(Files.exists(zip)).isTrue(); - Assertions.assertThat(Files.isRegularFile(zip)).isTrue(); + assertThat(Files.exists(zip)).isTrue(); + assertThat(Files.isRegularFile(zip)).isTrue(); - ZipSettings settings = ZipSettings - .builder() - .entrySettingsProvider(fileName -> - ZipEntrySettings.builder() - .compression(Compression.DEFLATE, - CompressionLevel.NORMAL) - .build()) - .build(); - ZipIt.zip(zip).settings(settings).add(dirEmpty); + ZipIt.zip(zip).settings(ZipSettings.of(Compression.DEFLATE)).add(dirEmpty); - Zip4jvmAssertions.assertThatDirectory(zip.getParent()).exists().hasOnlyRegularFiles(1); - Zip4jvmAssertions.assertThatZipFile(zip).exists().root().hasEntries(3).hasDirectories(3); - Zip4jvmAssertions.assertThatZipFile(zip).directory("cars/").matches(TestDataAssert.dirCarsAssert); + assertThatDirectory(zip.getParent()).exists().hasOnlyRegularFiles(1); + assertThatZipFile(zip).exists().root().hasEntries(3).hasDirectories(3); + assertThatZipFile(zip).directory("cars").matches(TestDataAssert.dirCarsAssert); // TODO commented test // Zip4jvmAssertions.assertThatZipFile(zip).directory("Star Wars/") // =.matches(TestDataAssert.zipStarWarsDirAssert); - Zip4jvmAssertions.assertThatZipFile(zip).directory("empty_dir/").matches(TestDataAssert.dirEmptyAssert); + assertThatZipFile(zip).directory("empty_dir").matches(TestDataAssert.dirEmptyAssert); } } diff --git a/src/test/java/ru/olegcherednik/zip4jvm/ZipFolderSplitTest.java b/src/test/java/ru/olegcherednik/zip4jvm/ZipFolderSplitTest.java index c48f10e47..f1582e456 100644 --- a/src/test/java/ru/olegcherednik/zip4jvm/ZipFolderSplitTest.java +++ b/src/test/java/ru/olegcherednik/zip4jvm/ZipFolderSplitTest.java @@ -19,8 +19,6 @@ package ru.olegcherednik.zip4jvm; import ru.olegcherednik.zip4jvm.model.Compression; -import ru.olegcherednik.zip4jvm.model.CompressionLevel; -import ru.olegcherednik.zip4jvm.model.settings.ZipEntrySettings; import ru.olegcherednik.zip4jvm.model.settings.ZipSettings; import org.testng.annotations.AfterClass; @@ -58,11 +56,8 @@ public static void removeDir() throws IOException { @Test public void shouldCreateNewZipWithFolder() throws IOException { - ZipEntrySettings entrySettings = ZipEntrySettings.builder() - .compression(Compression.DEFLATE, CompressionLevel.NORMAL) - .build(); ZipSettings settings = ZipSettings.builder() - .entrySettingsProvider(fileName -> entrySettings) + .entrySettings(Compression.DEFLATE) .splitSize(SIZE_1MB) .build(); diff --git a/src/test/java/ru/olegcherednik/zip4jvm/ZipIt64Test.java b/src/test/java/ru/olegcherednik/zip4jvm/ZipIt64Test.java index e6c450143..eb7b5bbe4 100644 --- a/src/test/java/ru/olegcherednik/zip4jvm/ZipIt64Test.java +++ b/src/test/java/ru/olegcherednik/zip4jvm/ZipIt64Test.java @@ -23,7 +23,6 @@ import ru.olegcherednik.zip4jvm.model.ExternalFileAttributes; import ru.olegcherednik.zip4jvm.model.ZipModel; import ru.olegcherednik.zip4jvm.model.builders.ZipModelBuilder; -import ru.olegcherednik.zip4jvm.model.settings.ZipEntrySettings; import ru.olegcherednik.zip4jvm.model.settings.ZipSettings; import ru.olegcherednik.zip4jvm.model.src.SrcZip; @@ -89,9 +88,8 @@ public void shouldUnzipWhenZip64() throws IOException { } public void shouldZipWhenZip64AndAesEncryption() throws IOException { - ZipEntrySettings entrySettings = ZipEntrySettings.builder().encryption(Encryption.AES_256, password).build(); ZipSettings settings = ZipSettings.builder() - .entrySettingsProvider(fileName -> entrySettings) + .entrySettings(Encryption.AES_256, password) .comment("password: " + passwordStr) .zip64(true).build(); diff --git a/src/test/java/ru/olegcherednik/zip4jvm/ZipItTest.java b/src/test/java/ru/olegcherednik/zip4jvm/ZipItTest.java index 07765731c..b621d8df8 100644 --- a/src/test/java/ru/olegcherednik/zip4jvm/ZipItTest.java +++ b/src/test/java/ru/olegcherednik/zip4jvm/ZipItTest.java @@ -19,8 +19,8 @@ package ru.olegcherednik.zip4jvm; import ru.olegcherednik.zip4jvm.model.Compression; -import ru.olegcherednik.zip4jvm.model.CompressionLevel; import ru.olegcherednik.zip4jvm.model.settings.ZipEntrySettings; +import ru.olegcherednik.zip4jvm.model.settings.ZipEntrySettingsProvider; import ru.olegcherednik.zip4jvm.model.settings.ZipSettings; import ru.olegcherednik.zip4jvm.utils.ReflectionUtils; @@ -37,16 +37,17 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy; import static ru.olegcherednik.zip4jvm.TestData.dirBikes; import static ru.olegcherednik.zip4jvm.TestData.dirCars; +import static ru.olegcherednik.zip4jvm.TestData.dirNameBikes; +import static ru.olegcherednik.zip4jvm.TestData.dirNameCars; import static ru.olegcherednik.zip4jvm.TestData.fileBentley; import static ru.olegcherednik.zip4jvm.TestData.fileHonda; import static ru.olegcherednik.zip4jvm.TestData.fileNameBentley; import static ru.olegcherednik.zip4jvm.TestData.fileNameHonda; import static ru.olegcherednik.zip4jvm.TestData.fileNameSaintPetersburg; import static ru.olegcherednik.zip4jvm.TestData.fileSaintPetersburg; -import static ru.olegcherednik.zip4jvm.TestData.zipDirNameBikes; -import static ru.olegcherednik.zip4jvm.TestData.zipDirNameCars; import static ru.olegcherednik.zip4jvm.TestDataAssert.dirBikesAssert; import static ru.olegcherednik.zip4jvm.TestDataAssert.dirCarsAssert; +import static ru.olegcherednik.zip4jvm.TestDataAssert.fileBentleyAssert; import static ru.olegcherednik.zip4jvm.assertj.Zip4jvmAssertions.assertThatDirectory; import static ru.olegcherednik.zip4jvm.assertj.Zip4jvmAssertions.assertThatZipFile; @@ -79,7 +80,7 @@ public void shouldCreateZipWhenAddRegularFileDefaultSettings() throws IOExceptio ZipIt.zip(defSingleZip).add(fileBentley); assertThatDirectory(defSingleZip.getParent()).exists().hasOnlyRegularFiles(1); assertThatZipFile(defSingleZip).root().hasOnlyRegularFiles(1); - assertThatZipFile(defSingleZip).regularFile(fileNameBentley).exists().hasSize(1_395_362); + assertThatZipFile(defSingleZip).regularFile(fileNameBentley).matches(fileBentleyAssert); } public void shouldCreateZipWhenAddDirectoryDefaultSettings() throws IOException { @@ -88,7 +89,7 @@ public void shouldCreateZipWhenAddDirectoryDefaultSettings() throws IOException ZipIt.zip(zip).add(dirCars); assertThatDirectory(zip.getParent()).exists().hasOnlyRegularFiles(1); assertThatZipFile(zip).root().hasEntries(1).hasDirectories(1); - assertThatZipFile(zip).directory(zipDirNameCars).matches(dirCarsAssert); + assertThatZipFile(zip).directory(dirNameCars).matches(dirCarsAssert); } @Test(dependsOnMethods = "shouldCreateZipWhenAddRegularFileDefaultSettings") @@ -96,7 +97,7 @@ public void shouldAddRegularFileWhenZipExistsDefaultSettings() throws IOExceptio ZipIt.zip(defSingleZip).add(fileSaintPetersburg); assertThatDirectory(defSingleZip.getParent()).exists().hasOnlyRegularFiles(1); assertThatZipFile(defSingleZip).root().hasOnlyRegularFiles(2); - assertThatZipFile(defSingleZip).regularFile(fileNameBentley).exists().hasSize(1_395_362); + assertThatZipFile(defSingleZip).regularFile(fileNameBentley).exists().matches(fileBentleyAssert); assertThatZipFile(defSingleZip).regularFile(fileNameSaintPetersburg).exists().hasSize(1_074_836); } @@ -105,9 +106,9 @@ public void shouldAddDirectoryWhenZipExistsDefaultSettings() throws IOException ZipIt.zip(defSingleZip).add(dirCars); assertThatDirectory(defSingleZip.getParent()).exists().hasOnlyRegularFiles(1); assertThatZipFile(defSingleZip).root().hasEntries(3).hasDirectories(1).hasRegularFiles(2); - assertThatZipFile(defSingleZip).regularFile(fileNameBentley).exists().hasSize(1_395_362); + assertThatZipFile(defSingleZip).regularFile(fileNameBentley).exists().matches(fileBentleyAssert); assertThatZipFile(defSingleZip).regularFile(fileNameSaintPetersburg).exists().hasSize(1_074_836); - assertThatZipFile(defSingleZip).directory(zipDirNameCars).matches(dirCarsAssert); + assertThatZipFile(defSingleZip).directory(dirNameCars).matches(dirCarsAssert); } public void shouldCreateZipWhenAddRegularFilesAndDirectoriesAndDefaultSettings() throws IOException { @@ -115,7 +116,7 @@ public void shouldCreateZipWhenAddRegularFilesAndDirectoriesAndDefaultSettings() assertThatDirectory(defMultiZip.getParent()).exists().hasOnlyRegularFiles(1); assertThatZipFile(defMultiZip).root().hasEntries(2).hasDirectories(1).hasRegularFiles(1); assertThatZipFile(defMultiZip).regularFile(fileNameHonda).exists().hasSize(154_591); - assertThatZipFile(defMultiZip).directory(zipDirNameCars).matches(dirCarsAssert); + assertThatZipFile(defMultiZip).directory(dirNameCars).matches(dirCarsAssert); } @Test(dependsOnMethods = "shouldCreateZipWhenAddRegularFilesAndDirectoriesAndDefaultSettings") @@ -125,8 +126,8 @@ public void shouldAddRegularFilesAndDirectoriesWhenZipExistsDefaultSettings() th assertThatZipFile(defMultiZip).root().hasEntries(4).hasDirectories(2).hasRegularFiles(2); assertThatZipFile(defMultiZip).regularFile(fileNameHonda).exists().hasSize(154_591); assertThatZipFile(defMultiZip).regularFile(fileNameSaintPetersburg).exists().hasSize(1_074_836); - assertThatZipFile(defMultiZip).directory(zipDirNameCars).matches(dirCarsAssert); - assertThatZipFile(defMultiZip).directory(zipDirNameBikes).matches(dirBikesAssert); + assertThatZipFile(defMultiZip).directory(dirNameCars).matches(dirCarsAssert); + assertThatZipFile(defMultiZip).directory(dirNameBikes).matches(dirBikesAssert); } public void shouldThrowExceptionWhenAddNullPathAndDefaultSettings() { @@ -135,99 +136,74 @@ public void shouldThrowExceptionWhenAddNullPathAndDefaultSettings() { } public void shouldThrowExceptionWhenAddNullPathAndCustomSettings() { - ZipEntrySettings entrySettings = ZipEntrySettings.builder().compression(Compression.STORE, - CompressionLevel.NORMAL).build(); - ZipSettings settings = ZipSettings.builder().entrySettingsProvider(fileName -> entrySettings).build(); - assertThatThrownBy(() -> ZipIt.zip(customSingleZip).settings(settings).add((Path) null)).isExactlyInstanceOf( + assertThatThrownBy(() -> ZipIt.zip(customSingleZip) + .settings(ZipSettings.of(Compression.STORE)) + .add((Path) null)).isExactlyInstanceOf( IllegalArgumentException.class); } public void shouldCreateZipWhenAddRegularFileAndCustomSettings() throws IOException { - ZipEntrySettings entrySettings = ZipEntrySettings.builder().compression(Compression.STORE, - CompressionLevel.NORMAL).build(); - ZipSettings settings = ZipSettings.builder().entrySettingsProvider(fileName -> entrySettings).build(); - - ZipIt.zip(customSingleZip).settings(settings).add(fileBentley); + ZipIt.zip(customSingleZip).settings(ZipSettings.of(Compression.STORE)).add(fileBentley); assertThatDirectory(customSingleZip.getParent()).exists().hasOnlyRegularFiles(1); assertThatZipFile(customSingleZip).root().hasOnlyRegularFiles(1); - assertThatZipFile(customSingleZip).regularFile(fileNameBentley).exists().hasSize(1_395_362); + assertThatZipFile(customSingleZip).regularFile(fileNameBentley).matches(fileBentleyAssert); } public void shouldCreateZipWhenAddDirectoryAndCustomSettings() throws IOException { - ZipEntrySettings entrySettings = ZipEntrySettings.builder().compression(Compression.STORE, - CompressionLevel.NORMAL).build(); - ZipSettings settings = ZipSettings.builder().entrySettingsProvider(fileName -> entrySettings).build(); - Path zip = Zip4jvmSuite.subDirNameAsMethodName(rootDir).resolve("src.zip"); - - ZipIt.zip(zip).settings(settings).add(dirCars); + ZipIt.zip(zip).settings(ZipSettings.of(Compression.STORE)).add(dirCars); assertThatDirectory(zip.getParent()).exists().hasOnlyRegularFiles(1); assertThatZipFile(zip).root().hasEntries(1).hasDirectories(1); - assertThatZipFile(zip).directory(zipDirNameCars).matches(dirCarsAssert); + assertThatZipFile(zip).directory(dirNameCars).matches(dirCarsAssert); } @Test(dependsOnMethods = "shouldCreateZipWhenAddRegularFileAndCustomSettings") public void shouldAddRegularFileWhenZipExistsCustomSettings() throws IOException { - ZipEntrySettings entrySettings = ZipEntrySettings.builder().compression(Compression.STORE, - CompressionLevel.NORMAL).build(); - ZipSettings settings = ZipSettings.builder().entrySettingsProvider(fileName -> entrySettings).build(); - - ZipIt.zip(customSingleZip).settings(settings).add(fileSaintPetersburg); + ZipIt.zip(customSingleZip).settings(ZipSettings.of(Compression.STORE)).add(fileSaintPetersburg); assertThatDirectory(customSingleZip.getParent()).exists().hasOnlyRegularFiles(1); assertThatZipFile(customSingleZip).root().hasEntries(2).hasRegularFiles(2); - assertThatZipFile(customSingleZip).regularFile(fileNameBentley).exists().hasSize(1_395_362); + assertThatZipFile(customSingleZip).regularFile(fileNameBentley).exists().matches(fileBentleyAssert); assertThatZipFile(customSingleZip).regularFile(fileNameSaintPetersburg).exists().hasSize(1_074_836); } @Test(dependsOnMethods = "shouldAddRegularFileWhenZipExistsCustomSettings") public void shouldAddDirectoryWhenZipExistsCustomSettings() throws IOException { - ZipEntrySettings entrySettings = ZipEntrySettings.builder().compression(Compression.STORE, - CompressionLevel.NORMAL).build(); - ZipSettings settings = ZipSettings.builder().entrySettingsProvider(fileName -> entrySettings).build(); - - ZipIt.zip(customSingleZip).settings(settings).add(dirCars); + ZipIt.zip(customSingleZip).settings(ZipSettings.of(Compression.STORE)).add(dirCars); assertThatDirectory(customSingleZip.getParent()).exists().hasOnlyRegularFiles(1); assertThatZipFile(customSingleZip).root().hasEntries(3).hasDirectories(1).hasRegularFiles(2); - assertThatZipFile(customSingleZip).regularFile(fileNameBentley).exists().hasSize(1_395_362); + assertThatZipFile(customSingleZip).regularFile(fileNameBentley).matches(fileBentleyAssert); assertThatZipFile(customSingleZip).regularFile(fileNameSaintPetersburg).exists().hasSize(1_074_836); - assertThatZipFile(customSingleZip).directory(zipDirNameCars).matches(dirCarsAssert); + assertThatZipFile(customSingleZip).directory(dirNameCars).matches(dirCarsAssert); } public void shouldCreateZipWhenAddRegularFilesAndDirectoriesAndCustomSettings() throws IOException { - ZipEntrySettings entrySettings = ZipEntrySettings.builder().compression(Compression.STORE, - CompressionLevel.NORMAL).build(); - ZipSettings settings = ZipSettings.builder().entrySettingsProvider(fileName -> entrySettings).build(); - - ZipIt.zip(customMultiZip).settings(settings).add(Arrays.asList(fileHonda, dirCars)); + ZipIt.zip(customMultiZip).settings(ZipSettings.of(Compression.STORE)).add(Arrays.asList(fileHonda, dirCars)); assertThatDirectory(customMultiZip.getParent()).exists().hasOnlyRegularFiles(1); assertThatZipFile(customMultiZip).root().hasEntries(2).hasDirectories(1).hasRegularFiles(1); assertThatZipFile(customMultiZip).regularFile(fileNameHonda).exists().hasSize(154_591); - assertThatZipFile(customMultiZip).directory(zipDirNameCars).matches(dirCarsAssert); + assertThatZipFile(customMultiZip).directory(dirNameCars).matches(dirCarsAssert); } @Test(dependsOnMethods = "shouldCreateZipWhenAddRegularFilesAndDirectoriesAndCustomSettings") public void shouldAddRegularFilesAndDirectoriesWhenZipExistsCustomSettings() throws IOException { - ZipEntrySettings entrySettings = ZipEntrySettings.builder().compression(Compression.STORE, - CompressionLevel.NORMAL).build(); - ZipSettings settings = ZipSettings.builder().entrySettingsProvider(fileName -> entrySettings).build(); - - ZipIt.zip(customMultiZip).settings(settings).add(Arrays.asList(fileSaintPetersburg, dirBikes)); + ZipIt.zip(customMultiZip).settings(ZipSettings.of(Compression.STORE)) + .add(Arrays.asList(fileSaintPetersburg, dirBikes)); assertThatDirectory(customMultiZip.getParent()).exists().hasOnlyRegularFiles(1); assertThatZipFile(customMultiZip).root().hasEntries(4).hasDirectories(2).hasRegularFiles(2); assertThatZipFile(customMultiZip).regularFile(fileNameHonda).exists().hasSize(154_591); assertThatZipFile(customMultiZip).regularFile(fileNameSaintPetersburg).exists().hasSize(1_074_836); - assertThatZipFile(customMultiZip).directory(zipDirNameCars).matches(dirCarsAssert); - assertThatZipFile(customMultiZip).directory(zipDirNameBikes).matches(dirBikesAssert); + assertThatZipFile(customMultiZip).directory(dirNameCars).matches(dirCarsAssert); + assertThatZipFile(customMultiZip).directory(dirNameBikes).matches(dirBikesAssert); } public void shouldCreateZipWhenAddRegularFileDefaultSettingsZipEntry() throws IOException { try (ZipFile.Writer zipFile = ZipIt.zip(defEntryZip).open()) { - zipFile.add(fileBentley, "foo.jpg"); + zipFile.addWithRename(fileBentley, "foo.jpg"); } assertThatDirectory(defEntryZip.getParent()).exists().hasOnlyRegularFiles(1); assertThatZipFile(defEntryZip).root().hasOnlyRegularFiles(1); - assertThatZipFile(defEntryZip).regularFile("foo.jpg").exists().hasSize(1_395_362); + assertThatZipFile(defEntryZip).regularFile("foo.jpg").matches(fileBentleyAssert); } public void shouldUseDefaultZipSettingsWhenSetNull() throws NoSuchFieldException, IllegalAccessException { @@ -244,15 +220,14 @@ public void shouldUseDefaultZipSettingsWhenSetNull() throws NoSuchFieldException public void shouldUseDefaultZipEntrySettingsWhenSetNull() throws NoSuchFieldException, IllegalAccessException { ZipIt zipIt = ZipIt.zip(defEntryZip); - assertThat(getSettings(zipIt).getEntrySettingsProvider()).isSameAs(ZipEntrySettings.DEFAULT_PROVIDER); + assertThat(getSettings(zipIt).getEntrySettingsProvider()).isSameAs(ZipEntrySettingsProvider.DEFAULT); - ZipEntrySettings entrySettings = ZipEntrySettings.builder().compression(Compression.STORE, - CompressionLevel.NORMAL).build(); + ZipEntrySettings entrySettings = ZipEntrySettings.of(Compression.STORE); zipIt.entrySettings(entrySettings); - assertThat(getSettings(zipIt).getEntrySettingsProvider().apply("aa")).isSameAs(entrySettings); + assertThat(getSettings(zipIt).getEntrySettings("aa")).isSameAs(entrySettings); zipIt.entrySettings((ZipEntrySettings) null); - assertThat(getSettings(zipIt).getEntrySettingsProvider()).isSameAs(ZipEntrySettings.DEFAULT_PROVIDER); + assertThat(getSettings(zipIt).getEntrySettingsProvider()).isSameAs(ZipEntrySettingsProvider.DEFAULT); } private static ZipSettings getSettings(ZipIt zipIt) throws NoSuchFieldException, IllegalAccessException { diff --git a/src/test/java/ru/olegcherednik/zip4jvm/ZipMiscTest.java b/src/test/java/ru/olegcherednik/zip4jvm/ZipMiscTest.java index 99a2b5eea..d4c6a8767 100644 --- a/src/test/java/ru/olegcherednik/zip4jvm/ZipMiscTest.java +++ b/src/test/java/ru/olegcherednik/zip4jvm/ZipMiscTest.java @@ -22,8 +22,6 @@ import ru.olegcherednik.zip4jvm.exception.EntryNotFoundException; import ru.olegcherednik.zip4jvm.exception.PathNotExistsException; import ru.olegcherednik.zip4jvm.model.Compression; -import ru.olegcherednik.zip4jvm.model.CompressionLevel; -import ru.olegcherednik.zip4jvm.model.settings.ZipEntrySettings; import ru.olegcherednik.zip4jvm.model.settings.ZipSettings; import org.testng.annotations.AfterClass; @@ -93,14 +91,7 @@ public void shouldRetrieveAllEntryNamesForExistedEncryptedZip() throws IOExcepti } public void shouldThrowExceptionWhenAddedFileNotExists() throws IOException { - ZipSettings settings = ZipSettings - .builder() - .entrySettingsProvider(fileName -> - ZipEntrySettings.builder() - .compression(Compression.STORE, - CompressionLevel.NORMAL) - .build()) - .build(); + ZipSettings settings = ZipSettings.of(Compression.STORE); Path notExisted = dirCars.resolve(UUID.randomUUID().toString()); List files = Arrays.asList(fileBentley, fileFerrari, fileWiesmann, notExisted); @@ -128,15 +119,10 @@ public void shouldRetrieveTrueWhenSplitZipWithMultipleDisks() throws IOException } public void shouldRetrieveTrueWhenSplitZipWithOneDisk() throws IOException { - ZipSettings settings = ZipSettings - .builder() - .splitSize(SIZE_1MB) - .entrySettingsProvider(fileName -> - ZipEntrySettings.builder() - .compression(Compression.STORE, - CompressionLevel.NORMAL) - .build()) - .build(); + ZipSettings settings = ZipSettings.builder() + .entrySettings(Compression.STORE) + .splitSize(SIZE_1MB) + .build(); Path zip = Zip4jvmSuite.subDirNameAsMethodName(rootDir).resolve(fileNameZipSrc); ZipIt.zip(zip).settings(settings).add(Collections.singleton(fileOlegCherednik)); diff --git a/src/test/java/ru/olegcherednik/zip4jvm/ZipSpecialTest.java b/src/test/java/ru/olegcherednik/zip4jvm/ZipSpecialTest.java new file mode 100644 index 000000000..0bd9b8167 --- /dev/null +++ b/src/test/java/ru/olegcherednik/zip4jvm/ZipSpecialTest.java @@ -0,0 +1,112 @@ +/* + * 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 ru.olegcherednik.zip4jvm; + +import ru.olegcherednik.zip4jvm.model.Encryption; +import ru.olegcherednik.zip4jvm.model.settings.ZipEntrySettings; +import ru.olegcherednik.zip4jvm.model.settings.ZipEntrySettingsProvider; +import ru.olegcherednik.zip4jvm.model.settings.ZipSettings; + +import org.testng.annotations.Test; + +import java.io.IOException; +import java.nio.file.Path; + +import static ru.olegcherednik.zip4jvm.TestData.dirCars; +import static ru.olegcherednik.zip4jvm.TestData.fileBentley; +import static ru.olegcherednik.zip4jvm.TestData.fileNameBentley; +import static ru.olegcherednik.zip4jvm.TestDataAssert.dirCarsAssert; +import static ru.olegcherednik.zip4jvm.TestDataAssert.fileBentleyAssert; +import static ru.olegcherednik.zip4jvm.assertj.Zip4jvmAssertions.assertThatDirectory; +import static ru.olegcherednik.zip4jvm.assertj.Zip4jvmAssertions.assertThatZipFile; + +/** + * @author Oleg Cherednik + * @since 20.10.2024 + */ +@Test +@SuppressWarnings("FieldNamingConvention") +public class ZipSpecialTest { + + private static final Path rootDir = Zip4jvmSuite.generateSubDirNameWithTime(ZipSpecialTest.class); + + public void shouldAddRegularFileWhenSameNameAndDifferentDestPath() throws IOException { + final char[] one = "1".toCharArray(); + final char[] two = "2".toCharArray(); + + final String oneEntryName = "one/" + fileNameBentley; + final String twoEntryName = "two/" + fileNameBentley; + final String threeEntryName = "three/" + fileNameBentley; + + ZipSettings settings = + ZipSettings.builder() + .entrySettingsProvider(ZipEntrySettingsProvider.of(entryName -> { + if (entryName.equals(oneEntryName)) + return ZipEntrySettings.of(Encryption.AES_256, one); + if (entryName.equals(twoEntryName)) + return ZipEntrySettings.of(Encryption.AES_256, two); + return null; + })).build(); + + Path zip = Zip4jvmSuite.subDirNameAsMethodName(rootDir).resolve("src.zip"); + + try (ZipFile.Writer zipFile = ZipFile.writer(zip, settings)) { + zipFile.addWithMove(fileBentley, "one"); + zipFile.addWithMove(fileBentley, "two"); + zipFile.addWithMove(fileBentley, "three"); + } + + assertThatDirectory(zip.getParent()).exists().hasOnlyRegularFiles(1); + assertThatZipFile(zip).root().hasEntries(3).hasDirectories(3).hasRegularFiles(0); + assertThatZipFile(zip, one).regularFile(oneEntryName).matches(fileBentleyAssert); + assertThatZipFile(zip, two).regularFile(twoEntryName).matches(fileBentleyAssert); + assertThatZipFile(zip).regularFile(threeEntryName).matches(fileBentleyAssert); + } + + public void shouldAddDirectoryWhenSameNameAndDifferentDestPath() throws IOException { + final char[] one = "1".toCharArray(); + final char[] two = "2".toCharArray(); + + ZipSettings settings = ZipSettings.builder() + .entrySettingsProvider(ZipEntrySettingsProvider.of(entryName -> { + if (entryName.startsWith("one/")) + return ZipEntrySettings.of(Encryption.AES_256, one); + if (entryName.startsWith("two/")) + return ZipEntrySettings.of(Encryption.AES_256, two); + return null; + })) + .removeRootDir(true) + .build(); + + Path zip = Zip4jvmSuite.subDirNameAsMethodName(rootDir).resolve("src.zip"); + + try (ZipFile.Writer zipFile = ZipFile.writer(zip, settings)) { + zipFile.addWithMove(dirCars, "one"); + zipFile.addWithMove(dirCars, "two"); + zipFile.addWithMove(dirCars, "three"); + } + + assertThatDirectory(zip.getParent()).exists().hasOnlyRegularFiles(1); + assertThatZipFile(zip).root().hasEntries(3).hasDirectories(3).hasRegularFiles(0); + assertThatZipFile(zip, one).directory("one").matches(dirCarsAssert); + assertThatZipFile(zip, two).directory("two").matches(dirCarsAssert); + assertThatZipFile(zip).directory("three").matches(dirCarsAssert); + } + +} diff --git a/src/test/java/ru/olegcherednik/zip4jvm/assertj/ZipEntryDirectoryAssert.java b/src/test/java/ru/olegcherednik/zip4jvm/assertj/ZipEntryDirectoryAssert.java index 9117f0981..c929659e6 100644 --- a/src/test/java/ru/olegcherednik/zip4jvm/assertj/ZipEntryDirectoryAssert.java +++ b/src/test/java/ru/olegcherednik/zip4jvm/assertj/ZipEntryDirectoryAssert.java @@ -97,6 +97,8 @@ public ZipEntryDirectoryAssert hasSymlinks(int expected) { @Override public ZipEntryDirectoryAssert directory(String name) { + if (!name.endsWith("/")) + name += '/'; return new ZipEntryDirectoryAssert(getEntry(name), zipFile); } diff --git a/src/test/java/ru/olegcherednik/zip4jvm/assertj/ZipFileAssert.java b/src/test/java/ru/olegcherednik/zip4jvm/assertj/ZipFileAssert.java index 45e330209..ad63cb86f 100644 --- a/src/test/java/ru/olegcherednik/zip4jvm/assertj/ZipFileAssert.java +++ b/src/test/java/ru/olegcherednik/zip4jvm/assertj/ZipFileAssert.java @@ -42,6 +42,9 @@ public ZipEntryDirectoryAssert root() { } public ZipEntryDirectoryAssert directory(String name) { + if (!name.endsWith("/")) + name += '/'; + ZipArchiveEntry entry = new ZipArchiveEntry(name); if (!entry.isDirectory()) diff --git a/src/test/java/ru/olegcherednik/zip4jvm/assertj/ZipFileDecorator.java b/src/test/java/ru/olegcherednik/zip4jvm/assertj/ZipFileDecorator.java index a22c46c4c..abac2403e 100644 --- a/src/test/java/ru/olegcherednik/zip4jvm/assertj/ZipFileDecorator.java +++ b/src/test/java/ru/olegcherednik/zip4jvm/assertj/ZipFileDecorator.java @@ -38,7 +38,7 @@ * @author Oleg Cherednik * @since 27.03.2019 */ -abstract class ZipFileDecorator { +public abstract class ZipFileDecorator { protected static final String SLASH = "/"; protected static final char SLASH_CHAR = '/'; diff --git a/src/test/java/ru/olegcherednik/zip4jvm/assertj/ZipFileSolidNoEncryptedDecorator.java b/src/test/java/ru/olegcherednik/zip4jvm/assertj/ZipFileSolidNoEncryptedDecorator.java index e1238a35c..e6e40e293 100644 --- a/src/test/java/ru/olegcherednik/zip4jvm/assertj/ZipFileSolidNoEncryptedDecorator.java +++ b/src/test/java/ru/olegcherednik/zip4jvm/assertj/ZipFileSolidNoEncryptedDecorator.java @@ -98,7 +98,10 @@ else if (zipEntry.getMethod() == ZipMethod.LZMA.getCode()) { assertThat(total).isEqualTo(decompressed.length); delegate = new ByteArrayInputStream(decompressed); - } else + } else if (zipEntry.getMethod() == ZipMethod.AES_ENCRYPTED.getCode()) + throw new UnsupportedOperationException( + "ZipEntry password id not correct: " + zipEntry.getName()); + else throw new UnsupportedOperationException("ZipEntry data can't be read: " + zipEntry.getName()); } diff --git a/src/test/java/ru/olegcherednik/zip4jvm/compression/CompressionBzip2Test.java b/src/test/java/ru/olegcherednik/zip4jvm/compression/CompressionBzip2Test.java index 257c8e788..fab16d438 100644 --- a/src/test/java/ru/olegcherednik/zip4jvm/compression/CompressionBzip2Test.java +++ b/src/test/java/ru/olegcherednik/zip4jvm/compression/CompressionBzip2Test.java @@ -77,10 +77,9 @@ public void shouldCreateSingleZipWithFilesWhenBzip2CompressionNormalLevel() thro ZipEntrySettings entrySettings = ZipEntrySettings.builder() .compression(Compression.BZIP2, CompressionLevel.NORMAL) .lzmaEosMarker(true).build(); - ZipSettings settings = ZipSettings.builder().entrySettingsProvider(fileName -> entrySettings).build(); Path zip = Zip4jvmSuite.subDirNameAsMethodName(rootDir).resolve("src.zip"); - ZipIt.zip(zip).settings(settings).add(filesDirBikes); + ZipIt.zip(zip).settings(ZipSettings.of(entrySettings)).add(filesDirBikes); assertThatDirectory(zip.getParent()).exists().hasDirectories(0).hasRegularFiles(1); assertThatZipFile(zip).root().matches(dirBikesAssert); } @@ -89,18 +88,16 @@ public void shouldCreateSingleZipWithFilesWhenBzip2CompressionSuperFast() throws ZipEntrySettings entrySettings = ZipEntrySettings.builder() .compression(Compression.BZIP2, CompressionLevel.SUPER_FAST) .lzmaEosMarker(true).build(); - ZipSettings settings = ZipSettings.builder().entrySettingsProvider(fileName -> entrySettings).build(); Path zip = Zip4jvmSuite.subDirNameAsMethodName(rootDir).resolve("src.zip"); - ZipIt.zip(zip).settings(settings).add(filesDirBikes); + ZipIt.zip(zip).settings(ZipSettings.of(entrySettings)).add(filesDirBikes); assertThatDirectory(zip.getParent()).exists().hasDirectories(0).hasRegularFiles(1); assertThatZipFile(zip).root().matches(dirBikesAssert); } public void shouldUseCompressStoreWhenFileEmpty() throws IOException { - ZipEntrySettings entrySettings = ZipEntrySettings.builder().compression(Compression.BZIP2, - CompressionLevel.NORMAL).build(); - ZipSettings settings = ZipSettings.builder().entrySettingsProvider(fileName -> entrySettings).build(); + ZipEntrySettings entrySettings = ZipEntrySettings.of(Compression.BZIP2); + ZipSettings settings = ZipSettings.builder().entrySettings(entrySettings).build(); Path zip = Zip4jvmSuite.subDirNameAsMethodName(rootDir).resolve("src.zip"); diff --git a/src/test/java/ru/olegcherednik/zip4jvm/compression/CompressionDeflateTest.java b/src/test/java/ru/olegcherednik/zip4jvm/compression/CompressionDeflateTest.java index 950e4d441..a5326aa67 100644 --- a/src/test/java/ru/olegcherednik/zip4jvm/compression/CompressionDeflateTest.java +++ b/src/test/java/ru/olegcherednik/zip4jvm/compression/CompressionDeflateTest.java @@ -24,7 +24,6 @@ import ru.olegcherednik.zip4jvm.ZipIt; import ru.olegcherednik.zip4jvm.model.CentralDirectory; import ru.olegcherednik.zip4jvm.model.Compression; -import ru.olegcherednik.zip4jvm.model.CompressionLevel; import ru.olegcherednik.zip4jvm.model.CompressionMethod; import ru.olegcherednik.zip4jvm.model.settings.UnzipSettings; import ru.olegcherednik.zip4jvm.model.settings.ZipEntrySettings; @@ -41,6 +40,7 @@ import static org.assertj.core.api.Assertions.assertThat; import static ru.olegcherednik.zip4jvm.TestData.dirBikes; import static ru.olegcherednik.zip4jvm.TestData.dirCars; +import static ru.olegcherednik.zip4jvm.TestData.dirNameBikes; import static ru.olegcherednik.zip4jvm.TestData.dirNameCars; import static ru.olegcherednik.zip4jvm.TestData.fileEmpty; import static ru.olegcherednik.zip4jvm.TestData.fileNameEmpty; @@ -49,8 +49,6 @@ import static ru.olegcherednik.zip4jvm.TestData.zipDeflateSolid; import static ru.olegcherednik.zip4jvm.TestData.zipDeflateSolidAes; import static ru.olegcherednik.zip4jvm.TestData.zipDeflateSolidPkware; -import static ru.olegcherednik.zip4jvm.TestData.zipDirNameBikes; -import static ru.olegcherednik.zip4jvm.TestData.zipDirNameCars; import static ru.olegcherednik.zip4jvm.TestDataAssert.dirBikesAssert; import static ru.olegcherednik.zip4jvm.TestDataAssert.dirCarsAssert; import static ru.olegcherednik.zip4jvm.TestDataAssert.rootAssert; @@ -81,10 +79,8 @@ public static void removeDir() throws IOException { } public void shouldCreateSingleZipWithFilesWhenDeflateCompression() throws IOException { - ZipEntrySettings entrySettings = ZipEntrySettings.builder() - .compression(Compression.DEFLATE, - CompressionLevel.NORMAL).build(); - ZipSettings settings = ZipSettings.builder().entrySettingsProvider(fileName -> entrySettings).build(); + ZipEntrySettings entrySettings = ZipEntrySettings.of(Compression.DEFLATE); + ZipSettings settings = ZipSettings.builder().entrySettings(entrySettings).build(); Path zip = Zip4jvmSuite.subDirNameAsMethodName(rootDir).resolve(fileNameZipSrc); @@ -94,9 +90,8 @@ public void shouldCreateSingleZipWithFilesWhenDeflateCompression() throws IOExce } public void shouldCreateSplitZipWithFilesWhenDeflateCompression() throws IOException { - ZipEntrySettings entrySettings = ZipEntrySettings.builder().compression(Compression.DEFLATE, - CompressionLevel.NORMAL).build(); - ZipSettings settings = ZipSettings.builder().entrySettingsProvider(fileName -> entrySettings) + ZipSettings settings = ZipSettings.builder() + .entrySettings(Compression.DEFLATE) .splitSize(SIZE_1MB).build(); Path zip = Zip4jvmSuite.subDirNameAsMethodName(rootDir).resolve(fileNameZipSrc); @@ -107,30 +102,24 @@ public void shouldCreateSplitZipWithFilesWhenDeflateCompression() throws IOExcep } public void shouldCreateSingleZipWithEntireFolderWhenDeflateCompression() throws IOException { - ZipEntrySettings entrySettings = ZipEntrySettings.builder().compression(Compression.DEFLATE, - CompressionLevel.NORMAL).build(); - ZipSettings settings = ZipSettings.builder().entrySettingsProvider(fileName -> entrySettings).build(); - Path zip = Zip4jvmSuite.subDirNameAsMethodName(rootDir).resolve(fileNameZipSrc); - ZipIt.zip(zip).settings(settings).add(dirBikes); + ZipIt.zip(zip).settings(ZipSettings.of(Compression.DEFLATE)).add(dirBikes); assertThatDirectory(zip.getParent()).exists().hasDirectories(0).hasRegularFiles(1); assertThatZipFile(zip).exists().root().hasDirectories(1).hasRegularFiles(0); - assertThatZipFile(zip).directory(zipDirNameBikes).matches(dirBikesAssert); + assertThatZipFile(zip).directory(dirNameBikes).matches(dirBikesAssert); } public void shouldCreateSplitZipWithEntireFolderWhenStoreCompression() throws IOException { - ZipEntrySettings entrySettings = ZipEntrySettings.builder().compression(Compression.STORE, - CompressionLevel.NORMAL).build(); - ZipSettings settings = ZipSettings.builder().entrySettingsProvider(fileName -> entrySettings) + ZipSettings settings = ZipSettings.builder() + .entrySettings(Compression.STORE) .splitSize(SIZE_1MB).build(); Path zip = Zip4jvmSuite.subDirNameAsMethodName(rootDir).resolve(fileNameZipSrc); - ZipIt.zip(zip).settings(settings).add(dirCars); assertThatDirectory(zip.getParent()).exists().hasDirectories(0).hasRegularFiles(3); assertThatZipFile(zip).root().hasDirectories(1).hasRegularFiles(0); - assertThatZipFile(zip).directory(zipDirNameCars).matches(dirCarsAssert); + assertThatZipFile(zip).directory(dirNameCars).matches(dirCarsAssert); } public void shouldUnzipWhenDeflateCompression() throws IOException { @@ -160,13 +149,8 @@ public void shouldUnzipWhenWhenDeflateCompressionAndAesEncryption() throws IOExc } public void shouldUseCompressStoreWhenFileEmpty() throws IOException { - ZipEntrySettings entrySettings = ZipEntrySettings.builder().compression(Compression.DEFLATE, - CompressionLevel.NORMAL).build(); - ZipSettings settings = ZipSettings.builder().entrySettingsProvider(fileName -> entrySettings).build(); - Path zip = Zip4jvmSuite.subDirNameAsMethodName(rootDir).resolve(fileNameZipSrc); - - ZipIt.zip(zip).settings(settings).add(fileEmpty); + ZipIt.zip(zip).settings(ZipSettings.of(Compression.DEFLATE)).add(fileEmpty); CentralDirectory.FileHeader fileHeader = ZipInfo.zip(zip).getFileHeader(fileNameEmpty); assertThat(fileHeader.getCompressionMethod()).isSameAs(CompressionMethod.STORE); } diff --git a/src/test/java/ru/olegcherednik/zip4jvm/compression/CompressionLzmaTest.java b/src/test/java/ru/olegcherednik/zip4jvm/compression/CompressionLzmaTest.java index 481edb432..baf4389db 100644 --- a/src/test/java/ru/olegcherednik/zip4jvm/compression/CompressionLzmaTest.java +++ b/src/test/java/ru/olegcherednik/zip4jvm/compression/CompressionLzmaTest.java @@ -69,11 +69,10 @@ public void shouldCreateSingleZipWithFilesWhenLzmaCompressionNormalLevelEosMarke ZipEntrySettings entrySettings = ZipEntrySettings.builder() .compression(Compression.LZMA, CompressionLevel.NORMAL) .lzmaEosMarker(true).build(); - ZipSettings settings = ZipSettings.builder().entrySettingsProvider(fileName -> entrySettings).build(); Path zip = Zip4jvmSuite.subDirNameAsMethodName(rootDir).resolve(fileNameZipSrc); - ZipIt.zip(zip).settings(settings).add(filesDirBikes); + ZipIt.zip(zip).settings(ZipSettings.of(entrySettings)).add(filesDirBikes); assertThatDirectory(zip.getParent()).exists().hasDirectories(0).hasRegularFiles(1); assertThatZipFile(zip).root().matches(dirBikesAssert); } @@ -82,11 +81,10 @@ public void shouldCreateSingleZipWithFilesWhenLzmaCompressionNormalLevelEosNoMar ZipEntrySettings entrySettings = ZipEntrySettings.builder() .compression(Compression.LZMA, CompressionLevel.NORMAL) .lzmaEosMarker(false).build(); - ZipSettings settings = ZipSettings.builder().entrySettingsProvider(fileName -> entrySettings).build(); Path zip = Zip4jvmSuite.subDirNameAsMethodName(rootDir).resolve(fileNameZipSrc); - ZipIt.zip(zip).settings(settings).add(filesDirBikes); + ZipIt.zip(zip).settings(ZipSettings.of(entrySettings)).add(filesDirBikes); assertThatDirectory(zip.getParent()).exists().hasDirectories(0).hasRegularFiles(1); assertThatZipFile(zip).root().matches(dirBikesAssert); } @@ -95,11 +93,10 @@ public void shouldCreateSingleZipWithFilesWhenLzmaCompressionSuperFastLevelEosMa ZipEntrySettings entrySettings = ZipEntrySettings.builder() .compression(Compression.LZMA, CompressionLevel.SUPER_FAST) .lzmaEosMarker(true).build(); - ZipSettings settings = ZipSettings.builder().entrySettingsProvider(fileName -> entrySettings).build(); Path zip = Zip4jvmSuite.subDirNameAsMethodName(rootDir).resolve(fileNameZipSrc); - ZipIt.zip(zip).settings(settings).add(filesDirBikes); + ZipIt.zip(zip).settings(ZipSettings.of(entrySettings)).add(filesDirBikes); assertThatDirectory(zip.getParent()).exists().hasDirectories(0).hasRegularFiles(1); assertThatZipFile(zip).root().matches(dirBikesAssert); } @@ -108,23 +105,17 @@ public void shouldCreateSingleZipWithFilesWhenLzmaCompressionSuperFastLevelNoEos ZipEntrySettings entrySettings = ZipEntrySettings.builder() .compression(Compression.LZMA, CompressionLevel.SUPER_FAST) .lzmaEosMarker(false).build(); - ZipSettings settings = ZipSettings.builder().entrySettingsProvider(fileName -> entrySettings).build(); Path zip = Zip4jvmSuite.subDirNameAsMethodName(rootDir).resolve(fileNameZipSrc); - ZipIt.zip(zip).settings(settings).add(filesDirBikes); + ZipIt.zip(zip).settings(ZipSettings.of(entrySettings)).add(filesDirBikes); assertThatDirectory(zip.getParent()).exists().hasDirectories(0).hasRegularFiles(1); assertThatZipFile(zip).root().matches(dirBikesAssert); } public void shouldUseCompressStoreWhenFileEmpty() throws IOException { - ZipEntrySettings entrySettings = ZipEntrySettings.builder().compression(Compression.LZMA, - CompressionLevel.NORMAL).build(); - ZipSettings settings = ZipSettings.builder().entrySettingsProvider(fileName -> entrySettings).build(); - Path zip = Zip4jvmSuite.subDirNameAsMethodName(rootDir).resolve(fileNameZipSrc); - - ZipIt.zip(zip).settings(settings).add(fileEmpty); + ZipIt.zip(zip).settings(ZipSettings.of(Compression.LZMA)).add(fileEmpty); CentralDirectory.FileHeader fileHeader = ZipInfo.zip(zip).getFileHeader(fileNameEmpty); assertThat(fileHeader.getCompressionMethod()).isSameAs(CompressionMethod.STORE); } diff --git a/src/test/java/ru/olegcherednik/zip4jvm/compression/CompressionStoreTest.java b/src/test/java/ru/olegcherednik/zip4jvm/compression/CompressionStoreTest.java index d47f54a9e..39be289f6 100644 --- a/src/test/java/ru/olegcherednik/zip4jvm/compression/CompressionStoreTest.java +++ b/src/test/java/ru/olegcherednik/zip4jvm/compression/CompressionStoreTest.java @@ -22,9 +22,7 @@ import ru.olegcherednik.zip4jvm.Zip4jvmSuite; import ru.olegcherednik.zip4jvm.ZipIt; import ru.olegcherednik.zip4jvm.model.Compression; -import ru.olegcherednik.zip4jvm.model.CompressionLevel; import ru.olegcherednik.zip4jvm.model.settings.UnzipSettings; -import ru.olegcherednik.zip4jvm.model.settings.ZipEntrySettings; import ru.olegcherednik.zip4jvm.model.settings.ZipSettings; import org.testng.annotations.AfterClass; @@ -39,7 +37,6 @@ import static ru.olegcherednik.zip4jvm.TestData.dirNameCars; import static ru.olegcherednik.zip4jvm.TestData.fileNameZipSrc; import static ru.olegcherednik.zip4jvm.TestData.filesDirCars; -import static ru.olegcherednik.zip4jvm.TestData.zipDirNameCars; import static ru.olegcherednik.zip4jvm.TestData.zipStoreSolid; import static ru.olegcherednik.zip4jvm.TestData.zipStoreSolidAes; import static ru.olegcherednik.zip4jvm.TestData.zipStoreSolidPkware; @@ -73,23 +70,14 @@ public static void removeDir() throws IOException { } public void shouldCreateSingleZipWithFilesWhenStoreCompression() throws IOException { - ZipEntrySettings entrySettings = ZipEntrySettings.builder().compression(Compression.STORE, - CompressionLevel.NORMAL).build(); - ZipSettings settings = ZipSettings.builder().entrySettingsProvider(fileName -> entrySettings).build(); - Path zip = Zip4jvmSuite.subDirNameAsMethodName(rootDir).resolve(fileNameZipSrc); - - ZipIt.zip(zip).settings(settings).add(filesDirCars); + ZipIt.zip(zip).settings(ZipSettings.of(Compression.STORE)).add(filesDirCars); assertThatDirectory(zip.getParent()).exists().hasDirectories(0).hasRegularFiles(1); assertThatZipFile(zip).root().matches(dirCarsAssert); } public void shouldCreateSplitZipWithFilesWhenStoreCompression() throws IOException { - ZipEntrySettings entrySettings = ZipEntrySettings.builder().compression(Compression.STORE, - CompressionLevel.NORMAL).build(); - ZipSettings settings = ZipSettings.builder().entrySettingsProvider(fileName -> entrySettings) - .splitSize(SIZE_1MB).build(); - + ZipSettings settings = ZipSettings.builder().entrySettings(Compression.STORE).splitSize(SIZE_1MB).build(); Path zip = Zip4jvmSuite.subDirNameAsMethodName(rootDir).resolve(fileNameZipSrc); ZipIt.zip(zip).settings(settings).add(filesDirCars); @@ -98,22 +86,17 @@ public void shouldCreateSplitZipWithFilesWhenStoreCompression() throws IOExcepti } public void shouldCreateSingleZipWithEntireFolderWhenStoreCompression() throws IOException { - ZipEntrySettings entrySettings = ZipEntrySettings.builder().compression(Compression.STORE, - CompressionLevel.NORMAL).build(); - ZipSettings settings = ZipSettings.builder().entrySettingsProvider(fileName -> entrySettings).build(); - Path zip = Zip4jvmSuite.subDirNameAsMethodName(rootDir).resolve(fileNameZipSrc); - ZipIt.zip(zip).settings(settings).add(dirCars); + ZipIt.zip(zip).settings(ZipSettings.of(Compression.STORE)).add(dirCars); assertThatDirectory(zip.getParent()).exists().hasDirectories(0).hasRegularFiles(1); assertThatZipFile(zip).exists().root().hasDirectories(1).hasRegularFiles(0); - assertThatZipFile(zip).directory(zipDirNameCars).matches(dirCarsAssert); + assertThatZipFile(zip).directory(dirNameCars).matches(dirCarsAssert); } public void shouldCreateSplitZipWithEntireFolderWhenStoreCompression() throws IOException { - ZipEntrySettings entrySettings = ZipEntrySettings.builder().compression(Compression.STORE, - CompressionLevel.NORMAL).build(); - ZipSettings settings = ZipSettings.builder().entrySettingsProvider(fileName -> entrySettings) + ZipSettings settings = ZipSettings.builder() + .entrySettings(Compression.STORE) .splitSize(SIZE_1MB).build(); Path zip = Zip4jvmSuite.subDirNameAsMethodName(rootDir).resolve(fileNameZipSrc); @@ -121,7 +104,7 @@ public void shouldCreateSplitZipWithEntireFolderWhenStoreCompression() throws IO ZipIt.zip(zip).settings(settings).add(dirCars); assertThatDirectory(zip.getParent()).exists().hasDirectories(0).hasRegularFiles(3); assertThatZipFile(zip).root().hasDirectories(1).hasRegularFiles(0); - assertThatZipFile(zip).directory(zipDirNameCars).matches(dirCarsAssert); + assertThatZipFile(zip).directory(dirNameCars).matches(dirCarsAssert); } public void shouldUnzipWhenStoreCompression() throws IOException { diff --git a/src/test/java/ru/olegcherednik/zip4jvm/compression/CompressionZstdTest.java b/src/test/java/ru/olegcherednik/zip4jvm/compression/CompressionZstdTest.java index 2830b6e66..a313bfbff 100644 --- a/src/test/java/ru/olegcherednik/zip4jvm/compression/CompressionZstdTest.java +++ b/src/test/java/ru/olegcherednik/zip4jvm/compression/CompressionZstdTest.java @@ -23,9 +23,7 @@ import ru.olegcherednik.zip4jvm.ZipIt; import ru.olegcherednik.zip4jvm.model.CentralDirectory; import ru.olegcherednik.zip4jvm.model.Compression; -import ru.olegcherednik.zip4jvm.model.CompressionLevel; import ru.olegcherednik.zip4jvm.model.CompressionMethod; -import ru.olegcherednik.zip4jvm.model.settings.ZipEntrySettings; import ru.olegcherednik.zip4jvm.model.settings.ZipSettings; import org.testng.annotations.AfterClass; @@ -65,26 +63,15 @@ public static void removeDir() throws IOException { } public void shouldCreateSingleZipWithFilesWhenZstdCompressionNormalLevel() throws IOException { - ZipEntrySettings entrySettings = ZipEntrySettings.builder() - .compression(Compression.ZSTD, CompressionLevel.NORMAL) - .build(); - ZipSettings settings = ZipSettings.builder().entrySettingsProvider(fileName -> entrySettings).build(); - Path zip = Zip4jvmSuite.subDirNameAsMethodName(rootDir).resolve("src.zip"); - - ZipIt.zip(zip).settings(settings).add(filesDirBikes); + ZipIt.zip(zip).settings(ZipSettings.of(Compression.ZSTD)).add(filesDirBikes); assertThatDirectory(zip.getParent()).exists().hasDirectories(0).hasRegularFiles(1); assertThatZipFile(zip).root().matches(dirBikesAssert); } public void shouldUseCompressStoreWhenFileEmpty() throws IOException { - ZipEntrySettings entrySettings = ZipEntrySettings.builder().compression(Compression.ZSTD, - CompressionLevel.NORMAL).build(); - ZipSettings settings = ZipSettings.builder().entrySettingsProvider(fileName -> entrySettings).build(); - Path zip = Zip4jvmSuite.subDirNameAsMethodName(rootDir).resolve("src.zip"); - - ZipIt.zip(zip).settings(settings).add(fileEmpty); + ZipIt.zip(zip).settings(ZipSettings.of(Compression.ZSTD)).add(fileEmpty); CentralDirectory.FileHeader fileHeader = ZipInfo.zip(zip).getFileHeader(fileNameEmpty); assertThat(fileHeader.getCompressionMethod()).isSameAs(CompressionMethod.STORE); } diff --git a/src/test/java/ru/olegcherednik/zip4jvm/data/DefalteZipData.java b/src/test/java/ru/olegcherednik/zip4jvm/data/DefalteZipData.java index da7bc3c1c..06d44f6ac 100644 --- a/src/test/java/ru/olegcherednik/zip4jvm/data/DefalteZipData.java +++ b/src/test/java/ru/olegcherednik/zip4jvm/data/DefalteZipData.java @@ -20,9 +20,9 @@ import ru.olegcherednik.zip4jvm.ZipIt; import ru.olegcherednik.zip4jvm.model.Compression; -import ru.olegcherednik.zip4jvm.model.CompressionLevel; import ru.olegcherednik.zip4jvm.model.Encryption; import ru.olegcherednik.zip4jvm.model.settings.ZipEntrySettings; +import ru.olegcherednik.zip4jvm.model.settings.ZipEntrySettingsProvider; import ru.olegcherednik.zip4jvm.model.settings.ZipSettings; import lombok.AccessLevel; @@ -59,13 +59,7 @@ public static void createDeflateZip() throws IOException { } private static void createDeflateSolidZip() throws IOException { - ZipEntrySettings entrySettings = ZipEntrySettings.builder() - .compression(Compression.DEFLATE, - CompressionLevel.NORMAL) - .build(); - ZipSettings settings = ZipSettings.builder().entrySettingsProvider(fileName -> entrySettings).build(); - - ZipIt.zip(zipDeflateSolid).settings(settings).add(contentDirSrc); + ZipIt.zip(zipDeflateSolid).settings(ZipSettings.of(Compression.DEFLATE)).add(contentDirSrc); assertThat(Files.exists(zipDeflateSolid)).isTrue(); assertThat(Files.isRegularFile(zipDeflateSolid)).isTrue(); assertThatDirectory(zipDeflateSolid.getParent()).exists().hasDirectories(0).hasRegularFiles(1); @@ -73,10 +67,7 @@ private static void createDeflateSolidZip() throws IOException { } private static void createDeflateSplitZip() throws IOException { - ZipEntrySettings entrySettings = ZipEntrySettings.builder().compression(Compression.DEFLATE, - CompressionLevel.NORMAL).build(); - ZipSettings settings = ZipSettings.builder().entrySettingsProvider(fileName -> entrySettings) - .splitSize(SIZE_1MB).build(); + ZipSettings settings = ZipSettings.builder().entrySettings(Compression.DEFLATE).splitSize(SIZE_1MB).build(); ZipIt.zip(zipDeflateSplit).settings(settings).add(contentDirSrc); assertThat(Files.exists(zipDeflateSplit)).isTrue(); @@ -85,11 +76,9 @@ private static void createDeflateSplitZip() throws IOException { } private static void createDeflateSolidPkwareZip() throws IOException { - ZipEntrySettings entrySettings = ZipEntrySettings.builder() - .compression(Compression.DEFLATE, CompressionLevel.NORMAL) - .encryption(Encryption.PKWARE, password).build(); + ZipEntrySettings entrySettings = ZipEntrySettings.of(Compression.DEFLATE, Encryption.PKWARE, password); ZipSettings settings = ZipSettings.builder() - .entrySettingsProvider(fileName -> entrySettings) + .entrySettingsProvider(ZipEntrySettingsProvider.of(entrySettings)) // TODO temporary .comment("abcабвгдеёжзийклмнопрстуфхцчшщъыьэюя").build(); // .comment("password: " + passwordStr).build(); @@ -103,11 +92,10 @@ private static void createDeflateSolidPkwareZip() throws IOException { private static void createDeflateSolidAesZip() throws IOException { Function entrySettingsProvider = - fileName -> ZipEntrySettings.builder() - .compression(Compression.DEFLATE, CompressionLevel.NORMAL) - .encryption(Encryption.AES_256, fileName.toCharArray()).build(); - ZipSettings settings = ZipSettings.builder().entrySettingsProvider(entrySettingsProvider).comment( - "password: ").build(); + entryName -> ZipEntrySettings.of(Compression.DEFLATE, Encryption.AES_256, entryName.toCharArray()); + ZipSettings settings = ZipSettings.builder() + .entrySettingsProvider(ZipEntrySettingsProvider.of(entrySettingsProvider)) + .comment("password: ").build(); ZipIt.zip(zipDeflateSolidAes).settings(settings).add(contentDirSrc); assertThat(Files.exists(zipDeflateSolidAes)).isTrue(); diff --git a/src/test/java/ru/olegcherednik/zip4jvm/data/StoreZipData.java b/src/test/java/ru/olegcherednik/zip4jvm/data/StoreZipData.java index d0aa81fb2..0461235e7 100644 --- a/src/test/java/ru/olegcherednik/zip4jvm/data/StoreZipData.java +++ b/src/test/java/ru/olegcherednik/zip4jvm/data/StoreZipData.java @@ -20,9 +20,9 @@ import ru.olegcherednik.zip4jvm.ZipIt; import ru.olegcherednik.zip4jvm.model.Compression; -import ru.olegcherednik.zip4jvm.model.CompressionLevel; import ru.olegcherednik.zip4jvm.model.Encryption; import ru.olegcherednik.zip4jvm.model.settings.ZipEntrySettings; +import ru.olegcherednik.zip4jvm.model.settings.ZipEntrySettingsProvider; import ru.olegcherednik.zip4jvm.model.settings.ZipSettings; import lombok.AccessLevel; @@ -65,9 +65,8 @@ public static void createStoreZip() throws IOException { } private static void createStoreSolidZip() throws IOException { - ZipEntrySettings entrySettings = ZipEntrySettings.builder().compression(Compression.STORE, - CompressionLevel.NORMAL).build(); - ZipSettings settings = ZipSettings.builder().entrySettingsProvider(fileName -> entrySettings).build(); + ZipEntrySettings entrySettings = ZipEntrySettings.of(Compression.STORE); + ZipSettings settings = ZipSettings.builder().entrySettings(entrySettings).build(); ZipIt.zip(zipStoreSolid).settings(settings).add(contentDirSrc); @@ -78,9 +77,9 @@ private static void createStoreSolidZip() throws IOException { } private static void createStoreSplitZip() throws IOException { - ZipEntrySettings entrySettings = ZipEntrySettings.builder().compression(Compression.STORE, - CompressionLevel.NORMAL).build(); - ZipSettings settings = ZipSettings.builder().entrySettingsProvider(fileName -> entrySettings) + ZipEntrySettings entrySettings = ZipEntrySettings.of(Compression.STORE); + ZipSettings settings = ZipSettings.builder() + .entrySettings(entrySettings) .splitSize(SIZE_1MB).build(); ZipIt.zip(zipStoreSplit).settings(settings).add(contentDirSrc); @@ -91,11 +90,9 @@ private static void createStoreSplitZip() throws IOException { } private static void createStoreSolidPkwareZip() throws IOException { - ZipEntrySettings entrySettings = ZipEntrySettings.builder() - .compression(Compression.STORE, CompressionLevel.NORMAL) - .encryption(Encryption.PKWARE, password).build(); + ZipEntrySettings entrySettings = ZipEntrySettings.of(Compression.STORE, Encryption.PKWARE, password); ZipSettings settings = ZipSettings.builder() - .entrySettingsProvider(fileName -> entrySettings) + .entrySettings(entrySettings) .comment("password: " + passwordStr).build(); ZipIt.zip(zipStoreSolidPkware).settings(settings).add(contentDirSrc); @@ -107,11 +104,10 @@ private static void createStoreSolidPkwareZip() throws IOException { private static void createStoreSolidAesZip() throws IOException { Function entrySettingsProvider = - fileName -> ZipEntrySettings.builder() - .compression(Compression.STORE, CompressionLevel.NORMAL) - .encryption(Encryption.AES_192, fileName.toCharArray()).build(); - ZipSettings settings = ZipSettings.builder().entrySettingsProvider(entrySettingsProvider).comment( - "password: ").build(); + fileName -> ZipEntrySettings.of(Compression.STORE, Encryption.AES_192, fileName.toCharArray()); + ZipSettings settings = ZipSettings.builder() + .entrySettingsProvider(ZipEntrySettingsProvider.of(entrySettingsProvider)) + .comment("password: ").build(); ZipIt.zip(zipStoreSolidAes).settings(settings).add(contentDirSrc); assertThat(Files.exists(zipStoreSolidAes)).isTrue(); @@ -120,11 +116,9 @@ private static void createStoreSolidAesZip() throws IOException { } private static void createStoreSplitPkwareZip() throws IOException { - ZipEntrySettings entrySettings = ZipEntrySettings.builder() - .compression(Compression.STORE, CompressionLevel.NORMAL) - .encryption(Encryption.PKWARE, password).build(); + ZipEntrySettings entrySettings = ZipEntrySettings.of(Compression.STORE, Encryption.PKWARE, password); ZipSettings settings = ZipSettings.builder() - .entrySettingsProvider(fileName -> entrySettings) + .entrySettings(entrySettings) .splitSize(SIZE_1MB) .comment("password: " + passwordStr).build(); @@ -137,11 +131,9 @@ private static void createStoreSplitPkwareZip() throws IOException { private static void createStoreSplitAesZip() throws IOException { Function entrySettingsProvider = - fileName -> ZipEntrySettings.builder() - .compression(Compression.STORE, CompressionLevel.NORMAL) - .encryption(Encryption.AES_128, fileName.toCharArray()).build(); + fileName -> ZipEntrySettings.of(Compression.STORE, Encryption.AES_128, fileName.toCharArray()); ZipSettings settings = ZipSettings.builder() - .entrySettingsProvider(entrySettingsProvider) + .entrySettingsProvider(ZipEntrySettingsProvider.of(entrySettingsProvider)) .splitSize(SIZE_1MB) .comment("password: ").build(); diff --git a/src/test/java/ru/olegcherednik/zip4jvm/encryption/EncryptionAesTest.java b/src/test/java/ru/olegcherednik/zip4jvm/encryption/EncryptionAesTest.java index 2e5479994..94ca3bbc3 100644 --- a/src/test/java/ru/olegcherednik/zip4jvm/encryption/EncryptionAesTest.java +++ b/src/test/java/ru/olegcherednik/zip4jvm/encryption/EncryptionAesTest.java @@ -24,7 +24,6 @@ import ru.olegcherednik.zip4jvm.exception.EmptyPasswordException; import ru.olegcherednik.zip4jvm.exception.IncorrectZipEntryPasswordException; import ru.olegcherednik.zip4jvm.model.Compression; -import ru.olegcherednik.zip4jvm.model.CompressionLevel; import ru.olegcherednik.zip4jvm.model.Encryption; import ru.olegcherednik.zip4jvm.model.settings.UnzipSettings; import ru.olegcherednik.zip4jvm.model.settings.ZipEntrySettings; @@ -78,11 +77,8 @@ public static void removeDir() throws IOException { } public void shouldCreateNewZipWithFolderAndAes256Encryption() throws IOException { - ZipEntrySettings entrySettings = ZipEntrySettings.builder() - .compression(Compression.STORE, CompressionLevel.NORMAL) - .encryption(Encryption.AES_256, password).build(); ZipSettings settings = ZipSettings.builder() - .entrySettingsProvider(fileName -> entrySettings) + .entrySettings(Compression.STORE, Encryption.AES_256, password) .comment(PASSWORD_KEY + passwordStr).build(); Path zip = Zip4jvmSuite.subDirNameAsMethodName(rootDir).resolve(fileNameZipSrc); @@ -93,11 +89,8 @@ public void shouldCreateNewZipWithFolderAndAes256Encryption() throws IOException } public void shouldCreateNewZipWithFolderAndAes192Encryption() throws IOException { - ZipEntrySettings entrySettings = ZipEntrySettings.builder() - .compression(Compression.STORE, CompressionLevel.NORMAL) - .encryption(Encryption.AES_192, password).build(); ZipSettings settings = ZipSettings.builder() - .entrySettingsProvider(fileName -> entrySettings) + .entrySettings(Compression.STORE, Encryption.AES_192, password) .comment(PASSWORD_KEY + passwordStr).build(); Path zip = Zip4jvmSuite.subDirNameAsMethodName(rootDir).resolve(fileNameZipSrc); @@ -108,11 +101,8 @@ public void shouldCreateNewZipWithFolderAndAes192Encryption() throws IOException } public void shouldCreateNewZipWithFolderAndAes128Encryption() throws IOException { - ZipEntrySettings entrySettings = ZipEntrySettings.builder() - .compression(Compression.STORE, CompressionLevel.NORMAL) - .encryption(Encryption.AES_128, password).build(); ZipSettings settings = ZipSettings.builder() - .entrySettingsProvider(fileName -> entrySettings) + .entrySettings(Compression.STORE, Encryption.AES_128, password) .comment(PASSWORD_KEY + passwordStr).build(); Path zip = Zip4jvmSuite.subDirNameAsMethodName(rootDir).resolve(fileNameZipSrc); @@ -123,11 +113,8 @@ public void shouldCreateNewZipWithFolderAndAes128Encryption() throws IOException } public void shouldCreateNewZipWithSelectedFilesAndAesEncryption() throws IOException { - ZipEntrySettings entrySettings = ZipEntrySettings.builder() - .compression(Compression.STORE, CompressionLevel.NORMAL) - .encryption(Encryption.AES_256, password).build(); ZipSettings settings = ZipSettings.builder() - .entrySettingsProvider(fileName -> entrySettings) + .entrySettings(Compression.STORE, Encryption.AES_256, password) .comment(PASSWORD_KEY + passwordStr).build(); Path zip = Zip4jvmSuite.subDirNameAsMethodName(rootDir).resolve(fileNameZipSrc); @@ -138,14 +125,12 @@ public void shouldCreateNewZipWithSelectedFilesAndAesEncryption() throws IOExcep } public void shouldThrowExceptionWhenAesEncryptionAndNullOrEmptyPassword() throws IOException { - assertThatThrownBy(() -> ZipEntrySettings.builder() - .compression(Compression.STORE, CompressionLevel.NORMAL) - .encryption(Encryption.AES_256, null).build()) + assertThatThrownBy(() -> ZipEntrySettings.of(Compression.STORE, Encryption.AES_256, null)) .isExactlyInstanceOf(EmptyPasswordException.class); - assertThatThrownBy(() -> ZipEntrySettings.builder() - .compression(Compression.STORE, CompressionLevel.NORMAL) - .encryption(Encryption.AES_256, ArrayUtils.EMPTY_CHAR_ARRAY).build()) + assertThatThrownBy(() -> ZipEntrySettings.of(Compression.STORE, + Encryption.AES_256, + ArrayUtils.EMPTY_CHAR_ARRAY)) .isExactlyInstanceOf(EmptyPasswordException.class); } @@ -179,11 +164,11 @@ public void shouldThrowExceptionWhenUnzipAesEncryptedZipWithIncorrectPassword() public void shouldCreateSingleZipWithFilesWhenLzmaCompressionAndAesEncryption() throws IOException { ZipEntrySettings entrySettings = ZipEntrySettings.builder() - .compression(Compression.LZMA, CompressionLevel.NORMAL) + .compression(Compression.LZMA) .encryption(Encryption.AES_256, password) .lzmaEosMarker(true).build(); ZipSettings settings = ZipSettings.builder() - .entrySettingsProvider(fileName -> entrySettings) + .entrySettings(entrySettings) .comment(PASSWORD_KEY + passwordStr).build(); Path zip = Zip4jvmSuite.subDirNameAsMethodName(rootDir).resolve(fileNameZipSrc); diff --git a/src/test/java/ru/olegcherednik/zip4jvm/encryption/EncryptionPkwareTest.java b/src/test/java/ru/olegcherednik/zip4jvm/encryption/EncryptionPkwareTest.java index 9355001cb..b2f84f297 100644 --- a/src/test/java/ru/olegcherednik/zip4jvm/encryption/EncryptionPkwareTest.java +++ b/src/test/java/ru/olegcherednik/zip4jvm/encryption/EncryptionPkwareTest.java @@ -24,7 +24,6 @@ import ru.olegcherednik.zip4jvm.exception.EmptyPasswordException; import ru.olegcherednik.zip4jvm.exception.IncorrectZipEntryPasswordException; import ru.olegcherednik.zip4jvm.model.Compression; -import ru.olegcherednik.zip4jvm.model.CompressionLevel; import ru.olegcherednik.zip4jvm.model.Encryption; import ru.olegcherednik.zip4jvm.model.settings.UnzipSettings; import ru.olegcherednik.zip4jvm.model.settings.ZipEntrySettings; @@ -78,11 +77,8 @@ public static void removeDir() throws IOException { } public void shouldCreateNewZipWithFolderAndPkwareEncryption() throws IOException { - ZipEntrySettings entrySettings = ZipEntrySettings.builder() - .compression(Compression.DEFLATE, CompressionLevel.NORMAL) - .encryption(Encryption.PKWARE, password).build(); ZipSettings settings = ZipSettings.builder() - .entrySettingsProvider(fileName -> entrySettings) + .entrySettings(Compression.DEFLATE, Encryption.PKWARE, password) .comment("password: " + passwordStr).build(); Path zip = Zip4jvmSuite.subDirNameAsMethodName(rootDir).resolve("src.zip"); @@ -93,11 +89,8 @@ public void shouldCreateNewZipWithFolderAndPkwareEncryption() throws IOException } public void shouldCreateNewZipWithSelectedFilesAndPkwareEncryption() throws IOException { - ZipEntrySettings entrySettings = ZipEntrySettings.builder() - .compression(Compression.DEFLATE, CompressionLevel.NORMAL) - .encryption(Encryption.PKWARE, password).build(); ZipSettings settings = ZipSettings.builder() - .entrySettingsProvider(fileName -> entrySettings) + .entrySettings(Compression.DEFLATE, Encryption.PKWARE, password) .comment("password: " + passwordStr).build(); Path zip = Zip4jvmSuite.subDirNameAsMethodName(rootDir).resolve("src.zip"); @@ -109,14 +102,10 @@ public void shouldCreateNewZipWithSelectedFilesAndPkwareEncryption() throws IOEx } public void shouldThrowExceptionWhenPkwareEncryptionAndEmptyPassword() throws IOException { - assertThatThrownBy(() -> ZipEntrySettings.builder() - .compression(Compression.STORE, CompressionLevel.NORMAL) - .encryption(Encryption.PKWARE, null).build()) + assertThatThrownBy(() -> ZipEntrySettings.of(Compression.STORE, Encryption.PKWARE, null)) .isExactlyInstanceOf(EmptyPasswordException.class); - assertThatThrownBy(() -> ZipEntrySettings.builder() - .compression(Compression.STORE, CompressionLevel.NORMAL) - .encryption(Encryption.PKWARE, ArrayUtils.EMPTY_CHAR_ARRAY).build()) + assertThatThrownBy(() -> ZipEntrySettings.of(Compression.STORE, Encryption.PKWARE, ArrayUtils.EMPTY_CHAR_ARRAY)) .isExactlyInstanceOf(EmptyPasswordException.class); } @@ -155,11 +144,11 @@ public void shouldUnzipWhenZip64ContainsOnlyOneCrcByteMatch() throws IOException public void shouldCreateSingleZipWithFilesWhenLzmaCompressionAndPkwareEncryption() throws IOException { ZipEntrySettings entrySettings = ZipEntrySettings.builder() - .compression(Compression.LZMA, CompressionLevel.NORMAL) + .compression(Compression.LZMA) .encryption(Encryption.PKWARE, password) .lzmaEosMarker(true).build(); ZipSettings settings = ZipSettings.builder() - .entrySettingsProvider(fileName -> entrySettings) + .entrySettings(entrySettings) .comment("password: " + passwordStr).build(); Path zip = Zip4jvmSuite.subDirNameAsMethodName(rootDir).resolve("src.zip"); diff --git a/src/test/java/ru/olegcherednik/zip4jvm/engine/ZipEngineSolidTest.java b/src/test/java/ru/olegcherednik/zip4jvm/engine/ZipEngineSolidTest.java index 3a5eb40f4..a271e2db6 100644 --- a/src/test/java/ru/olegcherednik/zip4jvm/engine/ZipEngineSolidTest.java +++ b/src/test/java/ru/olegcherednik/zip4jvm/engine/ZipEngineSolidTest.java @@ -25,10 +25,10 @@ import ru.olegcherednik.zip4jvm.exception.EntryNotFoundException; import ru.olegcherednik.zip4jvm.model.Charsets; import ru.olegcherednik.zip4jvm.model.Compression; -import ru.olegcherednik.zip4jvm.model.CompressionLevel; import ru.olegcherednik.zip4jvm.model.Encryption; import ru.olegcherednik.zip4jvm.model.ExternalFileAttributes; import ru.olegcherednik.zip4jvm.model.settings.ZipEntrySettings; +import ru.olegcherednik.zip4jvm.model.settings.ZipEntrySettingsProvider; import ru.olegcherednik.zip4jvm.model.settings.ZipSettings; import org.apache.commons.io.IOUtils; @@ -46,6 +46,7 @@ import static ru.olegcherednik.zip4jvm.TestData.dirBikes; import static ru.olegcherednik.zip4jvm.TestData.dirCars; import static ru.olegcherednik.zip4jvm.TestData.dirNameBikes; +import static ru.olegcherednik.zip4jvm.TestData.dirNameCars; import static ru.olegcherednik.zip4jvm.TestData.fileBentley; import static ru.olegcherednik.zip4jvm.TestData.fileFerrari; import static ru.olegcherednik.zip4jvm.TestData.fileHonda; @@ -60,8 +61,6 @@ import static ru.olegcherednik.zip4jvm.TestData.fileNameZipSrc; import static ru.olegcherednik.zip4jvm.TestData.fileSuzuki; import static ru.olegcherednik.zip4jvm.TestData.fileWiesmann; -import static ru.olegcherednik.zip4jvm.TestData.zipDirNameBikes; -import static ru.olegcherednik.zip4jvm.TestData.zipDirNameCars; import static ru.olegcherednik.zip4jvm.TestData.zipStoreSolid; import static ru.olegcherednik.zip4jvm.TestDataAssert.dirBikesAssert; import static ru.olegcherednik.zip4jvm.TestDataAssert.dirCarsAssert; @@ -94,7 +93,19 @@ public static void createDir() throws IOException { @BeforeClass public static void createSolidArchive() throws IOException { - ZipSettings settings = ZipSettings.builder().entrySettingsProvider(entrySettingsProvider()).build(); + Function func = entryName -> { + if (fileNameBentley.equals(entryName)) + return ZipEntrySettings.of(Compression.STORE); + if (fileNameFerrari.equals(entryName)) + return ZipEntrySettings.of(Compression.DEFLATE); + if (fileNameWiesmann.equals(entryName)) + return ZipEntrySettings.of(Compression.DEFLATE, Encryption.PKWARE, password); + if (fileNameHonda.equals(entryName)) + return ZipEntrySettings.of(Compression.DEFLATE, Encryption.AES_256, fileNameHonda.toCharArray()); + return ZipEntrySettings.DEFAULT; + }; + + ZipSettings settings = ZipSettings.builder().entrySettingsProvider(ZipEntrySettingsProvider.of(func)).build(); try (ZipFile.Writer zipFile = ZipIt.zip(srcZip).settings(settings).open()) { zipFile.add(fileBentley); @@ -116,24 +127,6 @@ public static void removeDir() throws IOException { Zip4jvmSuite.removeDir(rootDir); } - private static Function entrySettingsProvider() { - return fileName -> { - if (fileNameBentley.equals(fileName)) - return ZipEntrySettings.builder().compression(Compression.STORE, CompressionLevel.NORMAL).build(); - if (fileNameFerrari.equals(fileName)) - return ZipEntrySettings.builder().compression(Compression.DEFLATE, CompressionLevel.NORMAL).build(); - if (fileNameWiesmann.equals(fileName)) - return ZipEntrySettings.builder() - .encryption(Encryption.PKWARE, password) - .compression(Compression.DEFLATE, CompressionLevel.NORMAL).build(); - if (fileNameHonda.equals(fileName)) - return ZipEntrySettings.builder() - .encryption(Encryption.AES_256, fileNameHonda.toCharArray()) - .compression(Compression.DEFLATE, CompressionLevel.NORMAL).build(); - return ZipEntrySettings.DEFAULT; - }; - } - public void shouldThrowNullPointerExceptionWhenArgumentIsNull() { assertThatThrownBy(() -> new ZipEngine(null, ZipSettings.DEFAULT)).isExactlyInstanceOf(NullPointerException.class); @@ -143,19 +136,17 @@ public void shouldThrowNullPointerExceptionWhenArgumentIsNull() { public void shouldAddFilesToExistedZipWhenUseZipFile() throws IOException { Path zip = Zip4jvmSuite.copy(Zip4jvmSuite.subDirNameAsMethodName(rootDir), srcZip); - Function entrySettingsProvider = fileName -> { + Function func = fileName -> { if (fileNameKawasaki.equals(fileName)) - return ZipEntrySettings.builder() - .compression(Compression.STORE, CompressionLevel.NORMAL) - .encryption(Encryption.PKWARE, password).build(); + return ZipEntrySettings.of(Compression.STORE, Encryption.PKWARE, password); if (fileNameSuzuki.equals(fileName)) - return ZipEntrySettings.builder() - .compression(Compression.DEFLATE, CompressionLevel.NORMAL) - .encryption(Encryption.AES_256, fileNameSuzuki.toCharArray()).build(); + return ZipEntrySettings.of(Compression.DEFLATE, Encryption.AES_256, fileNameSuzuki.toCharArray()); return ZipEntrySettings.DEFAULT; }; - ZipSettings settings = ZipSettings.builder().entrySettingsProvider(entrySettingsProvider).build(); + ZipSettings settings = ZipSettings.builder() + .entrySettingsProvider(ZipEntrySettingsProvider.of(func)) + .build(); try (ZipFile.Writer zipFile = ZipIt.zip(zip).settings(settings).open()) { zipFile.add(fileKawasaki); @@ -216,8 +207,8 @@ public void shouldAddDirectoryWhenZipExists() throws IOException { assertThatZipFile(zip, password).regularFile(fileNameFerrari).matches(fileFerrariAssert); assertThatZipFile(zip, password).regularFile(fileNameWiesmann).matches(fileWiesmannAssert); assertThatZipFile(zip, fileNameHonda.toCharArray()).regularFile(fileNameHonda).matches(fileHondaAssert); - assertThatZipFile(zip, password).directory(zipDirNameBikes).matches(dirBikesAssert); - assertThatZipFile(zip, password).directory(zipDirNameCars).matches(dirCarsAssert); + assertThatZipFile(zip, password).directory(dirNameBikes).matches(dirBikesAssert); + assertThatZipFile(zip, password).directory(dirNameCars).matches(dirCarsAssert); } public void shouldRemoveExistedEntityWhenNormalizeName() throws IOException { @@ -225,7 +216,7 @@ public void shouldRemoveExistedEntityWhenNormalizeName() throws IOException { ZipIt.zip(zip).add(dirBikes); try (ZipFile.Writer zipFile = ZipIt.zip(zip).open()) { - zipFile.removeEntryByName(zipDirNameBikes + fileNameHonda); + zipFile.removeEntryByName(dirNameBikes + '/' + fileNameHonda); } assertThatDirectory(zip.getParent()).exists().hasDirectories(0).hasRegularFiles(1); @@ -234,10 +225,10 @@ public void shouldRemoveExistedEntityWhenNormalizeName() throws IOException { assertThatZipFile(zip, password).regularFile(fileNameFerrari).matches(fileFerrariAssert); assertThatZipFile(zip, password).regularFile(fileNameWiesmann).matches(fileWiesmannAssert); assertThatZipFile(zip, fileNameHonda.toCharArray()).regularFile(fileNameHonda).matches(fileHondaAssert); - assertThatZipFile(zip, password).directory(zipDirNameBikes).hasDirectories(0).hasRegularFiles(3); - assertThatZipFile(zip, password).regularFile(zipDirNameBikes + fileNameDucati).matches(fileDucatiAssert); - assertThatZipFile(zip, password).regularFile(zipDirNameBikes + fileNameKawasaki).matches(fileKawasakiAssert); - assertThatZipFile(zip, password).regularFile(zipDirNameBikes + fileNameSuzuki).matches(fileSuzukiAssert); + assertThatZipFile(zip, password).directory(dirNameBikes).hasDirectories(0).hasRegularFiles(3); + assertThatZipFile(zip, password).regularFile(dirNameBikes + '/' + fileNameDucati).matches(fileDucatiAssert); + assertThatZipFile(zip, password).regularFile(dirNameBikes + '/' + fileNameKawasaki).matches(fileKawasakiAssert); + assertThatZipFile(zip, password).regularFile(dirNameBikes + '/' + fileNameSuzuki).matches(fileSuzukiAssert); } public void shouldRemoveEntryWhenNotNormalizeName() throws IOException { @@ -254,10 +245,10 @@ public void shouldRemoveEntryWhenNotNormalizeName() throws IOException { assertThatZipFile(zip, password).regularFile(fileNameFerrari).matches(fileFerrariAssert); assertThatZipFile(zip, password).regularFile(fileNameWiesmann).matches(fileWiesmannAssert); assertThatZipFile(zip, fileNameHonda.toCharArray()).regularFile(fileNameHonda).matches(fileHondaAssert); - assertThatZipFile(zip, password).directory(zipDirNameBikes).hasDirectories(0).hasRegularFiles(3); - assertThatZipFile(zip, password).regularFile(zipDirNameBikes + fileNameDucati).matches(fileDucatiAssert); - assertThatZipFile(zip, password).regularFile(zipDirNameBikes + fileNameKawasaki).matches(fileKawasakiAssert); - assertThatZipFile(zip, password).regularFile(zipDirNameBikes + fileNameSuzuki).matches(fileSuzukiAssert); + assertThatZipFile(zip, password).directory(dirNameBikes).hasDirectories(0).hasRegularFiles(3); + assertThatZipFile(zip, password).regularFile(dirNameBikes + '/' + fileNameDucati).matches(fileDucatiAssert); + assertThatZipFile(zip, password).regularFile(dirNameBikes + '/' + fileNameKawasaki).matches(fileKawasakiAssert); + assertThatZipFile(zip, password).regularFile(dirNameBikes + '/' + fileNameSuzuki).matches(fileSuzukiAssert); } public void shouldRemoveDirectoryWhenNoDirectoryMarker() throws IOException { @@ -326,30 +317,26 @@ public static Object[][] fileNames() { } public void shouldCreateZipFileWhenUseZipFileAndAddFilesUsingSupplier() throws IOException { - Function entrySettingsProvider = fileName -> { + Function func = fileName -> { if (fileNameBentley.equals(fileName)) - return ZipEntrySettings.builder().compression(Compression.STORE, CompressionLevel.NORMAL).build(); + return ZipEntrySettings.of(Compression.STORE); if (fileNameFerrari.equals(fileName)) - return ZipEntrySettings.builder().compression(Compression.DEFLATE, CompressionLevel.NORMAL).build(); + return ZipEntrySettings.of(Compression.DEFLATE); if (fileNameWiesmann.equals(fileName)) - return ZipEntrySettings.builder() - .encryption(Encryption.PKWARE, password) - .compression(Compression.DEFLATE, CompressionLevel.NORMAL).build(); + return ZipEntrySettings.of(Compression.DEFLATE, Encryption.PKWARE, password); if (fileNameHonda.equals(fileName)) - return ZipEntrySettings.builder() - .encryption(Encryption.AES_256, password) - .compression(Compression.DEFLATE, CompressionLevel.NORMAL).build(); + return ZipEntrySettings.of(Compression.DEFLATE, Encryption.AES_256, password); return ZipEntrySettings.DEFAULT; }; Path zip = Zip4jvmSuite.subDirNameAsMethodName(rootDir).resolve("src.zip"); - ZipSettings settings = ZipSettings.builder().entrySettingsProvider(entrySettingsProvider).build(); + ZipSettings settings = ZipSettings.builder().entrySettingsProvider(ZipEntrySettingsProvider.of(func)).build(); try (ZipFile.Writer zipFile = ZipIt.zip(zip).settings(settings).open()) { - zipFile.add(fileBentley, fileNameBentley); - zipFile.add(fileFerrari, fileNameFerrari); - zipFile.add(fileWiesmann, fileNameWiesmann); - zipFile.add(fileHonda, fileNameHonda); + zipFile.addWithRename(fileBentley, fileNameBentley); + zipFile.addWithRename(fileFerrari, fileNameFerrari); + zipFile.addWithRename(fileWiesmann, fileNameWiesmann); + zipFile.addWithRename(fileHonda, fileNameHonda); } assertThatDirectory(zip.getParent()).exists().hasDirectories(0).hasRegularFiles(1); @@ -366,19 +353,15 @@ public void shouldCreateZipFileWhenUseZipFileAndAddFilesWithText() throws IOExce final String three = "three.txt"; final String four = "four.txt"; - Function entrySettingsProvider = fileName -> { + Function func = fileName -> { if (one.equals(fileName)) - return ZipEntrySettings.builder().compression(Compression.STORE, CompressionLevel.NORMAL).build(); + return ZipEntrySettings.of(Compression.STORE); if (two.equals(fileName)) - return ZipEntrySettings.builder().compression(Compression.DEFLATE, CompressionLevel.NORMAL).build(); + return ZipEntrySettings.of(Compression.DEFLATE); if (three.equals(fileName)) - return ZipEntrySettings.builder() - .encryption(Encryption.PKWARE, password) - .compression(Compression.DEFLATE, CompressionLevel.NORMAL).build(); + return ZipEntrySettings.of(Compression.DEFLATE, Encryption.PKWARE, password); if (four.equals(fileName)) - return ZipEntrySettings.builder() - .encryption(Encryption.AES_256, password) - .compression(Compression.DEFLATE, CompressionLevel.NORMAL).build(); + return ZipEntrySettings.of(Compression.DEFLATE, Encryption.AES_256, password); return ZipEntrySettings.DEFAULT; }; @@ -388,7 +371,7 @@ public void shouldCreateZipFileWhenUseZipFileAndAddFilesWithText() throws IOExce ZipFile.Entry entryFour = createRegularFileEntry(four); Path zip = Zip4jvmSuite.subDirNameAsMethodName(rootDir).resolve(fileNameZipSrc); - ZipSettings settings = ZipSettings.builder().entrySettingsProvider(entrySettingsProvider).build(); + ZipSettings settings = ZipSettings.builder().entrySettingsProvider(ZipEntrySettingsProvider.of(func)).build(); try (ZipFile.Writer zipFile = ZipIt.zip(zip).settings(settings).open()) { zipFile.add(entryOne); diff --git a/src/test/java/ru/olegcherednik/zip4jvm/engine/ZipEngineSplitTest.java b/src/test/java/ru/olegcherednik/zip4jvm/engine/ZipEngineSplitTest.java index e575d7115..56ed20f88 100644 --- a/src/test/java/ru/olegcherednik/zip4jvm/engine/ZipEngineSplitTest.java +++ b/src/test/java/ru/olegcherednik/zip4jvm/engine/ZipEngineSplitTest.java @@ -25,10 +25,10 @@ import ru.olegcherednik.zip4jvm.exception.EntryNotFoundException; import ru.olegcherednik.zip4jvm.model.Charsets; import ru.olegcherednik.zip4jvm.model.Compression; -import ru.olegcherednik.zip4jvm.model.CompressionLevel; import ru.olegcherednik.zip4jvm.model.Encryption; import ru.olegcherednik.zip4jvm.model.ExternalFileAttributes; import ru.olegcherednik.zip4jvm.model.settings.ZipEntrySettings; +import ru.olegcherednik.zip4jvm.model.settings.ZipEntrySettingsProvider; import ru.olegcherednik.zip4jvm.model.settings.ZipSettings; import org.apache.commons.io.IOUtils; @@ -46,6 +46,7 @@ import static ru.olegcherednik.zip4jvm.TestData.dirBikes; import static ru.olegcherednik.zip4jvm.TestData.dirCars; import static ru.olegcherednik.zip4jvm.TestData.dirNameBikes; +import static ru.olegcherednik.zip4jvm.TestData.dirNameCars; import static ru.olegcherednik.zip4jvm.TestData.fileBentley; import static ru.olegcherednik.zip4jvm.TestData.fileFerrari; import static ru.olegcherednik.zip4jvm.TestData.fileHonda; @@ -60,8 +61,6 @@ import static ru.olegcherednik.zip4jvm.TestData.fileNameZipSrc; import static ru.olegcherednik.zip4jvm.TestData.fileSuzuki; import static ru.olegcherednik.zip4jvm.TestData.fileWiesmann; -import static ru.olegcherednik.zip4jvm.TestData.zipDirNameBikes; -import static ru.olegcherednik.zip4jvm.TestData.zipDirNameCars; import static ru.olegcherednik.zip4jvm.TestData.zipStoreSolid; import static ru.olegcherednik.zip4jvm.TestDataAssert.dirBikesAssert; import static ru.olegcherednik.zip4jvm.TestDataAssert.dirCarsAssert; @@ -120,22 +119,20 @@ public static void removeDir() throws IOException { Zip4jvmSuite.removeDir(rootDir); } - private static Function entrySettingsProvider() { - return fileName -> { + private static ZipEntrySettingsProvider entrySettingsProvider() { + Function func = fileName -> { if (fileNameBentley.equals(fileName)) - return ZipEntrySettings.builder().compression(Compression.STORE, CompressionLevel.NORMAL).build(); + return ZipEntrySettings.of(Compression.STORE); if (fileNameFerrari.equals(fileName)) - return ZipEntrySettings.builder().compression(Compression.DEFLATE, CompressionLevel.NORMAL).build(); + return ZipEntrySettings.of(Compression.DEFLATE); if (fileNameWiesmann.equals(fileName)) - return ZipEntrySettings.builder() - .encryption(Encryption.PKWARE, password) - .compression(Compression.DEFLATE, CompressionLevel.NORMAL).build(); + return ZipEntrySettings.of(Compression.DEFLATE, Encryption.PKWARE, password); if (fileNameHonda.equals(fileName)) - return ZipEntrySettings.builder() - .encryption(Encryption.AES_256, fileNameHonda.toCharArray()) - .compression(Compression.DEFLATE, CompressionLevel.NORMAL).build(); + return ZipEntrySettings.of(Compression.DEFLATE, Encryption.AES_256, fileNameHonda.toCharArray()); return ZipEntrySettings.DEFAULT; }; + + return ZipEntrySettingsProvider.of(func); } public void shouldThrowNullPointerExceptionWhenArgumentIsNull() { @@ -147,20 +144,16 @@ public void shouldThrowNullPointerExceptionWhenArgumentIsNull() { public void shouldAddFilesToExistedZipWhenUseZipFile() throws IOException { Path zip = Zip4jvmSuite.copy(Zip4jvmSuite.subDirNameAsMethodName(rootDir), srcZip); - Function entrySettingsProvider = fileName -> { + Function func = fileName -> { if (fileNameKawasaki.equals(fileName)) - return ZipEntrySettings.builder() - .compression(Compression.STORE, CompressionLevel.NORMAL) - .encryption(Encryption.PKWARE, password).build(); + return ZipEntrySettings.of(Compression.STORE, Encryption.PKWARE, password); if (fileNameSuzuki.equals(fileName)) - return ZipEntrySettings.builder() - .compression(Compression.DEFLATE, CompressionLevel.NORMAL) - .encryption(Encryption.AES_256, fileNameSuzuki.toCharArray()).build(); + return ZipEntrySettings.of(Compression.DEFLATE, Encryption.AES_256, fileNameSuzuki.toCharArray()); return ZipEntrySettings.DEFAULT; }; ZipSettings settings = ZipSettings.builder() - .entrySettingsProvider(entrySettingsProvider) + .entrySettingsProvider(ZipEntrySettingsProvider.of(func)) .splitSize(SIZE_1MB).build(); try (ZipFile.Writer zipFile = ZipIt.zip(zip).settings(settings).open()) { @@ -230,8 +223,8 @@ public void shouldAddDirectoryWhenZipExists() throws IOException { assertThatZipFile(zip, password).regularFile(fileNameFerrari).matches(fileFerrariAssert); assertThatZipFile(zip, password).regularFile(fileNameWiesmann).matches(fileWiesmannAssert); assertThatZipFile(zip, fileNameHonda.toCharArray()).regularFile(fileNameHonda).matches(fileHondaAssert); - assertThatZipFile(zip, password).directory(zipDirNameBikes).matches(dirBikesAssert); - assertThatZipFile(zip, password).directory(zipDirNameCars).matches(dirCarsAssert); + assertThatZipFile(zip, password).directory(dirNameBikes).matches(dirBikesAssert); + assertThatZipFile(zip, password).directory(dirNameCars).matches(dirCarsAssert); } public void shouldRemoveExistedEntityWhenNormalizeName() throws IOException { @@ -239,7 +232,7 @@ public void shouldRemoveExistedEntityWhenNormalizeName() throws IOException { ZipIt.zip(zip).add(dirBikes); try (ZipFile.Writer zipFile = ZipIt.zip(zip).open()) { - zipFile.removeEntryByName(zipDirNameBikes + fileNameHonda); + zipFile.removeEntryByName(dirNameBikes + '/' + fileNameHonda); } assertThatDirectory(zip.getParent()).exists().hasDirectories(0).hasRegularFiles(4); @@ -248,10 +241,10 @@ public void shouldRemoveExistedEntityWhenNormalizeName() throws IOException { assertThatZipFile(zip, password).regularFile(fileNameFerrari).matches(fileFerrariAssert); assertThatZipFile(zip, password).regularFile(fileNameWiesmann).matches(fileWiesmannAssert); assertThatZipFile(zip, fileNameHonda.toCharArray()).regularFile(fileNameHonda).matches(fileHondaAssert); - assertThatZipFile(zip, password).directory(zipDirNameBikes).hasDirectories(0).hasRegularFiles(3); - assertThatZipFile(zip, password).regularFile(zipDirNameBikes + fileNameDucati).matches(fileDucatiAssert); - assertThatZipFile(zip, password).regularFile(zipDirNameBikes + fileNameKawasaki).matches(fileKawasakiAssert); - assertThatZipFile(zip, password).regularFile(zipDirNameBikes + fileNameSuzuki).matches(fileSuzukiAssert); + assertThatZipFile(zip, password).directory(dirNameBikes).hasDirectories(0).hasRegularFiles(3); + assertThatZipFile(zip, password).regularFile(dirNameBikes + '/' + fileNameDucati).matches(fileDucatiAssert); + assertThatZipFile(zip, password).regularFile(dirNameBikes + '/' + fileNameKawasaki).matches(fileKawasakiAssert); + assertThatZipFile(zip, password).regularFile(dirNameBikes + '/' + fileNameSuzuki).matches(fileSuzukiAssert); } public void shouldRemoveEntryWhenNotNormalizeName() throws IOException { @@ -268,10 +261,10 @@ public void shouldRemoveEntryWhenNotNormalizeName() throws IOException { assertThatZipFile(zip, password).regularFile(fileNameFerrari).matches(fileFerrariAssert); assertThatZipFile(zip, password).regularFile(fileNameWiesmann).matches(fileWiesmannAssert); assertThatZipFile(zip, fileNameHonda.toCharArray()).regularFile(fileNameHonda).matches(fileHondaAssert); - assertThatZipFile(zip, password).directory(zipDirNameBikes).hasDirectories(0).hasRegularFiles(3); - assertThatZipFile(zip, password).regularFile(zipDirNameBikes + fileNameDucati).matches(fileDucatiAssert); - assertThatZipFile(zip, password).regularFile(zipDirNameBikes + fileNameKawasaki).matches(fileKawasakiAssert); - assertThatZipFile(zip, password).regularFile(zipDirNameBikes + fileNameSuzuki).matches(fileSuzukiAssert); + assertThatZipFile(zip, password).directory(dirNameBikes).hasDirectories(0).hasRegularFiles(3); + assertThatZipFile(zip, password).regularFile(dirNameBikes + '/' + fileNameDucati).matches(fileDucatiAssert); + assertThatZipFile(zip, password).regularFile(dirNameBikes + '/' + fileNameKawasaki).matches(fileKawasakiAssert); + assertThatZipFile(zip, password).regularFile(dirNameBikes + '/' + fileNameSuzuki).matches(fileSuzukiAssert); } public void shouldRemoveDirectoryWhenNoDirectoryMarker() throws IOException { @@ -335,32 +328,28 @@ public void shouldThrowExceptionWhenRemoveWithBlankFileNamePrefix(String fileNam // TODO add files to existed split archive and convert to solid public void shouldCreateZipFileWhenUseZipFileAndAddFilesUsingSupplier() throws IOException { - Function entrySettingsProvider = fileName -> { + Function func = fileName -> { if (fileNameBentley.equals(fileName)) - return ZipEntrySettings.builder().compression(Compression.STORE, CompressionLevel.NORMAL).build(); + return ZipEntrySettings.of(Compression.STORE); if (fileNameFerrari.equals(fileName)) - return ZipEntrySettings.builder().compression(Compression.DEFLATE, CompressionLevel.NORMAL).build(); + return ZipEntrySettings.of(Compression.DEFLATE); if (fileNameWiesmann.equals(fileName)) - return ZipEntrySettings.builder() - .encryption(Encryption.PKWARE, password) - .compression(Compression.DEFLATE, CompressionLevel.NORMAL).build(); + return ZipEntrySettings.of(Compression.DEFLATE, Encryption.PKWARE, password); if (fileNameHonda.equals(fileName)) - return ZipEntrySettings.builder() - .encryption(Encryption.AES_256, password) - .compression(Compression.DEFLATE, CompressionLevel.NORMAL).build(); + return ZipEntrySettings.of(Compression.DEFLATE, Encryption.AES_256, password); return ZipEntrySettings.DEFAULT; }; Path zip = Zip4jvmSuite.subDirNameAsMethodName(rootDir).resolve("src.zip"); ZipSettings settings = ZipSettings.builder() - .entrySettingsProvider(entrySettingsProvider) + .entrySettingsProvider(ZipEntrySettingsProvider.of(func)) .splitSize(SIZE_2MB).build(); try (ZipFile.Writer zipFile = ZipIt.zip(zip).settings(settings).open()) { - zipFile.add(fileBentley, fileNameBentley); - zipFile.add(fileFerrari, fileNameFerrari); - zipFile.add(fileWiesmann, fileNameWiesmann); - zipFile.add(fileHonda, fileNameHonda); + zipFile.addWithRename(fileBentley, fileNameBentley); + zipFile.addWithRename(fileFerrari, fileNameFerrari); + zipFile.addWithRename(fileWiesmann, fileNameWiesmann); + zipFile.addWithRename(fileHonda, fileNameHonda); } assertThatDirectory(zip.getParent()).exists().hasDirectories(0).hasRegularFiles(2); @@ -377,19 +366,15 @@ public void shouldCreateZipFileWhenUseZipFileAndAddFilesWithText() throws IOExce final String three = "three.txt"; final String four = "four.txt"; - Function entrySettingsProvider = fileName -> { - if (one.equals(fileName)) - return ZipEntrySettings.builder().compression(Compression.STORE, CompressionLevel.NORMAL).build(); - if (two.equals(fileName)) - return ZipEntrySettings.builder().compression(Compression.DEFLATE, CompressionLevel.NORMAL).build(); - if (three.equals(fileName)) - return ZipEntrySettings.builder() - .encryption(Encryption.PKWARE, password) - .compression(Compression.DEFLATE, CompressionLevel.NORMAL).build(); - if (four.equals(fileName)) - return ZipEntrySettings.builder() - .encryption(Encryption.AES_256, password) - .compression(Compression.DEFLATE, CompressionLevel.NORMAL).build(); + Function func = entryName -> { + if (one.equals(entryName)) + return ZipEntrySettings.of(Compression.STORE); + if (two.equals(entryName)) + return ZipEntrySettings.of(Compression.DEFLATE); + if (three.equals(entryName)) + return ZipEntrySettings.of(Compression.DEFLATE, Encryption.PKWARE, password); + if (four.equals(entryName)) + return ZipEntrySettings.of(Compression.DEFLATE, Encryption.AES_256, password); return ZipEntrySettings.DEFAULT; }; @@ -400,7 +385,7 @@ public void shouldCreateZipFileWhenUseZipFileAndAddFilesWithText() throws IOExce Path zip = Zip4jvmSuite.subDirNameAsMethodName(rootDir).resolve(fileNameZipSrc); ZipSettings settings = ZipSettings.builder() - .entrySettingsProvider(entrySettingsProvider) + .entrySettingsProvider(ZipEntrySettingsProvider.of(func)) .splitSize(SIZE_2MB).build(); try (ZipFile.Writer zipFile = ZipIt.zip(zip).settings(settings).open()) { diff --git a/src/test/java/ru/olegcherednik/zip4jvm/model/ZipSettingsTest.java b/src/test/java/ru/olegcherednik/zip4jvm/model/ZipSettingsTest.java new file mode 100644 index 000000000..e2841ca72 --- /dev/null +++ b/src/test/java/ru/olegcherednik/zip4jvm/model/ZipSettingsTest.java @@ -0,0 +1,46 @@ +/* + * 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 ru.olegcherednik.zip4jvm.model; + +import ru.olegcherednik.zip4jvm.model.settings.ZipEntrySettings; +import ru.olegcherednik.zip4jvm.model.settings.ZipSettings; + +import org.assertj.core.api.Assertions; +import org.testng.annotations.Test; + +/** + * @author Oleg Cherednik + * @since 19.10.2024 + */ +@Test +public class ZipSettingsTest { + + public void shouldThrowIllegalArgumentExceptionWhenEntrySettingsWithNull() { + Assertions.assertThatThrownBy(() -> ZipSettings.builder().entrySettings((ZipEntrySettings) null)) + .isExactlyInstanceOf(IllegalArgumentException.class) + .hasMessageContaining("ZipSettings.entrySettings"); + } + + public void shouldThrowIllegalArgumentExceptionWhenEntrySettingsProviderWithNull() { + Assertions.assertThatThrownBy(() -> ZipSettings.builder().entrySettingsProvider(null)) + .isExactlyInstanceOf(IllegalArgumentException.class) + .hasMessageContaining("ZipSettings.entrySettingsProvider"); + } + +} diff --git a/src/test/java/ru/olegcherednik/zip4jvm/model/entry/ZipEntryTest.java b/src/test/java/ru/olegcherednik/zip4jvm/model/entry/ZipEntryTest.java index 6fe147bc5..a69fd15d9 100644 --- a/src/test/java/ru/olegcherednik/zip4jvm/model/entry/ZipEntryTest.java +++ b/src/test/java/ru/olegcherednik/zip4jvm/model/entry/ZipEntryTest.java @@ -29,7 +29,6 @@ import static ru.olegcherednik.zip4jvm.TestData.dirNameBikes; import static ru.olegcherednik.zip4jvm.TestData.fileBentley; import static ru.olegcherednik.zip4jvm.TestData.fileNameBentley; -import static ru.olegcherednik.zip4jvm.TestData.zipDirNameBikes; /** * @author Oleg Cherednik @@ -43,6 +42,6 @@ public void shouldRetrieveFileNameWhenToString() throws IOException { ZipEntry dir = ZipEntryBuilder.emptyDirectory(dirBikes, dirNameBikes, ZipEntrySettings.DEFAULT); assertThat(file.toString()).isEqualTo(fileNameBentley); - assertThat(dir.toString()).isEqualTo(zipDirNameBikes); + assertThat(dir.toString()).isEqualTo(dirNameBikes + '/'); } } diff --git a/src/test/java/ru/olegcherednik/zip4jvm/symlink/SymlinkCompatibilityTest.java b/src/test/java/ru/olegcherednik/zip4jvm/symlink/SymlinkCompatibilityTest.java index cd7363496..8d816b948 100644 --- a/src/test/java/ru/olegcherednik/zip4jvm/symlink/SymlinkCompatibilityTest.java +++ b/src/test/java/ru/olegcherednik/zip4jvm/symlink/SymlinkCompatibilityTest.java @@ -24,6 +24,7 @@ import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; import java.io.IOException; import java.nio.file.Files; @@ -31,7 +32,9 @@ import java.nio.file.Paths; import java.util.function.Consumer; +import static ru.olegcherednik.zip4jvm.TestData.dirNameBikes; import static ru.olegcherednik.zip4jvm.TestData.dirNameCars; +import static ru.olegcherednik.zip4jvm.TestData.dirNameEmpty; import static ru.olegcherednik.zip4jvm.TestData.fileNameBentley; import static ru.olegcherednik.zip4jvm.TestData.fileNameDucati; import static ru.olegcherednik.zip4jvm.TestData.fileNameEmpty; @@ -43,15 +46,12 @@ import static ru.olegcherednik.zip4jvm.TestData.symlinkAbsDirNameData; import static ru.olegcherednik.zip4jvm.TestData.symlinkAbsFileNameDucati; import static ru.olegcherednik.zip4jvm.TestData.symlinkAbsFileNameHonda; +import static ru.olegcherednik.zip4jvm.TestData.symlinkRelDirNameCars; import static ru.olegcherednik.zip4jvm.TestData.symlinkRelDirNameData; import static ru.olegcherednik.zip4jvm.TestData.symlinkRelFileNameDucati; import static ru.olegcherednik.zip4jvm.TestData.symlinkRelFileNameHonda; import static ru.olegcherednik.zip4jvm.TestData.symlinkTrnDirNameData; import static ru.olegcherednik.zip4jvm.TestData.symlinkTrnFileNameHonda; -import static ru.olegcherednik.zip4jvm.TestData.zipDirNameBikes; -import static ru.olegcherednik.zip4jvm.TestData.zipDirNameEmpty; -import static ru.olegcherednik.zip4jvm.TestData.zipSymlinkAbsDirNameData; -import static ru.olegcherednik.zip4jvm.TestData.zipSymlinkRelDirNameCars; import static ru.olegcherednik.zip4jvm.TestDataAssert.dirBikesAssert; import static ru.olegcherednik.zip4jvm.TestDataAssert.dirCarsAssert; import static ru.olegcherednik.zip4jvm.TestDataAssert.dirEmptyAssert; @@ -70,6 +70,7 @@ */ // TODO commented because of the problem in GitHub Actions //@Test +@SuppressWarnings("FieldNamingConvention") public class SymlinkCompatibilityTest { private static final Path rootDir = Zip4jvmSuite.generateSubDirNameWithTime(SymlinkCompatibilityTest.class); @@ -91,12 +92,13 @@ public void shouldUnzipPosixZipWithSymlink() throws IOException { UnzipIt.zip(zip).destDir(destDir).extract(); assertThatDirectory(destDir).exists().hasEntries(10).hasDirectories(2).hasRegularFiles(1).hasSymlinks(7); - assertThatDirectory(destDir).directory(zipSymlinkRelDirNameCars).matches(dirSymlinkCarsAssert); - assertThatDirectory(destDir).directory(zipSymlinkAbsDirNameData).matches(dir -> { + assertThatDirectory(destDir).directory(symlinkRelDirNameCars).matches(dirSymlinkCarsAssert); + assertThatDirectory(destDir).directory(symlinkAbsDirNameData).matches(dir -> { dir.exists().hasEntries(8).hasDirectories(2).hasRegularFiles(5).hasSymlinks(1); - dirBikesAssert.accept(dir.directory(zipDirNameBikes)); - dirEmptyAssert.accept(dir.directory(zipDirNameEmpty)); - dir.symlink(dirNameCars).exists().hasTarget("../" + zipSymlinkRelDirNameCars + zipSymlinkRelDirNameCars); + dirBikesAssert.accept(dir.directory(dirNameBikes)); + dirEmptyAssert.accept(dir.directory(dirNameEmpty)); + dir.symlink(dirNameCars).exists() + .hasTarget("../" + symlinkRelDirNameCars + '/' + symlinkRelDirNameCars + '/'); fileMcdonnelDouglasAssert.accept(dir.regularFile(fileNameMcdonnelDouglas)); fileSaintPetersburgAssert.accept(dir.regularFile(fileNameSaintPetersburg)); fileEmptyAssert.accept(dir.regularFile(fileNameEmpty)); @@ -106,12 +108,12 @@ public void shouldUnzipPosixZipWithSymlink() throws IOException { assertThatDirectory(destDir).symlink(symlinkTrnDirNameData).hasTarget(symlinkAbsDirNameData + '/'); assertThatDirectory(destDir).symlink(symlinkAbsFileNameDucati).hasTarget(fileNameDucati); assertThatDirectory(destDir).symlink(symlinkRelFileNameDucati).hasTarget(fileNameDucati); - assertThatDirectory(destDir).symlink(symlinkAbsFileNameHonda).hasTarget( - zipSymlinkAbsDirNameData + zipDirNameBikes + fileNameHonda); - assertThatDirectory(destDir).symlink(symlinkRelFileNameHonda).hasTarget( - zipSymlinkAbsDirNameData + zipDirNameBikes + fileNameHonda); - assertThatDirectory(destDir).symlink(symlinkTrnFileNameHonda).hasTarget( - zipSymlinkAbsDirNameData + zipDirNameBikes + fileNameHonda); + assertThatDirectory(destDir).symlink(symlinkAbsFileNameHonda) + .hasTarget(symlinkAbsDirNameData + '/' + dirNameBikes + '/' + fileNameHonda); + assertThatDirectory(destDir).symlink(symlinkRelFileNameHonda) + .hasTarget(symlinkAbsDirNameData + '/' + dirNameBikes + '/' + fileNameHonda); + assertThatDirectory(destDir).symlink(symlinkTrnFileNameHonda) + .hasTarget(symlinkAbsDirNameData + '/' + dirNameBikes + '/' + fileNameHonda); } public void shouldUnzipWinZipWithSymlink() throws IOException { @@ -121,12 +123,13 @@ public void shouldUnzipWinZipWithSymlink() throws IOException { UnzipIt.zip(zip).destDir(destDir).extract(); assertThatDirectory(destDir).exists().hasEntries(10).hasDirectories(2).hasRegularFiles(1).hasSymlinks(7); - assertThatDirectory(destDir).directory(zipSymlinkRelDirNameCars).matches(dirSymlinkCarsAssert); - assertThatDirectory(destDir).directory(zipSymlinkAbsDirNameData).matches(dir -> { + assertThatDirectory(destDir).directory(symlinkRelDirNameCars).matches(dirSymlinkCarsAssert); + assertThatDirectory(destDir).directory(symlinkAbsDirNameData).matches(dir -> { dir.exists().hasEntries(8).hasDirectories(2).hasRegularFiles(5).hasSymlinks(1); - dirBikesAssert.accept(dir.directory(zipDirNameBikes)); - dirEmptyAssert.accept(dir.directory(zipDirNameEmpty)); - dir.symlink(dirNameCars).exists().hasTarget("../" + zipSymlinkRelDirNameCars + zipSymlinkRelDirNameCars); + dirBikesAssert.accept(dir.directory(dirNameBikes)); + dirEmptyAssert.accept(dir.directory(dirNameEmpty)); + dir.symlink(dirNameCars).exists() + .hasTarget("../" + symlinkRelDirNameCars + '/' + symlinkRelDirNameCars + '/'); fileMcdonnelDouglasAssert.accept(dir.regularFile(fileNameMcdonnelDouglas)); fileSaintPetersburgAssert.accept(dir.regularFile(fileNameSaintPetersburg)); fileEmptyAssert.accept(dir.regularFile(fileNameEmpty)); @@ -136,18 +139,18 @@ public void shouldUnzipWinZipWithSymlink() throws IOException { assertThatDirectory(destDir).symlink(symlinkTrnDirNameData).hasTarget(symlinkAbsDirNameData + '/'); assertThatDirectory(destDir).symlink(symlinkAbsFileNameDucati).hasTarget(fileNameDucati); assertThatDirectory(destDir).symlink(symlinkRelFileNameDucati).hasTarget(fileNameDucati); - assertThatDirectory(destDir).symlink(symlinkAbsFileNameHonda).hasTarget( - zipSymlinkAbsDirNameData + zipDirNameBikes + fileNameHonda); - assertThatDirectory(destDir).symlink(symlinkRelFileNameHonda).hasTarget( - zipSymlinkAbsDirNameData + zipDirNameBikes + fileNameHonda); - assertThatDirectory(destDir).symlink(symlinkTrnFileNameHonda).hasTarget( - zipSymlinkAbsDirNameData + zipDirNameBikes + fileNameHonda); + assertThatDirectory(destDir).symlink(symlinkAbsFileNameHonda) + .hasTarget(symlinkAbsDirNameData + '/' + dirNameBikes + '/' + fileNameHonda); + assertThatDirectory(destDir).symlink(symlinkRelFileNameHonda) + .hasTarget(symlinkAbsDirNameData + '/' + dirNameBikes + '/' + fileNameHonda); + assertThatDirectory(destDir).symlink(symlinkTrnFileNameHonda) + .hasTarget(symlinkAbsDirNameData + '/' + dirNameBikes + '/' + fileNameHonda); } @SuppressWarnings("FieldNamingConvention") private static final Consumer> dirSymlinkCarsAssert = dir -> { dir.exists().hasEntries(4).hasDirectories(1).hasRegularFiles(3); - dirCarsAssert.accept(dir.directory(zipSymlinkRelDirNameCars)); + dirCarsAssert.accept(dir.directory(symlinkRelDirNameCars)); fileBentleyAssert.accept(dir.regularFile(fileNameBentley)); fileFerrariAssert.accept(dir.regularFile(fileNameFerrari)); fileWiesmannAssert.accept(dir.regularFile(fileNameWiesmann)); diff --git a/src/test/java/ru/olegcherednik/zip4jvm/symlink/ZipItSymlinkTest.java b/src/test/java/ru/olegcherednik/zip4jvm/symlink/ZipItSymlinkTest.java index 2b575023c..26e5609bb 100644 --- a/src/test/java/ru/olegcherednik/zip4jvm/symlink/ZipItSymlinkTest.java +++ b/src/test/java/ru/olegcherednik/zip4jvm/symlink/ZipItSymlinkTest.java @@ -33,7 +33,9 @@ import java.nio.file.Path; import java.util.function.Consumer; +import static ru.olegcherednik.zip4jvm.TestData.dirNameBikes; import static ru.olegcherednik.zip4jvm.TestData.dirNameCars; +import static ru.olegcherednik.zip4jvm.TestData.dirNameEmpty; import static ru.olegcherednik.zip4jvm.TestData.dirSrcSymlink; import static ru.olegcherednik.zip4jvm.TestData.fileNameBentley; import static ru.olegcherednik.zip4jvm.TestData.fileNameDucati; @@ -48,17 +50,13 @@ import static ru.olegcherednik.zip4jvm.TestData.symlinkAbsFileNameDucati; import static ru.olegcherednik.zip4jvm.TestData.symlinkAbsFileNameHonda; import static ru.olegcherednik.zip4jvm.TestData.symlinkRelDirData; +import static ru.olegcherednik.zip4jvm.TestData.symlinkRelDirNameCars; import static ru.olegcherednik.zip4jvm.TestData.symlinkRelDirNameData; import static ru.olegcherednik.zip4jvm.TestData.symlinkRelFileNameDucati; import static ru.olegcherednik.zip4jvm.TestData.symlinkRelFileNameHonda; import static ru.olegcherednik.zip4jvm.TestData.symlinkTrnDirNameData; import static ru.olegcherednik.zip4jvm.TestData.symlinkTrnFileNameHonda; -import static ru.olegcherednik.zip4jvm.TestData.zipDirNameBikes; -import static ru.olegcherednik.zip4jvm.TestData.zipDirNameEmpty; import static ru.olegcherednik.zip4jvm.TestData.zipSymlinkAbsDirNameData; -import static ru.olegcherednik.zip4jvm.TestData.zipSymlinkRelDirNameCars; -import static ru.olegcherednik.zip4jvm.TestData.zipSymlinkRelDirNameData; -import static ru.olegcherednik.zip4jvm.TestData.zipSymlinkTrnDirNameData; import static ru.olegcherednik.zip4jvm.TestDataAssert.dirBikesAssert; import static ru.olegcherednik.zip4jvm.TestDataAssert.dirCarsAssert; import static ru.olegcherednik.zip4jvm.TestDataAssert.dirEmptyAssert; @@ -138,10 +136,10 @@ public void shouldCreateZipNoSymlinkWhenReplaceSymlinkWithTarget() throws IOExce assertThatDirectory(zip.getParent()).exists().hasEntries(1).hasRegularFiles(1); assertThatZipFile(zip).root().hasEntries(10).hasDirectories(4).hasRegularFiles(6); - assertThatZipFile(zip).directory(zipSymlinkRelDirNameData).matches(rootAssert); - assertThatZipFile(zip).directory(zipSymlinkAbsDirNameData).matches(rootAssert); - assertThatZipFile(zip).directory(zipSymlinkTrnDirNameData).matches(rootAssert); - assertThatZipFile(zip).directory(zipSymlinkRelDirNameCars).matches(dirSymlinkCarsAssert); + assertThatZipFile(zip).directory(symlinkRelDirNameData).matches(rootAssert); + assertThatZipFile(zip).directory(symlinkAbsDirNameData).matches(rootAssert); + assertThatZipFile(zip).directory(symlinkTrnDirNameData).matches(rootAssert); + assertThatZipFile(zip).directory(symlinkRelDirNameCars).matches(dirSymlinkCarsAssert); assertThatZipFile(zip).regularFile(fileNameDucati).matches(fileDucatiAssert); assertThatZipFile(zip).regularFile(symlinkRelFileNameDucati).matches(fileDucatiAssert); assertThatZipFile(zip).regularFile(symlinkRelFileNameHonda).matches(fileHondaAssert); @@ -169,12 +167,13 @@ public void shouldCreateZipNoSymlinkWhenReplaceSymlinkWithUniqueTarget() throws assertThatDirectory(zip.getParent()).exists().hasEntries(1).hasRegularFiles(1); assertThatZipFile(zip).root().hasEntries(10).hasDirectories(2).hasRegularFiles(1).hasSymlinks(7); - assertThatZipFile(zip).directory(zipSymlinkRelDirNameCars).matches(dirSymlinkCarsAssert); - assertThatZipFile(zip).directory(zipSymlinkAbsDirNameData).matches(dir -> { + assertThatZipFile(zip).directory(symlinkRelDirNameCars).matches(dirSymlinkCarsAssert); + assertThatZipFile(zip).directory(symlinkAbsDirNameData).matches(dir -> { dir.exists().hasEntries(8).hasDirectories(2).hasRegularFiles(5).hasSymlinks(1); - dirBikesAssert.accept(dir.directory(zipDirNameBikes)); - dirEmptyAssert.accept(dir.directory(zipDirNameEmpty)); - dir.symlink(dirNameCars).exists().hasTarget("../" + zipSymlinkRelDirNameCars + zipSymlinkRelDirNameCars); + dirBikesAssert.accept(dir.directory(dirNameBikes)); + dirEmptyAssert.accept(dir.directory(dirNameEmpty)); + dir.symlink(dirNameCars).exists() + .hasTarget("../" + symlinkRelDirNameCars + '/' + symlinkRelDirNameCars + '/'); fileMcdonnelDouglasAssert.accept(dir.regularFile(fileNameMcdonnelDouglas)); fileSaintPetersburgAssert.accept(dir.regularFile(fileNameSaintPetersburg)); fileEmptyAssert.accept(dir.regularFile(fileNameEmpty)); @@ -185,16 +184,16 @@ public void shouldCreateZipNoSymlinkWhenReplaceSymlinkWithUniqueTarget() throws assertThatZipFile(zip).symlink(symlinkAbsFileNameDucati).hasTarget(fileNameDucati); assertThatZipFile(zip).symlink(symlinkRelFileNameDucati).hasTarget(fileNameDucati); assertThatZipFile(zip).symlink(symlinkAbsFileNameHonda).hasTarget( - zipSymlinkAbsDirNameData + zipDirNameBikes + fileNameHonda); + zipSymlinkAbsDirNameData + dirNameBikes + '/' + fileNameHonda); assertThatZipFile(zip).symlink(symlinkRelFileNameHonda).hasTarget( - zipSymlinkAbsDirNameData + zipDirNameBikes + fileNameHonda); + zipSymlinkAbsDirNameData + dirNameBikes + '/' + fileNameHonda); assertThatZipFile(zip).symlink(symlinkTrnFileNameHonda).hasTarget( - zipSymlinkAbsDirNameData + zipDirNameBikes + fileNameHonda); + zipSymlinkAbsDirNameData + dirNameBikes + '/' + fileNameHonda); } private static final Consumer> dirSymlinkCarsAssert = dir -> { dir.exists().hasEntries(4).hasDirectories(1).hasRegularFiles(3); - dirCarsAssert.accept(dir.directory(zipSymlinkRelDirNameCars)); + dirCarsAssert.accept(dir.directory(symlinkRelDirNameCars)); fileBentleyAssert.accept(dir.regularFile(fileNameBentley)); fileFerrariAssert.accept(dir.regularFile(fileNameFerrari)); fileWiesmannAssert.accept(dir.regularFile(fileNameWiesmann));