From 38ada7d7143940114bca939c760eae271000f9b5 Mon Sep 17 00:00:00 2001
From: "Gary D. Gregory"
Date: Tue, 20 May 2025 08:13:29 -0400
Subject: [PATCH 001/245] Bump org.apache.commons:commons-parent from 83 to 84
---
pom.xml | 2 +-
src/changes/changes.xml | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/pom.xml b/pom.xml
index df1462775..8fb451f41 100644
--- a/pom.xml
+++ b/pom.xml
@@ -20,7 +20,7 @@
org.apache.commons
commons-parent
- 83
+ 84
commons-csv
1.14.1-SNAPSHOT
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 3cb97f78c..4d23e65d2 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -48,7 +48,7 @@
Bump commons-io:commons-io from 2.18.0 to 2.19.0.
- Bump org.apache.commons:commons-parent from 81 to 83 #542.
+ Bump org.apache.commons:commons-parent from 81 to 84 #542.
Bump com.opencsv:opencsv from 5.10 to 5.11 #545.
From 3cbc2913701f4612d7c30ddf4fd736acda6711ad Mon Sep 17 00:00:00 2001
From: "Gary D. Gregory"
Date: Tue, 20 May 2025 16:35:38 -0400
Subject: [PATCH 002/245] Update Apache License URL to HTTPS
See https://www.apache.org/legal/src-headers.html
---
.asf.yaml | 2 +-
.gitattributes | 2 +-
.github/GH-ROBOTS.txt | 2 +-
.github/dependabot.yml | 2 +-
.github/pull_request_template.md | 2 +-
.github/workflows/codeql-analysis.yml | 2 +-
.github/workflows/dependency-review.yml | 2 +-
.github/workflows/maven.yml | 2 +-
.github/workflows/scorecards-analysis.yml | 2 +-
BENCHMARK.md | 2 +-
CODE_OF_CONDUCT.md | 2 +-
LICENSE.txt | 2 +-
SECURITY.md | 2 +-
benchmark-prereq.sh | 2 +-
pom.xml | 2 +-
src/assembly/bin.xml | 2 +-
src/assembly/src.xml | 2 +-
src/changes/changes.xml | 2 +-
src/changes/release-notes.vm | 2 +-
src/conf/checkstyle/checkstyle-suppressions.xml | 2 +-
src/conf/checkstyle/checkstyle.xml | 2 +-
src/site/resources/pmd/pmd-ruleset.xml | 2 +-
src/site/resources/spotbugs/spotbugs-exclude-filter.xml | 2 +-
src/site/site.xml | 2 +-
src/site/xdoc/index.xml | 2 +-
src/site/xdoc/user-guide.xml | 2 +-
26 files changed, 26 insertions(+), 26 deletions(-)
diff --git a/.asf.yaml b/.asf.yaml
index c56b33138..a2dc85766 100644
--- a/.asf.yaml
+++ b/.asf.yaml
@@ -5,7 +5,7 @@
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
diff --git a/.gitattributes b/.gitattributes
index bec231c19..f42866e4b 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -5,7 +5,7 @@
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
diff --git a/.github/GH-ROBOTS.txt b/.github/GH-ROBOTS.txt
index e3329e55f..64a88674f 100644
--- a/.github/GH-ROBOTS.txt
+++ b/.github/GH-ROBOTS.txt
@@ -5,7 +5,7 @@
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
index 9ebcd0ebb..00079caf1 100644
--- a/.github/dependabot.yml
+++ b/.github/dependabot.yml
@@ -5,7 +5,7 @@
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md
index d126a970c..e17973cb0 100644
--- a/.github/pull_request_template.md
+++ b/.github/pull_request_template.md
@@ -7,7 +7,7 @@
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
- http://www.apache.org/licenses/LICENSE-2.0
+ https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml
index 84d9df4ce..e7c680d2f 100644
--- a/.github/workflows/codeql-analysis.yml
+++ b/.github/workflows/codeql-analysis.yml
@@ -5,7 +5,7 @@
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
diff --git a/.github/workflows/dependency-review.yml b/.github/workflows/dependency-review.yml
index 9d226a458..33573cf94 100644
--- a/.github/workflows/dependency-review.yml
+++ b/.github/workflows/dependency-review.yml
@@ -6,7 +6,7 @@
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml
index 02b3996bd..4b4bf2e01 100644
--- a/.github/workflows/maven.yml
+++ b/.github/workflows/maven.yml
@@ -5,7 +5,7 @@
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
diff --git a/.github/workflows/scorecards-analysis.yml b/.github/workflows/scorecards-analysis.yml
index 802675206..8f044bb21 100644
--- a/.github/workflows/scorecards-analysis.yml
+++ b/.github/workflows/scorecards-analysis.yml
@@ -5,7 +5,7 @@
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
diff --git a/BENCHMARK.md b/BENCHMARK.md
index e8b579b2e..c45918a28 100644
--- a/BENCHMARK.md
+++ b/BENCHMARK.md
@@ -6,7 +6,7 @@
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
- http://www.apache.org/licenses/LICENSE-2.0
+ https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md
index 3ed501501..b4342f33c 100644
--- a/CODE_OF_CONDUCT.md
+++ b/CODE_OF_CONDUCT.md
@@ -6,7 +6,7 @@
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
- http://www.apache.org/licenses/LICENSE-2.0
+ https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
diff --git a/LICENSE.txt b/LICENSE.txt
index d64569567..ff9ad4530 100644
--- a/LICENSE.txt
+++ b/LICENSE.txt
@@ -193,7 +193,7 @@
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
- http://www.apache.org/licenses/LICENSE-2.0
+ https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
diff --git a/SECURITY.md b/SECURITY.md
index 51943ba7b..744d4cddb 100644
--- a/SECURITY.md
+++ b/SECURITY.md
@@ -6,7 +6,7 @@
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
- http://www.apache.org/licenses/LICENSE-2.0
+ https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
diff --git a/benchmark-prereq.sh b/benchmark-prereq.sh
index 1d03f6773..bd1db9182 100755
--- a/benchmark-prereq.sh
+++ b/benchmark-prereq.sh
@@ -8,7 +8,7 @@
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
diff --git a/pom.xml b/pom.xml
index 8fb451f41..5ac78ed95 100644
--- a/pom.xml
+++ b/pom.xml
@@ -7,7 +7,7 @@
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
- http://www.apache.org/licenses/LICENSE-2.0
+ https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
diff --git a/src/assembly/bin.xml b/src/assembly/bin.xml
index f73d62f6d..3526ca9e9 100644
--- a/src/assembly/bin.xml
+++ b/src/assembly/bin.xml
@@ -6,7 +6,7 @@ Licensed to the Apache Software Foundation (ASF) under one or more
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
- http://www.apache.org/licenses/LICENSE-2.0
+ https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
diff --git a/src/assembly/src.xml b/src/assembly/src.xml
index 9f33f58f2..1330db01f 100644
--- a/src/assembly/src.xml
+++ b/src/assembly/src.xml
@@ -6,7 +6,7 @@ Licensed to the Apache Software Foundation (ASF) under one or more
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
- http://www.apache.org/licenses/LICENSE-2.0
+ https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 4d23e65d2..d9b0fd2a3 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -7,7 +7,7 @@
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
- http://www.apache.org/licenses/LICENSE-2.0
+ https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
diff --git a/src/changes/release-notes.vm b/src/changes/release-notes.vm
index 5f5501269..576982955 100644
--- a/src/changes/release-notes.vm
+++ b/src/changes/release-notes.vm
@@ -6,7 +6,7 @@
## "License"); you may not use this file except in compliance
## with the License. You may obtain a copy of the License at
##
-## http://www.apache.org/licenses/LICENSE-2.0
+## https://www.apache.org/licenses/LICENSE-2.0
##
## Unless required by applicable law or agreed to in writing,
## software distributed under the License is distributed on an
diff --git a/src/conf/checkstyle/checkstyle-suppressions.xml b/src/conf/checkstyle/checkstyle-suppressions.xml
index e1a4807cc..f1eab03c4 100644
--- a/src/conf/checkstyle/checkstyle-suppressions.xml
+++ b/src/conf/checkstyle/checkstyle-suppressions.xml
@@ -7,7 +7,7 @@
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
- http://www.apache.org/licenses/LICENSE-2.0
+ https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
diff --git a/src/conf/checkstyle/checkstyle.xml b/src/conf/checkstyle/checkstyle.xml
index 1010cb262..4e8691243 100644
--- a/src/conf/checkstyle/checkstyle.xml
+++ b/src/conf/checkstyle/checkstyle.xml
@@ -7,7 +7,7 @@ The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
- http://www.apache.org/licenses/LICENSE-2.0
+ https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
diff --git a/src/site/resources/pmd/pmd-ruleset.xml b/src/site/resources/pmd/pmd-ruleset.xml
index 5acc76402..a7ccc9216 100644
--- a/src/site/resources/pmd/pmd-ruleset.xml
+++ b/src/site/resources/pmd/pmd-ruleset.xml
@@ -7,7 +7,7 @@
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
- http://www.apache.org/licenses/LICENSE-2.0
+ https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
diff --git a/src/site/resources/spotbugs/spotbugs-exclude-filter.xml b/src/site/resources/spotbugs/spotbugs-exclude-filter.xml
index a7364d40d..a58e09e24 100644
--- a/src/site/resources/spotbugs/spotbugs-exclude-filter.xml
+++ b/src/site/resources/spotbugs/spotbugs-exclude-filter.xml
@@ -6,7 +6,7 @@
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
- http://www.apache.org/licenses/LICENSE-2.0
+ https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
diff --git a/src/site/site.xml b/src/site/site.xml
index 86c1afa1e..232c2056c 100644
--- a/src/site/site.xml
+++ b/src/site/site.xml
@@ -7,7 +7,7 @@
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
- http://www.apache.org/licenses/LICENSE-2.0
+ https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
diff --git a/src/site/xdoc/index.xml b/src/site/xdoc/index.xml
index 491a384b4..a133db619 100644
--- a/src/site/xdoc/index.xml
+++ b/src/site/xdoc/index.xml
@@ -7,7 +7,7 @@ The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
- http://www.apache.org/licenses/LICENSE-2.0
+ https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
diff --git a/src/site/xdoc/user-guide.xml b/src/site/xdoc/user-guide.xml
index 64d9a4039..d5a1f2685 100644
--- a/src/site/xdoc/user-guide.xml
+++ b/src/site/xdoc/user-guide.xml
@@ -7,7 +7,7 @@ The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
- http://www.apache.org/licenses/LICENSE-2.0
+ https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
From 9e9e26557355e4977712e3144b677131521cdf12 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Fri, 6 Jun 2025 12:16:37 +0000
Subject: [PATCH 003/245] Bump ossf/scorecard-action from 2.4.1 to 2.4.2
Bumps [ossf/scorecard-action](https://github.com/ossf/scorecard-action) from 2.4.1 to 2.4.2.
- [Release notes](https://github.com/ossf/scorecard-action/releases)
- [Changelog](https://github.com/ossf/scorecard-action/blob/main/RELEASE.md)
- [Commits](https://github.com/ossf/scorecard-action/compare/f49aabe0b5af0936a0987cfb85d86b75731b0186...05b42c624433fc40578a4040d5cf5e36ddca8cde)
---
updated-dependencies:
- dependency-name: ossf/scorecard-action
dependency-version: 2.4.2
dependency-type: direct:production
update-type: version-update:semver-patch
...
Signed-off-by: dependabot[bot]
---
.github/workflows/scorecards-analysis.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/scorecards-analysis.yml b/.github/workflows/scorecards-analysis.yml
index 8f044bb21..3edd29d96 100644
--- a/.github/workflows/scorecards-analysis.yml
+++ b/.github/workflows/scorecards-analysis.yml
@@ -45,7 +45,7 @@ jobs:
persist-credentials: false
- name: "Run analysis"
- uses: ossf/scorecard-action@f49aabe0b5af0936a0987cfb85d86b75731b0186 # 2.4.1
+ uses: ossf/scorecard-action@05b42c624433fc40578a4040d5cf5e36ddca8cde # 2.4.2
with:
results_file: results.sarif
results_format: sarif
From 28ab1635bedaf55b1743ef8f4577c840cd4009fa Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Fri, 6 Jun 2025 12:16:47 +0000
Subject: [PATCH 004/245] Bump github/codeql-action from 3.28.18 to 3.28.19
Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.28.18 to 3.28.19.
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/codeql-action/compare/ff0a06e83cb2de871e5a09832bc6a81e7276941f...fca7ace96b7d713c7035871441bd52efbe39e27e)
---
updated-dependencies:
- dependency-name: github/codeql-action
dependency-version: 3.28.19
dependency-type: direct:production
update-type: version-update:semver-patch
...
Signed-off-by: dependabot[bot]
---
.github/workflows/codeql-analysis.yml | 6 +++---
.github/workflows/scorecards-analysis.yml | 2 +-
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml
index e7c680d2f..3f2fc9e55 100644
--- a/.github/workflows/codeql-analysis.yml
+++ b/.github/workflows/codeql-analysis.yml
@@ -57,7 +57,7 @@ jobs:
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
- uses: github/codeql-action/init@ff0a06e83cb2de871e5a09832bc6a81e7276941f # 3.28.18
+ uses: github/codeql-action/init@fca7ace96b7d713c7035871441bd52efbe39e27e # 3.28.19
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
@@ -68,7 +68,7 @@ jobs:
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
- uses: github/codeql-action/autobuild@ff0a06e83cb2de871e5a09832bc6a81e7276941f # 3.28.18
+ uses: github/codeql-action/autobuild@fca7ace96b7d713c7035871441bd52efbe39e27e # 3.28.19
# ℹ️ Command-line programs to run using the OS shell.
# 📚 https://git.io/JvXDl
@@ -82,4 +82,4 @@ jobs:
# make release
- name: Perform CodeQL Analysis
- uses: github/codeql-action/analyze@ff0a06e83cb2de871e5a09832bc6a81e7276941f # 3.28.18
+ uses: github/codeql-action/analyze@fca7ace96b7d713c7035871441bd52efbe39e27e # 3.28.19
diff --git a/.github/workflows/scorecards-analysis.yml b/.github/workflows/scorecards-analysis.yml
index 8f044bb21..411032144 100644
--- a/.github/workflows/scorecards-analysis.yml
+++ b/.github/workflows/scorecards-analysis.yml
@@ -64,6 +64,6 @@ jobs:
retention-days: 5
- name: "Upload to code-scanning"
- uses: github/codeql-action/upload-sarif@ff0a06e83cb2de871e5a09832bc6a81e7276941f # 3.28.18
+ uses: github/codeql-action/upload-sarif@fca7ace96b7d713c7035871441bd52efbe39e27e # 3.28.19
with:
sarif_file: results.sarif
From f364373e4bf52b831420aea5f2131d40ee04e497 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Fri, 6 Jun 2025 12:33:25 +0000
Subject: [PATCH 005/245] Bump com.opencsv:opencsv from 5.11 to 5.11.1
Bumps com.opencsv:opencsv from 5.11 to 5.11.1.
---
updated-dependencies:
- dependency-name: com.opencsv:opencsv
dependency-version: 5.11.1
dependency-type: direct:development
update-type: version-update:semver-patch
...
Signed-off-by: dependabot[bot]
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index 5ac78ed95..ec93a5b3b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -386,7 +386,7 @@
com.opencsv
opencsv
- 5.11
+ 5.11.1
test
From 2bb942380769d525d588efea88b2407e2db7a021 Mon Sep 17 00:00:00 2001
From: Gary Gregory
Date: Fri, 6 Jun 2025 09:03:18 -0400
Subject: [PATCH 006/245] Bump com.opencsv:opencsv from 5.11 to 5.11.1 #551
---
src/changes/changes.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index d9b0fd2a3..c86f459da 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -49,7 +49,7 @@
Bump commons-io:commons-io from 2.18.0 to 2.19.0.
Bump org.apache.commons:commons-parent from 81 to 84 #542.
- Bump com.opencsv:opencsv from 5.10 to 5.11 #545.
+ Bump com.opencsv:opencsv from 5.10 to 5.11.1 #545, #551.
From e5c8f49d3cd60c6147a87df69a2e7ed1f6162bc2 Mon Sep 17 00:00:00 2001
From: Gary Gregory
Date: Fri, 6 Jun 2025 09:12:52 -0400
Subject: [PATCH 007/245] Inline single use local variable
---
src/main/java/org/apache/commons/csv/CSVParser.java | 8 +++-----
1 file changed, 3 insertions(+), 5 deletions(-)
diff --git a/src/main/java/org/apache/commons/csv/CSVParser.java b/src/main/java/org/apache/commons/csv/CSVParser.java
index 33ae78567..4d74bc96f 100644
--- a/src/main/java/org/apache/commons/csv/CSVParser.java
+++ b/src/main/java/org/apache/commons/csv/CSVParser.java
@@ -886,7 +886,7 @@ CSVRecord nextRecord() throws IOException {
recordList.clear();
StringBuilder sb = null;
final long startCharPosition = lexer.getCharacterPosition() + characterOffset;
- final long startBytePosition = lexer.getBytesRead() + this.characterOffset;
+ final long startBytePosition = lexer.getBytesRead() + characterOffset;
do {
reusableToken.reset();
lexer.nextToken(reusableToken);
@@ -919,12 +919,10 @@ CSVRecord nextRecord() throws IOException {
throw new CSVException("Unexpected Token type: %s", reusableToken.type);
}
} while (reusableToken.type == TOKEN);
-
if (!recordList.isEmpty()) {
recordNumber++;
- final String comment = Objects.toString(sb, null);
- result = new CSVRecord(this, recordList.toArray(Constants.EMPTY_STRING_ARRAY), comment,
- recordNumber, startCharPosition, startBytePosition);
+ result = new CSVRecord(this, recordList.toArray(Constants.EMPTY_STRING_ARRAY), Objects.toString(sb, null), recordNumber, startCharPosition,
+ startBytePosition);
}
return result;
}
From 1054469e9959d2fc8b3ac6db0167871e13d5d686 Mon Sep 17 00:00:00 2001
From: Gary Gregory
Date: Fri, 6 Jun 2025 09:15:16 -0400
Subject: [PATCH 008/245] Javadoc
---
src/main/java/org/apache/commons/csv/CSVRecord.java | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/main/java/org/apache/commons/csv/CSVRecord.java b/src/main/java/org/apache/commons/csv/CSVRecord.java
index c04725af7..4fcd6362c 100644
--- a/src/main/java/org/apache/commons/csv/CSVRecord.java
+++ b/src/main/java/org/apache/commons/csv/CSVRecord.java
@@ -359,9 +359,9 @@ public String toString() {
}
/**
- * Gets the values for this record. This is not a copy.
+ * Gets the values for this record. This is not a copy.
*
- * @return the values for this record.
+ * @return the values for this record, never null.
* @since 1.10.0
*/
public String[] values() {
From f64cbff689c93b0edba6670b639c7e354b555edb Mon Sep 17 00:00:00 2001
From: Gary Gregory
Date: Fri, 6 Jun 2025 09:17:53 -0400
Subject: [PATCH 009/245] Javadoc
---
.../org/apache/commons/csv/CSVRecord.java | 20 +++++++++----------
1 file changed, 10 insertions(+), 10 deletions(-)
diff --git a/src/main/java/org/apache/commons/csv/CSVRecord.java b/src/main/java/org/apache/commons/csv/CSVRecord.java
index 4fcd6362c..148c76ca8 100644
--- a/src/main/java/org/apache/commons/csv/CSVRecord.java
+++ b/src/main/java/org/apache/commons/csv/CSVRecord.java
@@ -55,13 +55,13 @@ public final class CSVRecord implements Serializable, Iterable {
*/
private final long bytePosition;
- /** The accumulated comments (if any) */
+ /** The accumulated comments (if any). */
private final String comment;
/** The record number. */
private final long recordNumber;
- /** The values of the record */
+ /** The values of the record. */
private final String[] values;
/** The parser that originates this record. This is not serialized. */
@@ -114,9 +114,9 @@ public String get(final int i) {
* the name of the column to be retrieved.
* @return the column value, maybe null depending on {@link CSVFormat#getNullString()}.
* @throws IllegalStateException
- * if no header mapping was provided
+ * if no header mapping was provided.
* @throws IllegalArgumentException
- * if {@code name} is not mapped or if the record is inconsistent
+ * if {@code name} is not mapped or if the record is inconsistent.
* @see #isMapped(String)
* @see #isConsistent()
* @see #getParser()
@@ -214,7 +214,7 @@ public long getRecordNumber() {
* If there is no following record (that is, the comment is at EOF),
* then the comment will be ignored.
*
- * @return true if this record has a comment, false otherwise
+ * @return true if this record has a comment, false otherwise.
* @since 1.3
*/
public boolean hasComment() {
@@ -229,7 +229,7 @@ public boolean hasComment() {
* test but still produce parsable files.
*
*
- * @return true of this record is valid, false if not
+ * @return true of this record is valid, false if not.
*/
public boolean isConsistent() {
final Map headerMap = getHeaderMapRaw();
@@ -252,8 +252,8 @@ public boolean isMapped(final String name) {
* Checks whether a column with a given index has a value.
*
* @param index
- * a column index (0-based)
- * @return whether a column with a given index has a value
+ * a column index (0-based).
+ * @return whether a column with a given index has a value.
*/
public boolean isSet(final int index) {
return 0 <= index && index < values.length;
@@ -264,7 +264,7 @@ public boolean isSet(final int index) {
*
* @param name
* the name of the column to be retrieved.
- * @return whether a given column is mapped and has a value
+ * @return whether a given column is mapped and has a value.
*/
public boolean isSet(final String name) {
return isMapped(name) && getHeaderMapRaw().get(name).intValue() < values.length; // Explicit (un)boxing is intentional
@@ -283,7 +283,7 @@ public Iterator iterator() {
/**
* Puts all values of this record into the given Map.
*
- * @param the map type
+ * @param the map type.
* @param map The Map to populate.
* @return the given map.
* @since 1.9.0
From 7a264a24fc6ee4b3f717d0e799b893b7f7f30fbd Mon Sep 17 00:00:00 2001
From: Gary Gregory
Date: Fri, 6 Jun 2025 09:22:34 -0400
Subject: [PATCH 010/245] Use final
Format
---
.../apache/commons/csv/JiraCsv196Test.java | 23 ++++++++++++++-----
1 file changed, 17 insertions(+), 6 deletions(-)
diff --git a/src/test/java/org/apache/commons/csv/JiraCsv196Test.java b/src/test/java/org/apache/commons/csv/JiraCsv196Test.java
index cff3a7729..3b6c74011 100644
--- a/src/test/java/org/apache/commons/csv/JiraCsv196Test.java
+++ b/src/test/java/org/apache/commons/csv/JiraCsv196Test.java
@@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
+
package org.apache.commons.csv;
import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -36,11 +37,16 @@ private Reader getTestInput(final String path) {
@Test
public void testParseFourBytes() throws IOException {
final CSVFormat format = CSVFormat.Builder.create().setDelimiter(',').setQuote('\'').get();
- try (CSVParser parser = new CSVParser.Builder().setFormat(format).setReader(getTestInput("org/apache/commons/csv/CSV-196/emoji.csv"))
- .setCharset(StandardCharsets.UTF_8).setTrackBytes(true).get()) {
+ // @formatter:off
+ try (CSVParser parser = new CSVParser.Builder()
+ .setFormat(format)
+ .setReader(getTestInput("org/apache/commons/csv/CSV-196/emoji.csv"))
+ .setCharset(StandardCharsets.UTF_8)
+ .setTrackBytes(true).get()) {
+ // @formatter:on
final long[] charByteKey = { 0, 84, 701, 1318, 1935 };
int idx = 0;
- for (CSVRecord record : parser) {
+ for (final CSVRecord record : parser) {
assertEquals(charByteKey[idx++], record.getBytePosition(), "index " + idx);
}
}
@@ -49,11 +55,16 @@ public void testParseFourBytes() throws IOException {
@Test
public void testParseThreeBytes() throws IOException {
final CSVFormat format = CSVFormat.Builder.create().setDelimiter(',').setQuote('\'').get();
- try (CSVParser parser = new CSVParser.Builder().setFormat(format).setReader(getTestInput("org/apache/commons/csv/CSV-196/japanese.csv"))
- .setCharset(StandardCharsets.UTF_8).setTrackBytes(true).get()) {
+ // @formatter:off
+ try (CSVParser parser = new CSVParser.Builder()
+ .setFormat(format)
+ .setReader(getTestInput("org/apache/commons/csv/CSV-196/japanese.csv"))
+ .setCharset(StandardCharsets.UTF_8)
+ .setTrackBytes(true).get()) {
+ // @formatter:on
final long[] charByteKey = { 0, 89, 242, 395 };
int idx = 0;
- for (CSVRecord record : parser) {
+ for (final CSVRecord record : parser) {
assertEquals(charByteKey[idx++], record.getBytePosition(), "index " + idx);
}
}
From 0cf4f113265a30feeaad98bb98ee6abc5181ee97 Mon Sep 17 00:00:00 2001
From: Gary Gregory
Date: Fri, 6 Jun 2025 09:22:58 -0400
Subject: [PATCH 011/245] Sort members
---
.../org/apache/commons/csv/CSVPrinter.java | 26 +++++++++----------
1 file changed, 13 insertions(+), 13 deletions(-)
diff --git a/src/main/java/org/apache/commons/csv/CSVPrinter.java b/src/main/java/org/apache/commons/csv/CSVPrinter.java
index 68d8d40ef..59948557e 100644
--- a/src/main/java/org/apache/commons/csv/CSVPrinter.java
+++ b/src/main/java/org/apache/commons/csv/CSVPrinter.java
@@ -208,19 +208,6 @@ public void print(final Object value) throws IOException {
}
}
- /**
- * Prints the string as the next value on the line. The value will be escaped or encapsulated as needed.
- *
- * @param value
- * value to be output.
- * @throws IOException
- * If an I/O error occurs
- */
- private void printRaw(final Object value) throws IOException {
- format.print(value, appendable, newRecord);
- newRecord = false;
- }
-
/**
* Prints a comment on a new line among the delimiter-separated values.
*
@@ -313,6 +300,19 @@ public void println() throws IOException {
}
}
+ /**
+ * Prints the string as the next value on the line. The value will be escaped or encapsulated as needed.
+ *
+ * @param value
+ * value to be output.
+ * @throws IOException
+ * If an I/O error occurs
+ */
+ private void printRaw(final Object value) throws IOException {
+ format.print(value, appendable, newRecord);
+ newRecord = false;
+ }
+
/**
* Prints the given values as a single record of delimiter-separated values followed by the record separator.
*
From 8c75343539f42812acca7e21b9b4d55180d1b8c7 Mon Sep 17 00:00:00 2001
From: Gary Gregory
Date: Fri, 6 Jun 2025 09:24:03 -0400
Subject: [PATCH 012/245] No need to nest elses
---
.../java/org/apache/commons/csv/ExtendedBufferedReader.java | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/src/main/java/org/apache/commons/csv/ExtendedBufferedReader.java b/src/main/java/org/apache/commons/csv/ExtendedBufferedReader.java
index 8c0a034a2..75748d812 100644
--- a/src/main/java/org/apache/commons/csv/ExtendedBufferedReader.java
+++ b/src/main/java/org/apache/commons/csv/ExtendedBufferedReader.java
@@ -140,11 +140,11 @@ private int getEncodedCharLength(final int current) throws CharacterCodingExcept
if (Character.isHighSurrogate(cChar)) {
// Move on to the next char (low surrogate)
return 0;
- } else if (Character.isSurrogatePair(lChar, cChar)) {
+ }
+ if (Character.isSurrogatePair(lChar, cChar)) {
return encoder.encode(CharBuffer.wrap(new char[] { lChar, cChar })).limit();
- } else {
- throw new CharacterCodingException();
}
+ throw new CharacterCodingException();
}
/**
From cefed9b924a577ccfc2bbd26217250ef10b5c5bc Mon Sep 17 00:00:00 2001
From: Gary Gregory
Date: Fri, 6 Jun 2025 09:24:13 -0400
Subject: [PATCH 013/245] Use final
---
src/test/java/org/apache/commons/csv/issues/JiraCsv167Test.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/test/java/org/apache/commons/csv/issues/JiraCsv167Test.java b/src/test/java/org/apache/commons/csv/issues/JiraCsv167Test.java
index b7e3bae85..5caeecd6d 100644
--- a/src/test/java/org/apache/commons/csv/issues/JiraCsv167Test.java
+++ b/src/test/java/org/apache/commons/csv/issues/JiraCsv167Test.java
@@ -77,7 +77,7 @@ public void testParse() throws IOException {
int comments = 0;
int records = 0;
try (Reader reader = getTestReader(); CSVParser parser = format.parse(reader)) {
- for (CSVRecord csvRecord : parser) {
+ for (final CSVRecord csvRecord : parser) {
records++;
if (csvRecord.hasComment()) {
comments++;
From 08e842c8b6c5860b47a6c4efdce8e1e79d430035 Mon Sep 17 00:00:00 2001
From: Gary Gregory
Date: Fri, 6 Jun 2025 09:28:44 -0400
Subject: [PATCH 014/245] Run CI on Linux and macOS
---
.github/workflows/maven.yml | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)
diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml
index 4b4bf2e01..630852b56 100644
--- a/.github/workflows/maven.yml
+++ b/.github/workflows/maven.yml
@@ -23,15 +23,19 @@ permissions:
jobs:
build:
- runs-on: ubuntu-latest
+ runs-on: ${{ matrix.os }}
continue-on-error: ${{ matrix.experimental }}
strategy:
+ fail-fast: false
matrix:
+ os: [ubuntu-latest, macos-13]
java: [ 8, 11, 17, 21, 24 ]
experimental: [false]
+ # Keep the same parameter order as the matrix above
include:
- - java: 25-ea
- experimental: true
+ - os: ubuntu-latest
+ java: 25-ea
+ experimental: true
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # 4.2.2
From 32bc94743541234e70f7287a5a3c450d796d9d0b Mon Sep 17 00:00:00 2001
From: Gary Gregory
Date: Fri, 6 Jun 2025 09:35:03 -0400
Subject: [PATCH 015/245] Add @SuppressWarnings and comments
Format
---
src/main/java/org/apache/commons/csv/CSVParser.java | 6 +++---
.../java/org/apache/commons/csv/JiraCsv196Test.java | 12 ++++++++----
2 files changed, 11 insertions(+), 7 deletions(-)
diff --git a/src/main/java/org/apache/commons/csv/CSVParser.java b/src/main/java/org/apache/commons/csv/CSVParser.java
index 4d74bc96f..9b96f7c7f 100644
--- a/src/main/java/org/apache/commons/csv/CSVParser.java
+++ b/src/main/java/org/apache/commons/csv/CSVParser.java
@@ -552,9 +552,9 @@ public CSVParser(final Reader reader, final CSVFormat format, final long charact
* If there is a problem reading the header or skipping the first record.
* @throws CSVException Thrown on invalid CSV input data.
*/
- private CSVParser(final Reader reader, final CSVFormat format, final long characterOffset, final long recordNumber,
- final Charset charset, final boolean trackBytes)
- throws IOException {
+ @SuppressWarnings("resource") // reader is managed by lexer.
+ private CSVParser(final Reader reader, final CSVFormat format, final long characterOffset, final long recordNumber, final Charset charset,
+ final boolean trackBytes) throws IOException {
Objects.requireNonNull(reader, "reader");
Objects.requireNonNull(format, "format");
this.format = format.copy();
diff --git a/src/test/java/org/apache/commons/csv/JiraCsv196Test.java b/src/test/java/org/apache/commons/csv/JiraCsv196Test.java
index 3b6c74011..90261f2bd 100644
--- a/src/test/java/org/apache/commons/csv/JiraCsv196Test.java
+++ b/src/test/java/org/apache/commons/csv/JiraCsv196Test.java
@@ -38,11 +38,13 @@ private Reader getTestInput(final String path) {
public void testParseFourBytes() throws IOException {
final CSVFormat format = CSVFormat.Builder.create().setDelimiter(',').setQuote('\'').get();
// @formatter:off
- try (CSVParser parser = new CSVParser.Builder()
+ try (@SuppressWarnings("resource") // parser closes the reader.
+ CSVParser parser = new CSVParser.Builder()
.setFormat(format)
.setReader(getTestInput("org/apache/commons/csv/CSV-196/emoji.csv"))
.setCharset(StandardCharsets.UTF_8)
- .setTrackBytes(true).get()) {
+ .setTrackBytes(true)
+ .get()) {
// @formatter:on
final long[] charByteKey = { 0, 84, 701, 1318, 1935 };
int idx = 0;
@@ -56,11 +58,13 @@ public void testParseFourBytes() throws IOException {
public void testParseThreeBytes() throws IOException {
final CSVFormat format = CSVFormat.Builder.create().setDelimiter(',').setQuote('\'').get();
// @formatter:off
- try (CSVParser parser = new CSVParser.Builder()
+ try (@SuppressWarnings("resource") // parser closes the reader.
+ CSVParser parser = new CSVParser.Builder()
.setFormat(format)
.setReader(getTestInput("org/apache/commons/csv/CSV-196/japanese.csv"))
.setCharset(StandardCharsets.UTF_8)
- .setTrackBytes(true).get()) {
+ .setTrackBytes(true)
+ .get()) {
// @formatter:on
final long[] charByteKey = { 0, 89, 242, 395 };
int idx = 0;
From cff3260114fa419a185191c4440df4db102d993e Mon Sep 17 00:00:00 2001
From: Gary Gregory
Date: Fri, 6 Jun 2025 09:40:09 -0400
Subject: [PATCH 016/245] Better assertion failure message
---
src/test/java/org/apache/commons/csv/JiraCsv196Test.java | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/test/java/org/apache/commons/csv/JiraCsv196Test.java b/src/test/java/org/apache/commons/csv/JiraCsv196Test.java
index 90261f2bd..ef94efe0f 100644
--- a/src/test/java/org/apache/commons/csv/JiraCsv196Test.java
+++ b/src/test/java/org/apache/commons/csv/JiraCsv196Test.java
@@ -49,7 +49,7 @@ public void testParseFourBytes() throws IOException {
final long[] charByteKey = { 0, 84, 701, 1318, 1935 };
int idx = 0;
for (final CSVRecord record : parser) {
- assertEquals(charByteKey[idx++], record.getBytePosition(), "index " + idx);
+ assertEquals(charByteKey[idx++], record.getBytePosition(), "At index " + idx);
}
}
}
@@ -69,7 +69,7 @@ public void testParseThreeBytes() throws IOException {
final long[] charByteKey = { 0, 89, 242, 395 };
int idx = 0;
for (final CSVRecord record : parser) {
- assertEquals(charByteKey[idx++], record.getBytePosition(), "index " + idx);
+ assertEquals(charByteKey[idx++], record.getBytePosition(), "At index " + idx);
}
}
}
From f97c172162256366058f23b8e13a1ccb3b129d82 Mon Sep 17 00:00:00 2001
From: "Gary D. Gregory"
Date: Sat, 7 Jun 2025 14:42:56 -0400
Subject: [PATCH 017/245] Use JUnit 5 convention for test method visibility
---
.../commons/csv/CSVDuplicateHeaderTest.java | 4 +-
.../apache/commons/csv/CSVFileParserTest.java | 4 +-
.../commons/csv/CSVFormatPredefinedTest.java | 20 +-
.../org/apache/commons/csv/CSVFormatTest.java | 220 ++++++++--------
.../org/apache/commons/csv/CSVParserTest.java | 248 +++++++++---------
.../apache/commons/csv/CSVPrinterTest.java | 244 ++++++++---------
.../org/apache/commons/csv/CSVRecordTest.java | 62 ++---
.../csv/ExtendedBufferedReaderTest.java | 12 +-
.../apache/commons/csv/JiraCsv196Test.java | 4 +-
.../org/apache/commons/csv/LexerTest.java | 66 ++---
.../org/apache/commons/csv/TokenTest.java | 2 +-
.../org/apache/commons/csv/UserGuideTest.java | 4 +-
.../commons/csv/issues/JiraCsv148Test.java | 4 +-
.../commons/csv/issues/JiraCsv149Test.java | 4 +-
.../commons/csv/issues/JiraCsv150Test.java | 6 +-
.../commons/csv/issues/JiraCsv154Test.java | 4 +-
.../commons/csv/issues/JiraCsv167Test.java | 2 +-
.../commons/csv/issues/JiraCsv198Test.java | 2 +-
.../commons/csv/issues/JiraCsv203Test.java | 14 +-
.../commons/csv/issues/JiraCsv206Test.java | 2 +-
.../commons/csv/issues/JiraCsv211Test.java | 2 +-
.../commons/csv/issues/JiraCsv213Test.java | 2 +-
.../commons/csv/issues/JiraCsv247Test.java | 4 +-
.../commons/csv/issues/JiraCsv248Test.java | 2 +-
.../commons/csv/issues/JiraCsv249Test.java | 2 +-
.../commons/csv/issues/JiraCsv253Test.java | 2 +-
.../commons/csv/issues/JiraCsv263Test.java | 2 +-
.../commons/csv/issues/JiraCsv264Test.java | 6 +-
.../commons/csv/issues/JiraCsv265Test.java | 4 +-
.../commons/csv/issues/JiraCsv271Test.java | 4 +-
.../commons/csv/issues/JiraCsv288Test.java | 24 +-
.../commons/csv/issues/JiraCsv290Test.java | 6 +-
.../commons/csv/issues/JiraCsv294Test.java | 8 +-
.../commons/csv/issues/JiraCsv93Test.java | 6 +-
.../commons/csv/perf/PerformanceTest.java | 4 +-
35 files changed, 503 insertions(+), 503 deletions(-)
diff --git a/src/test/java/org/apache/commons/csv/CSVDuplicateHeaderTest.java b/src/test/java/org/apache/commons/csv/CSVDuplicateHeaderTest.java
index 124e9efce..c5705e28e 100644
--- a/src/test/java/org/apache/commons/csv/CSVDuplicateHeaderTest.java
+++ b/src/test/java/org/apache/commons/csv/CSVDuplicateHeaderTest.java
@@ -272,7 +272,7 @@ static Stream duplicateHeaderData() {
*/
@ParameterizedTest
@MethodSource(value = {"duplicateHeaderAllowsMissingColumnsNamesData"})
- public void testCSVFormat(final DuplicateHeaderMode duplicateHeaderMode,
+ void testCSVFormat(final DuplicateHeaderMode duplicateHeaderMode,
final boolean allowMissingColumnNames,
final boolean ignoreHeaderCase,
final String[] headers,
@@ -305,7 +305,7 @@ public void testCSVFormat(final DuplicateHeaderMode duplicateHeaderMode,
*/
@ParameterizedTest
@MethodSource(value = {"duplicateHeaderData"})
- public void testCSVParser(final DuplicateHeaderMode duplicateHeaderMode,
+ void testCSVParser(final DuplicateHeaderMode duplicateHeaderMode,
final boolean allowMissingColumnNames,
final boolean ignoreHeaderCase,
final String[] headers,
diff --git a/src/test/java/org/apache/commons/csv/CSVFileParserTest.java b/src/test/java/org/apache/commons/csv/CSVFileParserTest.java
index fd989779d..cb01de376 100644
--- a/src/test/java/org/apache/commons/csv/CSVFileParserTest.java
+++ b/src/test/java/org/apache/commons/csv/CSVFileParserTest.java
@@ -59,7 +59,7 @@ private String readTestData(final BufferedReader reader) throws IOException {
@ParameterizedTest
@MethodSource("generateData")
- public void testCSVFile(final File testFile) throws Exception {
+ void testCSVFile(final File testFile) throws Exception {
try (FileReader fr = new FileReader(testFile); BufferedReader testDataReader = new BufferedReader(fr)) {
String line = readTestData(testDataReader);
assertNotNull("file must contain config line", line);
@@ -104,7 +104,7 @@ public void testCSVFile(final File testFile) throws Exception {
@ParameterizedTest
@MethodSource("generateData")
- public void testCSVUrl(final File testFile) throws Exception {
+ void testCSVUrl(final File testFile) throws Exception {
try (FileReader fr = new FileReader(testFile); BufferedReader testData = new BufferedReader(fr)) {
String line = readTestData(testData);
assertNotNull("file must contain config line", line);
diff --git a/src/test/java/org/apache/commons/csv/CSVFormatPredefinedTest.java b/src/test/java/org/apache/commons/csv/CSVFormatPredefinedTest.java
index e907d4f17..8ff96e968 100644
--- a/src/test/java/org/apache/commons/csv/CSVFormatPredefinedTest.java
+++ b/src/test/java/org/apache/commons/csv/CSVFormatPredefinedTest.java
@@ -34,52 +34,52 @@ private void test(final CSVFormat format, final String enumName) {
}
@Test
- public void testDefault() {
+ void testDefault() {
test(CSVFormat.DEFAULT, "Default");
}
@Test
- public void testExcel() {
+ void testExcel() {
test(CSVFormat.EXCEL, "Excel");
}
@Test
- public void testMongoDbCsv() {
+ void testMongoDbCsv() {
test(CSVFormat.MONGODB_CSV, "MongoDBCsv");
}
@Test
- public void testMongoDbTsv() {
+ void testMongoDbTsv() {
test(CSVFormat.MONGODB_TSV, "MongoDBTsv");
}
@Test
- public void testMySQL() {
+ void testMySQL() {
test(CSVFormat.MYSQL, "MySQL");
}
@Test
- public void testOracle() {
+ void testOracle() {
test(CSVFormat.ORACLE, "Oracle");
}
@Test
- public void testPostgreSqlCsv() {
+ void testPostgreSqlCsv() {
test(CSVFormat.POSTGRESQL_CSV, "PostgreSQLCsv");
}
@Test
- public void testPostgreSqlText() {
+ void testPostgreSqlText() {
test(CSVFormat.POSTGRESQL_TEXT, "PostgreSQLText");
}
@Test
- public void testRFC4180() {
+ void testRFC4180() {
test(CSVFormat.RFC4180, "RFC4180");
}
@Test
- public void testTDF() {
+ void testTDF() {
test(CSVFormat.TDF, "TDF");
}
}
diff --git a/src/test/java/org/apache/commons/csv/CSVFormatTest.java b/src/test/java/org/apache/commons/csv/CSVFormatTest.java
index 0c7e763e5..31ad476e7 100644
--- a/src/test/java/org/apache/commons/csv/CSVFormatTest.java
+++ b/src/test/java/org/apache/commons/csv/CSVFormatTest.java
@@ -83,65 +83,65 @@ private void assertNotEquals(final String name, final String type, final Object
}
@Test
- public void testBuildVsGet() {
+ void testBuildVsGet() {
final Builder builder = CSVFormat.DEFAULT.builder();
assertNotSame(builder.get(), builder.build());
}
@Test
- public void testDelimiterCharLineBreakCrThrowsException1() {
+ void testDelimiterCharLineBreakCrThrowsException1() {
assertThrows(IllegalArgumentException.class, () -> CSVFormat.DEFAULT.builder().setDelimiter(Constants.CR).get());
}
@Test
- public void testDelimiterCharLineBreakLfThrowsException1() {
+ void testDelimiterCharLineBreakLfThrowsException1() {
assertThrows(IllegalArgumentException.class, () -> CSVFormat.DEFAULT.builder().setDelimiter(Constants.LF).get());
}
@Test
- public void testDelimiterEmptyStringThrowsException1() {
+ void testDelimiterEmptyStringThrowsException1() {
assertThrows(IllegalArgumentException.class, () -> CSVFormat.DEFAULT.builder().setDelimiter("").get());
}
@SuppressWarnings("deprecation")
@Test
- public void testDelimiterSameAsCommentStartThrowsException_Deprecated() {
+ void testDelimiterSameAsCommentStartThrowsException_Deprecated() {
assertThrows(IllegalArgumentException.class, () -> CSVFormat.DEFAULT.withDelimiter('!').withCommentMarker('!'));
}
@Test
- public void testDelimiterSameAsCommentStartThrowsException1() {
+ void testDelimiterSameAsCommentStartThrowsException1() {
assertThrows(IllegalArgumentException.class, () -> CSVFormat.DEFAULT.builder().setDelimiter('!').setCommentMarker('!').get());
}
@SuppressWarnings("deprecation")
@Test
- public void testDelimiterSameAsEscapeThrowsException_Deprecated() {
+ void testDelimiterSameAsEscapeThrowsException_Deprecated() {
assertThrows(IllegalArgumentException.class, () -> CSVFormat.DEFAULT.withDelimiter('!').withEscape('!'));
}
@Test
- public void testDelimiterSameAsEscapeThrowsException1() {
+ void testDelimiterSameAsEscapeThrowsException1() {
assertThrows(IllegalArgumentException.class, () -> CSVFormat.DEFAULT.builder().setDelimiter('!').setEscape('!').get());
}
@Test
- public void testDelimiterSameAsRecordSeparatorThrowsException() {
+ void testDelimiterSameAsRecordSeparatorThrowsException() {
assertThrows(IllegalArgumentException.class, () -> CSVFormat.newFormat(CR));
}
@Test
- public void testDelimiterStringLineBreakCrThrowsException1() {
+ void testDelimiterStringLineBreakCrThrowsException1() {
assertThrows(IllegalArgumentException.class, () -> CSVFormat.DEFAULT.builder().setDelimiter(String.valueOf(Constants.CR)).get());
}
@Test
- public void testDelimiterStringLineBreakLfThrowsException1() {
+ void testDelimiterStringLineBreakLfThrowsException1() {
assertThrows(IllegalArgumentException.class, () -> CSVFormat.DEFAULT.builder().setDelimiter(String.valueOf(Constants.LF)).get());
}
@Test
- public void testDuplicateHeaderElements() {
+ void testDuplicateHeaderElements() {
final String[] header = { "A", "A" };
final CSVFormat format = CSVFormat.DEFAULT.builder().setHeader(header).get();
assertEquals(2, format.getHeader().length);
@@ -150,7 +150,7 @@ public void testDuplicateHeaderElements() {
@SuppressWarnings("deprecation")
@Test
- public void testDuplicateHeaderElements_Deprecated() {
+ void testDuplicateHeaderElements_Deprecated() {
final String[] header = { "A", "A" };
final CSVFormat format = CSVFormat.DEFAULT.withHeader(header);
assertEquals(2, format.getHeader().length);
@@ -158,44 +158,44 @@ public void testDuplicateHeaderElements_Deprecated() {
}
@Test
- public void testDuplicateHeaderElementsFalse() {
+ void testDuplicateHeaderElementsFalse() {
assertThrows(IllegalArgumentException.class, () -> CSVFormat.DEFAULT.builder().setAllowDuplicateHeaderNames(false).setHeader("A", "A").get());
}
@SuppressWarnings("deprecation")
@Test
- public void testDuplicateHeaderElementsFalse_Deprecated() {
+ void testDuplicateHeaderElementsFalse_Deprecated() {
assertThrows(IllegalArgumentException.class, () -> CSVFormat.DEFAULT.withAllowDuplicateHeaderNames(false).withHeader("A", "A"));
}
@Test
- public void testDuplicateHeaderElementsTrue() {
+ void testDuplicateHeaderElementsTrue() {
CSVFormat.DEFAULT.builder().setAllowDuplicateHeaderNames(true).setHeader("A", "A").get();
}
@SuppressWarnings("deprecation")
@Test
- public void testDuplicateHeaderElementsTrue_Deprecated() {
+ void testDuplicateHeaderElementsTrue_Deprecated() {
CSVFormat.DEFAULT.withAllowDuplicateHeaderNames(true).withHeader("A", "A");
}
@Test
- public void testDuplicateHeaderElementsTrueContainsEmpty1() {
+ void testDuplicateHeaderElementsTrueContainsEmpty1() {
CSVFormat.DEFAULT.builder().setAllowDuplicateHeaderNames(false).setHeader("A", "", "B", "").get();
}
@Test
- public void testDuplicateHeaderElementsTrueContainsEmpty2() {
+ void testDuplicateHeaderElementsTrueContainsEmpty2() {
CSVFormat.DEFAULT.builder().setDuplicateHeaderMode(DuplicateHeaderMode.ALLOW_EMPTY).setHeader("A", "", "B", "").get();
}
@Test
- public void testDuplicateHeaderElementsTrueContainsEmpty3() {
+ void testDuplicateHeaderElementsTrueContainsEmpty3() {
CSVFormat.DEFAULT.builder().setAllowDuplicateHeaderNames(false).setAllowMissingColumnNames(true).setHeader("A", "", "B", "").get();
}
@Test
- public void testEquals() {
+ void testEquals() {
final CSVFormat right = CSVFormat.DEFAULT;
final CSVFormat left = copy(right);
Assertions.assertNotEquals(null, right);
@@ -208,7 +208,7 @@ public void testEquals() {
}
@Test
- public void testEqualsCommentStart() {
+ void testEqualsCommentStart() {
final CSVFormat right = CSVFormat.newFormat('\'').builder().setQuote('"').setCommentMarker('#').setQuoteMode(QuoteMode.ALL).get();
final CSVFormat left = right.builder().setCommentMarker('!').get();
@@ -217,7 +217,7 @@ public void testEqualsCommentStart() {
@SuppressWarnings("deprecation")
@Test
- public void testEqualsCommentStart_Deprecated() {
+ void testEqualsCommentStart_Deprecated() {
final CSVFormat right = CSVFormat.newFormat('\'').withQuote('"').withCommentMarker('#').withQuoteMode(QuoteMode.ALL);
final CSVFormat left = right.withCommentMarker('!');
@@ -225,7 +225,7 @@ public void testEqualsCommentStart_Deprecated() {
}
@Test
- public void testEqualsDelimiter() {
+ void testEqualsDelimiter() {
final CSVFormat right = CSVFormat.newFormat('!');
final CSVFormat left = CSVFormat.newFormat('?');
@@ -233,7 +233,7 @@ public void testEqualsDelimiter() {
}
@Test
- public void testEqualsEscape() {
+ void testEqualsEscape() {
final CSVFormat right = CSVFormat.newFormat('\'').builder().setQuote('"').setCommentMarker('#').setEscape('+').setQuoteMode(QuoteMode.ALL).get();
final CSVFormat left = right.builder().setEscape('!').get();
@@ -242,7 +242,7 @@ public void testEqualsEscape() {
@SuppressWarnings("deprecation")
@Test
- public void testEqualsEscape_Deprecated() {
+ void testEqualsEscape_Deprecated() {
final CSVFormat right = CSVFormat.newFormat('\'').withQuote('"').withCommentMarker('#').withEscape('+').withQuoteMode(QuoteMode.ALL);
final CSVFormat left = right.withEscape('!');
@@ -250,7 +250,7 @@ public void testEqualsEscape_Deprecated() {
}
@Test
- public void testEqualsHash() throws Exception {
+ void testEqualsHash() throws Exception {
final Method[] methods = CSVFormat.class.getDeclaredMethods();
for (final Method method : methods) {
if (Modifier.isPublic(method.getModifiers())) {
@@ -322,7 +322,7 @@ public void testEqualsHash() throws Exception {
}
@Test
- public void testEqualsHeader() {
+ void testEqualsHeader() {
final CSVFormat right = CSVFormat.newFormat('\'').builder().setRecordSeparator(CR).setCommentMarker('#').setEscape('+').setHeader("One", "Two", "Three")
.setIgnoreEmptyLines(true).setIgnoreSurroundingSpaces(true).setQuote('"').setQuoteMode(QuoteMode.ALL).get();
final CSVFormat left = right.builder().setHeader("Three", "Two", "One").get();
@@ -332,7 +332,7 @@ public void testEqualsHeader() {
@SuppressWarnings("deprecation")
@Test
- public void testEqualsHeader_Deprecated() {
+ void testEqualsHeader_Deprecated() {
final CSVFormat right = CSVFormat.newFormat('\'').withRecordSeparator(CR).withCommentMarker('#').withEscape('+').withHeader("One", "Two", "Three")
.withIgnoreEmptyLines().withIgnoreSurroundingSpaces().withQuote('"').withQuoteMode(QuoteMode.ALL);
final CSVFormat left = right.withHeader("Three", "Two", "One");
@@ -341,7 +341,7 @@ public void testEqualsHeader_Deprecated() {
}
@Test
- public void testEqualsIgnoreEmptyLines() {
+ void testEqualsIgnoreEmptyLines() {
final CSVFormat right = CSVFormat.newFormat('\'').builder().setCommentMarker('#').setEscape('+').setIgnoreEmptyLines(true)
.setIgnoreSurroundingSpaces(true).setQuote('"').setQuoteMode(QuoteMode.ALL).get();
final CSVFormat left = right.builder().setIgnoreEmptyLines(false).get();
@@ -351,7 +351,7 @@ public void testEqualsIgnoreEmptyLines() {
@SuppressWarnings("deprecation")
@Test
- public void testEqualsIgnoreEmptyLines_Deprecated() {
+ void testEqualsIgnoreEmptyLines_Deprecated() {
final CSVFormat right = CSVFormat.newFormat('\'').withCommentMarker('#').withEscape('+').withIgnoreEmptyLines().withIgnoreSurroundingSpaces()
.withQuote('"').withQuoteMode(QuoteMode.ALL);
final CSVFormat left = right.withIgnoreEmptyLines(false);
@@ -360,7 +360,7 @@ public void testEqualsIgnoreEmptyLines_Deprecated() {
}
@Test
- public void testEqualsIgnoreSurroundingSpaces() {
+ void testEqualsIgnoreSurroundingSpaces() {
final CSVFormat right = CSVFormat.newFormat('\'').builder().setCommentMarker('#').setEscape('+').setIgnoreSurroundingSpaces(true).setQuote('"')
.setQuoteMode(QuoteMode.ALL).get();
final CSVFormat left = right.builder().setIgnoreSurroundingSpaces(false).get();
@@ -370,7 +370,7 @@ public void testEqualsIgnoreSurroundingSpaces() {
@SuppressWarnings("deprecation")
@Test
- public void testEqualsIgnoreSurroundingSpaces_Deprecated() {
+ void testEqualsIgnoreSurroundingSpaces_Deprecated() {
final CSVFormat right = CSVFormat.newFormat('\'').withCommentMarker('#').withEscape('+').withIgnoreSurroundingSpaces().withQuote('"')
.withQuoteMode(QuoteMode.ALL);
final CSVFormat left = right.withIgnoreSurroundingSpaces(false);
@@ -379,7 +379,7 @@ public void testEqualsIgnoreSurroundingSpaces_Deprecated() {
}
@Test
- public void testEqualsLeftNoQuoteRightQuote() {
+ void testEqualsLeftNoQuoteRightQuote() {
final CSVFormat left = CSVFormat.newFormat(',').builder().setQuote(null).get();
final CSVFormat right = left.builder().setQuote('#').get();
@@ -388,7 +388,7 @@ public void testEqualsLeftNoQuoteRightQuote() {
@SuppressWarnings("deprecation")
@Test
- public void testEqualsLeftNoQuoteRightQuote_Deprecated() {
+ void testEqualsLeftNoQuoteRightQuote_Deprecated() {
final CSVFormat left = CSVFormat.newFormat(',').withQuote(null);
final CSVFormat right = left.withQuote('#');
@@ -396,7 +396,7 @@ public void testEqualsLeftNoQuoteRightQuote_Deprecated() {
}
@Test
- public void testEqualsNoQuotes() {
+ void testEqualsNoQuotes() {
final CSVFormat left = CSVFormat.newFormat(',').builder().setQuote(null).get();
final CSVFormat right = left.builder().setQuote(null).get();
@@ -405,7 +405,7 @@ public void testEqualsNoQuotes() {
@SuppressWarnings("deprecation")
@Test
- public void testEqualsNoQuotes_Deprecated() {
+ void testEqualsNoQuotes_Deprecated() {
final CSVFormat left = CSVFormat.newFormat(',').withQuote(null);
final CSVFormat right = left.withQuote(null);
@@ -413,7 +413,7 @@ public void testEqualsNoQuotes_Deprecated() {
}
@Test
- public void testEqualsNullString() {
+ void testEqualsNullString() {
final CSVFormat right = CSVFormat.newFormat('\'').builder().setRecordSeparator(CR).setCommentMarker('#').setEscape('+').setIgnoreEmptyLines(true)
.setIgnoreSurroundingSpaces(true).setQuote('"').setQuoteMode(QuoteMode.ALL).setNullString("null").get();
final CSVFormat left = right.builder().setNullString("---").get();
@@ -423,7 +423,7 @@ public void testEqualsNullString() {
@SuppressWarnings("deprecation")
@Test
- public void testEqualsNullString_Deprecated() {
+ void testEqualsNullString_Deprecated() {
final CSVFormat right = CSVFormat.newFormat('\'').withRecordSeparator(CR).withCommentMarker('#').withEscape('+').withIgnoreEmptyLines()
.withIgnoreSurroundingSpaces().withQuote('"').withQuoteMode(QuoteMode.ALL).withNullString("null");
final CSVFormat left = right.withNullString("---");
@@ -432,7 +432,7 @@ public void testEqualsNullString_Deprecated() {
}
@Test
- public void testEqualsOne() {
+ void testEqualsOne() {
final CSVFormat csvFormatOne = CSVFormat.INFORMIX_UNLOAD;
final CSVFormat csvFormatTwo = CSVFormat.MYSQL;
@@ -562,7 +562,7 @@ public void testEqualsOne() {
}
@Test
- public void testEqualsQuoteChar() {
+ void testEqualsQuoteChar() {
final CSVFormat right = CSVFormat.newFormat('\'').builder().setQuote('"').get();
final CSVFormat left = right.builder().setQuote('!').get();
@@ -571,7 +571,7 @@ public void testEqualsQuoteChar() {
@SuppressWarnings("deprecation")
@Test
- public void testEqualsQuoteChar_Deprecated() {
+ void testEqualsQuoteChar_Deprecated() {
final CSVFormat right = CSVFormat.newFormat('\'').withQuote('"');
final CSVFormat left = right.withQuote('!');
@@ -579,7 +579,7 @@ public void testEqualsQuoteChar_Deprecated() {
}
@Test
- public void testEqualsQuotePolicy() {
+ void testEqualsQuotePolicy() {
final CSVFormat right = CSVFormat.newFormat('\'').builder().setQuote('"').setQuoteMode(QuoteMode.ALL).get();
final CSVFormat left = right.builder().setQuoteMode(QuoteMode.MINIMAL).get();
@@ -588,7 +588,7 @@ public void testEqualsQuotePolicy() {
@SuppressWarnings("deprecation")
@Test
- public void testEqualsQuotePolicy_Deprecated() {
+ void testEqualsQuotePolicy_Deprecated() {
final CSVFormat right = CSVFormat.newFormat('\'').withQuote('"').withQuoteMode(QuoteMode.ALL);
final CSVFormat left = right.withQuoteMode(QuoteMode.MINIMAL);
@@ -596,7 +596,7 @@ public void testEqualsQuotePolicy_Deprecated() {
}
@Test
- public void testEqualsRecordSeparator() {
+ void testEqualsRecordSeparator() {
final CSVFormat right = CSVFormat.newFormat('\'').builder().setRecordSeparator(CR).setCommentMarker('#').setEscape('+').setIgnoreEmptyLines(true)
.setIgnoreSurroundingSpaces(true).setQuote('"').setQuoteMode(QuoteMode.ALL).get();
final CSVFormat left = right.builder().setRecordSeparator(LF).get();
@@ -606,7 +606,7 @@ public void testEqualsRecordSeparator() {
@SuppressWarnings("deprecation")
@Test
- public void testEqualsRecordSeparator_Deprecated() {
+ void testEqualsRecordSeparator_Deprecated() {
final CSVFormat right = CSVFormat.newFormat('\'').withRecordSeparator(CR).withCommentMarker('#').withEscape('+').withIgnoreEmptyLines()
.withIgnoreSurroundingSpaces().withQuote('"').withQuoteMode(QuoteMode.ALL);
final CSVFormat left = right.withRecordSeparator(LF);
@@ -614,7 +614,7 @@ public void testEqualsRecordSeparator_Deprecated() {
assertNotEquals(right, left);
}
- public void testEqualsSkipHeaderRecord() {
+ void testEqualsSkipHeaderRecord() {
final CSVFormat right = CSVFormat.newFormat('\'').builder().setRecordSeparator(CR).setCommentMarker('#').setEscape('+').setIgnoreEmptyLines(true)
.setIgnoreSurroundingSpaces(true).setQuote('"').setQuoteMode(QuoteMode.ALL).setNullString("null").setSkipHeaderRecord(true).get();
final CSVFormat left = right.builder().setSkipHeaderRecord(false).get();
@@ -624,7 +624,7 @@ public void testEqualsSkipHeaderRecord() {
@SuppressWarnings("deprecation")
@Test
- public void testEqualsSkipHeaderRecord_Deprecated() {
+ void testEqualsSkipHeaderRecord_Deprecated() {
final CSVFormat right = CSVFormat.newFormat('\'').withRecordSeparator(CR).withCommentMarker('#').withEscape('+').withIgnoreEmptyLines()
.withIgnoreSurroundingSpaces().withQuote('"').withQuoteMode(QuoteMode.ALL).withNullString("null").withSkipHeaderRecord();
final CSVFormat left = right.withSkipHeaderRecord(false);
@@ -633,7 +633,7 @@ public void testEqualsSkipHeaderRecord_Deprecated() {
}
@Test
- public void testEqualsWithNull() {
+ void testEqualsWithNull() {
final CSVFormat csvFormat = CSVFormat.POSTGRESQL_TEXT;
@@ -696,18 +696,18 @@ public void testEqualsWithNull() {
}
@Test
- public void testEscapeSameAsCommentStartThrowsException() {
+ void testEscapeSameAsCommentStartThrowsException() {
assertThrows(IllegalArgumentException.class, () -> CSVFormat.DEFAULT.builder().setEscape('!').setCommentMarker('!').get());
}
@SuppressWarnings("deprecation")
@Test
- public void testEscapeSameAsCommentStartThrowsException_Deprecated() {
+ void testEscapeSameAsCommentStartThrowsException_Deprecated() {
assertThrows(IllegalArgumentException.class, () -> CSVFormat.DEFAULT.withEscape('!').withCommentMarker('!'));
}
@Test
- public void testEscapeSameAsCommentStartThrowsExceptionForWrapperType() {
+ void testEscapeSameAsCommentStartThrowsExceptionForWrapperType() {
// Cannot assume that callers won't use different Character objects
assertThrows(IllegalArgumentException.class,
() -> CSVFormat.DEFAULT.builder().setEscape(Character.valueOf('!')).setCommentMarker(Character.valueOf('!')).get());
@@ -715,13 +715,13 @@ public void testEscapeSameAsCommentStartThrowsExceptionForWrapperType() {
@SuppressWarnings("deprecation")
@Test
- public void testEscapeSameAsCommentStartThrowsExceptionForWrapperType_Deprecated() {
+ void testEscapeSameAsCommentStartThrowsExceptionForWrapperType_Deprecated() {
// Cannot assume that callers won't use different Character objects
assertThrows(IllegalArgumentException.class, () -> CSVFormat.DEFAULT.withEscape(Character.valueOf('!')).withCommentMarker(Character.valueOf('!')));
}
@Test
- public void testFormat() {
+ void testFormat() {
final CSVFormat format = CSVFormat.DEFAULT;
assertEquals("", format.format());
@@ -730,7 +730,7 @@ public void testFormat() {
}
@Test // I assume this to be a defect.
- public void testFormatThrowsNullPointerException() {
+ void testFormatThrowsNullPointerException() {
final CSVFormat csvFormat = CSVFormat.MYSQL;
@@ -739,7 +739,7 @@ public void testFormatThrowsNullPointerException() {
}
@Test
- public void testFormatToString() {
+ void testFormatToString() {
// @formatter:off
final CSVFormat format = CSVFormat.RFC4180
.withEscape('?')
@@ -759,7 +759,7 @@ public void testFormatToString() {
}
@Test
- public void testGetAllowDuplicateHeaderNames() {
+ void testGetAllowDuplicateHeaderNames() {
final Builder builder = CSVFormat.DEFAULT.builder();
assertTrue(builder.get().getAllowDuplicateHeaderNames());
assertTrue(builder.setDuplicateHeaderMode(DuplicateHeaderMode.ALLOW_ALL).get().getAllowDuplicateHeaderNames());
@@ -768,7 +768,7 @@ public void testGetAllowDuplicateHeaderNames() {
}
@Test
- public void testGetDuplicateHeaderMode() {
+ void testGetDuplicateHeaderMode() {
final Builder builder = CSVFormat.DEFAULT.builder();
assertEquals(DuplicateHeaderMode.ALLOW_ALL, builder.get().getDuplicateHeaderMode());
@@ -778,7 +778,7 @@ public void testGetDuplicateHeaderMode() {
}
@Test
- public void testGetHeader() {
+ void testGetHeader() {
final String[] header = { "one", "two", "three" };
final CSVFormat formatWithHeader = CSVFormat.DEFAULT.withHeader(header);
// getHeader() makes a copy of the header array.
@@ -791,7 +791,7 @@ public void testGetHeader() {
}
@Test
- public void testHashCodeAndWithIgnoreHeaderCase() {
+ void testHashCodeAndWithIgnoreHeaderCase() {
final CSVFormat csvFormat = CSVFormat.INFORMIX_UNLOAD_CSV;
final CSVFormat csvFormatTwo = csvFormat.withIgnoreHeaderCase();
@@ -809,18 +809,18 @@ public void testHashCodeAndWithIgnoreHeaderCase() {
}
@Test
- public void testJiraCsv236() {
+ void testJiraCsv236() {
CSVFormat.DEFAULT.builder().setAllowDuplicateHeaderNames(true).setHeader("CC", "VV", "VV").get();
}
@SuppressWarnings("deprecation")
@Test
- public void testJiraCsv236__Deprecated() {
+ void testJiraCsv236__Deprecated() {
CSVFormat.DEFAULT.withAllowDuplicateHeaderNames().withHeader("CC", "VV", "VV");
}
@Test
- public void testNewFormat() {
+ void testNewFormat() {
final CSVFormat csvFormat = CSVFormat.newFormat('X');
@@ -881,7 +881,7 @@ public void testNewFormat() {
}
@Test
- public void testNullRecordSeparatorCsv106() {
+ void testNullRecordSeparatorCsv106() {
final CSVFormat format = CSVFormat.newFormat(';').builder().setSkipHeaderRecord(true).setHeader("H1", "H2").get();
final String formatStr = format.format("A", "B");
assertNotNull(formatStr);
@@ -890,7 +890,7 @@ public void testNullRecordSeparatorCsv106() {
@SuppressWarnings("deprecation")
@Test
- public void testNullRecordSeparatorCsv106__Deprecated() {
+ void testNullRecordSeparatorCsv106__Deprecated() {
final CSVFormat format = CSVFormat.newFormat(';').withSkipHeaderRecord().withHeader("H1", "H2");
final String formatStr = format.format("A", "B");
assertNotNull(formatStr);
@@ -898,7 +898,7 @@ public void testNullRecordSeparatorCsv106__Deprecated() {
}
@Test
- public void testPrintRecord() throws IOException {
+ void testPrintRecord() throws IOException {
final Appendable out = new StringBuilder();
final CSVFormat format = CSVFormat.RFC4180;
format.printRecord(out, "a", "b", "c");
@@ -906,7 +906,7 @@ public void testPrintRecord() throws IOException {
}
@Test
- public void testPrintRecordEmpty() throws IOException {
+ void testPrintRecordEmpty() throws IOException {
final Appendable out = new StringBuilder();
final CSVFormat format = CSVFormat.RFC4180;
format.printRecord(out);
@@ -914,7 +914,7 @@ public void testPrintRecordEmpty() throws IOException {
}
@Test
- public void testPrintWithEscapesEndWithCRLF() throws IOException {
+ void testPrintWithEscapesEndWithCRLF() throws IOException {
final Reader in = new StringReader("x,y,x\r\na,?b,c\r\n");
final Appendable out = new StringBuilder();
final CSVFormat format = CSVFormat.RFC4180.withEscape('?').withDelimiter(',').withQuote(null).withRecordSeparator(CRLF);
@@ -923,7 +923,7 @@ public void testPrintWithEscapesEndWithCRLF() throws IOException {
}
@Test
- public void testPrintWithEscapesEndWithoutCRLF() throws IOException {
+ void testPrintWithEscapesEndWithoutCRLF() throws IOException {
final Reader in = new StringReader("x,y,x");
final Appendable out = new StringBuilder();
final CSVFormat format = CSVFormat.RFC4180.withEscape('?').withDelimiter(',').withQuote(null).withRecordSeparator(CRLF);
@@ -932,7 +932,7 @@ public void testPrintWithEscapesEndWithoutCRLF() throws IOException {
}
@Test
- public void testPrintWithoutQuotes() throws IOException {
+ void testPrintWithoutQuotes() throws IOException {
final Reader in = new StringReader("");
final Appendable out = new StringBuilder();
final CSVFormat format = CSVFormat.RFC4180.withDelimiter(',').withQuote('"').withEscape('?').withQuoteMode(QuoteMode.NON_NUMERIC);
@@ -941,7 +941,7 @@ public void testPrintWithoutQuotes() throws IOException {
}
@Test
- public void testPrintWithQuoteModeIsNONE() throws IOException {
+ void testPrintWithQuoteModeIsNONE() throws IOException {
final Reader in = new StringReader("a,b,c");
final Appendable out = new StringBuilder();
final CSVFormat format = CSVFormat.RFC4180.withDelimiter(',').withQuote('"').withEscape('?').withQuoteMode(QuoteMode.NONE);
@@ -950,7 +950,7 @@ public void testPrintWithQuoteModeIsNONE() throws IOException {
}
@Test
- public void testPrintWithQuotes() throws IOException {
+ void testPrintWithQuotes() throws IOException {
final Reader in = new StringReader("\"a,b,c\r\nx,y,z");
final Appendable out = new StringBuilder();
final CSVFormat format = CSVFormat.RFC4180.withDelimiter(',').withQuote('"').withEscape('?').withQuoteMode(QuoteMode.NON_NUMERIC);
@@ -959,42 +959,42 @@ public void testPrintWithQuotes() throws IOException {
}
@Test
- public void testQuoteCharSameAsCommentStartThrowsException() {
+ void testQuoteCharSameAsCommentStartThrowsException() {
assertThrows(IllegalArgumentException.class, () -> CSVFormat.DEFAULT.builder().setQuote('!').setCommentMarker('!').get());
}
@SuppressWarnings("deprecation")
@Test
- public void testQuoteCharSameAsCommentStartThrowsException_Deprecated() {
+ void testQuoteCharSameAsCommentStartThrowsException_Deprecated() {
assertThrows(IllegalArgumentException.class, () -> CSVFormat.DEFAULT.withQuote('!').withCommentMarker('!'));
}
@Test
- public void testQuoteCharSameAsCommentStartThrowsExceptionForWrapperType() {
+ void testQuoteCharSameAsCommentStartThrowsExceptionForWrapperType() {
// Cannot assume that callers won't use different Character objects
assertThrows(IllegalArgumentException.class, () -> CSVFormat.DEFAULT.builder().setQuote(Character.valueOf('!')).setCommentMarker('!').get());
}
@SuppressWarnings("deprecation")
@Test
- public void testQuoteCharSameAsCommentStartThrowsExceptionForWrapperType_Deprecated() {
+ void testQuoteCharSameAsCommentStartThrowsExceptionForWrapperType_Deprecated() {
// Cannot assume that callers won't use different Character objects
assertThrows(IllegalArgumentException.class, () -> CSVFormat.DEFAULT.withQuote(Character.valueOf('!')).withCommentMarker('!'));
}
@Test
- public void testQuoteCharSameAsDelimiterThrowsException() {
+ void testQuoteCharSameAsDelimiterThrowsException() {
assertThrows(IllegalArgumentException.class, () -> CSVFormat.DEFAULT.builder().setQuote('!').setDelimiter('!').get());
}
@SuppressWarnings("deprecation")
@Test
- public void testQuoteCharSameAsDelimiterThrowsException_Deprecated() {
+ void testQuoteCharSameAsDelimiterThrowsException_Deprecated() {
assertThrows(IllegalArgumentException.class, () -> CSVFormat.DEFAULT.withQuote('!').withDelimiter('!'));
}
@Test
- public void testQuoteModeNoneShouldReturnMeaningfulExceptionMessage() {
+ void testQuoteModeNoneShouldReturnMeaningfulExceptionMessage() {
final Exception exception = assertThrows(IllegalArgumentException.class, () ->
// @formatter:off
CSVFormat.DEFAULT.builder()
@@ -1009,18 +1009,18 @@ public void testQuoteModeNoneShouldReturnMeaningfulExceptionMessage() {
}
@Test
- public void testQuotePolicyNoneWithoutEscapeThrowsException() {
+ void testQuotePolicyNoneWithoutEscapeThrowsException() {
assertThrows(IllegalArgumentException.class, () -> CSVFormat.newFormat('!').builder().setQuoteMode(QuoteMode.NONE).get());
}
@SuppressWarnings("deprecation")
@Test
- public void testQuotePolicyNoneWithoutEscapeThrowsException_Deprecated() {
+ void testQuotePolicyNoneWithoutEscapeThrowsException_Deprecated() {
assertThrows(IllegalArgumentException.class, () -> CSVFormat.newFormat('!').withQuoteMode(QuoteMode.NONE));
}
@Test
- public void testRFC4180() {
+ void testRFC4180() {
assertNull(RFC4180.getCommentMarker());
assertEquals(',', RFC4180.getDelimiter());
assertNull(RFC4180.getEscapeCharacter());
@@ -1032,7 +1032,7 @@ public void testRFC4180() {
@SuppressWarnings("boxing") // no need to worry about boxing here
@Test
- public void testSerialization() throws Exception {
+ void testSerialization() throws Exception {
final ByteArrayOutputStream out = new ByteArrayOutputStream();
try (ObjectOutputStream oos = new ObjectOutputStream(out)) {
@@ -1054,7 +1054,7 @@ public void testSerialization() throws Exception {
}
@Test
- public void testToString() {
+ void testToString() {
final String string = CSVFormat.INFORMIX_UNLOAD.toString();
@@ -1063,7 +1063,7 @@ public void testToString() {
}
@Test
- public void testToStringAndWithCommentMarkerTakingCharacter() {
+ void testToStringAndWithCommentMarkerTakingCharacter() {
final CSVFormat.Predefined csvFormatPredefined = CSVFormat.Predefined.Default;
final CSVFormat csvFormat = csvFormatPredefined.getFormat();
@@ -1224,7 +1224,7 @@ public void testToStringAndWithCommentMarkerTakingCharacter() {
}
@Test
- public void testTrim() throws IOException {
+ void testTrim() throws IOException {
final CSVFormat formatWithTrim = CSVFormat.DEFAULT.withDelimiter(',').withTrim().withQuote(null).withRecordSeparator(CRLF);
CharSequence in = "a,b,c";
@@ -1249,29 +1249,29 @@ public void testTrim() throws IOException {
}
@Test
- public void testWithCommentStart() {
+ void testWithCommentStart() {
final CSVFormat formatWithCommentStart = CSVFormat.DEFAULT.withCommentMarker('#');
assertEquals(Character.valueOf('#'), formatWithCommentStart.getCommentMarker());
}
@Test
- public void testWithCommentStartCRThrowsException() {
+ void testWithCommentStartCRThrowsException() {
assertThrows(IllegalArgumentException.class, () -> CSVFormat.DEFAULT.withCommentMarker(CR));
}
@Test
- public void testWithDelimiter() {
+ void testWithDelimiter() {
final CSVFormat formatWithDelimiter = CSVFormat.DEFAULT.withDelimiter('!');
assertEquals('!', formatWithDelimiter.getDelimiter());
}
@Test
- public void testWithDelimiterLFThrowsException() {
+ void testWithDelimiterLFThrowsException() {
assertThrows(IllegalArgumentException.class, () -> CSVFormat.DEFAULT.withDelimiter(LF));
}
@Test
- public void testWithEmptyDuplicates() {
+ void testWithEmptyDuplicates() {
final CSVFormat formatWithEmptyDuplicates = CSVFormat.DEFAULT.builder().setDuplicateHeaderMode(DuplicateHeaderMode.ALLOW_EMPTY).get();
assertEquals(DuplicateHeaderMode.ALLOW_EMPTY, formatWithEmptyDuplicates.getDuplicateHeaderMode());
@@ -1279,31 +1279,31 @@ public void testWithEmptyDuplicates() {
}
@Test
- public void testWithEmptyEnum() {
+ void testWithEmptyEnum() {
final CSVFormat formatWithHeader = CSVFormat.DEFAULT.withHeader(EmptyEnum.class);
assertEquals(0, formatWithHeader.getHeader().length);
}
@Test
- public void testWithEscape() {
+ void testWithEscape() {
final CSVFormat formatWithEscape = CSVFormat.DEFAULT.withEscape('&');
assertEquals(Character.valueOf('&'), formatWithEscape.getEscapeCharacter());
}
@Test
- public void testWithEscapeCRThrowsExceptions() {
+ void testWithEscapeCRThrowsExceptions() {
assertThrows(IllegalArgumentException.class, () -> CSVFormat.DEFAULT.withEscape(CR));
}
@Test
- public void testWithFirstRecordAsHeader() {
+ void testWithFirstRecordAsHeader() {
final CSVFormat formatWithFirstRecordAsHeader = CSVFormat.DEFAULT.withFirstRecordAsHeader();
assertTrue(formatWithFirstRecordAsHeader.getSkipHeaderRecord());
assertEquals(0, formatWithFirstRecordAsHeader.getHeader().length);
}
@Test
- public void testWithHeader() {
+ void testWithHeader() {
final String[] header = { "one", "two", "three" };
// withHeader() makes a copy of the header array.
final CSVFormat formatWithHeader = CSVFormat.DEFAULT.withHeader(header);
@@ -1312,7 +1312,7 @@ public void testWithHeader() {
}
@Test
- public void testWithHeaderComments() {
+ void testWithHeaderComments() {
final CSVFormat csvFormat = CSVFormat.DEFAULT;
@@ -1473,80 +1473,80 @@ public void testWithHeaderComments() {
}
@Test
- public void testWithHeaderEnum() {
+ void testWithHeaderEnum() {
final CSVFormat formatWithHeader = CSVFormat.DEFAULT.withHeader(Header.class);
assertArrayEquals(new String[] { "Name", "Email", "Phone" }, formatWithHeader.getHeader());
}
@Test
- public void testWithHeaderEnumNull() {
+ void testWithHeaderEnumNull() {
final CSVFormat format = CSVFormat.DEFAULT;
final Class>> simpleName = null;
format.withHeader(simpleName);
}
@Test
- public void testWithHeaderResultSetNull() throws SQLException {
+ void testWithHeaderResultSetNull() throws SQLException {
final CSVFormat format = CSVFormat.DEFAULT;
final ResultSet resultSet = null;
format.withHeader(resultSet);
}
@Test
- public void testWithIgnoreEmptyLines() {
+ void testWithIgnoreEmptyLines() {
assertFalse(CSVFormat.DEFAULT.withIgnoreEmptyLines(false).getIgnoreEmptyLines());
assertTrue(CSVFormat.DEFAULT.withIgnoreEmptyLines().getIgnoreEmptyLines());
}
@Test
- public void testWithIgnoreSurround() {
+ void testWithIgnoreSurround() {
assertFalse(CSVFormat.DEFAULT.withIgnoreSurroundingSpaces(false).getIgnoreSurroundingSpaces());
assertTrue(CSVFormat.DEFAULT.withIgnoreSurroundingSpaces().getIgnoreSurroundingSpaces());
}
@Test
- public void testWithNullString() {
+ void testWithNullString() {
final CSVFormat formatWithNullString = CSVFormat.DEFAULT.withNullString("null");
assertEquals("null", formatWithNullString.getNullString());
}
@Test
- public void testWithQuoteChar() {
+ void testWithQuoteChar() {
final CSVFormat formatWithQuoteChar = CSVFormat.DEFAULT.withQuote('"');
assertEquals(Character.valueOf('"'), formatWithQuoteChar.getQuoteCharacter());
}
@Test
- public void testWithQuoteLFThrowsException() {
+ void testWithQuoteLFThrowsException() {
assertThrows(IllegalArgumentException.class, () -> CSVFormat.DEFAULT.withQuote(LF));
}
@Test
- public void testWithQuotePolicy() {
+ void testWithQuotePolicy() {
final CSVFormat formatWithQuotePolicy = CSVFormat.DEFAULT.withQuoteMode(QuoteMode.ALL);
assertEquals(QuoteMode.ALL, formatWithQuotePolicy.getQuoteMode());
}
@Test
- public void testWithRecordSeparatorCR() {
+ void testWithRecordSeparatorCR() {
final CSVFormat formatWithRecordSeparator = CSVFormat.DEFAULT.withRecordSeparator(CR);
assertEquals(String.valueOf(CR), formatWithRecordSeparator.getRecordSeparator());
}
@Test
- public void testWithRecordSeparatorCRLF() {
+ void testWithRecordSeparatorCRLF() {
final CSVFormat formatWithRecordSeparator = CSVFormat.DEFAULT.withRecordSeparator(CRLF);
assertEquals(CRLF, formatWithRecordSeparator.getRecordSeparator());
}
@Test
- public void testWithRecordSeparatorLF() {
+ void testWithRecordSeparatorLF() {
final CSVFormat formatWithRecordSeparator = CSVFormat.DEFAULT.withRecordSeparator(LF);
assertEquals(String.valueOf(LF), formatWithRecordSeparator.getRecordSeparator());
}
@Test
- public void testWithSystemRecordSeparator() {
+ void testWithSystemRecordSeparator() {
final CSVFormat formatWithRecordSeparator = CSVFormat.DEFAULT.withSystemRecordSeparator();
assertEquals(System.lineSeparator(), formatWithRecordSeparator.getRecordSeparator());
}
diff --git a/src/test/java/org/apache/commons/csv/CSVParserTest.java b/src/test/java/org/apache/commons/csv/CSVParserTest.java
index 20ab9b658..8304a568c 100644
--- a/src/test/java/org/apache/commons/csv/CSVParserTest.java
+++ b/src/test/java/org/apache/commons/csv/CSVParserTest.java
@@ -140,7 +140,7 @@ private void parseFully(final CSVParser parser) {
}
@Test
- public void testBackslashEscaping() throws IOException {
+ void testBackslashEscaping() throws IOException {
// To avoid confusion over the need for escaping chars in java code,
// We will test with a forward slash as the escape char, and a single
// quote as the encapsulator.
@@ -176,7 +176,7 @@ public void testBackslashEscaping() throws IOException {
}
@Test
- public void testBackslashEscaping2() throws IOException {
+ void testBackslashEscaping2() throws IOException {
// To avoid confusion over the need for escaping chars in java code,
// We will test with a forward slash as the escape char, and a single
// quote as the encapsulator.
@@ -200,7 +200,7 @@ public void testBackslashEscaping2() throws IOException {
@Test
@Disabled
- public void testBackslashEscapingOld() throws IOException {
+ void testBackslashEscapingOld() throws IOException {
final String code = "one,two,three\n" + "on\\\"e,two\n" + "on\"e,two\n" + "one,\"tw\\\"o\"\n" + "one,\"t\\,wo\"\n" + "one,two,\"th,ree\"\n" +
"\"a\\\\\"\n" + "a\\,b\n" + "\"a\\\\,b\"";
final String[][] res = { { "one", "two", "three" }, { "on\\\"e", "two" }, { "on\"e", "two" }, { "one", "tw\"o" }, { "one", "t\\,wo" }, // backslash in
@@ -224,7 +224,7 @@ public void testBackslashEscapingOld() throws IOException {
@Test
@Disabled("CSV-107")
- public void testBOM() throws IOException {
+ void testBOM() throws IOException {
final URL url = ClassLoader.getSystemClassLoader().getResource("org/apache/commons/csv/CSVFileParser/bom.csv");
try (CSVParser parser = CSVParser.parse(url, StandardCharsets.UTF_8, EXCEL_WITH_HEADER)) {
parser.forEach(record -> assertNotNull(record.get("Date")));
@@ -232,7 +232,7 @@ public void testBOM() throws IOException {
}
@Test
- public void testBOMInputStreamParserWithInputStream() throws IOException {
+ void testBOMInputStreamParserWithInputStream() throws IOException {
try (BOMInputStream inputStream = createBOMInputStream("org/apache/commons/csv/CSVFileParser/bom.csv");
CSVParser parser = CSVParser.parse(inputStream, UTF_8, EXCEL_WITH_HEADER)) {
parser.forEach(record -> assertNotNull(record.get("Date")));
@@ -240,7 +240,7 @@ public void testBOMInputStreamParserWithInputStream() throws IOException {
}
@Test
- public void testBOMInputStreamParserWithReader() throws IOException {
+ void testBOMInputStreamParserWithReader() throws IOException {
try (Reader reader = new InputStreamReader(createBOMInputStream("org/apache/commons/csv/CSVFileParser/bom.csv"), UTF_8_NAME);
CSVParser parser = CSVParser.builder()
.setReader(reader)
@@ -251,7 +251,7 @@ public void testBOMInputStreamParserWithReader() throws IOException {
}
@Test
- public void testBOMInputStreamParseWithReader() throws IOException {
+ void testBOMInputStreamParseWithReader() throws IOException {
try (Reader reader = new InputStreamReader(createBOMInputStream("org/apache/commons/csv/CSVFileParser/bom.csv"), UTF_8_NAME);
CSVParser parser = CSVParser.builder()
.setReader(reader)
@@ -262,7 +262,7 @@ public void testBOMInputStreamParseWithReader() throws IOException {
}
@Test
- public void testCarriageReturnEndings() throws IOException {
+ void testCarriageReturnEndings() throws IOException {
final String string = "foo\rbaar,\rhello,world\r,kanu";
try (CSVParser parser = CSVParser.builder().setCharSequence(string).get()) {
final List records = parser.getRecords();
@@ -271,7 +271,7 @@ public void testCarriageReturnEndings() throws IOException {
}
@Test
- public void testCarriageReturnLineFeedEndings() throws IOException {
+ void testCarriageReturnLineFeedEndings() throws IOException {
final String string = "foo\r\nbaar,\r\nhello,world\r\n,kanu";
try (CSVParser parser = CSVParser.builder().setCharSequence(string).get()) {
final List records = parser.getRecords();
@@ -280,7 +280,7 @@ public void testCarriageReturnLineFeedEndings() throws IOException {
}
@Test
- public void testClose() throws Exception {
+ void testClose() throws Exception {
final Reader in = new StringReader("# comment\na,b,c\n1,2,3\nx,y,z");
final Iterator records;
try (CSVParser parser = CSVFormat.DEFAULT.withCommentMarker('#').withHeader().parse(in)) {
@@ -292,32 +292,32 @@ public void testClose() throws Exception {
}
@Test
- public void testCSV141CSVFormat_DEFAULT() throws Exception {
+ void testCSV141CSVFormat_DEFAULT() throws Exception {
testCSV141Failure(CSVFormat.DEFAULT, 3);
}
@Test
- public void testCSV141CSVFormat_INFORMIX_UNLOAD() throws Exception {
+ void testCSV141CSVFormat_INFORMIX_UNLOAD() throws Exception {
testCSV141Failure(CSVFormat.INFORMIX_UNLOAD, 1);
}
@Test
- public void testCSV141CSVFormat_INFORMIX_UNLOAD_CSV() throws Exception {
+ void testCSV141CSVFormat_INFORMIX_UNLOAD_CSV() throws Exception {
testCSV141Failure(CSVFormat.INFORMIX_UNLOAD_CSV, 3);
}
@Test
- public void testCSV141CSVFormat_ORACLE() throws Exception {
+ void testCSV141CSVFormat_ORACLE() throws Exception {
testCSV141Failure(CSVFormat.ORACLE, 2);
}
@Test
- public void testCSV141CSVFormat_POSTGRESQL_CSV() throws Exception {
+ void testCSV141CSVFormat_POSTGRESQL_CSV() throws Exception {
testCSV141Failure(CSVFormat.POSTGRESQL_CSV, 3);
}
@Test
- public void testCSV141Excel() throws Exception {
+ void testCSV141Excel() throws Exception {
testCSV141Ok(CSVFormat.EXCEL);
}
@@ -387,12 +387,12 @@ record = parser.nextRecord();
}
@Test
- public void testCSV141RFC4180() throws Exception {
+ void testCSV141RFC4180() throws Exception {
testCSV141Failure(CSVFormat.RFC4180, 3);
}
@Test
- public void testCSV235() throws IOException {
+ void testCSV235() throws IOException {
final String dqString = "\"aaa\",\"b\"\"bb\",\"ccc\""; // "aaa","b""bb","ccc"
try (CSVParser parser = CSVFormat.RFC4180.parse(new StringReader(dqString))) {
final Iterator records = parser.iterator();
@@ -406,7 +406,7 @@ public void testCSV235() throws IOException {
}
@Test
- public void testCSV57() throws Exception {
+ void testCSV57() throws Exception {
try (CSVParser parser = CSVParser.parse("", CSVFormat.DEFAULT)) {
final List list = parser.getRecords();
assertNotNull(list);
@@ -415,7 +415,7 @@ public void testCSV57() throws Exception {
}
@Test
- public void testDefaultFormat() throws IOException {
+ void testDefaultFormat() throws IOException {
// @formatter:off
final String code = "" + "a,b#\n" + // 1)
"\"\n\",\" \",#\n" + // 2)
@@ -440,20 +440,20 @@ public void testDefaultFormat() throws IOException {
}
@Test
- public void testDuplicateHeadersAllowedByDefault() throws Exception {
+ void testDuplicateHeadersAllowedByDefault() throws Exception {
try (CSVParser parser = CSVParser.parse("a,b,a\n1,2,3\nx,y,z", CSVFormat.DEFAULT.withHeader())) {
// noop
}
}
@Test
- public void testDuplicateHeadersNotAllowed() {
+ void testDuplicateHeadersNotAllowed() {
assertThrows(IllegalArgumentException.class,
() -> CSVParser.parse("a,b,a\n1,2,3\nx,y,z", CSVFormat.DEFAULT.withHeader().withAllowDuplicateHeaderNames(false)));
}
@Test
- public void testEmptyFile() throws Exception {
+ void testEmptyFile() throws Exception {
try (CSVParser parser = CSVParser.parse(Paths.get("src/test/resources/org/apache/commons/csv/empty.txt"), StandardCharsets.UTF_8,
CSVFormat.DEFAULT)) {
assertNull(parser.nextRecord());
@@ -461,7 +461,7 @@ public void testEmptyFile() throws Exception {
}
@Test
- public void testEmptyFileHeaderParsing() throws Exception {
+ void testEmptyFileHeaderParsing() throws Exception {
try (CSVParser parser = CSVParser.parse("", CSVFormat.DEFAULT.withFirstRecordAsHeader())) {
assertNull(parser.nextRecord());
assertTrue(parser.getHeaderNames().isEmpty());
@@ -469,7 +469,7 @@ public void testEmptyFileHeaderParsing() throws Exception {
}
@Test
- public void testEmptyLineBehaviorCSV() throws Exception {
+ void testEmptyLineBehaviorCSV() throws Exception {
final String[] codes = { "hello,\r\n\r\n\r\n", "hello,\n\n\n", "hello,\"\"\r\n\r\n\r\n", "hello,\"\"\n\n\n" };
final String[][] res = { { "hello", "" } // CSV format ignores empty lines
};
@@ -486,7 +486,7 @@ public void testEmptyLineBehaviorCSV() throws Exception {
}
@Test
- public void testEmptyLineBehaviorExcel() throws Exception {
+ void testEmptyLineBehaviorExcel() throws Exception {
final String[] codes = { "hello,\r\n\r\n\r\n", "hello,\n\n\n", "hello,\"\"\r\n\r\n\r\n", "hello,\"\"\n\n\n" };
final String[][] res = { { "hello", "" }, { "" }, // Excel format does not ignore empty lines
{ "" } };
@@ -503,14 +503,14 @@ public void testEmptyLineBehaviorExcel() throws Exception {
}
@Test
- public void testEmptyString() throws Exception {
+ void testEmptyString() throws Exception {
try (CSVParser parser = CSVParser.parse("", CSVFormat.DEFAULT)) {
assertNull(parser.nextRecord());
}
}
@Test
- public void testEndOfFileBehaviorCSV() throws Exception {
+ void testEndOfFileBehaviorCSV() throws Exception {
final String[] codes = { "hello,\r\n\r\nworld,\r\n", "hello,\r\n\r\nworld,", "hello,\r\n\r\nworld,\"\"\r\n", "hello,\r\n\r\nworld,\"\"",
"hello,\r\n\r\nworld,\n", "hello,\r\n\r\nworld,", "hello,\r\n\r\nworld,\"\"\n", "hello,\r\n\r\nworld,\"\"" };
final String[][] res = { { "hello", "" }, // CSV format ignores empty lines
@@ -528,7 +528,7 @@ public void testEndOfFileBehaviorCSV() throws Exception {
}
@Test
- public void testEndOfFileBehaviorExcel() throws Exception {
+ void testEndOfFileBehaviorExcel() throws Exception {
final String[] codes = { "hello,\r\n\r\nworld,\r\n", "hello,\r\n\r\nworld,", "hello,\r\n\r\nworld,\"\"\r\n", "hello,\r\n\r\nworld,\"\"",
"hello,\r\n\r\nworld,\n", "hello,\r\n\r\nworld,", "hello,\r\n\r\nworld,\"\"\n", "hello,\r\n\r\nworld,\"\"" };
final String[][] res = { { "hello", "" }, { "" }, // Excel format does not ignore empty lines
@@ -547,7 +547,7 @@ public void testEndOfFileBehaviorExcel() throws Exception {
}
@Test
- public void testExcelFormat1() throws IOException {
+ void testExcelFormat1() throws IOException {
final String code = "value1,value2,value3,value4\r\na,b,c,d\r\n x,,," + "\r\n\r\n\"\"\"hello\"\"\",\" \"\"world\"\"\",\"abc\ndef\",\r\n";
final String[][] res = { { "value1", "value2", "value3", "value4" }, { "a", "b", "c", "d" }, { " x", "", "", "" }, { "" },
{ "\"hello\"", " \"world\"", "abc\ndef", "" } };
@@ -562,7 +562,7 @@ public void testExcelFormat1() throws IOException {
}
@Test
- public void testExcelFormat2() throws Exception {
+ void testExcelFormat2() throws Exception {
final String code = "foo,baar\r\n\r\nhello,\r\n\r\nworld,\r\n";
final String[][] res = { { "foo", "baar" }, { "" }, { "hello", "" }, { "" }, { "world", "" } };
try (CSVParser parser = CSVParser.parse(code, CSVFormat.EXCEL)) {
@@ -579,7 +579,7 @@ public void testExcelFormat2() throws Exception {
* Tests an exported Excel worksheet with a header row and rows that have more columns than the headers
*/
@Test
- public void testExcelHeaderCountLessThanData() throws Exception {
+ void testExcelHeaderCountLessThanData() throws Exception {
final String code = "A,B,C,,\r\na,b,c,d,e\r\n";
try (CSVParser parser = CSVParser.parse(code, EXCEL_WITH_HEADER)) {
parser.getRecords().forEach(record -> {
@@ -591,7 +591,7 @@ public void testExcelHeaderCountLessThanData() throws Exception {
}
@Test
- public void testFirstEndOfLineCr() throws IOException {
+ void testFirstEndOfLineCr() throws IOException {
final String data = "foo\rbaar,\rhello,world\r,kanu";
try (CSVParser parser = CSVParser.parse(data, CSVFormat.DEFAULT)) {
final List records = parser.getRecords();
@@ -601,7 +601,7 @@ public void testFirstEndOfLineCr() throws IOException {
}
@Test
- public void testFirstEndOfLineCrLf() throws IOException {
+ void testFirstEndOfLineCrLf() throws IOException {
final String data = "foo\r\nbaar,\r\nhello,world\r\n,kanu";
try (CSVParser parser = CSVParser.parse(data, CSVFormat.DEFAULT)) {
final List records = parser.getRecords();
@@ -611,7 +611,7 @@ public void testFirstEndOfLineCrLf() throws IOException {
}
@Test
- public void testFirstEndOfLineLf() throws IOException {
+ void testFirstEndOfLineLf() throws IOException {
final String data = "foo\nbaar,\nhello,world\n,kanu";
try (CSVParser parser = CSVParser.parse(data, CSVFormat.DEFAULT)) {
final List records = parser.getRecords();
@@ -621,7 +621,7 @@ public void testFirstEndOfLineLf() throws IOException {
}
@Test
- public void testForEach() throws Exception {
+ void testForEach() throws Exception {
try (Reader in = new StringReader("a,b,c\n1,2,3\nx,y,z");
CSVParser parser = CSVFormat.DEFAULT.parse(in)) {
final List records = new ArrayList<>();
@@ -636,7 +636,7 @@ public void testForEach() throws Exception {
}
@Test
- public void testGetHeaderComment_HeaderComment1() throws IOException {
+ void testGetHeaderComment_HeaderComment1() throws IOException {
try (CSVParser parser = CSVParser.parse(CSV_INPUT_HEADER_COMMENT, FORMAT_AUTO_HEADER)) {
parser.getRecords();
// Expect a header comment
@@ -646,7 +646,7 @@ public void testGetHeaderComment_HeaderComment1() throws IOException {
}
@Test
- public void testGetHeaderComment_HeaderComment2() throws IOException {
+ void testGetHeaderComment_HeaderComment2() throws IOException {
try (CSVParser parser = CSVParser.parse(CSV_INPUT_HEADER_COMMENT, FORMAT_EXPLICIT_HEADER)) {
parser.getRecords();
// Expect a header comment
@@ -656,7 +656,7 @@ public void testGetHeaderComment_HeaderComment2() throws IOException {
}
@Test
- public void testGetHeaderComment_HeaderComment3() throws IOException {
+ void testGetHeaderComment_HeaderComment3() throws IOException {
try (CSVParser parser = CSVParser.parse(CSV_INPUT_HEADER_COMMENT, FORMAT_EXPLICIT_HEADER_NOSKIP)) {
parser.getRecords();
// Expect no header comment - the text "comment" is attached to the first record
@@ -666,7 +666,7 @@ public void testGetHeaderComment_HeaderComment3() throws IOException {
}
@Test
- public void testGetHeaderComment_HeaderTrailerComment() throws IOException {
+ void testGetHeaderComment_HeaderTrailerComment() throws IOException {
try (CSVParser parser = CSVParser.parse(CSV_INPUT_MULTILINE_HEADER_TRAILER_COMMENT, FORMAT_AUTO_HEADER)) {
parser.getRecords();
// Expect a header comment
@@ -676,7 +676,7 @@ public void testGetHeaderComment_HeaderTrailerComment() throws IOException {
}
@Test
- public void testGetHeaderComment_NoComment1() throws IOException {
+ void testGetHeaderComment_NoComment1() throws IOException {
try (CSVParser parser = CSVParser.parse(CSV_INPUT_NO_COMMENT, FORMAT_AUTO_HEADER)) {
parser.getRecords();
// Expect no header comment
@@ -686,7 +686,7 @@ public void testGetHeaderComment_NoComment1() throws IOException {
}
@Test
- public void testGetHeaderComment_NoComment2() throws IOException {
+ void testGetHeaderComment_NoComment2() throws IOException {
try (CSVParser parser = CSVParser.parse(CSV_INPUT_NO_COMMENT, FORMAT_EXPLICIT_HEADER)) {
parser.getRecords();
// Expect no header comment
@@ -696,7 +696,7 @@ public void testGetHeaderComment_NoComment2() throws IOException {
}
@Test
- public void testGetHeaderComment_NoComment3() throws IOException {
+ void testGetHeaderComment_NoComment3() throws IOException {
try (CSVParser parser = CSVParser.parse(CSV_INPUT_NO_COMMENT, FORMAT_EXPLICIT_HEADER_NOSKIP)) {
parser.getRecords();
// Expect no header comment
@@ -706,7 +706,7 @@ public void testGetHeaderComment_NoComment3() throws IOException {
}
@Test
- public void testGetHeaderMap() throws Exception {
+ void testGetHeaderMap() throws Exception {
try (CSVParser parser = CSVParser.parse("a,b,c\n1,2,3\nx,y,z", CSVFormat.DEFAULT.withHeader("A", "B", "C"))) {
final Map headerMap = parser.getHeaderMap();
final Iterator columnNames = headerMap.keySet().iterator();
@@ -730,7 +730,7 @@ public void testGetHeaderMap() throws Exception {
}
@Test
- public void testGetHeaderNames() throws IOException {
+ void testGetHeaderNames() throws IOException {
try (CSVParser parser = CSVParser.parse("a,b,c\n1,2,3\nx,y,z", CSVFormat.DEFAULT.withHeader("A", "B", "C"))) {
final Map nameIndexMap = parser.getHeaderMap();
final List headerNames = parser.getHeaderNames();
@@ -744,7 +744,7 @@ public void testGetHeaderNames() throws IOException {
}
@Test
- public void testGetHeaderNamesReadOnly() throws IOException {
+ void testGetHeaderNamesReadOnly() throws IOException {
try (CSVParser parser = CSVParser.parse("a,b,c\n1,2,3\nx,y,z", CSVFormat.DEFAULT.withHeader("A", "B", "C"))) {
final List headerNames = parser.getHeaderNames();
assertNotNull(headerNames);
@@ -753,7 +753,7 @@ public void testGetHeaderNamesReadOnly() throws IOException {
}
@Test
- public void testGetLine() throws IOException {
+ void testGetLine() throws IOException {
try (CSVParser parser = CSVParser.parse(CSV_INPUT, CSVFormat.DEFAULT.withIgnoreSurroundingSpaces())) {
for (final String[] re : RESULT) {
assertArrayEquals(re, parser.nextRecord().values());
@@ -764,22 +764,22 @@ public void testGetLine() throws IOException {
}
@Test
- public void testGetLineNumberWithCR() throws Exception {
+ void testGetLineNumberWithCR() throws Exception {
validateLineNumbers(String.valueOf(CR));
}
@Test
- public void testGetLineNumberWithCRLF() throws Exception {
+ void testGetLineNumberWithCRLF() throws Exception {
validateLineNumbers(CRLF);
}
@Test
- public void testGetLineNumberWithLF() throws Exception {
+ void testGetLineNumberWithLF() throws Exception {
validateLineNumbers(String.valueOf(LF));
}
@Test
- public void testGetOneLine() throws IOException {
+ void testGetOneLine() throws IOException {
try (CSVParser parser = CSVParser.parse(CSV_INPUT_1, CSVFormat.DEFAULT)) {
final CSVRecord record = parser.getRecords().get(0);
assertArrayEquals(RESULT[0], record.values());
@@ -792,7 +792,7 @@ public void testGetOneLine() throws IOException {
* @throws IOException when an I/O error occurs.
*/
@Test
- public void testGetOneLineOneParser() throws IOException {
+ void testGetOneLineOneParser() throws IOException {
final CSVFormat format = CSVFormat.DEFAULT;
try (PipedWriter writer = new PipedWriter();
PipedReader origin = new PipedReader(writer);
@@ -812,7 +812,7 @@ public void testGetOneLineOneParser() throws IOException {
}
@Test
- public void testGetRecordFourBytesRead() throws Exception {
+ void testGetRecordFourBytesRead() throws Exception {
final String code = "id,a,b,c\n" +
"1,😊,🤔,😂\n" +
"2,😊,🤔,😂\n" +
@@ -846,32 +846,32 @@ public void testGetRecordFourBytesRead() throws Exception {
}
@Test
- public void testGetRecordNumberWithCR() throws Exception {
+ void testGetRecordNumberWithCR() throws Exception {
validateRecordNumbers(String.valueOf(CR));
}
@Test
- public void testGetRecordNumberWithCRLF() throws Exception {
+ void testGetRecordNumberWithCRLF() throws Exception {
validateRecordNumbers(CRLF);
}
@Test
- public void testGetRecordNumberWithLF() throws Exception {
+ void testGetRecordNumberWithLF() throws Exception {
validateRecordNumbers(String.valueOf(LF));
}
@Test
- public void testGetRecordPositionWithCRLF() throws Exception {
+ void testGetRecordPositionWithCRLF() throws Exception {
validateRecordPosition(CRLF);
}
@Test
- public void testGetRecordPositionWithLF() throws Exception {
+ void testGetRecordPositionWithLF() throws Exception {
validateRecordPosition(String.valueOf(LF));
}
@Test
- public void testGetRecords() throws IOException {
+ void testGetRecords() throws IOException {
try (CSVParser parser = CSVParser.parse(CSV_INPUT, CSVFormat.DEFAULT.withIgnoreSurroundingSpaces())) {
final List records = parser.getRecords();
assertEquals(RESULT.length, records.size());
@@ -883,7 +883,7 @@ public void testGetRecords() throws IOException {
}
@Test
- public void testGetRecordsFromBrokenInputStream() throws IOException {
+ void testGetRecordsFromBrokenInputStream() throws IOException {
@SuppressWarnings("resource") // We also get an exception on close, which is OK but can't assert in a try.
final CSVParser parser = CSVParser.parse(new BrokenInputStream(), UTF_8, CSVFormat.DEFAULT);
assertThrows(UncheckedIOException.class, parser::getRecords);
@@ -892,7 +892,7 @@ public void testGetRecordsFromBrokenInputStream() throws IOException {
@ParameterizedTest
@ValueSource(longs = { -1, 0, 1, 2, 3, 4, Long.MAX_VALUE })
- public void testGetRecordsMaxRows(final long maxRows) throws IOException {
+ void testGetRecordsMaxRows(final long maxRows) throws IOException {
try (CSVParser parser = CSVParser.parse(CSV_INPUT, CSVFormat.DEFAULT.builder().setIgnoreSurroundingSpaces(true).setMaxRows(maxRows).get())) {
final List records = parser.getRecords();
final long expectedLength = maxRows <= 0 || maxRows > RESULT.length ? RESULT.length : maxRows;
@@ -905,7 +905,7 @@ public void testGetRecordsMaxRows(final long maxRows) throws IOException {
}
@Test
- public void testGetRecordThreeBytesRead() throws Exception {
+ void testGetRecordThreeBytesRead() throws Exception {
final String code = "id,date,val5,val4\n" +
"11111111111111,'4017-09-01',きちんと節分近くには咲いてる~,v4\n" +
"22222222222222,'4017-01-01',おはよう私の友人~,v4\n" +
@@ -941,7 +941,7 @@ public void testGetRecordThreeBytesRead() throws Exception {
}
@Test
- public void testGetRecordWithMultiLineValues() throws Exception {
+ void testGetRecordWithMultiLineValues() throws Exception {
try (CSVParser parser = CSVParser.parse("\"a\r\n1\",\"a\r\n2\"" + CRLF + "\"b\r\n1\",\"b\r\n2\"" + CRLF + "\"c\r\n1\",\"c\r\n2\"",
CSVFormat.DEFAULT.withRecordSeparator(CRLF))) {
CSVRecord record;
@@ -966,7 +966,7 @@ public void testGetRecordWithMultiLineValues() throws Exception {
}
@Test
- public void testGetTrailerComment_HeaderComment1() throws IOException {
+ void testGetTrailerComment_HeaderComment1() throws IOException {
try (CSVParser parser = CSVParser.parse(CSV_INPUT_HEADER_COMMENT, FORMAT_AUTO_HEADER)) {
parser.getRecords();
assertFalse(parser.hasTrailerComment());
@@ -975,7 +975,7 @@ public void testGetTrailerComment_HeaderComment1() throws IOException {
}
@Test
- public void testGetTrailerComment_HeaderComment2() throws IOException {
+ void testGetTrailerComment_HeaderComment2() throws IOException {
try (CSVParser parser = CSVParser.parse(CSV_INPUT_HEADER_COMMENT, FORMAT_EXPLICIT_HEADER)) {
parser.getRecords();
assertFalse(parser.hasTrailerComment());
@@ -984,7 +984,7 @@ public void testGetTrailerComment_HeaderComment2() throws IOException {
}
@Test
- public void testGetTrailerComment_HeaderComment3() throws IOException {
+ void testGetTrailerComment_HeaderComment3() throws IOException {
try (CSVParser parser = CSVParser.parse(CSV_INPUT_HEADER_COMMENT, FORMAT_EXPLICIT_HEADER_NOSKIP)) {
parser.getRecords();
assertFalse(parser.hasTrailerComment());
@@ -993,7 +993,7 @@ public void testGetTrailerComment_HeaderComment3() throws IOException {
}
@Test
- public void testGetTrailerComment_HeaderTrailerComment1() throws IOException {
+ void testGetTrailerComment_HeaderTrailerComment1() throws IOException {
try (CSVParser parser = CSVParser.parse(CSV_INPUT_HEADER_TRAILER_COMMENT, FORMAT_AUTO_HEADER)) {
parser.getRecords();
assertTrue(parser.hasTrailerComment());
@@ -1002,7 +1002,7 @@ public void testGetTrailerComment_HeaderTrailerComment1() throws IOException {
}
@Test
- public void testGetTrailerComment_HeaderTrailerComment2() throws IOException {
+ void testGetTrailerComment_HeaderTrailerComment2() throws IOException {
try (CSVParser parser = CSVParser.parse(CSV_INPUT_HEADER_TRAILER_COMMENT, FORMAT_EXPLICIT_HEADER)) {
parser.getRecords();
assertTrue(parser.hasTrailerComment());
@@ -1011,7 +1011,7 @@ public void testGetTrailerComment_HeaderTrailerComment2() throws IOException {
}
@Test
- public void testGetTrailerComment_HeaderTrailerComment3() throws IOException {
+ void testGetTrailerComment_HeaderTrailerComment3() throws IOException {
try (CSVParser parser = CSVParser.parse(CSV_INPUT_HEADER_TRAILER_COMMENT, FORMAT_EXPLICIT_HEADER_NOSKIP)) {
parser.getRecords();
assertTrue(parser.hasTrailerComment());
@@ -1020,7 +1020,7 @@ public void testGetTrailerComment_HeaderTrailerComment3() throws IOException {
}
@Test
- public void testGetTrailerComment_MultilineComment() throws IOException {
+ void testGetTrailerComment_MultilineComment() throws IOException {
try (CSVParser parser = CSVParser.parse(CSV_INPUT_MULTILINE_HEADER_TRAILER_COMMENT, FORMAT_AUTO_HEADER)) {
parser.getRecords();
assertTrue(parser.hasTrailerComment());
@@ -1029,7 +1029,7 @@ public void testGetTrailerComment_MultilineComment() throws IOException {
}
@Test
- public void testHeader() throws Exception {
+ void testHeader() throws Exception {
final Reader in = new StringReader("a,b,c\n1,2,3\nx,y,z");
try (CSVParser parser = CSVFormat.DEFAULT.withHeader().parse(in)) {
@@ -1048,7 +1048,7 @@ public void testHeader() throws Exception {
}
@Test
- public void testHeaderComment() throws Exception {
+ void testHeaderComment() throws Exception {
final Reader in = new StringReader("# comment\na,b,c\n1,2,3\nx,y,z");
try (CSVParser parser = CSVFormat.DEFAULT.withCommentMarker('#').withHeader().parse(in)) {
final Iterator records = parser.iterator();
@@ -1064,7 +1064,7 @@ public void testHeaderComment() throws Exception {
}
@Test
- public void testHeaderMissing() throws Exception {
+ void testHeaderMissing() throws Exception {
final Reader in = new StringReader("a,,c\n1,2,3\nx,y,z");
try (CSVParser parser = CSVFormat.DEFAULT.withHeader().withAllowMissingColumnNames().parse(in)) {
final Iterator records = parser.iterator();
@@ -1079,7 +1079,7 @@ public void testHeaderMissing() throws Exception {
}
@Test
- public void testHeaderMissingWithNull() throws Exception {
+ void testHeaderMissingWithNull() throws Exception {
final Reader in = new StringReader("a,,c,,e\n1,2,3,4,5\nv,w,x,y,z");
try (CSVParser parser = CSVFormat.DEFAULT.withHeader().withNullString("").withAllowMissingColumnNames().parse(in)) {
parser.iterator();
@@ -1087,7 +1087,7 @@ public void testHeaderMissingWithNull() throws Exception {
}
@Test
- public void testHeadersMissing() throws Exception {
+ void testHeadersMissing() throws Exception {
try (Reader in = new StringReader("a,,c,,e\n1,2,3,4,5\nv,w,x,y,z");
CSVParser parser = CSVFormat.DEFAULT.withHeader().withAllowMissingColumnNames().parse(in)) {
parser.iterator();
@@ -1095,19 +1095,19 @@ public void testHeadersMissing() throws Exception {
}
@Test
- public void testHeadersMissingException() {
+ void testHeadersMissingException() {
final Reader in = new StringReader("a,,c,,e\n1,2,3,4,5\nv,w,x,y,z");
assertThrows(IllegalArgumentException.class, () -> CSVFormat.DEFAULT.withHeader().parse(in).iterator());
}
@Test
- public void testHeadersMissingOneColumnException() {
+ void testHeadersMissingOneColumnException() {
final Reader in = new StringReader("a,,c,d,e\n1,2,3,4,5\nv,w,x,y,z");
assertThrows(IllegalArgumentException.class, () -> CSVFormat.DEFAULT.withHeader().parse(in).iterator());
}
@Test
- public void testHeadersWithNullColumnName() throws IOException {
+ void testHeadersWithNullColumnName() throws IOException {
final Reader in = new StringReader("header1,null,header3\n1,2,3\n4,5,6");
try (CSVParser parser = CSVFormat.DEFAULT.withHeader().withNullString("null").withAllowMissingColumnNames().parse(in)) {
final Iterator records = parser.iterator();
@@ -1121,7 +1121,7 @@ public void testHeadersWithNullColumnName() throws IOException {
}
@Test
- public void testIgnoreCaseHeaderMapping() throws Exception {
+ void testIgnoreCaseHeaderMapping() throws Exception {
final Reader reader = new StringReader("1,2,3");
try (CSVParser parser = CSVFormat.DEFAULT.withHeader("One", "TWO", "three").withIgnoreHeaderCase().parse(reader)) {
final Iterator records = parser.iterator();
@@ -1133,7 +1133,7 @@ public void testIgnoreCaseHeaderMapping() throws Exception {
}
@Test
- public void testIgnoreEmptyLines() throws IOException {
+ void testIgnoreEmptyLines() throws IOException {
final String code = "\nfoo,baar\n\r\n,\n\n,world\r\n\n";
// String code = "world\r\n\n";
// String code = "foo;baar\r\n\r\nhello;\r\n\r\nworld;\r\n";
@@ -1144,12 +1144,12 @@ public void testIgnoreEmptyLines() throws IOException {
}
@Test
- public void testInvalidFormat() {
+ void testInvalidFormat() {
assertThrows(IllegalArgumentException.class, () -> CSVFormat.DEFAULT.withDelimiter(CR));
}
@Test
- public void testIterator() throws Exception {
+ void testIterator() throws Exception {
final Reader in = new StringReader("a,b,c\n1,2,3\nx,y,z");
try (CSVParser parser = CSVFormat.DEFAULT.parse(in)) {
final Iterator iterator = parser.iterator();
@@ -1168,7 +1168,7 @@ public void testIterator() throws Exception {
@ParameterizedTest
@ValueSource(longs = { -1, 0, 1, 2, 3, 4, 5, Long.MAX_VALUE })
- public void testIteratorMaxRows(final long maxRows) throws Exception {
+ void testIteratorMaxRows(final long maxRows) throws Exception {
final Reader in = new StringReader("a,b,c\n1,2,3\nx,y,z");
try (CSVParser parser = CSVFormat.DEFAULT.builder().setMaxRows(maxRows).get().parse(in)) {
final Iterator iterator = parser.iterator();
@@ -1195,7 +1195,7 @@ public void testIteratorMaxRows(final long maxRows) throws Exception {
}
@Test
- public void testIteratorSequenceBreaking() throws IOException {
+ void testIteratorSequenceBreaking() throws IOException {
final String fiveRows = "1\n2\n3\n4\n5\n";
// Iterator hasNext() shouldn't break sequence
try (CSVParser parser = CSVFormat.DEFAULT.parse(new StringReader(fiveRows))) {
@@ -1250,7 +1250,7 @@ public void testIteratorSequenceBreaking() throws IOException {
}
@Test
- public void testLineFeedEndings() throws IOException {
+ void testLineFeedEndings() throws IOException {
final String code = "foo\nbaar,\nhello,world\n,kanu";
try (CSVParser parser = CSVParser.parse(code, CSVFormat.DEFAULT)) {
final List records = parser.getRecords();
@@ -1259,7 +1259,7 @@ public void testLineFeedEndings() throws IOException {
}
@Test
- public void testMappedButNotSetAsOutlook2007ContactExport() throws Exception {
+ void testMappedButNotSetAsOutlook2007ContactExport() throws Exception {
final Reader in = new StringReader("a,b,c\n1,2\nx,y,z");
try (CSVParser parser = CSVFormat.DEFAULT.withHeader("A", "B", "C").withSkipHeaderRecord().parse(in)) {
final Iterator records = parser.iterator();
@@ -1294,7 +1294,7 @@ record = records.next();
@Test
@Disabled
- public void testMongoDbCsv() throws Exception {
+ void testMongoDbCsv() throws Exception {
try (CSVParser parser = CSVParser.parse("\"a a\",b,c" + LF + "d,e,f", CSVFormat.MONGODB_CSV)) {
final Iterator itr1 = parser.iterator();
final Iterator itr2 = parser.iterator();
@@ -1313,7 +1313,7 @@ public void testMongoDbCsv() throws Exception {
@Test
// TODO this may lead to strange behavior, throw an exception if iterator() has already been called?
- public void testMultipleIterators() throws Exception {
+ void testMultipleIterators() throws Exception {
try (CSVParser parser = CSVParser.parse("a,b,c" + CRLF + "d,e,f", CSVFormat.DEFAULT)) {
final Iterator itr1 = parser.iterator();
@@ -1330,24 +1330,24 @@ public void testMultipleIterators() throws Exception {
}
@Test
- public void testNewCSVParserNullReaderFormat() {
+ void testNewCSVParserNullReaderFormat() {
assertThrows(NullPointerException.class, () -> new CSVParser(null, CSVFormat.DEFAULT));
}
@Test
- public void testNewCSVParserReaderNullFormat() {
+ void testNewCSVParserReaderNullFormat() {
assertThrows(NullPointerException.class, () -> new CSVParser(new StringReader(""), null));
}
@Test
- public void testNoHeaderMap() throws Exception {
+ void testNoHeaderMap() throws Exception {
try (CSVParser parser = CSVParser.parse("a,b,c\n1,2,3\nx,y,z", CSVFormat.DEFAULT)) {
assertNull(parser.getHeaderMap());
}
}
@Test
- public void testNotValueCSV() throws IOException {
+ void testNotValueCSV() throws IOException {
final String source = "#";
final CSVFormat csvFormat = CSVFormat.DEFAULT.withCommentMarker('#');
try (CSVParser csvParser = csvFormat.parse(new StringReader(source))) {
@@ -1357,7 +1357,7 @@ public void testNotValueCSV() throws IOException {
}
@Test
- public void testParse() throws Exception {
+ void testParse() throws Exception {
final URL url = ClassLoader.getSystemClassLoader().getResource("org/apache/commons/csv/CSVFileParser/test.csv");
final CSVFormat format = CSVFormat.DEFAULT.builder().setHeader("A", "B", "C", "D").get();
final Charset charset = StandardCharsets.UTF_8;
@@ -1424,7 +1424,7 @@ public void testParse() throws Exception {
}
@Test
- public void testParseFileCharsetNullFormat() throws IOException {
+ void testParseFileCharsetNullFormat() throws IOException {
final File file = new File("src/test/resources/org/apache/commons/csv/CSVFileParser/test.csv");
try (CSVParser parser = CSVParser.parse(file, Charset.defaultCharset(), null)) {
// null maps to DEFAULT.
@@ -1433,7 +1433,7 @@ public void testParseFileCharsetNullFormat() throws IOException {
}
@Test
- public void testParseInputStreamCharsetNullFormat() throws IOException {
+ void testParseInputStreamCharsetNullFormat() throws IOException {
try (InputStream in = Files.newInputStream(Paths.get("src/test/resources/org/apache/commons/csv/CSVFileParser/test.csv"));
CSVParser parser = CSVParser.parse(in, Charset.defaultCharset(), null)) {
// null maps to DEFAULT.
@@ -1442,27 +1442,27 @@ public void testParseInputStreamCharsetNullFormat() throws IOException {
}
@Test
- public void testParseNullFileFormat() {
+ void testParseNullFileFormat() {
assertThrows(NullPointerException.class, () -> CSVParser.parse((File) null, Charset.defaultCharset(), CSVFormat.DEFAULT));
}
@Test
- public void testParseNullPathFormat() {
+ void testParseNullPathFormat() {
assertThrows(NullPointerException.class, () -> CSVParser.parse((Path) null, Charset.defaultCharset(), CSVFormat.DEFAULT));
}
@Test
- public void testParseNullStringFormat() {
+ void testParseNullStringFormat() {
assertThrows(NullPointerException.class, () -> CSVParser.parse((String) null, CSVFormat.DEFAULT));
}
@Test
- public void testParseNullUrlCharsetFormat() {
+ void testParseNullUrlCharsetFormat() {
assertThrows(NullPointerException.class, () -> CSVParser.parse((URL) null, Charset.defaultCharset(), CSVFormat.DEFAULT));
}
@Test
- public void testParsePathCharsetNullFormat() throws IOException {
+ void testParsePathCharsetNullFormat() throws IOException {
final Path path = Paths.get("src/test/resources/org/apache/commons/csv/CSVFileParser/test.csv");
try (CSVParser parser = CSVParser.parse(path, Charset.defaultCharset(), null)) {
// null maps to DEFAULT.
@@ -1471,7 +1471,7 @@ public void testParsePathCharsetNullFormat() throws IOException {
}
@Test
- public void testParserUrlNullCharsetFormat() throws IOException {
+ void testParserUrlNullCharsetFormat() throws IOException {
final URL url = ClassLoader.getSystemClassLoader().getResource("org/apache/commons/csv/CSVFileParser/test.csv");
try (CSVParser parser = CSVParser.parse(url, null, CSVFormat.DEFAULT)) {
// null maps to DEFAULT.
@@ -1480,7 +1480,7 @@ public void testParserUrlNullCharsetFormat() throws IOException {
}
@Test
- public void testParseStringNullFormat() throws IOException {
+ void testParseStringNullFormat() throws IOException {
try (CSVParser parser = CSVParser.parse("1,2,3", null)) {
// null maps to DEFAULT.
final List records = parser.getRecords();
@@ -1494,7 +1494,7 @@ public void testParseStringNullFormat() throws IOException {
}
@Test
- public void testParseUrlCharsetNullFormat() throws IOException {
+ void testParseUrlCharsetNullFormat() throws IOException {
final URL url = ClassLoader.getSystemClassLoader().getResource("org/apache/commons/csv/CSVFileParser/test.csv");
try (CSVParser parser = CSVParser.parse(url, Charset.defaultCharset(), null)) {
// null maps to DEFAULT.
@@ -1503,7 +1503,7 @@ public void testParseUrlCharsetNullFormat() throws IOException {
}
@Test
- public void testParseWithDelimiterStringWithEscape() throws IOException {
+ void testParseWithDelimiterStringWithEscape() throws IOException {
final String source = "a![!|!]b![|]c[|]xyz\r\nabc[abc][|]xyz";
final CSVFormat csvFormat = CSVFormat.DEFAULT.builder().setDelimiter("[|]").setEscape('!').get();
try (CSVParser csvParser = csvFormat.parse(new StringReader(source))) {
@@ -1517,7 +1517,7 @@ public void testParseWithDelimiterStringWithEscape() throws IOException {
}
@Test
- public void testParseWithDelimiterStringWithQuote() throws IOException {
+ void testParseWithDelimiterStringWithQuote() throws IOException {
final String source = "'a[|]b[|]c'[|]xyz\r\nabc[abc][|]xyz";
final CSVFormat csvFormat = CSVFormat.DEFAULT.builder().setDelimiter("[|]").setQuote('\'').get();
try (CSVParser csvParser = csvFormat.parse(new StringReader(source))) {
@@ -1531,7 +1531,7 @@ public void testParseWithDelimiterStringWithQuote() throws IOException {
}
@Test
- public void testParseWithDelimiterWithEscape() throws IOException {
+ void testParseWithDelimiterWithEscape() throws IOException {
final String source = "a!,b!,c,xyz";
final CSVFormat csvFormat = CSVFormat.DEFAULT.withEscape('!');
try (CSVParser csvParser = csvFormat.parse(new StringReader(source))) {
@@ -1542,7 +1542,7 @@ public void testParseWithDelimiterWithEscape() throws IOException {
}
@Test
- public void testParseWithDelimiterWithQuote() throws IOException {
+ void testParseWithDelimiterWithQuote() throws IOException {
final String source = "'a,b,c',xyz";
final CSVFormat csvFormat = CSVFormat.DEFAULT.withQuote('\'');
try (CSVParser csvParser = csvFormat.parse(new StringReader(source))) {
@@ -1553,7 +1553,7 @@ public void testParseWithDelimiterWithQuote() throws IOException {
}
@Test
- public void testParseWithQuoteThrowsException() {
+ void testParseWithQuoteThrowsException() {
final CSVFormat csvFormat = CSVFormat.DEFAULT.withQuote('\'');
assertThrows(IOException.class, () -> csvFormat.parse(new StringReader("'a,b,c','")).nextRecord());
assertThrows(IOException.class, () -> csvFormat.parse(new StringReader("'a,b,c'abc,xyz")).nextRecord());
@@ -1561,7 +1561,7 @@ public void testParseWithQuoteThrowsException() {
}
@Test
- public void testParseWithQuoteWithEscape() throws IOException {
+ void testParseWithQuoteWithEscape() throws IOException {
final String source = "'a?,b?,c?d',xyz";
final CSVFormat csvFormat = CSVFormat.DEFAULT.withQuote('\'').withEscape('?');
try (CSVParser csvParser = csvFormat.parse(new StringReader(source))) {
@@ -1573,7 +1573,7 @@ public void testParseWithQuoteWithEscape() throws IOException {
@ParameterizedTest
@EnumSource(CSVFormat.Predefined.class)
- public void testParsingPrintedEmptyFirstColumn(final CSVFormat.Predefined format) throws Exception {
+ void testParsingPrintedEmptyFirstColumn(final CSVFormat.Predefined format) throws Exception {
final String[][] lines = { { "a", "b" }, { "", "x" } };
final StringWriter buf = new StringWriter();
try (CSVPrinter printer = new CSVPrinter(buf, format.getFormat())) {
@@ -1591,7 +1591,7 @@ public void testParsingPrintedEmptyFirstColumn(final CSVFormat.Predefined format
}
@Test
- public void testProvidedHeader() throws Exception {
+ void testProvidedHeader() throws Exception {
final Reader in = new StringReader("a,b,c\n1,2,3\nx,y,z");
try (CSVParser parser = CSVFormat.DEFAULT.withHeader("A", "B", "C").parse(in)) {
final Iterator records = parser.iterator();
@@ -1611,7 +1611,7 @@ public void testProvidedHeader() throws Exception {
}
@Test
- public void testProvidedHeaderAuto() throws Exception {
+ void testProvidedHeaderAuto() throws Exception {
final Reader in = new StringReader("a,b,c\n1,2,3\nx,y,z");
try (CSVParser parser = CSVFormat.DEFAULT.withHeader().parse(in)) {
final Iterator records = parser.iterator();
@@ -1631,7 +1631,7 @@ public void testProvidedHeaderAuto() throws Exception {
}
@Test
- public void testRepeatedHeadersAreReturnedInCSVRecordHeaderNames() throws IOException {
+ void testRepeatedHeadersAreReturnedInCSVRecordHeaderNames() throws IOException {
final Reader in = new StringReader("header1,header2,header1\n1,2,3\n4,5,6");
try (CSVParser parser = CSVFormat.DEFAULT.withFirstRecordAsHeader().withTrim().parse(in)) {
final Iterator records = parser.iterator();
@@ -1643,7 +1643,7 @@ public void testRepeatedHeadersAreReturnedInCSVRecordHeaderNames() throws IOExce
}
@Test
- public void testRoundtrip() throws Exception {
+ void testRoundtrip() throws Exception {
final StringWriter out = new StringWriter();
final String data = "a,b,c\r\n1,2,3\r\nx,y,z\r\n";
try (CSVPrinter printer = new CSVPrinter(out, CSVFormat.DEFAULT);
@@ -1656,7 +1656,7 @@ public void testRoundtrip() throws Exception {
}
@Test
- public void testSkipAutoHeader() throws Exception {
+ void testSkipAutoHeader() throws Exception {
final Reader in = new StringReader("a,b,c\n1,2,3\nx,y,z");
try (CSVParser parser = CSVFormat.DEFAULT.withHeader().parse(in)) {
final Iterator records = parser.iterator();
@@ -1668,7 +1668,7 @@ public void testSkipAutoHeader() throws Exception {
}
@Test
- public void testSkipHeaderOverrideDuplicateHeaders() throws Exception {
+ void testSkipHeaderOverrideDuplicateHeaders() throws Exception {
final Reader in = new StringReader("a,a,a\n1,2,3\nx,y,z");
try (CSVParser parser = CSVFormat.DEFAULT.withHeader("X", "Y", "Z").withSkipHeaderRecord().parse(in)) {
final Iterator records = parser.iterator();
@@ -1680,7 +1680,7 @@ public void testSkipHeaderOverrideDuplicateHeaders() throws Exception {
}
@Test
- public void testSkipSetAltHeaders() throws Exception {
+ void testSkipSetAltHeaders() throws Exception {
final Reader in = new StringReader("a,b,c\n1,2,3\nx,y,z");
try (CSVParser parser = CSVFormat.DEFAULT.withHeader("X", "Y", "Z").withSkipHeaderRecord().parse(in)) {
final Iterator records = parser.iterator();
@@ -1692,7 +1692,7 @@ public void testSkipSetAltHeaders() throws Exception {
}
@Test
- public void testSkipSetHeader() throws Exception {
+ void testSkipSetHeader() throws Exception {
final Reader in = new StringReader("a,b,c\n1,2,3\nx,y,z");
try (CSVParser parser = CSVFormat.DEFAULT.withHeader("a", "b", "c").withSkipHeaderRecord().parse(in)) {
final Iterator records = parser.iterator();
@@ -1705,7 +1705,7 @@ public void testSkipSetHeader() throws Exception {
@Test
@Disabled
- public void testStartWithEmptyLinesThenHeaders() throws Exception {
+ void testStartWithEmptyLinesThenHeaders() throws Exception {
final String[] codes = { "\r\n\r\n\r\nhello,\r\n\r\n\r\n", "hello,\n\n\n", "hello,\"\"\r\n\r\n\r\n", "hello,\"\"\n\n\n" };
final String[][] res = { { "hello", "" }, { "" }, // Excel format does not ignore empty lines
{ "" } };
@@ -1722,7 +1722,7 @@ public void testStartWithEmptyLinesThenHeaders() throws Exception {
}
@Test
- public void testStream() throws Exception {
+ void testStream() throws Exception {
final Reader in = new StringReader("a,b,c\n1,2,3\nx,y,z");
try (CSVParser parser = CSVFormat.DEFAULT.parse(in)) {
final List list = parser.stream().collect(Collectors.toList());
@@ -1735,7 +1735,7 @@ public void testStream() throws Exception {
@ParameterizedTest
@ValueSource(longs = { -1, 0, 1, 2, 3, 4, Long.MAX_VALUE })
- public void testStreamMaxRows(final long maxRows) throws Exception {
+ void testStreamMaxRows(final long maxRows) throws Exception {
final Reader in = new StringReader("a,b,c\n1,2,3\nx,y,z");
try (CSVParser parser = CSVFormat.DEFAULT.builder().setMaxRows(maxRows).get().parse(in)) {
final List list = parser.stream().collect(Collectors.toList());
@@ -1751,7 +1751,7 @@ public void testStreamMaxRows(final long maxRows) throws Exception {
}
@Test
- public void testThrowExceptionWithLineAndPosition() throws IOException {
+ void testThrowExceptionWithLineAndPosition() throws IOException {
final String csvContent = "col1,col2,col3,col4,col5,col6,col7,col8,col9,col10\nrec1,rec2,rec3,rec4,rec5,rec6,rec7,rec8,\"\"rec9\"\",rec10";
final StringReader stringReader = new StringReader(csvContent);
// @formatter:off
@@ -1769,7 +1769,7 @@ public void testThrowExceptionWithLineAndPosition() throws IOException {
}
@Test
- public void testTrailingDelimiter() throws Exception {
+ void testTrailingDelimiter() throws Exception {
final Reader in = new StringReader("a,a,a,\n\"1\",\"2\",\"3\",\nx,y,z,");
try (CSVParser parser = CSVFormat.DEFAULT.withHeader("X", "Y", "Z").withSkipHeaderRecord().withTrailingDelimiter().parse(in)) {
final Iterator records = parser.iterator();
@@ -1782,7 +1782,7 @@ public void testTrailingDelimiter() throws Exception {
}
@Test
- public void testTrim() throws Exception {
+ void testTrim() throws Exception {
final Reader in = new StringReader("a,a,a\n\" 1 \",\" 2 \",\" 3 \"\nx,y,z");
try (CSVParser parser = CSVFormat.DEFAULT.withHeader("X", "Y", "Z").withSkipHeaderRecord().withTrim().parse(in)) {
final Iterator records = parser.iterator();
diff --git a/src/test/java/org/apache/commons/csv/CSVPrinterTest.java b/src/test/java/org/apache/commons/csv/CSVPrinterTest.java
index a1a59cf4f..d9d751987 100644
--- a/src/test/java/org/apache/commons/csv/CSVPrinterTest.java
+++ b/src/test/java/org/apache/commons/csv/CSVPrinterTest.java
@@ -265,7 +265,7 @@ private void setUpTable(final Connection connection) throws SQLException {
}
@Test
- public void testCloseBackwardCompatibility() throws IOException {
+ void testCloseBackwardCompatibility() throws IOException {
try (Writer writer = mock(Writer.class)) {
final CSVFormat csvFormat = CSVFormat.DEFAULT;
try (CSVPrinter printer = new CSVPrinter(writer, csvFormat)) {
@@ -277,7 +277,7 @@ public void testCloseBackwardCompatibility() throws IOException {
}
@Test
- public void testCloseWithCsvFormatAutoFlushOff() throws IOException {
+ void testCloseWithCsvFormatAutoFlushOff() throws IOException {
try (Writer writer = mock(Writer.class)) {
final CSVFormat csvFormat = CSVFormat.DEFAULT.withAutoFlush(false);
try (CSVPrinter printer = new CSVPrinter(writer, csvFormat)) {
@@ -289,7 +289,7 @@ public void testCloseWithCsvFormatAutoFlushOff() throws IOException {
}
@Test
- public void testCloseWithCsvFormatAutoFlushOn() throws IOException {
+ void testCloseWithCsvFormatAutoFlushOn() throws IOException {
// System.out.println("start method");
try (Writer writer = mock(Writer.class)) {
final CSVFormat csvFormat = CSVFormat.DEFAULT.withAutoFlush(true);
@@ -302,7 +302,7 @@ public void testCloseWithCsvFormatAutoFlushOn() throws IOException {
}
@Test
- public void testCloseWithFlushOff() throws IOException {
+ void testCloseWithFlushOff() throws IOException {
try (Writer writer = mock(Writer.class)) {
final CSVFormat csvFormat = CSVFormat.DEFAULT;
@SuppressWarnings("resource")
@@ -316,7 +316,7 @@ public void testCloseWithFlushOff() throws IOException {
}
@Test
- public void testCloseWithFlushOn() throws IOException {
+ void testCloseWithFlushOn() throws IOException {
try (Writer writer = mock(Writer.class)) {
@SuppressWarnings("resource")
final CSVPrinter printer = new CSVPrinter(writer, CSVFormat.DEFAULT);
@@ -328,7 +328,7 @@ public void testCloseWithFlushOn() throws IOException {
}
@Test
- public void testCRComment() throws IOException {
+ void testCRComment() throws IOException {
final StringWriter sw = new StringWriter();
final Object value = "abc";
try (CSVPrinter printer = new CSVPrinter(sw, CSVFormat.DEFAULT.withCommentMarker('#'))) {
@@ -343,7 +343,7 @@ public void testCRComment() throws IOException {
}
@Test
- public void testCSV135() throws IOException {
+ void testCSV135() throws IOException {
final List list = new LinkedList<>();
list.add("\"\""); // ""
list.add("\\\\"); // \\
@@ -366,7 +366,7 @@ public void testCSV135() throws IOException {
}
@Test
- public void testCSV259() throws IOException {
+ void testCSV259() throws IOException {
final StringWriter sw = new StringWriter();
try (Reader reader = new FileReader("src/test/resources/org/apache/commons/csv/CSV-259/sample.txt");
CSVPrinter printer = new CSVPrinter(sw, CSVFormat.DEFAULT.withEscape('!').withQuote(null))) {
@@ -377,7 +377,7 @@ public void testCSV259() throws IOException {
}
@Test
- public void testDelimeterQuoted() throws IOException {
+ void testDelimeterQuoted() throws IOException {
final StringWriter sw = new StringWriter();
try (CSVPrinter printer = new CSVPrinter(sw, CSVFormat.DEFAULT.withQuote('\''))) {
assertInitialState(printer);
@@ -388,7 +388,7 @@ public void testDelimeterQuoted() throws IOException {
}
@Test
- public void testDelimeterQuoteNone() throws IOException {
+ void testDelimeterQuoteNone() throws IOException {
final StringWriter sw = new StringWriter();
final CSVFormat format = CSVFormat.DEFAULT.withEscape('!').withQuoteMode(QuoteMode.NONE);
try (CSVPrinter printer = new CSVPrinter(sw, format)) {
@@ -400,7 +400,7 @@ public void testDelimeterQuoteNone() throws IOException {
}
@Test
- public void testDelimeterStringQuoted() throws IOException {
+ void testDelimeterStringQuoted() throws IOException {
final StringWriter sw = new StringWriter();
try (CSVPrinter printer = new CSVPrinter(sw, CSVFormat.DEFAULT.builder().setDelimiter("[|]").setQuote('\'').get())) {
assertInitialState(printer);
@@ -411,7 +411,7 @@ public void testDelimeterStringQuoted() throws IOException {
}
@Test
- public void testDelimeterStringQuoteNone() throws IOException {
+ void testDelimeterStringQuoteNone() throws IOException {
final StringWriter sw = new StringWriter();
final CSVFormat format = CSVFormat.DEFAULT.builder().setDelimiter("[|]").setEscape('!').setQuoteMode(QuoteMode.NONE).get();
try (CSVPrinter printer = new CSVPrinter(sw, format)) {
@@ -424,7 +424,7 @@ public void testDelimeterStringQuoteNone() throws IOException {
}
@Test
- public void testDelimiterEscaped() throws IOException {
+ void testDelimiterEscaped() throws IOException {
final StringWriter sw = new StringWriter();
try (CSVPrinter printer = new CSVPrinter(sw, CSVFormat.DEFAULT.withEscape('!').withQuote(null))) {
assertInitialState(printer);
@@ -435,7 +435,7 @@ public void testDelimiterEscaped() throws IOException {
}
@Test
- public void testDelimiterPlain() throws IOException {
+ void testDelimiterPlain() throws IOException {
final StringWriter sw = new StringWriter();
try (CSVPrinter printer = new CSVPrinter(sw, CSVFormat.DEFAULT.withQuote(null))) {
assertInitialState(printer);
@@ -446,7 +446,7 @@ public void testDelimiterPlain() throws IOException {
}
@Test
- public void testDelimiterStringEscaped() throws IOException {
+ void testDelimiterStringEscaped() throws IOException {
final StringWriter sw = new StringWriter();
try (CSVPrinter printer = new CSVPrinter(sw, CSVFormat.DEFAULT.builder().setDelimiter("|||").setEscape('!').setQuote(null).get())) {
assertInitialState(printer);
@@ -457,7 +457,7 @@ public void testDelimiterStringEscaped() throws IOException {
}
@Test
- public void testDisabledComment() throws IOException {
+ void testDisabledComment() throws IOException {
final StringWriter sw = new StringWriter();
try (CSVPrinter printer = new CSVPrinter(sw, CSVFormat.DEFAULT)) {
assertInitialState(printer);
@@ -468,7 +468,7 @@ public void testDisabledComment() throws IOException {
}
@Test
- public void testDontQuoteEuroFirstChar() throws IOException {
+ void testDontQuoteEuroFirstChar() throws IOException {
final StringWriter sw = new StringWriter();
try (CSVPrinter printer = new CSVPrinter(sw, CSVFormat.RFC4180)) {
assertInitialState(printer);
@@ -478,7 +478,7 @@ public void testDontQuoteEuroFirstChar() throws IOException {
}
@Test
- public void testEolEscaped() throws IOException {
+ void testEolEscaped() throws IOException {
final StringWriter sw = new StringWriter();
try (CSVPrinter printer = new CSVPrinter(sw, CSVFormat.DEFAULT.withQuote(null).withEscape('!'))) {
assertInitialState(printer);
@@ -489,7 +489,7 @@ public void testEolEscaped() throws IOException {
}
@Test
- public void testEolPlain() throws IOException {
+ void testEolPlain() throws IOException {
final StringWriter sw = new StringWriter();
try (CSVPrinter printer = new CSVPrinter(sw, CSVFormat.DEFAULT.withQuote(null))) {
assertInitialState(printer);
@@ -500,7 +500,7 @@ public void testEolPlain() throws IOException {
}
@Test
- public void testEolQuoted() throws IOException {
+ void testEolQuoted() throws IOException {
final StringWriter sw = new StringWriter();
try (CSVPrinter printer = new CSVPrinter(sw, CSVFormat.DEFAULT.withQuote('\''))) {
assertInitialState(printer);
@@ -512,7 +512,7 @@ public void testEolQuoted() throws IOException {
@SuppressWarnings("unlikely-arg-type")
@Test
- public void testEquals() throws IOException {
+ void testEquals() throws IOException {
// Don't use assertNotEquals here
assertFalse(CSVFormat.DEFAULT.equals(null));
// Don't use assertNotEquals here
@@ -520,7 +520,7 @@ public void testEquals() throws IOException {
}
@Test
- public void testEscapeBackslash1() throws IOException {
+ void testEscapeBackslash1() throws IOException {
final StringWriter sw = new StringWriter();
try (CSVPrinter printer = new CSVPrinter(sw, CSVFormat.DEFAULT.withQuote(QUOTE_CH))) {
assertInitialState(printer);
@@ -530,7 +530,7 @@ public void testEscapeBackslash1() throws IOException {
}
@Test
- public void testEscapeBackslash2() throws IOException {
+ void testEscapeBackslash2() throws IOException {
final StringWriter sw = new StringWriter();
try (CSVPrinter printer = new CSVPrinter(sw, CSVFormat.DEFAULT.withQuote(QUOTE_CH))) {
assertInitialState(printer);
@@ -540,7 +540,7 @@ public void testEscapeBackslash2() throws IOException {
}
@Test
- public void testEscapeBackslash3() throws IOException {
+ void testEscapeBackslash3() throws IOException {
final StringWriter sw = new StringWriter();
try (CSVPrinter printer = new CSVPrinter(sw, CSVFormat.DEFAULT.withQuote(QUOTE_CH))) {
assertInitialState(printer);
@@ -550,7 +550,7 @@ public void testEscapeBackslash3() throws IOException {
}
@Test
- public void testEscapeBackslash4() throws IOException {
+ void testEscapeBackslash4() throws IOException {
final StringWriter sw = new StringWriter();
try (CSVPrinter printer = new CSVPrinter(sw, CSVFormat.DEFAULT.withQuote(QUOTE_CH))) {
assertInitialState(printer);
@@ -560,7 +560,7 @@ public void testEscapeBackslash4() throws IOException {
}
@Test
- public void testEscapeBackslash5() throws IOException {
+ void testEscapeBackslash5() throws IOException {
final StringWriter sw = new StringWriter();
try (CSVPrinter printer = new CSVPrinter(sw, CSVFormat.DEFAULT.withQuote(QUOTE_CH))) {
assertInitialState(printer);
@@ -570,7 +570,7 @@ public void testEscapeBackslash5() throws IOException {
}
@Test
- public void testEscapeNull1() throws IOException {
+ void testEscapeNull1() throws IOException {
final StringWriter sw = new StringWriter();
try (CSVPrinter printer = new CSVPrinter(sw, CSVFormat.DEFAULT.withEscape(null))) {
assertInitialState(printer);
@@ -580,7 +580,7 @@ public void testEscapeNull1() throws IOException {
}
@Test
- public void testEscapeNull2() throws IOException {
+ void testEscapeNull2() throws IOException {
final StringWriter sw = new StringWriter();
try (CSVPrinter printer = new CSVPrinter(sw, CSVFormat.DEFAULT.withEscape(null))) {
assertInitialState(printer);
@@ -590,7 +590,7 @@ public void testEscapeNull2() throws IOException {
}
@Test
- public void testEscapeNull3() throws IOException {
+ void testEscapeNull3() throws IOException {
final StringWriter sw = new StringWriter();
try (CSVPrinter printer = new CSVPrinter(sw, CSVFormat.DEFAULT.withEscape(null))) {
assertInitialState(printer);
@@ -600,7 +600,7 @@ public void testEscapeNull3() throws IOException {
}
@Test
- public void testEscapeNull4() throws IOException {
+ void testEscapeNull4() throws IOException {
final StringWriter sw = new StringWriter();
try (CSVPrinter printer = new CSVPrinter(sw, CSVFormat.DEFAULT.withEscape(null))) {
assertInitialState(printer);
@@ -610,7 +610,7 @@ public void testEscapeNull4() throws IOException {
}
@Test
- public void testEscapeNull5() throws IOException {
+ void testEscapeNull5() throws IOException {
final StringWriter sw = new StringWriter();
try (CSVPrinter printer = new CSVPrinter(sw, CSVFormat.DEFAULT.withEscape(null))) {
assertInitialState(printer);
@@ -620,7 +620,7 @@ public void testEscapeNull5() throws IOException {
}
@Test
- public void testExcelPrintAllArrayOfArrays() throws IOException {
+ void testExcelPrintAllArrayOfArrays() throws IOException {
final StringWriter sw = new StringWriter();
try (CSVPrinter printer = new CSVPrinter(sw, CSVFormat.EXCEL)) {
assertInitialState(printer);
@@ -630,7 +630,7 @@ public void testExcelPrintAllArrayOfArrays() throws IOException {
}
@Test
- public void testExcelPrintAllArrayOfArraysWithFirstEmptyValue2() throws IOException {
+ void testExcelPrintAllArrayOfArraysWithFirstEmptyValue2() throws IOException {
final StringWriter sw = new StringWriter();
try (CSVPrinter printer = new CSVPrinter(sw, CSVFormat.EXCEL)) {
assertInitialState(printer);
@@ -640,7 +640,7 @@ public void testExcelPrintAllArrayOfArraysWithFirstEmptyValue2() throws IOExcept
}
@Test
- public void testExcelPrintAllArrayOfArraysWithFirstSpaceValue1() throws IOException {
+ void testExcelPrintAllArrayOfArraysWithFirstSpaceValue1() throws IOException {
final StringWriter sw = new StringWriter();
try (CSVPrinter printer = new CSVPrinter(sw, CSVFormat.EXCEL)) {
assertInitialState(printer);
@@ -650,7 +650,7 @@ public void testExcelPrintAllArrayOfArraysWithFirstSpaceValue1() throws IOExcept
}
@Test
- public void testExcelPrintAllArrayOfArraysWithFirstTabValue1() throws IOException {
+ void testExcelPrintAllArrayOfArraysWithFirstTabValue1() throws IOException {
final StringWriter sw = new StringWriter();
try (CSVPrinter printer = new CSVPrinter(sw, CSVFormat.EXCEL)) {
assertInitialState(printer);
@@ -660,7 +660,7 @@ public void testExcelPrintAllArrayOfArraysWithFirstTabValue1() throws IOExceptio
}
@Test
- public void testExcelPrintAllArrayOfLists() throws IOException {
+ void testExcelPrintAllArrayOfLists() throws IOException {
final StringWriter sw = new StringWriter();
try (CSVPrinter printer = new CSVPrinter(sw, CSVFormat.EXCEL)) {
assertInitialState(printer);
@@ -670,7 +670,7 @@ public void testExcelPrintAllArrayOfLists() throws IOException {
}
@Test
- public void testExcelPrintAllArrayOfListsWithFirstEmptyValue2() throws IOException {
+ void testExcelPrintAllArrayOfListsWithFirstEmptyValue2() throws IOException {
final StringWriter sw = new StringWriter();
try (CSVPrinter printer = new CSVPrinter(sw, CSVFormat.EXCEL)) {
assertInitialState(printer);
@@ -680,7 +680,7 @@ public void testExcelPrintAllArrayOfListsWithFirstEmptyValue2() throws IOExcepti
}
@Test
- public void testExcelPrintAllIterableOfArrays() throws IOException {
+ void testExcelPrintAllIterableOfArrays() throws IOException {
final StringWriter sw = new StringWriter();
try (CSVPrinter printer = new CSVPrinter(sw, CSVFormat.EXCEL)) {
assertInitialState(printer);
@@ -690,7 +690,7 @@ public void testExcelPrintAllIterableOfArrays() throws IOException {
}
@Test
- public void testExcelPrintAllIterableOfArraysWithFirstEmptyValue2() throws IOException {
+ void testExcelPrintAllIterableOfArraysWithFirstEmptyValue2() throws IOException {
final StringWriter sw = new StringWriter();
try (CSVPrinter printer = new CSVPrinter(sw, CSVFormat.EXCEL)) {
assertInitialState(printer);
@@ -700,7 +700,7 @@ public void testExcelPrintAllIterableOfArraysWithFirstEmptyValue2() throws IOExc
}
@Test
- public void testExcelPrintAllIterableOfLists() throws IOException {
+ void testExcelPrintAllIterableOfLists() throws IOException {
final StringWriter sw = new StringWriter();
try (CSVPrinter printer = new CSVPrinter(sw, CSVFormat.EXCEL)) {
assertInitialState(printer);
@@ -711,7 +711,7 @@ public void testExcelPrintAllIterableOfLists() throws IOException {
@ParameterizedTest
@ValueSource(longs = { -1, 0, 1, 2, Long.MAX_VALUE })
- public void testExcelPrintAllStreamOfArrays(final long maxRows) throws IOException {
+ void testExcelPrintAllStreamOfArrays(final long maxRows) throws IOException {
final StringWriter sw = new StringWriter();
final CSVFormat format = CSVFormat.EXCEL.builder().setMaxRows(maxRows).get();
try (CSVPrinter printer = new CSVPrinter(sw, format)) {
@@ -726,7 +726,7 @@ public void testExcelPrintAllStreamOfArrays(final long maxRows) throws IOExcepti
}
@Test
- public void testExcelPrinter1() throws IOException {
+ void testExcelPrinter1() throws IOException {
final StringWriter sw = new StringWriter();
try (CSVPrinter printer = new CSVPrinter(sw, CSVFormat.EXCEL)) {
assertInitialState(printer);
@@ -736,7 +736,7 @@ public void testExcelPrinter1() throws IOException {
}
@Test
- public void testExcelPrinter2() throws IOException {
+ void testExcelPrinter2() throws IOException {
final StringWriter sw = new StringWriter();
try (CSVPrinter printer = new CSVPrinter(sw, CSVFormat.EXCEL)) {
assertInitialState(printer);
@@ -746,7 +746,7 @@ public void testExcelPrinter2() throws IOException {
}
@Test
- public void testHeader() throws IOException {
+ void testHeader() throws IOException {
final StringWriter sw = new StringWriter();
try (CSVPrinter printer = new CSVPrinter(sw, CSVFormat.DEFAULT.withQuote(null).withHeader("C1", "C2", "C3"))) {
assertEquals(1, printer.getRecordCount());
@@ -757,7 +757,7 @@ public void testHeader() throws IOException {
}
@Test
- public void testHeaderCommentExcel() throws IOException {
+ void testHeaderCommentExcel() throws IOException {
final StringWriter sw = new StringWriter();
final Date now = new Date();
final CSVFormat format = CSVFormat.EXCEL;
@@ -767,7 +767,7 @@ public void testHeaderCommentExcel() throws IOException {
}
@Test
- public void testHeaderCommentTdf() throws IOException {
+ void testHeaderCommentTdf() throws IOException {
final StringWriter sw = new StringWriter();
final Date now = new Date();
final CSVFormat format = CSVFormat.TDF;
@@ -777,7 +777,7 @@ public void testHeaderCommentTdf() throws IOException {
}
@Test
- public void testHeaderNotSet() throws IOException {
+ void testHeaderNotSet() throws IOException {
final StringWriter sw = new StringWriter();
try (CSVPrinter printer = new CSVPrinter(sw, CSVFormat.DEFAULT.withQuote(null))) {
assertInitialState(printer);
@@ -788,12 +788,12 @@ public void testHeaderNotSet() throws IOException {
}
@Test
- public void testInvalidFormat() {
+ void testInvalidFormat() {
assertThrows(IllegalArgumentException.class, () -> CSVFormat.DEFAULT.withDelimiter(CR));
}
@Test
- public void testJdbcPrinter() throws IOException, ClassNotFoundException, SQLException {
+ void testJdbcPrinter() throws IOException, ClassNotFoundException, SQLException {
final StringWriter sw = new StringWriter();
final CSVFormat csvFormat = CSVFormat.DEFAULT;
try (Connection connection = getH2Connection()) {
@@ -827,7 +827,7 @@ record = csvParser.nextRecord();
}
@Test
- public void testJdbcPrinterWithFirstEmptyValue2() throws IOException, ClassNotFoundException, SQLException {
+ void testJdbcPrinterWithFirstEmptyValue2() throws IOException, ClassNotFoundException, SQLException {
final StringWriter sw = new StringWriter();
try (Connection connection = getH2Connection()) {
try (Statement stmt = connection.createStatement();
@@ -841,7 +841,7 @@ public void testJdbcPrinterWithFirstEmptyValue2() throws IOException, ClassNotFo
@ParameterizedTest
@ValueSource(longs = { -1, 0, 1, 2, 3, 4, Long.MAX_VALUE })
- public void testJdbcPrinterWithResultSet(final long maxRows) throws IOException, ClassNotFoundException, SQLException {
+ void testJdbcPrinterWithResultSet(final long maxRows) throws IOException, ClassNotFoundException, SQLException {
final StringWriter sw = new StringWriter();
final CSVFormat format = CSVFormat.DEFAULT.builder().setMaxRows(maxRows).get();
try (Connection connection = getH2Connection()) {
@@ -869,7 +869,7 @@ public void testJdbcPrinterWithResultSet(final long maxRows) throws IOException,
@ParameterizedTest
@ValueSource(longs = { -1, 0, 3, 4, Long.MAX_VALUE })
- public void testJdbcPrinterWithResultSetHeader(final long maxRows) throws IOException, ClassNotFoundException, SQLException {
+ void testJdbcPrinterWithResultSetHeader(final long maxRows) throws IOException, ClassNotFoundException, SQLException {
final StringWriter sw = new StringWriter();
try (Connection connection = getH2Connection()) {
setUpTable(connection);
@@ -894,7 +894,7 @@ public void testJdbcPrinterWithResultSetHeader(final long maxRows) throws IOExce
@ParameterizedTest
@ValueSource(longs = { -1, 0, 3, 4, Long.MAX_VALUE })
- public void testJdbcPrinterWithResultSetMetaData(final long maxRows) throws IOException, ClassNotFoundException, SQLException {
+ void testJdbcPrinterWithResultSetMetaData(final long maxRows) throws IOException, ClassNotFoundException, SQLException {
final StringWriter sw = new StringWriter();
try (Connection connection = getH2Connection()) {
setUpTable(connection);
@@ -914,7 +914,7 @@ public void testJdbcPrinterWithResultSetMetaData(final long maxRows) throws IOEx
}
@Test
- public void testJira135_part1() throws IOException {
+ void testJira135_part1() throws IOException {
final CSVFormat format = CSVFormat.DEFAULT.withRecordSeparator('\n').withQuote(DQUOTE_CHAR).withEscape(BACKSLASH);
final StringWriter sw = new StringWriter();
final List list = new LinkedList<>();
@@ -930,7 +930,7 @@ public void testJira135_part1() throws IOException {
@Test
@Disabled
- public void testJira135_part2() throws IOException {
+ void testJira135_part2() throws IOException {
final CSVFormat format = CSVFormat.DEFAULT.withRecordSeparator('\n').withQuote(DQUOTE_CHAR).withEscape(BACKSLASH);
final StringWriter sw = new StringWriter();
final List list = new LinkedList<>();
@@ -945,7 +945,7 @@ public void testJira135_part2() throws IOException {
}
@Test
- public void testJira135_part3() throws IOException {
+ void testJira135_part3() throws IOException {
final CSVFormat format = CSVFormat.DEFAULT.withRecordSeparator('\n').withQuote(DQUOTE_CHAR).withEscape(BACKSLASH);
final StringWriter sw = new StringWriter();
final List list = new LinkedList<>();
@@ -961,7 +961,7 @@ public void testJira135_part3() throws IOException {
@Test
@Disabled
- public void testJira135All() throws IOException {
+ void testJira135All() throws IOException {
final CSVFormat format = CSVFormat.DEFAULT.withRecordSeparator('\n').withQuote(DQUOTE_CHAR).withEscape(BACKSLASH);
final StringWriter sw = new StringWriter();
final List list = new LinkedList<>();
@@ -978,7 +978,7 @@ public void testJira135All() throws IOException {
}
@Test
- public void testMongoDbCsvBasic() throws IOException {
+ void testMongoDbCsvBasic() throws IOException {
final StringWriter sw = new StringWriter();
try (CSVPrinter printer = new CSVPrinter(sw, CSVFormat.MONGODB_CSV)) {
printer.printRecord("a", "b");
@@ -988,7 +988,7 @@ public void testMongoDbCsvBasic() throws IOException {
}
@Test
- public void testMongoDbCsvCommaInValue() throws IOException {
+ void testMongoDbCsvCommaInValue() throws IOException {
final StringWriter sw = new StringWriter();
try (CSVPrinter printer = new CSVPrinter(sw, CSVFormat.MONGODB_CSV)) {
printer.printRecord("a,b", "c");
@@ -998,7 +998,7 @@ public void testMongoDbCsvCommaInValue() throws IOException {
}
@Test
- public void testMongoDbCsvDoubleQuoteInValue() throws IOException {
+ void testMongoDbCsvDoubleQuoteInValue() throws IOException {
final StringWriter sw = new StringWriter();
try (CSVPrinter printer = new CSVPrinter(sw, CSVFormat.MONGODB_CSV)) {
printer.printRecord("a \"c\" b", "d");
@@ -1008,7 +1008,7 @@ public void testMongoDbCsvDoubleQuoteInValue() throws IOException {
}
@Test
- public void testMongoDbCsvTabInValue() throws IOException {
+ void testMongoDbCsvTabInValue() throws IOException {
final StringWriter sw = new StringWriter();
try (CSVPrinter printer = new CSVPrinter(sw, CSVFormat.MONGODB_CSV)) {
printer.printRecord("a\tb", "c");
@@ -1018,7 +1018,7 @@ public void testMongoDbCsvTabInValue() throws IOException {
}
@Test
- public void testMongoDbTsvBasic() throws IOException {
+ void testMongoDbTsvBasic() throws IOException {
final StringWriter sw = new StringWriter();
try (CSVPrinter printer = new CSVPrinter(sw, CSVFormat.MONGODB_TSV)) {
printer.printRecord("a", "b");
@@ -1028,7 +1028,7 @@ public void testMongoDbTsvBasic() throws IOException {
}
@Test
- public void testMongoDbTsvCommaInValue() throws IOException {
+ void testMongoDbTsvCommaInValue() throws IOException {
final StringWriter sw = new StringWriter();
try (CSVPrinter printer = new CSVPrinter(sw, CSVFormat.MONGODB_TSV)) {
printer.printRecord("a,b", "c");
@@ -1038,7 +1038,7 @@ public void testMongoDbTsvCommaInValue() throws IOException {
}
@Test
- public void testMongoDbTsvTabInValue() throws IOException {
+ void testMongoDbTsvTabInValue() throws IOException {
final StringWriter sw = new StringWriter();
try (CSVPrinter printer = new CSVPrinter(sw, CSVFormat.MONGODB_TSV)) {
printer.printRecord("a\tb", "c");
@@ -1047,7 +1047,7 @@ public void testMongoDbTsvTabInValue() throws IOException {
}
@Test
- public void testMultiLineComment() throws IOException {
+ void testMultiLineComment() throws IOException {
final StringWriter sw = new StringWriter();
try (CSVPrinter printer = new CSVPrinter(sw, CSVFormat.DEFAULT.withCommentMarker('#'))) {
printer.printComment("This is a comment\non multiple lines");
@@ -1057,7 +1057,7 @@ public void testMultiLineComment() throws IOException {
}
@Test
- public void testMySqlNullOutput() throws IOException {
+ void testMySqlNullOutput() throws IOException {
Object[] s = new String[] { "NULL", null };
CSVFormat format = CSVFormat.MYSQL.withQuote(DQUOTE_CHAR).withNullString("NULL").withQuoteMode(QuoteMode.NON_NUMERIC);
StringWriter writer = new StringWriter();
@@ -1159,22 +1159,22 @@ public void testMySqlNullOutput() throws IOException {
}
@Test
- public void testMySqlNullStringDefault() {
+ void testMySqlNullStringDefault() {
assertEquals("\\N", CSVFormat.MYSQL.getNullString());
}
@Test
- public void testNewCsvPrinterAppendableNullFormat() {
+ void testNewCsvPrinterAppendableNullFormat() {
assertThrows(NullPointerException.class, () -> new CSVPrinter(new StringWriter(), null));
}
@Test
- public void testNewCsvPrinterNullAppendableFormat() {
+ void testNewCsvPrinterNullAppendableFormat() {
assertThrows(NullPointerException.class, () -> new CSVPrinter(null, CSVFormat.DEFAULT));
}
@Test
- public void testNotFlushable() throws IOException {
+ void testNotFlushable() throws IOException {
final Appendable out = new StringBuilder();
try (CSVPrinter printer = new CSVPrinter(out, CSVFormat.DEFAULT)) {
printer.printRecord("a", "b", "c");
@@ -1184,7 +1184,7 @@ public void testNotFlushable() throws IOException {
}
@Test
- public void testParseCustomNullValues() throws IOException {
+ void testParseCustomNullValues() throws IOException {
final StringWriter sw = new StringWriter();
final CSVFormat format = CSVFormat.DEFAULT.withNullString("NULL");
try (CSVPrinter printer = new CSVPrinter(sw, format)) {
@@ -1203,7 +1203,7 @@ public void testParseCustomNullValues() throws IOException {
}
@Test
- public void testPlainEscaped() throws IOException {
+ void testPlainEscaped() throws IOException {
final StringWriter sw = new StringWriter();
try (CSVPrinter printer = new CSVPrinter(sw, CSVFormat.DEFAULT.withQuote(null).withEscape('!'))) {
printer.print("abc");
@@ -1213,7 +1213,7 @@ public void testPlainEscaped() throws IOException {
}
@Test
- public void testPlainPlain() throws IOException {
+ void testPlainPlain() throws IOException {
final StringWriter sw = new StringWriter();
try (CSVPrinter printer = new CSVPrinter(sw, CSVFormat.DEFAULT.withQuote(null))) {
printer.print("abc");
@@ -1223,7 +1223,7 @@ public void testPlainPlain() throws IOException {
}
@Test
- public void testPlainQuoted() throws IOException {
+ void testPlainQuoted() throws IOException {
final StringWriter sw = new StringWriter();
try (CSVPrinter printer = new CSVPrinter(sw, CSVFormat.DEFAULT.withQuote('\''))) {
printer.print("abc");
@@ -1233,7 +1233,7 @@ public void testPlainQuoted() throws IOException {
@Test
@Disabled
- public void testPostgreSqlCsvNullOutput() throws IOException {
+ void testPostgreSqlCsvNullOutput() throws IOException {
Object[] s = new String[] { "NULL", null };
CSVFormat format = CSVFormat.POSTGRESQL_CSV.withQuote(DQUOTE_CHAR).withNullString("NULL").withQuoteMode(QuoteMode.ALL_NON_NULL);
StringWriter writer = new StringWriter();
@@ -1336,7 +1336,7 @@ public void testPostgreSqlCsvNullOutput() throws IOException {
@Test
@Disabled
- public void testPostgreSqlCsvTextOutput() throws IOException {
+ void testPostgreSqlCsvTextOutput() throws IOException {
Object[] s = new String[] { "NULL", null };
CSVFormat format = CSVFormat.POSTGRESQL_TEXT.withQuote(DQUOTE_CHAR).withNullString("NULL").withQuoteMode(QuoteMode.ALL_NON_NULL);
StringWriter writer = new StringWriter();
@@ -1438,17 +1438,17 @@ public void testPostgreSqlCsvTextOutput() throws IOException {
}
@Test
- public void testPostgreSqlNullStringDefaultCsv() {
+ void testPostgreSqlNullStringDefaultCsv() {
assertEquals("", CSVFormat.POSTGRESQL_CSV.getNullString());
}
@Test
- public void testPostgreSqlNullStringDefaultText() {
+ void testPostgreSqlNullStringDefaultText() {
assertEquals("\\N", CSVFormat.POSTGRESQL_TEXT.getNullString());
}
@Test
- public void testPrint() throws IOException {
+ void testPrint() throws IOException {
final StringWriter sw = new StringWriter();
try (CSVPrinter printer = CSVFormat.DEFAULT.print(sw)) {
assertInitialState(printer);
@@ -1458,7 +1458,7 @@ public void testPrint() throws IOException {
}
@Test
- public void testPrintCSVParser() throws IOException {
+ void testPrintCSVParser() throws IOException {
// @formatter:off
final String code = "a1,b1\n" + // 1)
"a2,b2\n" + // 2)
@@ -1481,7 +1481,7 @@ public void testPrintCSVParser() throws IOException {
}
@Test
- public void testPrintCSVRecord() throws IOException {
+ void testPrintCSVRecord() throws IOException {
// @formatter:off
final String code = "a1,b1\n" + // 1)
"a2,b2\n" + // 2)
@@ -1510,7 +1510,7 @@ public void testPrintCSVRecord() throws IOException {
@ParameterizedTest
@ValueSource(longs = { -1, 0, 3, 4, Long.MAX_VALUE })
- public void testPrintCSVRecords(final long maxRows) throws IOException {
+ void testPrintCSVRecords(final long maxRows) throws IOException {
// @formatter:off
final String code = "a1,b1\n" + // 1)
"a2,b2\n" + // 2)
@@ -1533,7 +1533,7 @@ public void testPrintCSVRecords(final long maxRows) throws IOException {
}
@Test
- public void testPrintCustomNullValues() throws IOException {
+ void testPrintCustomNullValues() throws IOException {
final StringWriter sw = new StringWriter();
try (CSVPrinter printer = new CSVPrinter(sw, CSVFormat.DEFAULT.withNullString("NULL"))) {
assertInitialState(printer);
@@ -1543,7 +1543,7 @@ public void testPrintCustomNullValues() throws IOException {
}
@Test
- public void testPrinter1() throws IOException {
+ void testPrinter1() throws IOException {
final StringWriter sw = new StringWriter();
try (CSVPrinter printer = new CSVPrinter(sw, CSVFormat.DEFAULT)) {
assertInitialState(printer);
@@ -1554,7 +1554,7 @@ public void testPrinter1() throws IOException {
}
@Test
- public void testPrinter2() throws IOException {
+ void testPrinter2() throws IOException {
final StringWriter sw = new StringWriter();
try (CSVPrinter printer = new CSVPrinter(sw, CSVFormat.DEFAULT)) {
assertInitialState(printer);
@@ -1564,7 +1564,7 @@ public void testPrinter2() throws IOException {
}
@Test
- public void testPrinter3() throws IOException {
+ void testPrinter3() throws IOException {
final StringWriter sw = new StringWriter();
try (CSVPrinter printer = new CSVPrinter(sw, CSVFormat.DEFAULT)) {
assertInitialState(printer);
@@ -1574,7 +1574,7 @@ public void testPrinter3() throws IOException {
}
@Test
- public void testPrinter4() throws IOException {
+ void testPrinter4() throws IOException {
final StringWriter sw = new StringWriter();
try (CSVPrinter printer = new CSVPrinter(sw, CSVFormat.DEFAULT)) {
assertInitialState(printer);
@@ -1584,7 +1584,7 @@ public void testPrinter4() throws IOException {
}
@Test
- public void testPrinter5() throws IOException {
+ void testPrinter5() throws IOException {
final StringWriter sw = new StringWriter();
try (CSVPrinter printer = new CSVPrinter(sw, CSVFormat.DEFAULT)) {
assertInitialState(printer);
@@ -1594,7 +1594,7 @@ public void testPrinter5() throws IOException {
}
@Test
- public void testPrinter6() throws IOException {
+ void testPrinter6() throws IOException {
final StringWriter sw = new StringWriter();
try (CSVPrinter printer = new CSVPrinter(sw, CSVFormat.DEFAULT)) {
assertInitialState(printer);
@@ -1604,7 +1604,7 @@ public void testPrinter6() throws IOException {
}
@Test
- public void testPrinter7() throws IOException {
+ void testPrinter7() throws IOException {
final StringWriter sw = new StringWriter();
try (CSVPrinter printer = new CSVPrinter(sw, CSVFormat.DEFAULT)) {
assertInitialState(printer);
@@ -1614,7 +1614,7 @@ public void testPrinter7() throws IOException {
}
@Test
- public void testPrintNullValues() throws IOException {
+ void testPrintNullValues() throws IOException {
final StringWriter sw = new StringWriter();
try (CSVPrinter printer = new CSVPrinter(sw, CSVFormat.DEFAULT)) {
assertInitialState(printer);
@@ -1624,7 +1624,7 @@ public void testPrintNullValues() throws IOException {
}
@Test
- public void testPrintOnePositiveInteger() throws IOException {
+ void testPrintOnePositiveInteger() throws IOException {
final StringWriter sw = new StringWriter();
try (CSVPrinter printer = new CSVPrinter(sw, CSVFormat.DEFAULT.withQuoteMode(QuoteMode.MINIMAL))) {
assertInitialState(printer);
@@ -1644,7 +1644,7 @@ public void testPrintOnePositiveInteger() throws IOException {
* @throws IOException Not expected to happen
*/
@Test
- public void testPrintReaderWithoutQuoteToAppendable() throws IOException {
+ void testPrintReaderWithoutQuoteToAppendable() throws IOException {
final StringBuilder sb = new StringBuilder();
final String content = "testValue";
try (CSVPrinter printer = new CSVPrinter(sb, CSVFormat.DEFAULT.withQuote(null))) {
@@ -1665,7 +1665,7 @@ public void testPrintReaderWithoutQuoteToAppendable() throws IOException {
* @throws IOException Not expected to happen
*/
@Test
- public void testPrintReaderWithoutQuoteToWriter() throws IOException {
+ void testPrintReaderWithoutQuoteToWriter() throws IOException {
final StringWriter sw = new StringWriter();
final String content = "testValue";
try (CSVPrinter printer = new CSVPrinter(sw, CSVFormat.DEFAULT.withQuote(null))) {
@@ -1676,7 +1676,7 @@ public void testPrintReaderWithoutQuoteToWriter() throws IOException {
}
@Test
- public void testPrintRecordStream() throws IOException {
+ void testPrintRecordStream() throws IOException {
// @formatter:off
final String code = "a1,b1\n" + // 1)
"a2,b2\n" + // 2)
@@ -1702,7 +1702,7 @@ public void testPrintRecordStream() throws IOException {
}
@Test
- public void testPrintRecordsWithCSVRecord() throws IOException {
+ void testPrintRecordsWithCSVRecord() throws IOException {
final String[] values = { "A", "B", "C" };
final String rowData = StringUtils.join(values, ',');
final CharArrayWriter charArrayWriter = new CharArrayWriter(0);
@@ -1719,7 +1719,7 @@ public void testPrintRecordsWithCSVRecord() throws IOException {
}
@Test
- public void testPrintRecordsWithEmptyVector() throws IOException {
+ void testPrintRecordsWithEmptyVector() throws IOException {
final PrintStream out = System.out;
try {
System.setOut(new PrintStream(NullOutputStream.INSTANCE));
@@ -1737,7 +1737,7 @@ public void testPrintRecordsWithEmptyVector() throws IOException {
}
@Test
- public void testPrintRecordsWithObjectArray() throws IOException {
+ void testPrintRecordsWithObjectArray() throws IOException {
final CharArrayWriter charArrayWriter = new CharArrayWriter(0);
final Object[] objectArray = new Object[6];
try (CSVPrinter printer = CSVFormat.INFORMIX_UNLOAD.print(charArrayWriter)) {
@@ -1751,7 +1751,7 @@ public void testPrintRecordsWithObjectArray() throws IOException {
}
@Test
- public void testPrintRecordsWithResultSetOneRow() throws IOException, SQLException {
+ void testPrintRecordsWithResultSetOneRow() throws IOException, SQLException {
try (CSVPrinter printer = CSVFormat.MYSQL.printer()) {
try (ResultSet resultSet = new SimpleResultSet()) {
assertInitialState(printer);
@@ -1763,7 +1763,7 @@ public void testPrintRecordsWithResultSetOneRow() throws IOException, SQLExcepti
}
@Test
- public void testPrintToFileWithCharsetUtf16Be() throws IOException {
+ void testPrintToFileWithCharsetUtf16Be() throws IOException {
final File file = createTempFile();
try (CSVPrinter printer = CSVFormat.DEFAULT.print(file, StandardCharsets.UTF_16BE)) {
printer.printRecord("a", "b\\c");
@@ -1772,7 +1772,7 @@ public void testPrintToFileWithCharsetUtf16Be() throws IOException {
}
@Test
- public void testPrintToFileWithDefaultCharset() throws IOException {
+ void testPrintToFileWithDefaultCharset() throws IOException {
final File file = createTempFile();
try (CSVPrinter printer = CSVFormat.DEFAULT.print(file, Charset.defaultCharset())) {
printer.printRecord("a", "b\\c");
@@ -1781,7 +1781,7 @@ public void testPrintToFileWithDefaultCharset() throws IOException {
}
@Test
- public void testPrintToPathWithDefaultCharset() throws IOException {
+ void testPrintToPathWithDefaultCharset() throws IOException {
final Path file = createTempPath();
try (CSVPrinter printer = CSVFormat.DEFAULT.print(file, Charset.defaultCharset())) {
printer.printRecord("a", "b\\c");
@@ -1790,7 +1790,7 @@ public void testPrintToPathWithDefaultCharset() throws IOException {
}
@Test
- public void testQuoteAll() throws IOException {
+ void testQuoteAll() throws IOException {
final StringWriter sw = new StringWriter();
try (CSVPrinter printer = new CSVPrinter(sw, CSVFormat.DEFAULT.withQuoteMode(QuoteMode.ALL))) {
printer.printRecord("a", "b\nc", "d");
@@ -1799,7 +1799,7 @@ public void testQuoteAll() throws IOException {
}
@Test
- public void testQuoteCommaFirstChar() throws IOException {
+ void testQuoteCommaFirstChar() throws IOException {
final StringWriter sw = new StringWriter();
try (CSVPrinter printer = new CSVPrinter(sw, CSVFormat.RFC4180)) {
printer.printRecord(",");
@@ -1808,7 +1808,7 @@ public void testQuoteCommaFirstChar() throws IOException {
}
@Test
- public void testQuoteNonNumeric() throws IOException {
+ void testQuoteNonNumeric() throws IOException {
final StringWriter sw = new StringWriter();
try (CSVPrinter printer = new CSVPrinter(sw, CSVFormat.DEFAULT.withQuoteMode(QuoteMode.NON_NUMERIC))) {
printer.printRecord("a", "b\nc", Integer.valueOf(1));
@@ -1817,55 +1817,55 @@ public void testQuoteNonNumeric() throws IOException {
}
@Test
- public void testRandomDefault() throws Exception {
+ void testRandomDefault() throws Exception {
doRandom(CSVFormat.DEFAULT, ITERATIONS_FOR_RANDOM_TEST);
}
@Test
- public void testRandomExcel() throws Exception {
+ void testRandomExcel() throws Exception {
doRandom(CSVFormat.EXCEL, ITERATIONS_FOR_RANDOM_TEST);
}
@Test
@Disabled
- public void testRandomMongoDbCsv() throws Exception {
+ void testRandomMongoDbCsv() throws Exception {
doRandom(CSVFormat.MONGODB_CSV, ITERATIONS_FOR_RANDOM_TEST);
}
@Test
- public void testRandomMySql() throws Exception {
+ void testRandomMySql() throws Exception {
doRandom(CSVFormat.MYSQL, ITERATIONS_FOR_RANDOM_TEST);
}
@Test
@Disabled
- public void testRandomOracle() throws Exception {
+ void testRandomOracle() throws Exception {
doRandom(CSVFormat.ORACLE, ITERATIONS_FOR_RANDOM_TEST);
}
@Test
@Disabled
- public void testRandomPostgreSqlCsv() throws Exception {
+ void testRandomPostgreSqlCsv() throws Exception {
doRandom(CSVFormat.POSTGRESQL_CSV, ITERATIONS_FOR_RANDOM_TEST);
}
@Test
- public void testRandomPostgreSqlText() throws Exception {
+ void testRandomPostgreSqlText() throws Exception {
doRandom(CSVFormat.POSTGRESQL_TEXT, ITERATIONS_FOR_RANDOM_TEST);
}
@Test
- public void testRandomRfc4180() throws Exception {
+ void testRandomRfc4180() throws Exception {
doRandom(CSVFormat.RFC4180, ITERATIONS_FOR_RANDOM_TEST);
}
@Test
- public void testRandomTdf() throws Exception {
+ void testRandomTdf() throws Exception {
doRandom(CSVFormat.TDF, ITERATIONS_FOR_RANDOM_TEST);
}
@Test
- public void testSingleLineComment() throws IOException {
+ void testSingleLineComment() throws IOException {
final StringWriter sw = new StringWriter();
try (CSVPrinter printer = new CSVPrinter(sw, CSVFormat.DEFAULT.withCommentMarker('#'))) {
printer.printComment("This is a comment");
@@ -1875,7 +1875,7 @@ public void testSingleLineComment() throws IOException {
}
@Test
- public void testSingleQuoteQuoted() throws IOException {
+ void testSingleQuoteQuoted() throws IOException {
final StringWriter sw = new StringWriter();
try (CSVPrinter printer = new CSVPrinter(sw, CSVFormat.DEFAULT.withQuote('\''))) {
printer.print("a'b'c");
@@ -1885,7 +1885,7 @@ public void testSingleQuoteQuoted() throws IOException {
}
@Test
- public void testSkipHeaderRecordFalse() throws IOException {
+ void testSkipHeaderRecordFalse() throws IOException {
// functionally identical to testHeader, used to test CSV-153
final StringWriter sw = new StringWriter();
try (CSVPrinter printer = new CSVPrinter(sw, CSVFormat.DEFAULT.withQuote(null).withHeader("C1", "C2", "C3").withSkipHeaderRecord(false))) {
@@ -1896,7 +1896,7 @@ public void testSkipHeaderRecordFalse() throws IOException {
}
@Test
- public void testSkipHeaderRecordTrue() throws IOException {
+ void testSkipHeaderRecordTrue() throws IOException {
// functionally identical to testHeaderNotSet, used to test CSV-153
final StringWriter sw = new StringWriter();
try (CSVPrinter printer = new CSVPrinter(sw, CSVFormat.DEFAULT.withQuote(null).withHeader("C1", "C2", "C3").withSkipHeaderRecord(true))) {
@@ -1907,7 +1907,7 @@ public void testSkipHeaderRecordTrue() throws IOException {
}
@Test
- public void testTrailingDelimiterOnTwoColumns() throws IOException {
+ void testTrailingDelimiterOnTwoColumns() throws IOException {
final StringWriter sw = new StringWriter();
try (CSVPrinter printer = new CSVPrinter(sw, CSVFormat.DEFAULT.withTrailingDelimiter())) {
printer.printRecord("A", "B");
@@ -1916,7 +1916,7 @@ public void testTrailingDelimiterOnTwoColumns() throws IOException {
}
@Test
- public void testTrimOffOneColumn() throws IOException {
+ void testTrimOffOneColumn() throws IOException {
final StringWriter sw = new StringWriter();
try (CSVPrinter printer = new CSVPrinter(sw, CSVFormat.DEFAULT.withTrim(false))) {
printer.print(" A ");
@@ -1925,7 +1925,7 @@ public void testTrimOffOneColumn() throws IOException {
}
@Test
- public void testTrimOnOneColumn() throws IOException {
+ void testTrimOnOneColumn() throws IOException {
final StringWriter sw = new StringWriter();
try (CSVPrinter printer = new CSVPrinter(sw, CSVFormat.DEFAULT.withTrim())) {
printer.print(" A ");
@@ -1934,7 +1934,7 @@ public void testTrimOnOneColumn() throws IOException {
}
@Test
- public void testTrimOnTwoColumns() throws IOException {
+ void testTrimOnTwoColumns() throws IOException {
final StringWriter sw = new StringWriter();
try (CSVPrinter printer = new CSVPrinter(sw, CSVFormat.DEFAULT.withTrim())) {
printer.print(" A ");
diff --git a/src/test/java/org/apache/commons/csv/CSVRecordTest.java b/src/test/java/org/apache/commons/csv/CSVRecordTest.java
index f9fedc4b9..1c0e05d36 100644
--- a/src/test/java/org/apache/commons/csv/CSVRecordTest.java
+++ b/src/test/java/org/apache/commons/csv/CSVRecordTest.java
@@ -86,7 +86,7 @@ record = parser.iterator().next();
}
@Test
- public void testCSVRecordNULLValues() throws IOException {
+ void testCSVRecordNULLValues() throws IOException {
try (CSVParser parser = CSVParser.parse("A,B\r\nONE,TWO", CSVFormat.DEFAULT.withHeader())) {
final CSVRecord csvRecord = new CSVRecord(parser, null, null, 0L, 0L, 0L);
assertEquals(0, csvRecord.size());
@@ -95,7 +95,7 @@ public void testCSVRecordNULLValues() throws IOException {
}
@Test
- public void testDuplicateHeaderGet() throws IOException {
+ void testDuplicateHeaderGet() throws IOException {
final String csv = "A,A,B,B\n1,2,5,6\n";
final CSVFormat format = CSVFormat.DEFAULT.builder().setHeader().get();
@@ -110,7 +110,7 @@ public void testDuplicateHeaderGet() throws IOException {
}
@Test
- public void testDuplicateHeaderToMap() throws IOException {
+ void testDuplicateHeaderToMap() throws IOException {
final String csv = "A,A,B,B\n1,2,5,6\n";
final CSVFormat format = CSVFormat.DEFAULT.builder().setHeader().get();
@@ -126,64 +126,64 @@ public void testDuplicateHeaderToMap() throws IOException {
}
@Test
- public void testGetInt() {
+ void testGetInt() {
assertEquals(values[0], record.get(0));
assertEquals(values[1], record.get(1));
assertEquals(values[2], record.get(2));
}
@Test
- public void testGetNullEnum() {
+ void testGetNullEnum() {
assertThrows(IllegalArgumentException.class, () -> recordWithHeader.get((Enum>) null));
}
@Test
- public void testGetString() {
+ void testGetString() {
assertEquals(values[0], recordWithHeader.get(EnumHeader.FIRST.name()));
assertEquals(values[1], recordWithHeader.get(EnumHeader.SECOND.name()));
assertEquals(values[2], recordWithHeader.get(EnumHeader.THIRD.name()));
}
@Test
- public void testGetStringInconsistentRecord() {
+ void testGetStringInconsistentRecord() {
headerMap.put("fourth", Integer.valueOf(4));
assertThrows(IllegalArgumentException.class, () -> recordWithHeader.get("fourth"));
}
@Test
- public void testGetStringNoHeader() {
+ void testGetStringNoHeader() {
assertThrows(IllegalStateException.class, () -> record.get("first"));
}
@Test
- public void testGetUnmappedEnum() {
+ void testGetUnmappedEnum() {
assertThrows(IllegalArgumentException.class, () -> recordWithHeader.get(EnumFixture.UNKNOWN_COLUMN));
}
@Test
- public void testGetUnmappedName() {
+ void testGetUnmappedName() {
assertThrows(IllegalArgumentException.class, () -> assertNull(recordWithHeader.get("fourth")));
}
@Test
- public void testGetUnmappedNegativeInt() {
+ void testGetUnmappedNegativeInt() {
assertThrows(ArrayIndexOutOfBoundsException.class, () -> recordWithHeader.get(Integer.MIN_VALUE));
}
@Test
- public void testGetUnmappedPositiveInt() {
+ void testGetUnmappedPositiveInt() {
assertThrows(ArrayIndexOutOfBoundsException.class, () -> recordWithHeader.get(Integer.MAX_VALUE));
}
@Test
- public void testGetWithEnum() {
+ void testGetWithEnum() {
assertEquals(recordWithHeader.get("FIRST"), recordWithHeader.get(EnumHeader.FIRST));
assertEquals(recordWithHeader.get("SECOND"), recordWithHeader.get(EnumHeader.SECOND));
assertThrows(IllegalArgumentException.class, () -> recordWithHeader.get(EnumFixture.UNKNOWN_COLUMN));
}
@Test
- public void testIsConsistent() {
+ void testIsConsistent() {
assertTrue(record.isConsistent());
assertTrue(recordWithHeader.isConsistent());
final Map map = recordWithHeader.getParser().getHeaderMap();
@@ -193,7 +193,7 @@ public void testIsConsistent() {
}
@Test
- public void testIsInconsistent() throws IOException {
+ void testIsInconsistent() throws IOException {
final String[] headers = { "first", "second", "third" };
final String rowData = StringUtils.join(values, ',');
try (CSVParser parser = CSVFormat.DEFAULT.withHeader(headers).parse(new StringReader(rowData))) {
@@ -205,14 +205,14 @@ public void testIsInconsistent() throws IOException {
}
@Test
- public void testIsMapped() {
+ void testIsMapped() {
assertFalse(record.isMapped("first"));
assertTrue(recordWithHeader.isMapped(EnumHeader.FIRST.name()));
assertFalse(recordWithHeader.isMapped("fourth"));
}
@Test
- public void testIsSetInt() {
+ void testIsSetInt() {
assertFalse(record.isSet(-1));
assertTrue(record.isSet(0));
assertTrue(record.isSet(2));
@@ -222,14 +222,14 @@ public void testIsSetInt() {
}
@Test
- public void testIsSetString() {
+ void testIsSetString() {
assertFalse(record.isSet("first"));
assertTrue(recordWithHeader.isSet(EnumHeader.FIRST.name()));
assertFalse(recordWithHeader.isSet("DOES NOT EXIST"));
}
@Test
- public void testIterator() {
+ void testIterator() {
int i = 0;
for (final String value : record) {
assertEquals(values[i], value);
@@ -238,7 +238,7 @@ public void testIterator() {
}
@Test
- public void testPutInMap() {
+ void testPutInMap() {
final Map map = new ConcurrentHashMap<>();
this.recordWithHeader.putIn(map);
validateMap(map, false);
@@ -248,7 +248,7 @@ public void testPutInMap() {
}
@Test
- public void testRemoveAndAddColumns() throws IOException {
+ void testRemoveAndAddColumns() throws IOException {
// do:
try (CSVPrinter printer = new CSVPrinter(new StringBuilder(), CSVFormat.DEFAULT)) {
final Map map = recordWithHeader.toMap();
@@ -263,7 +263,7 @@ public void testRemoveAndAddColumns() throws IOException {
}
@Test
- public void testSerialization() throws IOException, ClassNotFoundException {
+ void testSerialization() throws IOException, ClassNotFoundException {
final CSVRecord shortRec;
try (CSVParser parser = CSVParser.parse("A,B\n#my comment\nOne,Two", CSVFormat.DEFAULT.withHeader().withCommentMarker('#'))) {
shortRec = parser.iterator().next();
@@ -296,7 +296,7 @@ public void testSerialization() throws IOException, ClassNotFoundException {
}
@Test
- public void testStream() {
+ void testStream() {
final AtomicInteger i = new AtomicInteger();
record.stream().forEach(value -> {
assertEquals(values[i.get()], value);
@@ -305,7 +305,7 @@ public void testStream() {
}
@Test
- public void testToListAdd() {
+ void testToListAdd() {
final String[] expected = values.clone();
final List list = record.toList();
list.add("Last");
@@ -315,7 +315,7 @@ public void testToListAdd() {
}
@Test
- public void testToListFor() {
+ void testToListFor() {
int i = 0;
for (final String value : record.toList()) {
assertEquals(values[i], value);
@@ -324,7 +324,7 @@ public void testToListFor() {
}
@Test
- public void testToListForEach() {
+ void testToListForEach() {
final AtomicInteger i = new AtomicInteger();
record.toList().forEach(e -> {
assertEquals(values[i.getAndIncrement()], e);
@@ -332,7 +332,7 @@ public void testToListForEach() {
}
@Test
- public void testToListSet() {
+ void testToListSet() {
final String[] expected = values.clone();
final List list = record.toList();
list.set(list.size() - 1, "Last");
@@ -342,13 +342,13 @@ public void testToListSet() {
}
@Test
- public void testToMap() {
+ void testToMap() {
final Map map = this.recordWithHeader.toMap();
validateMap(map, true);
}
@Test
- public void testToMapWithNoHeader() throws Exception {
+ void testToMapWithNoHeader() throws Exception {
try (CSVParser parser = CSVParser.parse("a,b", CSVFormat.newFormat(','))) {
final CSVRecord shortRec = parser.iterator().next();
final Map map = shortRec.toMap();
@@ -358,7 +358,7 @@ public void testToMapWithNoHeader() throws Exception {
}
@Test
- public void testToMapWithShortRecord() throws Exception {
+ void testToMapWithShortRecord() throws Exception {
try (CSVParser parser = CSVParser.parse("a,b", CSVFormat.DEFAULT.withHeader("A", "B", "C"))) {
final CSVRecord shortRec = parser.iterator().next();
shortRec.toMap();
@@ -366,7 +366,7 @@ public void testToMapWithShortRecord() throws Exception {
}
@Test
- public void testToString() {
+ void testToString() {
assertNotNull(recordWithHeader.toString());
assertTrue(recordWithHeader.toString().contains("comment="));
assertTrue(recordWithHeader.toString().contains("recordNumber="));
diff --git a/src/test/java/org/apache/commons/csv/ExtendedBufferedReaderTest.java b/src/test/java/org/apache/commons/csv/ExtendedBufferedReaderTest.java
index b7db39f52..9d929c655 100644
--- a/src/test/java/org/apache/commons/csv/ExtendedBufferedReaderTest.java
+++ b/src/test/java/org/apache/commons/csv/ExtendedBufferedReaderTest.java
@@ -44,7 +44,7 @@ private ExtendedBufferedReader createBufferedReader(final String s) {
}
@Test
- public void testEmptyInput() throws Exception {
+ void testEmptyInput() throws Exception {
try (ExtendedBufferedReader br = createBufferedReader("")) {
assertEquals(EOF, br.read());
assertEquals(EOF, br.peek());
@@ -58,7 +58,7 @@ public void testEmptyInput() throws Exception {
* Test to illustrate https://issues.apache.org/jira/browse/CSV-75
*/
@Test
- public void testReadChar() throws Exception {
+ void testReadChar() throws Exception {
final String test = "a" + LF + "b" + CR + "c" + LF + LF + "d" + CR + CR + "e" + LFCR + "f " + CRLF;
// EOL eol EOL EOL eol eol EOL+CR EOL
final int eolCount = 9;
@@ -94,7 +94,7 @@ public void testReadChar() throws Exception {
}
@Test
- public void testReadingInDifferentBuffer() throws Exception {
+ void testReadingInDifferentBuffer() throws Exception {
final char[] tmp1 = new char[2];
final char[] tmp2 = new char[4];
try (ExtendedBufferedReader reader = createBufferedReader("1\r\n2\r\n")) {
@@ -105,7 +105,7 @@ public void testReadingInDifferentBuffer() throws Exception {
}
@Test
- public void testReadLine() throws Exception {
+ void testReadLine() throws Exception {
try (ExtendedBufferedReader br = createBufferedReader("")) {
assertNull(br.readLine());
}
@@ -148,7 +148,7 @@ public void testReadLine() throws Exception {
}
@Test
- public void testReadLookahead1() throws Exception {
+ void testReadLookahead1() throws Exception {
try (ExtendedBufferedReader br = createBufferedReader("1\n2\r3\n")) {
assertEquals(0, br.getLineNumber());
assertEquals('1', br.peek());
@@ -207,7 +207,7 @@ public void testReadLookahead1() throws Exception {
}
@Test
- public void testReadLookahead2() throws Exception {
+ void testReadLookahead2() throws Exception {
final char[] ref = new char[5];
final char[] res = new char[5];
diff --git a/src/test/java/org/apache/commons/csv/JiraCsv196Test.java b/src/test/java/org/apache/commons/csv/JiraCsv196Test.java
index ef94efe0f..2beae36ad 100644
--- a/src/test/java/org/apache/commons/csv/JiraCsv196Test.java
+++ b/src/test/java/org/apache/commons/csv/JiraCsv196Test.java
@@ -35,7 +35,7 @@ private Reader getTestInput(final String path) {
}
@Test
- public void testParseFourBytes() throws IOException {
+ void testParseFourBytes() throws IOException {
final CSVFormat format = CSVFormat.Builder.create().setDelimiter(',').setQuote('\'').get();
// @formatter:off
try (@SuppressWarnings("resource") // parser closes the reader.
@@ -55,7 +55,7 @@ public void testParseFourBytes() throws IOException {
}
@Test
- public void testParseThreeBytes() throws IOException {
+ void testParseThreeBytes() throws IOException {
final CSVFormat format = CSVFormat.Builder.create().setDelimiter(',').setQuote('\'').get();
// @formatter:off
try (@SuppressWarnings("resource") // parser closes the reader.
diff --git a/src/test/java/org/apache/commons/csv/LexerTest.java b/src/test/java/org/apache/commons/csv/LexerTest.java
index 38ab12553..2c9742692 100644
--- a/src/test/java/org/apache/commons/csv/LexerTest.java
+++ b/src/test/java/org/apache/commons/csv/LexerTest.java
@@ -71,7 +71,7 @@ public void setUp() {
// simple token with escaping enabled
@Test
- public void testBackslashWithEscaping() throws IOException {
+ void testBackslashWithEscaping() throws IOException {
/*
* file: a,\,,b \,,
*/
@@ -91,7 +91,7 @@ public void testBackslashWithEscaping() throws IOException {
// simple token with escaping not enabled
@Test
- public void testBackslashWithoutEscaping() throws IOException {
+ void testBackslashWithoutEscaping() throws IOException {
/*
* file: a,\,,b \,,
*/
@@ -113,14 +113,14 @@ public void testBackslashWithoutEscaping() throws IOException {
}
@Test
- public void testBackspace() throws Exception {
+ void testBackspace() throws Exception {
try (Lexer lexer = createLexer("character" + BACKSPACE + "NotEscaped", formatWithEscaping)) {
assertNextToken("character" + BACKSPACE + "NotEscaped", lexer);
}
}
@Test
- public void testComments() throws IOException {
+ void testComments() throws IOException {
final String code = "first,line,\n" + "second,line,tokenWith#no-comment\n" + "# comment line \n" +
"third,line,#no-comment\n" + "# penultimate comment\n" + "# Final comment\n";
final CSVFormat format = CSVFormat.DEFAULT.withCommentMarker('#');
@@ -143,7 +143,7 @@ public void testComments() throws IOException {
}
@Test
- public void testCommentsAndEmptyLines() throws IOException {
+ void testCommentsAndEmptyLines() throws IOException {
final String code = "1,2,3,\n" + // 1
"\n" + // 1b
"\n" + // 1c
@@ -189,7 +189,7 @@ public void testCommentsAndEmptyLines() throws IOException {
}
@Test
- public void testCR() throws Exception {
+ void testCR() throws Exception {
try (Lexer lexer = createLexer("character" + CR + "NotEscaped", formatWithEscaping)) {
assertNextToken("character", lexer);
assertNextToken("NotEscaped", lexer);
@@ -198,7 +198,7 @@ public void testCR() throws Exception {
// From CSV-1
@Test
- public void testDelimiterIsWhitespace() throws IOException {
+ void testDelimiterIsWhitespace() throws IOException {
final String code = "one\ttwo\t\tfour \t five\t six";
try (Lexer lexer = createLexer(code, CSVFormat.TDF)) {
assertNextToken(TOKEN, "one", lexer);
@@ -211,7 +211,7 @@ public void testDelimiterIsWhitespace() throws IOException {
}
@Test
- public void testEOFWithoutClosingQuote() throws Exception {
+ void testEOFWithoutClosingQuote() throws Exception {
final String code = "a,\"b";
try (Lexer lexer = createLexer(code, CSVFormat.Builder.create().setLenientEof(true).get())) {
assertNextToken(TOKEN, "a", lexer);
@@ -224,21 +224,21 @@ public void testEOFWithoutClosingQuote() throws Exception {
}
@Test // TODO is this correct? Do we expect BACKSPACE to be unescaped?
- public void testEscapedBackspace() throws Exception {
+ void testEscapedBackspace() throws Exception {
try (Lexer lexer = createLexer("character\\" + BACKSPACE + "Escaped", formatWithEscaping)) {
assertNextToken("character" + BACKSPACE + "Escaped", lexer);
}
}
@Test
- public void testEscapedCharacter() throws Exception {
+ void testEscapedCharacter() throws Exception {
try (Lexer lexer = createLexer("character\\aEscaped", formatWithEscaping)) {
assertNextToken("character\\aEscaped", lexer);
}
}
@Test
- public void testEscapedControlCharacter() throws Exception {
+ void testEscapedControlCharacter() throws Exception {
// we are explicitly using an escape different from \ here
try (Lexer lexer = createLexer("character!rEscaped", CSVFormat.DEFAULT.withEscape('!'))) {
assertNextToken("character" + CR + "Escaped", lexer);
@@ -246,35 +246,35 @@ public void testEscapedControlCharacter() throws Exception {
}
@Test
- public void testEscapedControlCharacter2() throws Exception {
+ void testEscapedControlCharacter2() throws Exception {
try (Lexer lexer = createLexer("character\\rEscaped", CSVFormat.DEFAULT.withEscape('\\'))) {
assertNextToken("character" + CR + "Escaped", lexer);
}
}
@Test
- public void testEscapedCR() throws Exception {
+ void testEscapedCR() throws Exception {
try (Lexer lexer = createLexer("character\\" + CR + "Escaped", formatWithEscaping)) {
assertNextToken("character" + CR + "Escaped", lexer);
}
}
@Test // TODO is this correct? Do we expect FF to be unescaped?
- public void testEscapedFF() throws Exception {
+ void testEscapedFF() throws Exception {
try (Lexer lexer = createLexer("character\\" + FF + "Escaped", formatWithEscaping)) {
assertNextToken("character" + FF + "Escaped", lexer);
}
}
@Test
- public void testEscapedLF() throws Exception {
+ void testEscapedLF() throws Exception {
try (Lexer lexer = createLexer("character\\" + LF + "Escaped", formatWithEscaping)) {
assertNextToken("character" + LF + "Escaped", lexer);
}
}
@Test
- public void testEscapedMySqlNullValue() throws Exception {
+ void testEscapedMySqlNullValue() throws Exception {
// MySQL uses \N to symbolize null values. We have to restore this
try (Lexer lexer = createLexer("character\\NEscaped", formatWithEscaping)) {
assertNextToken("character\\NEscaped", lexer);
@@ -282,7 +282,7 @@ public void testEscapedMySqlNullValue() throws Exception {
}
@Test // TODO is this correct? Do we expect TAB to be unescaped?
- public void testEscapedTab() throws Exception {
+ void testEscapedTab() throws Exception {
try (Lexer lexer = createLexer("character\\" + TAB + "Escaped", formatWithEscaping)) {
assertNextToken("character" + TAB + "Escaped", lexer);
}
@@ -290,7 +290,7 @@ public void testEscapedTab() throws Exception {
}
@Test
- public void testEscapingAtEOF() throws Exception {
+ void testEscapingAtEOF() throws Exception {
final String code = "escaping at EOF is evil\\";
try (Lexer lexer = createLexer(code, formatWithEscaping)) {
assertThrows(IOException.class, () -> lexer.nextToken(new Token()));
@@ -298,14 +298,14 @@ public void testEscapingAtEOF() throws Exception {
}
@Test
- public void testFF() throws Exception {
+ void testFF() throws Exception {
try (Lexer lexer = createLexer("character" + FF + "NotEscaped", formatWithEscaping)) {
assertNextToken("character" + FF + "NotEscaped", lexer);
}
}
@Test
- public void testIgnoreEmptyLines() throws IOException {
+ void testIgnoreEmptyLines() throws IOException {
final String code = "first,line,\n" + "\n" + "\n" + "second,line\n" + "\n" + "\n" + "third line \n" + "\n" +
"\n" + "last, line \n" + "\n" + "\n" + "\n";
final CSVFormat format = CSVFormat.DEFAULT.withIgnoreEmptyLines();
@@ -324,7 +324,7 @@ public void testIgnoreEmptyLines() throws IOException {
}
@Test
- public void testIsMetaCharCommentStart() throws IOException {
+ void testIsMetaCharCommentStart() throws IOException {
try (Lexer lexer = createLexer("#", CSVFormat.DEFAULT.withCommentMarker('#'))) {
final int ch = lexer.readEscape();
assertEquals('#', ch);
@@ -332,7 +332,7 @@ public void testIsMetaCharCommentStart() throws IOException {
}
@Test
- public void testLF() throws Exception {
+ void testLF() throws Exception {
try (Lexer lexer = createLexer("character" + LF + "NotEscaped", formatWithEscaping)) {
assertNextToken("character", lexer);
assertNextToken("NotEscaped", lexer);
@@ -341,7 +341,7 @@ public void testLF() throws Exception {
// encapsulator tokenizer (single line)
@Test
- public void testNextToken4() throws IOException {
+ void testNextToken4() throws IOException {
/*
* file: a,"foo",b a, " foo",b a,"foo " ,b // whitespace after closing encapsulator a, " foo " ,b
*/
@@ -365,7 +365,7 @@ public void testNextToken4() throws IOException {
// encapsulator tokenizer (multi line, delimiter in string)
@Test
- public void testNextToken5() throws IOException {
+ void testNextToken5() throws IOException {
final String code = "a,\"foo\n\",b\n\"foo\n baar ,,,\"\n\"\n\t \n\"";
try (Lexer lexer = createLexer(code, CSVFormat.DEFAULT)) {
assertNextToken(TOKEN, "a", lexer);
@@ -378,7 +378,7 @@ public void testNextToken5() throws IOException {
// change delimiters, comment, encapsulater
@Test
- public void testNextToken6() throws IOException {
+ void testNextToken6() throws IOException {
/*
* file: a;'b and \' more ' !comment;;;; ;;
*/
@@ -391,7 +391,7 @@ public void testNextToken6() throws IOException {
}
@Test
- public void testReadEscapeBackspace() throws IOException {
+ void testReadEscapeBackspace() throws IOException {
try (Lexer lexer = createLexer("b", CSVFormat.DEFAULT.withEscape('\b'))) {
final int ch = lexer.readEscape();
assertEquals(BACKSPACE, ch);
@@ -399,7 +399,7 @@ public void testReadEscapeBackspace() throws IOException {
}
@Test
- public void testReadEscapeFF() throws IOException {
+ void testReadEscapeFF() throws IOException {
try (Lexer lexer = createLexer("f", CSVFormat.DEFAULT.withEscape('\f'))) {
final int ch = lexer.readEscape();
assertEquals(FF, ch);
@@ -407,7 +407,7 @@ public void testReadEscapeFF() throws IOException {
}
@Test
- public void testReadEscapeTab() throws IOException {
+ void testReadEscapeTab() throws IOException {
try (Lexer lexer = createLexer("t", CSVFormat.DEFAULT.withEscape('\t'))) {
final int ch = lexer.readEscape();
assertNextToken(EOF, "", lexer);
@@ -416,7 +416,7 @@ public void testReadEscapeTab() throws IOException {
}
@Test
- public void testSurroundingSpacesAreDeleted() throws IOException {
+ void testSurroundingSpacesAreDeleted() throws IOException {
final String code = "noSpaces, leadingSpaces,trailingSpaces , surroundingSpaces , ,,";
try (Lexer lexer = createLexer(code, CSVFormat.DEFAULT.withIgnoreSurroundingSpaces())) {
assertNextToken(TOKEN, "noSpaces", lexer);
@@ -430,7 +430,7 @@ public void testSurroundingSpacesAreDeleted() throws IOException {
}
@Test
- public void testSurroundingTabsAreDeleted() throws IOException {
+ void testSurroundingTabsAreDeleted() throws IOException {
final String code = "noTabs,\tleadingTab,trailingTab\t,\tsurroundingTabs\t,\t\t,,";
try (Lexer lexer = createLexer(code, CSVFormat.DEFAULT.withIgnoreSurroundingSpaces())) {
assertNextToken(TOKEN, "noTabs", lexer);
@@ -444,14 +444,14 @@ public void testSurroundingTabsAreDeleted() throws IOException {
}
@Test
- public void testTab() throws Exception {
+ void testTab() throws Exception {
try (Lexer lexer = createLexer("character" + TAB + "NotEscaped", formatWithEscaping)) {
assertNextToken("character" + TAB + "NotEscaped", lexer);
}
}
@Test
- public void testTrailingTextAfterQuote() throws Exception {
+ void testTrailingTextAfterQuote() throws Exception {
final String code = "\"a\" b,\"a\" \" b,\"a\" b \"\"";
try (Lexer lexer = createLexer(code, CSVFormat.Builder.create().setTrailingData(true).get())) {
assertNextToken(TOKEN, "a b", lexer);
@@ -464,7 +464,7 @@ public void testTrailingTextAfterQuote() throws Exception {
}
@Test
- public void testTrimTrailingSpacesZeroLength() throws Exception {
+ void testTrimTrailingSpacesZeroLength() throws Exception {
final StringBuilder buffer = new StringBuilder("");
try (Lexer lexer = createLexer(buffer.toString(), CSVFormat.DEFAULT)) {
lexer.trimTrailingSpaces(buffer);
diff --git a/src/test/java/org/apache/commons/csv/TokenTest.java b/src/test/java/org/apache/commons/csv/TokenTest.java
index 0f7f2f1ee..0a90a11ea 100644
--- a/src/test/java/org/apache/commons/csv/TokenTest.java
+++ b/src/test/java/org/apache/commons/csv/TokenTest.java
@@ -32,7 +32,7 @@ public class TokenTest {
@ParameterizedTest
@EnumSource(Token.Type.class)
- public void testToString(final Token.Type type) {
+ void testToString(final Token.Type type) {
// Should never blow up
final Token token = new Token();
final String resetName = Token.Type.INVALID.name();
diff --git a/src/test/java/org/apache/commons/csv/UserGuideTest.java b/src/test/java/org/apache/commons/csv/UserGuideTest.java
index 6b97ccded..6f3f77bf6 100644
--- a/src/test/java/org/apache/commons/csv/UserGuideTest.java
+++ b/src/test/java/org/apache/commons/csv/UserGuideTest.java
@@ -54,7 +54,7 @@ public InputStreamReader newReader(final Path path) throws IOException {
}
@Test
- public void testBomFull() throws UnsupportedEncodingException, IOException {
+ void testBomFull() throws UnsupportedEncodingException, IOException {
final Path path = tempDir.resolve("test1.csv");
Files.copy(Utils.createUtf8Input("ColumnA, ColumnB, ColumnC\r\nA, B, C\r\n".getBytes(StandardCharsets.UTF_8), true), path);
// @formatter:off
@@ -74,7 +74,7 @@ public void testBomFull() throws UnsupportedEncodingException, IOException {
}
@Test
- public void testBomUtil() throws UnsupportedEncodingException, IOException {
+ void testBomUtil() throws UnsupportedEncodingException, IOException {
final Path path = tempDir.resolve("test2.csv");
Files.copy(Utils.createUtf8Input("ColumnA, ColumnB, ColumnC\r\nA, B, C\r\n".getBytes(StandardCharsets.UTF_8), true), path);
try (Reader reader = newReader(path);
diff --git a/src/test/java/org/apache/commons/csv/issues/JiraCsv148Test.java b/src/test/java/org/apache/commons/csv/issues/JiraCsv148Test.java
index 71b056834..5289b4a93 100644
--- a/src/test/java/org/apache/commons/csv/issues/JiraCsv148Test.java
+++ b/src/test/java/org/apache/commons/csv/issues/JiraCsv148Test.java
@@ -27,7 +27,7 @@
public class JiraCsv148Test {
@Test
- public void testWithIgnoreSurroundingSpacesEmpty() {
+ void testWithIgnoreSurroundingSpacesEmpty() {
// @formatter:off
final CSVFormat format = CSVFormat.DEFAULT.builder()
.setQuoteMode(QuoteMode.ALL)
@@ -47,7 +47,7 @@ public void testWithIgnoreSurroundingSpacesEmpty() {
* quotation marks, while withIgnoreSurroundingSpace() cannot The same point: you can remove the leading and trailing spaces, tabs and other symbols.
*/
@Test
- public void testWithTrimEmpty() {
+ void testWithTrimEmpty() {
// @formatter:off
final CSVFormat format = CSVFormat.DEFAULT.builder()
.setQuoteMode(QuoteMode.ALL)
diff --git a/src/test/java/org/apache/commons/csv/issues/JiraCsv149Test.java b/src/test/java/org/apache/commons/csv/issues/JiraCsv149Test.java
index 5b3d40c9f..c12574f28 100644
--- a/src/test/java/org/apache/commons/csv/issues/JiraCsv149Test.java
+++ b/src/test/java/org/apache/commons/csv/issues/JiraCsv149Test.java
@@ -34,7 +34,7 @@ public class JiraCsv149Test {
private static final String CR_LF = "\r\n";
@Test
- public void testJiraCsv149EndWithEOL() throws IOException {
+ void testJiraCsv149EndWithEOL() throws IOException {
testJiraCsv149EndWithEolAtEof(true);
}
@@ -61,7 +61,7 @@ private void testJiraCsv149EndWithEolAtEof(final boolean eolAtEof) throws IOExce
}
@Test
- public void testJiraCsv149EndWithoutEOL() throws IOException {
+ void testJiraCsv149EndWithoutEOL() throws IOException {
testJiraCsv149EndWithEolAtEof(false);
}
}
diff --git a/src/test/java/org/apache/commons/csv/issues/JiraCsv150Test.java b/src/test/java/org/apache/commons/csv/issues/JiraCsv150Test.java
index f10477292..5e9feb7dd 100644
--- a/src/test/java/org/apache/commons/csv/issues/JiraCsv150Test.java
+++ b/src/test/java/org/apache/commons/csv/issues/JiraCsv150Test.java
@@ -36,19 +36,19 @@ private void testDisable(final CSVFormat format, final StringReader reader) thro
}
@Test
- public void testDisableComment() throws IOException {
+ void testDisableComment() throws IOException {
final StringReader stringReader = new StringReader("\"66\u2441\",,\"\",\"DeutscheBK\ufffe\",\"000\"\r\n");
testDisable(CSVFormat.DEFAULT.builder().setCommentMarker(null).get(), stringReader);
}
@Test
- public void testDisableEncapsulation() throws IOException {
+ void testDisableEncapsulation() throws IOException {
final StringReader stringReader = new StringReader("66\u2441,,\"\",\ufffeDeutscheBK,\"000\"\r\n");
testDisable(CSVFormat.DEFAULT.builder().setQuote(null).get(), stringReader);
}
@Test
- public void testDisableEscaping() throws IOException {
+ void testDisableEscaping() throws IOException {
final StringReader stringReader = new StringReader("\"66\u2441\",,\"\",\"DeutscheBK\ufffe\",\"000\"\r\n");
testDisable(CSVFormat.DEFAULT.builder().setEscape(null).get(), stringReader);
}
diff --git a/src/test/java/org/apache/commons/csv/issues/JiraCsv154Test.java b/src/test/java/org/apache/commons/csv/issues/JiraCsv154Test.java
index c045cdd26..6276775c9 100644
--- a/src/test/java/org/apache/commons/csv/issues/JiraCsv154Test.java
+++ b/src/test/java/org/apache/commons/csv/issues/JiraCsv154Test.java
@@ -29,7 +29,7 @@
public class JiraCsv154Test {
@Test
- public void testJiraCsv154_withCommentMarker() throws IOException {
+ void testJiraCsv154_withCommentMarker() throws IOException {
final String comment = "This is a header comment";
// @formatter:off
final CSVFormat format = CSVFormat.EXCEL.builder()
@@ -48,7 +48,7 @@ public void testJiraCsv154_withCommentMarker() throws IOException {
}
@Test
- public void testJiraCsv154_withHeaderComments() throws IOException {
+ void testJiraCsv154_withHeaderComments() throws IOException {
final String comment = "This is a header comment";
// @formatter:off
final CSVFormat format = CSVFormat.EXCEL.builder()
diff --git a/src/test/java/org/apache/commons/csv/issues/JiraCsv167Test.java b/src/test/java/org/apache/commons/csv/issues/JiraCsv167Test.java
index 5caeecd6d..32dd23575 100644
--- a/src/test/java/org/apache/commons/csv/issues/JiraCsv167Test.java
+++ b/src/test/java/org/apache/commons/csv/issues/JiraCsv167Test.java
@@ -39,7 +39,7 @@ private Reader getTestReader() {
}
@Test
- public void testParse() throws IOException {
+ void testParse() throws IOException {
int totcomment = 0;
int totrecs = 0;
try (Reader reader = getTestReader(); BufferedReader br = new BufferedReader(reader)) {
diff --git a/src/test/java/org/apache/commons/csv/issues/JiraCsv198Test.java b/src/test/java/org/apache/commons/csv/issues/JiraCsv198Test.java
index 641797fe8..80b86b611 100644
--- a/src/test/java/org/apache/commons/csv/issues/JiraCsv198Test.java
+++ b/src/test/java/org/apache/commons/csv/issues/JiraCsv198Test.java
@@ -42,7 +42,7 @@ public class JiraCsv198Test {
// @formatter:on
@Test
- public void test() throws UnsupportedEncodingException, IOException {
+ void test() throws UnsupportedEncodingException, IOException {
final InputStream pointsOfReference = getClass().getResourceAsStream("/org/apache/commons/csv/CSV-198/optd_por_public.csv");
assertNotNull(pointsOfReference);
try (@SuppressWarnings("resource")
diff --git a/src/test/java/org/apache/commons/csv/issues/JiraCsv203Test.java b/src/test/java/org/apache/commons/csv/issues/JiraCsv203Test.java
index 8eee04156..f467c6785 100644
--- a/src/test/java/org/apache/commons/csv/issues/JiraCsv203Test.java
+++ b/src/test/java/org/apache/commons/csv/issues/JiraCsv203Test.java
@@ -32,7 +32,7 @@
public class JiraCsv203Test {
@Test
- public void testQuoteModeAll() throws Exception {
+ void testQuoteModeAll() throws Exception {
// @formatter:off
final CSVFormat format = CSVFormat.EXCEL.builder()
.setNullString("N/A")
@@ -48,7 +48,7 @@ public void testQuoteModeAll() throws Exception {
}
@Test
- public void testQuoteModeAllNonNull() throws Exception {
+ void testQuoteModeAllNonNull() throws Exception {
// @formatter:off
final CSVFormat format = CSVFormat.EXCEL.builder()
.setNullString("N/A")
@@ -64,7 +64,7 @@ public void testQuoteModeAllNonNull() throws Exception {
}
@Test
- public void testQuoteModeMinimal() throws Exception {
+ void testQuoteModeMinimal() throws Exception {
// @formatter:off
final CSVFormat format = CSVFormat.EXCEL.builder()
.setNullString("N/A")
@@ -80,7 +80,7 @@ public void testQuoteModeMinimal() throws Exception {
}
@Test
- public void testQuoteModeNonNumeric() throws Exception {
+ void testQuoteModeNonNumeric() throws Exception {
// @formatter:off
final CSVFormat format = CSVFormat.EXCEL.builder()
.setNullString("N/A")
@@ -96,7 +96,7 @@ public void testQuoteModeNonNumeric() throws Exception {
}
@Test
- public void testWithEmptyValues() throws Exception {
+ void testWithEmptyValues() throws Exception {
// @formatter:off
final CSVFormat format = CSVFormat.EXCEL.builder()
.setNullString("N/A")
@@ -113,7 +113,7 @@ public void testWithEmptyValues() throws Exception {
}
@Test
- public void testWithoutNullString() throws Exception {
+ void testWithoutNullString() throws Exception {
// @formatter:off
final CSVFormat format = CSVFormat.EXCEL.builder()
//.setNullString("N/A")
@@ -129,7 +129,7 @@ public void testWithoutNullString() throws Exception {
}
@Test
- public void testWithoutQuoteMode() throws Exception {
+ void testWithoutQuoteMode() throws Exception {
// @formatter:off
final CSVFormat format = CSVFormat.EXCEL.builder()
.setNullString("N/A")
diff --git a/src/test/java/org/apache/commons/csv/issues/JiraCsv206Test.java b/src/test/java/org/apache/commons/csv/issues/JiraCsv206Test.java
index 3b69b173b..cf9a0ad3d 100644
--- a/src/test/java/org/apache/commons/csv/issues/JiraCsv206Test.java
+++ b/src/test/java/org/apache/commons/csv/issues/JiraCsv206Test.java
@@ -33,7 +33,7 @@
public class JiraCsv206Test {
@Test
- public void testJiraCsv206MultipleCharacterDelimiter() throws IOException {
+ void testJiraCsv206MultipleCharacterDelimiter() throws IOException {
// Read with multiple character delimiter
final String source = "FirstName[|]LastName[|]Address\r\nJohn[|]Smith[|]123 Main St.";
final StringReader reader = new StringReader(source);
diff --git a/src/test/java/org/apache/commons/csv/issues/JiraCsv211Test.java b/src/test/java/org/apache/commons/csv/issues/JiraCsv211Test.java
index a4e3960c9..04b4d06d5 100644
--- a/src/test/java/org/apache/commons/csv/issues/JiraCsv211Test.java
+++ b/src/test/java/org/apache/commons/csv/issues/JiraCsv211Test.java
@@ -31,7 +31,7 @@
public class JiraCsv211Test {
@Test
- public void testJiraCsv211Format() throws IOException {
+ void testJiraCsv211Format() throws IOException {
// @formatter:off
final CSVFormat printFormat = CSVFormat.DEFAULT.builder()
.setDelimiter('\t')
diff --git a/src/test/java/org/apache/commons/csv/issues/JiraCsv213Test.java b/src/test/java/org/apache/commons/csv/issues/JiraCsv213Test.java
index d700843f4..f32a6fc40 100644
--- a/src/test/java/org/apache/commons/csv/issues/JiraCsv213Test.java
+++ b/src/test/java/org/apache/commons/csv/issues/JiraCsv213Test.java
@@ -64,7 +64,7 @@ private void createEndChannel(final File csvFile) {
}
@Test
- public void test() {
+ void test() {
createEndChannel(new File("src/test/resources/org/apache/commons/csv/CSV-213/999751170.patch.csv"));
}
}
diff --git a/src/test/java/org/apache/commons/csv/issues/JiraCsv247Test.java b/src/test/java/org/apache/commons/csv/issues/JiraCsv247Test.java
index 85d9676fd..a460250b5 100644
--- a/src/test/java/org/apache/commons/csv/issues/JiraCsv247Test.java
+++ b/src/test/java/org/apache/commons/csv/issues/JiraCsv247Test.java
@@ -37,7 +37,7 @@
public class JiraCsv247Test {
@Test
- public void testHeadersMissingOneColumnWhenAllowingMissingColumnNames() throws Exception {
+ void testHeadersMissingOneColumnWhenAllowingMissingColumnNames() throws Exception {
final CSVFormat format = CSVFormat.DEFAULT.builder().setHeader().setAllowMissingColumnNames(true).get();
assertTrue(format.getAllowMissingColumnNames(), "We should allow missing column names");
@@ -63,7 +63,7 @@ record = iterator.next();
}
@Test
- public void testHeadersMissingThrowsWhenNotAllowingMissingColumnNames() {
+ void testHeadersMissingThrowsWhenNotAllowingMissingColumnNames() {
final CSVFormat format = CSVFormat.DEFAULT.builder().setHeader().get();
assertFalse(format.getAllowMissingColumnNames(), "By default we should not allow missing column names");
diff --git a/src/test/java/org/apache/commons/csv/issues/JiraCsv248Test.java b/src/test/java/org/apache/commons/csv/issues/JiraCsv248Test.java
index 08cfe13fa..7a9c0aa99 100644
--- a/src/test/java/org/apache/commons/csv/issues/JiraCsv248Test.java
+++ b/src/test/java/org/apache/commons/csv/issues/JiraCsv248Test.java
@@ -50,7 +50,7 @@ private static InputStream getTestInput() {
* @throws ClassNotFoundException If the CSVRecord cannot be deserialized
*/
@Test
- public void testJiraCsv248() throws IOException, ClassNotFoundException {
+ void testJiraCsv248() throws IOException, ClassNotFoundException {
// Record was originally created using CSV version 1.6 with the following code:
// try (CSVParser parser = CSVParser.parse("A,B\n#my comment\nOne,Two",
// CSVFormat.DEFAULT.builder().setHeader().setCommentMarker('#'))) {
diff --git a/src/test/java/org/apache/commons/csv/issues/JiraCsv249Test.java b/src/test/java/org/apache/commons/csv/issues/JiraCsv249Test.java
index f5fe47ca6..8e2a5168f 100644
--- a/src/test/java/org/apache/commons/csv/issues/JiraCsv249Test.java
+++ b/src/test/java/org/apache/commons/csv/issues/JiraCsv249Test.java
@@ -35,7 +35,7 @@
public class JiraCsv249Test {
@Test
- public void testJiraCsv249() throws IOException {
+ void testJiraCsv249() throws IOException {
final CSVFormat format = CSVFormat.DEFAULT.builder().setEscape('\\').get();
final StringWriter stringWriter = new StringWriter();
try (CSVPrinter printer = new CSVPrinter(stringWriter, format)) {
diff --git a/src/test/java/org/apache/commons/csv/issues/JiraCsv253Test.java b/src/test/java/org/apache/commons/csv/issues/JiraCsv253Test.java
index 5b266a3e3..3d7498008 100644
--- a/src/test/java/org/apache/commons/csv/issues/JiraCsv253Test.java
+++ b/src/test/java/org/apache/commons/csv/issues/JiraCsv253Test.java
@@ -42,7 +42,7 @@ private void assertArrayEqual(final String[] expected, final CSVRecord actual) {
}
@Test
- public void testHandleAbsentValues() throws IOException {
+ void testHandleAbsentValues() throws IOException {
final String source = "\"John\",,\"Doe\"\n" + ",\"AA\",123\n" + "\"John\",90,\n" + "\"\",,90";
final CSVFormat csvFormat = CSVFormat.DEFAULT.builder().setQuoteMode(QuoteMode.NON_NUMERIC).get();
try (CSVParser parser = csvFormat.parse(new StringReader(source))) {
diff --git a/src/test/java/org/apache/commons/csv/issues/JiraCsv263Test.java b/src/test/java/org/apache/commons/csv/issues/JiraCsv263Test.java
index abae0ea2f..28377bb84 100644
--- a/src/test/java/org/apache/commons/csv/issues/JiraCsv263Test.java
+++ b/src/test/java/org/apache/commons/csv/issues/JiraCsv263Test.java
@@ -35,7 +35,7 @@
public class JiraCsv263Test {
@Test
- public void testPrintFromReaderWithQuotes() throws IOException {
+ void testPrintFromReaderWithQuotes() throws IOException {
// @formatter:off
final CSVFormat format = CSVFormat.RFC4180.builder()
.setDelimiter(',')
diff --git a/src/test/java/org/apache/commons/csv/issues/JiraCsv264Test.java b/src/test/java/org/apache/commons/csv/issues/JiraCsv264Test.java
index d910ef582..e64495267 100644
--- a/src/test/java/org/apache/commons/csv/issues/JiraCsv264Test.java
+++ b/src/test/java/org/apache/commons/csv/issues/JiraCsv264Test.java
@@ -49,7 +49,7 @@ public class JiraCsv264Test {
"\"6\",\"7\",\"\",\"\",\"10\"";
@Test
- public void testJiraCsv264() {
+ void testJiraCsv264() {
final CSVFormat csvFormat = CSVFormat.DEFAULT
.builder()
.setHeader()
@@ -62,7 +62,7 @@ public void testJiraCsv264() {
}
@Test
- public void testJiraCsv264WithGapAllowEmpty() throws IOException {
+ void testJiraCsv264WithGapAllowEmpty() throws IOException {
final CSVFormat csvFormat = CSVFormat.DEFAULT
.builder()
.setHeader()
@@ -75,7 +75,7 @@ public void testJiraCsv264WithGapAllowEmpty() throws IOException {
}
@Test
- public void testJiraCsv264WithGapDisallow() {
+ void testJiraCsv264WithGapDisallow() {
final CSVFormat csvFormat = CSVFormat.DEFAULT
.builder()
.setHeader()
diff --git a/src/test/java/org/apache/commons/csv/issues/JiraCsv265Test.java b/src/test/java/org/apache/commons/csv/issues/JiraCsv265Test.java
index 4853672dc..286fa7f18 100644
--- a/src/test/java/org/apache/commons/csv/issues/JiraCsv265Test.java
+++ b/src/test/java/org/apache/commons/csv/issues/JiraCsv265Test.java
@@ -36,7 +36,7 @@
public class JiraCsv265Test {
@Test
- public void testCharacterPositionWithComments() throws IOException {
+ void testCharacterPositionWithComments() throws IOException {
// @formatter:off
final String csv =
"# Comment1\n" +
@@ -62,7 +62,7 @@ public void testCharacterPositionWithComments() throws IOException {
}
@Test
- public void testCharacterPositionWithCommentsSpanningMultipleLines() throws IOException {
+ void testCharacterPositionWithCommentsSpanningMultipleLines() throws IOException {
// @formatter:off
final String csv =
"# Comment1\n" +
diff --git a/src/test/java/org/apache/commons/csv/issues/JiraCsv271Test.java b/src/test/java/org/apache/commons/csv/issues/JiraCsv271Test.java
index 5ee5e0a01..9abdbbe6d 100644
--- a/src/test/java/org/apache/commons/csv/issues/JiraCsv271Test.java
+++ b/src/test/java/org/apache/commons/csv/issues/JiraCsv271Test.java
@@ -32,7 +32,7 @@
public class JiraCsv271Test {
@Test
- public void testJiraCsv271_withArray() throws IOException {
+ void testJiraCsv271_withArray() throws IOException {
final CSVFormat csvFormat = CSVFormat.DEFAULT;
final StringWriter stringWriter = new StringWriter();
try (CSVPrinter printer = new CSVPrinter(stringWriter, csvFormat)) {
@@ -43,7 +43,7 @@ public void testJiraCsv271_withArray() throws IOException {
}
@Test
- public void testJiraCsv271_withList() throws IOException {
+ void testJiraCsv271_withList() throws IOException {
final CSVFormat csvFormat = CSVFormat.DEFAULT;
final StringWriter stringWriter = new StringWriter();
try (CSVPrinter printer = new CSVPrinter(stringWriter, csvFormat)) {
diff --git a/src/test/java/org/apache/commons/csv/issues/JiraCsv288Test.java b/src/test/java/org/apache/commons/csv/issues/JiraCsv288Test.java
index 0be6a52f8..6626964f9 100644
--- a/src/test/java/org/apache/commons/csv/issues/JiraCsv288Test.java
+++ b/src/test/java/org/apache/commons/csv/issues/JiraCsv288Test.java
@@ -42,7 +42,7 @@ private void print(final CSVRecord csvRecord, final CSVPrinter csvPrinter) throw
@Test
// Before fix:
// expected: but was:
- public void testParseWithABADelimiter() throws Exception {
+ void testParseWithABADelimiter() throws Exception {
final Reader in = new StringReader("a|~|b|~|c|~|d|~||~|f");
final StringBuilder stringBuilder = new StringBuilder();
try (CSVPrinter csvPrinter = new CSVPrinter(stringBuilder, CSVFormat.EXCEL);
@@ -57,7 +57,7 @@ public void testParseWithABADelimiter() throws Exception {
@Test
// Before fix:
// expected: but was:
- public void testParseWithDoublePipeDelimiter() throws Exception {
+ void testParseWithDoublePipeDelimiter() throws Exception {
final Reader in = new StringReader("a||b||c||d||||f");
final StringBuilder stringBuilder = new StringBuilder();
try (CSVPrinter csvPrinter = new CSVPrinter(stringBuilder, CSVFormat.EXCEL);
@@ -72,7 +72,7 @@ public void testParseWithDoublePipeDelimiter() throws Exception {
@Test
// Regression, already passed before fix
- public void testParseWithDoublePipeDelimiterDoubleCharValue() throws Exception {
+ void testParseWithDoublePipeDelimiterDoubleCharValue() throws Exception {
final Reader in = new StringReader("a||bb||cc||dd||f");
final StringBuilder stringBuilder = new StringBuilder();
try (CSVPrinter csvPrinter = new CSVPrinter(stringBuilder, CSVFormat.EXCEL);
@@ -87,7 +87,7 @@ public void testParseWithDoublePipeDelimiterDoubleCharValue() throws Exception {
@Test
// Before fix:
// expected: but was:
- public void testParseWithDoublePipeDelimiterEndsWithDelimiter() throws Exception {
+ void testParseWithDoublePipeDelimiterEndsWithDelimiter() throws Exception {
final Reader in = new StringReader("a||b||c||d||||f||");
final StringBuilder stringBuilder = new StringBuilder();
try (CSVPrinter csvPrinter = new CSVPrinter(stringBuilder, CSVFormat.EXCEL);
@@ -102,7 +102,7 @@ public void testParseWithDoublePipeDelimiterEndsWithDelimiter() throws Exception
@Test
// Before fix:
// expected: but was:
- public void testParseWithDoublePipeDelimiterQuoted() throws Exception {
+ void testParseWithDoublePipeDelimiterQuoted() throws Exception {
final Reader in = new StringReader("a||\"b||c\"||d||||f");
final StringBuilder stringBuilder = new StringBuilder();
try (CSVPrinter csvPrinter = new CSVPrinter(stringBuilder, CSVFormat.EXCEL);
@@ -116,7 +116,7 @@ public void testParseWithDoublePipeDelimiterQuoted() throws Exception {
@Test
// Regression, already passed before fix
- public void testParseWithSinglePipeDelimiterEndsWithDelimiter() throws Exception {
+ void testParseWithSinglePipeDelimiterEndsWithDelimiter() throws Exception {
final Reader in = new StringReader("a|b|c|d||f|");
final StringBuilder stringBuilder = new StringBuilder();
try (CSVPrinter csvPrinter = new CSVPrinter(stringBuilder, CSVFormat.EXCEL);
@@ -131,7 +131,7 @@ public void testParseWithSinglePipeDelimiterEndsWithDelimiter() throws Exception
@Test
// Before fix:
// expected: but was:
- public void testParseWithTriplePipeDelimiter() throws Exception {
+ void testParseWithTriplePipeDelimiter() throws Exception {
final Reader in = new StringReader("a|||b|||c|||d||||||f");
final StringBuilder stringBuilder = new StringBuilder();
try (CSVPrinter csvPrinter = new CSVPrinter(stringBuilder, CSVFormat.EXCEL);
@@ -145,7 +145,7 @@ public void testParseWithTriplePipeDelimiter() throws Exception {
@Test
// Regression, already passed before fix
- public void testParseWithTwoCharDelimiter1() throws Exception {
+ void testParseWithTwoCharDelimiter1() throws Exception {
final Reader in = new StringReader("a~|b~|c~|d~|~|f");
final StringBuilder stringBuilder = new StringBuilder();
try (CSVPrinter csvPrinter = new CSVPrinter(stringBuilder, CSVFormat.EXCEL);
@@ -159,7 +159,7 @@ public void testParseWithTwoCharDelimiter1() throws Exception {
@Test
// Regression, already passed before fix
- public void testParseWithTwoCharDelimiter2() throws Exception {
+ void testParseWithTwoCharDelimiter2() throws Exception {
final Reader in = new StringReader("a~|b~|c~|d~|~|f~");
final StringBuilder stringBuilder = new StringBuilder();
try (CSVPrinter csvPrinter = new CSVPrinter(stringBuilder, CSVFormat.EXCEL);
@@ -173,7 +173,7 @@ public void testParseWithTwoCharDelimiter2() throws Exception {
@Test
// Regression, already passed before fix
- public void testParseWithTwoCharDelimiter3() throws Exception {
+ void testParseWithTwoCharDelimiter3() throws Exception {
final Reader in = new StringReader("a~|b~|c~|d~|~|f|");
final StringBuilder stringBuilder = new StringBuilder();
try (CSVPrinter csvPrinter = new CSVPrinter(stringBuilder, CSVFormat.EXCEL);
@@ -187,7 +187,7 @@ public void testParseWithTwoCharDelimiter3() throws Exception {
@Test
// Regression, already passed before fix
- public void testParseWithTwoCharDelimiter4() throws Exception {
+ void testParseWithTwoCharDelimiter4() throws Exception {
final Reader in = new StringReader("a~|b~|c~|d~|~|f~~||g");
final StringBuilder stringBuilder = new StringBuilder();
try (CSVPrinter csvPrinter = new CSVPrinter(stringBuilder, CSVFormat.EXCEL);
@@ -202,7 +202,7 @@ public void testParseWithTwoCharDelimiter4() throws Exception {
@Test
// Before fix:
// expected: but was:
- public void testParseWithTwoCharDelimiterEndsWithDelimiter() throws Exception {
+ void testParseWithTwoCharDelimiterEndsWithDelimiter() throws Exception {
final Reader in = new StringReader("a~|b~|c~|d~|~|f~|");
final StringBuilder stringBuilder = new StringBuilder();
try (CSVPrinter csvPrinter = new CSVPrinter(stringBuilder, CSVFormat.EXCEL);
diff --git a/src/test/java/org/apache/commons/csv/issues/JiraCsv290Test.java b/src/test/java/org/apache/commons/csv/issues/JiraCsv290Test.java
index f9dd6e953..bfc0f1d5b 100644
--- a/src/test/java/org/apache/commons/csv/issues/JiraCsv290Test.java
+++ b/src/test/java/org/apache/commons/csv/issues/JiraCsv290Test.java
@@ -84,17 +84,17 @@ private void testHelper(final String fileName, final CSVFormat format) throws Ex
}
@Test
- public void testPostgresqlCsv() throws Exception {
+ void testPostgresqlCsv() throws Exception {
testHelper("psql.csv", CSVFormat.POSTGRESQL_CSV);
}
@Test
- public void testPostgresqlText() throws Exception {
+ void testPostgresqlText() throws Exception {
testHelper("psql.tsv", CSVFormat.POSTGRESQL_TEXT);
}
@Test
- public void testWriteThenRead() throws Exception {
+ void testWriteThenRead() throws Exception {
final StringWriter sw = new StringWriter();
final CSVFormat format = CSVFormat.POSTGRESQL_CSV.builder().setHeader().setSkipHeaderRecord(true).get();
try (CSVPrinter printer = new CSVPrinter(sw, format)) {
diff --git a/src/test/java/org/apache/commons/csv/issues/JiraCsv294Test.java b/src/test/java/org/apache/commons/csv/issues/JiraCsv294Test.java
index 2cc62628e..75e26cf69 100644
--- a/src/test/java/org/apache/commons/csv/issues/JiraCsv294Test.java
+++ b/src/test/java/org/apache/commons/csv/issues/JiraCsv294Test.java
@@ -58,24 +58,24 @@ private static void testInternal(final CSVFormat format, final String expectedSu
}
@Test
- public void testDefaultCsvFormatWithBackslashEscapeWorks() throws IOException {
+ void testDefaultCsvFormatWithBackslashEscapeWorks() throws IOException {
testInternal(CSVFormat.Builder.create().setEscape('\\').get(), ",\"b \\\"\\\"\",");
}
@Test
- public void testDefaultCsvFormatWithNullEscapeWorks() throws IOException {
+ void testDefaultCsvFormatWithNullEscapeWorks() throws IOException {
testInternal(CSVFormat.Builder.create().setEscape(null).get(), ",\"b \"\"\"\"\",");
}
@Test
- public void testDefaultCsvFormatWithQuoteEscapeWorks() throws IOException {
+ void testDefaultCsvFormatWithQuoteEscapeWorks() throws IOException {
// this one doesn't actually work but should behave like setEscape(null)
// Printer is writing the expected content but Parser is unable to consume it
testInternal(CSVFormat.Builder.create().setEscape('"').get(), ",\"b \"\"\"\"\",");
}
@Test
- public void testDefaultCsvFormatWorks() throws IOException {
+ void testDefaultCsvFormatWorks() throws IOException {
testInternal(CSVFormat.Builder.create().get(), ",\"b \"\"\"\"\",");
}
}
diff --git a/src/test/java/org/apache/commons/csv/issues/JiraCsv93Test.java b/src/test/java/org/apache/commons/csv/issues/JiraCsv93Test.java
index e34a8b02f..e52739dd1 100644
--- a/src/test/java/org/apache/commons/csv/issues/JiraCsv93Test.java
+++ b/src/test/java/org/apache/commons/csv/issues/JiraCsv93Test.java
@@ -61,7 +61,7 @@ private void every(final CSVFormat csvFormat, final Object[] objects, final Stri
}
@Test
- public void testWithNotSetNullString() throws IOException {
+ void testWithNotSetNullString() throws IOException {
// @formatter:off
every(CSVFormat.DEFAULT,
objects1,
@@ -91,7 +91,7 @@ public void testWithNotSetNullString() throws IOException {
}
@Test
- public void testWithSetNullStringEmptyString() throws IOException {
+ void testWithSetNullStringEmptyString() throws IOException {
// @formatter:off
every(CSVFormat.DEFAULT.builder().setNullString("").get(),
objects1,
@@ -121,7 +121,7 @@ public void testWithSetNullStringEmptyString() throws IOException {
}
@Test
- public void testWithSetNullStringNULL() throws IOException {
+ void testWithSetNullStringNULL() throws IOException {
// @formatter:off
every(CSVFormat.DEFAULT.builder().setNullString("NULL").get(),
objects2,
diff --git a/src/test/java/org/apache/commons/csv/perf/PerformanceTest.java b/src/test/java/org/apache/commons/csv/perf/PerformanceTest.java
index efdb8f041..a7f081027 100644
--- a/src/test/java/org/apache/commons/csv/perf/PerformanceTest.java
+++ b/src/test/java/org/apache/commons/csv/perf/PerformanceTest.java
@@ -110,7 +110,7 @@ public long testParseBigFile(final boolean traverseColumns) throws Exception {
}
@Test
- public void testParseBigFileRepeat() throws Exception {
+ void testParseBigFileRepeat() throws Exception {
long bestTime = Long.MAX_VALUE;
for (int i = 0; i < this.max; i++) {
bestTime = Math.min(testParseBigFile(false), bestTime);
@@ -119,7 +119,7 @@ public void testParseBigFileRepeat() throws Exception {
}
@Test
- public void testReadBigFile() throws Exception {
+ void testReadBigFile() throws Exception {
long bestTime = Long.MAX_VALUE;
long count;
for (int i = 0; i < this.max; i++) {
From ebc85238734a0c8bf24a72742c66705ce81f488a Mon Sep 17 00:00:00 2001
From: "Gary D. Gregory"
Date: Sun, 8 Jun 2025 14:15:53 -0400
Subject: [PATCH 018/245] Use JUnit 5 convention for class visibility
---
.../java/org/apache/commons/csv/CSVDuplicateHeaderTest.java | 2 +-
src/test/java/org/apache/commons/csv/CSVFileParserTest.java | 2 +-
.../java/org/apache/commons/csv/CSVFormatPredefinedTest.java | 2 +-
src/test/java/org/apache/commons/csv/CSVFormatTest.java | 2 +-
src/test/java/org/apache/commons/csv/CSVParserTest.java | 2 +-
src/test/java/org/apache/commons/csv/CSVPrinterTest.java | 2 +-
src/test/java/org/apache/commons/csv/CSVRecordTest.java | 2 +-
.../java/org/apache/commons/csv/ExtendedBufferedReaderTest.java | 2 +-
src/test/java/org/apache/commons/csv/JiraCsv196Test.java | 2 +-
src/test/java/org/apache/commons/csv/JiraCsv318Test.java | 2 +-
src/test/java/org/apache/commons/csv/LexerTest.java | 2 +-
src/test/java/org/apache/commons/csv/PerformanceTest.java | 2 +-
src/test/java/org/apache/commons/csv/TokenTest.java | 2 +-
src/test/java/org/apache/commons/csv/UserGuideTest.java | 2 +-
src/test/java/org/apache/commons/csv/issues/JiraCsv148Test.java | 2 +-
src/test/java/org/apache/commons/csv/issues/JiraCsv149Test.java | 2 +-
src/test/java/org/apache/commons/csv/issues/JiraCsv150Test.java | 2 +-
src/test/java/org/apache/commons/csv/issues/JiraCsv154Test.java | 2 +-
src/test/java/org/apache/commons/csv/issues/JiraCsv167Test.java | 2 +-
src/test/java/org/apache/commons/csv/issues/JiraCsv198Test.java | 2 +-
src/test/java/org/apache/commons/csv/issues/JiraCsv203Test.java | 2 +-
src/test/java/org/apache/commons/csv/issues/JiraCsv206Test.java | 2 +-
src/test/java/org/apache/commons/csv/issues/JiraCsv211Test.java | 2 +-
src/test/java/org/apache/commons/csv/issues/JiraCsv213Test.java | 2 +-
src/test/java/org/apache/commons/csv/issues/JiraCsv247Test.java | 2 +-
src/test/java/org/apache/commons/csv/issues/JiraCsv248Test.java | 2 +-
src/test/java/org/apache/commons/csv/issues/JiraCsv249Test.java | 2 +-
src/test/java/org/apache/commons/csv/issues/JiraCsv253Test.java | 2 +-
src/test/java/org/apache/commons/csv/issues/JiraCsv263Test.java | 2 +-
src/test/java/org/apache/commons/csv/issues/JiraCsv264Test.java | 2 +-
src/test/java/org/apache/commons/csv/issues/JiraCsv265Test.java | 2 +-
src/test/java/org/apache/commons/csv/issues/JiraCsv271Test.java | 2 +-
src/test/java/org/apache/commons/csv/issues/JiraCsv288Test.java | 2 +-
src/test/java/org/apache/commons/csv/issues/JiraCsv290Test.java | 2 +-
src/test/java/org/apache/commons/csv/issues/JiraCsv294Test.java | 2 +-
src/test/java/org/apache/commons/csv/issues/JiraCsv93Test.java | 2 +-
src/test/java/org/apache/commons/csv/perf/PerformanceTest.java | 2 +-
37 files changed, 37 insertions(+), 37 deletions(-)
diff --git a/src/test/java/org/apache/commons/csv/CSVDuplicateHeaderTest.java b/src/test/java/org/apache/commons/csv/CSVDuplicateHeaderTest.java
index c5705e28e..cc47b999a 100644
--- a/src/test/java/org/apache/commons/csv/CSVDuplicateHeaderTest.java
+++ b/src/test/java/org/apache/commons/csv/CSVDuplicateHeaderTest.java
@@ -34,7 +34,7 @@
* Tests parsing of duplicate column names in a CSV header.
* The test verifies that headers are consistently handled by CSVFormat and CSVParser.
*/
-public class CSVDuplicateHeaderTest {
+class CSVDuplicateHeaderTest {
/**
* Return test cases for duplicate header data for use in CSVFormat.
diff --git a/src/test/java/org/apache/commons/csv/CSVFileParserTest.java b/src/test/java/org/apache/commons/csv/CSVFileParserTest.java
index cb01de376..e74d0e688 100644
--- a/src/test/java/org/apache/commons/csv/CSVFileParserTest.java
+++ b/src/test/java/org/apache/commons/csv/CSVFileParserTest.java
@@ -40,7 +40,7 @@
/**
* Parse tests using test files
*/
-public class CSVFileParserTest {
+class CSVFileParserTest {
private static final File BASE_DIR = new File("src/test/resources/org/apache/commons/csv/CSVFileParser");
diff --git a/src/test/java/org/apache/commons/csv/CSVFormatPredefinedTest.java b/src/test/java/org/apache/commons/csv/CSVFormatPredefinedTest.java
index 8ff96e968..dad08cdb1 100644
--- a/src/test/java/org/apache/commons/csv/CSVFormatPredefinedTest.java
+++ b/src/test/java/org/apache/commons/csv/CSVFormatPredefinedTest.java
@@ -26,7 +26,7 @@
/**
* Tests {@link CSVFormat.Predefined}.
*/
-public class CSVFormatPredefinedTest {
+class CSVFormatPredefinedTest {
private void test(final CSVFormat format, final String enumName) {
assertEquals(format, CSVFormat.Predefined.valueOf(enumName).getFormat());
diff --git a/src/test/java/org/apache/commons/csv/CSVFormatTest.java b/src/test/java/org/apache/commons/csv/CSVFormatTest.java
index 31ad476e7..99c7dc52c 100644
--- a/src/test/java/org/apache/commons/csv/CSVFormatTest.java
+++ b/src/test/java/org/apache/commons/csv/CSVFormatTest.java
@@ -54,7 +54,7 @@
/**
* Tests {@link CSVFormat}.
*/
-public class CSVFormatTest {
+class CSVFormatTest {
public enum EmptyEnum {
// empty enum.
diff --git a/src/test/java/org/apache/commons/csv/CSVParserTest.java b/src/test/java/org/apache/commons/csv/CSVParserTest.java
index 8304a568c..1d12357ee 100644
--- a/src/test/java/org/apache/commons/csv/CSVParserTest.java
+++ b/src/test/java/org/apache/commons/csv/CSVParserTest.java
@@ -71,7 +71,7 @@
* The test are organized in three different sections: The 'setter/getter' section, the lexer section and finally the parser section. In case a test fails, you
* should follow a top-down approach for fixing a potential bug (its likely that the parser itself fails if the lexer has problems...).
*/
-public class CSVParserTest {
+class CSVParserTest {
private static final CSVFormat EXCEL_WITH_HEADER = CSVFormat.EXCEL.withHeader();
diff --git a/src/test/java/org/apache/commons/csv/CSVPrinterTest.java b/src/test/java/org/apache/commons/csv/CSVPrinterTest.java
index d9d751987..341091e57 100644
--- a/src/test/java/org/apache/commons/csv/CSVPrinterTest.java
+++ b/src/test/java/org/apache/commons/csv/CSVPrinterTest.java
@@ -75,7 +75,7 @@
/**
* Tests {@link CSVPrinter}.
*/
-public class CSVPrinterTest {
+class CSVPrinterTest {
private static final int TABLE_RECORD_COUNT = 2;
private static final int TABLE_AND_HEADER_RECORD_COUNT = TABLE_RECORD_COUNT + 1;
diff --git a/src/test/java/org/apache/commons/csv/CSVRecordTest.java b/src/test/java/org/apache/commons/csv/CSVRecordTest.java
index 1c0e05d36..94060d62b 100644
--- a/src/test/java/org/apache/commons/csv/CSVRecordTest.java
+++ b/src/test/java/org/apache/commons/csv/CSVRecordTest.java
@@ -45,7 +45,7 @@
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-public class CSVRecordTest {
+class CSVRecordTest {
private enum EnumFixture {
UNKNOWN_COLUMN
diff --git a/src/test/java/org/apache/commons/csv/ExtendedBufferedReaderTest.java b/src/test/java/org/apache/commons/csv/ExtendedBufferedReaderTest.java
index 9d929c655..056b8a9c9 100644
--- a/src/test/java/org/apache/commons/csv/ExtendedBufferedReaderTest.java
+++ b/src/test/java/org/apache/commons/csv/ExtendedBufferedReaderTest.java
@@ -32,7 +32,7 @@
/**
* Test {@link ExtendedBufferedReader}.
*/
-public class ExtendedBufferedReaderTest {
+class ExtendedBufferedReaderTest {
static final String LF = "\n";
static final String CR = "\r";
diff --git a/src/test/java/org/apache/commons/csv/JiraCsv196Test.java b/src/test/java/org/apache/commons/csv/JiraCsv196Test.java
index 2beae36ad..aaf8e206b 100644
--- a/src/test/java/org/apache/commons/csv/JiraCsv196Test.java
+++ b/src/test/java/org/apache/commons/csv/JiraCsv196Test.java
@@ -28,7 +28,7 @@
import org.junit.jupiter.api.Test;
-public class JiraCsv196Test {
+class JiraCsv196Test {
private Reader getTestInput(final String path) {
return new InputStreamReader(ClassLoader.getSystemClassLoader().getResourceAsStream(path));
diff --git a/src/test/java/org/apache/commons/csv/JiraCsv318Test.java b/src/test/java/org/apache/commons/csv/JiraCsv318Test.java
index 1424809cc..984509e87 100644
--- a/src/test/java/org/apache/commons/csv/JiraCsv318Test.java
+++ b/src/test/java/org/apache/commons/csv/JiraCsv318Test.java
@@ -38,7 +38,7 @@
*
* @see CSVPrinter
*/
-public class JiraCsv318Test {
+class JiraCsv318Test {
private void checkOutput(final ByteArrayOutputStream baos) {
checkOutput(baos.toString());
diff --git a/src/test/java/org/apache/commons/csv/LexerTest.java b/src/test/java/org/apache/commons/csv/LexerTest.java
index 2c9742692..af0c69a77 100644
--- a/src/test/java/org/apache/commons/csv/LexerTest.java
+++ b/src/test/java/org/apache/commons/csv/LexerTest.java
@@ -41,7 +41,7 @@
/**
*/
-public class LexerTest {
+class LexerTest {
private static void assertContent(final String expectedContent, final Token actualToken) {
assertEquals(expectedContent, actualToken.content.toString());
diff --git a/src/test/java/org/apache/commons/csv/PerformanceTest.java b/src/test/java/org/apache/commons/csv/PerformanceTest.java
index bf0d48389..9284828e6 100644
--- a/src/test/java/org/apache/commons/csv/PerformanceTest.java
+++ b/src/test/java/org/apache/commons/csv/PerformanceTest.java
@@ -44,7 +44,7 @@
* Basic test harness.
*/
@SuppressWarnings("boxing")
-public class PerformanceTest {
+class PerformanceTest {
@FunctionalInterface
private interface CSVParserFactory {
diff --git a/src/test/java/org/apache/commons/csv/TokenTest.java b/src/test/java/org/apache/commons/csv/TokenTest.java
index 0a90a11ea..075c1b1d9 100644
--- a/src/test/java/org/apache/commons/csv/TokenTest.java
+++ b/src/test/java/org/apache/commons/csv/TokenTest.java
@@ -28,7 +28,7 @@
/**
* Tests {@link Token}.
*/
-public class TokenTest {
+class TokenTest {
@ParameterizedTest
@EnumSource(Token.Type.class)
diff --git a/src/test/java/org/apache/commons/csv/UserGuideTest.java b/src/test/java/org/apache/commons/csv/UserGuideTest.java
index 6f3f77bf6..6cd8c72d7 100644
--- a/src/test/java/org/apache/commons/csv/UserGuideTest.java
+++ b/src/test/java/org/apache/commons/csv/UserGuideTest.java
@@ -35,7 +35,7 @@
/**
* Tests for the user guide.
*/
-public class UserGuideTest {
+class UserGuideTest {
@TempDir
Path tempDir;
diff --git a/src/test/java/org/apache/commons/csv/issues/JiraCsv148Test.java b/src/test/java/org/apache/commons/csv/issues/JiraCsv148Test.java
index 5289b4a93..befe3b5c3 100644
--- a/src/test/java/org/apache/commons/csv/issues/JiraCsv148Test.java
+++ b/src/test/java/org/apache/commons/csv/issues/JiraCsv148Test.java
@@ -24,7 +24,7 @@
import org.apache.commons.csv.QuoteMode;
import org.junit.jupiter.api.Test;
-public class JiraCsv148Test {
+class JiraCsv148Test {
@Test
void testWithIgnoreSurroundingSpacesEmpty() {
diff --git a/src/test/java/org/apache/commons/csv/issues/JiraCsv149Test.java b/src/test/java/org/apache/commons/csv/issues/JiraCsv149Test.java
index c12574f28..b32e96566 100644
--- a/src/test/java/org/apache/commons/csv/issues/JiraCsv149Test.java
+++ b/src/test/java/org/apache/commons/csv/issues/JiraCsv149Test.java
@@ -29,7 +29,7 @@
import org.apache.commons.csv.CSVRecord;
import org.junit.jupiter.api.Test;
-public class JiraCsv149Test {
+class JiraCsv149Test {
private static final String CR_LF = "\r\n";
diff --git a/src/test/java/org/apache/commons/csv/issues/JiraCsv150Test.java b/src/test/java/org/apache/commons/csv/issues/JiraCsv150Test.java
index 5e9feb7dd..eec91d52d 100644
--- a/src/test/java/org/apache/commons/csv/issues/JiraCsv150Test.java
+++ b/src/test/java/org/apache/commons/csv/issues/JiraCsv150Test.java
@@ -27,7 +27,7 @@
import org.apache.commons.csv.CSVParser;
import org.junit.jupiter.api.Test;
-public class JiraCsv150Test {
+class JiraCsv150Test {
private void testDisable(final CSVFormat format, final StringReader reader) throws IOException {
try (CSVParser csvParser = CSVParser.builder().setReader(reader).setFormat(format).get()) {
diff --git a/src/test/java/org/apache/commons/csv/issues/JiraCsv154Test.java b/src/test/java/org/apache/commons/csv/issues/JiraCsv154Test.java
index 6276775c9..90d657fcd 100644
--- a/src/test/java/org/apache/commons/csv/issues/JiraCsv154Test.java
+++ b/src/test/java/org/apache/commons/csv/issues/JiraCsv154Test.java
@@ -26,7 +26,7 @@
import org.apache.commons.csv.CSVPrinter;
import org.junit.jupiter.api.Test;
-public class JiraCsv154Test {
+class JiraCsv154Test {
@Test
void testJiraCsv154_withCommentMarker() throws IOException {
diff --git a/src/test/java/org/apache/commons/csv/issues/JiraCsv167Test.java b/src/test/java/org/apache/commons/csv/issues/JiraCsv167Test.java
index 32dd23575..607d0cf2a 100644
--- a/src/test/java/org/apache/commons/csv/issues/JiraCsv167Test.java
+++ b/src/test/java/org/apache/commons/csv/issues/JiraCsv167Test.java
@@ -31,7 +31,7 @@
import org.apache.commons.csv.QuoteMode;
import org.junit.jupiter.api.Test;
-public class JiraCsv167Test {
+class JiraCsv167Test {
private Reader getTestReader() {
return new InputStreamReader(
diff --git a/src/test/java/org/apache/commons/csv/issues/JiraCsv198Test.java b/src/test/java/org/apache/commons/csv/issues/JiraCsv198Test.java
index 80b86b611..1117c12ac 100644
--- a/src/test/java/org/apache/commons/csv/issues/JiraCsv198Test.java
+++ b/src/test/java/org/apache/commons/csv/issues/JiraCsv198Test.java
@@ -31,7 +31,7 @@
import org.apache.commons.csv.CSVParser;
import org.junit.jupiter.api.Test;
-public class JiraCsv198Test {
+class JiraCsv198Test {
// @formatter:off
private static final CSVFormat CSV_FORMAT = CSVFormat.EXCEL.builder()
diff --git a/src/test/java/org/apache/commons/csv/issues/JiraCsv203Test.java b/src/test/java/org/apache/commons/csv/issues/JiraCsv203Test.java
index f467c6785..2c9226506 100644
--- a/src/test/java/org/apache/commons/csv/issues/JiraCsv203Test.java
+++ b/src/test/java/org/apache/commons/csv/issues/JiraCsv203Test.java
@@ -29,7 +29,7 @@
* JIRA: withNullString value is printed without quotes when
* QuoteMode.ALL is specified
*/
-public class JiraCsv203Test {
+class JiraCsv203Test {
@Test
void testQuoteModeAll() throws Exception {
diff --git a/src/test/java/org/apache/commons/csv/issues/JiraCsv206Test.java b/src/test/java/org/apache/commons/csv/issues/JiraCsv206Test.java
index cf9a0ad3d..2fecd10f1 100644
--- a/src/test/java/org/apache/commons/csv/issues/JiraCsv206Test.java
+++ b/src/test/java/org/apache/commons/csv/issues/JiraCsv206Test.java
@@ -30,7 +30,7 @@
import org.apache.commons.csv.CSVRecord;
import org.junit.jupiter.api.Test;
-public class JiraCsv206Test {
+class JiraCsv206Test {
@Test
void testJiraCsv206MultipleCharacterDelimiter() throws IOException {
diff --git a/src/test/java/org/apache/commons/csv/issues/JiraCsv211Test.java b/src/test/java/org/apache/commons/csv/issues/JiraCsv211Test.java
index 04b4d06d5..28b559d1e 100644
--- a/src/test/java/org/apache/commons/csv/issues/JiraCsv211Test.java
+++ b/src/test/java/org/apache/commons/csv/issues/JiraCsv211Test.java
@@ -28,7 +28,7 @@
import org.apache.commons.csv.CSVParser;
import org.junit.jupiter.api.Test;
-public class JiraCsv211Test {
+class JiraCsv211Test {
@Test
void testJiraCsv211Format() throws IOException {
diff --git a/src/test/java/org/apache/commons/csv/issues/JiraCsv213Test.java b/src/test/java/org/apache/commons/csv/issues/JiraCsv213Test.java
index f32a6fc40..90f5da4c5 100644
--- a/src/test/java/org/apache/commons/csv/issues/JiraCsv213Test.java
+++ b/src/test/java/org/apache/commons/csv/issues/JiraCsv213Test.java
@@ -38,7 +38,7 @@
* you want, you need to open a new CSVParser.
*
*/
-public class JiraCsv213Test {
+class JiraCsv213Test {
private void createEndChannel(final File csvFile) {
// @formatter:off
diff --git a/src/test/java/org/apache/commons/csv/issues/JiraCsv247Test.java b/src/test/java/org/apache/commons/csv/issues/JiraCsv247Test.java
index a460250b5..c2d9ac591 100644
--- a/src/test/java/org/apache/commons/csv/issues/JiraCsv247Test.java
+++ b/src/test/java/org/apache/commons/csv/issues/JiraCsv247Test.java
@@ -34,7 +34,7 @@
import org.apache.commons.csv.CSVRecord;
import org.junit.jupiter.api.Test;
-public class JiraCsv247Test {
+class JiraCsv247Test {
@Test
void testHeadersMissingOneColumnWhenAllowingMissingColumnNames() throws Exception {
diff --git a/src/test/java/org/apache/commons/csv/issues/JiraCsv248Test.java b/src/test/java/org/apache/commons/csv/issues/JiraCsv248Test.java
index 7a9c0aa99..480a9dffa 100644
--- a/src/test/java/org/apache/commons/csv/issues/JiraCsv248Test.java
+++ b/src/test/java/org/apache/commons/csv/issues/JiraCsv248Test.java
@@ -33,7 +33,7 @@
import org.apache.commons.csv.CSVRecord;
import org.junit.jupiter.api.Test;
-public class JiraCsv248Test {
+class JiraCsv248Test {
private static InputStream getTestInput() {
return ClassLoader.getSystemClassLoader().getResourceAsStream("org/apache/commons/csv/CSV-248/csvRecord.bin");
diff --git a/src/test/java/org/apache/commons/csv/issues/JiraCsv249Test.java b/src/test/java/org/apache/commons/csv/issues/JiraCsv249Test.java
index 8e2a5168f..4034b04bd 100644
--- a/src/test/java/org/apache/commons/csv/issues/JiraCsv249Test.java
+++ b/src/test/java/org/apache/commons/csv/issues/JiraCsv249Test.java
@@ -32,7 +32,7 @@
import org.apache.commons.csv.CSVRecord;
import org.junit.jupiter.api.Test;
-public class JiraCsv249Test {
+class JiraCsv249Test {
@Test
void testJiraCsv249() throws IOException {
diff --git a/src/test/java/org/apache/commons/csv/issues/JiraCsv253Test.java b/src/test/java/org/apache/commons/csv/issues/JiraCsv253Test.java
index 3d7498008..b78c1baa4 100644
--- a/src/test/java/org/apache/commons/csv/issues/JiraCsv253Test.java
+++ b/src/test/java/org/apache/commons/csv/issues/JiraCsv253Test.java
@@ -33,7 +33,7 @@
/**
* Setting QuoteMode:ALL_NON_NULL or NON_NUMERIC can distinguish between empty string columns and absent value columns.
*/
-public class JiraCsv253Test {
+class JiraCsv253Test {
private void assertArrayEqual(final String[] expected, final CSVRecord actual) {
for (int i = 0; i < expected.length; i++) {
diff --git a/src/test/java/org/apache/commons/csv/issues/JiraCsv263Test.java b/src/test/java/org/apache/commons/csv/issues/JiraCsv263Test.java
index 28377bb84..18bb9580a 100644
--- a/src/test/java/org/apache/commons/csv/issues/JiraCsv263Test.java
+++ b/src/test/java/org/apache/commons/csv/issues/JiraCsv263Test.java
@@ -32,7 +32,7 @@
/**
* Tests [CSV-263] Print from Reader with embedded quotes generates incorrect output.
*/
-public class JiraCsv263Test {
+class JiraCsv263Test {
@Test
void testPrintFromReaderWithQuotes() throws IOException {
diff --git a/src/test/java/org/apache/commons/csv/issues/JiraCsv264Test.java b/src/test/java/org/apache/commons/csv/issues/JiraCsv264Test.java
index e64495267..857e42cb8 100644
--- a/src/test/java/org/apache/commons/csv/issues/JiraCsv264Test.java
+++ b/src/test/java/org/apache/commons/csv/issues/JiraCsv264Test.java
@@ -35,7 +35,7 @@
*
* @see Jira Ticker
*/
-public class JiraCsv264Test {
+class JiraCsv264Test {
private static final String CSV_STRING = "\"\",\"B\",\"\"\n" +
"\"1\",\"2\",\"3\"\n" +
diff --git a/src/test/java/org/apache/commons/csv/issues/JiraCsv265Test.java b/src/test/java/org/apache/commons/csv/issues/JiraCsv265Test.java
index 286fa7f18..1bccad702 100644
--- a/src/test/java/org/apache/commons/csv/issues/JiraCsv265Test.java
+++ b/src/test/java/org/apache/commons/csv/issues/JiraCsv265Test.java
@@ -33,7 +33,7 @@
/**
* Tests [CSV-265] {@link CSVRecord#getCharacterPosition()} returns the correct position after encountering a comment.
*/
-public class JiraCsv265Test {
+class JiraCsv265Test {
@Test
void testCharacterPositionWithComments() throws IOException {
diff --git a/src/test/java/org/apache/commons/csv/issues/JiraCsv271Test.java b/src/test/java/org/apache/commons/csv/issues/JiraCsv271Test.java
index 9abdbbe6d..0269dec5d 100644
--- a/src/test/java/org/apache/commons/csv/issues/JiraCsv271Test.java
+++ b/src/test/java/org/apache/commons/csv/issues/JiraCsv271Test.java
@@ -29,7 +29,7 @@
import org.apache.commons.csv.CSVPrinter;
import org.junit.jupiter.api.Test;
-public class JiraCsv271Test {
+class JiraCsv271Test {
@Test
void testJiraCsv271_withArray() throws IOException {
diff --git a/src/test/java/org/apache/commons/csv/issues/JiraCsv288Test.java b/src/test/java/org/apache/commons/csv/issues/JiraCsv288Test.java
index 6626964f9..065ee6bb3 100644
--- a/src/test/java/org/apache/commons/csv/issues/JiraCsv288Test.java
+++ b/src/test/java/org/apache/commons/csv/issues/JiraCsv288Test.java
@@ -31,7 +31,7 @@
import org.apache.commons.csv.CSVRecord;
import org.junit.jupiter.api.Test;
-public class JiraCsv288Test {
+class JiraCsv288Test {
private void print(final CSVRecord csvRecord, final CSVPrinter csvPrinter) throws IOException {
for (final String value : csvRecord) {
diff --git a/src/test/java/org/apache/commons/csv/issues/JiraCsv290Test.java b/src/test/java/org/apache/commons/csv/issues/JiraCsv290Test.java
index bfc0f1d5b..f251eeb7a 100644
--- a/src/test/java/org/apache/commons/csv/issues/JiraCsv290Test.java
+++ b/src/test/java/org/apache/commons/csv/issues/JiraCsv290Test.java
@@ -58,7 +58,7 @@
// 2 xyz \\b:\b \\t:\t \\n:\n \\r:\r a b
// 3 a b,c,d "quoted" e
//
-public class JiraCsv290Test {
+class JiraCsv290Test {
private void testHelper(final String fileName, final CSVFormat format) throws Exception {
List> content = new ArrayList<>();
diff --git a/src/test/java/org/apache/commons/csv/issues/JiraCsv294Test.java b/src/test/java/org/apache/commons/csv/issues/JiraCsv294Test.java
index 75e26cf69..0e5de0751 100644
--- a/src/test/java/org/apache/commons/csv/issues/JiraCsv294Test.java
+++ b/src/test/java/org/apache/commons/csv/issues/JiraCsv294Test.java
@@ -36,7 +36,7 @@
import org.apache.commons.csv.CSVRecord;
import org.junit.jupiter.api.Test;
-public class JiraCsv294Test {
+class JiraCsv294Test {
private static void testInternal(final CSVFormat format, final String expectedSubstring) throws IOException {
final ByteArrayOutputStream bos = new ByteArrayOutputStream();
diff --git a/src/test/java/org/apache/commons/csv/issues/JiraCsv93Test.java b/src/test/java/org/apache/commons/csv/issues/JiraCsv93Test.java
index e52739dd1..781641226 100644
--- a/src/test/java/org/apache/commons/csv/issues/JiraCsv93Test.java
+++ b/src/test/java/org/apache/commons/csv/issues/JiraCsv93Test.java
@@ -43,7 +43,7 @@
* Jira CSV-253 to a certain extent.
*
*/
-public class JiraCsv93Test {
+class JiraCsv93Test {
private static Object[] objects1 = {"abc", "", null, "a,b,c", 123};
private static Object[] objects2 = {"abc", "NULL", null, "a,b,c", 123};
diff --git a/src/test/java/org/apache/commons/csv/perf/PerformanceTest.java b/src/test/java/org/apache/commons/csv/perf/PerformanceTest.java
index a7f081027..bead12378 100644
--- a/src/test/java/org/apache/commons/csv/perf/PerformanceTest.java
+++ b/src/test/java/org/apache/commons/csv/perf/PerformanceTest.java
@@ -43,7 +43,7 @@
*
* To run this test, use: mvn test -Dtest=PerformanceTest
*/
-public class PerformanceTest {
+class PerformanceTest {
private static final String TEST_RESRC = "org/apache/commons/csv/perf/worldcitiespop.txt.gz";
From 9588c7ef7e7ab003bb58a6a0ece3b8df559c9f13 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Fri, 13 Jun 2025 12:54:56 +0000
Subject: [PATCH 019/245] Bump github/codeql-action from 3.28.19 to 3.29.0
Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.28.19 to 3.29.0.
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/codeql-action/compare/fca7ace96b7d713c7035871441bd52efbe39e27e...ce28f5bb42b7a9f2c824e633a3f6ee835bab6858)
---
updated-dependencies:
- dependency-name: github/codeql-action
dependency-version: 3.29.0
dependency-type: direct:production
update-type: version-update:semver-minor
...
Signed-off-by: dependabot[bot]
---
.github/workflows/codeql-analysis.yml | 6 +++---
.github/workflows/scorecards-analysis.yml | 2 +-
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml
index 3f2fc9e55..1f3a099bd 100644
--- a/.github/workflows/codeql-analysis.yml
+++ b/.github/workflows/codeql-analysis.yml
@@ -57,7 +57,7 @@ jobs:
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
- uses: github/codeql-action/init@fca7ace96b7d713c7035871441bd52efbe39e27e # 3.28.19
+ uses: github/codeql-action/init@ce28f5bb42b7a9f2c824e633a3f6ee835bab6858 # 3.29.0
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
@@ -68,7 +68,7 @@ jobs:
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
- uses: github/codeql-action/autobuild@fca7ace96b7d713c7035871441bd52efbe39e27e # 3.28.19
+ uses: github/codeql-action/autobuild@ce28f5bb42b7a9f2c824e633a3f6ee835bab6858 # 3.29.0
# ℹ️ Command-line programs to run using the OS shell.
# 📚 https://git.io/JvXDl
@@ -82,4 +82,4 @@ jobs:
# make release
- name: Perform CodeQL Analysis
- uses: github/codeql-action/analyze@fca7ace96b7d713c7035871441bd52efbe39e27e # 3.28.19
+ uses: github/codeql-action/analyze@ce28f5bb42b7a9f2c824e633a3f6ee835bab6858 # 3.29.0
diff --git a/.github/workflows/scorecards-analysis.yml b/.github/workflows/scorecards-analysis.yml
index 22cd0a2d1..25c086a73 100644
--- a/.github/workflows/scorecards-analysis.yml
+++ b/.github/workflows/scorecards-analysis.yml
@@ -64,6 +64,6 @@ jobs:
retention-days: 5
- name: "Upload to code-scanning"
- uses: github/codeql-action/upload-sarif@fca7ace96b7d713c7035871441bd52efbe39e27e # 3.28.19
+ uses: github/codeql-action/upload-sarif@ce28f5bb42b7a9f2c824e633a3f6ee835bab6858 # 3.29.0
with:
sarif_file: results.sarif
From 701a64fed94d79096dd2f35be8c4c119fbb8ad4c Mon Sep 17 00:00:00 2001
From: "Gary D. Gregory"
Date: Thu, 19 Jun 2025 10:39:26 -0400
Subject: [PATCH 020/245] Bump org.apache.commons:commons-parent from 84 to 85
---
pom.xml | 2 +-
src/changes/changes.xml | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/pom.xml b/pom.xml
index ec93a5b3b..45928257e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -20,7 +20,7 @@
org.apache.commons
commons-parent
- 84
+ 85
commons-csv
1.14.1-SNAPSHOT
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index c86f459da..bff6748a4 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -47,8 +47,8 @@
org.apache.commons.csv.CSVPrinter.printRecords(ResultSet) now writes one record at a time using a lock.
+ Bump org.apache.commons:commons-parent from 81 to 85 #542.
Bump commons-io:commons-io from 2.18.0 to 2.19.0.
- Bump org.apache.commons:commons-parent from 81 to 84 #542.
Bump com.opencsv:opencsv from 5.10 to 5.11.1 #545, #551.
From 6bbb815a0a317e620a91ceb055687eb0ec9669fb Mon Sep 17 00:00:00 2001
From: "Gary D. Gregory"
Date: Sat, 21 Jun 2025 15:44:30 -0400
Subject: [PATCH 021/245] Test refactoring
---
.../org/apache/commons/csv/CSVParserTest.java | 62 +++++++++----------
.../org/apache/commons/csv/CsvAssertions.java | 29 +++++++++
.../commons/csv/issues/JiraCsv253Test.java | 16 ++---
3 files changed, 65 insertions(+), 42 deletions(-)
create mode 100644 src/test/java/org/apache/commons/csv/CsvAssertions.java
diff --git a/src/test/java/org/apache/commons/csv/CSVParserTest.java b/src/test/java/org/apache/commons/csv/CSVParserTest.java
index 1d12357ee..22b1417c8 100644
--- a/src/test/java/org/apache/commons/csv/CSVParserTest.java
+++ b/src/test/java/org/apache/commons/csv/CSVParserTest.java
@@ -22,7 +22,7 @@
import static org.apache.commons.csv.Constants.CR;
import static org.apache.commons.csv.Constants.CRLF;
import static org.apache.commons.csv.Constants.LF;
-import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+import static org.apache.commons.csv.CsvAssertions.assertValuesEquals;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertInstanceOf;
@@ -217,7 +217,7 @@ void testBackslashEscapingOld() throws IOException {
assertEquals(res.length, records.size());
assertFalse(records.isEmpty());
for (int i = 0; i < res.length; i++) {
- assertArrayEquals(res[i], records.get(i).values());
+ assertValuesEquals(res[i], records.get(i));
}
}
}
@@ -479,7 +479,7 @@ void testEmptyLineBehaviorCSV() throws Exception {
assertEquals(res.length, records.size());
assertFalse(records.isEmpty());
for (int i = 0; i < res.length; i++) {
- assertArrayEquals(res[i], records.get(i).values());
+ assertValuesEquals(res[i], records.get(i));
}
}
}
@@ -496,7 +496,7 @@ void testEmptyLineBehaviorExcel() throws Exception {
assertEquals(res.length, records.size());
assertFalse(records.isEmpty());
for (int i = 0; i < res.length; i++) {
- assertArrayEquals(res[i], records.get(i).values());
+ assertValuesEquals(res[i], records.get(i));
}
}
}
@@ -521,7 +521,7 @@ void testEndOfFileBehaviorCSV() throws Exception {
assertEquals(res.length, records.size());
assertFalse(records.isEmpty());
for (int i = 0; i < res.length; i++) {
- assertArrayEquals(res[i], records.get(i).values());
+ assertValuesEquals(res[i], records.get(i));
}
}
}
@@ -540,7 +540,7 @@ void testEndOfFileBehaviorExcel() throws Exception {
assertEquals(res.length, records.size());
assertFalse(records.isEmpty());
for (int i = 0; i < res.length; i++) {
- assertArrayEquals(res[i], records.get(i).values());
+ assertValuesEquals(res[i], records.get(i));
}
}
}
@@ -556,7 +556,7 @@ void testExcelFormat1() throws IOException {
assertEquals(res.length, records.size());
assertFalse(records.isEmpty());
for (int i = 0; i < res.length; i++) {
- assertArrayEquals(res[i], records.get(i).values());
+ assertValuesEquals(res[i], records.get(i));
}
}
}
@@ -570,7 +570,7 @@ void testExcelFormat2() throws Exception {
assertEquals(res.length, records.size());
assertFalse(records.isEmpty());
for (int i = 0; i < res.length; i++) {
- assertArrayEquals(res[i], records.get(i).values());
+ assertValuesEquals(res[i], records.get(i));
}
}
}
@@ -629,9 +629,9 @@ void testForEach() throws Exception {
records.add(record);
}
assertEquals(3, records.size());
- assertArrayEquals(new String[] { "a", "b", "c" }, records.get(0).values());
- assertArrayEquals(new String[] { "1", "2", "3" }, records.get(1).values());
- assertArrayEquals(new String[] { "x", "y", "z" }, records.get(2).values());
+ assertValuesEquals(new String[] { "a", "b", "c" }, records.get(0));
+ assertValuesEquals(new String[] { "1", "2", "3" }, records.get(1));
+ assertValuesEquals(new String[] { "x", "y", "z" }, records.get(2));
}
}
@@ -756,7 +756,7 @@ void testGetHeaderNamesReadOnly() throws IOException {
void testGetLine() throws IOException {
try (CSVParser parser = CSVParser.parse(CSV_INPUT, CSVFormat.DEFAULT.withIgnoreSurroundingSpaces())) {
for (final String[] re : RESULT) {
- assertArrayEquals(re, parser.nextRecord().values());
+ assertValuesEquals(re, parser.nextRecord());
}
assertNull(parser.nextRecord());
@@ -782,7 +782,7 @@ void testGetLineNumberWithLF() throws Exception {
void testGetOneLine() throws IOException {
try (CSVParser parser = CSVParser.parse(CSV_INPUT_1, CSVFormat.DEFAULT)) {
final CSVRecord record = parser.getRecords().get(0);
- assertArrayEquals(RESULT[0], record.values());
+ assertValuesEquals(RESULT[0], record);
}
}
@@ -803,11 +803,11 @@ void testGetOneLineOneParser() throws IOException {
writer.append(CSV_INPUT_1);
writer.append(format.getRecordSeparator());
final CSVRecord record1 = parser.nextRecord();
- assertArrayEquals(RESULT[0], record1.values());
+ assertValuesEquals(RESULT[0], record1);
writer.append(CSV_INPUT_2);
writer.append(format.getRecordSeparator());
final CSVRecord record2 = parser.nextRecord();
- assertArrayEquals(RESULT[1], record2.values());
+ assertValuesEquals(RESULT[1], record2);
}
}
@@ -877,7 +877,7 @@ void testGetRecords() throws IOException {
assertEquals(RESULT.length, records.size());
assertFalse(records.isEmpty());
for (int i = 0; i < RESULT.length; i++) {
- assertArrayEquals(RESULT[i], records.get(i).values());
+ assertValuesEquals(RESULT[i], records.get(i));
}
}
}
@@ -899,7 +899,7 @@ void testGetRecordsMaxRows(final long maxRows) throws IOException {
assertEquals(expectedLength, records.size());
assertFalse(records.isEmpty());
for (int i = 0; i < expectedLength; i++) {
- assertArrayEquals(RESULT[i], records.get(i).values());
+ assertValuesEquals(RESULT[i], records.get(i));
}
}
}
@@ -1155,12 +1155,12 @@ void testIterator() throws Exception {
final Iterator iterator = parser.iterator();
assertTrue(iterator.hasNext());
assertThrows(UnsupportedOperationException.class, iterator::remove);
- assertArrayEquals(new String[] { "a", "b", "c" }, iterator.next().values());
- assertArrayEquals(new String[] { "1", "2", "3" }, iterator.next().values());
+ assertValuesEquals(new String[] { "a", "b", "c" }, iterator.next());
+ assertValuesEquals(new String[] { "1", "2", "3" }, iterator.next());
assertTrue(iterator.hasNext());
assertTrue(iterator.hasNext());
assertTrue(iterator.hasNext());
- assertArrayEquals(new String[] { "x", "y", "z" }, iterator.next().values());
+ assertValuesEquals(new String[] { "x", "y", "z" }, iterator.next());
assertFalse(iterator.hasNext());
assertThrows(NoSuchElementException.class, iterator::next);
}
@@ -1174,20 +1174,20 @@ void testIteratorMaxRows(final long maxRows) throws Exception {
final Iterator iterator = parser.iterator();
assertTrue(iterator.hasNext());
assertThrows(UnsupportedOperationException.class, iterator::remove);
- assertArrayEquals(new String[] { "a", "b", "c" }, iterator.next().values());
+ assertValuesEquals(new String[] { "a", "b", "c" }, iterator.next());
final boolean noLimit = maxRows <= 0;
final int fixtureLen = 3;
final long expectedLen = noLimit ? fixtureLen : Math.min(fixtureLen, maxRows);
if (expectedLen > 1) {
assertTrue(iterator.hasNext());
- assertArrayEquals(new String[] { "1", "2", "3" }, iterator.next().values());
+ assertValuesEquals(new String[] { "1", "2", "3" }, iterator.next());
}
assertEquals(expectedLen > 2, iterator.hasNext());
// again
assertEquals(expectedLen > 2, iterator.hasNext());
if (expectedLen == fixtureLen) {
assertTrue(iterator.hasNext());
- assertArrayEquals(new String[] { "x", "y", "z" }, iterator.next().values());
+ assertValuesEquals(new String[] { "x", "y", "z" }, iterator.next());
}
assertFalse(iterator.hasNext());
assertThrows(NoSuchElementException.class, iterator::next);
@@ -1584,7 +1584,7 @@ void testParsingPrintedEmptyFirstColumn(final CSVFormat.Predefined format) throw
.setFormat(format.getFormat())
.get()) {
for (final String[] line : lines) {
- assertArrayEquals(line, csvRecords.nextRecord().values());
+ assertValuesEquals(line, csvRecords.nextRecord());
}
assertNull(csvRecords.nextRecord());
}
@@ -1715,7 +1715,7 @@ void testStartWithEmptyLinesThenHeaders() throws Exception {
assertEquals(res.length, records.size());
assertFalse(records.isEmpty());
for (int i = 0; i < res.length; i++) {
- assertArrayEquals(res[i], records.get(i).values());
+ assertValuesEquals(res[i], records.get(i));
}
}
}
@@ -1727,9 +1727,9 @@ void testStream() throws Exception {
try (CSVParser parser = CSVFormat.DEFAULT.parse(in)) {
final List list = parser.stream().collect(Collectors.toList());
assertFalse(list.isEmpty());
- assertArrayEquals(new String[] { "a", "b", "c" }, list.get(0).values());
- assertArrayEquals(new String[] { "1", "2", "3" }, list.get(1).values());
- assertArrayEquals(new String[] { "x", "y", "z" }, list.get(2).values());
+ assertValuesEquals(new String[] { "a", "b", "c" }, list.get(0));
+ assertValuesEquals(new String[] { "1", "2", "3" }, list.get(1));
+ assertValuesEquals(new String[] { "x", "y", "z" }, list.get(2));
}
}
@@ -1740,12 +1740,12 @@ void testStreamMaxRows(final long maxRows) throws Exception {
try (CSVParser parser = CSVFormat.DEFAULT.builder().setMaxRows(maxRows).get().parse(in)) {
final List list = parser.stream().collect(Collectors.toList());
assertFalse(list.isEmpty());
- assertArrayEquals(new String[] { "a", "b", "c" }, list.get(0).values());
+ assertValuesEquals(new String[] { "a", "b", "c" }, list.get(0));
if (maxRows <= 0 || maxRows > 1) {
- assertArrayEquals(new String[] { "1", "2", "3" }, list.get(1).values());
+ assertValuesEquals(new String[] { "1", "2", "3" }, list.get(1));
}
if (maxRows <= 0 || maxRows > 2) {
- assertArrayEquals(new String[] { "x", "y", "z" }, list.get(2).values());
+ assertValuesEquals(new String[] { "x", "y", "z" }, list.get(2));
}
}
}
diff --git a/src/test/java/org/apache/commons/csv/CsvAssertions.java b/src/test/java/org/apache/commons/csv/CsvAssertions.java
new file mode 100644
index 000000000..b6c2b5d9c
--- /dev/null
+++ b/src/test/java/org/apache/commons/csv/CsvAssertions.java
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.commons.csv;
+
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+
+public class CsvAssertions {
+
+ public static void assertValuesEquals(final String[] expected, final CSVRecord actual) {
+ assertArrayEquals(expected, actual.values());
+ }
+}
diff --git a/src/test/java/org/apache/commons/csv/issues/JiraCsv253Test.java b/src/test/java/org/apache/commons/csv/issues/JiraCsv253Test.java
index b78c1baa4..136940859 100644
--- a/src/test/java/org/apache/commons/csv/issues/JiraCsv253Test.java
+++ b/src/test/java/org/apache/commons/csv/issues/JiraCsv253Test.java
@@ -18,7 +18,7 @@
*/
package org.apache.commons.csv.issues;
-import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.apache.commons.csv.CsvAssertions.assertValuesEquals;
import java.io.IOException;
import java.io.StringReader;
@@ -35,22 +35,16 @@
*/
class JiraCsv253Test {
- private void assertArrayEqual(final String[] expected, final CSVRecord actual) {
- for (int i = 0; i < expected.length; i++) {
- assertEquals(expected[i], actual.get(i));
- }
- }
-
@Test
void testHandleAbsentValues() throws IOException {
final String source = "\"John\",,\"Doe\"\n" + ",\"AA\",123\n" + "\"John\",90,\n" + "\"\",,90";
final CSVFormat csvFormat = CSVFormat.DEFAULT.builder().setQuoteMode(QuoteMode.NON_NUMERIC).get();
try (CSVParser parser = csvFormat.parse(new StringReader(source))) {
final Iterator csvRecords = parser.iterator();
- assertArrayEqual(new String[] {"John", null, "Doe"}, csvRecords.next());
- assertArrayEqual(new String[] {null, "AA", "123"}, csvRecords.next());
- assertArrayEqual(new String[] {"John", "90", null}, csvRecords.next());
- assertArrayEqual(new String[] {"", null, "90"}, csvRecords.next());
+ assertValuesEquals(new String[] {"John", null, "Doe"}, csvRecords.next());
+ assertValuesEquals(new String[] {null, "AA", "123"}, csvRecords.next());
+ assertValuesEquals(new String[] {"John", "90", null}, csvRecords.next());
+ assertValuesEquals(new String[] {"", null, "90"}, csvRecords.next());
}
}
}
From 0aa9c47fbd60d67f58361676a6b6d30f319fada6 Mon Sep 17 00:00:00 2001
From: "Gary D. Gregory"
Date: Sat, 21 Jun 2025 15:57:55 -0400
Subject: [PATCH 022/245] [CSV-254] POSTGRESQL_CSV cannot parse correctly (null
vs zero-length string)
Add test
---
pom.xml | 1 +
.../commons/csv/issues/JiraCsv254Test.java | 52 +++++++++++++++++++
.../apache/commons/csv/CSV-254/csv-254.csv | 3 ++
3 files changed, 56 insertions(+)
create mode 100644 src/test/java/org/apache/commons/csv/issues/JiraCsv254Test.java
create mode 100644 src/test/resources/org/apache/commons/csv/CSV-254/csv-254.csv
diff --git a/pom.xml b/pom.xml
index 45928257e..a1eca0578 100644
--- a/pom.xml
+++ b/pom.xml
@@ -183,6 +183,7 @@
src/test/resources/org/apache/commons/csv/CSV-196/emoji.csv
src/test/resources/org/apache/commons/csv/CSV-196/japanese.csv
src/test/resources/org/apache/commons/csv/CSV-213/999751170.patch.csv
+ src/test/resources/org/apache/commons/csv/CSV-254/csv-254.csv
src/test/resources/org/apache/commons/csv/CSVFileParser/bom.csv
src/test/resources/org/apache/commons/csv/CSVFileParser/test.csv
src/test/resources/org/apache/commons/csv/CSVFileParser/test_default.txt
diff --git a/src/test/java/org/apache/commons/csv/issues/JiraCsv254Test.java b/src/test/java/org/apache/commons/csv/issues/JiraCsv254Test.java
new file mode 100644
index 000000000..629b42ee6
--- /dev/null
+++ b/src/test/java/org/apache/commons/csv/issues/JiraCsv254Test.java
@@ -0,0 +1,52 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.commons.csv.issues;
+
+import static org.apache.commons.csv.CsvAssertions.assertValuesEquals;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.util.Iterator;
+
+import org.apache.commons.csv.CSVFormat;
+import org.apache.commons.csv.CSVParser;
+import org.apache.commons.csv.CSVRecord;
+import org.junit.jupiter.api.Test;
+
+/**
+ * Tests https://issues.apache.org/jira/browse/CSV-254.
+ */
+class JiraCsv254Test {
+
+ @Test
+ void test() throws IOException {
+ final CSVFormat csvFormat = CSVFormat.POSTGRESQL_CSV;
+ try (BufferedReader reader = Files.newBufferedReader(Paths.get("src/test/resources/org/apache/commons/csv/CSV-254/csv-254.csv"),
+ StandardCharsets.UTF_8); CSVParser parser = csvFormat.parse(reader)) {
+ final Iterator csvRecords = parser.iterator();
+ assertValuesEquals(new String[] { "AA", "33", null }, csvRecords.next());
+ assertValuesEquals(new String[] { "AA", null, "" }, csvRecords.next());
+ assertValuesEquals(new String[] { null, "33", "CC" }, csvRecords.next());
+ }
+ }
+}
diff --git a/src/test/resources/org/apache/commons/csv/CSV-254/csv-254.csv b/src/test/resources/org/apache/commons/csv/CSV-254/csv-254.csv
new file mode 100644
index 000000000..e7d2972c5
--- /dev/null
+++ b/src/test/resources/org/apache/commons/csv/CSV-254/csv-254.csv
@@ -0,0 +1,3 @@
+AA,33,
+AA,,""
+,33,CC
From b62ddc54e2063ed37b6d546bbab7caf567c82446 Mon Sep 17 00:00:00 2001
From: "Gary D. Gregory"
Date: Sun, 22 Jun 2025 14:57:06 -0400
Subject: [PATCH 023/245] [CSV-257] Updating from 1.6 to 1.7 breaks a header
line with a missing header name
Document the current behavior: Throw a IllegalArgumentException is a
header name is missing.
---
.../commons/csv/issues/JiraCsv257Test.java | 84 +++++++++++++++++++
1 file changed, 84 insertions(+)
create mode 100644 src/test/java/org/apache/commons/csv/issues/JiraCsv257Test.java
diff --git a/src/test/java/org/apache/commons/csv/issues/JiraCsv257Test.java b/src/test/java/org/apache/commons/csv/issues/JiraCsv257Test.java
new file mode 100644
index 000000000..4234a7a0f
--- /dev/null
+++ b/src/test/java/org/apache/commons/csv/issues/JiraCsv257Test.java
@@ -0,0 +1,84 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.commons.csv.issues;
+
+import static org.junit.jupiter.api.Assertions.assertThrows;
+
+import java.io.IOException;
+import java.io.StringReader;
+
+import org.apache.commons.csv.CSVFormat;
+import org.apache.commons.csv.CSVParser;
+import org.junit.jupiter.api.Test;
+
+/**
+ * Tests https://issues.apache.org/jira/browse/CSV-257
+ */
+class JiraCsv257Test {
+
+ private static final String INPUT = ",";
+
+ @Test
+ void testHeaderBuilder() throws IOException {
+ // @formatter:off
+ final CSVFormat format = CSVFormat.RFC4180.builder()
+ .setDelimiter(INPUT.charAt(0))
+ .setHeader()
+ .setSkipHeaderRecord(true)
+ .setIgnoreSurroundingSpaces(true)
+ .get();
+ // @formatter:on
+ // Document the current behavior: Throw a IllegalArgumentException is a header name is missing.
+ assertThrows(IllegalArgumentException.class, () -> {
+ try (CSVParser parser = CSVParser.parse(INPUT, format)) {
+ // empty
+ }
+ });
+ }
+
+ @Test
+ void testHeaderDepreacted() throws IOException {
+ // @formatter:off
+ final CSVFormat format = CSVFormat.RFC4180
+ .withDelimiter(INPUT.charAt(0))
+ .withFirstRecordAsHeader()
+ .withIgnoreSurroundingSpaces();
+ // @formatter:on
+ // Document the current behavior: Throw a IllegalArgumentException is a header name is missing.
+ assertThrows(IllegalArgumentException.class, () -> {
+ try (CSVParser parser = new CSVParser(new StringReader(INPUT), format)) {
+ // empty
+ }
+ });
+ }
+
+ @Test
+ void testNoHeaderBuilder() throws IOException {
+ // @formatter:off
+ final CSVFormat format = CSVFormat.RFC4180.builder()
+ .setDelimiter(INPUT.charAt(0))
+ .setIgnoreSurroundingSpaces(true)
+ .get();
+ // @formatter:on
+ try (CSVParser parser = CSVParser.parse(INPUT, format)) {
+ // empty
+ }
+ }
+}
From cf6a90d1b9064e38cc785cab4ad9ebf6b18cfda3 Mon Sep 17 00:00:00 2001
From: "Gary D. Gregory"
Date: Sun, 22 Jun 2025 15:10:06 -0400
Subject: [PATCH 024/245] Use longer lines
---
.../org/apache/commons/csv/CSVRecord.java | 19 +++++++++----------
1 file changed, 9 insertions(+), 10 deletions(-)
diff --git a/src/main/java/org/apache/commons/csv/CSVRecord.java b/src/main/java/org/apache/commons/csv/CSVRecord.java
index 148c76ca8..f619717d0 100644
--- a/src/main/java/org/apache/commons/csv/CSVRecord.java
+++ b/src/main/java/org/apache/commons/csv/CSVRecord.java
@@ -125,20 +125,20 @@ public String get(final int i) {
public String get(final String name) {
final Map headerMap = getHeaderMapRaw();
if (headerMap == null) {
- throw new IllegalStateException(
- "No header mapping was specified, the record values can't be accessed by name");
+ throw new IllegalStateException("No header mapping was specified, the record values can't be accessed by name");
}
final Integer index = headerMap.get(name);
if (index == null) {
- throw new IllegalArgumentException(String.format("Mapping for %s not found, expected one of %s", name,
- headerMap.keySet()));
+ throw new IllegalArgumentException(String.format("Mapping for %s not found, expected one of %s", name, headerMap.keySet()));
}
try {
- return values[index.intValue()]; // Explicit (un)boxing is intentional
+ return values[index.intValue()]; // Explicit (un)boxing is intentional
} catch (final ArrayIndexOutOfBoundsException e) {
- throw new IllegalArgumentException(String.format(
- "Index for header '%s' is %d but CSVRecord only has %d values!", name, index,
- Integer.valueOf(values.length))); // Explicit (un)boxing is intentional
+ throw new IllegalArgumentException(
+ String.format("Index for header '%s' is %d but CSVRecord only has %d values!", name, index, Integer.valueOf(values.length))); // Explicit
+ // (un)boxing
+ // is
+ // intentional
}
}
@@ -354,8 +354,7 @@ public Map toMap() {
*/
@Override
public String toString() {
- return "CSVRecord [comment='" + comment + "', recordNumber=" + recordNumber + ", values=" +
- Arrays.toString(values) + "]";
+ return "CSVRecord [comment='" + comment + "', recordNumber=" + recordNumber + ", values=" + Arrays.toString(values) + "]";
}
/**
From 32dbbf60459a86f5320b57ac74d81480013564f1 Mon Sep 17 00:00:00 2001
From: "Gary D. Gregory"
Date: Sun, 22 Jun 2025 15:12:35 -0400
Subject: [PATCH 025/245] Reduce use of magic chars
---
.../java/org/apache/commons/csv/CSVFormat.java | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/src/main/java/org/apache/commons/csv/CSVFormat.java b/src/main/java/org/apache/commons/csv/CSVFormat.java
index 9bcf9d189..eea5a53e1 100644
--- a/src/main/java/org/apache/commons/csv/CSVFormat.java
+++ b/src/main/java/org/apache/commons/csv/CSVFormat.java
@@ -2536,27 +2536,27 @@ public String toString() {
final StringBuilder sb = new StringBuilder();
sb.append("Delimiter=<").append(delimiter).append('>');
if (isEscapeCharacterSet()) {
- sb.append(' ');
+ sb.append(Constants.SP);
sb.append("Escape=<").append(escapeCharacter).append('>');
}
if (isQuoteCharacterSet()) {
- sb.append(' ');
+ sb.append(Constants.SP);
sb.append("QuoteChar=<").append(quoteCharacter).append('>');
}
if (quoteMode != null) {
- sb.append(' ');
+ sb.append(Constants.SP);
sb.append("QuoteMode=<").append(quoteMode).append('>');
}
if (isCommentMarkerSet()) {
- sb.append(' ');
+ sb.append(Constants.SP);
sb.append("CommentStart=<").append(commentMarker).append('>');
}
if (isNullStringSet()) {
- sb.append(' ');
+ sb.append(Constants.SP);
sb.append("NullString=<").append(nullString).append('>');
}
if (recordSeparator != null) {
- sb.append(' ');
+ sb.append(Constants.SP);
sb.append("RecordSeparator=<").append(recordSeparator).append('>');
}
if (getIgnoreEmptyLines()) {
@@ -2570,11 +2570,11 @@ public String toString() {
}
sb.append(" SkipHeaderRecord:").append(skipHeaderRecord);
if (headerComments != null) {
- sb.append(' ');
+ sb.append(Constants.SP);
sb.append("HeaderComments:").append(Arrays.toString(headerComments));
}
if (headers != null) {
- sb.append(' ');
+ sb.append(Constants.SP);
sb.append("Header:").append(Arrays.toString(headers));
}
return sb.toString();
From f7581b7c92849c66787e2647aedfd9549267be50 Mon Sep 17 00:00:00 2001
From: "Gary D. Gregory"
Date: Sun, 22 Jun 2025 15:13:31 -0400
Subject: [PATCH 026/245] Reduce vertical whitespace
---
src/main/java/org/apache/commons/csv/Lexer.java | 1 -
1 file changed, 1 deletion(-)
diff --git a/src/main/java/org/apache/commons/csv/Lexer.java b/src/main/java/org/apache/commons/csv/Lexer.java
index 0e5f36866..3d00fe0bf 100644
--- a/src/main/java/org/apache/commons/csv/Lexer.java
+++ b/src/main/java/org/apache/commons/csv/Lexer.java
@@ -340,7 +340,6 @@ private Token parseEncapsulatedToken(final Token token) throws IOException {
int c;
while (true) {
c = reader.read();
-
if (isQuoteChar(c)) {
if (isQuoteChar(reader.peek())) {
// double or escaped encapsulator -> add single encapsulator to token
From dfb8888f5aa3d50cb50698a94b8eaa96789932f0 Mon Sep 17 00:00:00 2001
From: "Gary D. Gregory"
Date: Sun, 22 Jun 2025 15:15:01 -0400
Subject: [PATCH 027/245] Javadoc
---
src/main/java/org/apache/commons/csv/QuoteMode.java | 2 ++
1 file changed, 2 insertions(+)
diff --git a/src/main/java/org/apache/commons/csv/QuoteMode.java b/src/main/java/org/apache/commons/csv/QuoteMode.java
index d9c032ffc..79bb1b34e 100644
--- a/src/main/java/org/apache/commons/csv/QuoteMode.java
+++ b/src/main/java/org/apache/commons/csv/QuoteMode.java
@@ -20,6 +20,8 @@
/**
* Defines quoting behavior.
+ *
+ * @see CSVFormat.Builder#setQuoteMode(QuoteMode)
*/
public enum QuoteMode {
From bd9793b4ef16746aee81cf663e4910c311b9963b Mon Sep 17 00:00:00 2001
From: "Gary D. Gregory"
Date: Sun, 22 Jun 2025 15:16:08 -0400
Subject: [PATCH 028/245] Fix indentation
---
src/main/java/org/apache/commons/csv/CSVFormat.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/main/java/org/apache/commons/csv/CSVFormat.java b/src/main/java/org/apache/commons/csv/CSVFormat.java
index eea5a53e1..e8cb5e772 100644
--- a/src/main/java/org/apache/commons/csv/CSVFormat.java
+++ b/src/main/java/org/apache/commons/csv/CSVFormat.java
@@ -216,7 +216,7 @@ public static Builder create() {
.setRecordSeparator(Constants.CRLF)
.setIgnoreEmptyLines(true)
.setDuplicateHeaderMode(DuplicateHeaderMode.ALLOW_ALL);
- // @formatter:on
+ // @formatter:on
}
/**
From 7b2f013521eb18f1bf6d065a1bc724199be61dce Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Fri, 27 Jun 2025 12:07:22 +0000
Subject: [PATCH 029/245] Bump com.opencsv:opencsv from 5.11.1 to 5.11.2
Bumps com.opencsv:opencsv from 5.11.1 to 5.11.2.
---
updated-dependencies:
- dependency-name: com.opencsv:opencsv
dependency-version: 5.11.2
dependency-type: direct:development
update-type: version-update:semver-patch
...
Signed-off-by: dependabot[bot]
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index a1eca0578..96dfa9bb6 100644
--- a/pom.xml
+++ b/pom.xml
@@ -387,7 +387,7 @@
com.opencsv
opencsv
- 5.11.1
+ 5.11.2
test
From 08030900e0fd36ef9aa90a339429fdd6180d1434 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Fri, 27 Jun 2025 12:26:24 +0000
Subject: [PATCH 030/245] Bump github/codeql-action from 3.29.0 to 3.29.1
Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.29.0 to 3.29.1.
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/codeql-action/compare/ce28f5bb42b7a9f2c824e633a3f6ee835bab6858...39edc492dbe16b1465b0cafca41432d857bdb31a)
---
updated-dependencies:
- dependency-name: github/codeql-action
dependency-version: 3.29.1
dependency-type: direct:production
update-type: version-update:semver-patch
...
Signed-off-by: dependabot[bot]
---
.github/workflows/codeql-analysis.yml | 6 +++---
.github/workflows/scorecards-analysis.yml | 2 +-
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml
index 1f3a099bd..922ca638b 100644
--- a/.github/workflows/codeql-analysis.yml
+++ b/.github/workflows/codeql-analysis.yml
@@ -57,7 +57,7 @@ jobs:
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
- uses: github/codeql-action/init@ce28f5bb42b7a9f2c824e633a3f6ee835bab6858 # 3.29.0
+ uses: github/codeql-action/init@39edc492dbe16b1465b0cafca41432d857bdb31a # 3.29.1
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
@@ -68,7 +68,7 @@ jobs:
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
- uses: github/codeql-action/autobuild@ce28f5bb42b7a9f2c824e633a3f6ee835bab6858 # 3.29.0
+ uses: github/codeql-action/autobuild@39edc492dbe16b1465b0cafca41432d857bdb31a # 3.29.1
# ℹ️ Command-line programs to run using the OS shell.
# 📚 https://git.io/JvXDl
@@ -82,4 +82,4 @@ jobs:
# make release
- name: Perform CodeQL Analysis
- uses: github/codeql-action/analyze@ce28f5bb42b7a9f2c824e633a3f6ee835bab6858 # 3.29.0
+ uses: github/codeql-action/analyze@39edc492dbe16b1465b0cafca41432d857bdb31a # 3.29.1
diff --git a/.github/workflows/scorecards-analysis.yml b/.github/workflows/scorecards-analysis.yml
index 25c086a73..5ccb0d4a4 100644
--- a/.github/workflows/scorecards-analysis.yml
+++ b/.github/workflows/scorecards-analysis.yml
@@ -64,6 +64,6 @@ jobs:
retention-days: 5
- name: "Upload to code-scanning"
- uses: github/codeql-action/upload-sarif@ce28f5bb42b7a9f2c824e633a3f6ee835bab6858 # 3.29.0
+ uses: github/codeql-action/upload-sarif@39edc492dbe16b1465b0cafca41432d857bdb31a # 3.29.1
with:
sarif_file: results.sarif
From fbe886c7aa7e2ecfb2a2b0ca421a78c902a14767 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Fri, 4 Jul 2025 12:07:46 +0000
Subject: [PATCH 031/245] Bump github/codeql-action from 3.29.1 to 3.29.2
Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.29.1 to 3.29.2.
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/codeql-action/compare/39edc492dbe16b1465b0cafca41432d857bdb31a...181d5eefc20863364f96762470ba6f862bdef56b)
---
updated-dependencies:
- dependency-name: github/codeql-action
dependency-version: 3.29.2
dependency-type: direct:production
update-type: version-update:semver-patch
...
Signed-off-by: dependabot[bot]
---
.github/workflows/codeql-analysis.yml | 6 +++---
.github/workflows/scorecards-analysis.yml | 2 +-
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml
index 922ca638b..5bb1f901d 100644
--- a/.github/workflows/codeql-analysis.yml
+++ b/.github/workflows/codeql-analysis.yml
@@ -57,7 +57,7 @@ jobs:
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
- uses: github/codeql-action/init@39edc492dbe16b1465b0cafca41432d857bdb31a # 3.29.1
+ uses: github/codeql-action/init@181d5eefc20863364f96762470ba6f862bdef56b # 3.29.2
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
@@ -68,7 +68,7 @@ jobs:
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
- uses: github/codeql-action/autobuild@39edc492dbe16b1465b0cafca41432d857bdb31a # 3.29.1
+ uses: github/codeql-action/autobuild@181d5eefc20863364f96762470ba6f862bdef56b # 3.29.2
# ℹ️ Command-line programs to run using the OS shell.
# 📚 https://git.io/JvXDl
@@ -82,4 +82,4 @@ jobs:
# make release
- name: Perform CodeQL Analysis
- uses: github/codeql-action/analyze@39edc492dbe16b1465b0cafca41432d857bdb31a # 3.29.1
+ uses: github/codeql-action/analyze@181d5eefc20863364f96762470ba6f862bdef56b # 3.29.2
diff --git a/.github/workflows/scorecards-analysis.yml b/.github/workflows/scorecards-analysis.yml
index 5ccb0d4a4..b15d73c9a 100644
--- a/.github/workflows/scorecards-analysis.yml
+++ b/.github/workflows/scorecards-analysis.yml
@@ -64,6 +64,6 @@ jobs:
retention-days: 5
- name: "Upload to code-scanning"
- uses: github/codeql-action/upload-sarif@39edc492dbe16b1465b0cafca41432d857bdb31a # 3.29.1
+ uses: github/codeql-action/upload-sarif@181d5eefc20863364f96762470ba6f862bdef56b # 3.29.2
with:
sarif_file: results.sarif
From c7be7564f108facd61c29e237d6947c2ee22acad Mon Sep 17 00:00:00 2001
From: Gary Gregory
Date: Sun, 6 Jul 2025 09:52:33 -0400
Subject: [PATCH 032/245] Use HTTPS in Git URL
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index a1eca0578..443907eab 100644
--- a/pom.xml
+++ b/pom.xml
@@ -76,7 +76,7 @@
- scm:git:http://gitbox.apache.org/repos/asf/commons-csv.git
+ scm:git:https://gitbox.apache.org/repos/asf/commons-csv.git
scm:git:https://gitbox.apache.org/repos/asf/commons-csv.git
https://gitbox.apache.org/repos/asf?p=commons-csv.git
From 0479be21bb3301a812584242eafe9ea130c2ea97 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Wed, 9 Jul 2025 21:54:20 +0000
Subject: [PATCH 033/245] Bump org.apache.commons:commons-lang3 from 3.17.0 to
3.18.0
Bumps org.apache.commons:commons-lang3 from 3.17.0 to 3.18.0.
---
updated-dependencies:
- dependency-name: org.apache.commons:commons-lang3
dependency-version: 3.18.0
dependency-type: direct:development
update-type: version-update:semver-minor
...
Signed-off-by: dependabot[bot]
---
pom.xml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/pom.xml b/pom.xml
index 443907eab..a4dcd2adb 100644
--- a/pom.xml
+++ b/pom.xml
@@ -53,7 +53,7 @@
org.apache.commons
commons-lang3
- 3.17.0
+ 3.18.0
test
@@ -416,7 +416,7 @@
org.apache.commons
commons-lang3
- 3.17.0
+ 3.18.0
From 427151c0644e3a3976724dccf2d09e61aa186116 Mon Sep 17 00:00:00 2001
From: Gary Gregory
Date: Wed, 9 Jul 2025 18:11:28 -0400
Subject: [PATCH 034/245] Bump org.apache.commons:commons-lang3 from 3.17.0 to
3.18.0 #556
---
src/changes/changes.xml | 1 +
1 file changed, 1 insertion(+)
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index bff6748a4..3cbc76ea6 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -50,6 +50,7 @@
Bump org.apache.commons:commons-parent from 81 to 85 #542.
Bump commons-io:commons-io from 2.18.0 to 2.19.0.
Bump com.opencsv:opencsv from 5.10 to 5.11.1 #545, #551.
+ Bump org.apache.commons:commons-lang3 from 3.17.0 to 3.18.0 #556.
From 59164c8b795ebd4cc0362c4c74d7c893c4a50303 Mon Sep 17 00:00:00 2001
From: Gary Gregory
Date: Wed, 9 Jul 2025 18:12:16 -0400
Subject: [PATCH 035/245] Bump com.opencsv:opencsv from 5.11.1 to 5.11.2 #553
---
src/changes/changes.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 3cbc76ea6..68a2295e5 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -49,7 +49,7 @@
Bump org.apache.commons:commons-parent from 81 to 85 #542.
Bump commons-io:commons-io from 2.18.0 to 2.19.0.
- Bump com.opencsv:opencsv from 5.10 to 5.11.1 #545, #551.
+ Bump com.opencsv:opencsv from 5.10 to 5.11.2 #545, #551, #553.
Bump org.apache.commons:commons-lang3 from 3.17.0 to 3.18.0 #556.
From 67192a9e0af58bdf49edf4e0d29f50343da82c70 Mon Sep 17 00:00:00 2001
From: "Gary D. Gregory"
Date: Fri, 18 Jul 2025 17:30:07 -0400
Subject: [PATCH 036/245] Bump commons-io:commons-io from 2.19.0 to 2.20.0
---
pom.xml | 2 +-
src/changes/changes.xml | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/pom.xml b/pom.xml
index 0db0836ad..f9a442bd8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -116,7 +116,7 @@
true
2025-03-19T22:12:04Z
1.18.0
- 2.19.0
+ 2.20.0
org.apache.commons.codec.binary;version="${commons.codec.version}",
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 68a2295e5..a34b7a336 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -48,7 +48,7 @@
Bump org.apache.commons:commons-parent from 81 to 85 #542.
- Bump commons-io:commons-io from 2.18.0 to 2.19.0.
+ Bump commons-io:commons-io from 2.18.0 to 2.20.0.
Bump com.opencsv:opencsv from 5.10 to 5.11.2 #545, #551, #553.
Bump org.apache.commons:commons-lang3 from 3.17.0 to 3.18.0 #556.
From 96583732b6be55d459a5b430c4a3a3bb2126db10 Mon Sep 17 00:00:00 2001
From: "Gary D. Gregory"
Date: Sun, 20 Jul 2025 13:28:32 -0400
Subject: [PATCH 037/245] Update the GitHub pull request template for AI
Better grammar
---
.github/pull_request_template.md | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md
index e17973cb0..7578b4da0 100644
--- a/.github/pull_request_template.md
+++ b/.github/pull_request_template.md
@@ -22,7 +22,9 @@ Thanks for your contribution to [Apache Commons](https://commons.apache.org/)! Y
Before you push a pull request, review this list:
- [ ] Read the [contribution guidelines](CONTRIBUTING.md) for this project.
+- [ ] Read the [ASF Generative Tooling Guidance](https://www.apache.org/legal/generative-tooling.html) if you use Artificial Intelligence (AI).
+- [ ] I used AI to create any part of, or all of, this pull request.
- [ ] Run a successful build using the default [Maven](https://maven.apache.org/) goal with `mvn`; that's `mvn` on the command line by itself.
-- [ ] Write unit tests that match behavioral changes, where the tests fail if the changes to the runtime are not applied. This may not always be possible but is a best-practice.
+- [ ] Write unit tests that match behavioral changes, where the tests fail if the changes to the runtime are not applied. This may not always be possible, but it is a best-practice.
- [ ] Write a pull request description that is detailed enough to understand what the pull request does, how, and why.
-- [ ] Each commit in the pull request should have a meaningful subject line and body. Note that commits might be squashed by a maintainer on merge.
+- [ ] Each commit in the pull request should have a meaningful subject line and body. Note that a maintainer may squash commits during the merge process.
From 7b72c509f73e05ca2bf2f0945a6a1cb03f87bd39 Mon Sep 17 00:00:00 2001
From: "Gary D. Gregory"
Date: Sun, 20 Jul 2025 17:36:44 -0400
Subject: [PATCH 038/245] Merge some string literals
---
.../org/apache/commons/csv/CSVFormatTest.java | 2 +-
.../org/apache/commons/csv/CSVParserTest.java | 25 ++++++++++++-----
.../org/apache/commons/csv/LexerTest.java | 27 ++++++++++++++++---
.../commons/csv/issues/JiraCsv148Test.java | 2 +-
.../commons/csv/issues/JiraCsv253Test.java | 8 +++++-
5 files changed, 51 insertions(+), 13 deletions(-)
diff --git a/src/test/java/org/apache/commons/csv/CSVFormatTest.java b/src/test/java/org/apache/commons/csv/CSVFormatTest.java
index 99c7dc52c..d1d19f755 100644
--- a/src/test/java/org/apache/commons/csv/CSVFormatTest.java
+++ b/src/test/java/org/apache/commons/csv/CSVFormatTest.java
@@ -1218,7 +1218,7 @@ void testToStringAndWithCommentMarkerTakingCharacter() {
Assertions.assertNotEquals(csvFormat, csvFormatTwo);
Assertions.assertNotEquals(csvFormatTwo, csvFormat);
- assertEquals("Delimiter=<,> QuoteChar=<\"> CommentStart= " + "RecordSeparator=<\r\n> EmptyLines:ignored SkipHeaderRecord:false",
+ assertEquals("Delimiter=<,> QuoteChar=<\"> CommentStart= RecordSeparator=<\r\n> EmptyLines:ignored SkipHeaderRecord:false",
csvFormatTwo.toString());
}
diff --git a/src/test/java/org/apache/commons/csv/CSVParserTest.java b/src/test/java/org/apache/commons/csv/CSVParserTest.java
index 22b1417c8..d9dd4e545 100644
--- a/src/test/java/org/apache/commons/csv/CSVParserTest.java
+++ b/src/test/java/org/apache/commons/csv/CSVParserTest.java
@@ -79,9 +79,13 @@ class CSVParserTest {
private static final String UTF_8_NAME = UTF_8.name();
- private static final String CSV_INPUT = "a,b,c,d\n" + " a , b , 1 2 \n" + "\"foo baar\", b,\n" +
+ // @formatter:off
+ private static final String CSV_INPUT = "a,b,c,d\n" +
+ " a , b , 1 2 \n" +
+ "\"foo baar\", b,\n" +
// + " \"foo\n,,\n\"\",,\n\\\"\",d,e\n";
" \"foo\n,,\n\"\",,\n\"\"\",d,e\n"; // changed to use standard CSV escaping
+ // @formatter:on
private static final String CSV_INPUT_1 = "a,b,c,d";
@@ -181,7 +185,7 @@ void testBackslashEscaping2() throws IOException {
// We will test with a forward slash as the escape char, and a single
// quote as the encapsulator.
// @formatter:off
- final String code = "" + " , , \n" + // 1)
+ final String code = " , , \n" + // 1)
" \t , , \n" + // 2)
" // , /, , /,\n" + // 3)
"";
@@ -201,8 +205,17 @@ void testBackslashEscaping2() throws IOException {
@Test
@Disabled
void testBackslashEscapingOld() throws IOException {
- final String code = "one,two,three\n" + "on\\\"e,two\n" + "on\"e,two\n" + "one,\"tw\\\"o\"\n" + "one,\"t\\,wo\"\n" + "one,two,\"th,ree\"\n" +
- "\"a\\\\\"\n" + "a\\,b\n" + "\"a\\\\,b\"";
+ // @formatter:off
+ final String code = "one,two,three\n" +
+ "on\\\"e,two\n" +
+ "on\"e,two\n" +
+ "one,\"tw\\\"o\"\n" +
+ "one,\"t\\,wo\"\n" +
+ "one,two,\"th,ree\"\n" +
+ "\"a\\\\\"\n" +
+ "a\\,b\n" +
+ "\"a\\\\,b\"";
+ // @formatter:on
final String[][] res = { { "one", "two", "three" }, { "on\\\"e", "two" }, { "on\"e", "two" }, { "one", "tw\"o" }, { "one", "t\\,wo" }, // backslash in
// quotes only
// escapes a
@@ -417,7 +430,7 @@ void testCSV57() throws Exception {
@Test
void testDefaultFormat() throws IOException {
// @formatter:off
- final String code = "" + "a,b#\n" + // 1)
+ final String code = "a,b#\n" + // 1)
"\"\n\",\" \",#\n" + // 2)
"#,\"\"\n" + // 3)
"# Final comment\n" // 4)
@@ -548,7 +561,7 @@ void testEndOfFileBehaviorExcel() throws Exception {
@Test
void testExcelFormat1() throws IOException {
- final String code = "value1,value2,value3,value4\r\na,b,c,d\r\n x,,," + "\r\n\r\n\"\"\"hello\"\"\",\" \"\"world\"\"\",\"abc\ndef\",\r\n";
+ final String code = "value1,value2,value3,value4\r\na,b,c,d\r\n x,,,\r\n\r\n\"\"\"hello\"\"\",\" \"\"world\"\"\",\"abc\ndef\",\r\n";
final String[][] res = { { "value1", "value2", "value3", "value4" }, { "a", "b", "c", "d" }, { " x", "", "", "" }, { "" },
{ "\"hello\"", " \"world\"", "abc\ndef", "" } };
try (CSVParser parser = CSVParser.parse(code, CSVFormat.EXCEL)) {
diff --git a/src/test/java/org/apache/commons/csv/LexerTest.java b/src/test/java/org/apache/commons/csv/LexerTest.java
index af0c69a77..e54e93365 100644
--- a/src/test/java/org/apache/commons/csv/LexerTest.java
+++ b/src/test/java/org/apache/commons/csv/LexerTest.java
@@ -121,8 +121,14 @@ void testBackspace() throws Exception {
@Test
void testComments() throws IOException {
- final String code = "first,line,\n" + "second,line,tokenWith#no-comment\n" + "# comment line \n" +
- "third,line,#no-comment\n" + "# penultimate comment\n" + "# Final comment\n";
+ // @formatter:off
+ final String code = "first,line,\n" +
+ "second,line,tokenWith#no-comment\n" +
+ "# comment line \n" +
+ "third,line,#no-comment\n" +
+ "# penultimate comment\n" +
+ "# Final comment\n";
+ // @formatter:on
final CSVFormat format = CSVFormat.DEFAULT.withCommentMarker('#');
try (Lexer lexer = createLexer(code, format)) {
assertNextToken(TOKEN, "first", lexer);
@@ -306,8 +312,21 @@ void testFF() throws Exception {
@Test
void testIgnoreEmptyLines() throws IOException {
- final String code = "first,line,\n" + "\n" + "\n" + "second,line\n" + "\n" + "\n" + "third line \n" + "\n" +
- "\n" + "last, line \n" + "\n" + "\n" + "\n";
+ // @formatter:off
+ final String code = "first,line,\n" +
+ "\n" +
+ "\n" +
+ "second,line\n" +
+ "\n" +
+ "\n" +
+ "third line \n" +
+ "\n" +
+ "\n" +
+ "last, line \n" +
+ "\n" +
+ "\n" +
+ "\n";
+ // @formatter:on
final CSVFormat format = CSVFormat.DEFAULT.withIgnoreEmptyLines();
try (Lexer lexer = createLexer(code, format)) {
assertNextToken(TOKEN, "first", lexer);
diff --git a/src/test/java/org/apache/commons/csv/issues/JiraCsv148Test.java b/src/test/java/org/apache/commons/csv/issues/JiraCsv148Test.java
index befe3b5c3..67f1b785d 100644
--- a/src/test/java/org/apache/commons/csv/issues/JiraCsv148Test.java
+++ b/src/test/java/org/apache/commons/csv/issues/JiraCsv148Test.java
@@ -55,7 +55,7 @@ void testWithTrimEmpty() {
.get();
// @formatter:on
assertEquals(
- "\"\",\"\",\"Single space on the left\",\"Single space on the right\"," + "\"Single spaces on both sides\",\"Multiple spaces on the left\"," +
+ "\"\",\"\",\"Single space on the left\",\"Single space on the right\",\"Single spaces on both sides\",\"Multiple spaces on the left\"," +
"\"Multiple spaces on the right\",\"Multiple spaces on both sides\"",
format.format("", " ", " Single space on the left", "Single space on the right ", " Single spaces on both sides ",
" Multiple spaces on the left", "Multiple spaces on the right ", " Multiple spaces on both sides "));
diff --git a/src/test/java/org/apache/commons/csv/issues/JiraCsv253Test.java b/src/test/java/org/apache/commons/csv/issues/JiraCsv253Test.java
index 136940859..13bb6a827 100644
--- a/src/test/java/org/apache/commons/csv/issues/JiraCsv253Test.java
+++ b/src/test/java/org/apache/commons/csv/issues/JiraCsv253Test.java
@@ -37,7 +37,13 @@ class JiraCsv253Test {
@Test
void testHandleAbsentValues() throws IOException {
- final String source = "\"John\",,\"Doe\"\n" + ",\"AA\",123\n" + "\"John\",90,\n" + "\"\",,90";
+ // @formatter:off
+ final String source =
+ "\"John\",,\"Doe\"\n" +
+ ",\"AA\",123\n" +
+ "\"John\",90,\n" +
+ "\"\",,90";
+ // @formatter:on
final CSVFormat csvFormat = CSVFormat.DEFAULT.builder().setQuoteMode(QuoteMode.NON_NUMERIC).get();
try (CSVParser parser = csvFormat.parse(new StringReader(source))) {
final Iterator csvRecords = parser.iterator();
From 1fb37163f9fe59aa13c63efd53e71d7a0392be4c Mon Sep 17 00:00:00 2001
From: "Gary D. Gregory"
Date: Tue, 22 Jul 2025 15:28:53 -0400
Subject: [PATCH 039/245] Bump commons-codec:commons-codec from 1.18.0 to
1.19.0
---
pom.xml | 2 +-
src/changes/changes.xml | 1 +
2 files changed, 2 insertions(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index f9a442bd8..b1dfa7756 100644
--- a/pom.xml
+++ b/pom.xml
@@ -115,7 +115,7 @@
false
true
2025-03-19T22:12:04Z
- 1.18.0
+ 1.19.0
2.20.0
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index a34b7a336..315175a74 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -51,6 +51,7 @@
Bump commons-io:commons-io from 2.18.0 to 2.20.0.
Bump com.opencsv:opencsv from 5.10 to 5.11.2 #545, #551, #553.
Bump org.apache.commons:commons-lang3 from 3.17.0 to 3.18.0 #556.
+ Bump commons-codec:commons-codec from 1.18.0 to 1.19.0.
From 9c95e92d6aaa4d052a139158a900395646c6652e Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Fri, 25 Jul 2025 12:52:01 +0000
Subject: [PATCH 040/245] Bump github/codeql-action from 3.29.2 to 3.29.4
Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.29.2 to 3.29.4.
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/codeql-action/compare/181d5eefc20863364f96762470ba6f862bdef56b...4e828ff8d448a8a6e532957b1811f387a63867e8)
---
updated-dependencies:
- dependency-name: github/codeql-action
dependency-version: 3.29.4
dependency-type: direct:production
update-type: version-update:semver-patch
...
Signed-off-by: dependabot[bot]
---
.github/workflows/codeql-analysis.yml | 6 +++---
.github/workflows/scorecards-analysis.yml | 2 +-
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml
index 5bb1f901d..7400fb888 100644
--- a/.github/workflows/codeql-analysis.yml
+++ b/.github/workflows/codeql-analysis.yml
@@ -57,7 +57,7 @@ jobs:
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
- uses: github/codeql-action/init@181d5eefc20863364f96762470ba6f862bdef56b # 3.29.2
+ uses: github/codeql-action/init@4e828ff8d448a8a6e532957b1811f387a63867e8 # 3.29.4
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
@@ -68,7 +68,7 @@ jobs:
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
- uses: github/codeql-action/autobuild@181d5eefc20863364f96762470ba6f862bdef56b # 3.29.2
+ uses: github/codeql-action/autobuild@4e828ff8d448a8a6e532957b1811f387a63867e8 # 3.29.4
# ℹ️ Command-line programs to run using the OS shell.
# 📚 https://git.io/JvXDl
@@ -82,4 +82,4 @@ jobs:
# make release
- name: Perform CodeQL Analysis
- uses: github/codeql-action/analyze@181d5eefc20863364f96762470ba6f862bdef56b # 3.29.2
+ uses: github/codeql-action/analyze@4e828ff8d448a8a6e532957b1811f387a63867e8 # 3.29.4
diff --git a/.github/workflows/scorecards-analysis.yml b/.github/workflows/scorecards-analysis.yml
index b15d73c9a..35000d4fe 100644
--- a/.github/workflows/scorecards-analysis.yml
+++ b/.github/workflows/scorecards-analysis.yml
@@ -64,6 +64,6 @@ jobs:
retention-days: 5
- name: "Upload to code-scanning"
- uses: github/codeql-action/upload-sarif@181d5eefc20863364f96762470ba6f862bdef56b # 3.29.2
+ uses: github/codeql-action/upload-sarif@4e828ff8d448a8a6e532957b1811f387a63867e8 # 3.29.4
with:
sarif_file: results.sarif
From b76971c25af176f901c003b25d6a5f4f6edc87ad Mon Sep 17 00:00:00 2001
From: "Gary D. Gregory"
Date: Sun, 27 Jul 2025 13:07:47 +0000
Subject: [PATCH 041/245] Prepare for the next release candidate
---
README.md | 6 +--
RELEASE-NOTES.txt | 92 ++++++++++++++++++++++++++++------
pom.xml | 6 +--
src/changes/changes.xml | 2 +-
src/site/xdoc/download_csv.xml | 26 +++++-----
5 files changed, 98 insertions(+), 34 deletions(-)
diff --git a/README.md b/README.md
index 42c9894d1..f30de4b9c 100644
--- a/README.md
+++ b/README.md
@@ -45,7 +45,7 @@ Apache Commons CSV
[](https://github.com/apache/commons-csv/actions/workflows/maven.yml)
[](https://search.maven.org/artifact/org.apache.commons/commons-csv)
-[](https://javadoc.io/doc/org.apache.commons/commons-csv/1.14.0)
+[](https://javadoc.io/doc/org.apache.commons/commons-csv/1.14.1)
[](https://github.com/apache/commons-csv/actions/workflows/codeql-analysis.yml)
[](https://api.securityscorecards.dev/projects/github.com/apache/commons-csv)
@@ -68,7 +68,7 @@ Alternatively, you can pull it from the central Maven repositories:
org.apache.commons
commons-csv
- 1.14.0
+ 1.14.1
```
@@ -90,7 +90,7 @@ There are some guidelines which will make applying PRs easier for us:
+ Create minimal diffs - disable on save actions like reformat source code or organize imports. If you feel the source code should be reformatted create a separate PR for this change.
+ Provide JUnit tests for your changes and make sure your changes don't break any existing tests by running `mvn`.
+ Before you pushing a PR, run `mvn` (by itself), this runs the default goal, which contains all build checks.
-+ To see the code coverage report, regardless of coverage failures, run `mvn clean site -Dcommons.jacoco.haltOnFailure=false`
++ To see the code coverage report, regardless of coverage failures, run `mvn clean site -Dcommons.jacoco.haltOnFailure=false -Pjacoco`
If you plan to contribute on a regular basis, please consider filing a [contributor license agreement](https://www.apache.org/licenses/#clas).
You can learn more about contributing via GitHub in our [contribution guidelines](CONTRIBUTING.md).
diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt
index 599f0d1f8..bfeb4bb8d 100644
--- a/RELEASE-NOTES.txt
+++ b/RELEASE-NOTES.txt
@@ -1,4 +1,54 @@
+Apache Commons CSV 1.14.1 Release Notes
+---------------------------------------
+
+The Apache Commons CSV team is pleased to announce the release of Apache Commons CSV 1.14.1.
+
+
+This document contains the release notes for the 1.14.1 version of Apache Commons CSV.
+Commons CSV reads and writes files in Comma Separated Value (CSV) format variations.
+
+Commons CSV requires at least Java 8.
+
+The Apache Commons CSV library provides a simple interface for reading and writing CSV files of various types.
+
+This is a feature and maintenance release. Java 8 or later is required.
+
+Changes in this version include:
+
+
+Fixed Bugs
+----------
+
+* CSV-318: CSVPrinter.printRecord(Stream) hangs if given a parallel stream. Thanks to Joseph Shraibman, Gary Gregory.
+* CSV-318: CSVPrinter now uses an internal lock instead of synchronized methods. Thanks to Joseph Shraibman, Gary Gregory.
+* org.apache.commons.csv.CSVPrinter.printRecords(ResultSet) now writes one record at a time using a lock. Thanks to Gary Gregory.
+
+Changes
+-------
+
+* Bump org.apache.commons:commons-parent from 81 to 85 #542. Thanks to Gary Gregory, Dependabot.
+* Bump commons-io:commons-io from 2.18.0 to 2.20.0. Thanks to Gary Gregory.
+* Bump com.opencsv:opencsv from 5.10 to 5.11.2 #545, #551, #553. Thanks to Gary Gregory, Dependabot.
+* Bump org.apache.commons:commons-lang3 from 3.17.0 to 3.18.0 #556. Thanks to Gary Gregory, Dependabot.
+* Bump commons-codec:commons-codec from 1.18.0 to 1.19.0. Thanks to Gary Gregory.
+
+
+Historical list of changes: https://commons.apache.org/proper/commons-csv/changes.html
+
+For complete information on Apache Commons CSV, including instructions on how to submit bug reports,
+patches, or suggestions for improvement, see the Apache Commons CSV website:
+
+https://commons.apache.org/proper/commons-csv/
+
+Download page: https://commons.apache.org/proper/commons-csv/download_csv.cgi
+
+Have fun!
+-Apache Commons CSV team
+
+------------------------------------------------------------------------------
+
Apache Commons CSV 1.14.0 Release Notes
+---------------------------------------
This document contains the release notes for the 1.14.0 version of Apache Commons CSV.
Commons CSV reads and writes files in variations of the Comma Separated Value (CSV) format.
@@ -59,7 +109,8 @@ Have fun!
------------------------------------------------------------------------------
-Apache Commons CSV Version 1.13.0 Release Notes
+Apache Commons CSV 1.13.0 Release Notes
+---------------------------------------
This document contains the release notes for the 1.13.0 version of Apache Commons CSV.
Commons CSV reads and writes files in variations of the Comma Separated Value (CSV) format.
@@ -111,7 +162,8 @@ Have fun!
------------------------------------------------------------------------------
-Apache Commons CSV Version 1.12.0 Release Notes
+Apache Commons CSV 1.12.0 Release Notes
+---------------------------------------
This document contains the release notes for the 1.12.0 version of Apache Commons CSV.
Commons CSV reads and writes files in variations of the Comma Separated Value (CSV) format.
@@ -167,7 +219,8 @@ Have fun!
------------------------------------------------------------------------------
-Apache Commons CSV Version 1.11.0 Release Notes
+Apache Commons CSV 1.11.0 Release Notes
+---------------------------------------
This document contains the release notes for the 1.11.0 version of Apache Commons CSV.
Commons CSV reads and writes files in variations of the Comma Separated Value (CSV) format.
@@ -227,7 +280,8 @@ Have fun!
------------------------------------------------------------------------------
-Apache Commons CSV Version 1.10.0 Release Notes
+Apache Commons CSV 1.10.0 Release Notes
+---------------------------------------
This document contains the release notes for the 1.10.0 version of Apache Commons CSV.
Commons CSV reads and writes files in variations of the Comma Separated Value (CSV) format.
@@ -308,7 +362,8 @@ Have fun!
------------------------------------------------------------------------------
-Apache Commons CSV Version 1.9.0 Release Notes
+Apache Commons CSV 1.9.0 Release Notes
+--------------------------------------
This document contains the release notes for the 1.9.0 version of Apache Commons CSV.
Commons CSV reads and writes files in variations of the Comma Separated Value (CSV) format.
@@ -410,7 +465,8 @@ Have fun!
------------------------------------------------------------------------------
-Apache Commons CSV Version 1.8 Release Notes
+Apache Commons CSV 1.8 Release Notes
+------------------------------------
This document contains the release notes for the 1.8 version of Apache Commons CSV.
Commons CSV reads and writes files in variations of the Comma Separated Value (CSV) format.
@@ -465,7 +521,8 @@ Have fun!
------------------------------------------------------------------------------
-Apache Commons CSV Version 1.7 Release Notes
+Apache Commons CSV 1.7 Release Notes
+------------------------------------
This document contains the release notes for the 1.7 version of Apache Commons CSV.
Commons CSV reads and writes files in variations of the Comma Separated Value (CSV) format.
@@ -512,7 +569,8 @@ Have fun!
------------------------------------------------------------------------------
-Apache Commons CSV Version 1.6 Release Notes
+Apache Commons CSV 1.6 Release Notes
+------------------------------------
This document contains the release notes for the 1.6 version of
Apache Commons CSV. Commons CSV reads and writes files in variations of the
@@ -561,7 +619,8 @@ Have fun!
------------------------------------------------------------------------------
-Apache Commons CSV Version 1.5 Release Notes
+Apache Commons CSV 1.5 Release Notes
+------------------------------------
This document contains the release notes for the 1.5 version of Apache Commons CSV.
Commons CSV reads and writes files in variations of the Comma Separated Value (CSV) format.
@@ -613,7 +672,8 @@ Have fun!
------------------------------------------------------------------------------
-Apache Commons CSV Version 1.4 Release Notes
+Apache Commons CSV 1.4 Release Notes
+------------------------------------
This document contains the release notes for the 1.4 version of Apache Commons CSV.
Commons CSV reads and writes files in variations of the Comma Separated Value (CSV) format.
@@ -652,7 +712,8 @@ Have fun!
------------------------------------------------------------------------------
-Apache Commons CSV Version 1.3 Release Notes
+Apache Commons CSV 1.3 Release Notes
+------------------------------------
This document contains the release notes for the 1.3 version of Apache Commons CSV.
Commons CSV reads and writes files in variations of the Comma Separated Value (CSV) format.
@@ -696,7 +757,8 @@ Have fun!
------------------------------------------------------------------------------
-Apache Commons CSV Version 1.2 Release Notes
+Apache Commons CSV 1.2 Release Notes
+------------------------------------
This document contains the release notes for the 1.2 version of Apache Commons CSV.
Commons CSV reads and writes files in variations of the Comma Separated Value (CSV) format.
@@ -734,7 +796,8 @@ Have fun!
------------------------------------------------------------------------------
-Apache Commons CSV Version 1.1 Release Notes
+Apache Commons CSV 1.1 Release Notes
+------------------------------------
This document contains the release notes for the 1.1 version of Apache Commons CSV.
Commons CSV reads and writes files in variations of the Comma Separated Value (CSV) format.
@@ -775,7 +838,8 @@ Have fun!
-------------------------------------------------------------------------------
-Apache Commons CSV Version 1.0 Release Notes
+Apache Commons CSV 1.0 Release Notes
+------------------------------------
This document contains the release notes for the 1.0 version of Apache Commons CSV.
Commons CSV reads and writes files in variations of the Comma Separated Value (CSV) format.
diff --git a/pom.xml b/pom.xml
index b1dfa7756..9a824734f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -96,12 +96,12 @@
- 1.14.0
+ 1.14.1
(Java 8 or above)
RC1
- 1.13.0
- 1.14.1
+ 1.14.0
+ 1.14.2
csv
org.apache.commons.csv
CSV
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 315175a74..c9c31d25d 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -40,7 +40,7 @@
Apache Commons CSV Release Notes
-
+
CSVPrinter.printRecord(Stream) hangs if given a parallel stream.
CSVPrinter now uses an internal lock instead of synchronized methods.
diff --git a/src/site/xdoc/download_csv.xml b/src/site/xdoc/download_csv.xml
index b5e7881dc..151c3f69e 100644
--- a/src/site/xdoc/download_csv.xml
+++ b/src/site/xdoc/download_csv.xml
@@ -115,32 +115,32 @@ limitations under the License.
-
+
From d8724bf76a7d6abbb93aad65e316f050f86a256d Mon Sep 17 00:00:00 2001
From: "Gary D. Gregory"
Date: Sun, 27 Jul 2025 13:08:59 +0000
Subject: [PATCH 042/245] Prepare for the release candidate 1.14.1 RC1
---
pom.xml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/pom.xml b/pom.xml
index 9a824734f..404e7b4cc 100644
--- a/pom.xml
+++ b/pom.xml
@@ -23,7 +23,7 @@
85
commons-csv
- 1.14.1-SNAPSHOT
+ 1.14.1
Apache Commons CSV
https://commons.apache.org/proper/commons-csv/
2005
@@ -114,7 +114,7 @@
UTF-8
false
true
- 2025-03-19T22:12:04Z
+ 2025-07-27T13:07:58Z
1.19.0
2.20.0
From e14ef86d34211f9d1b9b6040c5f6dbafc93ba907 Mon Sep 17 00:00:00 2001
From: "Gary D. Gregory"
Date: Tue, 29 Jul 2025 08:39:37 -0400
Subject: [PATCH 043/245] Ignore macOS file
---
.gitignore | 1 +
1 file changed, 1 insertion(+)
diff --git a/.gitignore b/.gitignore
index 4b377d576..e0f2c4514 100644
--- a/.gitignore
+++ b/.gitignore
@@ -21,3 +21,4 @@ buildNumber.properties
*.iml
/.vscode/
+/.DS_Store
From 5fb018a90f3f9ba53b15f2c3edbbcbcbe67e670d Mon Sep 17 00:00:00 2001
From: "Gary D. Gregory"
Date: Wed, 30 Jul 2025 14:51:44 +0000
Subject: [PATCH 044/245] Bump to next development version
---
pom.xml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/pom.xml b/pom.xml
index 404e7b4cc..37101a3b3 100644
--- a/pom.xml
+++ b/pom.xml
@@ -23,7 +23,7 @@
85
commons-csv
- 1.14.1
+ 1.14.2-SNAPSHOT
Apache Commons CSV
https://commons.apache.org/proper/commons-csv/
2005
@@ -114,7 +114,7 @@
UTF-8
false
true
- 2025-07-27T13:07:58Z
+ 2025-07-30T14:51:35Z
1.19.0
2.20.0
From da1eafd78cb4d9e697f46b3d117617c728fdac11 Mon Sep 17 00:00:00 2001
From: "Gary D. Gregory"
Date: Wed, 30 Jul 2025 14:52:35 +0000
Subject: [PATCH 045/245] Updates for the next release
---
src/changes/changes.xml | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index c9c31d25d..2e2e3b315 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -40,6 +40,11 @@
Apache Commons CSV Release Notes
+
+
+
+
+
CSVPrinter.printRecord(Stream) hangs if given a parallel stream.
From e585a6dbb4c4adda8b595ee2355e80ae5eefc09e Mon Sep 17 00:00:00 2001
From: "Gary D. Gregory"
Date: Wed, 30 Jul 2025 15:02:02 +0000
Subject: [PATCH 046/245] Updates for the next release
---
pom.xml | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/pom.xml b/pom.xml
index 37101a3b3..1d8ac4029 100644
--- a/pom.xml
+++ b/pom.xml
@@ -96,12 +96,12 @@
- 1.14.1
+ 1.14.2
(Java 8 or above)
RC1
- 1.14.0
- 1.14.2
+ 1.14.1
+ 1.14.3
csv
org.apache.commons.csv
CSV
From 9d20379603315a35a9da0367b37e723f718f3414 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Fri, 1 Aug 2025 12:12:17 +0000
Subject: [PATCH 047/245] Bump com.opencsv:opencsv from 5.11.2 to 5.12.0
Bumps com.opencsv:opencsv from 5.11.2 to 5.12.0.
---
updated-dependencies:
- dependency-name: com.opencsv:opencsv
dependency-version: 5.12.0
dependency-type: direct:development
update-type: version-update:semver-minor
...
Signed-off-by: dependabot[bot]
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index 1d8ac4029..44b1dbd75 100644
--- a/pom.xml
+++ b/pom.xml
@@ -387,7 +387,7 @@
com.opencsv
opencsv
- 5.11.2
+ 5.12.0
test
From eaa8bdbe2a6cf587704e5862d17bcbb31218236e Mon Sep 17 00:00:00 2001
From: Gary Gregory
Date: Fri, 1 Aug 2025 08:27:13 -0400
Subject: [PATCH 048/245] [test] Bump com.opencsv:opencsv from 5.11.2 to 5.12.0
#558
---
src/changes/changes.xml | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 2e2e3b315..925c704c2 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -43,7 +43,8 @@
-
+
+ [test] Bump com.opencsv:opencsv from 5.11.2 to 5.12.0 #558.
From 0922aed80dfce4946d22cdc647e8a402d370ea56 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Fri, 1 Aug 2025 12:54:55 +0000
Subject: [PATCH 049/245] Bump github/codeql-action from 3.29.4 to 3.29.5
Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.29.4 to 3.29.5.
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/codeql-action/compare/4e828ff8d448a8a6e532957b1811f387a63867e8...51f77329afa6477de8c49fc9c7046c15b9a4e79d)
---
updated-dependencies:
- dependency-name: github/codeql-action
dependency-version: 3.29.5
dependency-type: direct:production
update-type: version-update:semver-patch
...
Signed-off-by: dependabot[bot]
---
.github/workflows/codeql-analysis.yml | 6 +++---
.github/workflows/scorecards-analysis.yml | 2 +-
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml
index 7400fb888..0ade2ded2 100644
--- a/.github/workflows/codeql-analysis.yml
+++ b/.github/workflows/codeql-analysis.yml
@@ -57,7 +57,7 @@ jobs:
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
- uses: github/codeql-action/init@4e828ff8d448a8a6e532957b1811f387a63867e8 # 3.29.4
+ uses: github/codeql-action/init@51f77329afa6477de8c49fc9c7046c15b9a4e79d # 3.29.5
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
@@ -68,7 +68,7 @@ jobs:
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
- uses: github/codeql-action/autobuild@4e828ff8d448a8a6e532957b1811f387a63867e8 # 3.29.4
+ uses: github/codeql-action/autobuild@51f77329afa6477de8c49fc9c7046c15b9a4e79d # 3.29.5
# ℹ️ Command-line programs to run using the OS shell.
# 📚 https://git.io/JvXDl
@@ -82,4 +82,4 @@ jobs:
# make release
- name: Perform CodeQL Analysis
- uses: github/codeql-action/analyze@4e828ff8d448a8a6e532957b1811f387a63867e8 # 3.29.4
+ uses: github/codeql-action/analyze@51f77329afa6477de8c49fc9c7046c15b9a4e79d # 3.29.5
diff --git a/.github/workflows/scorecards-analysis.yml b/.github/workflows/scorecards-analysis.yml
index 35000d4fe..359d5f95a 100644
--- a/.github/workflows/scorecards-analysis.yml
+++ b/.github/workflows/scorecards-analysis.yml
@@ -64,6 +64,6 @@ jobs:
retention-days: 5
- name: "Upload to code-scanning"
- uses: github/codeql-action/upload-sarif@4e828ff8d448a8a6e532957b1811f387a63867e8 # 3.29.4
+ uses: github/codeql-action/upload-sarif@51f77329afa6477de8c49fc9c7046c15b9a4e79d # 3.29.5
with:
sarif_file: results.sarif
From 6bba74633f22969f49e7a73759f581369d9f5e02 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Fri, 8 Aug 2025 12:27:01 +0000
Subject: [PATCH 050/245] Bump actions/cache from 4.2.3 to 4.2.4
Bumps [actions/cache](https://github.com/actions/cache) from 4.2.3 to 4.2.4.
- [Release notes](https://github.com/actions/cache/releases)
- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)
- [Commits](https://github.com/actions/cache/compare/5a3ec84eff668545956fd18022155c47e93e2684...0400d5f644dc74513175e3cd8d07132dd4860809)
---
updated-dependencies:
- dependency-name: actions/cache
dependency-version: 4.2.4
dependency-type: direct:production
update-type: version-update:semver-patch
...
Signed-off-by: dependabot[bot]
---
.github/workflows/codeql-analysis.yml | 2 +-
.github/workflows/maven.yml | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml
index 0ade2ded2..9ef257027 100644
--- a/.github/workflows/codeql-analysis.yml
+++ b/.github/workflows/codeql-analysis.yml
@@ -48,7 +48,7 @@ jobs:
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # 4.2.2
with:
persist-credentials: false
- - uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3
+ - uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4
with:
path: ~/.m2/repository
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml
index 630852b56..9a9c25f17 100644
--- a/.github/workflows/maven.yml
+++ b/.github/workflows/maven.yml
@@ -41,7 +41,7 @@ jobs:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # 4.2.2
with:
persist-credentials: false
- - uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3
+ - uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4
with:
path: ~/.m2/repository
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
From 56d4b299281fcde31e14d63f49dce36218aa3976 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Fri, 8 Aug 2025 12:27:14 +0000
Subject: [PATCH 051/245] Bump github/codeql-action from 3.29.7 to 3.29.8
Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.29.7 to 3.29.8.
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/codeql-action/compare/51f77329afa6477de8c49fc9c7046c15b9a4e79d...76621b61decf072c1cee8dd1ce2d2a82d33c17ed)
---
updated-dependencies:
- dependency-name: github/codeql-action
dependency-version: 3.29.8
dependency-type: direct:production
update-type: version-update:semver-patch
...
Signed-off-by: dependabot[bot]
---
.github/workflows/codeql-analysis.yml | 6 +++---
.github/workflows/scorecards-analysis.yml | 2 +-
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml
index 0ade2ded2..3f47f8ec1 100644
--- a/.github/workflows/codeql-analysis.yml
+++ b/.github/workflows/codeql-analysis.yml
@@ -57,7 +57,7 @@ jobs:
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
- uses: github/codeql-action/init@51f77329afa6477de8c49fc9c7046c15b9a4e79d # 3.29.5
+ uses: github/codeql-action/init@76621b61decf072c1cee8dd1ce2d2a82d33c17ed # 3.29.5
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
@@ -68,7 +68,7 @@ jobs:
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
- uses: github/codeql-action/autobuild@51f77329afa6477de8c49fc9c7046c15b9a4e79d # 3.29.5
+ uses: github/codeql-action/autobuild@76621b61decf072c1cee8dd1ce2d2a82d33c17ed # 3.29.5
# ℹ️ Command-line programs to run using the OS shell.
# 📚 https://git.io/JvXDl
@@ -82,4 +82,4 @@ jobs:
# make release
- name: Perform CodeQL Analysis
- uses: github/codeql-action/analyze@51f77329afa6477de8c49fc9c7046c15b9a4e79d # 3.29.5
+ uses: github/codeql-action/analyze@76621b61decf072c1cee8dd1ce2d2a82d33c17ed # 3.29.5
diff --git a/.github/workflows/scorecards-analysis.yml b/.github/workflows/scorecards-analysis.yml
index 359d5f95a..e3d3d9bd0 100644
--- a/.github/workflows/scorecards-analysis.yml
+++ b/.github/workflows/scorecards-analysis.yml
@@ -64,6 +64,6 @@ jobs:
retention-days: 5
- name: "Upload to code-scanning"
- uses: github/codeql-action/upload-sarif@51f77329afa6477de8c49fc9c7046c15b9a4e79d # 3.29.5
+ uses: github/codeql-action/upload-sarif@76621b61decf072c1cee8dd1ce2d2a82d33c17ed # 3.29.5
with:
sarif_file: results.sarif
From cf87e85336003555485f5e829f5202ed8211678d Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Fri, 15 Aug 2025 12:42:39 +0000
Subject: [PATCH 052/245] Bump github/codeql-action from 3.29.8 to 3.29.9
Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.29.8 to 3.29.9.
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/codeql-action/compare/76621b61decf072c1cee8dd1ce2d2a82d33c17ed...df559355d593797519d70b90fc8edd5db049e7a2)
---
updated-dependencies:
- dependency-name: github/codeql-action
dependency-version: 3.29.9
dependency-type: direct:production
update-type: version-update:semver-patch
...
Signed-off-by: dependabot[bot]
---
.github/workflows/codeql-analysis.yml | 6 +++---
.github/workflows/scorecards-analysis.yml | 2 +-
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml
index 6a66f14e9..f6956cda2 100644
--- a/.github/workflows/codeql-analysis.yml
+++ b/.github/workflows/codeql-analysis.yml
@@ -57,7 +57,7 @@ jobs:
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
- uses: github/codeql-action/init@76621b61decf072c1cee8dd1ce2d2a82d33c17ed # 3.29.5
+ uses: github/codeql-action/init@df559355d593797519d70b90fc8edd5db049e7a2 # 3.29.5
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
@@ -68,7 +68,7 @@ jobs:
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
- uses: github/codeql-action/autobuild@76621b61decf072c1cee8dd1ce2d2a82d33c17ed # 3.29.5
+ uses: github/codeql-action/autobuild@df559355d593797519d70b90fc8edd5db049e7a2 # 3.29.5
# ℹ️ Command-line programs to run using the OS shell.
# 📚 https://git.io/JvXDl
@@ -82,4 +82,4 @@ jobs:
# make release
- name: Perform CodeQL Analysis
- uses: github/codeql-action/analyze@76621b61decf072c1cee8dd1ce2d2a82d33c17ed # 3.29.5
+ uses: github/codeql-action/analyze@df559355d593797519d70b90fc8edd5db049e7a2 # 3.29.5
diff --git a/.github/workflows/scorecards-analysis.yml b/.github/workflows/scorecards-analysis.yml
index e3d3d9bd0..8b2745369 100644
--- a/.github/workflows/scorecards-analysis.yml
+++ b/.github/workflows/scorecards-analysis.yml
@@ -64,6 +64,6 @@ jobs:
retention-days: 5
- name: "Upload to code-scanning"
- uses: github/codeql-action/upload-sarif@76621b61decf072c1cee8dd1ce2d2a82d33c17ed # 3.29.5
+ uses: github/codeql-action/upload-sarif@df559355d593797519d70b90fc8edd5db049e7a2 # 3.29.5
with:
sarif_file: results.sarif
From 4aac088e88b83a14c62004d339622a551dadd765 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Fri, 15 Aug 2025 12:42:46 +0000
Subject: [PATCH 053/245] Bump actions/checkout from 4.2.2 to 5.0.0
Bumps [actions/checkout](https://github.com/actions/checkout) from 4.2.2 to 5.0.0.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/11bd71901bbe5b1630ceea73d27597364c9af683...08c6903cd8c0fde910a37f88322edcfb5dd907a8)
---
updated-dependencies:
- dependency-name: actions/checkout
dependency-version: 5.0.0
dependency-type: direct:production
update-type: version-update:semver-major
...
Signed-off-by: dependabot[bot]
---
.github/workflows/codeql-analysis.yml | 2 +-
.github/workflows/dependency-review.yml | 2 +-
.github/workflows/maven.yml | 2 +-
.github/workflows/scorecards-analysis.yml | 2 +-
4 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml
index 6a66f14e9..af9e41c42 100644
--- a/.github/workflows/codeql-analysis.yml
+++ b/.github/workflows/codeql-analysis.yml
@@ -45,7 +45,7 @@ jobs:
steps:
- name: Checkout repository
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # 4.2.2
+ uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # 5.0.0
with:
persist-credentials: false
- uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4
diff --git a/.github/workflows/dependency-review.yml b/.github/workflows/dependency-review.yml
index 33573cf94..e8d1ed678 100644
--- a/.github/workflows/dependency-review.yml
+++ b/.github/workflows/dependency-review.yml
@@ -26,6 +26,6 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: 'Checkout Repository'
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+ uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
- name: 'Dependency Review PR'
uses: actions/dependency-review-action@da24556b548a50705dd671f47852072ea4c105d9 # v4.7.1
diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml
index 9a9c25f17..df668a8ab 100644
--- a/.github/workflows/maven.yml
+++ b/.github/workflows/maven.yml
@@ -38,7 +38,7 @@ jobs:
experimental: true
steps:
- - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # 4.2.2
+ - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # 5.0.0
with:
persist-credentials: false
- uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4
diff --git a/.github/workflows/scorecards-analysis.yml b/.github/workflows/scorecards-analysis.yml
index e3d3d9bd0..6f557e72d 100644
--- a/.github/workflows/scorecards-analysis.yml
+++ b/.github/workflows/scorecards-analysis.yml
@@ -40,7 +40,7 @@ jobs:
steps:
- name: "Checkout code"
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # 4.2.2
+ uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # 5.0.0
with:
persist-credentials: false
From 60287cac08b675f1564d7f18209c8def3a941e40 Mon Sep 17 00:00:00 2001
From: "Gary D. Gregory"
Date: Wed, 20 Aug 2025 06:53:46 -0400
Subject: [PATCH 054/245] Javadoc
---
src/main/java/org/apache/commons/csv/CSVParser.java | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/src/main/java/org/apache/commons/csv/CSVParser.java b/src/main/java/org/apache/commons/csv/CSVParser.java
index 9b96f7c7f..538bb395c 100644
--- a/src/main/java/org/apache/commons/csv/CSVParser.java
+++ b/src/main/java/org/apache/commons/csv/CSVParser.java
@@ -175,7 +175,7 @@ public CSVParser get() throws IOException {
* Sets the lexer offset when the parser does not start parsing at the beginning of the source.
*
* @param characterOffset the lexer offset.
- * @return this instance.
+ * @return {@code this} instance.
*/
public Builder setCharacterOffset(final long characterOffset) {
this.characterOffset = characterOffset;
@@ -186,7 +186,7 @@ public Builder setCharacterOffset(final long characterOffset) {
* Sets the CSV format. A copy of the given format is kept.
*
* @param format the CSV format, {@code null} resets to {@link CSVFormat#DEFAULT}.
- * @return this instance.
+ * @return {@code this} instance.
*/
public Builder setFormat(final CSVFormat format) {
this.format = CSVFormat.copy(format);
@@ -197,7 +197,7 @@ public Builder setFormat(final CSVFormat format) {
* Sets the next record number to assign, defaults to {@code 1}.
*
* @param recordNumber the next record number to assign.
- * @return this instance.
+ * @return {@code this} instance.
*/
public Builder setRecordNumber(final long recordNumber) {
this.recordNumber = recordNumber;
@@ -208,7 +208,7 @@ public Builder setRecordNumber(final long recordNumber) {
* Sets whether to enable byte tracking for the parser.
*
* @param trackBytes {@code true} to enable byte tracking; {@code false} to disable it.
- * @return this instance.
+ * @return {@code this} instance.
* @since 1.13.0
*/
public Builder setTrackBytes(final boolean trackBytes) {
From 13d10d724a27868eeaefa00bc08cd115b2af75da Mon Sep 17 00:00:00 2001
From: Jan Burkhardt
Date: Thu, 21 Aug 2025 11:09:21 +0200
Subject: [PATCH 055/245] CSV-320: Remove Spotbugs Dependency and use
exclude-filter instead (#564)
Removes the Spotbugs dependency that introduces a compile time dependency to CsvPrinter.
---
pom.xml | 6 ------
src/main/java/org/apache/commons/csv/CSVPrinter.java | 3 ---
src/site/resources/spotbugs/spotbugs-exclude-filter.xml | 7 +++++++
3 files changed, 7 insertions(+), 9 deletions(-)
diff --git a/pom.xml b/pom.xml
index 44b1dbd75..f33337cbb 100644
--- a/pom.xml
+++ b/pom.xml
@@ -68,12 +68,6 @@
${commons.jmh.version}
test
-
- com.github.spotbugs
- spotbugs-annotations
- ${commons.spotbugs.impl.version}
- true
-
scm:git:https://gitbox.apache.org/repos/asf/commons-csv.git
diff --git a/src/main/java/org/apache/commons/csv/CSVPrinter.java b/src/main/java/org/apache/commons/csv/CSVPrinter.java
index 59948557e..087129ec5 100644
--- a/src/main/java/org/apache/commons/csv/CSVPrinter.java
+++ b/src/main/java/org/apache/commons/csv/CSVPrinter.java
@@ -40,8 +40,6 @@
import org.apache.commons.io.function.IOStream;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
-
/**
* Prints values in a {@link CSVFormat CSV format}.
*
@@ -153,7 +151,6 @@ public void close(final boolean flush) throws IOException {
* @throws IOException
* If an I/O error occurs
*/
- @SuppressFBWarnings(value = "AT_NONATOMIC_OPERATIONS_ON_SHARED_VARIABLE", justification = "https://github.com/spotbugs/spotbugs/issues/3428")
private void endOfRecord() throws IOException {
println();
recordCount++;
diff --git a/src/site/resources/spotbugs/spotbugs-exclude-filter.xml b/src/site/resources/spotbugs/spotbugs-exclude-filter.xml
index a58e09e24..79c57d3ae 100644
--- a/src/site/resources/spotbugs/spotbugs-exclude-filter.xml
+++ b/src/site/resources/spotbugs/spotbugs-exclude-filter.xml
@@ -54,5 +54,12 @@
+
+
+
+
+
+
+
From e46fea81ec00cdcf7fc5eef7e7d3bc9f7c2d2bba Mon Sep 17 00:00:00 2001
From: Alex Herbert
Date: Thu, 21 Aug 2025 10:14:07 +0100
Subject: [PATCH 056/245] Track changes
---
src/changes/changes.xml | 1 +
1 file changed, 1 insertion(+)
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 925c704c2..ead39353f 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -42,6 +42,7 @@
+ Remove Spotbugs dependency and use exclude-filter instead #564.
[test] Bump com.opencsv:opencsv from 5.11.2 to 5.12.0 #558.
From c9a4f4b2514b3d75e24f9fd02ed7d5e7bb90fe73 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Fri, 22 Aug 2025 12:57:09 +0000
Subject: [PATCH 057/245] Bump actions/dependency-review-action from 4.7.1 to
4.7.2
Bumps [actions/dependency-review-action](https://github.com/actions/dependency-review-action) from 4.7.1 to 4.7.2.
- [Release notes](https://github.com/actions/dependency-review-action/releases)
- [Commits](https://github.com/actions/dependency-review-action/compare/da24556b548a50705dd671f47852072ea4c105d9...bc41886e18ea39df68b1b1245f4184881938e050)
---
updated-dependencies:
- dependency-name: actions/dependency-review-action
dependency-version: 4.7.2
dependency-type: direct:production
update-type: version-update:semver-patch
...
Signed-off-by: dependabot[bot]
---
.github/workflows/dependency-review.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/dependency-review.yml b/.github/workflows/dependency-review.yml
index e8d1ed678..daed9687f 100644
--- a/.github/workflows/dependency-review.yml
+++ b/.github/workflows/dependency-review.yml
@@ -28,4 +28,4 @@ jobs:
- name: 'Checkout Repository'
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
- name: 'Dependency Review PR'
- uses: actions/dependency-review-action@da24556b548a50705dd671f47852072ea4c105d9 # v4.7.1
+ uses: actions/dependency-review-action@bc41886e18ea39df68b1b1245f4184881938e050 # v4.7.2
From f97ba23aae8898b3a1406f7563a9ca7b27230c5d Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Fri, 22 Aug 2025 12:57:21 +0000
Subject: [PATCH 058/245] Bump github/codeql-action from 3.29.9 to 3.29.11
Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.29.9 to 3.29.11.
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/codeql-action/compare/df559355d593797519d70b90fc8edd5db049e7a2...3c3833e0f8c1c83d449a7478aa59c036a9165498)
---
updated-dependencies:
- dependency-name: github/codeql-action
dependency-version: 3.29.11
dependency-type: direct:production
update-type: version-update:semver-patch
...
Signed-off-by: dependabot[bot]
---
.github/workflows/codeql-analysis.yml | 6 +++---
.github/workflows/scorecards-analysis.yml | 2 +-
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml
index 12726317c..90e7c8f32 100644
--- a/.github/workflows/codeql-analysis.yml
+++ b/.github/workflows/codeql-analysis.yml
@@ -57,7 +57,7 @@ jobs:
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
- uses: github/codeql-action/init@df559355d593797519d70b90fc8edd5db049e7a2 # 3.29.5
+ uses: github/codeql-action/init@3c3833e0f8c1c83d449a7478aa59c036a9165498 # 3.29.5
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
@@ -68,7 +68,7 @@ jobs:
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
- uses: github/codeql-action/autobuild@df559355d593797519d70b90fc8edd5db049e7a2 # 3.29.5
+ uses: github/codeql-action/autobuild@3c3833e0f8c1c83d449a7478aa59c036a9165498 # 3.29.5
# ℹ️ Command-line programs to run using the OS shell.
# 📚 https://git.io/JvXDl
@@ -82,4 +82,4 @@ jobs:
# make release
- name: Perform CodeQL Analysis
- uses: github/codeql-action/analyze@df559355d593797519d70b90fc8edd5db049e7a2 # 3.29.5
+ uses: github/codeql-action/analyze@3c3833e0f8c1c83d449a7478aa59c036a9165498 # 3.29.5
diff --git a/.github/workflows/scorecards-analysis.yml b/.github/workflows/scorecards-analysis.yml
index 1f53594dc..d580164b9 100644
--- a/.github/workflows/scorecards-analysis.yml
+++ b/.github/workflows/scorecards-analysis.yml
@@ -64,6 +64,6 @@ jobs:
retention-days: 5
- name: "Upload to code-scanning"
- uses: github/codeql-action/upload-sarif@df559355d593797519d70b90fc8edd5db049e7a2 # 3.29.5
+ uses: github/codeql-action/upload-sarif@3c3833e0f8c1c83d449a7478aa59c036a9165498 # 3.29.5
with:
sarif_file: results.sarif
From 9d715221792ccb6d1a685ba02534c90246657f5a Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Fri, 22 Aug 2025 12:57:24 +0000
Subject: [PATCH 059/245] Bump actions/setup-java from 4.7.1 to 5.0.0
Bumps [actions/setup-java](https://github.com/actions/setup-java) from 4.7.1 to 5.0.0.
- [Release notes](https://github.com/actions/setup-java/releases)
- [Commits](https://github.com/actions/setup-java/compare/c5195efecf7bdfc987ee8bae7a71cb8b11521c00...dded0888837ed1f317902acf8a20df0ad188d165)
---
updated-dependencies:
- dependency-name: actions/setup-java
dependency-version: 5.0.0
dependency-type: direct:production
update-type: version-update:semver-major
...
Signed-off-by: dependabot[bot]
---
.github/workflows/maven.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml
index df668a8ab..2996e062a 100644
--- a/.github/workflows/maven.yml
+++ b/.github/workflows/maven.yml
@@ -48,7 +48,7 @@ jobs:
restore-keys: |
${{ runner.os }}-maven-
- name: Set up JDK ${{ matrix.java }}
- uses: actions/setup-java@c5195efecf7bdfc987ee8bae7a71cb8b11521c00 # v4.7.1
+ uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 # v5.0.0
with:
distribution: 'temurin'
java-version: ${{ matrix.java }}
From f95fa5e7d52f3c2da484f647e8d824b96547f70d Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Sun, 24 Aug 2025 16:03:13 +0000
Subject: [PATCH 060/245] Bump org.apache.commons:commons-parent from 85 to 87
Bumps [org.apache.commons:commons-parent](https://github.com/apache/commons-parent) from 85 to 87.
- [Changelog](https://github.com/apache/commons-parent/blob/master/RELEASE-NOTES.txt)
- [Commits](https://github.com/apache/commons-parent/commits)
---
updated-dependencies:
- dependency-name: org.apache.commons:commons-parent
dependency-version: '87'
dependency-type: direct:production
update-type: version-update:semver-major
...
Signed-off-by: dependabot[bot]
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index f33337cbb..301246898 100644
--- a/pom.xml
+++ b/pom.xml
@@ -20,7 +20,7 @@
org.apache.commons
commons-parent
- 85
+ 87
commons-csv
1.14.2-SNAPSHOT
From ee86bd6908f79da2778dad9a995f70fd47acd938 Mon Sep 17 00:00:00 2001
From: "Gary D. Gregory"
Date: Sun, 24 Aug 2025 15:06:13 -0400
Subject: [PATCH 061/245] Bump org.apache.commons:commons-parent from 85 to 87
---
src/changes/changes.xml | 1 +
1 file changed, 1 insertion(+)
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index ead39353f..615b5adb2 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -46,6 +46,7 @@
[test] Bump com.opencsv:opencsv from 5.11.2 to 5.12.0 #558.
+ Bump org.apache.commons:commons-parent from 85 to 87.
From 71e9846a4916772e50c692128305fc710b18f109 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Fri, 29 Aug 2025 12:00:48 +0000
Subject: [PATCH 062/245] Bump actions/dependency-review-action from 4.7.2 to
4.7.3
Bumps [actions/dependency-review-action](https://github.com/actions/dependency-review-action) from 4.7.2 to 4.7.3.
- [Release notes](https://github.com/actions/dependency-review-action/releases)
- [Commits](https://github.com/actions/dependency-review-action/compare/bc41886e18ea39df68b1b1245f4184881938e050...595b5aeba73380359d98a5e087f648dbb0edce1b)
---
updated-dependencies:
- dependency-name: actions/dependency-review-action
dependency-version: 4.7.3
dependency-type: direct:production
update-type: version-update:semver-patch
...
Signed-off-by: dependabot[bot]
---
.github/workflows/dependency-review.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/dependency-review.yml b/.github/workflows/dependency-review.yml
index daed9687f..1e0439242 100644
--- a/.github/workflows/dependency-review.yml
+++ b/.github/workflows/dependency-review.yml
@@ -28,4 +28,4 @@ jobs:
- name: 'Checkout Repository'
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
- name: 'Dependency Review PR'
- uses: actions/dependency-review-action@bc41886e18ea39df68b1b1245f4184881938e050 # v4.7.2
+ uses: actions/dependency-review-action@595b5aeba73380359d98a5e087f648dbb0edce1b # v4.7.3
From 8b99b509f1b51f1e0f65d75b98a04276f1c5193f Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Fri, 5 Sep 2025 12:01:07 +0000
Subject: [PATCH 063/245] Bump github/codeql-action from 3.29.11 to 3.30.1
Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.29.11 to 3.30.1.
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/codeql-action/compare/3c3833e0f8c1c83d449a7478aa59c036a9165498...f1f6e5f6af878fb37288ce1c627459e94dbf7d01)
---
updated-dependencies:
- dependency-name: github/codeql-action
dependency-version: 3.30.1
dependency-type: direct:production
update-type: version-update:semver-minor
...
Signed-off-by: dependabot[bot]
---
.github/workflows/codeql-analysis.yml | 6 +++---
.github/workflows/scorecards-analysis.yml | 2 +-
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml
index 90e7c8f32..657f62102 100644
--- a/.github/workflows/codeql-analysis.yml
+++ b/.github/workflows/codeql-analysis.yml
@@ -57,7 +57,7 @@ jobs:
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
- uses: github/codeql-action/init@3c3833e0f8c1c83d449a7478aa59c036a9165498 # 3.29.5
+ uses: github/codeql-action/init@f1f6e5f6af878fb37288ce1c627459e94dbf7d01 # 3.29.5
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
@@ -68,7 +68,7 @@ jobs:
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
- uses: github/codeql-action/autobuild@3c3833e0f8c1c83d449a7478aa59c036a9165498 # 3.29.5
+ uses: github/codeql-action/autobuild@f1f6e5f6af878fb37288ce1c627459e94dbf7d01 # 3.29.5
# ℹ️ Command-line programs to run using the OS shell.
# 📚 https://git.io/JvXDl
@@ -82,4 +82,4 @@ jobs:
# make release
- name: Perform CodeQL Analysis
- uses: github/codeql-action/analyze@3c3833e0f8c1c83d449a7478aa59c036a9165498 # 3.29.5
+ uses: github/codeql-action/analyze@f1f6e5f6af878fb37288ce1c627459e94dbf7d01 # 3.29.5
diff --git a/.github/workflows/scorecards-analysis.yml b/.github/workflows/scorecards-analysis.yml
index d580164b9..7bcf25e98 100644
--- a/.github/workflows/scorecards-analysis.yml
+++ b/.github/workflows/scorecards-analysis.yml
@@ -64,6 +64,6 @@ jobs:
retention-days: 5
- name: "Upload to code-scanning"
- uses: github/codeql-action/upload-sarif@3c3833e0f8c1c83d449a7478aa59c036a9165498 # 3.29.5
+ uses: github/codeql-action/upload-sarif@f1f6e5f6af878fb37288ce1c627459e94dbf7d01 # 3.29.5
with:
sarif_file: results.sarif
From c4baa00172e3f831a5e514236b0613360a3438cd Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Fri, 12 Sep 2025 12:00:52 +0000
Subject: [PATCH 064/245] Bump github/codeql-action from 3.30.1 to 3.30.3
Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.30.1 to 3.30.3.
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/codeql-action/compare/f1f6e5f6af878fb37288ce1c627459e94dbf7d01...192325c86100d080feab897ff886c34abd4c83a3)
---
updated-dependencies:
- dependency-name: github/codeql-action
dependency-version: 3.30.3
dependency-type: direct:production
update-type: version-update:semver-patch
...
Signed-off-by: dependabot[bot]
---
.github/workflows/codeql-analysis.yml | 6 +++---
.github/workflows/scorecards-analysis.yml | 2 +-
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml
index 657f62102..be3841cb3 100644
--- a/.github/workflows/codeql-analysis.yml
+++ b/.github/workflows/codeql-analysis.yml
@@ -57,7 +57,7 @@ jobs:
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
- uses: github/codeql-action/init@f1f6e5f6af878fb37288ce1c627459e94dbf7d01 # 3.29.5
+ uses: github/codeql-action/init@192325c86100d080feab897ff886c34abd4c83a3 # 3.29.5
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
@@ -68,7 +68,7 @@ jobs:
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
- uses: github/codeql-action/autobuild@f1f6e5f6af878fb37288ce1c627459e94dbf7d01 # 3.29.5
+ uses: github/codeql-action/autobuild@192325c86100d080feab897ff886c34abd4c83a3 # 3.29.5
# ℹ️ Command-line programs to run using the OS shell.
# 📚 https://git.io/JvXDl
@@ -82,4 +82,4 @@ jobs:
# make release
- name: Perform CodeQL Analysis
- uses: github/codeql-action/analyze@f1f6e5f6af878fb37288ce1c627459e94dbf7d01 # 3.29.5
+ uses: github/codeql-action/analyze@192325c86100d080feab897ff886c34abd4c83a3 # 3.29.5
diff --git a/.github/workflows/scorecards-analysis.yml b/.github/workflows/scorecards-analysis.yml
index 7bcf25e98..eb5a3812f 100644
--- a/.github/workflows/scorecards-analysis.yml
+++ b/.github/workflows/scorecards-analysis.yml
@@ -64,6 +64,6 @@ jobs:
retention-days: 5
- name: "Upload to code-scanning"
- uses: github/codeql-action/upload-sarif@f1f6e5f6af878fb37288ce1c627459e94dbf7d01 # 3.29.5
+ uses: github/codeql-action/upload-sarif@192325c86100d080feab897ff886c34abd4c83a3 # 3.29.5
with:
sarif_file: results.sarif
From ad92c016cb0d42d438ffd779b28f535eb5749504 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Sat, 20 Sep 2025 02:06:48 +0000
Subject: [PATCH 065/245] Bump org.apache.commons:commons-parent from 87 to 88
Bumps [org.apache.commons:commons-parent](https://github.com/apache/commons-parent) from 87 to 88.
- [Changelog](https://github.com/apache/commons-parent/blob/master/RELEASE-NOTES.txt)
- [Commits](https://github.com/apache/commons-parent/commits)
---
updated-dependencies:
- dependency-name: org.apache.commons:commons-parent
dependency-version: '88'
dependency-type: direct:production
update-type: version-update:semver-major
...
Signed-off-by: dependabot[bot]
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index 301246898..decb869c7 100644
--- a/pom.xml
+++ b/pom.xml
@@ -20,7 +20,7 @@
org.apache.commons
commons-parent
- 87
+ 88
commons-csv
1.14.2-SNAPSHOT
From 589a120b5d2d9e2beec56e9f110b4b8125b589b9 Mon Sep 17 00:00:00 2001
From: Gary Gregory
Date: Fri, 19 Sep 2025 22:10:48 -0400
Subject: [PATCH 066/245] Bump org.apache.commons:commons-parent from 87 to 88
---
src/changes/changes.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 615b5adb2..31f186264 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -45,8 +45,8 @@
Remove Spotbugs dependency and use exclude-filter instead #564.
+ Bump org.apache.commons:commons-parent from 85 to 88 #573.
[test] Bump com.opencsv:opencsv from 5.11.2 to 5.12.0 #558.
- Bump org.apache.commons:commons-parent from 85 to 87.
From e4ad3171a78d9425ea72e6f1a7855f4f185be65d Mon Sep 17 00:00:00 2001
From: "Gary D. Gregory"
Date: Wed, 24 Sep 2025 10:17:28 -0400
Subject: [PATCH 067/245] Bump org.apache.commons:commons-lang3 from 3.18.0 to
3.19.0
---
pom.xml | 4 ++--
src/changes/changes.xml | 1 +
2 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/pom.xml b/pom.xml
index decb869c7..2a6a583ed 100644
--- a/pom.xml
+++ b/pom.xml
@@ -53,7 +53,7 @@
org.apache.commons
commons-lang3
- 3.18.0
+ 3.19.0
test
@@ -410,7 +410,7 @@
org.apache.commons
commons-lang3
- 3.18.0
+ 3.19.0
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 31f186264..dd8e4c07f 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -47,6 +47,7 @@
Bump org.apache.commons:commons-parent from 85 to 88 #573.
[test] Bump com.opencsv:opencsv from 5.11.2 to 5.12.0 #558.
+ Bump org.apache.commons:commons-lang3 from 3.18.0 to 3.19.0.
From 6b0789fbdafb13d857ad35c8f729afd45be56729 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Fri, 26 Sep 2025 12:01:01 +0000
Subject: [PATCH 068/245] Bump actions/cache from 4.2.4 to 4.3.0
Bumps [actions/cache](https://github.com/actions/cache) from 4.2.4 to 4.3.0.
- [Release notes](https://github.com/actions/cache/releases)
- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)
- [Commits](https://github.com/actions/cache/compare/0400d5f644dc74513175e3cd8d07132dd4860809...0057852bfaa89a56745cba8c7296529d2fc39830)
---
updated-dependencies:
- dependency-name: actions/cache
dependency-version: 4.3.0
dependency-type: direct:production
update-type: version-update:semver-minor
...
Signed-off-by: dependabot[bot]
---
.github/workflows/codeql-analysis.yml | 2 +-
.github/workflows/maven.yml | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml
index be3841cb3..73fb0aace 100644
--- a/.github/workflows/codeql-analysis.yml
+++ b/.github/workflows/codeql-analysis.yml
@@ -48,7 +48,7 @@ jobs:
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # 5.0.0
with:
persist-credentials: false
- - uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4
+ - uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0
with:
path: ~/.m2/repository
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml
index 2996e062a..dc7a2a88c 100644
--- a/.github/workflows/maven.yml
+++ b/.github/workflows/maven.yml
@@ -41,7 +41,7 @@ jobs:
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # 5.0.0
with:
persist-credentials: false
- - uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4
+ - uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0
with:
path: ~/.m2/repository
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
From ecbd2821b744b3a1bf5379c37176ef7c09f9253e Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Fri, 26 Sep 2025 12:01:15 +0000
Subject: [PATCH 069/245] Bump github/codeql-action from 3.30.3 to 3.30.4
Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.30.3 to 3.30.4.
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/codeql-action/compare/192325c86100d080feab897ff886c34abd4c83a3...303c0aef88fc2fe5ff6d63d3b1596bfd83dfa1f9)
---
updated-dependencies:
- dependency-name: github/codeql-action
dependency-version: 3.30.4
dependency-type: direct:production
update-type: version-update:semver-patch
...
Signed-off-by: dependabot[bot]
---
.github/workflows/codeql-analysis.yml | 6 +++---
.github/workflows/scorecards-analysis.yml | 2 +-
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml
index be3841cb3..f00c33c61 100644
--- a/.github/workflows/codeql-analysis.yml
+++ b/.github/workflows/codeql-analysis.yml
@@ -57,7 +57,7 @@ jobs:
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
- uses: github/codeql-action/init@192325c86100d080feab897ff886c34abd4c83a3 # 3.29.5
+ uses: github/codeql-action/init@303c0aef88fc2fe5ff6d63d3b1596bfd83dfa1f9 # 3.29.5
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
@@ -68,7 +68,7 @@ jobs:
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
- uses: github/codeql-action/autobuild@192325c86100d080feab897ff886c34abd4c83a3 # 3.29.5
+ uses: github/codeql-action/autobuild@303c0aef88fc2fe5ff6d63d3b1596bfd83dfa1f9 # 3.29.5
# ℹ️ Command-line programs to run using the OS shell.
# 📚 https://git.io/JvXDl
@@ -82,4 +82,4 @@ jobs:
# make release
- name: Perform CodeQL Analysis
- uses: github/codeql-action/analyze@192325c86100d080feab897ff886c34abd4c83a3 # 3.29.5
+ uses: github/codeql-action/analyze@303c0aef88fc2fe5ff6d63d3b1596bfd83dfa1f9 # 3.29.5
diff --git a/.github/workflows/scorecards-analysis.yml b/.github/workflows/scorecards-analysis.yml
index eb5a3812f..ba1650951 100644
--- a/.github/workflows/scorecards-analysis.yml
+++ b/.github/workflows/scorecards-analysis.yml
@@ -64,6 +64,6 @@ jobs:
retention-days: 5
- name: "Upload to code-scanning"
- uses: github/codeql-action/upload-sarif@192325c86100d080feab897ff886c34abd4c83a3 # 3.29.5
+ uses: github/codeql-action/upload-sarif@303c0aef88fc2fe5ff6d63d3b1596bfd83dfa1f9 # 3.29.5
with:
sarif_file: results.sarif
From 89eb1f053cd374b72866a77245b5c69fcb87fbf6 Mon Sep 17 00:00:00 2001
From: "Gary D. Gregory"
Date: Fri, 26 Sep 2025 10:16:15 -0400
Subject: [PATCH 070/245] Replace GH CI Java 24 with 25
Replace Java 25-ea with Java 26-ea
---
.github/workflows/maven.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml
index dc7a2a88c..9a24b4974 100644
--- a/.github/workflows/maven.yml
+++ b/.github/workflows/maven.yml
@@ -29,12 +29,12 @@ jobs:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-13]
- java: [ 8, 11, 17, 21, 24 ]
+ java: [ 8, 11, 17, 21, 25 ]
experimental: [false]
# Keep the same parameter order as the matrix above
include:
- os: ubuntu-latest
- java: 25-ea
+ java: 26-ea
experimental: true
steps:
From 9404f29023a7cad5969f29e9c3d3b30bd09dd9a8 Mon Sep 17 00:00:00 2001
From: Cassio Santos
Date: Mon, 29 Sep 2025 00:24:12 +0200
Subject: [PATCH 071/245] Remove broken link
---
src/site/xdoc/index.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/site/xdoc/index.xml b/src/site/xdoc/index.xml
index a133db619..26bb91567 100644
--- a/src/site/xdoc/index.xml
+++ b/src/site/xdoc/index.xml
@@ -105,7 +105,7 @@ For previous releases, see the Skife CSV
Open CSV
- Genjava CSV
+ Genjava CSV
In addition to the code from Netcetera (org.apache.commons.csv), Martin van den Bemt has added an additional writer API.
Other CSV implementations:
From 3d951f20f67b85e3a08681ff79ca1c63385049a9 Mon Sep 17 00:00:00 2001
From: Gary Gregory
Date: Mon, 29 Sep 2025 06:46:21 -0400
Subject: [PATCH 072/245] Remove broken website link #577
---
src/changes/changes.xml | 1 +
1 file changed, 1 insertion(+)
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index dd8e4c07f..4e6532850 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -43,6 +43,7 @@
Remove Spotbugs dependency and use exclude-filter instead #564.
+ Remove broken website link #577.
Bump org.apache.commons:commons-parent from 85 to 88 #573.
From 3aec0d4b2fa7aeec4dc72279ff9fe92be33a1fbb Mon Sep 17 00:00:00 2001
From: "Gary D. Gregory"
Date: Mon, 29 Sep 2025 06:59:02 -0400
Subject: [PATCH 073/245] Update site with new Oak logotype
---
src/media/logo-large.xcf | Bin 0 -> 143556 bytes
src/media/logo.png | Bin 0 -> 10083 bytes
src/media/logo.xcf | Bin 0 -> 22088 bytes
src/site/resources/images/logo.png | Bin 20042 -> 10083 bytes
src/site/resources/images/logo.xcf | Bin 141911 -> 0 bytes
src/site/xdoc/index.xml | 3 +++
6 files changed, 3 insertions(+)
create mode 100644 src/media/logo-large.xcf
create mode 100644 src/media/logo.png
create mode 100644 src/media/logo.xcf
delete mode 100644 src/site/resources/images/logo.xcf
diff --git a/src/media/logo-large.xcf b/src/media/logo-large.xcf
new file mode 100644
index 0000000000000000000000000000000000000000..7bb07af3eb06c4b961e2b27ee4cbdf9e0ba50828
GIT binary patch
literal 143556
zcmd>{31C&lz5ma>+4qI)>rHMTxgk4A*wt!%>c6f9Y^^*kNKh0A6{t&dCDy*Gty=4X
zB%-uct5s|3(#5S>wOXwUB8m!8R76o^4GAQ2DzvYAsg2zKNiV%MUMH2YSB199S
z2sut#&da9gQZW5YZe2TX!K^deYR^1(-W-Z7j(hT}7B9JAew%M``}}!x0*O^~&pe}j
ze*3wJKK`n7(pUb~%A+a|ul$m4?)>&yOUiwXt-kV^4WIF^si9%!`0?ewh5$F5{RM7l
zF4TAatfX`2^A|6gb;i7fXZji&sON$aIVV%Qbm6=uzIhAJIIC?j=bYa@ckbf0B|I4C
zN2E=1(J`1m)ao>LEgiN5gIwuNUdIjj7TmX?OkbNbij&5^Skn;ZVx=_i~!uWjLy
zSxaab=l_*^f3=NwXQ`Y!gU&8Lr0K7m|MlSu$`2XW&`|%^DmdlyUvT1C?MvG0j*vHa
z8ZQT(8F6#zcX=<`e2dO)n>+9PspU)N&7E8BTYB#NspV%aS+ZzSef`44b+hKQ&u*(b
zqkTcW9Ij_v>&p+BQXjs0zd`x>f<<+5V%-5dZA$&{@XMPM@fV$HGWW$t6z-Rdeu9F>
z2=Y@-KB9fWg7$@reMd|?Svi6IXJDVJ-@oitz-MWhoW(!Pjv
zbwoNTBApzOPKijTk(T;yqq@_+IIn=5Y;+%<%Elo|0ZLJM+S|+rOpEa&&cJti1Ee);BEpytM+8W9O``vlz
z{Q2_A`pQpkJ9o~kg|l>LeCn)O3+BzgAo7{_Kf}xp<<
z@4?qXpX!rz*35v5=AGX*U#3gOV&1Iz^JXpfU7)8=2ItJBOjy41wuPt9n8y21HG9_L
zw%R%K&TTtGCIH|3CFfH3X%6D(X(x|lAI3Gc&TMKKH?wIxoWji3an66z%`?Z(Y-((s
zIleW54{&DuvzIQ0)L!75-!^xNRNj7m?Sl3>Z9a&3n=mg@;PgOK;{>PREc3E8PHc1v
zG*1w2Wc$)3^XDyWt388zw=bxT;D%~-JGjU_Wtdo)U;V+^qs23Ye-SR|K&ekR%&lS3
ztR+j@&Rys`e#WuKMpSIt)D%&2#;iroqt0HsMEb(L!`bcg7CJ{3%;R1WhjhMn{yfmI
zOzt)NkF#4o2g+0%$tF2nrOW3noZGG$sk7$sn!ttWcSLA(#9!jO5g8{Lp3`J*;xEbJ
zZ|{BH
;&N=cu<$KKo;Xd0#PDAafpnh1(sJxsJcGI)h_=VsNZ5`201!XmI>G
zgNH6Kc*LCsk9O)k@qUw^@jHX3$-K=MjvS^UUh`QA5SuPt<%rTXPf+r|1j7syaInK*Be}wVDM*`7`!cD@b>c@yu;ux
zoOa(`WAgX>r@>$68@%@^gO;@{ah#RhQEO#%R9jgcl~!)YXe+;?+$!quStT8%R%u7E
zRn}2x`8x`%ijI71bVr^wrX$y??8vqPI%HYZ9iyzV9hp{5M}}3~k#5!LkfzJ3I^s+n
z0qO`)M}Rs4)DfVL0CfbYBS0Mi>IhIrfI0%y5ulC$b?87H0qO`)M}Rs4)S&})P*xRi
z>IhOtkUE0Y5u}bFbp)v+NF71y2vSFoI)c;@q>dnU1gS#@>IhOtkUE0Y5u^?ssDrYq
zps8bbLg1Krm*4rs3$MTXNxxld4S2`SS-I9uQq|T__M8WHrmIS8sA$1sL!;DaD|E!Y
zp&V6ig%ank%~w7v6w|)7P?cKtiEkFGV#}_7yi^rhA1Z`45+?e9Jy|t6$|=
z_F16{m20WaF)G`#y(=mKwW>;GS?aq1HOf+FRI5zOK6N{0x
zaOWQ`n|(x@Wse&et%hE@xW&WCF|YYmsPCpGX$m}VN0XJ=QDfzFR59eE8S-+5+-LbZ
zN*L}!hFXUEi-roTK)*)$rj7u01gIlG9SnOB!(PI$`vTO#kdM~GEkpiA0(I!u$f+Yp
z9YN~gSD4SR7cuN547)E#9Sr$sJ>1;?3n6vr*T~edd$51khdnPpcIWjM&YYUvWF@PC
zEq}P?%;xACD?<(TKGJz)e3g~0hIZe1O6q7UPYvyR;Hxp^R-p=gcv*$dDpn!;H%F9M
zJ{4MhT6CdRu0k8niO;txlzK|XtN(j(Z$(aWRAQF@h}qZtd0(DVt1GOb{>N`@b#*QRw
zTt}kS+>v0lbi`Y&P@?f2G1f#KqOD0CQP$)RuQjE^V@>T))**zmJ5sqvw&m&2HSnUA
zX`1BHBB4J*d#E8m4FPHhP(y$k0@MH<8Xuqr9jGBd4FPHhP(y$k2xkYV0h;Cs=o)xU
z%QQuDDUnbgp*++Oq=q0h1gRlN4MA#v3XKm^gAUXXq=q0h1gRlN4TQ6U)Br{E1f_<}
zBk0wLx7glY1k4Y?5dt;_G9v^m0AZHdaAZPJFXgr3eA5S4ojDBFnL=MoeUplbK9tW>U-Jm7s<3Kn+Z3qXN{R>6*~AgH2=9Fk%{uoXTW6
zlaOxZ@k&rbkQ##25Tphsv{6B7&{Rz*+QB9txcqI4dr_05W~Gh9tpk=Y6?aC)CMf4Ze`0lqPXZen;l2Wr+z^A+uOz
zN0ufB;~)j&`T0-kh~}p*Kli^aq`>49acv@GCl`$4y~+Z0eavW;0qTP|jDs+YhZsx>
zP@n$s3jz4zAqD29i0cv|Lb+gEfcijPAG2F!koq7M;~*2`Aq|s))Tc=Sb^Q&P0;5yJ
zb%~IqTrdvulm$wCn>@Z_=3ml%@1NJdyJhEId*AM@n>W7vhr7EjZ9lOwv&0&RYM6i9
zOM42`zTIo?=s2;$n`I68mpr&@v>M#=@YE?sh
zzn+yIZB0}Id+$6Ju6c?I!K)L0`1gpD)yJV%f41}+hmFoli;GGv7~OD0+xPEyb{B6g
z_fJqm+ipH8DbpJC)}8s2H+Zcnj8maMo)7~uENy>$C{q{3DEqzRdEG~S^N;CDeJK5L
zIh<0NRZI|$X*g}lO!Okeum0j?#KFy1BMv?(*?2Ri=Q=N3a@^u2>zOArpJ
zB%C&7ru;z1Kl|KbrYyO)J!+s(sl{cM`Zf4GIIT!2_#ZoV8wK>1S^=&FCv%_%+(7<&
zU?;c%^i$pp{)zmR;8}%qzK1(x?4@KXCBFo(2T$P0mMD(Iz*DOuDY+iJ2^`On?Xe`@
zpx}701N?azlZ;)U?A}C5o}lDpa1MBnJp7G%FlFG18PJg!SvE3Vq|cYKG6;jgk?9n3
zZ)XsT8BiI(VLW)cD0~g~K499pw=;;v45$p?FdjTz6uyRgA24n1t*YpsmGsla;Gy8_
zbl^sYLp4$$<90b%$sl;%E>P+@3MNr7AH0S$2eLTg-OQ1DDLI@Y)4^_zY>(3e$B`~d
zzQU0y;4S3eVw~dnfvSrsn8tw$@GkOCb0E2o#5@XSa*utPBp#sP9*$%TkT{8gIUM;U
zmdCd`M}$<$8sq-u6S3tS>#Y@_KQRrw*
z1x%TH+`L3`?6ZS=zQN&h_b+$z=GlDCGnP8fZLo}Im$sDCCch4{jw>J}S@ZylYFTN?
zB3o8p<_yaN7OR@zmkta*he+2PwxsJGkc?96opdayM_DjULd?NXzwe8!RI&
zZ7C1Z13JhWm>z&jNVU`g7N0}ic`#wAAD1cn+3I{tUB<$6=)2JfA4>X5mA&K0LQ5?t
z@lH*lWvA^ffd-cpS!xl9PpXUfwXZK$_R!Q~e!6gdoh6pKhk`#v!3QSnDdJEqMJE*V
z>n?@or(kz(iDgG^g}DESlBtx0%1E3~!7rgEzXFc|--mMVh~+>51-DRe68Kf{VlW5%
zDFopie&vsYcY$w%=Rr!M21(4|gknw{4~_@(L5Pk$;3aV^Cw#~iCxdT;-vrlzXM-<-
z=Yo(JwFvwRcn&BN)tTU1;D3T2fX9Qoz{98@mHXC#wO|f-tPnz(0?*-ucR`t_}o7BsB4Cl9e%HGt%2q%BQ
z`1jBA6j*9@xw0Q0on)oM*w!E(saDbnMk@tzQF2E!%x?<|tX3*t%<5vEoyy923d^v`R+KK4BXWkEDPcS;vjn+Xg51dsa%VS;vyxcCeLBb!{C9$n
z=Sktdr96{h3C|>0#Ipz%@;rhCJd0o+^`(-|rS*c@^n~CjP*BFiTl16$-BfX@NUeZV}A=OA^a!JuhFKMKgSPUh=cxEA<
z%M8*>L3$}jFCnr^4$_Vw?F!OH7QC@R`XESO1a&V3>7^jO6r`7QsT`3r;0JcLKeHgeD0B9HWt5(nv39q?a_(OB(4VBr}OjKq(sOC5`kF
zOSlABX#24HGg!~oSoY*6(@4}=_E*-Xkf=xS(m9Yss?oA*|B^_e$qGevhT=&zTlV1}
z#*t{T?7Tn3l4!N;=&NH$Ot9?P`=UrpwCpJ#dr3^P2K{e<5pK_Oy@9}rLz6D3}#<6Cw7ijH?BswPWiBuQMa*Cr}x>6bo|9wU2O
zqAEhhao!L{6_Q_+h_K$y`<-+#*~y6_vp@bL>3T$A34;kDwa;9cK%Qy#=>!C6_URwV
zV39p9LB#kCe@r&n$^=CCq0*Z}GQ6yf*Tt)4*7b<=<%v>Y1rxtO{7W$bO2B>8}TOMRuTjlt$E5=F~5Gstjm3;}xV`
zu#jVdvNV}lE*IQdg9X{)#8-M@u`c0qo
zh5A0(^ybSCuIxPH$Q-{l7&YbmyWY-GgYW&iPTeg;{p`CaB=cpVj)O>Sa
zg$fP);*bmkf!}zpT7_Pj8^f>TsMU4Kesel9;_645l>Kx|EWfPw{$>>#3`Rv+cHzSl
z)WB0d%WBy&NeykEdhDJl%HBJ)%=3oYz4ppe#^oeJCL62jC!R4V(?c%+E2506&%Ysp9$)7JS}D>m@kY#u}mc_mEF74W?~
zGWqpp?eZyg6|B$|@I-b6iArRbe}Zp%21aTzcmX&DtbxJ$2x8&c4tMq|n6U@Ji@@)J
zr-0uCo53ldaH@r{dp6<;6$k(KNx7wZS)i^5-vM6%-vD0#UjhFNz5xCSd=C5z_!77p
zd=*>=z6ovtKVX47=z(7pfk-+PBvE5M=mSpz4+ocmZQ$+TmEd~tX__Exc-&qR-=s~)
z(zd(7Rq%*=Ghq!=chmYs4rlmY937OnDNQZ&d=s6X==CB40({u00u(47jSAK(a_w2D
zNs+5R90Pf()QXy1r0pVc&vDep*$}!c$dZDs%7P4eH5MSLO@hrj5GF(Rr2O+@3WQY7
z|DVFo`<(812Wz+VkF-ONM?iF-k%94mVJkr0C&Uip(
zB^XsZ;{oX{K~gXQz!F-S^eI_YhZd4(V!iw&7lCT*Y5>UdNpC;A-GDAwf@$N;#tLKVexTA0W<6c
zNoXw8`I6<
ze$0qt)gyAr!#R3s+i+{iy)+`XYDDhr5xJJ(Tq4X!Y-CnF9yu=RTO)Gi!#T!!&G1++
zv#vxkGnN&@7$yZ?LaZ7}m{g;%YA9o(h-RfQnl(Z!6KkbjMI>PfVXPn~aPA}~TC<))lc#4wZW4L5m$LkqMkT$*~Ms
z=AF(8B*2;#g}a_nZgzq@pbTmfISk{HBmSI^{PJ2BAVX2#cmdlI
zd)y<4MmHbBLg47NUgfbu8OuYE>lDP9Lx6CTa=nfMeTcAk!2S!SET%Eq8j`en=W2uy<$%|dOPct
zO`&C;>(uU7fBd!jQL!d;MjFzsi+^=~YP5#NR^FE+dIU}
zx3R)fTO3^P;0q2u<=}%3-tXW&4*tTyI~@GEgSY-GqP#NSa|mIjwqh(qkRgH!5p;;A
zOoSi98Zj|sH7gSll(?%CL0O?h23f5LQT1tz<9?El=iY(|kjDdIBIHua4~9t)YdQXZ
z12Nr`(a}Vk(ZNot5OIu%TSU|%+B*^B2>CVIIxzt@>y*f~ifAlly%HH@?III^Pa~tF
zkKbsqk}+6ghoa{#OUm|ViAq0tXd*hF0z7=
z)k|cMRg6qlK8=iyMn*>?qjNxHRCM{lkWtac|8Jm$AntqC_T;JUKYix)j|TQ`d+)`2
zel$DaVKU4*<97p0hTCsDF}~8W?;m0=+;&N}m>q}ug0YB*ST5MFk4Hpw1wyF3vzbP&
zK;+XYs~bc<-;s3<2U`8dH@+??*<
zg9h!P9J9(%GaX#%;D$VF-xVnZt*2c5DpjWOUR=RE+VT+3Gf^_ku8TqlvgSx89$f+H
zOC_Cvz>2wVm6JY#^zTgC_H1CTdqFaZmijU2bx!&u(r-IyKk3aTZAXQeyFQjol9?B`
zI_cLachk>Cq#un)KM;|=DO6BhoiTq*q3yyCc#o{&%OXE0$SzhnFX!z%WaX
zSWA{36T^nr%32n66mwxCOOINleX^lM6d7h7MpDJRJTe#shs@potdPhYMq8YPhbS$~
zqJp+)GjG?#Ten3kFlY;sGLfc<^1{qoM(Q?lmji8Z6dV66OoZao7H3HziVCw_pe@><
z+%+cGZP7{#+JclxBvGQUFf^XFK=VfiGbgxn!#@KPp^tZ4pLemK`uN4IM*VQapBqWQ
z+>d(%=6*G52v!Eoq@YTtebh>V)kE%m6G&)@&_p#P(jbh}5d*>FZ{M}dd+B~WK01jo
zb3Ybt{vyNJSE(8y4^@M{98n`oDyYV)hJaJi{Pty%4;jQ;;Tfe}KM1(Bi6
zn#j;*nBW5B6H!PvN)ePtBi$%N$`OlnqXH>L9MX+Sq#f~EjzOCbDCPJ;fHreQjV4C4
z`Jlw;pHGN{;AKIKXtO3pv>Dd200~7D@{Ll2(b32^%8+x!BHyS$juD4^qY`;Xyq09p
z<^#$(eh{S1Tv4Nm7HvK#(fa2TEFp?n5UpGODpLn_646HJFqgH9wT6@yZ-fwUAnJh2
zi?)zSI|2?w9j}j%!uNwK-$2r_cea;}9bo|nGKWsQS%gI#2s^%G#f9Y@0k}bINsO$6
zy%oI(8$X}C<2kk4k#86#4_b(DBUxBHA%z#FBXC(1s??GVNa0dQA%YDA-cLgTH$n-I
zFbGozrP~N4{IP>4Ip{YC69=W*=ukkx*PQ&b4nFGO0}kHhpinwF|ECV#zY{w=vB?{&H#TMKZI)vYdQ>2E5bF&QddQAl5qO9NhAZq48fTa)
z9~3eg0YoX3GX^?X0ws-s=_-M;3Kqkj#Xw<;p}2xYY?>LyQRL&v4`U&MkQmglMf+hP
zET5Dg7&ACuj(-{pq2f~h_re3$bFk+cE+5&RQ9O^dbGY56A58z~G14}9V*MvpfMOBI
z7_l`hTW?ckj8N5z=tJ!I&5magdx$lQEAn8B9Qy1-ejSY%q7+IW!wgUY<&S}xEMX=P
zEQaljVMZush7c@bqtP((jLZfx(0msQ*_{}pHxiA+LReWTKQJ;j`uL}@kXa`N)z04w
z4_wc|o@=rOZq*%vdGNR538gCCprc#jw*c%wWaLXo5v-&KgFZ
zk=ZMTIm*RC_IJjhwk_HZ3t`cv{J_ZA=;NQpLT1Sr)VhB!Ja9b+d#>T~k?moObo++e
zZQ5`8N5*Kt*c~-HW=1ip(HIydC`=%+ElO53+O8-~jTM`s3>6TAqEYO*7i*#{HAXCn
z*b7))!34A=SJ|thkewg92U);EHi@(iAsE>)3NxNlZH!_r!WibL0cOvS6EJ>h=|w@E(d!Q7FeS}l3Yv)lQ9&=_leJN7iDBZxtbGVmB#Z0@Ed3ghVqlKs
zWg1p#%x{m8eI#9GWi=6f?gX-r#>3Yj>L7a?5As@ajASoGNs%{@FE&cCl3#_AZyC~#
zE8`^hJ94jaa7U)jzQ7zhnuAxx%fWRrqjJ!$(Al@iK1EailpqH;V-FS2ebr)}{TQ9&
zM6Mj8b6d%Y2H~SbIaPAElKWLS_X@d-!a31BoMLjQLo>Kbb2wK|E+?EjPM#(zoSnsm
zpCsujxbPfu>%+Mv29lN#2AbF;~93FnUI
z(FQ%?M{D4@)5Ez;a`h%hU+m_>lfpS%H>joI+->A;59bz<}SHz|6&o!!Ec%@
zBl9%5yTiHjc$&SLdf2vdu#zhmnH&SYj)U*T;iZ8+OzD{5XS0tvPb+#W!nzI7YZxO-
zqt9@47^1gut*gYcO2SyCt{T+3Wm+d92Askwu**d2N`!Tg;18pye1{D}Q4NxJ!@^n=Gbt$jJnfI+cB)qW*W`YDqq^}Xbwbc;A#w9O@St4eHmFw(_>hhAh#7-jWFTA*_KU3taY02Lwjjcob(
z(pwPs5SxIoKSg}~duE#0heZM9wVJs=Tnj;WOX$vUBvau#{nS%
z3&}r2`J>39
zd>hBxz?Z-)!BwEpzO!jSoLtz#iO15keWI#ZMZx17Nfny=EegKHt;*@R#7z{ek@w+#
zEInl#k}Q3q5e6k9E)k5!_(d=l+9(*qQb;fg8YAe1jtDBfyqQG$iv&L+qXe$;u^fp5
zOQ55%py+*LzyicJ(Ic=BA(fPWUMymxl$`&+5%s9)ZBeoqqLnNrvNSSk8W}Z>jG9J9
zO(UbGkx>IDeZk;I=#{`VJ{Bl(URSBBQ0x|KEsu)butj
zSsu|_EHAP&GHMzbHI0m#Mn+8|qo$Ej11EjK;74qiz%@RWEOB57b5|@Vdg2(c0MS|W
z2xPQ${_`TErO*H0h%#!sbB5euF
zO|(Lze>Rj6&c|CJ-!1qmbC07BNxZl}JDf)=a?-oG;Vin5QMc!ZvtAqleOTaR(UZho
zU*u#$t4F_7?4;3|l<4HdzbP(LJNtg$c|vVwTvT#y;|bq=j9qW?xNJJvch~Xp$yO-;
z^8Q#|RHQ;5cjn?CruvN-T>xjW?ZRYPVD&`n0#xLK*NtMi)-n|36lkr=$`QH7;T+3A
z_QSc|L++*#xpPM3rjE!JM&^b*dsX;0Y%AL|BDZ=(?vW9>J4WQLACbFaMDD*vZ8>*pP`g1reu;
z&6tQ%#pRf+vxc1@${NcAaYJ_CV0=l5KdH#D|GDmc%-XG5*C9J*q)w?@#JQ+1^z+D?
zPDH-4maBl57^ByTvR3?bNTDxJ8q4)yw#;i|RwEZLe&)O3u>ZO4eau>}
znsuFQ9IVoHO5Gxk6g8GSkF4?N1HHDR4_GtGy79n)K0rm5rwxZq9}NEbnzI_CCn3rj
z>U-df?C~gyLIbz8u$x-hzpY}=@r0WbA)J@TFrCEAeI-@d&z0d8EPBqy40b8BV1#to
z8(A!izJ%B<~qS!9h_m%j@wGb={(5~4B9!pI5A^6sg@bEV_)Uz(`in9AI(W;gW{<+
zn?llQXuBX?a88IWU>k{j+zwPy>1@L*eTr_vMmXd>Ya3F^be5l^F6(9aiF=4p_C=fN
z-t;nSDCVTQ`>}IKXBbkZ=aP^$^5=`wtwHu^ynR%{CA(`uQxHf_NWrFe0)>JSKI+hH^B8y7YSiv#Lk0A(FLBHfY<3vK}
zc5+7(bi1DQU^TR_0y9o*hu_Y3EEVNdhxdF!w^4v|V>%bR@+*<=!=D9uFv6`
z1n!p!#zS*c!8qt!G8oI6K2almqmjPRNZ)|QZG@rc;sPQKbyOBkcV(xbSlbHy7Md-#
zN%FixgXNhUaMvKu-NfoieAl_p-J%^^(l^?`fW868>oReEDKuJWv8b^`u14R4I$vC0{=KvYYRJwrBI!-2ls;P-(JvSiTlc1kBVus
zlGM2Uj=^i-=JcREEW7JEfD7A4dB
z_PX>Wi>>YVqGF);=SpmE&q=T_F1u1^
zI!dtyQYO#4;i+xRC*K=o4dfotzG}7j%KT-XHJC7E={;M}O+8mcKQ~?Y3iSVNX4jVA
zK>j~ObhZ@H*~duRWQ#}-cog_joOKBM4a6~z>zrqb(j~k?o5~R(vU%T8Pt=;ZWu3hhNZrJ?}_s}kQ
zxaSC0Jk&&&*hP<|Y5U(L?0;W3ANdTDcAwEjd3FiX9ydrEB}kiTzjmfWI!Kug
zoEMb9b>YDMw1XW%>iJaQc^n!#62-y_Y@p2_jZ_;)Ps72!Q2DfI~_03nJ!~xDd;s6JCX4((V3DM#WXO;Gb6SY-)
z!i9o(e7uei({Y`Sb0o$WnXdEQi285T>7_b8TF1Gu(hi=T
z_%0nU)Nx&mGF!GbV^pC=sb
z`p9}D?LLG1Oztzv^GcBCmv-#G@yu1wis83$xJdg^UJ5fNTcAXtDN03GF({0hY?G4U
zE?{%D4Uv2`f%fA@-wmP|Jy;N?@AHI%UGLW6qWcW)Gr7;`x}cEfmv*=cT6b%gtE3er
zr7&2cxD*AZFkB@tMxxXd#iFYm6lP2|B1v!;uesVjN51Gl`-8OK38EZ5SP;hU^Mr$4
z@7Cd>`wZ?gxz8xiD?y%L+Tki`rG1f#TH|stUv!brRu_tD5^sw|qN&_*WC>pfz|mr<
zs4w3u@mc5+KdCN5sfmNdazJ(B>t38I`q|)vXT=IYb&Y17hF3)a^`kLX4va*Zfcho9
zgmSKuuMyx%Q9#`ypC(XW)p1T0jF5Uqw5aMX9iOM;89E-XvjC1#JEJ%&vlrNzpvxB7-U=_
z>V{k+F>Vm`O7=Sv;{s8(I;o2!#{HqNbLu|E0m~Y{bX$KtFO+yauSR
zeHbFxnhS5+rmx35XR1+528A_L{DVH>XTP>mv6>HE2
zmd^OF>%hMq%i#pQG-f)~tk1Hj3{ojP&1gajPvdQ#3`IzOh}<*=V2`LOne@S!*%g_n1GN`d>$sUfEJ&J$tR;VJx&yJRgd)c=3Fg5TvibMCiSEK1^m&oeZX;)Jp-=>6J7vlLd7K
zm=#3nWEt0o$enJ>Rj8GW14Q=6$LtX8lj8>wM|nr(@fnGb;|-Dgm3e$)!tsenmW_L;
zv>eZfl0MEL-VQ;a0TAM6wu+@c_neBH2^&
z`2dFTo=9$bzN*0ct&XSam<@-N#OL$fAN6jY#P{jAQ^!*!wxf6EVxy>T(eZysYNo>cxo2{xW^|fpa8`Z;EV%}Kz$tb=pWFHsG#O6_bD-)HTx->)8TIxIL3J;N|
z^`~MSX*a%=q8ebhmZS7*LW=sbxKj*y+ct|g#!&n@8->>kMW6CyG`#I#&5t%~{>*zs
zw+v_4A!0O}3VxBogNA(~Mk5A%v(Ar^i|ZCKntcX+XZWzV40}e5X03nAC>$4rog+rG
zApdA4#+0sqL=}xJ`C&hD-AwHv5eJIV$dvm!QxW7EFNso=tU{lhpTwR4<0(;!Qu#W`
zw?xh7cuSPBbQFC*@W(>WDxggs=vyVU$^*TthIV;a2-ZQ<1nZ%39u|U4&^^Is&J}Fo
zT)`>fMWZZ)WdSS;Us=#5K~-JhqEKhy?ZlCQ@UmiHC&EQnuqZ-B5h%7GIFt`fOn_ES
z#2{r-M>OA;`3E39
zSvN;Jxf`4L;tOtP&9R@iSbcfFg`t!S|0o}zvHMde%RSGO*xs5e3Ml*8?1|V5+Z!gz
zhiO9g-K~fgROqF}rOZX_#k~B;qNCDC(m4k4tO`BXmWWSI720uiiHP$;12>h6
zATPA+j=SzUS;2(E#E1z-8lMcJ!-Vd6Xg$4_c
zzxe*mwS3EMF#m+hpXjT?UF={?OZ#2hEBGedP}Jlrwv>rG+UV)8l;Wi}<3i-~QU5b-Q1b-JwY!`&|jD)Qp^U|X_{-chuC+BeLkbpY1KrW13TOhab
z+*HUU=YGz_tYvIwY9Y?dMAiEppFy@nH8Dd2Zx&pH9oUUc{LtVJwEKiX+M*(4)%@
z7I%cK4qZMHOQESEeGn80gb8jN%`+N$8cAnaYA^#x$b~C*KgnWNyIkYYBZHEs&ARMh
zY1$D!=Zl>idEKYea$oufI_Y9D6jmW^kk1Htbh*LeKnS`jD{)i)kqbT_?C1--o;A05)U*kY1pMnc0Xy?>oK4zny;fUBA`#3NQJdXn@
z@{yF6IPh}{syJ{A*vWyY4>%yMWUr#2fdldpm&?eD3);8AZCnr-K=^AP(bg_QvqUU5<2#Dp_^Cm0va;3C|K5T=OWguZadtdPRboBrbGntPk;4xS#~#X(#3^T@f8X9%CO}0}!Ldh(SoDM$75lv#VW$)Rol$_0x
zqrfLPvN?)t3TZcvYBf1lm}%)fA1{ODoVf)2j@&(;glrCZ5QNgIQ^89(use~2>;@4^
zKaK-OfLCzfJ!T2pgT9mMDEkjJuaqU<+5Yl!b%
zZX@}1L<-kgvVm}C0?92=veWLSGApExm%Sl}aet*P%J6*-N&PQgCZ;znA%9NfzG{J%
zlMiGIh(MTlh6u~~*qD}?caPRak7D@f2Jsz|r%fwmHD3>JR~I(T#2k+@`M$z|O)#+-
z7_m<01=r+B_(YN0ikwztv}XE%DbuJxC2@g$`2ME
zPxCDzFBJKp$OKJ2wim}Up}p4@uoHF)F8}+xCt<;M#~6$#e(>cuzTTPjJ|Cgp``n6o
z{||=euuu&v8+D1qcGQz&<;&H%>#Lc}?9xpEzG-a-w#tgfZrM?(Fo_$xag2ODBk#G<
z@=cAzdt?n1@-FEwmoIQs|HZ6?mJR5Y(3m@Iy%HMta1kq+(3c+2%brllC7VUQHWYo*
z&$o#nZ7AxHAG{`Vv%#FNEW3YmGE%bLxf8#(^xAu$eWhpfj(tknm4S?%Z?Pb^&(WBK
zykFjl{ojkocjI91N50;kDcdw<#k^SG3$am#n?+f+uzKE8q
z1WGMDukg5{QOn?6k@rOE3yobhDBrR{7R$$FQ>{?Se?F0^^L9Spi%GJEN@x9wo!e?P
zvfta|RBugAvNtxZc*6AHU2nk;N%5o_kk{vr7+=cgU&q;4$E?Qs@@EF^qCHq!^2u0r
zrXa?azrxrOv`1~i*iybOJ5h`+<$JTo>F>?*s-A(drFdeRk8#bTv_*xUm=={Us=2*C
zX)Ka2c5mv)DS@sGg?{_hXdiSWw6>$jkIHH&^vt(MkKw!DL$6+YQbvGpfe&td@cSp_
z)>^xV_VsPw^v3fK-g@QyV|>y9nH|Pryb^(7K<~uO#3E5FD3kaw$SGO~=s`S)9HAo?
z+rvZzffyA*gsQn>45}F)FHR0G%XE|r#`3xn5)sflTe%mni+qNfduibr_d>Kb2~k@s
zqPHeg5e*QUYOWZA>cYoMk;99?y|B3z3+775Kmd{;pSYJ#-pdE4xtA6?ajziv3UV(*
zR!xZN8z3gtTrmdGzK;RVVUVZO5o!?@yvwlQ-Cf4dwU&?k+Rwz(*-2~o2**9q3`ErZ
znCd>5%FjOOK0em*_TdnP@oQ^T==Wdt;uUw|U7>old-G4`PAN+E#%H&j-u2EhPnS|5
zWGB=5r(o-5P2Dz04Q!ogS-vNczdT+N1wpuQfDef5JI@<}%zy_0+tZ;+rDG9&0g@GB_dhDdJo(`o&5yk!N5
zIbARP2~0wgcQKy#O7bqoF^Ngu#aP}}$;Tl0jKpZ(WXVVIP6~P@?~p&O3teBAEu&56vapJH|%KB$_9b8$*NEbjY-R7H!;W2indt5!m4oP*du
z?$+M`Fy~_ZI1BpY9K_=BPCQLGIpm<`I|AlZq@(8h0w#;(bns{t*UrfyWuGP
zX3RhHx#Zb#rVEk!_j5?SEYXr@hlDAnzke@uo*e?Gm~Q{QoEn>FSO3c$*lI_?U#N}J
zFZoR475|`s8(OJ>srVn|EEeamQUlXz#Xl(EvXvTSnu1;Ym-9PX{#Tw0zoa~U+COM~
z<-NfRsMPQe9AkWLN)7*@@s;-m50})CYCJCf%Xw5}jKve=L7xkci#+|X$3xc>qU#ya
z^_1v(PQ+Jfhj>zyt+^7|@}uoH#D+s?fh!|I6AcUR3+o+4#4TcNu>~~pBJ+i1@$`sE
zJIlSpV8e%f`x#$