[
https://issues.apache.org/jira/browse/CSV-321?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Ruiqi Dong closed CSV-321.
--------------------------
> CSVFormat.equals()/hashCode() ignores maxRows
> ---------------------------------------------
>
> Key: CSV-321
> URL: https://issues.apache.org/jira/browse/CSV-321
> Project: Commons CSV
> Issue Type: Bug
> Affects Versions: 1.14.1
> Reporter: Ruiqi Dong
> Assignee: Gary D. Gregory
> Priority: Minor
> Fix For: 1.14.2
>
> Original Estimate: 0.5h
> Remaining Estimate: 0.5h
>
> *Summary*
> CSVFormat has a maxRows configuration field, but equals() and hashCode() both
> ignore it. Two format objects with different row limits can therefore compare
> equal.
>
> *Affected code*
> File: src/main/java/org/apache/commons/csv/CSVFormat.java
> {code:java}
> /** The maximum number of rows to process, excluding the header row. */
> private long maxRows;
> public Builder setMaxRows(final long maxRows) {
> this.maxRows = maxRows;
> return this;
> }
> private final long maxRows;
> return allowMissingColumnNames == other.allowMissingColumnNames
> && ...
> && trailingData == other.trailingData
> && trailingDelimiter == other.trailingDelimiter
> && trim == other.trim;
> @Override
> public int hashCode() {
> return prime * result + Objects.hash(
> allowMissingColumnNames, autoFlush, commentMarker, delimiter,
> duplicateHeaderMode, escapeCharacter, ignoreEmptyLines,
> ignoreHeaderCase, ignoreSurroundingSpaces, lenientEof,
> nullString, quoteCharacter, quoteMode, quotedNullString,
> recordSeparator, skipHeaderRecord, trailingData,
> trailingDelimiter, trim);
> }{code}
>
> *Reproducer*
> Add the following test to
> src/test/java/org/apache/commons/csv/CSVFormatTest.java:
> {code:java}
> @Test
> void testEqualsMaxRows() {
> final CSVFormat right = CSVFormat.DEFAULT.builder().setMaxRows(10).get();
> final CSVFormat left = CSVFormat.DEFAULT.builder().setMaxRows(1000).get();
> assertNotEqualsFlip(right, left);
> assertNotEquals(right.hashCode(), left.hashCode());
> } {code}
> Run:
> {code:java}
> mvn -q -Dtest=org.apache.commons.csv.CSVFormatTest test {code}
> Observed behavior:
> {code:java}
> CSVFormatTest.testEqualsMaxRows:256
> expected: not equal but was: <Delimiter=<,> QuoteChar=<">
> RecordSeparator=<\r\n> EmptyLines:ignored SkipHeaderRecord:false> {code}
> Expected behavior:
> Objects with different {{maxRows}} values should not compare equal.
>
> {{maxRows}} changes the format's observable behavior by limiting how many
> records are processed. It should therefore participate in equality and
> hashing.
>
>
--
This message was sent by Atlassian Jira
(v8.20.10#820010)