diff --git a/pom.xml b/pom.xml index 8b53b5db5..9d7db1c68 100644 --- a/pom.xml +++ b/pom.xml @@ -104,7 +104,7 @@ 3.5.1 3.12.0 3.6.0 - 2.7.0 + 3.5.0 3.28.0 5.2.5 3.9.0 diff --git a/src/changes/changes.xml b/src/changes/changes.xml index 7dd4813ae..9a21c03f0 100644 --- a/src/changes/changes.xml +++ b/src/changes/changes.xml @@ -248,6 +248,7 @@ Add DatabaseConfig.FEATURE_SKIP_CYCLE_CHECK, an opt-in escape hatch letting DatabaseSequenceFilter proceed on a schema with a foreign-key dependency cycle instead of unconditionally rejecting it with CyclicTablesDependencyException (issues 501 and 517: dbUnit could not order, and therefore could not CLEAN_INSERT/DELETE_ALL, tables bound together by circular FK references). This is the configurable cycle-breaking escape hatch issue 411 originally proposed rather than a full topological resolution of the cycle itself: DatabaseSequenceFilter.sortTableNames now collapses each cycle into a single strongly-connected-component unit for ordering purposes and logs a warning per cycle instead of throwing, so a table outside the cycle is still correctly ordered relative to it (e.g. a table with its own FK to a cyclic table still sorts after the whole cycle, not merely after whichever cyclic member happened to be placed) and every requested table is still returned exactly once; only the relative order of the tables making up the cycle itself is unresolved and falls back to their original input order, leaving the caller responsible for making the cycle insertable another way (e.g. nullable FK columns populated in a later operation, or database-side deferred constraint checking). Off by default, preserving the existing fail-fast behavior for callers who never touch it. + Update maven dependency org.gaul:modernizer-maven-plugin from 2.7.0 to 3.5.0. diff --git a/src/main/java/org/dbunit/ant/Export.java b/src/main/java/org/dbunit/ant/Export.java index 1588716b6..1459000dd 100644 --- a/src/main/java/org/dbunit/ant/Export.java +++ b/src/main/java/org/dbunit/ant/Export.java @@ -22,9 +22,9 @@ package org.dbunit.ant; import java.io.File; -import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; +import java.nio.file.Files; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.sql.SQLException; @@ -256,7 +256,7 @@ public void execute(IDatabaseConnection connection) throws DatabaseUnitException } else { - OutputStream out = new FileOutputStream(_dest); + OutputStream out = Files.newOutputStream(_dest.toPath()); try { if (_format.equalsIgnoreCase(FORMAT_FLAT)) diff --git a/src/main/java/org/dbunit/ant/Operation.java b/src/main/java/org/dbunit/ant/Operation.java index 9437db232..01bcfe614 100644 --- a/src/main/java/org/dbunit/ant/Operation.java +++ b/src/main/java/org/dbunit/ant/Operation.java @@ -113,7 +113,7 @@ public void addConfiguredFileset(FileSet fileSet) { DirectoryScanner scanner = fileSet.getDirectoryScanner(getProject()); for (String file : scanner.getIncludedFiles()) { - _sources.add(new File(scanner.getBasedir(), file)); + _sources.add(scanner.getBasedir().toPath().resolve(file).toFile()); } } diff --git a/src/main/java/org/dbunit/database/DatabaseTableMetaData.java b/src/main/java/org/dbunit/database/DatabaseTableMetaData.java index ba77cc8dd..5100460f1 100644 --- a/src/main/java/org/dbunit/database/DatabaseTableMetaData.java +++ b/src/main/java/org/dbunit/database/DatabaseTableMetaData.java @@ -27,7 +27,7 @@ import java.sql.SQLException; import java.util.ArrayList; import java.util.Arrays; -import java.util.Collections; +import java.util.Comparator; import java.util.List; import org.dbunit.dataset.AbstractTableMetaData; @@ -238,7 +238,7 @@ private String[] getPrimaryKeyNames() throws SQLException resultSet.close(); } - Collections.sort(list); + list.sort(Comparator.naturalOrder()); String[] keys = new String[list.size()]; for (int i = 0; i < keys.length; i++) { diff --git a/src/main/java/org/dbunit/database/statement/BatchStatementDecorator.java b/src/main/java/org/dbunit/database/statement/BatchStatementDecorator.java index e2e00204c..9ee9745e1 100644 --- a/src/main/java/org/dbunit/database/statement/BatchStatementDecorator.java +++ b/src/main/java/org/dbunit/database/statement/BatchStatementDecorator.java @@ -29,9 +29,6 @@ import org.dbunit.dataset.datatype.TypeCastException; import java.sql.SQLException; -import java.util.ArrayList; -import java.util.List; -import java.util.StringTokenizer; /** * Decorator that adapts a plain {@link IBatchStatement} to the {@link IPreparedBatchStatement} @@ -57,19 +54,7 @@ public class BatchStatementDecorator implements IPreparedBatchStatement BatchStatementDecorator(String sql, IBatchStatement statement) { - List list = new ArrayList(); - StringTokenizer tokenizer = new StringTokenizer(sql, "?"); - while (tokenizer.hasMoreTokens()) - { - list.add(tokenizer.nextToken()); - } - - if (sql.endsWith("?")) - { - list.add(""); - } - - _sqlTemplate = (String[])list.toArray(new String[0]); + _sqlTemplate = sql.split("\\?", -1); _statement = statement; // reset sql buffer diff --git a/src/main/java/org/dbunit/dataset/DataSetUtils.java b/src/main/java/org/dbunit/dataset/DataSetUtils.java index 710857f3c..4b856e4a3 100644 --- a/src/main/java/org/dbunit/dataset/DataSetUtils.java +++ b/src/main/java/org/dbunit/dataset/DataSetUtils.java @@ -23,7 +23,6 @@ import java.util.ArrayList; import java.util.List; -import java.util.StringTokenizer; import org.dbunit.Assertion; import org.dbunit.dataset.datatype.DataType; @@ -187,22 +186,7 @@ public static String getSqlValueString(Object value, DataType dataType) } // escaping single quotes - final StringBuilder buffer = new StringBuilder(stringValue.length() * 2); - StringTokenizer tokenizer = new StringTokenizer(stringValue, "'", true); - - buffer.append("'"); - while (tokenizer.hasMoreTokens()) - { - String token = tokenizer.nextToken(); - buffer.append(token); - if (token.equals("'")) - { - buffer.append("'"); - } - } - buffer.append("'"); - return buffer.toString(); - + return "'" + stringValue.replace("'", "''") + "'"; } return stringValue; diff --git a/src/main/java/org/dbunit/dataset/csv/CsvDataSetWriter.java b/src/main/java/org/dbunit/dataset/csv/CsvDataSetWriter.java index 4c4da8f7d..67cf9e819 100644 --- a/src/main/java/org/dbunit/dataset/csv/CsvDataSetWriter.java +++ b/src/main/java/org/dbunit/dataset/csv/CsvDataSetWriter.java @@ -23,12 +23,13 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.BufferedWriter; import java.io.File; -import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.io.Writer; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Paths; import java.util.Iterator; import java.util.LinkedList; import java.util.List; @@ -106,26 +107,34 @@ public void write(IDataSet dataSet) throws DataSetException { provider.produce(); } + /** + * {@inheritDoc} + */ + @Override public void startDataSet() throws DataSetException { logger.debug("startDataSet() - start"); try { tableList = new LinkedList(); - new File(getTheDirectory()).mkdirs(); + Paths.get(getTheDirectory()).toFile().mkdirs(); } catch (Exception e) { throw new DataSetException("Error while creating the destination directory '" + getTheDirectory() + "'", e); } } + /** + * {@inheritDoc} + */ + @Override public void endDataSet() throws DataSetException { logger.debug("endDataSet() - start"); // write out table ordering file - File orderingFile = new File(getTheDirectory(), CsvDataSet.TABLE_ORDERING_FILE); - + File orderingFile = Paths.get(getTheDirectory(), CsvDataSet.TABLE_ORDERING_FILE).toFile(); + PrintWriter pw = null; try { - pw = new PrintWriter(new FileWriter(orderingFile)); + pw = new PrintWriter(Files.newBufferedWriter(orderingFile.toPath(), StandardCharsets.UTF_8)); for (Iterator fileNames = tableList.iterator(); fileNames.hasNext();) { String file = (String) fileNames.next(); pw.println(file); @@ -141,13 +150,17 @@ public void endDataSet() throws DataSetException { } } + /** + * {@inheritDoc} + */ + @Override public void startTable(ITableMetaData metaData) throws DataSetException { logger.debug("startTable(metaData={}) - start", metaData); try { _activeMetaData = metaData; String tableName = _activeMetaData.getTableName(); - setWriter(new BufferedWriter(new FileWriter(getTheDirectory() + File.separator + tableName + ".csv"))); + setWriter(Files.newBufferedWriter(Paths.get(getTheDirectory(), tableName + ".csv"), StandardCharsets.UTF_8)); writeColumnNames(); getWriter().write(System.getProperty("line.separator")); } catch (IOException e) { diff --git a/src/main/java/org/dbunit/dataset/csv/CsvParserImpl.java b/src/main/java/org/dbunit/dataset/csv/CsvParserImpl.java index bfb09645d..db7b4767c 100644 --- a/src/main/java/org/dbunit/dataset/csv/CsvParserImpl.java +++ b/src/main/java/org/dbunit/dataset/csv/CsvParserImpl.java @@ -23,9 +23,10 @@ import java.io.BufferedReader; import java.io.File; -import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; import java.io.LineNumberReader; import java.io.Reader; import java.net.URL; @@ -100,7 +101,8 @@ public List parse(String csv) throws PipelineException, IllegalInputCharacterExc public List parse(File file) throws IOException, CsvParserException { logger.debug("parse(file={}) - start", file); - BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(file))); + BufferedReader reader = new BufferedReader( + new InputStreamReader(Files.newInputStream(file.toPath()), StandardCharsets.UTF_8)); try { return parse(reader, file.getAbsolutePath().toString()); } @@ -112,7 +114,8 @@ public List parse(File file) throws IOException, CsvParserException { public List parse(URL url) throws IOException, CsvParserException { logger.debug("parse(url={}) - start", url); - BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream())); + BufferedReader reader = new BufferedReader( + new InputStreamReader(url.openStream(), StandardCharsets.UTF_8)); try { return parse(reader, url.toString()); } diff --git a/src/main/java/org/dbunit/dataset/csv/CsvProducer.java b/src/main/java/org/dbunit/dataset/csv/CsvProducer.java index 69ffb475d..97128396f 100644 --- a/src/main/java/org/dbunit/dataset/csv/CsvProducer.java +++ b/src/main/java/org/dbunit/dataset/csv/CsvProducer.java @@ -26,7 +26,12 @@ import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; +import java.net.URI; +import java.net.URISyntaxException; import java.net.URL; +import java.nio.charset.StandardCharsets; +import java.nio.file.InvalidPathException; +import java.nio.file.Paths; import java.util.ArrayList; import java.util.Iterator; import java.util.List; @@ -87,10 +92,19 @@ public void setConsumer(IDataSetConsumer consumer) throws DataSetException { _consumer = consumer; } + /** + * {@inheritDoc} + */ + @Override public void produce() throws DataSetException { logger.debug("produce() - start"); - File dir = new File(_theDirectory); + File dir; + try { + dir = Paths.get(_theDirectory).toFile(); + } catch (final InvalidPathException e) { + throw new DataSetException("'" + _theDirectory + "' should be a directory", e); + } if (!dir.isDirectory()) { throw new DataSetException("'" + _theDirectory + "' should be a directory"); @@ -98,11 +112,11 @@ public void produce() throws DataSetException { _consumer.startDataSet(); try { - List tableSpecs = CsvProducer.getTables(dir.toURL(), CsvDataSet.TABLE_ORDERING_FILE); + List tableSpecs = CsvProducer.getTables(dir.toURI().toURL(), CsvDataSet.TABLE_ORDERING_FILE); for (Iterator tableIter = tableSpecs.iterator(); tableIter.hasNext();) { String table = (String) tableIter.next(); try { - produceFromFile(new File(dir, table + ".csv")); + produceFromFile(dir.toPath().resolve(table + ".csv").toFile()); } catch (CsvParserException e) { throw new DataSetException("error producing dataset for table '" + table + "'", e); } catch (DataSetException e) { @@ -169,10 +183,10 @@ public static List getTables(URL base, String tableList) throws IOException { logger.debug("getTables(base={}, tableList={}) - start", base, tableList); List orderedNames = new ArrayList(); - InputStream tableListStream = new URL(base, tableList).openStream(); + InputStream tableListStream = resolveRelative(base, tableList).openStream(); BufferedReader reader = null; try { - reader = new BufferedReader(new InputStreamReader(tableListStream)); + reader = new BufferedReader(new InputStreamReader(tableListStream, StandardCharsets.UTF_8)); String line = null; while((line = reader.readLine()) != null) { String table = line.trim(); @@ -190,4 +204,35 @@ public static List getTables(URL base, String tableList) throws IOException { return orderedNames; } + /** + * Resolves a relative spec against a base URL without the deprecated + * {@code URL(URL, String)} constructor. + * + *

{@link URI#resolve(String)} handles this correctly for a hierarchical + * base (e.g. a plain {@code file:}/{@code http:} URL, whether it names a + * directory or a sibling file), but for an opaque base such as a + * {@code jar:...!/} URL it silently ignores the base and returns the spec + * as-is. For an opaque base, the spec is instead appended directly to the + * scheme-specific part, matching how the {@code jar:} protocol handler + * itself combines a root jar URL with an entry path. + * + * @param base the base URL. + * @param spec the relative spec to resolve against it. + * @return the resolved URL. + * @throws IOException if the base or the resolved URL is malformed. + */ + static URL resolveRelative(final URL base, final String spec) throws IOException { + try { + final URI baseUri = base.toURI(); + final URI resolved = baseUri.isOpaque() + ? new URI(baseUri.getScheme(), + baseUri.getSchemeSpecificPart() + spec, + baseUri.getFragment()) + : baseUri.resolve(spec); + return resolved.toURL(); + } catch (final URISyntaxException e) { + throw new IOException(e); + } + } + } diff --git a/src/main/java/org/dbunit/dataset/csv/CsvURLProducer.java b/src/main/java/org/dbunit/dataset/csv/CsvURLProducer.java index 0479d724b..8a5589ccb 100644 --- a/src/main/java/org/dbunit/dataset/csv/CsvURLProducer.java +++ b/src/main/java/org/dbunit/dataset/csv/CsvURLProducer.java @@ -92,9 +92,10 @@ public void setConsumer(IDataSetConsumer consumer) throws DataSetException { _consumer = consumer; } - /* - * @see IDataSetProducer#produce() + /** + * {@inheritDoc} */ + @Override public void produce() throws DataSetException { logger.debug("produce() - start"); @@ -104,7 +105,7 @@ public void produce() throws DataSetException { for (Iterator tableIter = tableSpecs.iterator(); tableIter.hasNext();) { String table = (String) tableIter.next(); try { - produceFromURL(new URL(base, table + ".csv")); + produceFromURL(CsvProducer.resolveRelative(base, table + ".csv")); } catch (CsvParserException e) { throw new DataSetException("error producing dataset for table '" + table + "'", e); } diff --git a/src/main/java/org/dbunit/dataset/datatype/BytesDataType.java b/src/main/java/org/dbunit/dataset/datatype/BytesDataType.java index 0609d93b7..bd8656e8a 100644 --- a/src/main/java/org/dbunit/dataset/datatype/BytesDataType.java +++ b/src/main/java/org/dbunit/dataset/datatype/BytesDataType.java @@ -23,11 +23,15 @@ import java.io.ByteArrayOutputStream; import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; +import java.nio.file.Files; +import java.nio.file.InvalidPathException; +import java.nio.file.NoSuchFileException; +import java.nio.file.Paths; import java.net.MalformedURLException; +import java.net.URI; +import java.net.URISyntaxException; import java.net.URL; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; @@ -117,8 +121,21 @@ private byte[] toByteArray(final InputStream in, final int length) public byte[] loadFile(final String filename) throws IOException { // Not an URL, try as file name - final File file = new File(filename); - return toByteArray(new FileInputStream(file), (int) file.length()); + final File file; + try + { + file = Paths.get(filename).toFile(); + } + catch (final InvalidPathException e) + { + // A syntactically invalid path is just as much "not a file" as a + // missing one, so callers that treat NoSuchFileException as a + // signal to fall back to another interpretation see it here too. + final NoSuchFileException wrapped = new NoSuchFileException(filename); + wrapped.initCause(e); + throw wrapped; + } + return toByteArray(Files.newInputStream(file.toPath()), (int) file.length()); } /** @@ -131,7 +148,18 @@ public byte[] loadFile(final String filename) throws IOException public byte[] loadURL(final String urlAsString) throws IOException { // Not an URL, try as file name - final URL url = new URL(urlAsString); + final URL url; + try + { + url = new URI(urlAsString).toURL(); + } + catch (final URISyntaxException | IllegalArgumentException e) + { + final MalformedURLException wrapped = + new MalformedURLException(e.getMessage()); + wrapped.initCause(e); + throw wrapped; + } return toByteArray(url.openStream(), 0); } @@ -284,7 +312,7 @@ public Object typeCast(final Object value) throws TypeCastException { // Not an URL, try as file name return loadFile(stringValue); - } catch (final FileNotFoundException e2) + } catch (final NoSuchFileException e2) { logger.debug( "Assuming given string to be Base64 and not a URI or File"); @@ -344,7 +372,7 @@ public Object typeCast(final Object value) throws TypeCastException try { final File file = (File) value; - return toByteArray(new FileInputStream(file), + return toByteArray(Files.newInputStream(file.toPath()), (int) file.length()); } catch (final IOException e) { diff --git a/src/main/java/org/dbunit/dataset/excel/XlsDataSet.java b/src/main/java/org/dbunit/dataset/excel/XlsDataSet.java index 09e4f3428..0b4cd4ade 100644 --- a/src/main/java/org/dbunit/dataset/excel/XlsDataSet.java +++ b/src/main/java/org/dbunit/dataset/excel/XlsDataSet.java @@ -22,10 +22,10 @@ import java.io.BufferedInputStream; import java.io.File; -import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; +import java.nio.file.Files; import org.apache.poi.EncryptedDocumentException; import org.apache.poi.ss.usermodel.Workbook; @@ -71,7 +71,7 @@ public XlsDataSet(File file) throws IOException, DataSetException { _tables = super.createTableNameMap(); - try (InputStream in = new BufferedInputStream(new FileInputStream(file))) + try (InputStream in = new BufferedInputStream(Files.newInputStream(file.toPath()))) { Workbook workbook = createWorkbook(in); loadSheets(workbook); diff --git a/src/main/java/org/dbunit/dataset/json/JsonProducer.java b/src/main/java/org/dbunit/dataset/json/JsonProducer.java index 13315a289..71b13e50d 100644 --- a/src/main/java/org/dbunit/dataset/json/JsonProducer.java +++ b/src/main/java/org/dbunit/dataset/json/JsonProducer.java @@ -22,9 +22,9 @@ package org.dbunit.dataset.json; import java.io.File; -import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; +import java.nio.file.Files; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.LinkedHashSet; @@ -86,7 +86,7 @@ public class JsonProducer implements IDataSetProducer */ public JsonProducer(final File file) throws IOException { - this(new FileInputStream(file), true); + this(Files.newInputStream(file.toPath()), true); } /** diff --git a/src/main/java/org/dbunit/dataset/sqlloader/SqlLoaderControlParserImpl.java b/src/main/java/org/dbunit/dataset/sqlloader/SqlLoaderControlParserImpl.java index 997559072..52d0c17bd 100644 --- a/src/main/java/org/dbunit/dataset/sqlloader/SqlLoaderControlParserImpl.java +++ b/src/main/java/org/dbunit/dataset/sqlloader/SqlLoaderControlParserImpl.java @@ -21,18 +21,20 @@ package org.dbunit.dataset.sqlloader; import java.io.File; -import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.LineNumberReader; +import java.net.URISyntaxException; import java.net.URL; +import java.nio.file.FileSystemNotFoundException; +import java.nio.file.Files; +import java.nio.file.Paths; import java.nio.MappedByteBuffer; import java.nio.channels.FileChannel; import java.text.CharacterIterator; import java.text.StringCharacterIterator; import java.util.ArrayList; import java.util.List; -import java.util.StringTokenizer; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -147,7 +149,12 @@ public List parse(String csv) throws PipelineException, IllegalInputCharacterExc */ public List parse(URL url) throws IOException, SqlLoaderControlParserException { logger.debug("parse(url={}) - start", url); - return parse(new File(url.toString())); + try { + return parse(Paths.get(url.toURI()).toFile()); + } catch (final URISyntaxException | IllegalArgumentException + | FileSystemNotFoundException e) { + throw new IOException(e); + } } /** @@ -166,13 +173,13 @@ public List parse(File controlFile) { logger.debug("parse(controlFile={}) - start", controlFile); - FileInputStream fis = new FileInputStream(controlFile); - - FileChannel fc = fis.getChannel(); - - MappedByteBuffer mbf = fc.map(FileChannel.MapMode.READ_ONLY, 0, fc.size()); - byte[] barray = new byte[(int) (fc.size())]; - mbf.get(barray); + byte[] barray; + try (FileChannel fc = FileChannel.open(controlFile.toPath())) + { + MappedByteBuffer mbf = fc.map(FileChannel.MapMode.READ_ONLY, 0, fc.size()); + barray = new byte[(int) (fc.size())]; + mbf.get(barray); + } String lines = new String(barray); //one big string @@ -200,7 +207,7 @@ public List parse(File controlFile) List columnList = parseColumns(lines, rows); LineNumberReader lineNumberReader = - new LineNumberReader(new InputStreamReader(new FileInputStream(dataFile))); + new LineNumberReader(new InputStreamReader(Files.newInputStream(dataFile.toPath()))); try { parseTheData(columnList, lineNumberReader, rows); } @@ -218,8 +225,8 @@ public List parse(File controlFile) private File resolveFile(File parentDir, String fileName) { // Initially assume that we have an absolute fileName - File dataFile = new File(fileName); - + File dataFile = Paths.get(fileName).toFile(); + // If fileName was not absolute build it using the given parent if(!dataFile.isAbsolute()) { fileName = fileName.replaceAll("\\\\", "/"); @@ -231,7 +238,7 @@ private File resolveFile(File parentDir, String fileName) { if(fileName.startsWith(".")){ fileName = fileName.substring(1); } - dataFile = new File(parentDir, fileName); + dataFile = parentDir.toPath().resolve(fileName).toFile(); } return dataFile; } @@ -299,12 +306,11 @@ private List parseColumns(String controlFileContent, List rows) throws IOExcepti columnFragment = columnFragment.replaceAll("\".*?\"", ""); columnFragment = columnFragment.replaceAll("\n", ""); - StringTokenizer tok = new StringTokenizer(columnFragment, ","); - - while (tok.hasMoreElements()) { - - String col = (String) tok.nextElement(); - col = parseForRegexp(col, ".*^([a-zA-Z0-9_]*)\\s").trim(); //column is the first part. + for (final String rawCol : columnFragment.split(",")) { + if (rawCol.isEmpty()) { + continue; + } + final String col = parseForRegexp(rawCol, ".*^([a-zA-Z0-9_]*)\\s").trim(); //column is the first part. columnList.add(col); } @@ -433,4 +439,4 @@ public String getTableName() { return this.tableName; } -} +} \ No newline at end of file diff --git a/src/main/java/org/dbunit/dataset/sqlloader/SqlLoaderControlProducer.java b/src/main/java/org/dbunit/dataset/sqlloader/SqlLoaderControlProducer.java index e69990a2d..71022545d 100644 --- a/src/main/java/org/dbunit/dataset/sqlloader/SqlLoaderControlProducer.java +++ b/src/main/java/org/dbunit/dataset/sqlloader/SqlLoaderControlProducer.java @@ -22,6 +22,7 @@ import java.io.File; import java.io.IOException; +import java.nio.file.Paths; import java.util.Iterator; import java.util.List; @@ -86,7 +87,7 @@ public class SqlLoaderControlProducer implements IDataSetProducer { public SqlLoaderControlProducer(String controlFilesDir, String tableOrderFile) throws DataSetException { - this(new File(controlFilesDir), new File(tableOrderFile)); + this(Paths.get(controlFilesDir).toFile(), Paths.get(tableOrderFile).toFile()); } /** @@ -145,7 +146,7 @@ public void produce() throws DataSetException { for (Iterator tableIter = this.orderedTableNames.iterator(); tableIter.hasNext();) { String table = (String) tableIter.next(); try { - File ctlFile = new File(dir, table + ".ctl"); + File ctlFile = dir.toPath().resolve(table + ".ctl").toFile(); produceFromControlFile(ctlFile); } catch (SqlLoaderControlParserException e) { @@ -221,7 +222,7 @@ public static List getTables(File controlFilesDir, File tableList) throws IOExce logger.debug("getTables(controlFilesDir={}, tableList={}) - start", controlFilesDir, tableList); // Copy file into the control directory - File tmpTableList = new File(controlFilesDir, TMP_TABLE_LIST_FILENAME); + File tmpTableList = controlFilesDir.toPath().resolve(TMP_TABLE_LIST_FILENAME).toFile(); FileHelper.copyFile(tableList, tmpTableList); List orderedNames; @@ -237,4 +238,4 @@ public static List getTables(File controlFilesDir, File tableList) throws IOExce return orderedNames; } -} +} \ No newline at end of file diff --git a/src/main/java/org/dbunit/dataset/xml/FlatDtdProducer.java b/src/main/java/org/dbunit/dataset/xml/FlatDtdProducer.java index 30fe73c48..bc30caadd 100644 --- a/src/main/java/org/dbunit/dataset/xml/FlatDtdProducer.java +++ b/src/main/java/org/dbunit/dataset/xml/FlatDtdProducer.java @@ -27,7 +27,7 @@ import java.util.LinkedList; import java.util.List; import java.util.Map; -import java.util.StringTokenizer; +import java.util.regex.Pattern; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; @@ -298,6 +298,9 @@ public void startDTD(final String name, final String publicId, final String syst } } + /** + * {@inheritDoc} + */ @Override public void endDTD() throws SAXException { @@ -326,10 +329,11 @@ public void endDTD() throws SAXException // Parse the root element model to determine the table sequence. // Support all sequence or choices model but not the mix of both. final String delim = (rootModel.indexOf(",") != -1) ? "," : "|"; - final StringTokenizer tokenizer = new StringTokenizer(rootModel, delim); - while (tokenizer.hasMoreTokens()) { - String tableName = tokenizer.nextToken(); - tableName = cleanupTableName(tableName); + for (final String rawTableName : rootModel.split(Pattern.quote(delim))) { + if (rawTableName.isEmpty()) { + continue; + } + final String tableName = cleanupTableName(rawTableName); addTable(tableName); } } diff --git a/src/main/java/org/dbunit/dataset/yaml/YamlProducer.java b/src/main/java/org/dbunit/dataset/yaml/YamlProducer.java index 6eb97fc45..732e69a73 100644 --- a/src/main/java/org/dbunit/dataset/yaml/YamlProducer.java +++ b/src/main/java/org/dbunit/dataset/yaml/YamlProducer.java @@ -35,9 +35,9 @@ import org.yaml.snakeyaml.constructor.DuplicateKeyException; import java.io.File; -import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; +import java.nio.file.Files; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.LinkedHashSet; @@ -75,7 +75,7 @@ public class YamlProducer implements IDataSetProducer */ public YamlProducer(File file) throws IOException { - this(new FileInputStream(file)); + this(Files.newInputStream(file.toPath())); } /** diff --git a/src/main/java/org/dbunit/util/Base64.java b/src/main/java/org/dbunit/util/Base64.java index 8d43a08d0..464a81ab7 100644 --- a/src/main/java/org/dbunit/util/Base64.java +++ b/src/main/java/org/dbunit/util/Base64.java @@ -20,7 +20,8 @@ */ package org.dbunit.util; -import java.io.FileInputStream; +import java.nio.file.Files; +import java.nio.file.Paths; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -152,7 +153,9 @@ public static void main(String[] args) try { - FileInputStream fis = new FileInputStream("c:\\abcd.txt"); + // Fully qualified: this class declares its own InputStream below, + // which would shadow an import of java.io.InputStream. + java.io.InputStream fis = Files.newInputStream(Paths.get("c:\\abcd.txt")); InputStream b64is = new InputStream(fis, DECODE); int ib = 0; while ((ib = b64is.read()) > 0) diff --git a/src/main/java/org/dbunit/util/FileHelper.java b/src/main/java/org/dbunit/util/FileHelper.java index 16352dc55..79e89ab6c 100644 --- a/src/main/java/org/dbunit/util/FileHelper.java +++ b/src/main/java/org/dbunit/util/FileHelper.java @@ -22,13 +22,13 @@ import java.io.BufferedReader; import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.MalformedURLException; import java.nio.channels.FileChannel; +import java.nio.file.Files; +import java.nio.file.StandardOpenOption; import java.util.ArrayList; import java.util.List; @@ -124,12 +124,11 @@ public static void copyFile(File srcFile, File destFile) throws IOException { logger.debug("copyFile(srcFile={}, destFile={}) - start", srcFile, destFile); - try (FileInputStream srcStream = new FileInputStream(srcFile); - FileOutputStream dstStream = new FileOutputStream(destFile)) + try (FileChannel srcChannel = FileChannel.open(srcFile.toPath()); + FileChannel dstChannel = FileChannel.open(destFile.toPath(), + StandardOpenOption.WRITE, StandardOpenOption.CREATE, + StandardOpenOption.TRUNCATE_EXISTING)) { - FileChannel srcChannel = srcStream.getChannel(); - FileChannel dstChannel = dstStream.getChannel(); - // Copy file contents from source to destination dstChannel.transferFrom(srcChannel, 0, srcChannel.size()); } @@ -147,7 +146,7 @@ public static List readLines(File theFile) throws IOException { logger.debug("readLines(theFile={}) - start", theFile); - InputStream tableListStream = new FileInputStream(theFile); + InputStream tableListStream = Files.newInputStream(theFile.toPath()); try { List orderedNames = new ArrayList(); BufferedReader reader = new BufferedReader(new InputStreamReader(tableListStream)); @@ -165,4 +164,4 @@ public static List readLines(File theFile) throws IOException } } -} +} \ No newline at end of file diff --git a/src/main/java/org/dbunit/util/concurrent/PropertyChangeMulticaster.java b/src/main/java/org/dbunit/util/concurrent/PropertyChangeMulticaster.java index 49c9be263..629b234a1 100644 --- a/src/main/java/org/dbunit/util/concurrent/PropertyChangeMulticaster.java +++ b/src/main/java/org/dbunit/util/concurrent/PropertyChangeMulticaster.java @@ -420,9 +420,9 @@ public void firePropertyChange(String propertyName, if (oldValue != newValue) { multicast(new PropertyChangeEvent(source, - propertyName, - new Boolean(oldValue), - new Boolean(newValue))); + propertyName, + oldValue, + newValue)); } } diff --git a/src/test/java/org/dbunit/DatabaseEnvironment.java b/src/test/java/org/dbunit/DatabaseEnvironment.java index 8cd14024b..eb0f0816e 100644 --- a/src/test/java/org/dbunit/DatabaseEnvironment.java +++ b/src/test/java/org/dbunit/DatabaseEnvironment.java @@ -22,9 +22,11 @@ package org.dbunit; import java.io.File; -import java.io.FileReader; import java.io.IOException; import java.io.InputStream; +import java.io.Reader; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; import java.sql.Connection; import java.sql.DriverManager; import java.util.Properties; @@ -184,7 +186,10 @@ public DatabaseEnvironment(final DatabaseProfile profile, _profile = profile; final File file = TestUtils.getFile("xml/dataSetTest.xml"); - _dataSet = new XmlDataSet(new FileReader(file)); + try (Reader reader = Files.newBufferedReader(file.toPath(), StandardCharsets.UTF_8)) + { + _dataSet = new XmlDataSet(reader); + } _databaseTester = new JdbcDatabaseTester(_profile.getDriverClass(), _profile.getConnectionUrl(), _profile.getUser(), _profile.getPassword(), _profile.getSchema()); diff --git a/src/test/java/org/dbunit/DatabaseProfile.java b/src/test/java/org/dbunit/DatabaseProfile.java index d29634e6a..09a94c08c 100644 --- a/src/test/java/org/dbunit/DatabaseProfile.java +++ b/src/test/java/org/dbunit/DatabaseProfile.java @@ -110,10 +110,13 @@ public String[] getUnsupportedFeatures() } List stringList = new ArrayList(); - StringTokenizer tokenizer = new StringTokenizer(property, ","); - while (tokenizer.hasMoreTokens()) + for (final String token : property.split(",")) { - stringList.add(tokenizer.nextToken().trim()); + final String trimmed = token.trim(); + if (!trimmed.isEmpty()) + { + stringList.add(trimmed); + } } return stringList.toArray(new String[stringList.size()]); } diff --git a/src/test/java/org/dbunit/DdlExecutor.java b/src/test/java/org/dbunit/DdlExecutor.java index 7f1b6507a..17b7b2903 100644 --- a/src/test/java/org/dbunit/DdlExecutor.java +++ b/src/test/java/org/dbunit/DdlExecutor.java @@ -26,8 +26,9 @@ import java.io.BufferedReader; import java.io.File; -import java.io.FileReader; import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; import java.sql.Connection; import java.sql.SQLException; import java.sql.SQLSyntaxErrorException; @@ -38,7 +39,6 @@ import java.util.LinkedHashMap; import java.util.Map; import java.util.Set; -import java.util.StringTokenizer; import java.util.TreeSet; /** @@ -166,11 +166,9 @@ public static void executeDdlFile(final File ddlFile, if (!multiLineSupport) { - StringTokenizer tokenizer = new StringTokenizer(sql, ";"); - while (tokenizer.hasMoreTokens()) + for (final String rawToken : sql.split(";")) { - String token = tokenizer.nextToken(); - token = token.trim(); + final String token = rawToken.trim(); if (token.length() > 0) { executeSql(connection, token, ignoreErrors); @@ -339,7 +337,7 @@ private static String normalizeIdentifier(final DatabaseMetaData metaData, private static String readSqlFromFile(final File ddlFile) throws IOException { final BufferedReader sqlReader = - new BufferedReader(new FileReader(ddlFile)); + new BufferedReader(Files.newBufferedReader(ddlFile.toPath(), StandardCharsets.UTF_8)); final StringBuilder sqlBuffer = new StringBuilder(); while (sqlReader.ready()) { @@ -356,4 +354,4 @@ private static String readSqlFromFile(final File ddlFile) throws IOException return sql; } -} +} \ No newline at end of file diff --git a/src/test/java/org/dbunit/DerbyEnvironment.java b/src/test/java/org/dbunit/DerbyEnvironment.java index 308f79dd0..3167f6863 100644 --- a/src/test/java/org/dbunit/DerbyEnvironment.java +++ b/src/test/java/org/dbunit/DerbyEnvironment.java @@ -23,7 +23,7 @@ import org.dbunit.util.FileHelper; -import java.io.File; +import java.nio.file.Paths; import java.util.concurrent.Callable; /** @@ -45,10 +45,10 @@ public Void call() throws Exception // The name of the db is specified in the profile.properties and // is created on the fly // when the connection is retrieved the first time - FileHelper.deleteDirectory(new File("./target/derby_db")); + FileHelper.deleteDirectory(Paths.get("./target/derby_db").toFile()); return null; } }); } -} +} \ No newline at end of file diff --git a/src/test/java/org/dbunit/H2Environment.java b/src/test/java/org/dbunit/H2Environment.java index aebcc78be..1ad234a9d 100644 --- a/src/test/java/org/dbunit/H2Environment.java +++ b/src/test/java/org/dbunit/H2Environment.java @@ -24,6 +24,7 @@ import org.dbunit.operation.DatabaseOperation; import java.io.File; +import java.nio.file.Paths; import java.io.FilenameFilter; import java.sql.Connection; import java.sql.DriverManager; @@ -72,7 +73,7 @@ public static void shutdown(Connection connection) throws SQLException public static void deleteFiles(final String filename) { - deleteFiles(new File("."), filename); + deleteFiles(Paths.get(".").toFile(), filename); } public static void deleteFiles(File directory, final String filename) @@ -96,4 +97,4 @@ public boolean accept(File dir, String name) } } -} +} \ No newline at end of file diff --git a/src/test/java/org/dbunit/HypersonicEnvironment.java b/src/test/java/org/dbunit/HypersonicEnvironment.java index 494c0fb63..d572de59b 100644 --- a/src/test/java/org/dbunit/HypersonicEnvironment.java +++ b/src/test/java/org/dbunit/HypersonicEnvironment.java @@ -24,6 +24,7 @@ import org.dbunit.operation.DatabaseOperation; import java.io.File; +import java.nio.file.Paths; import java.io.FilenameFilter; import java.sql.Connection; import java.sql.DriverManager; @@ -63,7 +64,7 @@ public static void shutdown(Connection connection) throws SQLException public static void deleteFiles(final String filename) { - deleteFiles(new File("."), filename); + deleteFiles(Paths.get(".").toFile(), filename); } public static void deleteFiles(File directory, final String filename) diff --git a/src/test/java/org/dbunit/Main.java b/src/test/java/org/dbunit/Main.java index 91598b704..ba53c4817 100644 --- a/src/test/java/org/dbunit/Main.java +++ b/src/test/java/org/dbunit/Main.java @@ -21,15 +21,15 @@ package org.dbunit; -import java.io.FileOutputStream; -import java.io.FileReader; -import java.io.FileWriter; import java.io.IOException; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.Reader; import java.io.Writer; import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; import java.sql.Connection; import org.dbunit.database.DatabaseConfig; @@ -121,10 +121,13 @@ private static void testFlatXmlWriter() throws Exception mockProducer.setupTableCount(10); final IDataSet dataSet = new StreamingDataSet(mockProducer); - final OutputStream out = new FileOutputStream("flatXmlWriterTest.xml"); - final FlatXmlWriter writer = new FlatXmlWriter( - new OutputStreamWriter(out, StandardCharsets.UTF_8)); - writer.write(dataSet); + final Path path = Paths.get("flatXmlWriterTest.xml"); + try (OutputStream out = Files.newOutputStream(path)) + { + final FlatXmlWriter writer = new FlatXmlWriter( + new OutputStreamWriter(out, StandardCharsets.UTF_8)); + writer.write(dataSet); + } } private static void testXmlWriter() throws Exception @@ -135,10 +138,13 @@ private static void testXmlWriter() throws Exception mockProducer.setupTableCount(10); final IDataSet dataSet = new StreamingDataSet(mockProducer); - final OutputStream out = new FileOutputStream("xmlWriterTest.xml"); - final XmlDataSetWriter writer = new XmlDataSetWriter( - new OutputStreamWriter(out, StandardCharsets.UTF_8)); - writer.write(dataSet); + final Path path = Paths.get("xmlWriterTest.xml"); + try (OutputStream out = Files.newOutputStream(path)) + { + final XmlDataSetWriter writer = new XmlDataSetWriter( + new OutputStreamWriter(out, StandardCharsets.UTF_8)); + writer.write(dataSet); + } } // private static void testWrite() throws Exception @@ -184,11 +190,12 @@ private static void oldMain() throws Exception // new FileOutputStream("test.dtd")); // // - final Writer out = new FileWriter("test.xml"); - // FlatXmlDataSet.write(connection.createDataSet(), out, "ISO-8859-1"); - FlatXmlDataSet.write(connection.createDataSet(), out); - // out.flush(); - // out.close(); + final Path path = Paths.get("test.xml"); + try (Writer out = Files.newBufferedWriter(path, StandardCharsets.UTF_8)) + { + // FlatXmlDataSet.write(connection.createDataSet(), out, "ISO-8859-1"); + FlatXmlDataSet.write(connection.createDataSet(), out); + } // //////////////////////////////// // Document document = new @@ -214,12 +221,13 @@ private static void oldMain() throws Exception private static void writeXls() throws IOException, DataSetException { - final Reader in = - new FileReader("P:/dbunit-cvs/dbunit/src/xml/dataSetTest.xml"); - final FileOutputStream out = - new FileOutputStream("P:/dbunit-cvs/dbunit/dataSetTest.xls"); - XlsDataSet.write(new XmlDataSet(in), out); - out.close(); + final Path inPath = Paths.get("P:/dbunit-cvs/dbunit/src/xml/dataSetTest.xml"); + final Path outPath = Paths.get("P:/dbunit-cvs/dbunit/dataSetTest.xls"); + try (Reader in = Files.newBufferedReader(inPath, StandardCharsets.UTF_8); + OutputStream out = Files.newOutputStream(outPath)) + { + XlsDataSet.write(new XmlDataSet(in), out); + } } /* diff --git a/src/test/java/org/dbunit/ant/DbUnitTaskIT.java b/src/test/java/org/dbunit/ant/DbUnitTaskIT.java index 357453da2..b192ce892 100644 --- a/src/test/java/org/dbunit/ant/DbUnitTaskIT.java +++ b/src/test/java/org/dbunit/ant/DbUnitTaskIT.java @@ -100,14 +100,14 @@ public void setUp() throws Exception assertThat(TestUtils.getFile(filePath)).as("Buildfile not found") .isFile(); rule.configureProject(TestUtils.getFileName(filePath)); - outputDir = new File(rule.getProject().getBaseDir(), OUTPUT_DIR); + outputDir = rule.getProject().getBaseDir().toPath().resolve(OUTPUT_DIR).toFile(); outputDir.mkdirs(); } @AfterEach public void tearDown() throws Exception { - outputDir = new File(rule.getProject().getBaseDir(), OUTPUT_DIR); + outputDir = rule.getProject().getBaseDir().toPath().resolve(OUTPUT_DIR).toFile(); FileHelper.deleteDirectory(outputDir); } @@ -496,7 +496,7 @@ public void testExportAndCompareFormatMismatch_withMismatchedFormats_throwsDatab final DatabaseUnitException dbUnitException = (DatabaseUnitException) cause; final String filename = - new File(outputDir, "antExportDataSet.xml").toString(); + outputDir.toPath().resolve("antExportDataSet.xml").toString(); final String expectedMsg = "Did not find table in source file '" + filename + "' using format 'xml'"; assertThat(dbUnitException.getMessage()).isEqualTo(expectedMsg); diff --git a/src/test/java/org/dbunit/ant/ExportTest.java b/src/test/java/org/dbunit/ant/ExportTest.java index 9f9dd0eb4..e926378d7 100644 --- a/src/test/java/org/dbunit/ant/ExportTest.java +++ b/src/test/java/org/dbunit/ant/ExportTest.java @@ -25,8 +25,9 @@ import static org.mockito.Mockito.when; import java.io.File; -import java.io.FileInputStream; +import java.io.InputStream; import java.lang.reflect.Field; +import java.nio.file.Files; import org.dbunit.Assertion; import org.dbunit.database.DatabaseConfig; @@ -58,14 +59,14 @@ void testExecute_withUppercaseCsvFormat_writesCsvOutput( { stubConnection(); - final File dest = new File(tempDir, "csv-out"); + final File dest = tempDir.toPath().resolve("csv-out").toFile(); final Export export = new Export(); export.setFormat("CSV"); export.setDest(dest); export.execute(connection); - assertThat(new File(dest, "TEST_TABLE.csv")) + assertThat(dest.toPath().resolve("TEST_TABLE.csv").toFile()) .as("CSV export must create a per-table file inside the" + " destination directory even when the format" + " attribute is given in upper case.") @@ -78,7 +79,7 @@ void testExecute_withJsonFormat_writesJsonOutput( { stubConnection(); - final File dest = new File(tempDir, "json-out.json"); + final File dest = tempDir.toPath().resolve("json-out.json").toFile(); final Export export = new Export(); export.setFormat("json"); export.setDest(dest); @@ -89,7 +90,7 @@ void testExecute_withJsonFormat_writesJsonOutput( .as("JSON export must create the destination file.") .exists(); final IDataSet actualDataSet; - try (FileInputStream in = new FileInputStream(dest)) + try (InputStream in = Files.newInputStream(dest.toPath())) { actualDataSet = new JsonDataSet(in); } @@ -100,7 +101,7 @@ void testExecute_withJsonFormat_writesJsonOutput( void testExecute_withUnsupportedFormat_throwsWithoutCreatingDestinationFile( @TempDir final File tempDir) throws Exception { - final File dest = new File(tempDir, "unsupported-out"); + final File dest = tempDir.toPath().resolve("unsupported-out").toFile(); final Export export = new Export(); export.setDest(dest); setFormatField(export, "bogus"); diff --git a/src/test/java/org/dbunit/ant/adapter/BuildFileExtension.java b/src/test/java/org/dbunit/ant/adapter/BuildFileExtension.java index 50e274750..593c0c52c 100644 --- a/src/test/java/org/dbunit/ant/adapter/BuildFileExtension.java +++ b/src/test/java/org/dbunit/ant/adapter/BuildFileExtension.java @@ -24,6 +24,7 @@ import java.io.File; import java.io.OutputStream; import java.io.PrintStream; +import java.nio.file.Paths; import org.apache.tools.ant.BuildEvent; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.BuildListener; @@ -107,7 +108,8 @@ public void configureProject(String filename, int logLevel) throws BuildExceptio } this.project.init(); - File antFile = new File(System.getProperty("root"), filename); + final String root = System.getProperty("root"); + File antFile = root != null ? Paths.get(root, filename).toFile() : Paths.get(filename).toFile(); this.project.setProperty("ant.processid", ProcessUtil.getProcessId("")); this.project.setProperty("ant.threadname", Thread.currentThread().getName()); this.project.setUserProperty("ant.file", antFile.getAbsolutePath()); @@ -147,7 +149,7 @@ public Project getProject() { } public File getOutputDir() { - return new File(this.getProject().getProperty("output")); + return Paths.get(this.getProject().getProperty("output")).toFile(); } @Override diff --git a/src/test/java/org/dbunit/assertion/DbUnitValueComparerAssertIT.java b/src/test/java/org/dbunit/assertion/DbUnitValueComparerAssertIT.java index 85a5ba28a..2d7cbe6f1 100644 --- a/src/test/java/org/dbunit/assertion/DbUnitValueComparerAssertIT.java +++ b/src/test/java/org/dbunit/assertion/DbUnitValueComparerAssertIT.java @@ -3,7 +3,7 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; -import java.io.FileNotFoundException; +import java.io.IOException; import java.util.Map; import org.dbunit.assertion.comparer.value.ValueComparer; @@ -27,7 +27,7 @@ public class DbUnitValueComparerAssertIT private final DbUnitValueComparerAssert sut = new DbUnitValueComparerAssert(); - private IDataSet getDataSet() throws DataSetException, FileNotFoundException + private IDataSet getDataSet() throws DataSetException, IOException { return new FlatXmlDataSetBuilder() .build(TestUtils.getFileReader(FILE_PATH)); diff --git a/src/test/java/org/dbunit/dataset/CachedDataSetTest.java b/src/test/java/org/dbunit/dataset/CachedDataSetTest.java index e36503505..9c5228d0f 100644 --- a/src/test/java/org/dbunit/dataset/CachedDataSetTest.java +++ b/src/test/java/org/dbunit/dataset/CachedDataSetTest.java @@ -23,7 +23,9 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.fail; -import java.io.FileReader; +import java.io.Reader; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; import org.dbunit.dataset.xml.FlatXmlDataSetTest; import org.dbunit.dataset.xml.FlatXmlProducer; @@ -42,8 +44,8 @@ class CachedDataSetTest extends AbstractDataSetDecoratorTest @Override protected IDataSet createDataSet() throws Exception { - final FileReader reader = - new FileReader(FlatXmlDataSetTest.DATASET_FILE); + final Reader reader = + Files.newBufferedReader(FlatXmlDataSetTest.DATASET_FILE.toPath(), StandardCharsets.UTF_8); return new CachedDataSet(new FlatXmlProducer(new InputSource(reader))); } diff --git a/src/test/java/org/dbunit/dataset/CaseInsensitiveTableTest.java b/src/test/java/org/dbunit/dataset/CaseInsensitiveTableTest.java index 5592cd9bc..a3962b6a3 100644 --- a/src/test/java/org/dbunit/dataset/CaseInsensitiveTableTest.java +++ b/src/test/java/org/dbunit/dataset/CaseInsensitiveTableTest.java @@ -23,8 +23,9 @@ import static org.assertj.core.api.Assertions.assertThat; -import java.io.FileReader; import java.io.Reader; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; import org.dbunit.dataset.xml.XmlDataSet; import org.dbunit.dataset.xml.XmlTableTest; @@ -48,8 +49,8 @@ protected ITable createTable() throws Exception @Override protected IDataSet createDataSet() throws Exception { - final Reader in = new FileReader( - TestUtils.getFile("xml/caseInsensitiveTableTest.xml")); + final Reader in = Files.newBufferedReader( + TestUtils.getFile("xml/caseInsensitiveTableTest.xml").toPath(), StandardCharsets.UTF_8); return new XmlDataSet(in); } diff --git a/src/test/java/org/dbunit/dataset/CompositeDataSetIterationIT.java b/src/test/java/org/dbunit/dataset/CompositeDataSetIterationIT.java index 30f86c0f4..00bb3f462 100644 --- a/src/test/java/org/dbunit/dataset/CompositeDataSetIterationIT.java +++ b/src/test/java/org/dbunit/dataset/CompositeDataSetIterationIT.java @@ -23,7 +23,9 @@ import static org.junit.jupiter.api.Assertions.fail; -import java.io.FileOutputStream; +import java.io.OutputStream; +import java.nio.file.Files; +import java.nio.file.Paths; import org.dbunit.AbstractDatabaseIT; import org.dbunit.DdlExecutor; @@ -107,10 +109,9 @@ void testCompositeIteration_withQueryAndDefaultDataSets_writesAllTablesToFile() new CompositeDataSet(queryDataSet, plainDataSet); // 4. Write - try + try (OutputStream out = Files.newOutputStream(Paths.get("target/full.xml"))) { - FlatXmlDataSet.write(compositeDataSet, - new FileOutputStream("target/full.xml")); + FlatXmlDataSet.write(compositeDataSet, out); } catch (final Exception e) { diff --git a/src/test/java/org/dbunit/dataset/CompositeDataSetTest.java b/src/test/java/org/dbunit/dataset/CompositeDataSetTest.java index db8a636dc..d02d22007 100644 --- a/src/test/java/org/dbunit/dataset/CompositeDataSetTest.java +++ b/src/test/java/org/dbunit/dataset/CompositeDataSetTest.java @@ -23,7 +23,6 @@ import static org.assertj.core.api.Assertions.assertThat; -import java.io.FileNotFoundException; import java.io.IOException; import org.dbunit.dataset.datatype.DataType; @@ -120,7 +119,7 @@ void testConstructor_threePartsSameTable_valuesReadableAcrossAllParts() throws E private CompositeDataSet createCompositeDataSet(final boolean combined, final boolean multipleCase) - throws DataSetException, FileNotFoundException, IOException + throws DataSetException, IOException { final IDataSet dataSet1 = new FlatXmlDataSetBuilder().build(TestUtils .getFileReader("xml/compositeDataSetDuplicateTest1.xml")); diff --git a/src/test/java/org/dbunit/dataset/FilteredDataSetTest.java b/src/test/java/org/dbunit/dataset/FilteredDataSetTest.java index 1068b1923..773f6daf0 100644 --- a/src/test/java/org/dbunit/dataset/FilteredDataSetTest.java +++ b/src/test/java/org/dbunit/dataset/FilteredDataSetTest.java @@ -24,7 +24,7 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertThrows; -import java.io.FileReader; +import java.io.Reader; import org.dbunit.dataset.xml.FlatXmlDataSetBuilder; import org.dbunit.dataset.xml.XmlDataSet; @@ -148,7 +148,7 @@ void testGetFilteredTableMetaData_withSingleTableFilter_returnsFilteredMetaDataA void testCaseSensitivityInheritance_withCaseSensitiveAndInsensitiveDataSet_inheritsFromDecoratedDataSet() throws Exception { // Case sensitive check - FileReader fileReader = TestUtils.getFileReader("xml/dataSetTest.xml"); + Reader fileReader = TestUtils.getFileReader("xml/dataSetTest.xml"); final IDataSet caseSensitive = new FlatXmlDataSetBuilder() .setCaseSensitiveTableNames(true).build(fileReader); diff --git a/src/test/java/org/dbunit/dataset/LowerCaseDataSetTest.java b/src/test/java/org/dbunit/dataset/LowerCaseDataSetTest.java index 95c9984a9..d17fc5710 100644 --- a/src/test/java/org/dbunit/dataset/LowerCaseDataSetTest.java +++ b/src/test/java/org/dbunit/dataset/LowerCaseDataSetTest.java @@ -23,7 +23,8 @@ import static org.assertj.core.api.Assertions.assertThat; -import java.io.FileReader; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; import org.dbunit.TurkishDefaultLocale; import org.dbunit.dataset.xml.FlatXmlDataSetBuilder; @@ -42,7 +43,7 @@ public class LowerCaseDataSetTest extends AbstractDataSetDecoratorTest protected IDataSet createDataSet() throws Exception { return new LowerCaseDataSet(new FlatXmlDataSetBuilder() - .build(new FileReader(FlatXmlDataSetTest.DATASET_FILE))); + .build(Files.newBufferedReader(FlatXmlDataSetTest.DATASET_FILE.toPath(), StandardCharsets.UTF_8))); } @Override diff --git a/src/test/java/org/dbunit/dataset/ReplacementDataSetTest.java b/src/test/java/org/dbunit/dataset/ReplacementDataSetTest.java index 93881cae6..2f2a0ccac 100644 --- a/src/test/java/org/dbunit/dataset/ReplacementDataSetTest.java +++ b/src/test/java/org/dbunit/dataset/ReplacementDataSetTest.java @@ -22,7 +22,9 @@ import static org.assertj.core.api.Assertions.assertThat; -import java.io.FileReader; +import java.io.Reader; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; import org.dbunit.dataset.xml.FlatXmlDataSet; import org.dbunit.dataset.xml.FlatXmlDataSetBuilder; @@ -45,27 +47,28 @@ class ReplacementDataSetTest extends AbstractDataSetDecoratorTest protected IDataSet createDataSet() throws Exception { return new ReplacementDataSet(new FlatXmlDataSetBuilder() - .build(new FileReader(FlatXmlDataSetTest.DATASET_FILE))); + .build(Files.newBufferedReader(FlatXmlDataSetTest.DATASET_FILE.toPath(), StandardCharsets.UTF_8))); } @Test void testConstructor_DataSetHasCaseSensitive_ReplacementSetHasCaseSensitive() throws Exception { - final FileReader xmlReader = - new FileReader(FlatXmlDataSetTest.DATASET_FILE); + final Reader xmlReader = + Files.newBufferedReader(FlatXmlDataSetTest.DATASET_FILE.toPath(), StandardCharsets.UTF_8); final FlatXmlDataSet flatDataSet = new FlatXmlDataSetBuilder() .setCaseSensitiveTableNames(true).build(xmlReader); final ReplacementDataSet dataSet = new ReplacementDataSet(flatDataSet); - assertThat(dataSet.isCaseSensitiveTableNames()).isTrue(); - + assertThat(dataSet.isCaseSensitiveTableNames()) + .as("ReplacementDataSet must preserve the wrapped dataset's case-sensitive table names setting.") + .isTrue(); } @Test void testConstructor_DifferentCaseTableNames_CaseSensitiveMatch() throws Exception { - final FileReader fileReader = TestUtils + final Reader fileReader = TestUtils .getFileReader("/xml/replacementDataSetCaseSensitive.xml"); final IDataSet originalDataSet = new FlatXmlDataSetBuilder() .setCaseSensitiveTableNames(true).build(fileReader); diff --git a/src/test/java/org/dbunit/dataset/TableDecoratorDataSetTest.java b/src/test/java/org/dbunit/dataset/TableDecoratorDataSetTest.java index e52523abf..bec04f3d5 100644 --- a/src/test/java/org/dbunit/dataset/TableDecoratorDataSetTest.java +++ b/src/test/java/org/dbunit/dataset/TableDecoratorDataSetTest.java @@ -23,7 +23,8 @@ import static org.assertj.core.api.Assertions.assertThat; -import java.io.FileReader; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; import org.dbunit.dataset.xml.FlatXmlDataSetBuilder; import org.dbunit.dataset.xml.FlatXmlDataSetTest; @@ -36,7 +37,7 @@ protected IDataSet createDataSet() throws Exception { return new TableDecoratorDataSet( new FlatXmlDataSetBuilder() - .build(new FileReader(FlatXmlDataSetTest.DATASET_FILE)), + .build(Files.newBufferedReader(FlatXmlDataSetTest.DATASET_FILE.toPath(), StandardCharsets.UTF_8)), t -> new ColumnFilterTable(t, (table, column) -> true)); } @@ -65,4 +66,4 @@ public void testTableDecoration() throws Exception assertThat(iterator.getTableMetaData()) .isInstanceOf(FilteredTableMetaData.class); } -} +} \ No newline at end of file diff --git a/src/test/java/org/dbunit/dataset/csv/CsvDataSetTest.java b/src/test/java/org/dbunit/dataset/csv/CsvDataSetTest.java index 7ec443ee2..ef43e879c 100644 --- a/src/test/java/org/dbunit/dataset/csv/CsvDataSetTest.java +++ b/src/test/java/org/dbunit/dataset/csv/CsvDataSetTest.java @@ -24,6 +24,7 @@ import java.io.File; import java.io.IOException; +import java.nio.file.Files; import org.dbunit.Assertion; import org.dbunit.dataset.DataSetException; @@ -69,7 +70,7 @@ void testWrite_withValidDataSet_writesAndReadsBackEquivalentData() throws Except CsvDataSetWriter.write(expectedDataSet, tempDir); final File tableOrderingFile = - new File(tempDir, CsvDataSet.TABLE_ORDERING_FILE); + tempDir.toPath().resolve(CsvDataSet.TABLE_ORDERING_FILE).toFile(); assertThat(tableOrderingFile).exists(); final IDataSet actualDataSet = new CsvDataSet(tempDir); @@ -106,17 +107,7 @@ void testWrite_withValidDataSet_writesAndReadsBackEquivalentData() throws Except private File createTmpDir() throws IOException { - final File tmpFile = File.createTempFile("CsvDataSetTest", "-csv"); - final String fullPath = tmpFile.getAbsolutePath(); - tmpFile.delete(); - - final File tmpDir = new File(fullPath); - if (!tmpDir.mkdir()) - { - throw new IOException("Failed to create tmpDir: " + fullPath); - } - - return tmpDir; + return Files.createTempDirectory("CsvDataSetTest").toFile(); } } diff --git a/src/test/java/org/dbunit/dataset/csv/CsvDataSetWriterTest.java b/src/test/java/org/dbunit/dataset/csv/CsvDataSetWriterTest.java index d2327a910..0e5219545 100644 --- a/src/test/java/org/dbunit/dataset/csv/CsvDataSetWriterTest.java +++ b/src/test/java/org/dbunit/dataset/csv/CsvDataSetWriterTest.java @@ -7,6 +7,7 @@ import java.io.File; import java.nio.file.Files; +import java.nio.file.Paths; import java.sql.Clob; import java.sql.SQLException; @@ -52,7 +53,7 @@ private void produceToFolder(final String source, final String dest) throws DataSetException { final CsvProducer producer = new CsvProducer(source); - new File(dest).delete(); + Paths.get(dest).toFile().delete(); final CsvDataSetWriter writer = new CsvDataSetWriter(dest); producer.setConsumer(writer); producer.produce(); @@ -71,8 +72,8 @@ void testWrite_multiRowTable_writesCompleteFile() throws Exception } final IDataSet expected = builder.build(); - new File(dest).delete(); - CsvDataSetWriter.write(expected, new File(dest)); + Paths.get(dest).toFile().delete(); + CsvDataSetWriter.write(expected, Paths.get(dest).toFile()); final IDataSet actual = produceToMemory(dest); assertThat(actual.getTable("MULTI_ROW").getRowCount()) @@ -96,8 +97,8 @@ void testWrite_laterRowFailsTypeCast_earlierRowsAlreadyFlushedToDisk() .row(2, unreadableClob) .build(); - new File(dest).mkdirs(); - final File tableFile = new File(dest, "FLUSH_ON_ERROR.csv"); + Paths.get(dest).toFile().mkdirs(); + final File tableFile = Paths.get(dest, "FLUSH_ON_ERROR.csv").toFile(); tableFile.delete(); final CsvDataSetWriter writer = new CsvDataSetWriter(dest); diff --git a/src/test/java/org/dbunit/dataset/csv/CsvParserTest.java b/src/test/java/org/dbunit/dataset/csv/CsvParserTest.java index 542fd934f..0e8c54e50 100644 --- a/src/test/java/org/dbunit/dataset/csv/CsvParserTest.java +++ b/src/test/java/org/dbunit/dataset/csv/CsvParserTest.java @@ -28,11 +28,11 @@ import java.io.BufferedReader; import java.io.File; -import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.LineNumberReader; import java.io.StringReader; +import java.nio.file.Files; import java.util.List; import org.dbunit.dataset.common.handlers.IllegalInputCharacterException; @@ -160,7 +160,7 @@ void testSample_withSampleCsvFile_parsesThreeTokensPerLine() throws Exception final File sample = TestUtils.getFile("csv/sample.csv"); final BufferedReader reader = new BufferedReader( - new InputStreamReader(new FileInputStream(sample))); + new InputStreamReader(Files.newInputStream(sample.toPath()))); final LineNumberReader lineNumberReader = new LineNumberReader(reader); String line; while ((line = lineNumberReader.readLine()) != null) diff --git a/src/test/java/org/dbunit/dataset/csv/CsvProducerTest.java b/src/test/java/org/dbunit/dataset/csv/CsvProducerTest.java index b7eccbf6d..4f23bf14c 100644 --- a/src/test/java/org/dbunit/dataset/csv/CsvProducerTest.java +++ b/src/test/java/org/dbunit/dataset/csv/CsvProducerTest.java @@ -27,9 +27,10 @@ import static org.mockito.Mockito.when; import java.io.File; -import java.io.FileInputStream; +import java.io.InputStream; import java.nio.charset.StandardCharsets; import java.nio.file.Files; +import java.nio.file.Paths; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; @@ -120,9 +121,9 @@ void testProduceAndInsertFromFolder_withCsvDirectory_insertsRowsIntoDatabase() void testProduce_withTableNameContainingCsvInMiddle_usesFullTableName( @TempDir final File tempDir) throws Exception { - Files.write(new File(tempDir, CsvDataSet.TABLE_ORDERING_FILE).toPath(), + Files.write(tempDir.toPath().resolve(CsvDataSet.TABLE_ORDERING_FILE), "a.csvx\n".getBytes(StandardCharsets.UTF_8)); - Files.write(new File(tempDir, "a.csvx.csv").toPath(), + Files.write(tempDir.toPath().resolve("a.csvx.csv"), "ID, DESCRIPTION\n1, \"first row\"\n" .getBytes(StandardCharsets.UTF_8)); @@ -150,7 +151,7 @@ void testProduce_withNullCellValue_doesNotThrowNullPointerException( parsedRows.add(header); parsedRows.add(nullCellRow); - Files.write(new File(tempDir, CsvDataSet.TABLE_ORDERING_FILE).toPath(), + Files.write(tempDir.toPath().resolve(CsvDataSet.TABLE_ORDERING_FILE), "orders\n".getBytes(StandardCharsets.UTF_8)); try (MockedConstruction ignored = mockConstruction( @@ -190,7 +191,7 @@ void testInsertOperationWithCsvFormat_withCsvFormatOperation_insertsCorrectRowCo { final Operation operation = new Operation(); operation.setFormat(AbstractStep.FORMAT_CSV); - operation.setSrc(new File(THE_DIRECTORY)); + operation.setSrc(Paths.get(THE_DIRECTORY).toFile()); operation.setType("INSERT"); operation.execute(connection); final Statement statement = @@ -212,7 +213,7 @@ void testExportTaskWithCsvFormat_withInsertedData_exportsToCsvFiles() produceAndInsertToDatabase(); final String fromAnt = "target/csv/from-ant"; - final File dir = new File(fromAnt); + final File dir = Paths.get(fromAnt).toFile(); FileHelper.deleteDirectory(dir); try @@ -233,12 +234,12 @@ void testExportTaskWithCsvFormat_withInsertedData_exportsToCsvFiles() export.execute(getConnection()); - final File ordersFile = new File(fromAnt + "/orders.csv"); - assertThat(ordersFile).as("file '" + ordersFile.getAbsolutePath() - + "' does not exists").exists(); - final File ordersRowFile = new File(fromAnt + "/orders_row.csv"); - assertThat(ordersRowFile) - .as("file " + ordersRowFile + " does not exists").exists(); + final File ordersFile = Paths.get(fromAnt, "orders.csv").toFile(); + assertThat(ordersFile).as("File '" + ordersFile.getAbsolutePath() + + "' does not exist.").exists(); + final File ordersRowFile = Paths.get(fromAnt, "orders_row.csv").toFile(); + assertThat(ordersRowFile).as("File '" + ordersRowFile.getAbsolutePath() + + "' does not exist.").exists(); } finally { FileHelper.deleteDirectory(dir); @@ -260,7 +261,7 @@ private IDatabaseConnection getConnection() protected void setUp() throws Exception { final Properties properties = new Properties(); - final FileInputStream inStream = + final InputStream inStream = TestUtils.getFileInputStream("csv/cvs-tests.properties"); properties.load(inStream); inStream.close(); diff --git a/src/test/java/org/dbunit/dataset/csv/CsvURLProducerTest.java b/src/test/java/org/dbunit/dataset/csv/CsvURLProducerTest.java index f8d2396f0..ac031a1bf 100644 --- a/src/test/java/org/dbunit/dataset/csv/CsvURLProducerTest.java +++ b/src/test/java/org/dbunit/dataset/csv/CsvURLProducerTest.java @@ -24,9 +24,12 @@ import static org.assertj.core.api.Assertions.assertThat; import java.io.File; -import java.io.FileInputStream; +import java.io.InputStream; +import java.nio.file.Paths; import java.io.IOException; import java.net.MalformedURLException; +import java.net.URI; +import java.net.URISyntaxException; import java.net.URL; import java.sql.DriverManager; import java.sql.ResultSet; @@ -75,10 +78,12 @@ void testProduceFromFolder_withCsvDirectoryUrl_returnsTwoTablesWithCorrectRowCou } @Test - void testProduceFromJar_withJarFileUrl_returnsTwoTablesWithCorrectRowCounts() throws DataSetException, IOException + void testProduceFromJar_withJarFileUrl_returnsTwoTablesWithCorrectRowCounts() + throws DataSetException, IOException, URISyntaxException { final File file = TestUtils.getFile(THE_DIRECTORY + "/orders.jar"); - final URL jarFile = new URL("jar:" + file.toURL() + "!/"); + final URI jarUri = new URI("jar:" + file.toURI() + "!/"); + final URL jarFile = jarUri.toURL(); final CsvURLProducer producer = new CsvURLProducer(jarFile, CsvDataSet.TABLE_ORDERING_FILE); doTestWithProducer(producer); @@ -168,7 +173,7 @@ void testExportTaskWithCsvFormat_withInsertedData_exportsToCsvFiles() produceAndInsertToDatabase(); final String fromAnt = "target/csv/from-ant"; - final File dir = new File(fromAnt); + final File dir = Paths.get(fromAnt).toFile(); try { FileHelper.deleteDirectory(dir); @@ -189,10 +194,10 @@ void testExportTaskWithCsvFormat_withInsertedData_exportsToCsvFiles() export.execute(getConnection()); - final File ordersFile = new File(fromAnt + "/orders.csv"); + final File ordersFile = Paths.get(fromAnt, "orders.csv").toFile(); assertThat(ordersFile).as("file '" + ordersFile.getAbsolutePath() + "' does not exists").exists(); - final File ordersRowFile = new File(fromAnt + "/orders_row.csv"); + final File ordersRowFile = Paths.get(fromAnt, "orders_row.csv").toFile(); assertThat(ordersRowFile) .as("file " + ordersRowFile + " does not exists").exists(); } finally @@ -216,7 +221,7 @@ private IDatabaseConnection getConnection() protected void setUp() throws Exception { final Properties properties = new Properties(); - final FileInputStream inStream = + final InputStream inStream = TestUtils.getFileInputStream("csv/cvs-tests.properties"); properties.load(inStream); inStream.close(); diff --git a/src/test/java/org/dbunit/dataset/datatype/BytesDataTypeTest.java b/src/test/java/org/dbunit/dataset/datatype/BytesDataTypeTest.java index 64ea05418..23a029e22 100644 --- a/src/test/java/org/dbunit/dataset/datatype/BytesDataTypeTest.java +++ b/src/test/java/org/dbunit/dataset/datatype/BytesDataTypeTest.java @@ -38,6 +38,7 @@ import java.net.URLStreamHandler; import java.nio.charset.StandardCharsets; import java.nio.file.Files; +import java.nio.file.Paths; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; @@ -155,7 +156,7 @@ public void testTypeCast_withCompatibleInput_returnsExpectedValue() throws Excep @Test void testTypeCastFileName_withFilePathValue_returnsFileContentsAsBytes() throws Exception { - final File file = new File("LICENSE.txt"); + final File file = Paths.get("LICENSE.txt").toFile(); final Object[] values = {"[file]" + file.toString(), file.toString(), file.getAbsolutePath(), file.toURI().toURL().toString(), file, @@ -177,7 +178,7 @@ void testTypeCastFileName_withFilePathValue_returnsFileContentsAsBytes() throws @Test void testLoadFile_afterLoad_fileIsDeletable() throws Exception { - final File file = File.createTempFile("BytesDataTypeTest", ".bin"); + final File file = Files.createTempFile("BytesDataTypeTest", ".bin").toFile(); file.deleteOnExit(); Files.write(file.toPath(), new byte[] {1, 2, 3}); @@ -270,7 +271,7 @@ void testTypeCast_urlCommandUnreachable_throwsTypeCastException() throws Exception { final File missingFile = - new File("does-not-exist", "dbunit-missing-file.bin"); + Paths.get("does-not-exist", "dbunit-missing-file.bin").toFile(); final String value = "[url]" + missingFile.toURI().toURL(); final BytesDataType dataType = new BytesDataType("BINARY", Types.BINARY); @@ -297,6 +298,31 @@ void testTypeCast_untaggedTextFallback_usesUtf8Bytes() throws Exception .isEqualTo(expected); } + @Test + void testTypeCast_untaggedTextWithPathIllegalCharacter_fallsBackToUtf8Bytes() + throws Exception + { + // NUL is illegal in a filesystem path on every OS, so Paths.get() + // throws InvalidPathException when BytesDataType tries this value as + // a file name; that must not escape typeCast() but instead fall + // through to the literal-UTF-8-bytes fallback, same as any other + // unusable file name. + final String valueWithIllegalPathChar = "not\u0000a-file"; + final byte[] expected = + valueWithIllegalPathChar.getBytes(StandardCharsets.UTF_8); + final BytesDataType dataType = new BytesDataType("BINARY", Types.BINARY); + + final Object actual = dataType.typeCast(valueWithIllegalPathChar); + + assertThat(actual) + .as("A value that is not valid Base64, not a URL, and not" + + " usable as a file path (because Paths.get()" + + " rejects it) must still fall back to literal" + + " UTF-8 bytes instead of throwing an unchecked" + + " exception.") + .isEqualTo(expected); + } + @Test void testTypeCast_untaggedLongInvalidBase64_fallsBackToUtf8Bytes() throws Exception @@ -326,7 +352,7 @@ void testTypeCast_untaggedLongInvalidBase64_fallsBackToUtf8Bytes() @TurkishDefaultLocale void testTypeCast_turkishLocaleFileCommand_recognizedAsFileCommand() throws Exception { - final File file = File.createTempFile("BytesDataTypeTest", ".bin"); + final File file = Files.createTempFile("BytesDataTypeTest", ".bin").toFile(); file.deleteOnExit(); final byte[] expected = "dbunit turkish locale file command test" diff --git a/src/test/java/org/dbunit/dataset/excel/XlsDataSetTest.java b/src/test/java/org/dbunit/dataset/excel/XlsDataSetTest.java index d05e772ca..910c0be0a 100644 --- a/src/test/java/org/dbunit/dataset/excel/XlsDataSetTest.java +++ b/src/test/java/org/dbunit/dataset/excel/XlsDataSetTest.java @@ -23,8 +23,6 @@ import static org.assertj.core.api.Assertions.assertThat; import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.nio.file.Files; @@ -81,10 +79,10 @@ public void testCreateMultipleCaseDuplicateDataSet_withDuplicateCaseVariantNames void testWrite_withValidDataSet_writesAndReadsBackEquivalentData() throws Exception { final IDataSet expectedDataSet = createDataSet(); - final File tempFile = File.createTempFile("xlsDataSetTest", ".xls"); + final File tempFile = Files.createTempFile("xlsDataSetTest", ".xls").toFile(); try { - final OutputStream out = new FileOutputStream(tempFile); + final OutputStream out = Files.newOutputStream(tempFile.toPath()); // write dataset in temp file try @@ -96,7 +94,7 @@ void testWrite_withValidDataSet_writesAndReadsBackEquivalentData() throws Except } // load new dataset from temp file - final InputStream in = new FileInputStream(tempFile); + final InputStream in = Files.newInputStream(tempFile.toPath()); try { final IDataSet actualDataSet = new XlsDataSet(in); @@ -143,7 +141,7 @@ void testConstructor_withFile_closesUnderlyingFileStream() throws Exception // pass even with the leak still present -- it would not be a meaningful regression guard // there. final File sourceFile = TestUtils.getFile("xml/dataSetTest.xls"); - final File tempCopy = File.createTempFile("xlsDataSetTest", ".xls"); + final File tempCopy = Files.createTempFile("xlsDataSetTest", ".xls").toFile(); try { Files.copy(sourceFile.toPath(), tempCopy.toPath(), diff --git a/src/test/java/org/dbunit/dataset/excel/XlsDataSetWriterTest.java b/src/test/java/org/dbunit/dataset/excel/XlsDataSetWriterTest.java index 7a02a3af4..a234c9732 100644 --- a/src/test/java/org/dbunit/dataset/excel/XlsDataSetWriterTest.java +++ b/src/test/java/org/dbunit/dataset/excel/XlsDataSetWriterTest.java @@ -6,14 +6,16 @@ import java.io.ByteArrayOutputStream; import java.io.File; -import java.io.FileOutputStream; import java.io.IOException; +import java.io.OutputStream; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.math.BigDecimal; import java.net.URI; import java.net.URISyntaxException; import java.net.URL; +import java.nio.file.Files; +import java.nio.file.Paths; import java.util.Map; import org.apache.poi.ss.usermodel.Workbook; @@ -24,13 +26,13 @@ class XlsDataSetWriterTest { - private static final File OUTPUT_DIR = new File("target", "excel"); + private static final File OUTPUT_DIR = Paths.get("target", "excel").toFile(); private static final String INPUT_EXCEL_FILE = "/excel/XlsDataSetWriterCellStyleCaching.xlsx"; - private static final File OUTPUT_EXCEL_FILE = new File(OUTPUT_DIR, - "XlsDataSetWriterCellStyleCachingTestOutput.xls"); + private static final File OUTPUT_EXCEL_FILE = OUTPUT_DIR.toPath() + .resolve("XlsDataSetWriterCellStyleCachingTestOutput.xls").toFile(); /** * Test for issue 377. Without 377's changes, test fails with: @@ -45,11 +47,12 @@ void testTimestampTzOffsets_withManyRowsExceedingCellStyles_doesNotThrowExceptio final URL excelFileUrl = getClass().getResource(INPUT_EXCEL_FILE); final URI excelFileUri = excelFileUrl.toURI(); - final File file = new File(excelFileUri); + final File file = Paths.get(excelFileUri).toFile(); final IDataSet dataSet = new XlsDataSet(file); - final FileOutputStream outputStream = - new FileOutputStream(OUTPUT_EXCEL_FILE); - assertDoesNotThrow(() -> XlsDataSet.write(dataSet, outputStream)); + try (OutputStream outputStream = Files.newOutputStream(OUTPUT_EXCEL_FILE.toPath())) + { + assertDoesNotThrow(() -> XlsDataSet.write(dataSet, outputStream)); + } } @Test diff --git a/src/test/java/org/dbunit/dataset/excel/XlsTableTimezoneOffsetTest.java b/src/test/java/org/dbunit/dataset/excel/XlsTableTimezoneOffsetTest.java index fab6f60b3..9594ebc9d 100644 --- a/src/test/java/org/dbunit/dataset/excel/XlsTableTimezoneOffsetTest.java +++ b/src/test/java/org/dbunit/dataset/excel/XlsTableTimezoneOffsetTest.java @@ -3,6 +3,7 @@ import static org.assertj.core.api.Assertions.assertThat; import java.io.File; +import java.nio.file.Paths; import java.net.URI; import java.net.URL; import java.text.DateFormat; @@ -55,7 +56,7 @@ void testTimestampTzOffsets_withNonUtcTimezone_readsCorrectTimestampValues(final final URL spreadsheetUrl = getClass().getResource(EXCEL_SPREADSHEET); final URI spreadsheetUri = spreadsheetUrl.toURI(); - final File spreadsheetFile = new File(spreadsheetUri); + final File spreadsheetFile = Paths.get(spreadsheetUri).toFile(); final XlsDataSet xlsDataSet = new XlsDataSet(spreadsheetFile); table = xlsDataSet.getTable(TABLE_NAME); diff --git a/src/test/java/org/dbunit/dataset/excel/XlsTableWriteTest.java b/src/test/java/org/dbunit/dataset/excel/XlsTableWriteTest.java index 36d7d88ad..4c3ea8404 100644 --- a/src/test/java/org/dbunit/dataset/excel/XlsTableWriteTest.java +++ b/src/test/java/org/dbunit/dataset/excel/XlsTableWriteTest.java @@ -23,10 +23,9 @@ import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; +import java.nio.file.Files; import org.dbunit.Assertion; import org.dbunit.dataset.CompositeTable; @@ -48,9 +47,9 @@ public class XlsTableWriteTest extends XlsTableTest @Override protected IDataSet createDataSet() throws Exception { - final File tempFile = File.createTempFile("tableWriteTest", ".xls"); + final File tempFile = Files.createTempFile("tableWriteTest", ".xls").toFile(); // System.out.println(tempFile.getAbsoluteFile()); - final OutputStream out = new FileOutputStream(tempFile); + final OutputStream out = Files.newOutputStream(tempFile.toPath()); try { // write source dataset in temp file @@ -63,7 +62,7 @@ protected IDataSet createDataSet() throws Exception } // load new dataset from temp file - final InputStream in = new FileInputStream(tempFile); + final InputStream in = Files.newInputStream(tempFile.toPath()); try { return new XlsDataSet(in); @@ -99,8 +98,8 @@ void testWriteMultipleTable_withFiveTables_writesAllTablesToFile() throws Except } final IDataSet dataSet = new DefaultDataSet(tables); - final File tempFile = File.createTempFile("tableWriteTest", ".xls"); - final OutputStream out = new FileOutputStream(tempFile); + final File tempFile = Files.createTempFile("tableWriteTest", ".xls").toFile(); + final OutputStream out = Files.newOutputStream(tempFile.toPath()); try { // write DefaultTable in temp file @@ -113,7 +112,7 @@ void testWriteMultipleTable_withFiveTables_writesAllTablesToFile() throws Except } // load new dataset from temp file - final FileInputStream in = new FileInputStream(tempFile); + final InputStream in = Files.newInputStream(tempFile.toPath()); try { final XlsDataSet dataSet2 = new XlsDataSet(in); diff --git a/src/test/java/org/dbunit/dataset/json/JsonDataSetTest.java b/src/test/java/org/dbunit/dataset/json/JsonDataSetTest.java index 081bbcf50..dba401532 100644 --- a/src/test/java/org/dbunit/dataset/json/JsonDataSetTest.java +++ b/src/test/java/org/dbunit/dataset/json/JsonDataSetTest.java @@ -27,13 +27,12 @@ import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; import java.io.FilterInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.nio.charset.StandardCharsets; +import java.nio.file.Files; import org.dbunit.Assertion; import org.dbunit.dataset.AbstractDataSetTest; @@ -57,7 +56,7 @@ class JsonDataSetTest extends AbstractDataSetTest @Override protected IDataSet createDataSet() throws Exception { - try (InputStream in = new FileInputStream(TestUtils.getFile("json/dataSetTest.json"))) + try (InputStream in = Files.newInputStream(TestUtils.getFile("json/dataSetTest.json").toPath())) { return new JsonDataSet(in); } @@ -66,8 +65,8 @@ protected IDataSet createDataSet() throws Exception @Override protected IDataSet createDuplicateDataSet() throws Exception { - try (InputStream in = - new FileInputStream(TestUtils.getFile("json/jsonDataSetDuplicateTest.json"))) + try (InputStream in = Files.newInputStream( + TestUtils.getFile("json/jsonDataSetDuplicateTest.json").toPath())) { return new JsonDataSet(in); } @@ -109,16 +108,16 @@ public void testGetCaseInsensitiveTableMetaData_withLowercaseTableName_returnsMe void testWrite_withValidDataSet_writesAndReadsBackEquivalentData() throws Exception { final IDataSet expectedDataSet = createDataSet(); - final File tempFile = File.createTempFile("dataSetTest", ".json"); + final File tempFile = Files.createTempFile("dataSetTest", ".json").toFile(); try { - final OutputStream out = new FileOutputStream(tempFile); + final OutputStream out = Files.newOutputStream(tempFile.toPath()); try { JsonDataSet.write(expectedDataSet, out); final IDataSet actualDataSet; - try (InputStream in = new FileInputStream(tempFile)) + try (InputStream in = Files.newInputStream(tempFile.toPath())) { actualDataSet = new JsonDataSet(in); } diff --git a/src/test/java/org/dbunit/dataset/json/JsonTableTest.java b/src/test/java/org/dbunit/dataset/json/JsonTableTest.java index 857cfbb63..190aa996d 100644 --- a/src/test/java/org/dbunit/dataset/json/JsonTableTest.java +++ b/src/test/java/org/dbunit/dataset/json/JsonTableTest.java @@ -23,8 +23,8 @@ import static org.assertj.core.api.Assertions.assertThat; -import java.io.FileInputStream; import java.io.InputStream; +import java.nio.file.Files; import org.dbunit.dataset.AbstractTableTest; import org.dbunit.dataset.Column; @@ -48,9 +48,10 @@ protected ITable createTable() throws Exception protected IDataSet createDataSet() throws Exception { - final InputStream in = - new FileInputStream(TestUtils.getFile("json/jsonTableTest.json")); - return new JsonDataSet(in); + try (InputStream in = Files.newInputStream(TestUtils.getFile("json/jsonTableTest.json").toPath())) + { + return new JsonDataSet(in); + } } @Override diff --git a/src/test/java/org/dbunit/dataset/stream/StreamingDataSetTest.java b/src/test/java/org/dbunit/dataset/stream/StreamingDataSetTest.java index d060aed13..1c6ef8683 100644 --- a/src/test/java/org/dbunit/dataset/stream/StreamingDataSetTest.java +++ b/src/test/java/org/dbunit/dataset/stream/StreamingDataSetTest.java @@ -22,7 +22,8 @@ import static org.assertj.core.api.Assertions.assertThat; -import java.io.FileReader; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; import org.dbunit.dataset.DataSetException; import org.dbunit.dataset.ForwardOnlyDataSetTest; @@ -45,7 +46,7 @@ class StreamingDataSetTest extends ForwardOnlyDataSetTest protected IDataSet createDataSet() throws Exception { final IDataSetProducer source = new FlatXmlProducer(new InputSource( - new FileReader(FlatXmlDataSetTest.DATASET_FILE))); + Files.newBufferedReader(FlatXmlDataSetTest.DATASET_FILE.toPath(), StandardCharsets.UTF_8))); return new StreamingDataSet(source); } diff --git a/src/test/java/org/dbunit/dataset/stream/StreamingTableTest.java b/src/test/java/org/dbunit/dataset/stream/StreamingTableTest.java index ff2b02300..192490a02 100644 --- a/src/test/java/org/dbunit/dataset/stream/StreamingTableTest.java +++ b/src/test/java/org/dbunit/dataset/stream/StreamingTableTest.java @@ -20,7 +20,9 @@ */ package org.dbunit.dataset.stream; -import java.io.FileReader; +import java.io.Reader; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; import org.dbunit.dataset.ForwardOnlyTableTest; import org.dbunit.dataset.ITable; @@ -41,8 +43,8 @@ public class StreamingTableTest extends ForwardOnlyTableTest @Override protected ITable createTable() throws Exception { - final FileReader reader = - new FileReader(FlatXmlDataSetTest.DATASET_FILE); + final Reader reader = + Files.newBufferedReader(FlatXmlDataSetTest.DATASET_FILE.toPath(), StandardCharsets.UTF_8); // IDataSetProducer source = new DataSetProducerAdapter(new // FlatXmlDataSet(reader)); diff --git a/src/test/java/org/dbunit/dataset/xml/FlatDtdDataSetIT.java b/src/test/java/org/dbunit/dataset/xml/FlatDtdDataSetIT.java index 8995e9363..1eceae5dc 100644 --- a/src/test/java/org/dbunit/dataset/xml/FlatDtdDataSetIT.java +++ b/src/test/java/org/dbunit/dataset/xml/FlatDtdDataSetIT.java @@ -25,10 +25,9 @@ import java.io.BufferedReader; import java.io.ByteArrayOutputStream; import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; import java.io.Writer; import java.nio.charset.StandardCharsets; +import java.nio.file.Files; import org.dbunit.DatabaseEnvironment; import org.dbunit.database.IDatabaseConnection; @@ -96,11 +95,11 @@ void testWriteFromDtd_withValidDtd_writesEquivalentDtdFile() throws Exception final IDataSet dataSet = new FlatDtdDataSet(TestUtils.getFileReader(DTD_FILE)); - final File tempFile = File.createTempFile("flatXmlDocType", ".dtd"); + final File tempFile = Files.createTempFile("flatXmlDocType", ".dtd").toFile(); try { - final Writer out = new FileWriter(tempFile); + final Writer out = Files.newBufferedWriter(tempFile.toPath(), StandardCharsets.UTF_8); try { @@ -113,7 +112,7 @@ void testWriteFromDtd_withValidDtd_writesEquivalentDtdFile() throws Exception FileAsserts.assertEquals( new BufferedReader(TestUtils.getFileReader(DTD_FILE)), - new BufferedReader(new FileReader(tempFile))); + new BufferedReader(Files.newBufferedReader(tempFile.toPath(), StandardCharsets.UTF_8))); } finally { tempFile.delete(); @@ -128,11 +127,11 @@ void testWriteFromDatabase_withDatabaseDataSet_writesEquivalentDtdFile() throws DatabaseEnvironment.getInstance().getConnection(); final IDataSet dataSet = connection.createDataSet(); - final File tempFile = File.createTempFile("flatXmlDocType", ".dtd"); + final File tempFile = Files.createTempFile("flatXmlDocType", ".dtd").toFile(); try { - final Writer out = new FileWriter(tempFile); + final Writer out = Files.newBufferedWriter(tempFile.toPath(), StandardCharsets.UTF_8); try { @@ -146,8 +145,8 @@ void testWriteFromDatabase_withDatabaseDataSet_writesEquivalentDtdFile() throws } FileAsserts.assertEquals( - new BufferedReader(new FileReader(getFile(DTD_FILE))), - new BufferedReader(new FileReader(tempFile))); + new BufferedReader(Files.newBufferedReader(getFile(DTD_FILE).toPath(), StandardCharsets.UTF_8)), + new BufferedReader(Files.newBufferedReader(tempFile.toPath(), StandardCharsets.UTF_8))); } finally { tempFile.delete(); diff --git a/src/test/java/org/dbunit/dataset/xml/FlatDtdProducerTest.java b/src/test/java/org/dbunit/dataset/xml/FlatDtdProducerTest.java index 137a6ff27..1c69f2039 100644 --- a/src/test/java/org/dbunit/dataset/xml/FlatDtdProducerTest.java +++ b/src/test/java/org/dbunit/dataset/xml/FlatDtdProducerTest.java @@ -24,9 +24,9 @@ import static org.junit.jupiter.api.Assertions.assertThrows; import java.io.File; -import java.io.FileInputStream; import java.io.StringReader; import java.io.StringWriter; +import java.nio.file.Files; import org.dbunit.dataset.Column; import org.dbunit.dataset.DataSetException; @@ -52,7 +52,7 @@ class FlatDtdProducerTest extends AbstractProducerTest protected IDataSetProducer createProducer() throws Exception { final InputSource source = - new InputSource(new FileInputStream(DTD_FILE)); + new InputSource(Files.newInputStream(DTD_FILE.toPath())); return new FlatDtdProducer(source); } diff --git a/src/test/java/org/dbunit/dataset/xml/FlatXmlDataSetTest.java b/src/test/java/org/dbunit/dataset/xml/FlatXmlDataSetTest.java index 5562e4862..86d321fef 100644 --- a/src/test/java/org/dbunit/dataset/xml/FlatXmlDataSetTest.java +++ b/src/test/java/org/dbunit/dataset/xml/FlatXmlDataSetTest.java @@ -26,11 +26,12 @@ import static org.junit.jupiter.api.Assertions.assertTrue; import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; +import java.io.Reader; import java.io.StringReader; import java.io.StringWriter; import java.io.Writer; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; import org.dbunit.Assertion; import org.dbunit.dataset.AbstractDataSetTest; @@ -138,10 +139,10 @@ void testMissingColumnAndDisableDtdMetadataEnableSensing_withColumnSensing_detec void testWrite_withValidDataSet_writesAndReadsBackEquivalentData() throws Exception { final IDataSet expectedDataSet = createDataSet(); - final File tempFile = File.createTempFile("flatXmlDataSetTest", ".xml"); + final File tempFile = Files.createTempFile("flatXmlDataSetTest", ".xml").toFile(); try { - final Writer out = new FileWriter(tempFile); + final Writer out = Files.newBufferedWriter(tempFile.toPath(), StandardCharsets.UTF_8); // write dataset in temp file try @@ -153,7 +154,7 @@ void testWrite_withValidDataSet_writesAndReadsBackEquivalentData() throws Except } // load new dataset from temp file - final FileReader in = new FileReader(tempFile); + final Reader in = Files.newBufferedReader(tempFile.toPath(), StandardCharsets.UTF_8); try { final IDataSet actualDataSet = diff --git a/src/test/java/org/dbunit/dataset/xml/FlatXmlTableWriteTest.java b/src/test/java/org/dbunit/dataset/xml/FlatXmlTableWriteTest.java index 7739ecdd7..720f8df3e 100644 --- a/src/test/java/org/dbunit/dataset/xml/FlatXmlTableWriteTest.java +++ b/src/test/java/org/dbunit/dataset/xml/FlatXmlTableWriteTest.java @@ -22,9 +22,10 @@ package org.dbunit.dataset.xml; import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; +import java.io.Reader; import java.io.Writer; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; import org.dbunit.Assertion; import org.dbunit.dataset.CompositeTable; @@ -46,8 +47,8 @@ class FlatXmlTableWriteTest extends FlatXmlTableTest protected IDataSet createDataSet() throws Exception { final File tempFile = - File.createTempFile("flatXmlTableWriteTest", ".xml"); - final Writer out = new FileWriter(tempFile); + Files.createTempFile("flatXmlTableWriteTest", ".xml").toFile(); + final Writer out = Files.newBufferedWriter(tempFile.toPath(), StandardCharsets.UTF_8); try { // write DefaultTable in temp file @@ -60,7 +61,7 @@ protected IDataSet createDataSet() throws Exception } // load new dataset from temp file - final FileReader in = new FileReader(tempFile); + final Reader in = Files.newBufferedReader(tempFile.toPath(), StandardCharsets.UTF_8); try { return new FlatXmlDataSetBuilder().build(in); @@ -90,8 +91,8 @@ void testWriteMultipleTable_withFiveTables_writesAndVerifiesAllTables() throws E final IDataSet dataSet = new DefaultDataSet(tables); final File tempFile = - File.createTempFile("flatXmlTableWriteTest", "xml"); - final Writer out = new FileWriter(tempFile); + Files.createTempFile("flatXmlTableWriteTest", ".xml").toFile(); + final Writer out = Files.newBufferedWriter(tempFile.toPath(), StandardCharsets.UTF_8); try { // write DefaultTable in temp file @@ -104,7 +105,7 @@ void testWriteMultipleTable_withFiveTables_writesAndVerifiesAllTables() throws E } // load new dataset from temp file - final FileReader in = new FileReader(tempFile); + final Reader in = Files.newBufferedReader(tempFile.toPath(), StandardCharsets.UTF_8); try { final FlatXmlDataSet xmlDataSet2 = diff --git a/src/test/java/org/dbunit/dataset/xml/XmlDataSetTest.java b/src/test/java/org/dbunit/dataset/xml/XmlDataSetTest.java index 3192bdc2e..614fb7b46 100644 --- a/src/test/java/org/dbunit/dataset/xml/XmlDataSetTest.java +++ b/src/test/java/org/dbunit/dataset/xml/XmlDataSetTest.java @@ -24,12 +24,11 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.FileReader; import java.io.InputStream; import java.io.OutputStream; import java.io.Reader; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; import org.dbunit.Assertion; import org.dbunit.dataset.AbstractDataSetTest; @@ -54,23 +53,23 @@ public class XmlDataSetTest extends AbstractDataSetTest protected IDataSet createDataSet() throws Exception { final Reader in = - new FileReader(TestUtils.getFile("xml/dataSetTest.xml")); + Files.newBufferedReader(TestUtils.getFile("xml/dataSetTest.xml").toPath(), StandardCharsets.UTF_8); return new XmlDataSet(in); } @Override protected IDataSet createDuplicateDataSet() throws Exception { - final InputStream in = new FileInputStream( - TestUtils.getFile("xml/xmlDataSetDuplicateTest.xml")); + final InputStream in = Files.newInputStream( + TestUtils.getFile("xml/xmlDataSetDuplicateTest.xml").toPath()); return new XmlDataSet(in); } @Override protected IDataSet createMultipleCaseDuplicateDataSet() throws Exception { - final InputStream in = new FileInputStream(TestUtils - .getFile("xml/xmlDataSetDuplicateMultipleCaseTest.xml")); + final InputStream in = Files.newInputStream(TestUtils + .getFile("xml/xmlDataSetDuplicateMultipleCaseTest.xml").toPath()); return new XmlDataSet(in); } @@ -78,10 +77,10 @@ protected IDataSet createMultipleCaseDuplicateDataSet() throws Exception void testWrite_withValidDataSet_writesAndReadsBackEquivalentData() throws Exception { final IDataSet expectedDataSet = createDataSet(); - final File tempFile = File.createTempFile("dataSetTest", ".xml"); + final File tempFile = Files.createTempFile("dataSetTest", ".xml").toFile(); try { - final OutputStream out = new FileOutputStream(tempFile); + final OutputStream out = Files.newOutputStream(tempFile.toPath()); try { @@ -90,7 +89,7 @@ void testWrite_withValidDataSet_writesAndReadsBackEquivalentData() throws Except // load new dataset from temp file final IDataSet actualDataSet = - new XmlDataSet(new FileReader(tempFile)); + new XmlDataSet(Files.newBufferedReader(tempFile.toPath(), StandardCharsets.UTF_8)); // verify table count assertThat(actualDataSet.getTableNames()).as("table count") diff --git a/src/test/java/org/dbunit/dataset/xml/XmlTableTest.java b/src/test/java/org/dbunit/dataset/xml/XmlTableTest.java index 11273ac8d..89a5ed0f8 100644 --- a/src/test/java/org/dbunit/dataset/xml/XmlTableTest.java +++ b/src/test/java/org/dbunit/dataset/xml/XmlTableTest.java @@ -23,8 +23,9 @@ import static org.assertj.core.api.Assertions.assertThat; -import java.io.FileReader; import java.io.Reader; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; import org.dbunit.dataset.AbstractTableTest; import org.dbunit.dataset.Column; @@ -50,7 +51,7 @@ protected ITable createTable() throws Exception protected IDataSet createDataSet() throws Exception { final Reader in = - new FileReader(TestUtils.getFile("xml/xmlTableTest.xml")); + Files.newBufferedReader(TestUtils.getFile("xml/xmlTableTest.xml").toPath(), StandardCharsets.UTF_8); return new XmlDataSet(in); } diff --git a/src/test/java/org/dbunit/dataset/xml/XmlTableWriteTest.java b/src/test/java/org/dbunit/dataset/xml/XmlTableWriteTest.java index ad21362af..fdc3a552c 100644 --- a/src/test/java/org/dbunit/dataset/xml/XmlTableWriteTest.java +++ b/src/test/java/org/dbunit/dataset/xml/XmlTableWriteTest.java @@ -22,9 +22,10 @@ package org.dbunit.dataset.xml; import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; +import java.io.Reader; import java.io.Writer; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; import org.dbunit.Assertion; import org.dbunit.dataset.CompositeTable; @@ -47,8 +48,8 @@ class XmlTableWriteTest extends XmlTableTest protected IDataSet createDataSet() throws Exception { final File tempFile = - File.createTempFile("xmlDataSetWriteTest", ".xml"); - final Writer out = new FileWriter(tempFile); + Files.createTempFile("xmlDataSetWriteTest", ".xml").toFile(); + final Writer out = Files.newBufferedWriter(tempFile.toPath(), StandardCharsets.UTF_8); try { // write DefaultTable in temp file @@ -61,7 +62,7 @@ protected IDataSet createDataSet() throws Exception } // load new dataset from temp file - final FileReader in = new FileReader(tempFile); + final Reader in = Files.newBufferedReader(tempFile.toPath(), StandardCharsets.UTF_8); try { return new XmlDataSet(in); @@ -91,8 +92,8 @@ void testWriteMultipleTable_withFiveTablesWrittenAndReloaded_tablesMatchOriginal } final IDataSet dataSet = new DefaultDataSet(tables); - final File tempFile = File.createTempFile("xmlDataSetWriteTest", "xml"); - final Writer out = new FileWriter(tempFile); + final File tempFile = Files.createTempFile("xmlDataSetWriteTest", ".xml").toFile(); + final Writer out = Files.newBufferedWriter(tempFile.toPath(), StandardCharsets.UTF_8); try { // write DefaultTable in temp file @@ -105,7 +106,7 @@ void testWriteMultipleTable_withFiveTablesWrittenAndReloaded_tablesMatchOriginal } // load new dataset from temp file - final FileReader in = new FileReader(tempFile); + final Reader in = Files.newBufferedReader(tempFile.toPath(), StandardCharsets.UTF_8); try { final XmlDataSet xmlDataSet2 = new XmlDataSet(in); diff --git a/src/test/java/org/dbunit/dataset/yaml/YmlDataSetTest.java b/src/test/java/org/dbunit/dataset/yaml/YmlDataSetTest.java index 79177bef6..69dac614a 100644 --- a/src/test/java/org/dbunit/dataset/yaml/YmlDataSetTest.java +++ b/src/test/java/org/dbunit/dataset/yaml/YmlDataSetTest.java @@ -25,10 +25,9 @@ import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; +import java.nio.file.Files; import org.dbunit.Assertion; import org.dbunit.dataset.AbstractDataSetTest; @@ -51,15 +50,15 @@ class YmlDataSetTest extends AbstractDataSetTest protected IDataSet createDataSet() throws Exception { final InputStream in = - new FileInputStream(TestUtils.getFile("yaml/dataSetTest.yml")); + Files.newInputStream(TestUtils.getFile("yaml/dataSetTest.yml").toPath()); return new YamlDataSet(in); } @Override protected IDataSet createDuplicateDataSet() throws Exception { - final InputStream in = new FileInputStream( - TestUtils.getFile("yaml/yamlDataSetDuplicateTest.yml")); + final InputStream in = Files.newInputStream( + TestUtils.getFile("yaml/yamlDataSetDuplicateTest.yml").toPath()); return new YamlDataSet(in); } @@ -98,10 +97,10 @@ public void testGetCaseInsensitiveTableMetaData_withLowercaseTableName_returnsMe void testWrite_withValidDataSet_writesAndReadsBackEquivalentData() throws Exception { final IDataSet expectedDataSet = createDataSet(); - final File tempFile = File.createTempFile("dataSetTest", ".yml"); + final File tempFile = Files.createTempFile("dataSetTest", ".yml").toFile(); try { - final OutputStream out = new FileOutputStream(tempFile); + final OutputStream out = Files.newOutputStream(tempFile.toPath()); try { @@ -110,7 +109,7 @@ void testWrite_withValidDataSet_writesAndReadsBackEquivalentData() throws Except // load new dataset from temp file final IDataSet actualDataSet = - new YamlDataSet(new FileInputStream(tempFile)); + new YamlDataSet(Files.newInputStream(tempFile.toPath())); // verify table count assertThat(actualDataSet.getTableNames()).as("table count") diff --git a/src/test/java/org/dbunit/dataset/yaml/YmlTableTest.java b/src/test/java/org/dbunit/dataset/yaml/YmlTableTest.java index 989a16eb4..8fb2c5d87 100644 --- a/src/test/java/org/dbunit/dataset/yaml/YmlTableTest.java +++ b/src/test/java/org/dbunit/dataset/yaml/YmlTableTest.java @@ -23,8 +23,8 @@ import static org.assertj.core.api.Assertions.assertThat; -import java.io.FileInputStream; import java.io.InputStream; +import java.nio.file.Files; import org.dbunit.dataset.AbstractTableTest; import org.dbunit.dataset.Column; @@ -48,8 +48,8 @@ protected ITable createTable() throws Exception protected IDataSet createDataSet() throws Exception { - final InputStream in = new FileInputStream( - TestUtils.getFile("yaml/yamlTableTest.yml")); + final InputStream in = Files.newInputStream( + TestUtils.getFile("yaml/yamlTableTest.yml").toPath()); return new YamlDataSet(in); } diff --git a/src/test/java/org/dbunit/operation/CompositeOperationIT.java b/src/test/java/org/dbunit/operation/CompositeOperationIT.java index acc0c1e27..1d4e38055 100644 --- a/src/test/java/org/dbunit/operation/CompositeOperationIT.java +++ b/src/test/java/org/dbunit/operation/CompositeOperationIT.java @@ -23,8 +23,9 @@ import static org.assertj.core.api.Assertions.assertThat; -import java.io.FileReader; import java.io.Reader; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; import org.dbunit.AbstractDatabaseIT; import org.dbunit.dataset.IDataSet; @@ -46,9 +47,12 @@ void testExecute_withDeleteAllAndInsertOperations_resultMatchesExpected() throws { final String tableName = "PK_TABLE"; final String columnName = "PK0"; - final Reader in = new FileReader( - TestUtils.getFile("xml/compositeOperationTest.xml")); - final IDataSet xmlDataSet = new XmlDataSet(in); + final IDataSet xmlDataSet; + try (Reader in = Files.newBufferedReader( + TestUtils.getFile("xml/compositeOperationTest.xml").toPath(), StandardCharsets.UTF_8)) + { + xmlDataSet = new XmlDataSet(in); + } // verify table before final ITable tableBefore = createOrderedTable(tableName, columnName); diff --git a/src/test/java/org/dbunit/operation/DeleteOperationIT.java b/src/test/java/org/dbunit/operation/DeleteOperationIT.java index 0d715450e..0abbab8db 100644 --- a/src/test/java/org/dbunit/operation/DeleteOperationIT.java +++ b/src/test/java/org/dbunit/operation/DeleteOperationIT.java @@ -24,8 +24,9 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertThrows; -import java.io.FileReader; import java.io.Reader; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; import org.dbunit.AbstractDatabaseIT; import org.dbunit.database.DatabaseConfig; @@ -60,8 +61,8 @@ void testGetOperationData_withNoPrimaryKey_throwsNoPrimaryKeyException() throws @Test void testExecute_withXmlDataSet_deletesMatchingRowsByPrimaryKey() throws Exception { - final Reader in = new FileReader( - TestUtils.getFile("xml/deleteOperationTest.xml")); + final Reader in = Files.newBufferedReader( + TestUtils.getFile("xml/deleteOperationTest.xml").toPath(), StandardCharsets.UTF_8); final IDataSet dataSet = new XmlDataSet(in); testExecute(dataSet); @@ -71,8 +72,8 @@ void testExecute_withXmlDataSet_deletesMatchingRowsByPrimaryKey() throws Excepti @Test void testExecute_withLowerCaseDataSet_deletesMatchingRows() throws Exception { - final Reader in = new FileReader( - TestUtils.getFile("xml/deleteOperationTest.xml")); + final Reader in = Files.newBufferedReader( + TestUtils.getFile("xml/deleteOperationTest.xml").toPath(), StandardCharsets.UTF_8); final IDataSet dataSet = new XmlDataSet(in); testExecute(new LowerCaseDataSet(dataSet)); @@ -81,8 +82,8 @@ void testExecute_withLowerCaseDataSet_deletesMatchingRows() throws Exception @Test void testExecute_withBatchedStatements_deletesMatchingRowsByPrimaryKey() throws Exception { - final Reader in = new FileReader( - TestUtils.getFile("xml/deleteOperationTest.xml")); + final Reader in = Files.newBufferedReader( + TestUtils.getFile("xml/deleteOperationTest.xml").toPath(), StandardCharsets.UTF_8); final IDataSet dataSet = new XmlDataSet(in); _connection.getConfig() diff --git a/src/test/java/org/dbunit/operation/InsertOperationIT.java b/src/test/java/org/dbunit/operation/InsertOperationIT.java index bde139188..c05e88c21 100644 --- a/src/test/java/org/dbunit/operation/InsertOperationIT.java +++ b/src/test/java/org/dbunit/operation/InsertOperationIT.java @@ -22,9 +22,10 @@ import static org.assertj.core.api.Assertions.assertThat; -import java.io.FileReader; import java.io.Reader; import java.io.StringReader; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; import java.sql.SQLException; import org.dbunit.AbstractDatabaseIT; @@ -68,7 +69,7 @@ void testExecute_withClobData_insertsClobSuccessfully() throws Exception final String tableName = "CLOB_TABLE"; final Reader in = - new FileReader(TestUtils.getFile("xml/clobInsertTest.xml")); + Files.newBufferedReader(TestUtils.getFile("xml/clobInsertTest.xml").toPath(), StandardCharsets.UTF_8); final IDataSet xmlDataSet = new FlatXmlDataSetBuilder().build(in); assertThat(_connection.getRowCount(tableName)).as("count before") @@ -94,7 +95,7 @@ void testExecute_withBlobData_insertsBlobSuccessfully() throws Exception final String tableName = "BLOB_TABLE"; final Reader in = - new FileReader(TestUtils.getFile("xml/blobInsertTest.xml")); + Files.newBufferedReader(TestUtils.getFile("xml/blobInsertTest.xml").toPath(), StandardCharsets.UTF_8); final IDataSet xmlDataSet = new FlatXmlDataSetBuilder().build(in); assertThat(_connection.getRowCount(tableName)).as("count before") @@ -119,8 +120,8 @@ void testExecute_withSdoGeometryData_insertsSdoGeometrySuccessfully() throws Exc { final String tableName = "SDO_GEOMETRY_TABLE"; - final Reader in = new FileReader( - TestUtils.getFile("xml/sdoGeometryInsertTest.xml")); + final Reader in = Files.newBufferedReader( + TestUtils.getFile("xml/sdoGeometryInsertTest.xml").toPath(), StandardCharsets.UTF_8); final IDataSet xmlDataSet = new FlatXmlDataSetBuilder().build(in); assertThat(_connection.getRowCount(tableName)).as("count before") @@ -145,8 +146,8 @@ void testExecute_withXmlTypeData_insertsXmlTypeSuccessfully() throws Exception { final String tableName = "XML_TYPE_TABLE"; - final Reader in = new FileReader( - TestUtils.getFile("xml/xmlTypeInsertTest.xml")); + final Reader in = Files.newBufferedReader( + TestUtils.getFile("xml/xmlTypeInsertTest.xml").toPath(), StandardCharsets.UTF_8); final IDataSet xmlDataSet = new FlatXmlDataSetBuilder().build(in); assertThat(_connection.getRowCount(tableName)).as("count before") diff --git a/src/test/java/org/dbunit/operation/TransactionOperationIT.java b/src/test/java/org/dbunit/operation/TransactionOperationIT.java index 903071418..affa38dec 100644 --- a/src/test/java/org/dbunit/operation/TransactionOperationIT.java +++ b/src/test/java/org/dbunit/operation/TransactionOperationIT.java @@ -27,8 +27,9 @@ import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.verify; -import java.io.FileReader; import java.io.Reader; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; import java.sql.Connection; import java.sql.SQLException; @@ -73,8 +74,8 @@ void assumeTransactionsSupported() void testExecute_withSuccessfulOperation_commitsAndRestoresAutoCommit() throws Exception { final String tableName = "TEST_TABLE"; - final Reader in = new FileReader( - TestUtils.getFile("xml/transactionOperationTest.xml")); + final Reader in = Files.newBufferedReader( + TestUtils.getFile("xml/transactionOperationTest.xml").toPath(), StandardCharsets.UTF_8); final IDataSet xmlDataSet = new XmlDataSet(in); final Connection jdbcConnection = _connection.getConnection(); @@ -102,8 +103,8 @@ void testExecute_withSuccessfulOperation_commitsAndRestoresAutoCommit() throws E void testExecute_withExistingTransaction_throwsExclusiveTransactionException() throws Exception { final String tableName = "TEST_TABLE"; - final Reader in = new FileReader( - TestUtils.getFile("xml/transactionOperationTest.xml")); + final Reader in = Files.newBufferedReader( + TestUtils.getFile("xml/transactionOperationTest.xml").toPath(), StandardCharsets.UTF_8); final IDataSet xmlDataSet = new XmlDataSet(in); final Connection jdbcConnection = _connection.getConnection(); @@ -135,8 +136,8 @@ void testExecute_withExistingTransaction_throwsExclusiveTransactionException() t void testExecute_withFailingOperation_rollsBackAndRestoresAutoCommit() throws Exception { final String tableName = "TEST_TABLE"; - final Reader in = new FileReader( - TestUtils.getFile("xml/transactionOperationTest.xml")); + final Reader in = Files.newBufferedReader( + TestUtils.getFile("xml/transactionOperationTest.xml").toPath(), StandardCharsets.UTF_8); final IDataSet xmlDataSet = new XmlDataSet(in); final Exception[] exceptions = new Exception[] {new SQLException(), new DatabaseUnitException(), new RuntimeException(),}; diff --git a/src/test/java/org/dbunit/operation/UpdateOperationIT.java b/src/test/java/org/dbunit/operation/UpdateOperationIT.java index 76c61f67c..82df9392a 100644 --- a/src/test/java/org/dbunit/operation/UpdateOperationIT.java +++ b/src/test/java/org/dbunit/operation/UpdateOperationIT.java @@ -23,8 +23,9 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.fail; -import java.io.FileReader; import java.io.Reader; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; import org.dbunit.AbstractDatabaseIT; import org.dbunit.Assertion; @@ -262,9 +263,12 @@ void testExecute_withXmlTypeData_updatesXmlTypeSuccessfully() throws Exception @Test void testExecute_withXmlDataSet_updatesMatchingRow() throws Exception { - final Reader in = new FileReader( - TestUtils.getFile("xml/updateOperationTest.xml")); - final IDataSet dataSet = new XmlDataSet(in); + final IDataSet dataSet; + try (Reader in = Files.newBufferedReader( + TestUtils.getFile("xml/updateOperationTest.xml").toPath(), StandardCharsets.UTF_8)) + { + dataSet = new XmlDataSet(in); + } testExecute(dataSet); @@ -273,9 +277,12 @@ void testExecute_withXmlDataSet_updatesMatchingRow() throws Exception @Test void testExecute_withLowerCaseDataSet_updatesMatchingRow() throws Exception { - final Reader in = new FileReader( - TestUtils.getFile("xml/updateOperationTest.xml")); - final IDataSet dataSet = new XmlDataSet(in); + final IDataSet dataSet; + try (Reader in = Files.newBufferedReader( + TestUtils.getFile("xml/updateOperationTest.xml").toPath(), StandardCharsets.UTF_8)) + { + dataSet = new XmlDataSet(in); + } testExecute(new LowerCaseDataSet(dataSet)); } @@ -283,9 +290,12 @@ void testExecute_withLowerCaseDataSet_updatesMatchingRow() throws Exception @Test void testExecute_withForwardOnlyDataSet_updatesMatchingRow() throws Exception { - final Reader in = new FileReader( - TestUtils.getFile("xml/updateOperationTest.xml")); - final IDataSet dataSet = new XmlDataSet(in); + final IDataSet dataSet; + try (Reader in = Files.newBufferedReader( + TestUtils.getFile("xml/updateOperationTest.xml").toPath(), StandardCharsets.UTF_8)) + { + dataSet = new XmlDataSet(in); + } testExecute(new ForwardOnlyDataSet(dataSet)); } @@ -321,9 +331,12 @@ void testExecute_withTableHavingNoPrimaryKey_throwsNoPrimaryKeyException() throw void testExecute_batchedStatements_allRowsUpdated() throws Exception { final String tableName = "PK_TABLE"; - final Reader in = - new FileReader(TestUtils.getFile("xml/updateOperationTest.xml")); - final IDataSet dataSet = new XmlDataSet(in); + final IDataSet dataSet; + try (Reader in = Files.newBufferedReader( + TestUtils.getFile("xml/updateOperationTest.xml").toPath(), StandardCharsets.UTF_8)) + { + dataSet = new XmlDataSet(in); + } _connection.getConfig().setFeature(DatabaseConfig.FEATURE_BATCHED_STATEMENTS, true); diff --git a/src/test/java/org/dbunit/testutil/FileAsserts.java b/src/test/java/org/dbunit/testutil/FileAsserts.java index f8733d99f..b9872079f 100644 --- a/src/test/java/org/dbunit/testutil/FileAsserts.java +++ b/src/test/java/org/dbunit/testutil/FileAsserts.java @@ -22,10 +22,10 @@ import java.io.BufferedReader; import java.io.File; -import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; +import java.nio.file.Files; import org.dbunit.assertion.DefaultFailureHandler; import org.dbunit.assertion.JUnitFailureFactory; @@ -170,7 +170,7 @@ public static void assertEquals(InputStream expected, File actual) new BufferedReader(new InputStreamReader(expected)); BufferedReader actualData = new BufferedReader( - new InputStreamReader(new FileInputStream(actual))); + new InputStreamReader(Files.newInputStream(actual.toPath()))); assertEquals(expectedData, actualData); } @@ -186,9 +186,9 @@ public static void assertEquals(File expected, File actual) throws Exception ASSERT.assertTrue(actual.canRead()); BufferedReader expectedData = new BufferedReader( - new InputStreamReader(new FileInputStream(expected))); + new InputStreamReader(Files.newInputStream(expected.toPath()))); BufferedReader actualData = new BufferedReader( - new InputStreamReader(new FileInputStream(actual))); + new InputStreamReader(Files.newInputStream(actual.toPath()))); assertEquals(expectedData, actualData); } } diff --git a/src/test/java/org/dbunit/testutil/TestUtils.java b/src/test/java/org/dbunit/testutil/TestUtils.java index 5cbc5fa04..2862db227 100644 --- a/src/test/java/org/dbunit/testutil/TestUtils.java +++ b/src/test/java/org/dbunit/testutil/TestUtils.java @@ -22,9 +22,13 @@ package org.dbunit.testutil; import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.FileReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.Reader; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; import org.dbunit.DatabaseEnvironment; @@ -47,7 +51,8 @@ public static String getFileName(String fileName) public static File getFile(String fileName) { - return new File(getFileName(fileName)); + final Path path = Paths.get(getFileName(fileName)); + return path.toFile(); } public static File getFileForDatabaseEnvironment(String originalFileName) @@ -55,26 +60,28 @@ public static File getFileForDatabaseEnvironment(String originalFileName) { String profilePath = originalFileName.replace(".", "-" + getProfileName() + "."); - File profileFile = new File(profilePath); + File profileFile = Paths.get(profilePath).toFile(); if (profileFile.exists()) { return profileFile; } else { - return new File(originalFileName); + final Path path = Paths.get(originalFileName); + return path.toFile(); } } - public static FileReader getFileReader(String fileName) - throws FileNotFoundException + public static Reader getFileReader(String fileName) throws IOException { - return new FileReader(getFileName(fileName)); + final Path path = Paths.get(getFileName(fileName)); + return Files.newBufferedReader(path, StandardCharsets.UTF_8); } - public static FileInputStream getFileInputStream(String fileName) - throws FileNotFoundException + public static InputStream getFileInputStream(String fileName) + throws IOException { - return new FileInputStream(getFileName(fileName)); + final Path path = Paths.get(getFileName(fileName)); + return Files.newInputStream(path); } } diff --git a/src/test/java/org/dbunit/util/FileHelperTest.java b/src/test/java/org/dbunit/util/FileHelperTest.java index a7103684d..01035dbaf 100644 --- a/src/test/java/org/dbunit/util/FileHelperTest.java +++ b/src/test/java/org/dbunit/util/FileHelperTest.java @@ -27,6 +27,7 @@ import java.io.IOException; import java.nio.charset.StandardCharsets; import java.nio.file.Files; +import java.nio.file.Path; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; @@ -37,28 +38,32 @@ class FileHelperTest void testCopyFile_withRegularFiles_copiesContent( @TempDir final File tempDir) throws IOException { - final File srcFile = new File(tempDir, "source.txt"); - Files.write(srcFile.toPath(), - "content".getBytes(StandardCharsets.UTF_8)); - final File destFile = new File(tempDir, "destination.txt"); + final Path srcPath = tempDir.toPath().resolve("source.txt"); + final byte[] content = "content".getBytes(StandardCharsets.UTF_8); + Files.write(srcPath, content); + final File srcFile = srcPath.toFile(); + final Path destPath = tempDir.toPath().resolve("destination.txt"); + final File destFile = destPath.toFile(); FileHelper.copyFile(srcFile, destFile); assertThat(destFile) .as("The destination file should contain the source file's bytes.") - .hasBinaryContent("content".getBytes(StandardCharsets.UTF_8)); + .hasBinaryContent(content); } @Test void testCopyFile_destinationUnwritable_sourceNotLocked( @TempDir final File tempDir) throws IOException { - final File srcFile = new File(tempDir, "source.txt"); - Files.write(srcFile.toPath(), - "content".getBytes(StandardCharsets.UTF_8)); + final Path srcPath = tempDir.toPath().resolve("source.txt"); + final byte[] content = "content".getBytes(StandardCharsets.UTF_8); + Files.write(srcPath, content); + final File srcFile = srcPath.toFile(); // A directory is a portable way to make the destination unopenable // for writing. - final File destDir = new File(tempDir, "destination-is-a-directory"); + final Path destDirPath = tempDir.toPath().resolve("destination-is-a-directory"); + final File destDir = destDirPath.toFile(); assertThat(destDir.mkdir()) .as("Setup: the destination directory must be created.") .isTrue();