diff --git a/.github/workflows/CoverallsReport.yml b/.github/workflows/CoverallsReport.yml new file mode 100644 index 00000000..40a1b0fc --- /dev/null +++ b/.github/workflows/CoverallsReport.yml @@ -0,0 +1,31 @@ +# This workflow will build a Java project with Gradle +# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-gradle + +name: Coveralls Report + +on: + push: + branches: [ main ] + +jobs: + build: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + - name: Set up JDK 17 + uses: actions/setup-java@v2 + with: + java-version: '17' + distribution: 'adopt' + - name: Grant execute permission for gradlew + run: chmod +x gradlew + - name: Build with Gradle + env: + IDEA_VERSION: 2024.1 + run: xvfb-run ./gradlew test + - name: Coveralls + uses: coverallsapp/github-action@v2.3.0 + with: + github-token: ${{ secrets.COVERALLS_TOKEN }} diff --git a/.github/workflows/CronEAP.yml b/.github/workflows/CronEAP.yml index faa2a237..c600f92f 100644 --- a/.github/workflows/CronEAP.yml +++ b/.github/workflows/CronEAP.yml @@ -23,6 +23,7 @@ jobs: run: chmod +x gradlew - name: Build with Gradle env: - IDEA_VERSION: LATEST-EAP-SNAPSHOT + IDEA_PLATFORM: IC + IDEA_VERSION: 2024.1 IDEA_SOURCES: false - run: xvfb-run ./gradlew test + run: xvfb-run ./gradlew verifyPlugin diff --git a/.github/workflows/PublishStable.yml b/.github/workflows/PublishStable.yml index 14157a90..297e5846 100644 --- a/.github/workflows/PublishStable.yml +++ b/.github/workflows/PublishStable.yml @@ -16,13 +16,7 @@ jobs: fail-fast: false matrix: include: - - ideaVersion: 2022.2.1 - - ideaVersion: 2022.3.1 - - ideaVersion: 2023.1.1 - - ideaVersion: 2023.2.1 - - ideaVersion: 2023.3.1 - - ideaVersion: 2024.1.1 - - ideaVersion: LATEST-EAP-SNAPSHOT + - ideaVersion: 2024.1 steps: - uses: actions/checkout@v2 diff --git a/.github/workflows/PullRequest.yml b/.github/workflows/PullRequest.yml index 4e339367..2a2442bf 100644 --- a/.github/workflows/PullRequest.yml +++ b/.github/workflows/PullRequest.yml @@ -16,12 +16,10 @@ jobs: fail-fast: false matrix: include: - - ideaVersion: 2022.2.3 - ideaType: PY - - ideaVersion: 2023.3.1 - ideaType: PS + - ideaVersion: 2024.1.1 + ideaPlatform: IC - ideaVersion: 2024.2.1 - ideaType: IC + ideaPlatform: PY steps: - uses: actions/checkout@v2 @@ -35,6 +33,6 @@ jobs: - name: Build with Gradle env: IDEA_VERSION: ${{ matrix.ideaVersion }} - IDEA_TYPE: ${{ matrix.ideaType }} + IDEA_PLATFORM: ${{ matrix.ideaPlatform }} IDEA_SOURCES: false run: xvfb-run ./gradlew test diff --git a/.gitignore b/.gitignore index fbbd7567..b180e6de 100644 --- a/.gitignore +++ b/.gitignore @@ -22,6 +22,7 @@ hs_err_pid* *.iml +.intellijPlatform .idea/ .gradle/ out/ diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 00000000..fe7a0972 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,696 @@ +# Changelog + +## Unreleased + +### Added + +### Changed + +### Removed + +### Fixed + +## [4.0.0] - Oct 07, 2024 + +### Added +- Tabularize formatting is back! + +### Changed +- Text editor is shown first by default + +## 3.4.0 - Aug 10, 2024 + +### Fixed + +- ActionUpdateThread.OLD_EDT is deprecated and going to be removed soon +- Cannot create class CsvEditorSettingsProvider + +## 3.3.0 - Feb 24, 2024 + +### Fixed + +- Update gradle build +- PluginException: xxx ms to call on EDT CsvChangeSeparatorActionGroup#update@EditorPopup #401 +- AlreadyDisposedException: Already disposed #639 +- Exceptions occurred on invoking the intention 'Unquote' on a copy of the file #670 #816 + +### Fixed + +- StringIndexOutOfBoundsException: begin 0, end -1, length 5993 #801 +- Unhandled exception in [CoroutineName(PsiAwareFileEditorManagerImpl)] #666 + +## 3.2.3 - Nov 05, 2023 + +### Added + +- Prevent github issue submitter spam + +### Fixed + +- Improve issue duplicate finder + +## 3.2.2 - Oct 14, 2023 + +### Fixed + +- NullPointerException: Cannot invoke "getSelectedColumn()" because "tblEditor" is null #519 +- IllegalStateException: Attempt to modify PSI for non-committed Document! #516 + +- StringIndexOutOfBoundsException: begin 0, end -1, length 5995 #511 +- ArrayIndexOutOfBoundsException: 12 >= 12 #482 + +## 3.2.1 - Jul 08, 2023 + +### Added + +- add support for upcoming IntelliJ version 2023.2.* + +### Fixed + +- broken tests + +## 3.2.0 - May 12, 2023 + +### Fixed + +- Argument for @NotNull parameter 'tableEditor' of CsvTableActions.adjustColumnWidths must not be null #431 +- NullPointerException #429 + +- Comment handling breaking in table editor #451 + +### Added + +- prevent error report flooding + +## 3.1.0 - Feb 27, 2023 + +### Fixed + +- NullPointerException: Cannot invoke "URL.toExternalForm()" because "location" is null #424 +- java.lang.ArrayIndexOutOfBoundsException: 0 >= 0 #418 + +## 3.0.3 - Feb 10, 2023 + +### Fixed + +- Argument for @NotNull parameter 'anchor' of CsvPsiTreeUpdater.appendField must not be null #392 +- ArrayIndexOutOfBoundsException: 8 >= 8 #396 + +- catch unreasonable exception when retrieving service #410 +- NullPointerException: Cannot invoke "CsvTableEditor.getActions()" because the return value of "CsvTableEditorActions.getTableEditor(AnActionEvent)" is null #394 + +### Added + +- 358 ms to call on EDT CsvChangeSeparatorActionGroup#update@EditorPopup #401 +## 3.0.2 - Dec 15, 2022 + +### Fixed + +- Detected bulk mode status update from DocumentBulkUpdateListener #384 +- Argument for @NotNull parameter 'parent' of PsiHelper.getNthChildOfType must not be null #372 + +- Argument for @NotNull parameter 'element' of PsiHelper.getSiblingOfType must not be null #375 +- Cannot invoke "Document.getText()" because "document" is null #388 + +### Fixed + +- Cannot invoke "PsiFile.getProject()" because the return value of "CsvPsiTreeUpdater.getPsiFile()" is null #378 +- Argument for @NotNull parameter 'replacement' of CsvPsiTreeUpdater$ReplacePsiAction. must not be null #380 + +- provide project parameter for opening link +- Cannot invoke "Document.insertString(int, java.lang.CharSequence)" because "document" is null #386 + +### Fixed + +- first extension sanity check + +## 3.0.1 - Nov 12, 2022 + +### Fixed + +- cannot init component state (componentName=CsvFileAttributes) #359 +- cannot invoke "add(Object)" because "this.myUncommittedActions" is null #361 +- cannot invoke "createNotification(...)" because "notificationGroup" is null #362 +- cannot invoke "getManager()" because the return value of "getPsiFile()" is null #363 + +### Fixed + +- image in plugin description +- plugin update restart + +## 3.0.0 - Nov 09, 2022 + +MAJOR UPDATE VERSION 3 + +General +------- + +- renamed plugin to 'CSV Editor' +- fixed all compatibility issues with respect to IntelliJ platform 2022.* +- rework language lexer +- simplification of formatter & remove 'Tabularize' formatting +- remove slow & (useless) structure view +- adjusted setting dialogs +- integrated GitHub issue reporter in case plugin raises an exception +- removed TSV & PSV language, only CSV language but different filetypes + +Table Editor +------------ + +- use PSI Tree as data source +- integrate with native IntelliJ IDE document change handler (e.g. for undo/redo) +- simplify UI/UX & remove header toolbar +- support showing and editing comment lines +- auto adjust row width +- manually adjust row height via dragging +- always use first line for header/column text + +## 2.21.0 - Oct 26, 2022 + +### Changed + +- support comments in fast lexer + +### Changed + +- reworked (rainbow) coloring + +### Changed + +- avoid formatting while typing + +### Changed + +- limit column highlighting to 1000 entries around caret + +### Changed + +- limit calculation and buffering of CSV column info data + +### Fixed + +- short comments + +## 2.20.0 - Oct 24, 2022 + +### Fixed + +- Cannot load from object array because "data" is null #335 #337 + +- Empty comment indicator + +### Added + +- Support fast lexing for default comments +- Simplify & unify both lexers + +## 2.19.0 - Jul 24, 2022 + +### Added + +- Ability to auto-reload changed files #316 + +### Fixed + +- NullPointerException when applying editor state #327 +- additional disposed checks + +## 2.18.2 - Dec 14, 2021 + +### Fixed + +- java.lang.NullPointerException #320 +- Exception when Show info balloon is not selected #318 + +## 2.18.1 - Nov 04, 2021 + +### Fixed + +- set require-restart attribute + +### Added + +- Ability to open urls from IntelliJ CSV view #312 + +## 2.18.0 - Oct 21, 2021 + +NOTE: Minimum version requirement changed to v2020.1 and newer + +### Fixed + +- Show diff opens an empty window #306 + +## 2.17.1 - Jun 30, 2021 + +### Fixed + +- Plugin not showing column at caret Ctr+F1 #300 +- Past few versions of this plugin don't show colors #298 + +## 2.17.0 - Jun 21, 2021 + +### Added + +- Plugin name ### Changed +- CSV + +### Fixed + +- Null pointer when using csv rendering in Markdown documentation #292 +- NullPointerException on startup #295 + +## 2.16.4 - May 27, 2021 + +### Fixed + +- fully prevent calculateDistributedColumnWidth on erroneous CSV #283 +- Memory leak of PsiFile #284 + +## 2.16.3 - Apr 24, 2021 + +### Fixed + +- Exception in CSV plugin when using with remote SSH host #279 + +## 2.16.2 - Apr 21, 2021 + +### Fixed + +- Editor complaining about crashes on PyCharm 2021.1 #274 + +## 2.16.1 - Apr 20, 2021 + +### Fixed + +- keep existing & correct entries in CSV attributes map + +## 2.16.0 - Apr 18, 2021 + +### Added + +- Ability to split on ASCII separator character \x1e #267 +- "General" settings group + +### Fixed + +- Lower annotator severity to not appear as problem +- Prevent non CSV entries in CSV attributes map #268 + +## 2.15.1 - Mar 25, 2021 + +### Fixed + +- Rainbow Values no longer works #265 + +## 2.15.0 - Mar 23, 2021 + +### Added + +- Default value separator #259 + +### Fixed + +- Removal of deprecated function usage + +## 2.14.4 - Feb 14, 2021 + +### Added + +- Auto detect value separator (by count) + +## 2.14.3 - Oct 10, 2020 + +### Added + +- Added default "Header row fixed" setting +- Support "Comment with line comment" #247 + +### Fixed + +- "Value coloring" change not applied to open files + +## 2.14.2 - Sep 17, 2020 + +### Fixed + +- Settings reset every update #245 +- Removing comment indicator causes parsing errors + +## 2.14.1 - Aug 14, 2020 + +### Fixed + +- Performance for indexing large CSV files #239 + +## 2.14.0 - Aug 04, 2020 + +### Added + +- Predefined column colors (Rainbow-style) +- Enhanced color scheme switch + +### Added + +- Table Editor coloring + +## 2.13.0 - Jul 20, 2020 + +### Added + +- Support for customizable line comments ('#' indicates a line comment per default) + +## 2.12.0 - Jun 14, 2020 + +### Added + +- flexible settings format for value separator & escape character + +### Fixed + +- no accessors for class CsvValueSeparator #221 +- Default Value Separator get frequently reset to comma, changes only applied after restart #222 + +## 2.11.1 - May 9, 2020 + +### Fixed + +- Memory issues and freezes after updating #204 + +## 2.11.0 - May 8, 2020 + +### Added + +- Adding custom separator #177 + +## 2.10.0 - Apr 19, 2020 + +### Fixed + +- resolve CSV/TSV file type conflict for versions 2020.* with Database plugin + +## 2.9.3 - Mar 08, 2020 + +### Added + +- option to keep trailing spaces for CSV/TSV/PSV files + +### Fixed + +- consider escape char inside quotes as escaped text + +## 2.9.2 - Feb 24, 2020 + +### Fixed + +- Backslash in text is considered a special character #184 +- NullPointerException thrown when trying to view CSV as table #185 + +## 2.9.1 - Feb 15, 2020 + +### Fixed + +- update failed for AnAction #181 +- selection indicator for default separator action + +## 2.9.0 - Feb 07, 2020 + +### Added + +- customizable escape character #159 +- value separator setting moved from 'Code Style' to 'General' + +### Added + +- lots of cleanup & rework + +## 2.8.2 - Jan 22, 2020 + +### Fixed + +- horizontal scrolling within table editor #169 + +## 2.8.1 - Nov 22, 2019 + +### Fixed + +- vertical scrolling within table editor #164 + +## 2.8.0 - Oct 12, 2019 + +### Added + +- improved font handling in table editor #122 + +### Fixed + +- proper font handling in balloon tooltips + +## 2.7.1 - Sep 26, 2019 + +Support for IDE v192.* + +## 2.7.0 - Sep 16, 2019 + +### Added + +- add separator selection to table editor #140 + +### Fixed + +- coloring of table cells (e.g. selection mode) +- enter edit mode via keyboard (e.g. ENTER key in cell) + +## 2.6.4 - Aug 30, 2019 + +### Fixed + +- scrollable table cells +- auto cell height computation + +## 2.6.3 - Aug 25, 2019 + +### Fixed + +- Index out of bound error on multi line clear cells #151 + +## 2.6.2 - Aug 09, 2019 + +### Fixed + +- AssertionError: Already disposed: Project (Disposed) #147 +- No fallback font used in table editor #145 + +## 2.6.1 - Aug 01, 2019 + +### Added + +- plugin logo icons added (Thx to FineVisuals for support) + +## 2.6.0 - Jul 18, 2019 + +### Added + +- Table column width calculation and adjustment based on content + +## 2.5.1 - Jun 25, 2019 + +### Fixed + +- ConcurrentModificationException in MultiLineCellRenderer + +## 2.5.0 - May 16, 2019 + +### Added + +- PSV file support + +### Fixed + +- NullPointerException in StorageHelper class + +## 2.4.0 - May 11, 2019 + +### Added + +- option to keep/ignore a linebreak at the end of a file (table editor) +- improved change detection of table editor to avoid overwriting original text representation without editing any values + +### Added + +- file based value separator (e.g. ',' or ';') + +## 2.3.1 - Mar 31, 2019 + +### Added + +- use default color scheme & font for table editor as well + +### Fixed + +- ConcurrentModificationException tackled (table editor) + +## 2.3.0 - Mar 04, 2019 + +### Added + +- Zoom table-editor cells with Ctrl+Mouse Wheel (contribution by @royqh1979) + +### Fixed + +- Scratches are now recognised as CSV +- Several issues resolved by reworking column/row editing + +## 2.2.1 - Jan 26, 2019 + +### Fixed + +- ArrayIndexOutOfBoundsException when opening a CSV file with an unexpected separator (table editor) +- ConcurrentModificationException during event handling (table editor) + +## 2.2.0 - Jan 13, 2019 + +### Added + +- option to fixate first row as header (table editor) +- row numbers (table editor) + +### Fixed + +- exception when clicking to right of populated columns (table editor) +- keep leading/trailing whitespaces (table editor) + +## 2.1.0 - Jan 01, 2019 + +### Added + +- support column highlighting for table editor +- support all kind of text attributes for column highlighting + +### Added + +- table editor values not longer enforced to be quoted on save (customizable) + +### Fixed + +- prevent backspace/delete erasing cell value while editing (table editor) + +## 2.0.2 - Dec 16, 2018 + +### Fixed + +- top and bottom panel scrollable & add column/row buttons removed + +## 2.0.1 - Dec 02, 2018 + +### Fixed + +- disabling table editor for large files +- applying row height for newly opened files + +## 2.0.0 - Nov 20, 2018 + +### Added + +- CSV/TSV table editor!!! + +## 1.9.1 - Oct 12, 2018 + +### Fixed + +- reading/writing CSV editor states +- tooltip for tab separator if disabled + +## 1.9.0 - Oct 01, 2018 + +### Added + +- CSV/TSV editor settings (File > Settings > General > CSV/TSV Editor) +- TAB (separator) highlighting + +### Added + +- Enable/disable balloon info +- Soft wrap settings specific for CSV/TSV + +## 1.8.2 - Sep 20, 2018 + +### Added + +- Customizable column coloring (File > Settings > Editor > Color Scheme > CSV) + +## 1.8.1 - Aug 16, 2018 + +### Added + +- East Asian full-width character support for 'Tabularize' (optional) - disabled by default due to lower performance + +## 1.8.0 - Jul 05, 2018 + +### Added + +- Custom 'Wrapping' settings +- Column highlighter takes whitespaces into account +- several code & performance improvements + +### Changed + +- Column highlighting only happens on selection + +### Fixed + +- CSV column info tooltip trumps spellchecker tooltip (but keeps the visualization of a typo) +- Show tooltip even when caret is at the last position withing the CSV file +- Support for suppressing inspections not relevant for CSV (e.g. 'Problematic Whitespace') +- Structure View: proper handling of elements (instead of endless loading) + +## 1.7.0 - Jun 19, 2018 + +### Added + +- Annotated values: tooltip shows the value itself, the header and the column index +- Active column (caret position) is colored differently +- several code & performance improvements + +### Fixed + +- 'Add separator' inspection is adding correct separator (e.g. tabs in TSV files) + +## 1.6.1 - May 11, 2018 + +### Added + +- New icons + +## 1.6.0 - Apr 02, 2018 + +### Added + +- TSV file support +TSV files a recognized as such but treated as a variant of CSV files, the same syntax highlighting and code style settings are applied. + +### Added + +- tab (↹) and pipe (|) as separators added +- spellchecker enabled + +### Added + +- it was necessary to increase the minimum IDE version from 2016.1.1 to 2016.3.2 due to a required fix in the formatting code. Previous versions of the plugin can still be downloaded directly from Jetbrains Plugin Repository. + +## 1.5.1 - Mar 21, 2018 + +### Added + +- intentions to shift a whole column left/right +(includes bugfix for breaking intention functionality on previous IDE versions) + +## 1.5.0 - Feb 10, 2018 + +### Added + +- intentions to shift a whole column left/right + +## 1.4.1 - Jan 19, 2018 + +Handle tabs as 1-length character - fixes 'Tabularize' for csv files with tabs +Fix default settings initialization diff --git a/README.md b/README.md index 4dba65a7..53f9dbeb 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ [![Plugin version](https://img.shields.io/jetbrains/plugin/d/10037-csv-plugin.svg)](https://plugins.jetbrains.com/plugin/10037-csv-plugin) [![Build Action Status](https://github.com/SeeSharpSoft/intellij-csv-validator/actions/workflows/CIBuild.yml/badge.svg)](https://github.com/SeeSharpSoft/intellij-csv-validator/actions) [![EAP Status](https://github.com/SeeSharpSoft/intellij-csv-validator/actions/workflows/CronEAP.yml/badge.svg)](https://github.com/SeeSharpSoft/intellij-csv-validator/actions) -[![Coverage Status](https://coveralls.io/repos/github/SeeSharpSoft/intellij-csv-validator/badge.svg?branch=master)](https://coveralls.io/github/SeeSharpSoft/intellij-csv-validator?branch=main) +[![Coverage Status](https://coveralls.io/repos/github/SeeSharpSoft/intellij-csv-validator/badge.svg?branch=main)](https://coveralls.io/github/SeeSharpSoft/intellij-csv-validator?branch=main) [![Known Vulnerabilities](https://snyk.io/test/github/SeeSharpSoft/intellij-csv-validator/badge.svg?targetFile=build.gradle)](https://snyk.io/test/github/SeeSharpSoft/intellij-csv-validator?targetFile=build.gradle) [![Codacy Badge](https://app.codacy.com/project/badge/Grade/97769359388e44bfb7101346d510fccf)](https://www.codacy.com/gh/SeeSharpSoft/intellij-csv-validator/dashboard?utm_source=github.com&utm_medium=referral&utm_content=SeeSharpSoft/intellij-csv-validator&utm_campaign=Badge_Grade) @@ -17,10 +17,9 @@ This enables default editor features like syntax validation, highlighting and in ## Features - CSV/TSV/PSV file detection -- flexible Table Editor - customizable text editor - customizable column coloring (rainbow coloring) -- customizable line comment +- flexible table editor - syntax validation - syntax highlighting (customizable) - content formatting (customizable) @@ -31,13 +30,15 @@ This enables default editor features like syntax validation, highlighting and in - support for line comments (# per default, customizable) - tab (↹) separator highlighting -(see [full changelog](./CHANGELOG)) +(see [full changelog](./CHANGELOG.md)) -**!!Please note!!** +**NOTE** -For release 3.*, the plugin got a major overhaul focusing on performance and table editor usage. -Some features and settings were removed for simplification and consistency. -The previous version (incl README) can still be accessed [here](https://github.com/SeeSharpSoft/intellij-csv-validator/tree/release_2) and installed manually (see section [Installation](https://github.com/SeeSharpSoft/intellij-csv-validator#installation)). +Release 4.* is focusing on text-editor features. +Text-editor is the default editor (again). +It requires IntelliJ platform version 2024.1 or newer. + +Previous versions (incl README) can still be accessed and installed manually (see section [Installation](https://github.com/SeeSharpSoft/intellij-csv-validator#installation)). ### Syntax parser & validation @@ -273,6 +274,53 @@ Annasusanna, Amsterdam, 1 Ben , Berlin , 2 ``` +##### Tabularize + +Separator settings can be used in combination with Tabularize, while trimming options are ignored completely. +All options in this section only show effect if `Format as table` is enabled. + +_Format as table_ + +Adds/removes leading and trailing whitespaces to format the text as a human-readable table. + +Note: Formatting a CSV file alters its values, and can conflict with the use of visual table editor. + +``` +"name ","city ","position" +Annasusanna,Amsterdam,1 +Ben ,Berlin ,2 +``` + +_Keep quoted value as is_ + +Note: With this option, values in quotes are kept intact. +Additionally activating `Enforce value quoting` for the table editor enables seamless editing and formatting CSV in either text or table mode. + +``` +"name" ,"city" ,"position" +Annasusanna,Amsterdam,1 +Ben ,Berlin ,2 +``` + +_Align right_ + +``` +" name"," city","position" +Annasusanna,Amsterdam, 1 + Ben, Berlin, 2 +``` + +_Enhanced width calculation_ + +Calculates the width of a text based on each characters width, and taking wide characters into account. +This can have a noticeable performance impact on large files. + +``` +"name ","city ","position" +Annasusanna,Amsterdam,1 +汉字宋 ,Berlin ,2 +``` + ##### Trimming Trimming can be combined with _Space before/after separator_. diff --git a/build.gradle b/build.gradle deleted file mode 100644 index 4f6aee57..00000000 --- a/build.gradle +++ /dev/null @@ -1,139 +0,0 @@ -plugins { - // https://github.com/JetBrains/gradle-intellij-plugin - id 'org.jetbrains.intellij' version '1.17.2' - id 'jacoco' - id 'com.github.kt3k.coveralls' version '2.8.4' - id 'com.github.ManifestClasspath' version '0.1.0-RELEASE' - // https://github.com/JetBrains/gradle-grammar-kit-plugin - id 'org.jetbrains.grammarkit' version '2022.3.2.2' -} - -group 'net.seesharpsoft.intellij.plugins' - -apply plugin: 'java' -project.sourceCompatibility = JavaVersion.VERSION_17 -project.targetCompatibility = JavaVersion.VERSION_17 -tasks.withType(JavaCompile).configureEach { - options.encoding = 'UTF-8' - options.compilerArgs << "-Xlint:deprecation" -} -repositories { - mavenCentral() -} -dependencies { - implementation 'net.seesharpsoft.sharping:sharping-commons:0.21.0' - compileOnly 'org.apache.ant:ant:1.10.13' - testImplementation 'org.mockito:mockito-core:4.8.1' -} -sourceSets { - main { - java { - srcDirs = ['src/main/java', 'src/gen/java'] - } - resources { - srcDirs = ['src/main/resources'] - } - } - test { - java { - srcDirs = ['src/test/java'] - } - resources { - srcDirs = ['src/test/resources'] - } - } -} - -apply plugin: 'idea' -idea { - project { - jdkName = JavaVersion.VERSION_17 - languageLevel = JavaVersion.VERSION_17 - vcs = 'Git' - } - module { - generatedSourceDirs += file('gen') - } -} - -var final EAP_VERSION = 'LATEST-EAP-SNAPSHOT' -var final EAP_BUILD = '242' - -var final LATEST_SUPPORTED_VERSION = '2024.1.5' //EAP_VERSION - -// IDE version - https://www.jetbrains.com/intellij-repository/releases -var idea_version = System.getenv().getOrDefault('IDEA_VERSION', LATEST_SUPPORTED_VERSION) -var build_version = idea_version == EAP_VERSION ? EAP_BUILD : idea_version.substring(2, 4) + idea_version.charAt(5) // extract e.g. '221' from '2022.1.1' - -version '3.4.0-' + build_version - -apply plugin: 'org.jetbrains.intellij' -intellij { - version = idea_version > LATEST_SUPPORTED_VERSION || idea_version == EAP_VERSION ? LATEST_SUPPORTED_VERSION : idea_version - type = System.getenv().getOrDefault('IDEA_TYPE', 'IC') - pluginName = 'CSVEditor' - updateSinceUntilBuild = true - sameSinceUntilBuild = true - downloadSources = Boolean.parseBoolean(System.getenv().getOrDefault('IDEA_SOURCES', "true")) - - plugins = [ - 'Git4Idea', - 'org.jetbrains.plugins.github' - ] -} -patchPluginXml { - // see http://www.jetbrains.org/intellij/sdk/docs/basics/getting_started/build_number_ranges.html for description - sinceBuild = build_version - - changeNotes = """
-CHORE: Update gradle build
-FIX: ActionUpdateThread.OLD_EDT is deprecated and going to be removed soon
-FIX: Cannot create class CsvEditorSettingsProvider
-
""" -} -publishPlugin { - token = System.getenv().getOrDefault('JI_TOKEN', '') - channels = [System.getenv().getOrDefault('JI_CHANNELS', 'Testing')] -} - -test { - jacoco { - enabled = true - } - testLogging { - exceptionFormat = 'full' - showStandardStreams = true - } - // see https://youtrack.jetbrains.com/issue/IDEA-278926 - scanForTestClasses = false - include "**/*Test.class" -} - -grammarKit { - // version of IntelliJ patched JFlex - https://bintray.com/jetbrains/intellij-third-party-dependencies/jflex - jflexRelease = '1.7.0-1' - // tag or short commit hash of Grammar-Kit to use - https://github.com/JetBrains/Grammar-Kit - // USE DEFAULT - // grammarKitRelease = System.getenv().getOrDefault('GRAMMAR_KIT_VERSION', '2022.3.2') -} - -tasks.named("generateParser").configure { - sourceFile = file('src/main/java/net/seesharpsoft/intellij/plugins/csv/Csv.bnf') - targetRootOutputDir = file('src/gen/java') - pathToParser = 'net/seesharpsoft/intellij/plugins/csv/parser/CsvParser.java' - pathToPsiRoot = 'net/seesharpsoft/intellij/plugins/csv/psi' - purgeOldFiles = true -} - -tasks.named("generateLexer").configure { - dependsOn generateParser - - sourceFile = file('src/main/java/net/seesharpsoft/intellij/plugins/csv/CsvLexer.flex') - targetOutputDir = file('src/gen/java/net/seesharpsoft/intellij/plugins/csv') - targetClass = 'CsvLexer' - purgeOldFiles = false -} - -compileJava { - dependsOn generateLexer -} diff --git a/build.gradle.kts b/build.gradle.kts new file mode 100644 index 00000000..ace5c9f4 --- /dev/null +++ b/build.gradle.kts @@ -0,0 +1,162 @@ +import org.gradle.internal.impldep.org.testng.reporters.XMLUtils +import org.jetbrains.changelog.Changelog +import org.jetbrains.intellij.platform.gradle.TestFrameworkType +import org.jetbrains.intellij.platform.gradle.extensions.intellijPlatform + +/** + * Shortcut for project.findProperty(key).toString(). + */ +fun properties(key: String) = project.findProperty(key).toString() +/** + * Shortcut for System.getenv().getOrDefault(key, default).toString(). + */ +fun environment(key: String, default: String) = System.getenv().getOrDefault(key, default).toString() + +version = properties("pluginVersion") + +plugins { + java + id("idea") + id("jacoco") + id("com.github.kt3k.coveralls") version "2.12.0" + id("org.jetbrains.intellij.platform") version "2.1.0" + id("org.jetbrains.changelog") version "2.2.0" + id("org.jetbrains.grammarkit") version "2022.3.2.2" +} + +repositories { + mavenLocal() + mavenCentral() + + intellijPlatform { + snapshots() + defaultRepositories() + } +} + +java { + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 +} + +sourceSets { + main { + java { + srcDirs("src/main/java", "src/main/gen") + } + resources { + srcDirs("src/main/resources") + } + } + test { + java { + srcDirs("src/test/java") + } + resources { + srcDirs("src/test/resources") + } + } +} + +val platform = environment("IDEA_PLATFORM", properties("platform")) +val platformVersion = environment("IDEA_VERSION", properties("platformVersion")) + +dependencies { + implementation("net.seesharpsoft.sharping:sharping-commons:0.21.0") + + intellijPlatform { + create(platform, platformVersion) + + bundledPlugins(properties("platformBundledPlugins").split(',')) + + instrumentationTools() + pluginVerifier() + zipSigner() + + jetbrainsRuntime() + testFramework(TestFrameworkType.Platform) + testFramework(TestFrameworkType.JUnit5) + } + + testImplementation("org.mockito:mockito-core:5.14.1") + testImplementation("junit:junit:4.13.2") + testImplementation("org.opentest4j:opentest4j:1.3.0") +} + +intellijPlatform { + pluginConfiguration { + id = properties("pluginId") + name = properties("pluginName") + version = project.version as String + ideaVersion { + sinceBuild = properties("pluginSinceBuild") + untilBuild = provider { null } + } + changeNotes.set(provider { changelog.renderItem(changelog.get(project.version as String), Changelog.OutputType.HTML) }) + } + + publishing { + token.set(environment("JI_TOKEN", "")) + channels.set(listOf(environment("JI_CHANNELS", "Testing"))) + } +} + +changelog { + val projectVersion = project.version as String + version.set(projectVersion) + header.set("[$projectVersion] - ${org.jetbrains.changelog.date()}") + groups.set(listOf("Added", "Changed", "Removed", "Fixed")) +} + +tasks { + generateParser { + sourceFile.set(file("src/main/java/net/seesharpsoft/intellij/plugins/csv/Csv.bnf")) + pathToParser.set("/net/seesharpsoft/intellij/plugins/csv/parser/CsvParser.java") + pathToPsiRoot.set("/net/seesharpsoft/intellij/plugins/csv/psi") + targetRootOutputDir.set(file("src/main/gen")) + purgeOldFiles.set(true) + } + generateLexer { + sourceFile.set(file("src/main/java/net/seesharpsoft/intellij/plugins/csv/CsvLexer.flex")) + targetOutputDir.set(file("src/main/gen/net/seesharpsoft/intellij/plugins/csv")) + targetFile("CsvLexer") + purgeOldFiles.set(false) + + dependsOn(generateParser) + } + compileJava { + dependsOn(generateLexer) + } + + processResources { + duplicatesStrategy = DuplicatesStrategy.WARN + } + + processTestResources { + duplicatesStrategy = DuplicatesStrategy.WARN + } + + test { + configure { + isEnabled = true + isIncludeNoLocationClasses = true + excludes = listOf("jdk.internal.*") + } + + finalizedBy(jacocoTestReport) + } + + jacocoTestReport { + dependsOn(test) + classDirectories.setFrom(instrumentCode) + reports { + xml.required = true + html.required = true + } + } + + jacocoTestCoverageVerification { + dependsOn(test) + classDirectories.setFrom(instrumentCode) + } +} diff --git a/docs/codestyle.png b/docs/codestyle.png index 4099874e..4d66fbd0 100644 Binary files a/docs/codestyle.png and b/docs/codestyle.png differ diff --git a/gradle.properties b/gradle.properties index ead08298..9e830036 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,5 +2,21 @@ # https://www.jetbrains.com/intellij-repository/releases # https://www.jetbrains.com/intellij-repository/snapshots -name='CSV Editor' -java.system.class.loader=com.intellij.util.lang.PathClassLoader +pluginName=CSV Editor +pluginId=net.seesharpsoft.intellij.plugins.csv +pluginVersion=4.0.0 + +pluginSinceBuild=241 + +platform = IC +# LATEST-EAP-SNAPSHOT +platformVersion = 2024.1.1 + +platformBundledPlugins=Git4Idea,org.jetbrains.plugins.github + +org.gradle.parallel=true + +# Opt-out flag for bundling Kotlin standard library. +# See https://plugins.jetbrains.com/docs/intellij/kotlin.html#kotlin-standard-library for details. +kotlin.stdlib.default.dependency=false + diff --git a/src/main/java/net/seesharpsoft/intellij/formatting/DummyFormattingModel.java b/src/main/java/net/seesharpsoft/intellij/formatting/DummyFormattingModel.java new file mode 100644 index 00000000..c69225e4 --- /dev/null +++ b/src/main/java/net/seesharpsoft/intellij/formatting/DummyFormattingModel.java @@ -0,0 +1,106 @@ +package net.seesharpsoft.intellij.formatting; + +import com.intellij.formatting.Block; +import com.intellij.formatting.FormattingDocumentModel; +import com.intellij.formatting.FormattingModel; +import com.intellij.formatting.Spacing; +import com.intellij.lang.ASTNode; +import com.intellij.openapi.editor.Document; +import com.intellij.openapi.util.TextRange; +import com.intellij.psi.PsiElement; +import com.intellij.psi.formatter.FormattingDocumentModelImpl; +import com.intellij.psi.formatter.common.AbstractBlock; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.List; + +final class DummyFormattingModel implements FormattingModel { + private final Block myRootBlock; + private final FormattingDocumentModel myDocumentModel; + + DummyFormattingModel(@NotNull PsiElement element) { + myRootBlock = new AbstractBlock(element.getNode(), null, null) { + @Override + protected List buildChildren() { + return EMPTY; + } + + @Override + public @Nullable Spacing getSpacing(@Nullable Block child1, @NotNull Block child2) { + return null; + } + + @Override + public boolean isLeaf() { + return true; + } + }; + + Document document = FormattingDocumentModelImpl.createOn(element.getContainingFile()).getDocument(); + myDocumentModel = new FormattingDocumentModel() { + @Override + public int getLineNumber(int offset) { + return document.getLineNumber(offset); + } + + @Override + public int getLineStartOffset(int line) { + return document.getLineStartOffset(line); + } + + @Override + public @NotNull CharSequence getText(TextRange textRange) { + return document.getCharsSequence().subSequence(textRange.getStartOffset(), textRange.getEndOffset()); + } + + @Override + public int getTextLength() { + return document.getTextLength(); + } + + @Override + public @NotNull Document getDocument() { + return document; + } + + @Override + public boolean containsWhiteSpaceSymbolsOnly(int startOffset, int endOffset) { + return false; + } + + @Override + public @NotNull CharSequence adjustWhiteSpaceIfNecessary(@NotNull CharSequence whiteSpaceText, + int startOffset, + int endOffset, + ASTNode nodeAfter, boolean changedViaPsi) { + return whiteSpaceText; + } + }; + } + + @Override + public @NotNull Block getRootBlock() { + return myRootBlock; + } + + @Override + public @NotNull FormattingDocumentModel getDocumentModel() { + return myDocumentModel; + } + + @Override + public TextRange replaceWhiteSpace(TextRange textRange, String whiteSpace) { + return textRange; + } + + @Override + public TextRange shiftIndentInsideRange(ASTNode node, TextRange range, int indent) { + return range; + } + + @Override + public void commitChanges() { + // do nothing + } +} diff --git a/src/main/java/net/seesharpsoft/intellij/formatting/ExternalFormattingModelBuilderImpl.java b/src/main/java/net/seesharpsoft/intellij/formatting/ExternalFormattingModelBuilderImpl.java new file mode 100644 index 00000000..88172943 --- /dev/null +++ b/src/main/java/net/seesharpsoft/intellij/formatting/ExternalFormattingModelBuilderImpl.java @@ -0,0 +1,24 @@ +package net.seesharpsoft.intellij.formatting; + +import com.intellij.formatting.*; +import com.intellij.psi.codeStyle.ExternalFormatProcessor; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +public final class ExternalFormattingModelBuilderImpl implements FormattingModelBuilder { + private final @Nullable FormattingModelBuilder myDefaultBuilder; + + public ExternalFormattingModelBuilderImpl(@Nullable FormattingModelBuilder defaultBuilder) { + myDefaultBuilder = defaultBuilder; + } + + @Override + public @NotNull FormattingModel createModel(@NotNull FormattingContext formattingContext) { + if (formattingContext.getFormattingMode() == FormattingMode.REFORMAT && + ExternalFormatProcessor.useExternalFormatter(formattingContext.getContainingFile()) || myDefaultBuilder == null) { + return new DummyFormattingModel(formattingContext.getPsiElement()); + } + return myDefaultBuilder.createModel(formattingContext); + } + +} diff --git a/src/main/java/net/seesharpsoft/intellij/plugins/csv/CsvEscapeCharacter.java b/src/main/java/net/seesharpsoft/intellij/plugins/csv/CsvEscapeCharacter.java index ae12aa1b..262abc08 100644 --- a/src/main/java/net/seesharpsoft/intellij/plugins/csv/CsvEscapeCharacter.java +++ b/src/main/java/net/seesharpsoft/intellij/plugins/csv/CsvEscapeCharacter.java @@ -2,6 +2,7 @@ import com.intellij.util.xmlb.Converter; import com.intellij.xml.util.XmlStringUtil; +import org.jetbrains.annotations.NotNull; import java.util.Objects; import java.util.regex.Pattern; @@ -48,7 +49,7 @@ public static CsvEscapeCharacter create(String character) { } public static class CsvEscapeCharacterConverter extends Converter { - public CsvEscapeCharacter fromString(String value) { + public CsvEscapeCharacter fromString(@NotNull String value) { return CsvEscapeCharacter.create(XmlStringUtil.unescapeIllegalXmlChars(value)); } @@ -100,10 +101,9 @@ public int hashCode() { @Override public boolean equals(Object obj) { - if (obj == null || !(obj instanceof CsvEscapeCharacter)) { + if (!(obj instanceof CsvEscapeCharacter otherObj)) { return false; } - CsvEscapeCharacter otherObj = (CsvEscapeCharacter) obj; return Objects.equals(otherObj.getCharacter(), this.getCharacter()) && Objects.equals(otherObj.isCustom(), this.isCustom()); } diff --git a/src/main/java/net/seesharpsoft/intellij/plugins/csv/CsvGithubIssueSubmitter.java b/src/main/java/net/seesharpsoft/intellij/plugins/csv/CsvGithubIssueSubmitter.java index 292ae47a..dee4ce1b 100644 --- a/src/main/java/net/seesharpsoft/intellij/plugins/csv/CsvGithubIssueSubmitter.java +++ b/src/main/java/net/seesharpsoft/intellij/plugins/csv/CsvGithubIssueSubmitter.java @@ -19,8 +19,10 @@ import org.jetbrains.plugins.github.api.data.GithubResponsePage; import org.jetbrains.plugins.github.api.data.GithubSearchedIssue; import org.jetbrains.plugins.github.api.data.request.GithubRequestPagination; -import org.jetbrains.plugins.github.authentication.GithubAuthenticationManager; +import org.jetbrains.plugins.github.authentication.GHAccountAuthData; +import org.jetbrains.plugins.github.authentication.GHAccountsUtil; import org.jetbrains.plugins.github.authentication.accounts.GithubAccount; +import org.jetbrains.plugins.github.util.GHCompatibilityUtil; import java.awt.*; import java.io.IOException; @@ -38,8 +40,8 @@ public class CsvGithubIssueSubmitter extends ErrorReportSubmitter { public static final String GIT_REPO = "intellij-csv-validator"; public static final GHRepositoryPath GITHUB_FULL_PATH = new GHRepositoryPath(GIT_USER, GIT_REPO); - private static ScheduledFuture recentlySentReport = null; - private static ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor(); + private static ScheduledFuture recentlySentReport = null; + private static final ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor(); private static class CsvGithubSubmitException extends RuntimeException { CsvGithubSubmitException(Throwable exception) { @@ -79,13 +81,18 @@ protected boolean reportWasRecentlySent() { } protected boolean submit(IdeaLoggingEvent event, String additionalInfo, Project project, Consumer consumer) { - GithubAuthenticationManager githubAuthManager = GithubAuthenticationManager.getInstance(); - if (!githubAuthManager.ensureHasAccounts(project)) { - return false; + GithubAccount account = GHAccountsUtil.getSingleOrDefaultAccount(project); + if (account == null) { + GHAccountAuthData accountData = GHAccountsUtil.requestNewAccount(project); + if (accountData == null) { + return false; + } + account = accountData.getAccount(); } - GithubAccount githubAccount = githubAuthManager.getSingleOrDefaultAccount(project); - assert githubAccount != null; - GithubApiRequestExecutor githubExecutor = GithubApiRequestExecutorManager.getInstance().getExecutor(githubAccount, project); + String token = GHCompatibilityUtil.getOrRequestToken(account, project); + if (token == null) return false; + + GithubApiRequestExecutor githubExecutor = GithubApiRequestExecutor.Factory.getInstance().create(token); Task submitTask = new Task.Backgroundable(project, getReportActionText()) { @Override @@ -130,7 +137,7 @@ private void submitToGithub(IdeaLoggingEvent event, } } - protected GithubApiRequest updateExistingIssue(String issueId, String content) throws IOException { + protected GithubApiRequest updateExistingIssue(String issueId, String content) throws IOException { return GithubApiRequests.Repos.Issues.Comments.create( GithubServerPath.DEFAULT_SERVER, GIT_USER, @@ -140,7 +147,7 @@ protected GithubApiRequest updateExistingIssue(String issueId, String content) t ); } - protected GithubApiRequest createNewIssue(String title, String content) throws IOException { + protected GithubApiRequest createNewIssue(String title, String content) throws IOException { return GithubApiRequests.Repos.Issues.create( GithubServerPath.DEFAULT_SERVER, GIT_USER, diff --git a/src/main/java/net/seesharpsoft/intellij/plugins/csv/CsvHelper.java b/src/main/java/net/seesharpsoft/intellij/plugins/csv/CsvHelper.java index 12129458..1da813f8 100644 --- a/src/main/java/net/seesharpsoft/intellij/plugins/csv/CsvHelper.java +++ b/src/main/java/net/seesharpsoft/intellij/plugins/csv/CsvHelper.java @@ -194,10 +194,9 @@ public static int getFieldEndOffset(PsiElement field) { public static VirtualFile getVirtualFile(PsiFile psiFile) { if (psiFile == null) return null; PsiFile original = psiFile.getOriginalFile(); - if (original != null && original != psiFile) return getVirtualFile(psiFile.getOriginalFile()); + if (original != psiFile) return getVirtualFile(psiFile.getOriginalFile()); if (psiFile.getVirtualFile() != null) return psiFile.getVirtualFile(); - if (psiFile.getViewProvider() != null) return psiFile.getViewProvider().getVirtualFile(); - return null; + return psiFile.getViewProvider().getVirtualFile(); } public static Project getProject(PsiFile psiFile) { @@ -240,8 +239,11 @@ public static boolean hasEscapeCharacterAttribute(@NotNull PsiFile psiFile) { return CsvFileAttributes.getInstance(getProject(psiFile)).hasEscapeCharacterAttribute(getProject(psiFile), getVirtualFile(psiFile)); } - public static CsvColumnInfoMap createColumnInfoMap(CsvFile csvFile) { - CsvEscapeCharacter escapeCharacter = getEscapeCharacter(csvFile); + public static CsvColumnInfoMap createColumnInfoMap(PsiFile csvFile) { + return createColumnInfoMap(csvFile, CsvHelper::getMaxTextLineLength); + } + + public static CsvColumnInfoMap createColumnInfoMap(PsiFile csvFile, Function fnMaxTextLength) { Map> columnInfoMap = new HashMap<>(); int row = 0; boolean hasComments = false; @@ -256,9 +258,9 @@ public static CsvColumnInfoMap createColumnInfoMap(CsvFile csvFile) CsvRecord record = (CsvRecord) child; int column = 0; for (CsvField field : record.getFieldList()) { - Integer length = CsvHelper.getMaxTextLineLength(unquoteCsvValue(field.getText(), escapeCharacter)); + int length = fnMaxTextLength.apply(field); if (!columnInfoMap.containsKey(column)) { - columnInfoMap.put(column, new CsvColumnInfo(column, length, row)); + columnInfoMap.put(column, new CsvColumnInfo<>(column, length, row)); } else if (columnInfoMap.get(column).getMaxLength() < length) { columnInfoMap.get(column).setMaxLength(length, row); } @@ -267,7 +269,7 @@ public static CsvColumnInfoMap createColumnInfoMap(CsvFile csvFile) } ++row; } - return new CsvColumnInfoMap(columnInfoMap, PsiTreeUtil.hasErrorElements(csvFile), hasComments); + return new CsvColumnInfoMap<>(columnInfoMap, PsiTreeUtil.hasErrorElements(csvFile), hasComments); } public static String getFieldValue(PsiElement field, CsvEscapeCharacter escapeCharacter) { @@ -285,6 +287,10 @@ public static String getFieldValue(PsiElement field, CsvEscapeCharacter escapeCh .orElse(""); } + public static String unquoteCsvValue(String content) { + return unquoteCsvValue(content, null); + } + public static String unquoteCsvValue(String content, CsvEscapeCharacter escapeCharacter) { if (content == null) { return ""; @@ -293,7 +299,9 @@ public static String unquoteCsvValue(String content, CsvEscapeCharacter escapeCh String trimmedContent = content.trim(); if (trimmedContent.length() > 1 && trimmedContent.startsWith("\"") && trimmedContent.endsWith("\"")) { result = trimmedContent.substring(1, trimmedContent.length() - 1); - result = result.replaceAll("(?:" + escapeCharacter.getRegexPattern() + ")\"", "\""); + if (escapeCharacter != null) { + result = result.replaceAll("(?:" + escapeCharacter.getRegexPattern() + ")\"", "\""); + } } return result; } @@ -336,8 +344,8 @@ public static int getMaxTextLineLength(String text, @NotNull Function input == null ? 0 : input.length()); + public static int getMaxTextLineLength(CsvField field) { + return getMaxTextLineLength(field.getText().strip(), input -> input == null ? 0 : input.length()); } // source: https://www.baeldung.com/java-string-formatting-named-placeholders diff --git a/src/main/java/net/seesharpsoft/intellij/plugins/csv/CsvPlugin.java b/src/main/java/net/seesharpsoft/intellij/plugins/csv/CsvPlugin.java index 6f3c9124..b41bfee8 100644 --- a/src/main/java/net/seesharpsoft/intellij/plugins/csv/CsvPlugin.java +++ b/src/main/java/net/seesharpsoft/intellij/plugins/csv/CsvPlugin.java @@ -6,7 +6,6 @@ import com.intellij.ide.plugins.PluginManagerCore; import com.intellij.notification.*; import com.intellij.openapi.extensions.PluginId; -import com.intellij.openapi.options.ShowSettingsUtil; import com.intellij.openapi.progress.ProgressIndicator; import com.intellij.openapi.progress.ProgressManager; import com.intellij.openapi.progress.Task; @@ -17,7 +16,7 @@ import net.seesharpsoft.intellij.plugins.csv.settings.CsvEditorSettingsProvider; import org.jetbrains.annotations.NotNull; -public class CsvPlugin implements StartupActivity, StartupActivity.DumbAware, StartupActivity.Background { +public class CsvPlugin implements StartupActivity, StartupActivity.DumbAware { protected static IdeaPluginDescriptor getPluginDescriptor() { return PluginManagerCore.getPlugin(PluginId.getId("net.seesharpsoft.intellij.plugins.csv")); @@ -35,7 +34,7 @@ private static void openLink(Project project, String link) { if (project.isDisposed()) return; if (link.startsWith("#")) { - ((ShowSettingsUtilImpl) ShowSettingsUtil.getInstance()).showSettingsDialog(project, link.substring(1), null); + ShowSettingsUtilImpl.showSettingsDialog(project, link.substring(1), null); } else { BrowserUtil.browse(link, project); } @@ -61,7 +60,7 @@ public void run(@NotNull ProgressIndicator progressIndicator) { } // finished progressIndicator.setFraction(1.0); - progressIndicator.setText("finished"); + progressIndicator.setText("Finished"); } }); } diff --git a/src/main/java/net/seesharpsoft/intellij/plugins/csv/components/CsvFileAttributes.java b/src/main/java/net/seesharpsoft/intellij/plugins/csv/components/CsvFileAttributes.java index 08ad96f8..7b17649d 100644 --- a/src/main/java/net/seesharpsoft/intellij/plugins/csv/components/CsvFileAttributes.java +++ b/src/main/java/net/seesharpsoft/intellij/plugins/csv/components/CsvFileAttributes.java @@ -16,7 +16,7 @@ import net.seesharpsoft.commons.collection.Pair; import net.seesharpsoft.intellij.plugins.csv.*; import net.seesharpsoft.intellij.plugins.csv.settings.CsvEditorSettings; -import org.apache.commons.lang.StringUtils; +import net.seesharpsoft.intellij.util.StringUtils; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; diff --git a/src/main/java/net/seesharpsoft/intellij/plugins/csv/editor/CsvFileEditorProvider.java b/src/main/java/net/seesharpsoft/intellij/plugins/csv/editor/CsvFileEditorProvider.java index 9eef88e1..1a951949 100644 --- a/src/main/java/net/seesharpsoft/intellij/plugins/csv/editor/CsvFileEditorProvider.java +++ b/src/main/java/net/seesharpsoft/intellij/plugins/csv/editor/CsvFileEditorProvider.java @@ -1,6 +1,6 @@ package net.seesharpsoft.intellij.plugins.csv.editor; -import com.intellij.diff.editor.DiffVirtualFile; +import com.intellij.diff.editor.DiffViewerVirtualFile; import com.intellij.openapi.editor.EditorSettings; import com.intellij.openapi.fileEditor.*; import com.intellij.openapi.fileEditor.impl.text.TextEditorProvider; @@ -21,16 +21,16 @@ public static boolean acceptCsvFile(@NotNull Project project, @NotNull VirtualFi return CsvHelper.isCsvFile(project, file) && !SingleRootFileViewProvider.isTooLargeForContentLoading(file) && !SingleRootFileViewProvider.isTooLargeForIntelligence(file) - && !(file instanceof DiffVirtualFile); + && !(file instanceof DiffViewerVirtualFile); } @Override - public String getEditorTypeId() { + public @NotNull String getEditorTypeId() { return EDITOR_TYPE_ID; } @Override - public FileEditorPolicy getPolicy() { + public @NotNull FileEditorPolicy getPolicy() { switch (CsvEditorSettings.getInstance().getEditorPrio()) { case TEXT_FIRST: case TEXT_ONLY: @@ -62,7 +62,7 @@ public FileEditor createEditor(@NotNull Project project, @NotNull VirtualFile vi } @Override - public FileEditorState readState(@NotNull Element sourceElement, @NotNull Project project, @NotNull VirtualFile file) { + public @NotNull FileEditorState readState(@NotNull Element sourceElement, @NotNull Project project, @NotNull VirtualFile file) { return TextEditorProvider.getInstance().readState(sourceElement, project, file); } @@ -81,7 +81,7 @@ public void disposeEditor(@NotNull FileEditor editor) { public Builder createEditorAsync(@NotNull Project project, @NotNull VirtualFile virtualFile) { return new Builder() { @Override - public FileEditor build() { + public @NotNull FileEditor build() { TextEditorProvider provider = TextEditorProvider.getInstance(); TextEditor textEditor = (TextEditor) provider.createEditor(project, virtualFile); applySettings(textEditor.getEditor().getSettings(), CsvEditorSettings.getInstance()); diff --git a/src/main/java/net/seesharpsoft/intellij/plugins/csv/formatter/CsvFormatHelper.java b/src/main/java/net/seesharpsoft/intellij/plugins/csv/formatter/CsvFormatHelper.java new file mode 100644 index 00000000..2bbbb026 --- /dev/null +++ b/src/main/java/net/seesharpsoft/intellij/plugins/csv/formatter/CsvFormatHelper.java @@ -0,0 +1,236 @@ +package net.seesharpsoft.intellij.plugins.csv.formatter; + +import com.intellij.formatting.SpacingBuilder; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.codeStyle.CodeStyleSettings; +import net.seesharpsoft.intellij.plugins.csv.CsvHelper; +import net.seesharpsoft.intellij.plugins.csv.CsvLanguage; +import net.seesharpsoft.intellij.plugins.csv.psi.CsvElementType; +import net.seesharpsoft.intellij.plugins.csv.psi.CsvTypes; +import net.seesharpsoft.intellij.plugins.csv.settings.CsvCodeStyleSettings; +import org.jetbrains.annotations.Nullable; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.List; + +public final class CsvFormatHelper { + + private static final float FULL_WIDTH_WIDTH = 1.5f; + private static final int HEX_RADIX = 16; + private static final int[][] ALL_CHARCODE_RANGES; + private static final int[][] WIDTH_ZERO_CHARCODE_RANGES = { + {0x0300, 0x036F, 0}, {0x0483, 0x0486, 0}, {0x0488, 0x0489, 0}, + {0x0591, 0x05BD, 0}, {0x05BF, 0x05BF, 0}, {0x05C1, 0x05C2, 0}, + {0x05C4, 0x05C5, 0}, {0x05C7, 0x05C7, 0}, {0x0600, 0x0603, 0}, + {0x0610, 0x0615, 0}, {0x064B, 0x065E, 0}, {0x0670, 0x0670, 0}, + {0x06D6, 0x06E4, 0}, {0x06E7, 0x06E8, 0}, {0x06EA, 0x06ED, 0}, + {0x070F, 0x070F, 0}, {0x0711, 0x0711, 0}, {0x0730, 0x074A, 0}, + {0x07A6, 0x07B0, 0}, {0x07EB, 0x07F3, 0}, {0x0901, 0x0902, 0}, + {0x093C, 0x093C, 0}, {0x0941, 0x0948, 0}, {0x094D, 0x094D, 0}, + {0x0951, 0x0954, 0}, {0x0962, 0x0963, 0}, {0x0981, 0x0981, 0}, + {0x09BC, 0x09BC, 0}, {0x09C1, 0x09C4, 0}, {0x09CD, 0x09CD, 0}, + {0x09E2, 0x09E3, 0}, {0x0A01, 0x0A02, 0}, {0x0A3C, 0x0A3C, 0}, + {0x0A41, 0x0A42, 0}, {0x0A47, 0x0A48, 0}, {0x0A4B, 0x0A4D, 0}, + {0x0A70, 0x0A71, 0}, {0x0A81, 0x0A82, 0}, {0x0ABC, 0x0ABC, 0}, + {0x0AC1, 0x0AC5, 0}, {0x0AC7, 0x0AC8, 0}, {0x0ACD, 0x0ACD, 0}, + {0x0AE2, 0x0AE3, 0}, {0x0B01, 0x0B01, 0}, {0x0B3C, 0x0B3C, 0}, + {0x0B3F, 0x0B3F, 0}, {0x0B41, 0x0B43, 0}, {0x0B4D, 0x0B4D, 0}, + {0x0B56, 0x0B56, 0}, {0x0B82, 0x0B82, 0}, {0x0BC0, 0x0BC0, 0}, + {0x0BCD, 0x0BCD, 0}, {0x0C3E, 0x0C40, 0}, {0x0C46, 0x0C48, 0}, + {0x0C4A, 0x0C4D, 0}, {0x0C55, 0x0C56, 0}, {0x0CBC, 0x0CBC, 0}, + {0x0CBF, 0x0CBF, 0}, {0x0CC6, 0x0CC6, 0}, {0x0CCC, 0x0CCD, 0}, + {0x0CE2, 0x0CE3, 0}, {0x0D41, 0x0D43, 0}, {0x0D4D, 0x0D4D, 0}, + {0x0DCA, 0x0DCA, 0}, {0x0DD2, 0x0DD4, 0}, {0x0DD6, 0x0DD6, 0}, + {0x0E31, 0x0E31, 0}, {0x0E34, 0x0E3A, 0}, {0x0E47, 0x0E4E, 0}, + {0x0EB1, 0x0EB1, 0}, {0x0EB4, 0x0EB9, 0}, {0x0EBB, 0x0EBC, 0}, + {0x0EC8, 0x0ECD, 0}, {0x0F18, 0x0F19, 0}, {0x0F35, 0x0F35, 0}, + {0x0F37, 0x0F37, 0}, {0x0F39, 0x0F39, 0}, {0x0F71, 0x0F7E, 0}, + {0x0F80, 0x0F84, 0}, {0x0F86, 0x0F87, 0}, {0x0F90, 0x0F97, 0}, + {0x0F99, 0x0FBC, 0}, {0x0FC6, 0x0FC6, 0}, {0x102D, 0x1030, 0}, + {0x1032, 0x1032, 0}, {0x1036, 0x1037, 0}, {0x1039, 0x1039, 0}, + {0x1058, 0x1059, 0}, {0x1160, 0x11FF, 0}, {0x135F, 0x135F, 0}, + {0x1712, 0x1714, 0}, {0x1732, 0x1734, 0}, {0x1752, 0x1753, 0}, + {0x1772, 0x1773, 0}, {0x17B4, 0x17B5, 0}, {0x17B7, 0x17BD, 0}, + {0x17C6, 0x17C6, 0}, {0x17C9, 0x17D3, 0}, {0x17DD, 0x17DD, 0}, + {0x180B, 0x180D, 0}, {0x18A9, 0x18A9, 0}, {0x1920, 0x1922, 0}, + {0x1927, 0x1928, 0}, {0x1932, 0x1932, 0}, {0x1939, 0x193B, 0}, + {0x1A17, 0x1A18, 0}, {0x1B00, 0x1B03, 0}, {0x1B34, 0x1B34, 0}, + {0x1B36, 0x1B3A, 0}, {0x1B3C, 0x1B3C, 0}, {0x1B42, 0x1B42, 0}, + {0x1B6B, 0x1B73, 0}, {0x1DC0, 0x1DCA, 0}, {0x1DFE, 0x1DFF, 0}, + {0x200B, 0x200F, 0}, {0x202A, 0x202E, 0}, {0x2060, 0x2063, 0}, + {0x206A, 0x206F, 0}, {0x20D0, 0x20EF, 0}, {0x302A, 0x302F, 0}, + {0x3099, 0x309A, 0}, {0xA806, 0xA806, 0}, {0xA80B, 0xA80B, 0}, + {0xA825, 0xA826, 0}, {0xFB1E, 0xFB1E, 0}, {0xFE00, 0xFE0F, 0}, + {0xFE20, 0xFE23, 0}, {0xFEFF, 0xFEFF, 0}, {0xFFF9, 0xFFFB, 0}, + {0x10A01, 0x10A03, 0}, {0x10A05, 0x10A06, 0}, {0x10A0C, 0x10A0F, 0}, + {0x10A38, 0x10A3A, 0}, {0x10A3F, 0x10A3F, 0}, {0x1D167, 0x1D169, 0}, + {0x1D173, 0x1D182, 0}, {0x1D185, 0x1D18B, 0}, {0x1D1AA, 0x1D1AD, 0}, + {0x1D242, 0x1D244, 0}, {0xE0001, 0xE0001, 0}, {0xE0020, 0xE007F, 0}, + {0xE0100, 0xE01EF, 0} + }; + + static { + final List charCodes = new ArrayList<>(); + int widthZeroIndex = 0; + + try (InputStream is = CsvFormatHelper.class.getClassLoader().getResourceAsStream("misc/EastAsianDoubleWidth.csv")) { + assert is != null; + BufferedReader reader = new BufferedReader(new InputStreamReader(is)); + for (String line : reader.lines().toList()) { + int[] charCodeArray = convertRangeTextToCharCodeWidthArray(line.substring(0, line.length() - 2), line.endsWith("A") ? -1 : 2); + while (widthZeroIndex < WIDTH_ZERO_CHARCODE_RANGES.length && WIDTH_ZERO_CHARCODE_RANGES[widthZeroIndex][0] < charCodeArray[0]) { + charCodes.add(WIDTH_ZERO_CHARCODE_RANGES[widthZeroIndex]); + ++widthZeroIndex; + } + charCodes.add(charCodeArray); + } + } catch (IOException e) { + // ignore + } + + while (widthZeroIndex < WIDTH_ZERO_CHARCODE_RANGES.length) { + charCodes.add(WIDTH_ZERO_CHARCODE_RANGES[widthZeroIndex]); + ++widthZeroIndex; + } + + ALL_CHARCODE_RANGES = charCodes.toArray(new int[charCodes.size()][]); + } + + private static int[] convertRangeTextToCharCodeWidthArray(String rangeText, int width) { + int[] targetArray = new int[3]; + String[] split = rangeText.split("\\.\\."); + targetArray[0] = Integer.parseInt(split[0], HEX_RADIX); + targetArray[1] = split.length == 1 ? targetArray[0] : Integer.parseInt(split[1], HEX_RADIX); + targetArray[2] = width; + return targetArray; + } + + private static int binarySearch(int charCode) { + int[][] ranges = ALL_CHARCODE_RANGES; + int min = 0; + int mid; + int max = ranges.length - 1; + + if (charCode < ranges[0][0] || charCode > ranges[max][1]) { + return -1; + } + while (max >= min) { + mid = (min + max) / 2; + if (charCode > ranges[mid][1]) { + min = mid + 1; + } else if (charCode < ranges[mid][0]) { + max = mid - 1; + } else { + return mid; + } + } + + return -1; + } + + private static float charWidth(int charCode, boolean ambiguousWide) { + if (charCode <= 0) { + return 0; + } + int foundIndex = binarySearch(charCode); + if (foundIndex == -1) { + return 1; + } + int charWidth = ALL_CHARCODE_RANGES[foundIndex][2]; + if (charWidth == -1) { + return ambiguousWide ? FULL_WIDTH_WIDTH : 1; + } + return charWidth == 2 ? FULL_WIDTH_WIDTH : charWidth; + } + + private static int charWidth(CharSequence s, boolean ambiguousWide) { + float result = 0; + for (int i = 0; i < s.length(); i++) { + result += charWidth(s.charAt(i), ambiguousWide); + } + return Math.round(result); + } + + public static int getTextLength(String textInput, CsvCodeStyleSettings csvCodeStyleSettings) { + String text = textInput; + int length = 0; + if (csvCodeStyleSettings.TABULARIZE && !csvCodeStyleSettings.WHITE_SPACES_OUTSIDE_QUOTES && text.startsWith("\"")) { + text = text.substring(1, text.length() - 1).strip(); + length += 2; + } + length += CsvHelper.getMaxTextLineLength(text, input -> + csvCodeStyleSettings.ENABLE_WIDE_CHARACTER_DETECTION ? + charWidth(input, csvCodeStyleSettings.TREAT_AMBIGUOUS_CHARACTERS_AS_WIDE) : + input.length() + ); + + return length; + } + + public static int getTextLength(PsiElement psiElement, CsvCodeStyleSettings csvCodeStyleSettings) { + return CsvFormatHelper.getTextLength(psiElement.getText().strip(), csvCodeStyleSettings); + } + + public static SpacingBuilder createSpaceBuilder(CodeStyleSettings settings) { + CsvCodeStyleSettings csvCodeStyleSettings = settings.getCustomSettings(CsvCodeStyleSettings.class); + SpacingBuilder builder = new SpacingBuilder(settings, CsvLanguage.INSTANCE); + if (csvCodeStyleSettings.TRIM_LEADING_WHITE_SPACES || csvCodeStyleSettings.TABULARIZE) { + builder + .after(CsvTypes.COMMA).spaceIf(csvCodeStyleSettings.SPACE_AFTER_SEPARATOR) + .after(CsvTypes.CRLF).spaces(0) + .after(CsvElementType.DOCUMENT_START).spaces(0); + } else if (csvCodeStyleSettings.SPACE_AFTER_SEPARATOR) { + builder.after(CsvTypes.COMMA).spaces(1); + } + + if (csvCodeStyleSettings.TRIM_TRAILING_WHITE_SPACES || csvCodeStyleSettings.TABULARIZE) { + builder + .before(CsvTypes.COMMA).spaceIf(csvCodeStyleSettings.SPACE_BEFORE_SEPARATOR) + .before(CsvTypes.CRLF).spaces(0); + } else if (csvCodeStyleSettings.SPACE_BEFORE_SEPARATOR) { + builder.before(CsvTypes.COMMA).spaces(1); + } + + return builder; + } + + public static boolean isFieldNode(@Nullable ASTNode node) { + return node != null && node.getElementType() == CsvTypes.FIELD; + } + + public static boolean isSeparatorNode(@Nullable ASTNode node) { + return node != null && node.getElementType() == CsvTypes.COMMA; + } + + public static boolean isRecordNode(@Nullable ASTNode node) { + return node != null && node.getElementType() == CsvTypes.RECORD; + } + + public static boolean isQuoteNode(@Nullable ASTNode node) { + return node != null && node.getElementType() == CsvTypes.QUOTE; + } + + public static boolean isTextNode(@Nullable ASTNode node) { + return node != null && (node.getElementType() == CsvTypes.TEXT || node.getElementType() == CsvTypes.ESCAPED_TEXT); + } + + public static boolean isCRLFNode(@Nullable ASTNode node) { + return node != null && node.getElementType() == CsvTypes.CRLF; + } + + public static boolean isQuotedField(@Nullable ASTNode node) { + return node != null + && node.getElementType() == CsvTypes.FIELD + && node.getFirstChildNode() != null + && node.getFirstChildNode().getElementType() == CsvTypes.QUOTE; + } + + private CsvFormatHelper() { + // static utility class + } +} diff --git a/src/main/java/net/seesharpsoft/intellij/plugins/csv/formatter/CsvFormattingBlock.java b/src/main/java/net/seesharpsoft/intellij/plugins/csv/formatter/CsvFormattingBlock.java new file mode 100644 index 00000000..62c1286e --- /dev/null +++ b/src/main/java/net/seesharpsoft/intellij/plugins/csv/formatter/CsvFormattingBlock.java @@ -0,0 +1,181 @@ +package net.seesharpsoft.intellij.plugins.csv.formatter; + +import com.intellij.formatting.*; +import com.intellij.lang.ASTNode; +import com.intellij.openapi.util.TextRange; +import com.intellij.psi.PsiElement; +import com.intellij.psi.formatter.common.AbstractBlock; +import net.seesharpsoft.intellij.plugins.csv.CsvColumnInfo; +import net.seesharpsoft.intellij.plugins.csv.CsvColumnInfoMap; +import net.seesharpsoft.intellij.plugins.csv.settings.CsvCodeStyleSettings; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +public class CsvFormattingBlock extends AbstractBlock { + protected CsvFormattingInfo myFormattingInfo; + + protected CsvFormattingBlock(@NotNull ASTNode node, CsvFormattingInfo formattingInfo) { + this(node, Wrap.createWrap(WrapType.NONE, false), Alignment.createAlignment(), formattingInfo); + } + + protected CsvFormattingBlock(@NotNull ASTNode node, @Nullable Wrap wrap, @Nullable Alignment alignment, + CsvFormattingInfo formattingInfo) { + super(node, wrap, alignment); + this.myFormattingInfo = formattingInfo; + } + + private boolean stripLeading() { + CsvCodeStyleSettings settings = myFormattingInfo.getCsvCodeStyleSettings(); + ASTNode prev = myNode.getTreePrev(); + return settings.TRIM_LEADING_WHITE_SPACES || settings.TABULARIZE + || (settings.SPACE_AFTER_SEPARATOR && prev != null && !CsvFormatHelper.isCRLFNode(prev)); + } + + private boolean stripTrailing() { + CsvCodeStyleSettings settings = myFormattingInfo.getCsvCodeStyleSettings(); + ASTNode next = myNode.getTreeNext(); + return settings.TRIM_TRAILING_WHITE_SPACES || settings.TABULARIZE + || (settings.SPACE_BEFORE_SEPARATOR && next != null && !CsvFormatHelper.isCRLFNode(next)); + } + + private boolean requiresTabularization(ASTNode node1, ASTNode node2) { + CsvCodeStyleSettings settings = myFormattingInfo.getCsvCodeStyleSettings(); + if (!settings.TABULARIZE) return false; + if (settings.LEADING_WHITE_SPACES) { + return CsvFormatHelper.isFieldNode(node2) + || (CsvFormatHelper.isQuoteNode(node1) && !CsvFormatHelper.isSeparatorNode(node2)) + || (CsvFormatHelper.isRecordNode(node2) && (settings.WHITE_SPACES_OUTSIDE_QUOTES || !CsvFormatHelper.isQuotedField(node2.getFirstChildNode()))); + } + // case !settings.LEADING_WHITE_SPACES + return (!CsvFormatHelper.isQuoteNode(node1) && CsvFormatHelper.isSeparatorNode(node2)) + || (!CsvFormatHelper.isSeparatorNode(node1) && CsvFormatHelper.isQuoteNode(node2)); + } + + private int getDefaultSpacing(@Nullable Block child1, @NotNull Block child2) { + Spacing defaultSpacing = myFormattingInfo.getSpacingBuilder().getSpacing(this, child1, child2); + if (defaultSpacing instanceof SpacingImpl spacing) { + return spacing.getMinSpaces(); + } + return 0; + } + + protected int getRequiredTabularizationSpacing(PsiElement psiElement) { + CsvColumnInfoMap columnInfoMap = myFormattingInfo.getCsvColumnInfoMap(); + CsvColumnInfo columnInfo = columnInfoMap.getColumnInfo(psiElement); + if (columnInfo == null) { + return -1; + } + + int targetLength = columnInfo.getMaxLength(); + int currentLength = CsvFormatHelper.getTextLength(psiElement, myFormattingInfo.getCsvCodeStyleSettings()); + + if (currentLength == 0 && psiElement.getNextSibling() == null) { + return 0; + } + + return targetLength - currentLength; + } + + private List buildQuotedFieldChildren(ASTNode node) { + List blocks = new ArrayList<>(); + ASTNode child = node.getFirstChildNode(); + while (child != null) { + Block block = new CsvFieldFormattingBlock(child, this.getWrap(), this.getAlignment(), myFormattingInfo); + blocks.add(block); + child = child.getTreeNext(); + } + return blocks; + } + + private List getBlocksForNode(ASTNode node) { + CsvCodeStyleSettings settings = myFormattingInfo.getCsvCodeStyleSettings(); + if (settings.TABULARIZE + && !settings.WHITE_SPACES_OUTSIDE_QUOTES + && CsvFormatHelper.isQuotedField(node) + ) { + return this.buildQuotedFieldChildren(node); + } + return Collections.singletonList(new CsvFormattingBlock(node, this.getWrap(), this.getAlignment(), myFormattingInfo)); + } + + @Override + protected List buildChildren() { + List blocks = new ArrayList<>(); + if (CsvFormatHelper.isFieldNode(this.myNode)) { + return blocks; + } + + ASTNode child = myNode.getFirstChildNode(); + while (child != null) { + blocks.addAll(getBlocksForNode(child)); + child = child.getTreeNext(); + } + return blocks; + } + + @Override + public @NotNull TextRange getTextRange() { + TextRange textRange = super.getTextRange(); + if (!CsvFormatHelper.isFieldNode(this.myNode)) return textRange; + + String originalText = myNode.getText(); + String trimmedText = stripLeading() ? originalText.stripLeading() : originalText; + trimmedText = stripTrailing() ? trimmedText.stripTrailing() : trimmedText; + return TextRange.from(textRange.getStartOffset() + originalText.indexOf(trimmedText), trimmedText.length()); + } + + @Override + public @Nullable Indent getIndent() { + if (!this.requiresTabularization(null, this.myNode)) { + return null; + } + return Indent.getSpaceIndent(this.getRequiredTabularizationSpacing(this.myNode.getPsi())); + } + + @Nullable + @Override + public Spacing getSpacing(@Nullable Block child1, @NotNull Block child2) { + ASTNode childNode1 = child1 == null ? null : ((CsvFormattingBlock)child1).myNode; + ASTNode childNode2 = ((CsvFormattingBlock)child2).myNode; + int spacing = this.getDefaultSpacing(child1, child2); + if (this.requiresTabularization(childNode1, childNode2)) { + PsiElement targetPsiElement = CsvFormatHelper.isFieldNode(childNode1) ? childNode1.getPsi() : ( + CsvFormatHelper.isRecordNode(childNode2) ? childNode2.getFirstChildNode().getPsi() : ( + CsvFormatHelper.isFieldNode(childNode2) ? childNode2.getPsi() : childNode2.getTreeParent().getPsi() + ) + ); + spacing += this.getRequiredTabularizationSpacing(targetPsiElement); + } + return Spacing.createSpacing(spacing, spacing, 0, true, 0); + } + + @Override + public boolean isLeaf() { + return myNode.getFirstChildNode() == null; + } + + private static class CsvFieldFormattingBlock extends CsvFormattingBlock { + protected CsvFieldFormattingBlock(@NotNull ASTNode node, @Nullable Wrap wrap, @Nullable Alignment alignment, CsvFormattingInfo formattingInfo) { + super(node, wrap, alignment, formattingInfo); + } + + @Override + public @NotNull TextRange getTextRange() { + TextRange textRange = super.getTextRange(); + String originalText = myNode.getText(); + String trimmedText = originalText; + boolean isQuote = CsvFormatHelper.isQuoteNode(this.myNode); + if (isQuote || CsvFormatHelper.isQuoteNode(myNode.getTreePrev())) { + trimmedText = trimmedText.stripLeading(); + } + if (isQuote || CsvFormatHelper.isQuoteNode(myNode.getTreeNext())) { + trimmedText = trimmedText.stripTrailing(); + } + return TextRange.from(textRange.getStartOffset() + originalText.indexOf(trimmedText), trimmedText.length()); + } + } +} diff --git a/src/main/java/net/seesharpsoft/intellij/plugins/csv/formatter/CsvFormattingInfo.java b/src/main/java/net/seesharpsoft/intellij/plugins/csv/formatter/CsvFormattingInfo.java index 02344cd7..7a9446e3 100644 --- a/src/main/java/net/seesharpsoft/intellij/plugins/csv/formatter/CsvFormattingInfo.java +++ b/src/main/java/net/seesharpsoft/intellij/plugins/csv/formatter/CsvFormattingInfo.java @@ -1,24 +1,43 @@ package net.seesharpsoft.intellij.plugins.csv.formatter; import com.intellij.formatting.SpacingBuilder; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiFile; import com.intellij.psi.codeStyle.CodeStyleSettings; +import net.seesharpsoft.intellij.plugins.csv.CsvColumnInfoMap; +import net.seesharpsoft.intellij.plugins.csv.CsvHelper; +import net.seesharpsoft.intellij.plugins.csv.psi.CsvField; import net.seesharpsoft.intellij.plugins.csv.settings.CsvCodeStyleSettings; public class CsvFormattingInfo { private final SpacingBuilder mySpacingBuilder; - private final CodeStyleSettings myCodeStyleSettings; + private final CsvCodeStyleSettings csvCodeStyleSettings; + private final PsiFile csvFile; + private CsvColumnInfoMap csvColumnInfoMap; + + public CsvFormattingInfo(CodeStyleSettings codeStyleSettings, SpacingBuilder spacingBuilder, PsiFile csvFile) { + this.mySpacingBuilder = spacingBuilder; + this.csvFile = csvFile; + this.csvCodeStyleSettings = codeStyleSettings.getCustomSettings(CsvCodeStyleSettings.class); + } + + private int getTextMaxLength(CsvField field) { + return CsvFormatHelper.getTextLength(field.getText().strip(), this.csvCodeStyleSettings); + } public SpacingBuilder getSpacingBuilder() { return mySpacingBuilder; } public CsvCodeStyleSettings getCsvCodeStyleSettings() { - return myCodeStyleSettings.getCustomSettings(CsvCodeStyleSettings.class); + return csvCodeStyleSettings; } - public CsvFormattingInfo(CodeStyleSettings codeStyleSettings, SpacingBuilder spacingBuilder) { - this.mySpacingBuilder = spacingBuilder; - this.myCodeStyleSettings = codeStyleSettings; + public CsvColumnInfoMap getCsvColumnInfoMap() { + if (this.csvColumnInfoMap == null) { + this.csvColumnInfoMap = CsvHelper.createColumnInfoMap(this.csvFile, this::getTextMaxLength); + } + return this.csvColumnInfoMap; } } diff --git a/src/main/java/net/seesharpsoft/intellij/plugins/csv/formatter/CsvFormattingModelBuilder.java b/src/main/java/net/seesharpsoft/intellij/plugins/csv/formatter/CsvFormattingModelBuilder.java index 5d726e34..2d633166 100644 --- a/src/main/java/net/seesharpsoft/intellij/plugins/csv/formatter/CsvFormattingModelBuilder.java +++ b/src/main/java/net/seesharpsoft/intellij/plugins/csv/formatter/CsvFormattingModelBuilder.java @@ -2,44 +2,15 @@ import com.intellij.formatting.*; import com.intellij.lang.ASTNode; -import com.intellij.openapi.util.TextRange; import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiFile; import com.intellij.psi.codeStyle.CodeStyleSettings; import net.seesharpsoft.UnhandledSwitchCaseException; -import net.seesharpsoft.intellij.plugins.csv.CsvLanguage; -import net.seesharpsoft.intellij.plugins.csv.psi.CsvElementType; -import net.seesharpsoft.intellij.plugins.csv.psi.CsvTypes; -import net.seesharpsoft.intellij.plugins.csv.settings.CsvCodeStyleSettings; +import net.seesharpsoft.intellij.formatting.ExternalFormattingModelBuilderImpl; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; public class CsvFormattingModelBuilder implements FormattingModelBuilder { - private static ExternalFormattingModelBuilderImpl DUMMY_FORMATTING_MODEL_PROVIDER = new ExternalFormattingModelBuilderImpl(null); - - private static SpacingBuilder createSpaceBuilder(CodeStyleSettings settings) { - CsvCodeStyleSettings csvCodeStyleSettings = settings.getCustomSettings(CsvCodeStyleSettings.class); - SpacingBuilder builder = new SpacingBuilder(settings, CsvLanguage.INSTANCE); - if (csvCodeStyleSettings.TRIM_LEADING_WHITE_SPACES) { - builder - .after(CsvTypes.COMMA).spaceIf(csvCodeStyleSettings.SPACE_AFTER_SEPARATOR) - .after(CsvTypes.CRLF).spaces(0) - .after(CsvElementType.DOCUMENT_START).spaces(0); - } else if (csvCodeStyleSettings.SPACE_AFTER_SEPARATOR) { - builder.after(CsvTypes.COMMA).spaces(1); - } - - if (csvCodeStyleSettings.TRIM_TRAILING_WHITE_SPACES) { - builder - .before(CsvTypes.COMMA).spaceIf(csvCodeStyleSettings.SPACE_BEFORE_SEPARATOR) - .before(CsvTypes.CRLF).spaces(0); - } else if (csvCodeStyleSettings.SPACE_BEFORE_SEPARATOR) { - builder.before(CsvTypes.COMMA).spaces(1); - } - - return builder; - } + private static final ExternalFormattingModelBuilderImpl DUMMY_FORMATTING_MODEL_PROVIDER = new ExternalFormattingModelBuilderImpl(null); @Override @NotNull @@ -56,22 +27,17 @@ public FormattingModel createModel(FormattingContext formattingContext) { ASTNode root = element.getNode(); CsvFormattingInfo formattingInfo = new CsvFormattingInfo( settings, - createSpaceBuilder(settings) + CsvFormatHelper.createSpaceBuilder(settings), + element.getContainingFile() ); return FormattingModelProvider.createFormattingModelForPsiFile( element.getContainingFile(), - new SimpleCsvBlock(root, formattingInfo), + new CsvFormattingBlock(root, formattingInfo), settings ); default: throw new UnhandledSwitchCaseException(formattingContext.getFormattingMode()); } } - - @Nullable - @Override - public TextRange getRangeAffectingIndent(PsiFile file, int offset, ASTNode elementAtOffset) { - return null; - } -} \ No newline at end of file +} diff --git a/src/main/java/net/seesharpsoft/intellij/plugins/csv/formatter/SimpleCsvBlock.java b/src/main/java/net/seesharpsoft/intellij/plugins/csv/formatter/SimpleCsvBlock.java deleted file mode 100644 index eff7bab1..00000000 --- a/src/main/java/net/seesharpsoft/intellij/plugins/csv/formatter/SimpleCsvBlock.java +++ /dev/null @@ -1,89 +0,0 @@ -package net.seesharpsoft.intellij.plugins.csv.formatter; - -import com.intellij.formatting.*; -import com.intellij.lang.ASTNode; -import com.intellij.openapi.util.TextRange; -import com.intellij.psi.TokenType; -import com.intellij.psi.formatter.common.AbstractBlock; -import net.seesharpsoft.intellij.plugins.csv.psi.CsvTypes; -import net.seesharpsoft.intellij.plugins.csv.settings.CsvCodeStyleSettings; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.ArrayList; -import java.util.List; - -public class SimpleCsvBlock extends AbstractBlock { - - protected CsvFormattingInfo myFormattingInfo; - - protected SimpleCsvBlock(@NotNull ASTNode node, CsvFormattingInfo formattingInfo) { - this(node, Wrap.createWrap(WrapType.NONE, false), Alignment.createAlignment(), formattingInfo); - } - - protected SimpleCsvBlock(@NotNull ASTNode node, @Nullable Wrap wrap, @Nullable Alignment alignment, - CsvFormattingInfo formattingInfo) { - super(node, wrap, alignment); - this.myFormattingInfo = formattingInfo; - } - - @Override - protected List buildChildren() { - List blocks = new ArrayList<>(); - if (isFieldBlock()) return blocks; - - ASTNode child = myNode.getFirstChildNode(); - while (child != null) { - if (child.getElementType() != TokenType.WHITE_SPACE) { - Block block = new SimpleCsvBlock(child, myFormattingInfo); - blocks.add(block); - } - child = child.getTreeNext(); - } - return blocks; - } - - private boolean isFieldBlock() { - return myNode.getElementType() == CsvTypes.FIELD; - } - - private boolean stripLeading() { - CsvCodeStyleSettings settings = myFormattingInfo.getCsvCodeStyleSettings(); - return settings.TRIM_LEADING_WHITE_SPACES - || settings.SPACE_AFTER_SEPARATOR; - } - - private boolean stripTrailing() { - CsvCodeStyleSettings settings = myFormattingInfo.getCsvCodeStyleSettings(); - return settings.TRIM_TRAILING_WHITE_SPACES - || settings.SPACE_BEFORE_SEPARATOR; - } - - @Override - public TextRange getTextRange() { - TextRange textRange = super.getTextRange(); - if (!isFieldBlock()) return textRange; - - String originalText = myNode.getText(); - String trimmedText = stripLeading() ? originalText.stripLeading() : originalText; - trimmedText = stripTrailing() ? trimmedText.stripTrailing() : trimmedText; - return TextRange.from(textRange.getStartOffset() + originalText.indexOf(trimmedText), trimmedText.length()); - } - - @Override - public Indent getIndent() { - return Indent.getNoneIndent(); - } - - @Nullable - @Override - public Spacing getSpacing(@Nullable Block child1, @NotNull Block child2) { - return myFormattingInfo.getSpacingBuilder().getSpacing(this, child1, child2); - } - - @Override - public boolean isLeaf() { - return myNode.getFirstChildNode() == null; - } - -} diff --git a/src/main/java/net/seesharpsoft/intellij/plugins/csv/psi/CsvPsiTreeUpdater.java b/src/main/java/net/seesharpsoft/intellij/plugins/csv/psi/CsvPsiTreeUpdater.java index cd1a6db5..6ee85fe1 100644 --- a/src/main/java/net/seesharpsoft/intellij/plugins/csv/psi/CsvPsiTreeUpdater.java +++ b/src/main/java/net/seesharpsoft/intellij/plugins/csv/psi/CsvPsiTreeUpdater.java @@ -515,23 +515,27 @@ private static class DocumentPsiAction extends PsiAction { @Override public void execute() { - PsiFile psiFile = (PsiFile) getAnchor(); + ApplicationManager.getApplication().runWriteAction( + () -> { + PsiFile psiFile = (PsiFile) getAnchor(); - PsiDocumentManager manager = PsiDocumentManager.getInstance(psiFile.getProject()); - Document document = manager.getDocument(psiFile); - if (document == null) return; + PsiDocumentManager manager = PsiDocumentManager.getInstance(psiFile.getProject()); + Document document = manager.getDocument(psiFile); + if (document == null) return; - manager.doPostponedOperationsAndUnblockDocument(document); + manager.doPostponedOperationsAndUnblockDocument(document); - int offset = 0; - for (Pair replacement : myReplacements) { - TextRange textRange = replacement.getFirst().shiftRight(offset); - String text = replacement.getSecond(); - document.replaceString(textRange.getStartOffset(), textRange.getEndOffset(), text); - offset += text.length() - textRange.getLength(); - } + int offset = 0; + for (Pair replacement : myReplacements) { + TextRange textRange = replacement.getFirst().shiftRight(offset); + String text = replacement.getSecond(); + document.replaceString(textRange.getStartOffset(), textRange.getEndOffset(), text); + offset += text.length() - textRange.getLength(); + } - manager.commitDocument(document); + manager.commitDocument(document); + } + ); } } } diff --git a/src/main/java/net/seesharpsoft/intellij/plugins/csv/settings/CsvCodeStyleSettings.java b/src/main/java/net/seesharpsoft/intellij/plugins/csv/settings/CsvCodeStyleSettings.java index 6e68d992..cc39260a 100644 --- a/src/main/java/net/seesharpsoft/intellij/plugins/csv/settings/CsvCodeStyleSettings.java +++ b/src/main/java/net/seesharpsoft/intellij/plugins/csv/settings/CsvCodeStyleSettings.java @@ -10,6 +10,11 @@ public class CsvCodeStyleSettings extends CustomCodeStyleSettings { public boolean SPACE_AFTER_SEPARATOR = false; public boolean TRIM_LEADING_WHITE_SPACES = false; public boolean TRIM_TRAILING_WHITE_SPACES = false; + public boolean TABULARIZE = false; + public boolean WHITE_SPACES_OUTSIDE_QUOTES = false; + public boolean LEADING_WHITE_SPACES = false; + public boolean ENABLE_WIDE_CHARACTER_DETECTION = false; + public boolean TREAT_AMBIGUOUS_CHARACTERS_AS_WIDE = false; // not a user setting public CsvCodeStyleSettings(CodeStyleSettings settings) { super("CsvCodeStyleSettings", settings); diff --git a/src/main/java/net/seesharpsoft/intellij/plugins/csv/settings/CsvColorSettings.java b/src/main/java/net/seesharpsoft/intellij/plugins/csv/settings/CsvColorSettings.java index e467b470..277bf6d1 100644 --- a/src/main/java/net/seesharpsoft/intellij/plugins/csv/settings/CsvColorSettings.java +++ b/src/main/java/net/seesharpsoft/intellij/plugins/csv/settings/CsvColorSettings.java @@ -122,11 +122,11 @@ public SyntaxHighlighter getHighlighter() { @NotNull @Override public String getDemoText() { - return "1,\"Eldon Base for stackable storage shelf, platinum\",Muhammed MacIntyre,3,-213.25,38.94,35,Nunavut,Storage & Organization,0.8\n" + - "2,\"1.7 Cubic Foot Compact \"\"Cube\"\" Office Refrigerators\",Barry French,293,457.81,208.16,68.02,Nunavut,Appliances,0.58\n" + - "3,\"Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl\",Barry French,293,46.71,8.69,2.99,Nunavut,Binders and Binder Accessories,0.39\n" + - "#4,R380,Clay Rozendal,483,1198.97,195.99,3.99,Nunavut,Telephones and Communication,0.58\n" + - "5,Holmes HEPA Air Purifier,Carlos Soltero,515,30.94,21.78,5.94,Nunavut,Appliances,0.5"; + return """ + header1,header2,header3,header4,header5,header6,header7,header8,header9,header10,header11 + 1,2,3,4,5,6,7,8,9,10,11 + value1,value2,value3,value4,value5,value6,value7,value8,value9,value10,value11 + """; } @Nullable diff --git a/src/main/java/net/seesharpsoft/intellij/plugins/csv/settings/CsvEditorSettings.java b/src/main/java/net/seesharpsoft/intellij/plugins/csv/settings/CsvEditorSettings.java index 8471d5db..410c7633 100644 --- a/src/main/java/net/seesharpsoft/intellij/plugins/csv/settings/CsvEditorSettings.java +++ b/src/main/java/net/seesharpsoft/intellij/plugins/csv/settings/CsvEditorSettings.java @@ -39,9 +39,19 @@ public class CsvEditorSettings implements PersistentStateComponent - + @@ -95,19 +95,11 @@ - - - - - - - - - + @@ -239,17 +231,11 @@ - + - - - - - - - + diff --git a/src/main/java/net/seesharpsoft/intellij/plugins/csv/settings/CsvEditorSettingsProvider.java b/src/main/java/net/seesharpsoft/intellij/plugins/csv/settings/CsvEditorSettingsProvider.java index b9cf3bf2..477e459a 100644 --- a/src/main/java/net/seesharpsoft/intellij/plugins/csv/settings/CsvEditorSettingsProvider.java +++ b/src/main/java/net/seesharpsoft/intellij/plugins/csv/settings/CsvEditorSettingsProvider.java @@ -2,11 +2,12 @@ import com.intellij.application.options.editor.EditorOptionsProvider; import com.intellij.openapi.fileEditor.FileEditorManager; +import com.intellij.openapi.options.Configurable; import com.intellij.openapi.options.ConfigurationException; import com.intellij.openapi.project.ProjectManager; import com.intellij.openapi.ui.ComboBox; -import com.intellij.openapi.util.text.StringUtil; import com.intellij.ui.CheckBoxWithColorChooser; +import com.intellij.ui.JBColor; import com.intellij.util.FileContentUtilCore; import net.seesharpsoft.intellij.plugins.csv.CsvEscapeCharacter; import net.seesharpsoft.intellij.plugins.csv.CsvValueSeparator; @@ -16,7 +17,6 @@ import javax.swing.*; import javax.swing.text.NumberFormatter; -import java.awt.*; import java.text.NumberFormat; import java.util.Arrays; import java.util.Objects; @@ -34,17 +34,16 @@ public class CsvEditorSettingsProvider implements EditorOptionsProvider { private JCheckBox cbUseSoftWraps; private CheckBoxWithColorChooser cbTabHighlightColor; private JCheckBox cbShowInfoBalloonCheckBox; - private JComboBox cbEditorUsage; + private JComboBox cbEditorUsage; private JCheckBox cbQuotingEnforced; private JCheckBox cbZeroBasedColumnNumbering; - private JCheckBox cbFileEndLineBreak; private JFormattedTextField tfMaxColumnWidth; private JFormattedTextField tfDefaultColumnWidth; - private JComboBox comboEscapeCharacter; - private JComboBox comboValueSeparator; + private JComboBox comboEscapeCharacter; + private JComboBox comboValueSeparator; private JCheckBox cbKeepTrailingWhitespaces; private JTextField tfCommentIndicator; - private JComboBox comboValueColoring; + private JComboBox comboValueColoring; private JCheckBox cbAutoDetectSeparator; private JFormattedTextField tfDefaultRowHeight; @@ -70,37 +69,26 @@ public JComponent createComponent() { return myMainPanel; } - // ensure downward compatibility - public boolean isModified(@NotNull JToggleButton toggleButton, boolean value) { - return toggleButton.isSelected() != value; - } - - public boolean isModified(@NotNull JTextField textField, @NotNull String value) { - return !StringUtil.equals(textField.getText().trim(), value); - } - @Override public boolean isModified() { CsvEditorSettings csvEditorSettings = CsvEditorSettings.getInstance(); - return isModified(cbCaretRowShown, csvEditorSettings.isCaretRowShown()) || - isModified(cbUseSoftWraps, csvEditorSettings.isUseSoftWraps()) || - isModified(cbShowInfoBalloonCheckBox, csvEditorSettings.isShowInfoBalloon()) || + return Configurable.isCheckboxModified(cbCaretRowShown, csvEditorSettings.isCaretRowShown()) || + Configurable.isCheckboxModified(cbUseSoftWraps, csvEditorSettings.isUseSoftWraps()) || + Configurable.isCheckboxModified(cbShowInfoBalloonCheckBox, csvEditorSettings.isShowInfoBalloon()) || cbTabHighlightColor.isSelected() != csvEditorSettings.isHighlightTabSeparator() || !Objects.equals(cbTabHighlightColor.getColor(), csvEditorSettings.getTabHighlightColor()) || !tfDefaultRowHeight.getValue().equals(csvEditorSettings.getTableEditorRowHeight()) || - !Objects.equals(cbEditorUsage.getSelectedIndex(), csvEditorSettings.getEditorPrio().ordinal()) || - isModified(cbQuotingEnforced, csvEditorSettings.isQuotingEnforced()) || - !Objects.equals(cbEditorUsage.getSelectedIndex(), csvEditorSettings.getEditorPrio().ordinal()) || - isModified(cbZeroBasedColumnNumbering, csvEditorSettings.isZeroBasedColumnNumbering()) || - isModified(cbFileEndLineBreak, csvEditorSettings.isFileEndLineBreak()) || + Configurable.isCheckboxModified(cbQuotingEnforced, csvEditorSettings.isQuotingEnforced()) || + !Objects.equals(cbEditorUsage.getSelectedItem(), csvEditorSettings.getEditorPrio()) || + Configurable.isCheckboxModified(cbZeroBasedColumnNumbering, csvEditorSettings.isZeroBasedColumnNumbering()) || !tfMaxColumnWidth.getValue().equals(csvEditorSettings.getTableAutoMaxColumnWidth()) || !tfDefaultColumnWidth.getValue().equals(csvEditorSettings.getTableDefaultColumnWidth()) || !Objects.equals(comboEscapeCharacter.getSelectedItem(), csvEditorSettings.getDefaultEscapeCharacter()) || !Objects.equals(comboValueSeparator.getSelectedItem(), csvEditorSettings.getDefaultValueSeparator()) || - isModified(cbKeepTrailingWhitespaces, csvEditorSettings.getKeepTrailingSpaces()) || - isModified(tfCommentIndicator, csvEditorSettings.getCommentIndicator()) || + Configurable.isCheckboxModified(cbKeepTrailingWhitespaces, csvEditorSettings.getKeepTrailingSpaces()) || + Configurable.isFieldModified(tfCommentIndicator, csvEditorSettings.getCommentIndicator()) || !Objects.equals(comboValueColoring.getSelectedItem(), csvEditorSettings.getValueColoring()) || - isModified(cbAutoDetectSeparator, csvEditorSettings.isAutoDetectValueSeparator()); + Configurable.isCheckboxModified(cbAutoDetectSeparator, csvEditorSettings.isAutoDetectValueSeparator()); } @Override @@ -112,10 +100,9 @@ public void reset() { cbTabHighlightColor.setSelected(csvEditorSettings.isHighlightTabSeparator()); cbTabHighlightColor.setColor(csvEditorSettings.getTabHighlightColor()); tfDefaultRowHeight.setValue(csvEditorSettings.getTableEditorRowHeight()); - cbEditorUsage.setSelectedIndex(csvEditorSettings.getEditorPrio().ordinal()); + cbEditorUsage.setSelectedItem(csvEditorSettings.getEditorPrio()); cbQuotingEnforced.setSelected(csvEditorSettings.isQuotingEnforced()); cbZeroBasedColumnNumbering.setSelected(csvEditorSettings.isZeroBasedColumnNumbering()); - cbFileEndLineBreak.setSelected(csvEditorSettings.isFileEndLineBreak()); tfMaxColumnWidth.setValue(csvEditorSettings.getTableAutoMaxColumnWidth()); tfDefaultColumnWidth.setValue(csvEditorSettings.getTableDefaultColumnWidth()); comboEscapeCharacter.setSelectedItem(csvEditorSettings.getDefaultEscapeCharacter()); @@ -135,10 +122,9 @@ public void apply() throws ConfigurationException { csvEditorSettings.setHighlightTabSeparator(cbTabHighlightColor.isSelected()); csvEditorSettings.setTabHighlightColor(cbTabHighlightColor.getColor()); csvEditorSettings.setTableEditorRowHeight((int) tfDefaultRowHeight.getValue()); - csvEditorSettings.setEditorPrio(CsvEditorSettings.EditorPrio.values()[cbEditorUsage.getSelectedIndex()]); + csvEditorSettings.setEditorPrio((CsvEditorSettings.EditorPrio) cbEditorUsage.getSelectedItem()); csvEditorSettings.setQuotingEnforced(cbQuotingEnforced.isSelected()); csvEditorSettings.setZeroBasedColumnNumbering(cbZeroBasedColumnNumbering.isSelected()); - csvEditorSettings.setFileEndLineBreak(cbFileEndLineBreak.isSelected()); csvEditorSettings.setTableAutoMaxColumnWidth((int) tfMaxColumnWidth.getValue()); csvEditorSettings.setTableDefaultColumnWidth((int) tfDefaultColumnWidth.getValue()); csvEditorSettings.setDefaultEscapeCharacter((CsvEscapeCharacter) comboEscapeCharacter.getSelectedItem()); @@ -165,17 +151,20 @@ protected void refreshOpenEditors() { } protected void createUIComponents() { - comboEscapeCharacter = new ComboBox(CsvEscapeCharacter.values()); - comboEscapeCharacter.setRenderer(new CustomDisplayListCellRenderer(ec -> ec.getDisplay())); + cbEditorUsage = new ComboBox<>(CsvEditorSettings.EditorPrio.values()); + cbEditorUsage.setRenderer(new CustomDisplayListCellRenderer<>(CsvEditorSettings.EditorPrio::getDisplay)); + + comboEscapeCharacter = new ComboBox<>(CsvEscapeCharacter.values()); + comboEscapeCharacter.setRenderer(new CustomDisplayListCellRenderer<>(CsvEscapeCharacter::getDisplay)); - comboValueSeparator = new ComboBox(CsvValueSeparator.values()); - comboValueSeparator.setRenderer(new CustomDisplayListCellRenderer(ec -> ec.getDisplay())); + comboValueSeparator = new ComboBox<>(CsvValueSeparator.values()); + comboValueSeparator.setRenderer(new CustomDisplayListCellRenderer<>(CsvValueSeparator::getDisplay)); - comboValueColoring = new ComboBox(CsvEditorSettings.ValueColoring.values()); - comboValueColoring.setRenderer(new CustomDisplayListCellRenderer(ec -> ec.getDisplay())); + comboValueColoring = new ComboBox<>(CsvEditorSettings.ValueColoring.values()); + comboValueColoring.setRenderer(new CustomDisplayListCellRenderer<>(CsvEditorSettings.ValueColoring::getDisplay)); cbTabHighlightColor = new CheckBoxWithColorChooser("Highlight tab separator "); - cbTabHighlightColor.setColor(Color.CYAN); + cbTabHighlightColor.setColor(JBColor.CYAN); NumberFormat numberFormat = NumberFormat.getIntegerInstance(); NumberFormatter numberFormatter = new NumberFormatter(numberFormat); diff --git a/src/main/java/net/seesharpsoft/intellij/plugins/csv/settings/CsvLanguageCodeStyleSettingsProvider.java b/src/main/java/net/seesharpsoft/intellij/plugins/csv/settings/CsvLanguageCodeStyleSettingsProvider.java index cac44b3a..aa862a61 100644 --- a/src/main/java/net/seesharpsoft/intellij/plugins/csv/settings/CsvLanguageCodeStyleSettingsProvider.java +++ b/src/main/java/net/seesharpsoft/intellij/plugins/csv/settings/CsvLanguageCodeStyleSettingsProvider.java @@ -26,14 +26,35 @@ public void customizeSettings(@NotNull CodeStyleSettingsCustomizable consumer, @ "Space after separator", "Separator"); + consumer.showCustomOption(CsvCodeStyleSettings.class, + "TABULARIZE", + "Format as table", + "Tabularize"); + consumer.showCustomOption(CsvCodeStyleSettings.class, + "WHITE_SPACES_OUTSIDE_QUOTES", + "Keep quoted value as is", + "Tabularize"); + consumer.showCustomOption(CsvCodeStyleSettings.class, + "LEADING_WHITE_SPACES", + "Align right", + "Tabularize"); + consumer.showCustomOption(CsvCodeStyleSettings.class, + "ENABLE_WIDE_CHARACTER_DETECTION", + "Enhanced width calculation (slower)", + "Tabularize"); +// consumer.showCustomOption(CsvCodeStyleSettings.class, +// "TREAT_AMBIGUOUS_CHARACTERS_AS_WIDE", +// "Ambiguous as wide characters", +// "Tabularize"); + consumer.showCustomOption(CsvCodeStyleSettings.class, "TRIM_LEADING_WHITE_SPACES", "Trim leading whitespaces", - "Trimming"); + "Trimming (only if not tabularized)"); consumer.showCustomOption(CsvCodeStyleSettings.class, "TRIM_TRAILING_WHITE_SPACES", "Trim trailing whitespaces", - "Trimming"); + "Trimming (only if not tabularized)"); } else if (settingsType == SettingsType.WRAPPING_AND_BRACES_SETTINGS) { consumer.showStandardOptions( CodeStyleSettingsCustomizable.WrappingOrBraceOption.WRAP_LONG_LINES.name(), @@ -51,13 +72,16 @@ public void customizeSettings(@NotNull CodeStyleSettingsCustomizable consumer, @ @Override public String getCodeSample(@NotNull SettingsType settingsType) { - return "1 ,\"Eldon Base for stackable storage shelf, platinum\", Muhammed MacIntyre ,3,-213.25 , 38.94 \n" + - " 2 ,\" 1.7 Cubic Foot Compact \"\"Cube\"\" Office Refrigerators\",Barry French, 293,457.81,208.16\n" + - "\n" + - "3,\"Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl \",Barry French, 293 ,46.71 ,8.69\n" + - "4 , R380 ,Clay Rozendal,483, 1198.97,195.99 \n" + - "3.1\n" + - "5 ,Holmes HEPA Air Purifier,Carlos Soltero,汉字宋,30.94,21.78"; + return """ + ID,Name,Age,Misc + ,,, + 1, " Mike ""Mute"" Masters", 29, spaces front + 2 ,"Mustermann, Max " ,23 ,spaces after \s + 3,Ally Allison,48,no space & no quote + 42 , " Berta Boston " , 75 , spaces everywhere + 169 , Charlie Chaplin , 33 , spaces everywhere & no quote + 200,汉字宋,00,char test + """; } protected void customizeDefaults(@NotNull CommonCodeStyleSettings commonSettings, @NotNull CommonCodeStyleSettings.IndentOptions indentOptions) { diff --git a/src/main/java/net/seesharpsoft/intellij/ui/WrappedAction.java b/src/main/java/net/seesharpsoft/intellij/ui/WrappedAction.java index b587fa9b..3432f741 100644 --- a/src/main/java/net/seesharpsoft/intellij/ui/WrappedAction.java +++ b/src/main/java/net/seesharpsoft/intellij/ui/WrappedAction.java @@ -136,8 +136,7 @@ public void setEnabled(boolean newValue) { // Implement some AbstractAction methods // public Object[] getKeys() { - if (originalAction instanceof AbstractAction) { - AbstractAction abstractAction = (AbstractAction) originalAction; + if (originalAction instanceof AbstractAction abstractAction) { return abstractAction.getKeys(); } @@ -145,8 +144,7 @@ public Object[] getKeys() { } public PropertyChangeListener[] getPropertyChangeListeners() { - if (originalAction instanceof AbstractAction) { - AbstractAction abstractAction = (AbstractAction) originalAction; + if (originalAction instanceof AbstractAction abstractAction) { return abstractAction.getPropertyChangeListeners(); } diff --git a/src/main/java/net/seesharpsoft/intellij/util/StringUtils.java b/src/main/java/net/seesharpsoft/intellij/util/StringUtils.java new file mode 100644 index 00000000..af7302fe --- /dev/null +++ b/src/main/java/net/seesharpsoft/intellij/util/StringUtils.java @@ -0,0 +1,34 @@ +package net.seesharpsoft.intellij.util; + +/** + * Tailored subset of org.apache.commons.lang3.StringUtils. + */ +public class StringUtils { + public static boolean isEmpty(CharSequence cs) { + return cs == null || cs.isEmpty(); + } + + public static int indexOf(CharSequence cs, CharSequence searchChar, int start) { + if (cs instanceof String) { + return ((String)cs).indexOf(searchChar.toString(), start); + } else if (cs instanceof StringBuilder) { + return ((StringBuilder)cs).indexOf(searchChar.toString(), start); + } else { + return cs instanceof StringBuffer ? ((StringBuffer)cs).indexOf(searchChar.toString(), start) : cs.toString().indexOf(searchChar.toString(), start); + } + } + + public static int countMatches(CharSequence str, CharSequence sub) { + if (!isEmpty(str) && !isEmpty(sub)) { + int count = 0; + + for(int idx = 0; (idx = indexOf(str, sub, idx)) != -1; idx += sub.length()) { + ++count; + } + + return count; + } else { + return 0; + } + } +} diff --git a/src/main/resources/misc/EastAsianDoubleWidth.csv b/src/main/resources/misc/EastAsianDoubleWidth.csv new file mode 100644 index 00000000..9eb600a2 --- /dev/null +++ b/src/main/resources/misc/EastAsianDoubleWidth.csv @@ -0,0 +1,461 @@ +00A1,A +00A4,A +00A7,A +00A8,A +00AA,A +00AD,A +00AE,A +00B0,A +00B1,A +00B2..00B3,A +00B4,A +00B6..00B7,A +00B8,A +00B9,A +00BA,A +00BC..00BE,A +00BF,A +00C6,A +00D0,A +00D7,A +00D8,A +00DE..00E1,A +00E6,A +00E8..00EA,A +00EC..00ED,A +00F0,A +00F2..00F3,A +00F7,A +00F8..00FA,A +00FC,A +00FE,A +0101,A +0111,A +0113,A +011B,A +0126..0127,A +012B,A +0131..0133,A +0138,A +013F..0142,A +0144,A +0148..014B,A +014D,A +0152..0153,A +0166..0167,A +016B,A +01CE,A +01D0,A +01D2,A +01D4,A +01D6,A +01D8,A +01DA,A +01DC,A +0251,A +0261,A +02C4,A +02C7,A +02C9..02CB,A +02CD,A +02D0,A +02D8..02DB,A +02DD,A +02DF,A +0300..036F,A +0391..03A1,A +03A3..03A9,A +03B1..03C1,A +03C3..03C9,A +0401,A +0410..044F,A +0451,A +1100..115F,W +2010,A +2013..2015,A +2016,A +2018,A +2019,A +201C,A +201D,A +2020..2022,A +2024..2027,A +2030,A +2032..2033,A +2035,A +203B,A +203E,A +2074,A +207F,A +2081..2084,A +20AC,A +2103,A +2105,A +2109,A +2113,A +2116,A +2121..2122,A +2126,A +212B,A +2153..2154,A +215B..215E,A +2160..216B,A +2170..2179,A +2189,A +2190..2194,A +2195..2199,A +21B8..21B9,A +21D2,A +21D4,A +21E7,A +2200,A +2202..2203,A +2207..2208,A +220B,A +220F,A +2211,A +2215,A +221A,A +221D..2220,A +2223,A +2225,A +2227..222C,A +222E,A +2234..2237,A +223C..223D,A +2248,A +224C,A +2252,A +2260..2261,A +2264..2267,A +226A..226B,A +226E..226F,A +2282..2283,A +2286..2287,A +2295,A +2299,A +22A5,A +22BF,A +2312,A +231A..231B,W +2329,W +232A,W +23E9..23EC,W +23F0,W +23F3,W +2460..249B,A +249C..24E9,A +24EB..24FF,A +2500..254B,A +2550..2573,A +2580..258F,A +2592..2595,A +25A0..25A1,A +25A3..25A9,A +25B2..25B3,A +25B6,A +25B7,A +25BC..25BD,A +25C0,A +25C1,A +25C6..25C8,A +25CB,A +25CE..25D1,A +25E2..25E5,A +25EF,A +25FD..25FE,W +2605..2606,A +2609,A +260E..260F,A +2614..2615,W +261C,A +261E,A +2640,A +2642,A +2648..2653,W +2660..2661,A +2663..2665,A +2667..266A,A +266C..266D,A +266F,A +267F,W +2693,W +269E..269F,A +26A1,W +26AA..26AB,W +26BD..26BE,W +26BF,A +26C4..26C5,W +26C6..26CD,A +26CE,W +26CF..26D3,A +26D4,W +26D5..26E1,A +26E3,A +26E8..26E9,A +26EA,W +26EB..26F1,A +26F2..26F3,W +26F4,A +26F5,W +26F6..26F9,A +26FA,W +26FB..26FC,A +26FD,W +26FE..26FF,A +2705,W +270A..270B,W +2728,W +273D,A +274C,W +274E,W +2753..2755,W +2757,W +2776..277F,A +2795..2797,W +27B0,W +27BF,W +2B1B..2B1C,W +2B50,W +2B55,W +2B56..2B59,A +2E80..2E99,W +2E9B..2EF3,W +2F00..2FD5,W +2FF0..2FFB,W +3000,F +3001..3003,W +3004,W +3005,W +3006,W +3007,W +3008,W +3009,W +300A,W +300B,W +300C,W +300D,W +300E,W +300F,W +3010,W +3011,W +3012..3013,W +3014,W +3015,W +3016,W +3017,W +3018,W +3019,W +301A,W +301B,W +301C,W +301D,W +301E..301F,W +3020,W +3021..3029,W +302A..302D,W +302E..302F,W +3030,W +3031..3035,W +3036..3037,W +3038..303A,W +303B,W +303C,W +303D,W +303E,W +3041..3096,W +3099..309A,W +309B..309C,W +309D..309E,W +309F,W +30A0,W +30A1..30FA,W +30FB,W +30FC..30FE,W +30FF,W +3105..312F,W +3131..318E,W +3190..3191,W +3192..3195,W +3196..319F,W +31A0..31BA,W +31C0..31E3,W +31F0..31FF,W +3200..321E,W +3220..3229,W +322A..3247,W +3248..324F,A +3250,W +3251..325F,W +3260..327F,W +3280..3289,W +328A..32B0,W +32B1..32BF,W +32C0..32FE,W +3300..33FF,W +3400..4DB5,W +4DB6..4DBF,W +4E00..9FEF,W +9FF0..9FFF,W +A000..A014,W +A015,W +A016..A48C,W +A490..A4C6,W +A960..A97C,W +AC00..D7A3,W +E000..F8FF,A +F900..FA6D,W +FA6E..FA6F,W +FA70..FAD9,W +FADA..FAFF,W +FE00..FE0F,A +FE10..FE16,W +FE17,W +FE18,W +FE19,W +FE30,W +FE31..FE32,W +FE33..FE34,W +FE35,W +FE36,W +FE37,W +FE38,W +FE39,W +FE3A,W +FE3B,W +FE3C,W +FE3D,W +FE3E,W +FE3F,W +FE40,W +FE41,W +FE42,W +FE43,W +FE44,W +FE45..FE46,W +FE47,W +FE48,W +FE49..FE4C,W +FE4D..FE4F,W +FE50..FE52,W +FE54..FE57,W +FE58,W +FE59,W +FE5A,W +FE5B,W +FE5C,W +FE5D,W +FE5E,W +FE5F..FE61,W +FE62,W +FE63,W +FE64..FE66,W +FE68,W +FE69,W +FE6A..FE6B,W +FF01..FF03,F +FF04,F +FF05..FF07,F +FF08,F +FF09,F +FF0A,F +FF0B,F +FF0C,F +FF0D,F +FF0E..FF0F,F +FF10..FF19,F +FF1A..FF1B,F +FF1C..FF1E,F +FF1F..FF20,F +FF21..FF3A,F +FF3B,F +FF3C,F +FF3D,F +FF3E,F +FF3F,F +FF40,F +FF41..FF5A,F +FF5B,F +FF5C,F +FF5D,F +FF5E,F +FF5F,F +FF60,F +FFE0..FFE1,F +FFE2,F +FFE3,F +FFE4,F +FFE5..FFE6,F +FFFD,A +16FE0..16FE1,W +17000..187F1,W +18800..18AF2,W +1B000..1B0FF,W +1B100..1B11E,W +1B170..1B2FB,W +1F004,W +1F0CF,W +1F100..1F10A,A +1F110..1F12D,A +1F130..1F169,A +1F170..1F18D,A +1F18E,W +1F18F..1F190,A +1F191..1F19A,W +1F19B..1F1AC,A +1F200..1F202,W +1F210..1F23B,W +1F240..1F248,W +1F250..1F251,W +1F260..1F265,W +1F300..1F320,W +1F32D..1F335,W +1F337..1F37C,W +1F37E..1F393,W +1F3A0..1F3CA,W +1F3CF..1F3D3,W +1F3E0..1F3F0,W +1F3F4,W +1F3F8..1F3FA,W +1F3FB..1F3FF,W +1F400..1F43E,W +1F440,W +1F442..1F4FC,W +1F4FF..1F53D,W +1F54B..1F54E,W +1F550..1F567,W +1F57A,W +1F595..1F596,W +1F5A4,W +1F5FB..1F5FF,W +1F600..1F64F,W +1F680..1F6C5,W +1F6CC,W +1F6D0..1F6D2,W +1F6EB..1F6EC,W +1F6F4..1F6F9,W +1F910..1F93E,W +1F940..1F970,W +1F973..1F976,W +1F97A,W +1F97C..1F9A2,W +1F9B0..1F9B9,W +1F9C0..1F9C2,W +1F9D0..1F9FF,W +20000..2A6D6,W +2A6D7..2A6FF,W +2A700..2B734,W +2B735..2B73F,W +2B740..2B81D,W +2B81E..2B81F,W +2B820..2CEA1,W +2CEA2..2CEAF,W +2CEB0..2EBE0,W +2EBE1..2F7FF,W +2F800..2FA1D,W +2FA1E..2FA1F,W +2FA20..2FFFD,W +30000..3FFFD,W +E0100..E01EF,A +F0000..FFFFD,A +100000..10FFFD,A \ No newline at end of file diff --git a/src/test/java/net/seesharpsoft/intellij/plugins/csv/CsvBasePlatformTestCase.java b/src/test/java/net/seesharpsoft/intellij/plugins/csv/CsvBasePlatformTestCase.java index c8f5de46..82c94a27 100644 --- a/src/test/java/net/seesharpsoft/intellij/plugins/csv/CsvBasePlatformTestCase.java +++ b/src/test/java/net/seesharpsoft/intellij/plugins/csv/CsvBasePlatformTestCase.java @@ -2,7 +2,7 @@ import com.intellij.testFramework.fixtures.BasePlatformTestCase; -public class CsvBasePlatformTestCase extends BasePlatformTestCase { +public abstract class CsvBasePlatformTestCase extends BasePlatformTestCase { @Override protected void setUp() throws Exception { // TODO figure out "Must be precomputed" issue! diff --git a/src/test/java/net/seesharpsoft/intellij/plugins/csv/actions/CsvActionTestBase.java b/src/test/java/net/seesharpsoft/intellij/plugins/csv/actions/CsvActionTestBase.java index f122c808..324e21cb 100644 --- a/src/test/java/net/seesharpsoft/intellij/plugins/csv/actions/CsvActionTestBase.java +++ b/src/test/java/net/seesharpsoft/intellij/plugins/csv/actions/CsvActionTestBase.java @@ -1,15 +1,17 @@ package net.seesharpsoft.intellij.plugins.csv.actions; import com.intellij.openapi.actionSystem.AnAction; +import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.Presentation; import com.intellij.openapi.actionSystem.ex.ActionUtil; -import com.intellij.testFramework.TestActionEvent; import com.intellij.testFramework.fixtures.CodeInsightTestFixture; import net.seesharpsoft.intellij.plugins.csv.CsvBasePlatformTestCase; import net.seesharpsoft.intellij.plugins.csv.components.CsvFileAttributes; import org.jetbrains.annotations.NotNull; -public class CsvActionTestBase extends CsvBasePlatformTestCase { +import static com.intellij.testFramework.TestActionEvent.createTestEvent; + +public abstract class CsvActionTestBase extends CsvBasePlatformTestCase { @Override protected String getTestDataPath() { @@ -23,10 +25,8 @@ protected void tearDown() throws Exception { } @NotNull - public Presentation testActionGroup(@NotNull AnAction action, CodeInsightTestFixture myFixture) { - // TODO this function is used instead of myFixture.testAction, due to an error with respect to missing component in datacontext -// return myFixture.testAction(action); - TestActionEvent e = new TestActionEvent(action); + public Presentation doTestActionGroup(@NotNull AnAction action, CodeInsightTestFixture myFixture) { + AnActionEvent e = createTestEvent(action); if (ActionUtil.lastUpdateAndCheckDumb(action, e, true)) { action.update(e); } diff --git a/src/test/java/net/seesharpsoft/intellij/plugins/csv/actions/CsvChangeEscapeCharacterActionTest.java b/src/test/java/net/seesharpsoft/intellij/plugins/csv/actions/CsvChangeEscapeCharacterActionTest.java index cc7e3451..15821c9e 100644 --- a/src/test/java/net/seesharpsoft/intellij/plugins/csv/actions/CsvChangeEscapeCharacterActionTest.java +++ b/src/test/java/net/seesharpsoft/intellij/plugins/csv/actions/CsvChangeEscapeCharacterActionTest.java @@ -9,7 +9,7 @@ public class CsvChangeEscapeCharacterActionTest extends CsvActionTestBase { public void testActionGroupVisibilityForCsv() { myFixture.configureByFiles("CommaSeparated.csv"); - Presentation presentation = testActionGroup(new CsvChangeEscapeCharacterActionGroup(), myFixture); + Presentation presentation = doTestActionGroup(new CsvChangeEscapeCharacterActionGroup(), myFixture); assertTrue(presentation.isVisible()); assertTrue(presentation.isEnabled()); } @@ -17,7 +17,7 @@ public void testActionGroupVisibilityForCsv() { public void testActionGroupVisibilityForTsv() { myFixture.configureByFiles("TabSeparated.tsv"); - Presentation presentation = testActionGroup(new CsvChangeEscapeCharacterActionGroup(), myFixture); + Presentation presentation = doTestActionGroup(new CsvChangeEscapeCharacterActionGroup(), myFixture); assertTrue(presentation.isVisible()); assertTrue(presentation.isEnabled()); } diff --git a/src/test/java/net/seesharpsoft/intellij/plugins/csv/actions/CsvChangeSeparatorActionTest.java b/src/test/java/net/seesharpsoft/intellij/plugins/csv/actions/CsvChangeSeparatorActionTest.java index 2ce3f199..55b46eaf 100644 --- a/src/test/java/net/seesharpsoft/intellij/plugins/csv/actions/CsvChangeSeparatorActionTest.java +++ b/src/test/java/net/seesharpsoft/intellij/plugins/csv/actions/CsvChangeSeparatorActionTest.java @@ -9,7 +9,7 @@ public class CsvChangeSeparatorActionTest extends CsvActionTestBase { public void testActionGroupVisibilityForCsv() { myFixture.configureByFiles("CommaSeparated.csv"); - Presentation presentation = testActionGroup(new CsvChangeSeparatorActionGroup(), myFixture); + Presentation presentation = doTestActionGroup(new CsvChangeSeparatorActionGroup(), myFixture); assertTrue(presentation.isVisible()); assertTrue(presentation.isEnabled()); } @@ -17,7 +17,7 @@ public void testActionGroupVisibilityForCsv() { public void testActionGroupVisibilityForTsv() { myFixture.configureByFiles("TabSeparated.tsv"); - Presentation presentation = testActionGroup(new CsvChangeSeparatorActionGroup(), myFixture); + Presentation presentation = doTestActionGroup(new CsvChangeSeparatorActionGroup(), myFixture); assertFalse(presentation.isVisible()); assertFalse(presentation.isEnabled()); } diff --git a/src/test/java/net/seesharpsoft/intellij/plugins/csv/editor/CsvFileEditorTest.java b/src/test/java/net/seesharpsoft/intellij/plugins/csv/editor/CsvFileEditorTest.java index 11c79c34..7a078242 100644 --- a/src/test/java/net/seesharpsoft/intellij/plugins/csv/editor/CsvFileEditorTest.java +++ b/src/test/java/net/seesharpsoft/intellij/plugins/csv/editor/CsvFileEditorTest.java @@ -13,6 +13,8 @@ import org.jdom.Element; import org.jetbrains.annotations.NotNull; +import java.util.List; + public class CsvFileEditorTest extends CsvBasePlatformTestCase { @Override @@ -28,30 +30,30 @@ protected void setUp() throws Exception { } protected void disposeTextEditor(FileEditor fileEditor) { - FileEditorProvider[] fileEditorProviders = FileEditorProviderManager.getInstance().getProviders(myFixture.getProject(), myFixture.getFile().getVirtualFile()); - fileEditorProviders[1].disposeEditor(fileEditor); + List fileEditorProviders = FileEditorProviderManager.getInstance().getProviderList(myFixture.getProject(), myFixture.getFile().getVirtualFile()); + fileEditorProviders.get(0).disposeEditor(fileEditor); } public void testCsvFileEditorProviderIsAvailableAndHasCorrectNameAndPolicy() { - FileEditorProvider[] fileEditorProviders = FileEditorProviderManager.getInstance().getProviders(myFixture.getProject(), myFixture.getFile().getVirtualFile()); - assertEquals(2, fileEditorProviders.length); - assertInstanceOf(fileEditorProviders[1], CsvFileEditorProvider.class); + List fileEditorProviders = FileEditorProviderManager.getInstance().getProviderList(myFixture.getProject(), myFixture.getFile().getVirtualFile()); + assertEquals(2, fileEditorProviders.size()); + assertInstanceOf(fileEditorProviders.get(0), CsvFileEditorProvider.class); - FileEditorProvider fileEditorProvider = fileEditorProviders[1]; + FileEditorProvider fileEditorProvider = fileEditorProviders.get(0); assertEquals(CsvFileEditorProvider.EDITOR_TYPE_ID, fileEditorProvider.getEditorTypeId()); - assertEquals(FileEditorPolicy.PLACE_AFTER_DEFAULT_EDITOR, fileEditorProvider.getPolicy()); + assertEquals(FileEditorPolicy.HIDE_DEFAULT_EDITOR, fileEditorProvider.getPolicy()); CsvEditorSettings csvEditorSettings = CsvEditorSettings.getInstance(); csvEditorSettings.setEditorPrio(CsvEditorSettings.EditorPrio.TEXT_ONLY); assertEquals(FileEditorPolicy.HIDE_DEFAULT_EDITOR, fileEditorProvider.getPolicy()); - csvEditorSettings.setEditorPrio(CsvEditorSettings.EditorPrio.TEXT_FIRST); - assertEquals(FileEditorPolicy.HIDE_DEFAULT_EDITOR, fileEditorProvider.getPolicy()); + csvEditorSettings.setEditorPrio(CsvEditorSettings.EditorPrio.TABLE_FIRST); + assertEquals(FileEditorPolicy.PLACE_AFTER_DEFAULT_EDITOR, fileEditorProvider.getPolicy()); } public void testCsvEditorIsTextEditorWithInitialCsvEditorSettings() { - FileEditorProvider[] fileEditorProviders = FileEditorProviderManager.getInstance().getProviders(myFixture.getProject(), myFixture.getFile().getVirtualFile()); - FileEditor fileEditor = fileEditorProviders[1].createEditor(myFixture.getProject(), myFixture.getFile().getVirtualFile()); + List fileEditorProviders = FileEditorProviderManager.getInstance().getProviderList(myFixture.getProject(), myFixture.getFile().getVirtualFile()); + FileEditor fileEditor = fileEditorProviders.get(0).createEditor(myFixture.getProject(), myFixture.getFile().getVirtualFile()); assertInstanceOf(fileEditor, TextEditor.class); TextEditor textEditor = (TextEditor) fileEditor; @@ -65,8 +67,8 @@ public void testCsvEditorIsTextEditorWithInitialCsvEditorSettings() { } private TextEditor getCurrentTextEditor() { - FileEditorProvider[] fileEditorProviders = FileEditorProviderManager.getInstance().getProviders(myFixture.getProject(), myFixture.getFile().getVirtualFile()); - return (TextEditor) fileEditorProviders[1].createEditor(myFixture.getProject(), myFixture.getFile().getVirtualFile()); + List fileEditorProviders = FileEditorProviderManager.getInstance().getProviderList(myFixture.getProject(), myFixture.getFile().getVirtualFile()); + return (TextEditor) fileEditorProviders.get(0).createEditor(myFixture.getProject(), myFixture.getFile().getVirtualFile()); } public void testCsvEditorSettingsAreApplied() { @@ -86,8 +88,8 @@ public void testCsvEditorSettingsAreApplied() { public void testCsvEditorStateReadsAndWritesStates() { TextEditor textEditor = getCurrentTextEditor(); - FileEditorProvider[] fileEditorProviders = FileEditorProviderManager.getInstance().getProviders(myFixture.getProject(), myFixture.getFile().getVirtualFile()); - CsvFileEditorProvider fileEditorProvider = (CsvFileEditorProvider) fileEditorProviders[1]; + List fileEditorProviders = FileEditorProviderManager.getInstance().getProviderList(myFixture.getProject(), myFixture.getFile().getVirtualFile()); + CsvFileEditorProvider fileEditorProvider = (CsvFileEditorProvider) fileEditorProviders.get(0); Element dummy = new Element("dummy"); FileEditorState state = fileEditorProvider.readState(dummy, this.getProject(), myFixture.getFile().getVirtualFile()); diff --git a/src/test/java/net/seesharpsoft/intellij/plugins/csv/editor/table/CsvTableEditorProviderTest.java b/src/test/java/net/seesharpsoft/intellij/plugins/csv/editor/table/CsvTableEditorProviderTest.java index bfa220aa..ee63b722 100644 --- a/src/test/java/net/seesharpsoft/intellij/plugins/csv/editor/table/CsvTableEditorProviderTest.java +++ b/src/test/java/net/seesharpsoft/intellij/plugins/csv/editor/table/CsvTableEditorProviderTest.java @@ -9,6 +9,7 @@ import net.seesharpsoft.intellij.plugins.csv.settings.CsvEditorSettings; import org.jdom.Element; +import java.util.List; import java.util.Objects; public class CsvTableEditorProviderTest extends CsvBasePlatformTestCase { @@ -26,28 +27,28 @@ protected void setUp() throws Exception { } public void testCsvTableEditorProviderIsAvailableAndHasCorrectNameAndPolicy() { - FileEditorProvider[] fileEditorProviders = FileEditorProviderManager.getInstance().getProviders(getProject(), myFixture.getFile().getVirtualFile()); - assertEquals(2, fileEditorProviders.length); - assertInstanceOf(fileEditorProviders[0], CsvTableEditorProvider.class); + List fileEditorProviders = FileEditorProviderManager.getInstance().getProviderList(myFixture.getProject(), myFixture.getFile().getVirtualFile()); + assertEquals(2, fileEditorProviders.size()); + assertInstanceOf(fileEditorProviders.get(1), CsvTableEditorProvider.class); - FileEditorProvider fileEditorProvider = fileEditorProviders[0]; + FileEditorProvider fileEditorProvider = fileEditorProviders.get(1); assertEquals(CsvTableEditorProvider.EDITOR_TYPE_ID, fileEditorProvider.getEditorTypeId()); - assertEquals(FileEditorPolicy.HIDE_DEFAULT_EDITOR, fileEditorProvider.getPolicy()); - assertEquals(true, fileEditorProvider.accept(getProject(), myFixture.getFile().getVirtualFile())); + assertEquals(FileEditorPolicy.PLACE_AFTER_DEFAULT_EDITOR, fileEditorProvider.getPolicy()); + assertTrue(fileEditorProvider.accept(getProject(), myFixture.getFile().getVirtualFile())); CsvEditorSettings csvEditorSettings = CsvEditorSettings.getInstance(); csvEditorSettings.setEditorPrio(CsvEditorSettings.EditorPrio.TEXT_ONLY); assertEquals(FileEditorPolicy.PLACE_AFTER_DEFAULT_EDITOR, fileEditorProvider.getPolicy()); - assertEquals(false, fileEditorProvider.accept(getProject(), myFixture.getFile().getVirtualFile())); + assertFalse(fileEditorProvider.accept(getProject(), myFixture.getFile().getVirtualFile())); csvEditorSettings.setEditorPrio(CsvEditorSettings.EditorPrio.TEXT_FIRST); assertEquals(FileEditorPolicy.PLACE_AFTER_DEFAULT_EDITOR, fileEditorProvider.getPolicy()); - assertEquals(true, fileEditorProvider.accept(getProject(), myFixture.getFile().getVirtualFile())); + assertTrue(fileEditorProvider.accept(getProject(), myFixture.getFile().getVirtualFile())); } public void testCsvTableEditorCreatesInstanceOfCsvTableEditor() { - FileEditorProvider[] fileEditorProviders = FileEditorProviderManager.getInstance().getProviders(getProject(), myFixture.getFile().getVirtualFile()); - FileEditorProvider fileEditorProvider = fileEditorProviders[0]; + List fileEditorProviders = FileEditorProviderManager.getInstance().getProviderList(myFixture.getProject(), myFixture.getFile().getVirtualFile()); + FileEditorProvider fileEditorProvider = fileEditorProviders.get(1); FileEditor fileEditor = fileEditorProvider.createEditor(getProject(), myFixture.getFile().getVirtualFile()); assertInstanceOf(fileEditor, CsvTableEditor.class); @@ -56,8 +57,8 @@ public void testCsvTableEditorCreatesInstanceOfCsvTableEditor() { } public void testWriteAndReadTableEditorState() { - FileEditorProvider[] fileEditorProviders = FileEditorProviderManager.getInstance().getProviders(getProject(), myFixture.getFile().getVirtualFile()); - FileEditorProvider fileEditorProvider = fileEditorProviders[0]; + List fileEditorProviders = FileEditorProviderManager.getInstance().getProviderList(myFixture.getProject(), myFixture.getFile().getVirtualFile()); + FileEditorProvider fileEditorProvider = fileEditorProviders.get(1); CsvTableEditorState editorState = new CsvTableEditorState(); editorState.setColumnWidths(new int[]{120, 32, 9}); diff --git a/src/test/java/net/seesharpsoft/intellij/plugins/csv/editor/table/CsvTableModelBaseTest.java b/src/test/java/net/seesharpsoft/intellij/plugins/csv/editor/table/CsvTableModelBaseTest.java index 60cb20fe..eddad7d7 100644 --- a/src/test/java/net/seesharpsoft/intellij/plugins/csv/editor/table/CsvTableModelBaseTest.java +++ b/src/test/java/net/seesharpsoft/intellij/plugins/csv/editor/table/CsvTableModelBaseTest.java @@ -65,7 +65,7 @@ protected void autoCheck(Consumer runnable, String testName, Stri model.dispose(); Document doc = this.myFixture.getDocument(getPsiFile()); - PsiDocumentManager.getInstance(getProject()).doPostponedOperationsAndUnblockDocument(doc); +// PsiDocumentManager.getInstance(getProject()).doPostponedOperationsAndUnblockDocument(doc); PsiTestUtil.checkFileStructure(getPsiFile()); myFixture.checkResultByFile(relativeTargetPath + String.format("/%s.csv", testName)); diff --git a/src/test/java/net/seesharpsoft/intellij/plugins/csv/editor/table/swing/CsvTableEditorCustomFileEndLineBreak.java b/src/test/java/net/seesharpsoft/intellij/plugins/csv/editor/table/swing/CsvTableEditorCustomFileEndLineBreak.java deleted file mode 100644 index 5c35b0c8..00000000 --- a/src/test/java/net/seesharpsoft/intellij/plugins/csv/editor/table/swing/CsvTableEditorCustomFileEndLineBreak.java +++ /dev/null @@ -1,39 +0,0 @@ -package net.seesharpsoft.intellij.plugins.csv.editor.table.swing; - -import net.seesharpsoft.intellij.plugins.csv.editor.table.CsvTableModel; -import net.seesharpsoft.intellij.plugins.csv.settings.CsvEditorSettings; - -public class CsvTableEditorCustomFileEndLineBreak extends CsvTableEditorSwingTestBase { - - @Override - protected String getTestDataPath() { - return "./src/test/resources/fileendlinebreak"; - } - - @Override - protected void initializeEditorSettings(CsvEditorSettings instance) { - super.initializeEditorSettings(instance); - instance.setFileEndLineBreak(true); - } - - public void testTableContentChangeWithoutChange() { - assertFalse(fileEditor.isModified()); - } - - public void testTableContent() { - CsvTableModel tableModel = fileEditor.getTableModel(); - assertEquals(2, tableModel.getColumnCount()); - assertEquals(5, tableModel.getRowCount()); - - assertEquals("Header1", tableModel.getValue(0, 0)); - assertEquals("Header2", tableModel.getValue(0, 1)); - assertEquals("", tableModel.getValue(1, 0)); - assertEquals("", tableModel.getValue(1, 1)); - assertEquals("after the empty line", tableModel.getValue(2, 0)); - assertEquals("", tableModel.getValue(2, 1)); - assertEquals("before the previous last line", tableModel.getValue(3, 0)); - assertEquals("", tableModel.getValue(3, 1)); - assertEquals("", tableModel.getValue(4, 0)); - assertEquals("", tableModel.getValue(4, 1)); - } -} diff --git a/src/test/java/net/seesharpsoft/intellij/plugins/csv/editor/table/swing/CsvTableEditorSwingTestBase.java b/src/test/java/net/seesharpsoft/intellij/plugins/csv/editor/table/swing/CsvTableEditorSwingTestBase.java index e5cfa780..8fda6303 100644 --- a/src/test/java/net/seesharpsoft/intellij/plugins/csv/editor/table/swing/CsvTableEditorSwingTestBase.java +++ b/src/test/java/net/seesharpsoft/intellij/plugins/csv/editor/table/swing/CsvTableEditorSwingTestBase.java @@ -46,6 +46,5 @@ protected CsvTableModel getTableModel() { protected void initializeEditorSettings(CsvEditorSettings instance) { instance.loadState(new CsvEditorSettings.OptionSet()); - instance.setFileEndLineBreak(false); } } diff --git a/src/test/java/net/seesharpsoft/intellij/plugins/csv/formatter/CsvFormatterTest.java b/src/test/java/net/seesharpsoft/intellij/plugins/csv/formatter/CsvFormatterTest.java index dadc59a5..b6238902 100644 --- a/src/test/java/net/seesharpsoft/intellij/plugins/csv/formatter/CsvFormatterTest.java +++ b/src/test/java/net/seesharpsoft/intellij/plugins/csv/formatter/CsvFormatterTest.java @@ -2,6 +2,7 @@ import com.intellij.openapi.command.WriteCommandAction; import com.intellij.psi.codeStyle.CodeStyleManager; +import com.intellij.psi.codeStyle.CodeStyleSettings; import com.intellij.psi.codeStyle.CodeStyleSettingsManager; import net.seesharpsoft.intellij.plugins.csv.CsvBasePlatformTestCase; import net.seesharpsoft.intellij.plugins.csv.settings.CsvCodeStyleSettings; @@ -10,6 +11,7 @@ import java.io.PrintWriter; import java.time.Instant; import java.util.Arrays; +import java.util.Collections; import java.util.Properties; public class CsvFormatterTest extends CsvBasePlatformTestCase { @@ -26,13 +28,24 @@ protected String getTestDataPath() { private void initCsvCodeStyleSettings(boolean SPACE_BEFORE_SEPARATOR, boolean SPACE_AFTER_SEPARATOR, boolean TRIM_LEADING_WHITE_SPACES, - boolean TRIM_TRAILING_WHITE_SPACES) { -// CsvCodeStyleSettings csvCodeStyleSettings = CodeStyleSettingsManager.getSettings(getProject()).getCustomSettings(CsvCodeStyleSettings.class); - CsvCodeStyleSettings csvCodeStyleSettings = CodeStyleSettingsManager.getInstance(getProject()).getTemporarySettings().getCustomSettings(CsvCodeStyleSettings.class); + boolean TRIM_TRAILING_WHITE_SPACES, + boolean TABULARIZE, + boolean WHITE_SPACES_OUTSIDE_QUOTES, + boolean LEADING_WHITE_SPACES, + boolean ENABLE_WIDE_CHARACTER_DETECTION, + boolean TREAT_AMBIGUOUS_CHARACTERS_AS_WIDE) { + CodeStyleSettings codeStyleSettings = CodeStyleSettingsManager.getInstance(getProject()).getTemporarySettings(); + assert codeStyleSettings != null; + CsvCodeStyleSettings csvCodeStyleSettings = codeStyleSettings.getCustomSettings(CsvCodeStyleSettings.class); csvCodeStyleSettings.SPACE_BEFORE_SEPARATOR = SPACE_BEFORE_SEPARATOR; csvCodeStyleSettings.SPACE_AFTER_SEPARATOR = SPACE_AFTER_SEPARATOR; csvCodeStyleSettings.TRIM_LEADING_WHITE_SPACES = TRIM_LEADING_WHITE_SPACES; csvCodeStyleSettings.TRIM_TRAILING_WHITE_SPACES = TRIM_TRAILING_WHITE_SPACES; + csvCodeStyleSettings.TABULARIZE = TABULARIZE; + csvCodeStyleSettings.WHITE_SPACES_OUTSIDE_QUOTES = WHITE_SPACES_OUTSIDE_QUOTES; + csvCodeStyleSettings.LEADING_WHITE_SPACES = LEADING_WHITE_SPACES; + csvCodeStyleSettings.ENABLE_WIDE_CHARACTER_DETECTION = ENABLE_WIDE_CHARACTER_DETECTION; + csvCodeStyleSettings.TREAT_AMBIGUOUS_CHARACTERS_AS_WIDE = TREAT_AMBIGUOUS_CHARACTERS_AS_WIDE; } private void initCsvCodeStyleSettings(int binarySettings) { @@ -40,7 +53,12 @@ private void initCsvCodeStyleSettings(int binarySettings) { (binarySettings & 1) != 0, (binarySettings & 2) != 0, (binarySettings & 4) != 0, - (binarySettings & 8) != 0); + (binarySettings & 8) != 0, + (binarySettings & 16) != 0, + (binarySettings & 32) != 0, + (binarySettings & 64) != 0, + (binarySettings & 128) != 0, + (binarySettings & 256) != 0); } private void executeTestConfiguration(int binarySettings, String relativeTargetPath) { @@ -58,7 +76,7 @@ private void executeTestConfiguration(int binarySettings, String relativeTargetP WriteCommandAction.writeCommandAction(getProject()).run(() -> { CodeStyleManager.getInstance(getProject()).reformatText(myFixture.getFile(), - Arrays.asList(myFixture.getFile().getTextRange())); + Collections.singletonList(myFixture.getFile().getTextRange())); }); if (checkResults) { myFixture.checkResultByFile(relativeTargetPath + String.format("/TestResult%08d.csv", binarySettings)); @@ -74,7 +92,7 @@ public void testManualFormattedFiles() throws Exception { } public void testGeneratedFormattedFiles() throws Exception { - for (int i = 0; i < 16; ++i) { + for (int i = 0; i < 128; ++i) { tearDown(); setUp(); executeTestConfiguration(i, "/generated"); @@ -82,11 +100,11 @@ public void testGeneratedFormattedFiles() throws Exception { } public void testFormattedFilesSingle() throws Exception { - executeTestConfiguration(1, "/header/1"); + executeTestConfiguration(16, "/header/4"); } public void testSpecialFormattedFiles() throws Exception { - int[] optionsToTest = new int[]{0, 1}; + int[] optionsToTest = new int[]{0, 1, 16, 17, 18, 19, 48, 80, 112}; for (int i = 0; i < optionsToTest.length; ++i) { tearDown(); setUp(); @@ -94,8 +112,26 @@ public void testSpecialFormattedFiles() throws Exception { } } + public void testWideCharacterFormattedFiles() throws Exception { + int[] optionsToTest = new int[]{128, 129, 144, 145, 146, 147, 176, 208, 240}; + for (int i = 0; i < optionsToTest.length; ++i) { + tearDown(); + setUp(); + executeTestConfiguration(optionsToTest[i], "/widechar"); + } + } + + public void testWideCharacterAmbiguousFormattedFiles() throws Exception { + int[] optionsToTest = new int[]{384, 400, 496}; + for (int i = 0; i < optionsToTest.length; ++i) { + tearDown(); + setUp(); + executeTestConfiguration(optionsToTest[i], "/widecharambiguous"); + } + } + public void testHeader() throws Exception { - int[] optionsToTest = new int[]{0, 1, 4}; + int[] optionsToTest = new int[]{0, 1, 4, 16, 17, 18, 19, 48, 80, 112}; for (int subTest = 1; subTest < 7; ++subTest) { for (int i = 0; i < optionsToTest.length; ++i) { tearDown(); @@ -128,7 +164,7 @@ public void _testRuntimeSimple() throws Exception { * @throws Exception */ public void _testResultGenerator() throws Exception { - for (int binarySettings = 0; binarySettings < 16; ++binarySettings) { + for (int binarySettings = 0; binarySettings < 128; ++binarySettings) { tearDown(); setUp(); diff --git a/src/test/java/net/seesharpsoft/intellij/plugins/csv/settings/CsvEditorSettingsProviderTest.java b/src/test/java/net/seesharpsoft/intellij/plugins/csv/settings/CsvEditorSettingsProviderTest.java index 5afef282..fd89d848 100644 --- a/src/test/java/net/seesharpsoft/intellij/plugins/csv/settings/CsvEditorSettingsProviderTest.java +++ b/src/test/java/net/seesharpsoft/intellij/plugins/csv/settings/CsvEditorSettingsProviderTest.java @@ -70,7 +70,6 @@ public void testResetAndModified() throws ConfigurationException { csvEditorSettings.setTabHighlightColor(Color.BLACK); csvEditorSettings.setQuotingEnforced(true); csvEditorSettings.setZeroBasedColumnNumbering(true); - csvEditorSettings.setFileEndLineBreak(false); csvEditorSettings.setTableDefaultColumnWidth(500); csvEditorSettings.setTableAutoMaxColumnWidth(1000); csvEditorSettings.setDefaultEscapeCharacter(CsvEscapeCharacter.BACKSLASH); @@ -92,7 +91,6 @@ public void testResetAndModified() throws ConfigurationException { assertEquals(Color.BLACK, csvEditorSettings.getTabHighlightColor()); assertEquals(true, csvEditorSettings.isQuotingEnforced()); assertEquals(true, csvEditorSettings.isZeroBasedColumnNumbering()); - assertEquals(false, csvEditorSettings.isFileEndLineBreak()); assertEquals(500, csvEditorSettings.getTableDefaultColumnWidth()); assertEquals(1000, csvEditorSettings.getTableAutoMaxColumnWidth()); assertEquals(CsvEscapeCharacter.BACKSLASH, csvEditorSettings.getDefaultEscapeCharacter()); @@ -118,7 +116,6 @@ public void testApply() throws ConfigurationException { csvEditorSettings.setTabHighlightColor(Color.BLACK); csvEditorSettings.setQuotingEnforced(true); csvEditorSettings.setZeroBasedColumnNumbering(true); - csvEditorSettings.setFileEndLineBreak(false); csvEditorSettings.setTableDefaultColumnWidth(500); csvEditorSettings.setTableAutoMaxColumnWidth(1000); csvEditorSettings.setDefaultEscapeCharacter(CsvEscapeCharacter.BACKSLASH); @@ -140,7 +137,6 @@ public void testApply() throws ConfigurationException { assertEquals(freshOptionSet.TAB_HIGHLIGHT_COLOR, "" + csvEditorSettings.getTabHighlightColor().getRGB()); assertEquals(freshOptionSet.QUOTING_ENFORCED, csvEditorSettings.isQuotingEnforced()); assertEquals(freshOptionSet.ZERO_BASED_COLUMN_NUMBERING, csvEditorSettings.isZeroBasedColumnNumbering()); - assertEquals(freshOptionSet.FILE_END_LINE_BREAK, csvEditorSettings.isFileEndLineBreak()); assertEquals(freshOptionSet.TABLE_DEFAULT_COLUMN_WIDTH, csvEditorSettings.getTableDefaultColumnWidth()); assertEquals(freshOptionSet.TABLE_AUTO_MAX_COLUMN_WIDTH, csvEditorSettings.getTableAutoMaxColumnWidth()); assertEquals(freshOptionSet.DEFAULT_ESCAPE_CHARACTER, csvEditorSettings.getDefaultEscapeCharacter()); diff --git a/src/test/resources/fileendlinebreak/TableEditorFile.csv b/src/test/resources/fileendlinebreak/TableEditorFile.csv deleted file mode 100644 index cb96b854..00000000 --- a/src/test/resources/fileendlinebreak/TableEditorFile.csv +++ /dev/null @@ -1,5 +0,0 @@ -Header1,Header2 - -after the empty line -before the previous last line - diff --git a/src/test/resources/formatter/generated/TestResult00000016.csv b/src/test/resources/formatter/generated/TestResult00000016.csv new file mode 100644 index 00000000..5fa49953 --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000016.csv @@ -0,0 +1,7 @@ +1 ,"Eldon Base for stackable storage shelf, platinum ",Muhammed MacIntyre,3 ,-213.25,38.94 +2 ,"1.7 Cubic Foot Compact ""Cube"" Office Refrigerators",Barry French ,293,457.81 ,208.16 + +3 ,"Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl ",Barry French ,293,46.71 ,8.69 +4 ,R380 ,Clay Rozendal ,483,1198.97,195.99 +3.1 +5 ,Holmes HEPA Air Purifier ,Carlos Soltero ,515,30.94 ,21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000017.csv b/src/test/resources/formatter/generated/TestResult00000017.csv new file mode 100644 index 00000000..deed1a29 --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000017.csv @@ -0,0 +1,7 @@ +1 ,"Eldon Base for stackable storage shelf, platinum " ,Muhammed MacIntyre ,3 ,-213.25 ,38.94 +2 ,"1.7 Cubic Foot Compact ""Cube"" Office Refrigerators" ,Barry French ,293 ,457.81 ,208.16 + +3 ,"Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl " ,Barry French ,293 ,46.71 ,8.69 +4 ,R380 ,Clay Rozendal ,483 ,1198.97 ,195.99 +3.1 +5 ,Holmes HEPA Air Purifier ,Carlos Soltero ,515 ,30.94 ,21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000018.csv b/src/test/resources/formatter/generated/TestResult00000018.csv new file mode 100644 index 00000000..d53e9f25 --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000018.csv @@ -0,0 +1,7 @@ +1 , "Eldon Base for stackable storage shelf, platinum ", Muhammed MacIntyre, 3 , -213.25, 38.94 +2 , "1.7 Cubic Foot Compact ""Cube"" Office Refrigerators", Barry French , 293, 457.81 , 208.16 + +3 , "Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl ", Barry French , 293, 46.71 , 8.69 +4 , R380 , Clay Rozendal , 483, 1198.97, 195.99 +3.1 +5 , Holmes HEPA Air Purifier , Carlos Soltero , 515, 30.94 , 21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000019.csv b/src/test/resources/formatter/generated/TestResult00000019.csv new file mode 100644 index 00000000..beacf959 --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000019.csv @@ -0,0 +1,7 @@ +1 , "Eldon Base for stackable storage shelf, platinum " , Muhammed MacIntyre , 3 , -213.25 , 38.94 +2 , "1.7 Cubic Foot Compact ""Cube"" Office Refrigerators" , Barry French , 293 , 457.81 , 208.16 + +3 , "Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl " , Barry French , 293 , 46.71 , 8.69 +4 , R380 , Clay Rozendal , 483 , 1198.97 , 195.99 +3.1 +5 , Holmes HEPA Air Purifier , Carlos Soltero , 515 , 30.94 , 21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000020.csv b/src/test/resources/formatter/generated/TestResult00000020.csv new file mode 100644 index 00000000..5fa49953 --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000020.csv @@ -0,0 +1,7 @@ +1 ,"Eldon Base for stackable storage shelf, platinum ",Muhammed MacIntyre,3 ,-213.25,38.94 +2 ,"1.7 Cubic Foot Compact ""Cube"" Office Refrigerators",Barry French ,293,457.81 ,208.16 + +3 ,"Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl ",Barry French ,293,46.71 ,8.69 +4 ,R380 ,Clay Rozendal ,483,1198.97,195.99 +3.1 +5 ,Holmes HEPA Air Purifier ,Carlos Soltero ,515,30.94 ,21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000021.csv b/src/test/resources/formatter/generated/TestResult00000021.csv new file mode 100644 index 00000000..deed1a29 --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000021.csv @@ -0,0 +1,7 @@ +1 ,"Eldon Base for stackable storage shelf, platinum " ,Muhammed MacIntyre ,3 ,-213.25 ,38.94 +2 ,"1.7 Cubic Foot Compact ""Cube"" Office Refrigerators" ,Barry French ,293 ,457.81 ,208.16 + +3 ,"Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl " ,Barry French ,293 ,46.71 ,8.69 +4 ,R380 ,Clay Rozendal ,483 ,1198.97 ,195.99 +3.1 +5 ,Holmes HEPA Air Purifier ,Carlos Soltero ,515 ,30.94 ,21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000022.csv b/src/test/resources/formatter/generated/TestResult00000022.csv new file mode 100644 index 00000000..d53e9f25 --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000022.csv @@ -0,0 +1,7 @@ +1 , "Eldon Base for stackable storage shelf, platinum ", Muhammed MacIntyre, 3 , -213.25, 38.94 +2 , "1.7 Cubic Foot Compact ""Cube"" Office Refrigerators", Barry French , 293, 457.81 , 208.16 + +3 , "Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl ", Barry French , 293, 46.71 , 8.69 +4 , R380 , Clay Rozendal , 483, 1198.97, 195.99 +3.1 +5 , Holmes HEPA Air Purifier , Carlos Soltero , 515, 30.94 , 21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000023.csv b/src/test/resources/formatter/generated/TestResult00000023.csv new file mode 100644 index 00000000..beacf959 --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000023.csv @@ -0,0 +1,7 @@ +1 , "Eldon Base for stackable storage shelf, platinum " , Muhammed MacIntyre , 3 , -213.25 , 38.94 +2 , "1.7 Cubic Foot Compact ""Cube"" Office Refrigerators" , Barry French , 293 , 457.81 , 208.16 + +3 , "Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl " , Barry French , 293 , 46.71 , 8.69 +4 , R380 , Clay Rozendal , 483 , 1198.97 , 195.99 +3.1 +5 , Holmes HEPA Air Purifier , Carlos Soltero , 515 , 30.94 , 21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000024.csv b/src/test/resources/formatter/generated/TestResult00000024.csv new file mode 100644 index 00000000..5fa49953 --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000024.csv @@ -0,0 +1,7 @@ +1 ,"Eldon Base for stackable storage shelf, platinum ",Muhammed MacIntyre,3 ,-213.25,38.94 +2 ,"1.7 Cubic Foot Compact ""Cube"" Office Refrigerators",Barry French ,293,457.81 ,208.16 + +3 ,"Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl ",Barry French ,293,46.71 ,8.69 +4 ,R380 ,Clay Rozendal ,483,1198.97,195.99 +3.1 +5 ,Holmes HEPA Air Purifier ,Carlos Soltero ,515,30.94 ,21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000025.csv b/src/test/resources/formatter/generated/TestResult00000025.csv new file mode 100644 index 00000000..deed1a29 --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000025.csv @@ -0,0 +1,7 @@ +1 ,"Eldon Base for stackable storage shelf, platinum " ,Muhammed MacIntyre ,3 ,-213.25 ,38.94 +2 ,"1.7 Cubic Foot Compact ""Cube"" Office Refrigerators" ,Barry French ,293 ,457.81 ,208.16 + +3 ,"Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl " ,Barry French ,293 ,46.71 ,8.69 +4 ,R380 ,Clay Rozendal ,483 ,1198.97 ,195.99 +3.1 +5 ,Holmes HEPA Air Purifier ,Carlos Soltero ,515 ,30.94 ,21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000026.csv b/src/test/resources/formatter/generated/TestResult00000026.csv new file mode 100644 index 00000000..d53e9f25 --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000026.csv @@ -0,0 +1,7 @@ +1 , "Eldon Base for stackable storage shelf, platinum ", Muhammed MacIntyre, 3 , -213.25, 38.94 +2 , "1.7 Cubic Foot Compact ""Cube"" Office Refrigerators", Barry French , 293, 457.81 , 208.16 + +3 , "Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl ", Barry French , 293, 46.71 , 8.69 +4 , R380 , Clay Rozendal , 483, 1198.97, 195.99 +3.1 +5 , Holmes HEPA Air Purifier , Carlos Soltero , 515, 30.94 , 21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000027.csv b/src/test/resources/formatter/generated/TestResult00000027.csv new file mode 100644 index 00000000..beacf959 --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000027.csv @@ -0,0 +1,7 @@ +1 , "Eldon Base for stackable storage shelf, platinum " , Muhammed MacIntyre , 3 , -213.25 , 38.94 +2 , "1.7 Cubic Foot Compact ""Cube"" Office Refrigerators" , Barry French , 293 , 457.81 , 208.16 + +3 , "Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl " , Barry French , 293 , 46.71 , 8.69 +4 , R380 , Clay Rozendal , 483 , 1198.97 , 195.99 +3.1 +5 , Holmes HEPA Air Purifier , Carlos Soltero , 515 , 30.94 , 21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000028.csv b/src/test/resources/formatter/generated/TestResult00000028.csv new file mode 100644 index 00000000..5fa49953 --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000028.csv @@ -0,0 +1,7 @@ +1 ,"Eldon Base for stackable storage shelf, platinum ",Muhammed MacIntyre,3 ,-213.25,38.94 +2 ,"1.7 Cubic Foot Compact ""Cube"" Office Refrigerators",Barry French ,293,457.81 ,208.16 + +3 ,"Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl ",Barry French ,293,46.71 ,8.69 +4 ,R380 ,Clay Rozendal ,483,1198.97,195.99 +3.1 +5 ,Holmes HEPA Air Purifier ,Carlos Soltero ,515,30.94 ,21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000029.csv b/src/test/resources/formatter/generated/TestResult00000029.csv new file mode 100644 index 00000000..deed1a29 --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000029.csv @@ -0,0 +1,7 @@ +1 ,"Eldon Base for stackable storage shelf, platinum " ,Muhammed MacIntyre ,3 ,-213.25 ,38.94 +2 ,"1.7 Cubic Foot Compact ""Cube"" Office Refrigerators" ,Barry French ,293 ,457.81 ,208.16 + +3 ,"Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl " ,Barry French ,293 ,46.71 ,8.69 +4 ,R380 ,Clay Rozendal ,483 ,1198.97 ,195.99 +3.1 +5 ,Holmes HEPA Air Purifier ,Carlos Soltero ,515 ,30.94 ,21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000030.csv b/src/test/resources/formatter/generated/TestResult00000030.csv new file mode 100644 index 00000000..d53e9f25 --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000030.csv @@ -0,0 +1,7 @@ +1 , "Eldon Base for stackable storage shelf, platinum ", Muhammed MacIntyre, 3 , -213.25, 38.94 +2 , "1.7 Cubic Foot Compact ""Cube"" Office Refrigerators", Barry French , 293, 457.81 , 208.16 + +3 , "Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl ", Barry French , 293, 46.71 , 8.69 +4 , R380 , Clay Rozendal , 483, 1198.97, 195.99 +3.1 +5 , Holmes HEPA Air Purifier , Carlos Soltero , 515, 30.94 , 21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000031.csv b/src/test/resources/formatter/generated/TestResult00000031.csv new file mode 100644 index 00000000..beacf959 --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000031.csv @@ -0,0 +1,7 @@ +1 , "Eldon Base for stackable storage shelf, platinum " , Muhammed MacIntyre , 3 , -213.25 , 38.94 +2 , "1.7 Cubic Foot Compact ""Cube"" Office Refrigerators" , Barry French , 293 , 457.81 , 208.16 + +3 , "Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl " , Barry French , 293 , 46.71 , 8.69 +4 , R380 , Clay Rozendal , 483 , 1198.97 , 195.99 +3.1 +5 , Holmes HEPA Air Purifier , Carlos Soltero , 515 , 30.94 , 21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000032.csv b/src/test/resources/formatter/generated/TestResult00000032.csv new file mode 100644 index 00000000..e583e810 --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000032.csv @@ -0,0 +1,7 @@ +1,"Eldon Base for stackable storage shelf, platinum", Muhammed MacIntyre ,3,-213.25 , 38.94 + 2 ," 1.7 Cubic Foot Compact ""Cube"" Office Refrigerators",Barry French, 293,457.81,208.16 + +3,"Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl ",Barry French, 293 ,46.71 ,8.69 +4 , R380 ,Clay Rozendal,483, 1198.97,195.99 +3.1 +5 ,Holmes HEPA Air Purifier,Carlos Soltero,515,30.94,21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000033.csv b/src/test/resources/formatter/generated/TestResult00000033.csv new file mode 100644 index 00000000..3e78ed49 --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000033.csv @@ -0,0 +1,7 @@ +1 ,"Eldon Base for stackable storage shelf, platinum" , Muhammed MacIntyre ,3 ,-213.25 , 38.94 + 2 ," 1.7 Cubic Foot Compact ""Cube"" Office Refrigerators" ,Barry French , 293 ,457.81 ,208.16 + +3 ,"Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl " ,Barry French , 293 ,46.71 ,8.69 +4 , R380 ,Clay Rozendal ,483 , 1198.97 ,195.99 +3.1 +5 ,Holmes HEPA Air Purifier ,Carlos Soltero ,515 ,30.94 ,21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000034.csv b/src/test/resources/formatter/generated/TestResult00000034.csv new file mode 100644 index 00000000..594c21da --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000034.csv @@ -0,0 +1,7 @@ +1, "Eldon Base for stackable storage shelf, platinum", Muhammed MacIntyre , 3, -213.25 , 38.94 + 2 , " 1.7 Cubic Foot Compact ""Cube"" Office Refrigerators", Barry French, 293, 457.81, 208.16 + +3, "Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl ", Barry French, 293 , 46.71 , 8.69 +4 , R380 , Clay Rozendal, 483, 1198.97, 195.99 +3.1 +5 , Holmes HEPA Air Purifier, Carlos Soltero, 515, 30.94, 21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000035.csv b/src/test/resources/formatter/generated/TestResult00000035.csv new file mode 100644 index 00000000..ff5fe21f --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000035.csv @@ -0,0 +1,7 @@ +1 , "Eldon Base for stackable storage shelf, platinum" , Muhammed MacIntyre , 3 , -213.25 , 38.94 + 2 , " 1.7 Cubic Foot Compact ""Cube"" Office Refrigerators" , Barry French , 293 , 457.81 , 208.16 + +3 , "Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl " , Barry French , 293 , 46.71 , 8.69 +4 , R380 , Clay Rozendal , 483 , 1198.97 , 195.99 +3.1 +5 , Holmes HEPA Air Purifier , Carlos Soltero , 515 , 30.94 , 21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000036.csv b/src/test/resources/formatter/generated/TestResult00000036.csv new file mode 100644 index 00000000..f838fd42 --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000036.csv @@ -0,0 +1,7 @@ +1,"Eldon Base for stackable storage shelf, platinum",Muhammed MacIntyre ,3,-213.25 ,38.94 +2 ," 1.7 Cubic Foot Compact ""Cube"" Office Refrigerators",Barry French,293,457.81,208.16 + +3,"Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl ",Barry French,293 ,46.71 ,8.69 +4 ,R380 ,Clay Rozendal,483,1198.97,195.99 +3.1 +5 ,Holmes HEPA Air Purifier,Carlos Soltero,515,30.94,21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000037.csv b/src/test/resources/formatter/generated/TestResult00000037.csv new file mode 100644 index 00000000..caf14cd8 --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000037.csv @@ -0,0 +1,7 @@ +1 ,"Eldon Base for stackable storage shelf, platinum" ,Muhammed MacIntyre ,3 ,-213.25 ,38.94 +2 ," 1.7 Cubic Foot Compact ""Cube"" Office Refrigerators" ,Barry French ,293 ,457.81 ,208.16 + +3 ,"Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl " ,Barry French ,293 ,46.71 ,8.69 +4 ,R380 ,Clay Rozendal ,483 ,1198.97 ,195.99 +3.1 +5 ,Holmes HEPA Air Purifier ,Carlos Soltero ,515 ,30.94 ,21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000038.csv b/src/test/resources/formatter/generated/TestResult00000038.csv new file mode 100644 index 00000000..c17fe061 --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000038.csv @@ -0,0 +1,7 @@ +1, "Eldon Base for stackable storage shelf, platinum", Muhammed MacIntyre , 3, -213.25 , 38.94 +2 , " 1.7 Cubic Foot Compact ""Cube"" Office Refrigerators", Barry French, 293, 457.81, 208.16 + +3, "Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl ", Barry French, 293 , 46.71 , 8.69 +4 , R380 , Clay Rozendal, 483, 1198.97, 195.99 +3.1 +5 , Holmes HEPA Air Purifier, Carlos Soltero, 515, 30.94, 21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000039.csv b/src/test/resources/formatter/generated/TestResult00000039.csv new file mode 100644 index 00000000..c93a85fb --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000039.csv @@ -0,0 +1,7 @@ +1 , "Eldon Base for stackable storage shelf, platinum" , Muhammed MacIntyre , 3 , -213.25 , 38.94 +2 , " 1.7 Cubic Foot Compact ""Cube"" Office Refrigerators" , Barry French , 293 , 457.81 , 208.16 + +3 , "Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl " , Barry French , 293 , 46.71 , 8.69 +4 , R380 , Clay Rozendal , 483 , 1198.97 , 195.99 +3.1 +5 , Holmes HEPA Air Purifier , Carlos Soltero , 515 , 30.94 , 21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000040.csv b/src/test/resources/formatter/generated/TestResult00000040.csv new file mode 100644 index 00000000..eeec4d82 --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000040.csv @@ -0,0 +1,7 @@ +1,"Eldon Base for stackable storage shelf, platinum", Muhammed MacIntyre,3,-213.25, 38.94 + 2," 1.7 Cubic Foot Compact ""Cube"" Office Refrigerators",Barry French, 293,457.81,208.16 + +3,"Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl ",Barry French, 293,46.71,8.69 +4, R380,Clay Rozendal,483, 1198.97,195.99 +3.1 +5,Holmes HEPA Air Purifier,Carlos Soltero,515,30.94,21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000041.csv b/src/test/resources/formatter/generated/TestResult00000041.csv new file mode 100644 index 00000000..43830086 --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000041.csv @@ -0,0 +1,7 @@ +1 ,"Eldon Base for stackable storage shelf, platinum" , Muhammed MacIntyre ,3 ,-213.25 , 38.94 + 2 ," 1.7 Cubic Foot Compact ""Cube"" Office Refrigerators" ,Barry French , 293 ,457.81 ,208.16 + +3 ,"Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl " ,Barry French , 293 ,46.71 ,8.69 +4 , R380 ,Clay Rozendal ,483 , 1198.97 ,195.99 +3.1 +5 ,Holmes HEPA Air Purifier ,Carlos Soltero ,515 ,30.94 ,21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000042.csv b/src/test/resources/formatter/generated/TestResult00000042.csv new file mode 100644 index 00000000..3e73f3f6 --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000042.csv @@ -0,0 +1,7 @@ +1, "Eldon Base for stackable storage shelf, platinum", Muhammed MacIntyre, 3, -213.25, 38.94 + 2, " 1.7 Cubic Foot Compact ""Cube"" Office Refrigerators", Barry French, 293, 457.81, 208.16 + +3, "Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl ", Barry French, 293, 46.71, 8.69 +4, R380, Clay Rozendal, 483, 1198.97, 195.99 +3.1 +5, Holmes HEPA Air Purifier, Carlos Soltero, 515, 30.94, 21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000043.csv b/src/test/resources/formatter/generated/TestResult00000043.csv new file mode 100644 index 00000000..71d2481a --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000043.csv @@ -0,0 +1,7 @@ +1 , "Eldon Base for stackable storage shelf, platinum" , Muhammed MacIntyre , 3 , -213.25 , 38.94 + 2 , " 1.7 Cubic Foot Compact ""Cube"" Office Refrigerators" , Barry French , 293 , 457.81 , 208.16 + +3 , "Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl " , Barry French , 293 , 46.71 , 8.69 +4 , R380 , Clay Rozendal , 483 , 1198.97 , 195.99 +3.1 +5 , Holmes HEPA Air Purifier , Carlos Soltero , 515 , 30.94 , 21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000044.csv b/src/test/resources/formatter/generated/TestResult00000044.csv new file mode 100644 index 00000000..f92e97dc --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000044.csv @@ -0,0 +1,7 @@ +1,"Eldon Base for stackable storage shelf, platinum",Muhammed MacIntyre,3,-213.25,38.94 +2," 1.7 Cubic Foot Compact ""Cube"" Office Refrigerators",Barry French,293,457.81,208.16 + +3,"Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl ",Barry French,293,46.71,8.69 +4,R380,Clay Rozendal,483,1198.97,195.99 +3.1 +5,Holmes HEPA Air Purifier,Carlos Soltero,515,30.94,21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000045.csv b/src/test/resources/formatter/generated/TestResult00000045.csv new file mode 100644 index 00000000..97672f2c --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000045.csv @@ -0,0 +1,7 @@ +1 ,"Eldon Base for stackable storage shelf, platinum" ,Muhammed MacIntyre ,3 ,-213.25 ,38.94 +2 ," 1.7 Cubic Foot Compact ""Cube"" Office Refrigerators" ,Barry French ,293 ,457.81 ,208.16 + +3 ,"Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl " ,Barry French ,293 ,46.71 ,8.69 +4 ,R380 ,Clay Rozendal ,483 ,1198.97 ,195.99 +3.1 +5 ,Holmes HEPA Air Purifier ,Carlos Soltero ,515 ,30.94 ,21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000046.csv b/src/test/resources/formatter/generated/TestResult00000046.csv new file mode 100644 index 00000000..eff31bad --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000046.csv @@ -0,0 +1,7 @@ +1, "Eldon Base for stackable storage shelf, platinum", Muhammed MacIntyre, 3, -213.25, 38.94 +2, " 1.7 Cubic Foot Compact ""Cube"" Office Refrigerators", Barry French, 293, 457.81, 208.16 + +3, "Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl ", Barry French, 293, 46.71, 8.69 +4, R380, Clay Rozendal, 483, 1198.97, 195.99 +3.1 +5, Holmes HEPA Air Purifier, Carlos Soltero, 515, 30.94, 21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000047.csv b/src/test/resources/formatter/generated/TestResult00000047.csv new file mode 100644 index 00000000..af1e51ef --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000047.csv @@ -0,0 +1,7 @@ +1 , "Eldon Base for stackable storage shelf, platinum" , Muhammed MacIntyre , 3 , -213.25 , 38.94 +2 , " 1.7 Cubic Foot Compact ""Cube"" Office Refrigerators" , Barry French , 293 , 457.81 , 208.16 + +3 , "Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl " , Barry French , 293 , 46.71 , 8.69 +4 , R380 , Clay Rozendal , 483 , 1198.97 , 195.99 +3.1 +5 , Holmes HEPA Air Purifier , Carlos Soltero , 515 , 30.94 , 21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000048.csv b/src/test/resources/formatter/generated/TestResult00000048.csv new file mode 100644 index 00000000..9db29ab5 --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000048.csv @@ -0,0 +1,7 @@ +1 ,"Eldon Base for stackable storage shelf, platinum" ,Muhammed MacIntyre,3 ,-213.25,38.94 +2 ," 1.7 Cubic Foot Compact ""Cube"" Office Refrigerators",Barry French ,293,457.81 ,208.16 + +3 ,"Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl " ,Barry French ,293,46.71 ,8.69 +4 ,R380 ,Clay Rozendal ,483,1198.97,195.99 +3.1 +5 ,Holmes HEPA Air Purifier ,Carlos Soltero ,515,30.94 ,21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000049.csv b/src/test/resources/formatter/generated/TestResult00000049.csv new file mode 100644 index 00000000..f31d9a83 --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000049.csv @@ -0,0 +1,7 @@ +1 ,"Eldon Base for stackable storage shelf, platinum" ,Muhammed MacIntyre ,3 ,-213.25 ,38.94 +2 ," 1.7 Cubic Foot Compact ""Cube"" Office Refrigerators" ,Barry French ,293 ,457.81 ,208.16 + +3 ,"Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl " ,Barry French ,293 ,46.71 ,8.69 +4 ,R380 ,Clay Rozendal ,483 ,1198.97 ,195.99 +3.1 +5 ,Holmes HEPA Air Purifier ,Carlos Soltero ,515 ,30.94 ,21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000050.csv b/src/test/resources/formatter/generated/TestResult00000050.csv new file mode 100644 index 00000000..c366a809 --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000050.csv @@ -0,0 +1,7 @@ +1 , "Eldon Base for stackable storage shelf, platinum" , Muhammed MacIntyre, 3 , -213.25, 38.94 +2 , " 1.7 Cubic Foot Compact ""Cube"" Office Refrigerators", Barry French , 293, 457.81 , 208.16 + +3 , "Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl " , Barry French , 293, 46.71 , 8.69 +4 , R380 , Clay Rozendal , 483, 1198.97, 195.99 +3.1 +5 , Holmes HEPA Air Purifier , Carlos Soltero , 515, 30.94 , 21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000051.csv b/src/test/resources/formatter/generated/TestResult00000051.csv new file mode 100644 index 00000000..75a3b1cd --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000051.csv @@ -0,0 +1,7 @@ +1 , "Eldon Base for stackable storage shelf, platinum" , Muhammed MacIntyre , 3 , -213.25 , 38.94 +2 , " 1.7 Cubic Foot Compact ""Cube"" Office Refrigerators" , Barry French , 293 , 457.81 , 208.16 + +3 , "Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl " , Barry French , 293 , 46.71 , 8.69 +4 , R380 , Clay Rozendal , 483 , 1198.97 , 195.99 +3.1 +5 , Holmes HEPA Air Purifier , Carlos Soltero , 515 , 30.94 , 21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000052.csv b/src/test/resources/formatter/generated/TestResult00000052.csv new file mode 100644 index 00000000..9db29ab5 --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000052.csv @@ -0,0 +1,7 @@ +1 ,"Eldon Base for stackable storage shelf, platinum" ,Muhammed MacIntyre,3 ,-213.25,38.94 +2 ," 1.7 Cubic Foot Compact ""Cube"" Office Refrigerators",Barry French ,293,457.81 ,208.16 + +3 ,"Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl " ,Barry French ,293,46.71 ,8.69 +4 ,R380 ,Clay Rozendal ,483,1198.97,195.99 +3.1 +5 ,Holmes HEPA Air Purifier ,Carlos Soltero ,515,30.94 ,21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000053.csv b/src/test/resources/formatter/generated/TestResult00000053.csv new file mode 100644 index 00000000..f31d9a83 --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000053.csv @@ -0,0 +1,7 @@ +1 ,"Eldon Base for stackable storage shelf, platinum" ,Muhammed MacIntyre ,3 ,-213.25 ,38.94 +2 ," 1.7 Cubic Foot Compact ""Cube"" Office Refrigerators" ,Barry French ,293 ,457.81 ,208.16 + +3 ,"Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl " ,Barry French ,293 ,46.71 ,8.69 +4 ,R380 ,Clay Rozendal ,483 ,1198.97 ,195.99 +3.1 +5 ,Holmes HEPA Air Purifier ,Carlos Soltero ,515 ,30.94 ,21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000054.csv b/src/test/resources/formatter/generated/TestResult00000054.csv new file mode 100644 index 00000000..c366a809 --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000054.csv @@ -0,0 +1,7 @@ +1 , "Eldon Base for stackable storage shelf, platinum" , Muhammed MacIntyre, 3 , -213.25, 38.94 +2 , " 1.7 Cubic Foot Compact ""Cube"" Office Refrigerators", Barry French , 293, 457.81 , 208.16 + +3 , "Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl " , Barry French , 293, 46.71 , 8.69 +4 , R380 , Clay Rozendal , 483, 1198.97, 195.99 +3.1 +5 , Holmes HEPA Air Purifier , Carlos Soltero , 515, 30.94 , 21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000055.csv b/src/test/resources/formatter/generated/TestResult00000055.csv new file mode 100644 index 00000000..75a3b1cd --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000055.csv @@ -0,0 +1,7 @@ +1 , "Eldon Base for stackable storage shelf, platinum" , Muhammed MacIntyre , 3 , -213.25 , 38.94 +2 , " 1.7 Cubic Foot Compact ""Cube"" Office Refrigerators" , Barry French , 293 , 457.81 , 208.16 + +3 , "Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl " , Barry French , 293 , 46.71 , 8.69 +4 , R380 , Clay Rozendal , 483 , 1198.97 , 195.99 +3.1 +5 , Holmes HEPA Air Purifier , Carlos Soltero , 515 , 30.94 , 21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000056.csv b/src/test/resources/formatter/generated/TestResult00000056.csv new file mode 100644 index 00000000..9db29ab5 --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000056.csv @@ -0,0 +1,7 @@ +1 ,"Eldon Base for stackable storage shelf, platinum" ,Muhammed MacIntyre,3 ,-213.25,38.94 +2 ," 1.7 Cubic Foot Compact ""Cube"" Office Refrigerators",Barry French ,293,457.81 ,208.16 + +3 ,"Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl " ,Barry French ,293,46.71 ,8.69 +4 ,R380 ,Clay Rozendal ,483,1198.97,195.99 +3.1 +5 ,Holmes HEPA Air Purifier ,Carlos Soltero ,515,30.94 ,21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000057.csv b/src/test/resources/formatter/generated/TestResult00000057.csv new file mode 100644 index 00000000..f31d9a83 --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000057.csv @@ -0,0 +1,7 @@ +1 ,"Eldon Base for stackable storage shelf, platinum" ,Muhammed MacIntyre ,3 ,-213.25 ,38.94 +2 ," 1.7 Cubic Foot Compact ""Cube"" Office Refrigerators" ,Barry French ,293 ,457.81 ,208.16 + +3 ,"Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl " ,Barry French ,293 ,46.71 ,8.69 +4 ,R380 ,Clay Rozendal ,483 ,1198.97 ,195.99 +3.1 +5 ,Holmes HEPA Air Purifier ,Carlos Soltero ,515 ,30.94 ,21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000058.csv b/src/test/resources/formatter/generated/TestResult00000058.csv new file mode 100644 index 00000000..c366a809 --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000058.csv @@ -0,0 +1,7 @@ +1 , "Eldon Base for stackable storage shelf, platinum" , Muhammed MacIntyre, 3 , -213.25, 38.94 +2 , " 1.7 Cubic Foot Compact ""Cube"" Office Refrigerators", Barry French , 293, 457.81 , 208.16 + +3 , "Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl " , Barry French , 293, 46.71 , 8.69 +4 , R380 , Clay Rozendal , 483, 1198.97, 195.99 +3.1 +5 , Holmes HEPA Air Purifier , Carlos Soltero , 515, 30.94 , 21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000059.csv b/src/test/resources/formatter/generated/TestResult00000059.csv new file mode 100644 index 00000000..75a3b1cd --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000059.csv @@ -0,0 +1,7 @@ +1 , "Eldon Base for stackable storage shelf, platinum" , Muhammed MacIntyre , 3 , -213.25 , 38.94 +2 , " 1.7 Cubic Foot Compact ""Cube"" Office Refrigerators" , Barry French , 293 , 457.81 , 208.16 + +3 , "Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl " , Barry French , 293 , 46.71 , 8.69 +4 , R380 , Clay Rozendal , 483 , 1198.97 , 195.99 +3.1 +5 , Holmes HEPA Air Purifier , Carlos Soltero , 515 , 30.94 , 21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000060.csv b/src/test/resources/formatter/generated/TestResult00000060.csv new file mode 100644 index 00000000..9db29ab5 --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000060.csv @@ -0,0 +1,7 @@ +1 ,"Eldon Base for stackable storage shelf, platinum" ,Muhammed MacIntyre,3 ,-213.25,38.94 +2 ," 1.7 Cubic Foot Compact ""Cube"" Office Refrigerators",Barry French ,293,457.81 ,208.16 + +3 ,"Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl " ,Barry French ,293,46.71 ,8.69 +4 ,R380 ,Clay Rozendal ,483,1198.97,195.99 +3.1 +5 ,Holmes HEPA Air Purifier ,Carlos Soltero ,515,30.94 ,21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000061.csv b/src/test/resources/formatter/generated/TestResult00000061.csv new file mode 100644 index 00000000..f31d9a83 --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000061.csv @@ -0,0 +1,7 @@ +1 ,"Eldon Base for stackable storage shelf, platinum" ,Muhammed MacIntyre ,3 ,-213.25 ,38.94 +2 ," 1.7 Cubic Foot Compact ""Cube"" Office Refrigerators" ,Barry French ,293 ,457.81 ,208.16 + +3 ,"Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl " ,Barry French ,293 ,46.71 ,8.69 +4 ,R380 ,Clay Rozendal ,483 ,1198.97 ,195.99 +3.1 +5 ,Holmes HEPA Air Purifier ,Carlos Soltero ,515 ,30.94 ,21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000062.csv b/src/test/resources/formatter/generated/TestResult00000062.csv new file mode 100644 index 00000000..c366a809 --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000062.csv @@ -0,0 +1,7 @@ +1 , "Eldon Base for stackable storage shelf, platinum" , Muhammed MacIntyre, 3 , -213.25, 38.94 +2 , " 1.7 Cubic Foot Compact ""Cube"" Office Refrigerators", Barry French , 293, 457.81 , 208.16 + +3 , "Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl " , Barry French , 293, 46.71 , 8.69 +4 , R380 , Clay Rozendal , 483, 1198.97, 195.99 +3.1 +5 , Holmes HEPA Air Purifier , Carlos Soltero , 515, 30.94 , 21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000063.csv b/src/test/resources/formatter/generated/TestResult00000063.csv new file mode 100644 index 00000000..75a3b1cd --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000063.csv @@ -0,0 +1,7 @@ +1 , "Eldon Base for stackable storage shelf, platinum" , Muhammed MacIntyre , 3 , -213.25 , 38.94 +2 , " 1.7 Cubic Foot Compact ""Cube"" Office Refrigerators" , Barry French , 293 , 457.81 , 208.16 + +3 , "Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl " , Barry French , 293 , 46.71 , 8.69 +4 , R380 , Clay Rozendal , 483 , 1198.97 , 195.99 +3.1 +5 , Holmes HEPA Air Purifier , Carlos Soltero , 515 , 30.94 , 21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000064.csv b/src/test/resources/formatter/generated/TestResult00000064.csv new file mode 100644 index 00000000..e583e810 --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000064.csv @@ -0,0 +1,7 @@ +1,"Eldon Base for stackable storage shelf, platinum", Muhammed MacIntyre ,3,-213.25 , 38.94 + 2 ," 1.7 Cubic Foot Compact ""Cube"" Office Refrigerators",Barry French, 293,457.81,208.16 + +3,"Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl ",Barry French, 293 ,46.71 ,8.69 +4 , R380 ,Clay Rozendal,483, 1198.97,195.99 +3.1 +5 ,Holmes HEPA Air Purifier,Carlos Soltero,515,30.94,21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000065.csv b/src/test/resources/formatter/generated/TestResult00000065.csv new file mode 100644 index 00000000..3e78ed49 --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000065.csv @@ -0,0 +1,7 @@ +1 ,"Eldon Base for stackable storage shelf, platinum" , Muhammed MacIntyre ,3 ,-213.25 , 38.94 + 2 ," 1.7 Cubic Foot Compact ""Cube"" Office Refrigerators" ,Barry French , 293 ,457.81 ,208.16 + +3 ,"Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl " ,Barry French , 293 ,46.71 ,8.69 +4 , R380 ,Clay Rozendal ,483 , 1198.97 ,195.99 +3.1 +5 ,Holmes HEPA Air Purifier ,Carlos Soltero ,515 ,30.94 ,21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000066.csv b/src/test/resources/formatter/generated/TestResult00000066.csv new file mode 100644 index 00000000..594c21da --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000066.csv @@ -0,0 +1,7 @@ +1, "Eldon Base for stackable storage shelf, platinum", Muhammed MacIntyre , 3, -213.25 , 38.94 + 2 , " 1.7 Cubic Foot Compact ""Cube"" Office Refrigerators", Barry French, 293, 457.81, 208.16 + +3, "Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl ", Barry French, 293 , 46.71 , 8.69 +4 , R380 , Clay Rozendal, 483, 1198.97, 195.99 +3.1 +5 , Holmes HEPA Air Purifier, Carlos Soltero, 515, 30.94, 21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000067.csv b/src/test/resources/formatter/generated/TestResult00000067.csv new file mode 100644 index 00000000..ff5fe21f --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000067.csv @@ -0,0 +1,7 @@ +1 , "Eldon Base for stackable storage shelf, platinum" , Muhammed MacIntyre , 3 , -213.25 , 38.94 + 2 , " 1.7 Cubic Foot Compact ""Cube"" Office Refrigerators" , Barry French , 293 , 457.81 , 208.16 + +3 , "Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl " , Barry French , 293 , 46.71 , 8.69 +4 , R380 , Clay Rozendal , 483 , 1198.97 , 195.99 +3.1 +5 , Holmes HEPA Air Purifier , Carlos Soltero , 515 , 30.94 , 21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000068.csv b/src/test/resources/formatter/generated/TestResult00000068.csv new file mode 100644 index 00000000..f838fd42 --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000068.csv @@ -0,0 +1,7 @@ +1,"Eldon Base for stackable storage shelf, platinum",Muhammed MacIntyre ,3,-213.25 ,38.94 +2 ," 1.7 Cubic Foot Compact ""Cube"" Office Refrigerators",Barry French,293,457.81,208.16 + +3,"Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl ",Barry French,293 ,46.71 ,8.69 +4 ,R380 ,Clay Rozendal,483,1198.97,195.99 +3.1 +5 ,Holmes HEPA Air Purifier,Carlos Soltero,515,30.94,21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000069.csv b/src/test/resources/formatter/generated/TestResult00000069.csv new file mode 100644 index 00000000..caf14cd8 --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000069.csv @@ -0,0 +1,7 @@ +1 ,"Eldon Base for stackable storage shelf, platinum" ,Muhammed MacIntyre ,3 ,-213.25 ,38.94 +2 ," 1.7 Cubic Foot Compact ""Cube"" Office Refrigerators" ,Barry French ,293 ,457.81 ,208.16 + +3 ,"Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl " ,Barry French ,293 ,46.71 ,8.69 +4 ,R380 ,Clay Rozendal ,483 ,1198.97 ,195.99 +3.1 +5 ,Holmes HEPA Air Purifier ,Carlos Soltero ,515 ,30.94 ,21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000070.csv b/src/test/resources/formatter/generated/TestResult00000070.csv new file mode 100644 index 00000000..c17fe061 --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000070.csv @@ -0,0 +1,7 @@ +1, "Eldon Base for stackable storage shelf, platinum", Muhammed MacIntyre , 3, -213.25 , 38.94 +2 , " 1.7 Cubic Foot Compact ""Cube"" Office Refrigerators", Barry French, 293, 457.81, 208.16 + +3, "Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl ", Barry French, 293 , 46.71 , 8.69 +4 , R380 , Clay Rozendal, 483, 1198.97, 195.99 +3.1 +5 , Holmes HEPA Air Purifier, Carlos Soltero, 515, 30.94, 21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000071.csv b/src/test/resources/formatter/generated/TestResult00000071.csv new file mode 100644 index 00000000..c93a85fb --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000071.csv @@ -0,0 +1,7 @@ +1 , "Eldon Base for stackable storage shelf, platinum" , Muhammed MacIntyre , 3 , -213.25 , 38.94 +2 , " 1.7 Cubic Foot Compact ""Cube"" Office Refrigerators" , Barry French , 293 , 457.81 , 208.16 + +3 , "Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl " , Barry French , 293 , 46.71 , 8.69 +4 , R380 , Clay Rozendal , 483 , 1198.97 , 195.99 +3.1 +5 , Holmes HEPA Air Purifier , Carlos Soltero , 515 , 30.94 , 21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000072.csv b/src/test/resources/formatter/generated/TestResult00000072.csv new file mode 100644 index 00000000..eeec4d82 --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000072.csv @@ -0,0 +1,7 @@ +1,"Eldon Base for stackable storage shelf, platinum", Muhammed MacIntyre,3,-213.25, 38.94 + 2," 1.7 Cubic Foot Compact ""Cube"" Office Refrigerators",Barry French, 293,457.81,208.16 + +3,"Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl ",Barry French, 293,46.71,8.69 +4, R380,Clay Rozendal,483, 1198.97,195.99 +3.1 +5,Holmes HEPA Air Purifier,Carlos Soltero,515,30.94,21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000073.csv b/src/test/resources/formatter/generated/TestResult00000073.csv new file mode 100644 index 00000000..43830086 --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000073.csv @@ -0,0 +1,7 @@ +1 ,"Eldon Base for stackable storage shelf, platinum" , Muhammed MacIntyre ,3 ,-213.25 , 38.94 + 2 ," 1.7 Cubic Foot Compact ""Cube"" Office Refrigerators" ,Barry French , 293 ,457.81 ,208.16 + +3 ,"Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl " ,Barry French , 293 ,46.71 ,8.69 +4 , R380 ,Clay Rozendal ,483 , 1198.97 ,195.99 +3.1 +5 ,Holmes HEPA Air Purifier ,Carlos Soltero ,515 ,30.94 ,21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000074.csv b/src/test/resources/formatter/generated/TestResult00000074.csv new file mode 100644 index 00000000..3e73f3f6 --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000074.csv @@ -0,0 +1,7 @@ +1, "Eldon Base for stackable storage shelf, platinum", Muhammed MacIntyre, 3, -213.25, 38.94 + 2, " 1.7 Cubic Foot Compact ""Cube"" Office Refrigerators", Barry French, 293, 457.81, 208.16 + +3, "Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl ", Barry French, 293, 46.71, 8.69 +4, R380, Clay Rozendal, 483, 1198.97, 195.99 +3.1 +5, Holmes HEPA Air Purifier, Carlos Soltero, 515, 30.94, 21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000075.csv b/src/test/resources/formatter/generated/TestResult00000075.csv new file mode 100644 index 00000000..71d2481a --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000075.csv @@ -0,0 +1,7 @@ +1 , "Eldon Base for stackable storage shelf, platinum" , Muhammed MacIntyre , 3 , -213.25 , 38.94 + 2 , " 1.7 Cubic Foot Compact ""Cube"" Office Refrigerators" , Barry French , 293 , 457.81 , 208.16 + +3 , "Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl " , Barry French , 293 , 46.71 , 8.69 +4 , R380 , Clay Rozendal , 483 , 1198.97 , 195.99 +3.1 +5 , Holmes HEPA Air Purifier , Carlos Soltero , 515 , 30.94 , 21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000076.csv b/src/test/resources/formatter/generated/TestResult00000076.csv new file mode 100644 index 00000000..f92e97dc --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000076.csv @@ -0,0 +1,7 @@ +1,"Eldon Base for stackable storage shelf, platinum",Muhammed MacIntyre,3,-213.25,38.94 +2," 1.7 Cubic Foot Compact ""Cube"" Office Refrigerators",Barry French,293,457.81,208.16 + +3,"Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl ",Barry French,293,46.71,8.69 +4,R380,Clay Rozendal,483,1198.97,195.99 +3.1 +5,Holmes HEPA Air Purifier,Carlos Soltero,515,30.94,21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000077.csv b/src/test/resources/formatter/generated/TestResult00000077.csv new file mode 100644 index 00000000..97672f2c --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000077.csv @@ -0,0 +1,7 @@ +1 ,"Eldon Base for stackable storage shelf, platinum" ,Muhammed MacIntyre ,3 ,-213.25 ,38.94 +2 ," 1.7 Cubic Foot Compact ""Cube"" Office Refrigerators" ,Barry French ,293 ,457.81 ,208.16 + +3 ,"Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl " ,Barry French ,293 ,46.71 ,8.69 +4 ,R380 ,Clay Rozendal ,483 ,1198.97 ,195.99 +3.1 +5 ,Holmes HEPA Air Purifier ,Carlos Soltero ,515 ,30.94 ,21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000078.csv b/src/test/resources/formatter/generated/TestResult00000078.csv new file mode 100644 index 00000000..eff31bad --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000078.csv @@ -0,0 +1,7 @@ +1, "Eldon Base for stackable storage shelf, platinum", Muhammed MacIntyre, 3, -213.25, 38.94 +2, " 1.7 Cubic Foot Compact ""Cube"" Office Refrigerators", Barry French, 293, 457.81, 208.16 + +3, "Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl ", Barry French, 293, 46.71, 8.69 +4, R380, Clay Rozendal, 483, 1198.97, 195.99 +3.1 +5, Holmes HEPA Air Purifier, Carlos Soltero, 515, 30.94, 21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000079.csv b/src/test/resources/formatter/generated/TestResult00000079.csv new file mode 100644 index 00000000..af1e51ef --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000079.csv @@ -0,0 +1,7 @@ +1 , "Eldon Base for stackable storage shelf, platinum" , Muhammed MacIntyre , 3 , -213.25 , 38.94 +2 , " 1.7 Cubic Foot Compact ""Cube"" Office Refrigerators" , Barry French , 293 , 457.81 , 208.16 + +3 , "Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl " , Barry French , 293 , 46.71 , 8.69 +4 , R380 , Clay Rozendal , 483 , 1198.97 , 195.99 +3.1 +5 , Holmes HEPA Air Purifier , Carlos Soltero , 515 , 30.94 , 21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000080.csv b/src/test/resources/formatter/generated/TestResult00000080.csv new file mode 100644 index 00000000..9734b295 --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000080.csv @@ -0,0 +1,7 @@ + 1," Eldon Base for stackable storage shelf, platinum",Muhammed MacIntyre, 3,-213.25, 38.94 + 2,"1.7 Cubic Foot Compact ""Cube"" Office Refrigerators", Barry French,293, 457.81,208.16 + + 3," Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl", Barry French,293, 46.71, 8.69 + 4, R380, Clay Rozendal,483,1198.97,195.99 +3.1 + 5, Holmes HEPA Air Purifier, Carlos Soltero,515, 30.94, 21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000081.csv b/src/test/resources/formatter/generated/TestResult00000081.csv new file mode 100644 index 00000000..cdccf0a6 --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000081.csv @@ -0,0 +1,7 @@ + 1 ," Eldon Base for stackable storage shelf, platinum" ,Muhammed MacIntyre , 3 ,-213.25 , 38.94 + 2 ,"1.7 Cubic Foot Compact ""Cube"" Office Refrigerators" , Barry French ,293 , 457.81 ,208.16 + + 3 ," Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl" , Barry French ,293 , 46.71 , 8.69 + 4 , R380 , Clay Rozendal ,483 ,1198.97 ,195.99 +3.1 + 5 , Holmes HEPA Air Purifier , Carlos Soltero ,515 , 30.94 , 21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000082.csv b/src/test/resources/formatter/generated/TestResult00000082.csv new file mode 100644 index 00000000..81ad4a53 --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000082.csv @@ -0,0 +1,7 @@ + 1, " Eldon Base for stackable storage shelf, platinum", Muhammed MacIntyre, 3, -213.25, 38.94 + 2, "1.7 Cubic Foot Compact ""Cube"" Office Refrigerators", Barry French, 293, 457.81, 208.16 + + 3, " Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl", Barry French, 293, 46.71, 8.69 + 4, R380, Clay Rozendal, 483, 1198.97, 195.99 +3.1 + 5, Holmes HEPA Air Purifier, Carlos Soltero, 515, 30.94, 21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000083.csv b/src/test/resources/formatter/generated/TestResult00000083.csv new file mode 100644 index 00000000..b79b0043 --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000083.csv @@ -0,0 +1,7 @@ + 1 , " Eldon Base for stackable storage shelf, platinum" , Muhammed MacIntyre , 3 , -213.25 , 38.94 + 2 , "1.7 Cubic Foot Compact ""Cube"" Office Refrigerators" , Barry French , 293 , 457.81 , 208.16 + + 3 , " Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl" , Barry French , 293 , 46.71 , 8.69 + 4 , R380 , Clay Rozendal , 483 , 1198.97 , 195.99 +3.1 + 5 , Holmes HEPA Air Purifier , Carlos Soltero , 515 , 30.94 , 21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000084.csv b/src/test/resources/formatter/generated/TestResult00000084.csv new file mode 100644 index 00000000..9734b295 --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000084.csv @@ -0,0 +1,7 @@ + 1," Eldon Base for stackable storage shelf, platinum",Muhammed MacIntyre, 3,-213.25, 38.94 + 2,"1.7 Cubic Foot Compact ""Cube"" Office Refrigerators", Barry French,293, 457.81,208.16 + + 3," Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl", Barry French,293, 46.71, 8.69 + 4, R380, Clay Rozendal,483,1198.97,195.99 +3.1 + 5, Holmes HEPA Air Purifier, Carlos Soltero,515, 30.94, 21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000085.csv b/src/test/resources/formatter/generated/TestResult00000085.csv new file mode 100644 index 00000000..cdccf0a6 --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000085.csv @@ -0,0 +1,7 @@ + 1 ," Eldon Base for stackable storage shelf, platinum" ,Muhammed MacIntyre , 3 ,-213.25 , 38.94 + 2 ,"1.7 Cubic Foot Compact ""Cube"" Office Refrigerators" , Barry French ,293 , 457.81 ,208.16 + + 3 ," Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl" , Barry French ,293 , 46.71 , 8.69 + 4 , R380 , Clay Rozendal ,483 ,1198.97 ,195.99 +3.1 + 5 , Holmes HEPA Air Purifier , Carlos Soltero ,515 , 30.94 , 21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000086.csv b/src/test/resources/formatter/generated/TestResult00000086.csv new file mode 100644 index 00000000..81ad4a53 --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000086.csv @@ -0,0 +1,7 @@ + 1, " Eldon Base for stackable storage shelf, platinum", Muhammed MacIntyre, 3, -213.25, 38.94 + 2, "1.7 Cubic Foot Compact ""Cube"" Office Refrigerators", Barry French, 293, 457.81, 208.16 + + 3, " Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl", Barry French, 293, 46.71, 8.69 + 4, R380, Clay Rozendal, 483, 1198.97, 195.99 +3.1 + 5, Holmes HEPA Air Purifier, Carlos Soltero, 515, 30.94, 21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000087.csv b/src/test/resources/formatter/generated/TestResult00000087.csv new file mode 100644 index 00000000..b79b0043 --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000087.csv @@ -0,0 +1,7 @@ + 1 , " Eldon Base for stackable storage shelf, platinum" , Muhammed MacIntyre , 3 , -213.25 , 38.94 + 2 , "1.7 Cubic Foot Compact ""Cube"" Office Refrigerators" , Barry French , 293 , 457.81 , 208.16 + + 3 , " Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl" , Barry French , 293 , 46.71 , 8.69 + 4 , R380 , Clay Rozendal , 483 , 1198.97 , 195.99 +3.1 + 5 , Holmes HEPA Air Purifier , Carlos Soltero , 515 , 30.94 , 21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000088.csv b/src/test/resources/formatter/generated/TestResult00000088.csv new file mode 100644 index 00000000..9734b295 --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000088.csv @@ -0,0 +1,7 @@ + 1," Eldon Base for stackable storage shelf, platinum",Muhammed MacIntyre, 3,-213.25, 38.94 + 2,"1.7 Cubic Foot Compact ""Cube"" Office Refrigerators", Barry French,293, 457.81,208.16 + + 3," Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl", Barry French,293, 46.71, 8.69 + 4, R380, Clay Rozendal,483,1198.97,195.99 +3.1 + 5, Holmes HEPA Air Purifier, Carlos Soltero,515, 30.94, 21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000089.csv b/src/test/resources/formatter/generated/TestResult00000089.csv new file mode 100644 index 00000000..cdccf0a6 --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000089.csv @@ -0,0 +1,7 @@ + 1 ," Eldon Base for stackable storage shelf, platinum" ,Muhammed MacIntyre , 3 ,-213.25 , 38.94 + 2 ,"1.7 Cubic Foot Compact ""Cube"" Office Refrigerators" , Barry French ,293 , 457.81 ,208.16 + + 3 ," Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl" , Barry French ,293 , 46.71 , 8.69 + 4 , R380 , Clay Rozendal ,483 ,1198.97 ,195.99 +3.1 + 5 , Holmes HEPA Air Purifier , Carlos Soltero ,515 , 30.94 , 21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000090.csv b/src/test/resources/formatter/generated/TestResult00000090.csv new file mode 100644 index 00000000..81ad4a53 --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000090.csv @@ -0,0 +1,7 @@ + 1, " Eldon Base for stackable storage shelf, platinum", Muhammed MacIntyre, 3, -213.25, 38.94 + 2, "1.7 Cubic Foot Compact ""Cube"" Office Refrigerators", Barry French, 293, 457.81, 208.16 + + 3, " Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl", Barry French, 293, 46.71, 8.69 + 4, R380, Clay Rozendal, 483, 1198.97, 195.99 +3.1 + 5, Holmes HEPA Air Purifier, Carlos Soltero, 515, 30.94, 21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000091.csv b/src/test/resources/formatter/generated/TestResult00000091.csv new file mode 100644 index 00000000..b79b0043 --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000091.csv @@ -0,0 +1,7 @@ + 1 , " Eldon Base for stackable storage shelf, platinum" , Muhammed MacIntyre , 3 , -213.25 , 38.94 + 2 , "1.7 Cubic Foot Compact ""Cube"" Office Refrigerators" , Barry French , 293 , 457.81 , 208.16 + + 3 , " Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl" , Barry French , 293 , 46.71 , 8.69 + 4 , R380 , Clay Rozendal , 483 , 1198.97 , 195.99 +3.1 + 5 , Holmes HEPA Air Purifier , Carlos Soltero , 515 , 30.94 , 21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000092.csv b/src/test/resources/formatter/generated/TestResult00000092.csv new file mode 100644 index 00000000..9734b295 --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000092.csv @@ -0,0 +1,7 @@ + 1," Eldon Base for stackable storage shelf, platinum",Muhammed MacIntyre, 3,-213.25, 38.94 + 2,"1.7 Cubic Foot Compact ""Cube"" Office Refrigerators", Barry French,293, 457.81,208.16 + + 3," Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl", Barry French,293, 46.71, 8.69 + 4, R380, Clay Rozendal,483,1198.97,195.99 +3.1 + 5, Holmes HEPA Air Purifier, Carlos Soltero,515, 30.94, 21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000093.csv b/src/test/resources/formatter/generated/TestResult00000093.csv new file mode 100644 index 00000000..cdccf0a6 --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000093.csv @@ -0,0 +1,7 @@ + 1 ," Eldon Base for stackable storage shelf, platinum" ,Muhammed MacIntyre , 3 ,-213.25 , 38.94 + 2 ,"1.7 Cubic Foot Compact ""Cube"" Office Refrigerators" , Barry French ,293 , 457.81 ,208.16 + + 3 ," Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl" , Barry French ,293 , 46.71 , 8.69 + 4 , R380 , Clay Rozendal ,483 ,1198.97 ,195.99 +3.1 + 5 , Holmes HEPA Air Purifier , Carlos Soltero ,515 , 30.94 , 21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000094.csv b/src/test/resources/formatter/generated/TestResult00000094.csv new file mode 100644 index 00000000..81ad4a53 --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000094.csv @@ -0,0 +1,7 @@ + 1, " Eldon Base for stackable storage shelf, platinum", Muhammed MacIntyre, 3, -213.25, 38.94 + 2, "1.7 Cubic Foot Compact ""Cube"" Office Refrigerators", Barry French, 293, 457.81, 208.16 + + 3, " Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl", Barry French, 293, 46.71, 8.69 + 4, R380, Clay Rozendal, 483, 1198.97, 195.99 +3.1 + 5, Holmes HEPA Air Purifier, Carlos Soltero, 515, 30.94, 21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000095.csv b/src/test/resources/formatter/generated/TestResult00000095.csv new file mode 100644 index 00000000..b79b0043 --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000095.csv @@ -0,0 +1,7 @@ + 1 , " Eldon Base for stackable storage shelf, platinum" , Muhammed MacIntyre , 3 , -213.25 , 38.94 + 2 , "1.7 Cubic Foot Compact ""Cube"" Office Refrigerators" , Barry French , 293 , 457.81 , 208.16 + + 3 , " Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl" , Barry French , 293 , 46.71 , 8.69 + 4 , R380 , Clay Rozendal , 483 , 1198.97 , 195.99 +3.1 + 5 , Holmes HEPA Air Purifier , Carlos Soltero , 515 , 30.94 , 21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000096.csv b/src/test/resources/formatter/generated/TestResult00000096.csv new file mode 100644 index 00000000..e583e810 --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000096.csv @@ -0,0 +1,7 @@ +1,"Eldon Base for stackable storage shelf, platinum", Muhammed MacIntyre ,3,-213.25 , 38.94 + 2 ," 1.7 Cubic Foot Compact ""Cube"" Office Refrigerators",Barry French, 293,457.81,208.16 + +3,"Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl ",Barry French, 293 ,46.71 ,8.69 +4 , R380 ,Clay Rozendal,483, 1198.97,195.99 +3.1 +5 ,Holmes HEPA Air Purifier,Carlos Soltero,515,30.94,21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000097.csv b/src/test/resources/formatter/generated/TestResult00000097.csv new file mode 100644 index 00000000..3e78ed49 --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000097.csv @@ -0,0 +1,7 @@ +1 ,"Eldon Base for stackable storage shelf, platinum" , Muhammed MacIntyre ,3 ,-213.25 , 38.94 + 2 ," 1.7 Cubic Foot Compact ""Cube"" Office Refrigerators" ,Barry French , 293 ,457.81 ,208.16 + +3 ,"Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl " ,Barry French , 293 ,46.71 ,8.69 +4 , R380 ,Clay Rozendal ,483 , 1198.97 ,195.99 +3.1 +5 ,Holmes HEPA Air Purifier ,Carlos Soltero ,515 ,30.94 ,21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000098.csv b/src/test/resources/formatter/generated/TestResult00000098.csv new file mode 100644 index 00000000..594c21da --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000098.csv @@ -0,0 +1,7 @@ +1, "Eldon Base for stackable storage shelf, platinum", Muhammed MacIntyre , 3, -213.25 , 38.94 + 2 , " 1.7 Cubic Foot Compact ""Cube"" Office Refrigerators", Barry French, 293, 457.81, 208.16 + +3, "Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl ", Barry French, 293 , 46.71 , 8.69 +4 , R380 , Clay Rozendal, 483, 1198.97, 195.99 +3.1 +5 , Holmes HEPA Air Purifier, Carlos Soltero, 515, 30.94, 21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000099.csv b/src/test/resources/formatter/generated/TestResult00000099.csv new file mode 100644 index 00000000..ff5fe21f --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000099.csv @@ -0,0 +1,7 @@ +1 , "Eldon Base for stackable storage shelf, platinum" , Muhammed MacIntyre , 3 , -213.25 , 38.94 + 2 , " 1.7 Cubic Foot Compact ""Cube"" Office Refrigerators" , Barry French , 293 , 457.81 , 208.16 + +3 , "Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl " , Barry French , 293 , 46.71 , 8.69 +4 , R380 , Clay Rozendal , 483 , 1198.97 , 195.99 +3.1 +5 , Holmes HEPA Air Purifier , Carlos Soltero , 515 , 30.94 , 21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000100.csv b/src/test/resources/formatter/generated/TestResult00000100.csv new file mode 100644 index 00000000..f838fd42 --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000100.csv @@ -0,0 +1,7 @@ +1,"Eldon Base for stackable storage shelf, platinum",Muhammed MacIntyre ,3,-213.25 ,38.94 +2 ," 1.7 Cubic Foot Compact ""Cube"" Office Refrigerators",Barry French,293,457.81,208.16 + +3,"Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl ",Barry French,293 ,46.71 ,8.69 +4 ,R380 ,Clay Rozendal,483,1198.97,195.99 +3.1 +5 ,Holmes HEPA Air Purifier,Carlos Soltero,515,30.94,21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000101.csv b/src/test/resources/formatter/generated/TestResult00000101.csv new file mode 100644 index 00000000..caf14cd8 --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000101.csv @@ -0,0 +1,7 @@ +1 ,"Eldon Base for stackable storage shelf, platinum" ,Muhammed MacIntyre ,3 ,-213.25 ,38.94 +2 ," 1.7 Cubic Foot Compact ""Cube"" Office Refrigerators" ,Barry French ,293 ,457.81 ,208.16 + +3 ,"Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl " ,Barry French ,293 ,46.71 ,8.69 +4 ,R380 ,Clay Rozendal ,483 ,1198.97 ,195.99 +3.1 +5 ,Holmes HEPA Air Purifier ,Carlos Soltero ,515 ,30.94 ,21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000102.csv b/src/test/resources/formatter/generated/TestResult00000102.csv new file mode 100644 index 00000000..c17fe061 --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000102.csv @@ -0,0 +1,7 @@ +1, "Eldon Base for stackable storage shelf, platinum", Muhammed MacIntyre , 3, -213.25 , 38.94 +2 , " 1.7 Cubic Foot Compact ""Cube"" Office Refrigerators", Barry French, 293, 457.81, 208.16 + +3, "Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl ", Barry French, 293 , 46.71 , 8.69 +4 , R380 , Clay Rozendal, 483, 1198.97, 195.99 +3.1 +5 , Holmes HEPA Air Purifier, Carlos Soltero, 515, 30.94, 21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000103.csv b/src/test/resources/formatter/generated/TestResult00000103.csv new file mode 100644 index 00000000..c93a85fb --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000103.csv @@ -0,0 +1,7 @@ +1 , "Eldon Base for stackable storage shelf, platinum" , Muhammed MacIntyre , 3 , -213.25 , 38.94 +2 , " 1.7 Cubic Foot Compact ""Cube"" Office Refrigerators" , Barry French , 293 , 457.81 , 208.16 + +3 , "Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl " , Barry French , 293 , 46.71 , 8.69 +4 , R380 , Clay Rozendal , 483 , 1198.97 , 195.99 +3.1 +5 , Holmes HEPA Air Purifier , Carlos Soltero , 515 , 30.94 , 21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000104.csv b/src/test/resources/formatter/generated/TestResult00000104.csv new file mode 100644 index 00000000..eeec4d82 --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000104.csv @@ -0,0 +1,7 @@ +1,"Eldon Base for stackable storage shelf, platinum", Muhammed MacIntyre,3,-213.25, 38.94 + 2," 1.7 Cubic Foot Compact ""Cube"" Office Refrigerators",Barry French, 293,457.81,208.16 + +3,"Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl ",Barry French, 293,46.71,8.69 +4, R380,Clay Rozendal,483, 1198.97,195.99 +3.1 +5,Holmes HEPA Air Purifier,Carlos Soltero,515,30.94,21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000105.csv b/src/test/resources/formatter/generated/TestResult00000105.csv new file mode 100644 index 00000000..43830086 --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000105.csv @@ -0,0 +1,7 @@ +1 ,"Eldon Base for stackable storage shelf, platinum" , Muhammed MacIntyre ,3 ,-213.25 , 38.94 + 2 ," 1.7 Cubic Foot Compact ""Cube"" Office Refrigerators" ,Barry French , 293 ,457.81 ,208.16 + +3 ,"Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl " ,Barry French , 293 ,46.71 ,8.69 +4 , R380 ,Clay Rozendal ,483 , 1198.97 ,195.99 +3.1 +5 ,Holmes HEPA Air Purifier ,Carlos Soltero ,515 ,30.94 ,21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000106.csv b/src/test/resources/formatter/generated/TestResult00000106.csv new file mode 100644 index 00000000..3e73f3f6 --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000106.csv @@ -0,0 +1,7 @@ +1, "Eldon Base for stackable storage shelf, platinum", Muhammed MacIntyre, 3, -213.25, 38.94 + 2, " 1.7 Cubic Foot Compact ""Cube"" Office Refrigerators", Barry French, 293, 457.81, 208.16 + +3, "Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl ", Barry French, 293, 46.71, 8.69 +4, R380, Clay Rozendal, 483, 1198.97, 195.99 +3.1 +5, Holmes HEPA Air Purifier, Carlos Soltero, 515, 30.94, 21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000107.csv b/src/test/resources/formatter/generated/TestResult00000107.csv new file mode 100644 index 00000000..71d2481a --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000107.csv @@ -0,0 +1,7 @@ +1 , "Eldon Base for stackable storage shelf, platinum" , Muhammed MacIntyre , 3 , -213.25 , 38.94 + 2 , " 1.7 Cubic Foot Compact ""Cube"" Office Refrigerators" , Barry French , 293 , 457.81 , 208.16 + +3 , "Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl " , Barry French , 293 , 46.71 , 8.69 +4 , R380 , Clay Rozendal , 483 , 1198.97 , 195.99 +3.1 +5 , Holmes HEPA Air Purifier , Carlos Soltero , 515 , 30.94 , 21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000108.csv b/src/test/resources/formatter/generated/TestResult00000108.csv new file mode 100644 index 00000000..f92e97dc --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000108.csv @@ -0,0 +1,7 @@ +1,"Eldon Base for stackable storage shelf, platinum",Muhammed MacIntyre,3,-213.25,38.94 +2," 1.7 Cubic Foot Compact ""Cube"" Office Refrigerators",Barry French,293,457.81,208.16 + +3,"Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl ",Barry French,293,46.71,8.69 +4,R380,Clay Rozendal,483,1198.97,195.99 +3.1 +5,Holmes HEPA Air Purifier,Carlos Soltero,515,30.94,21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000109.csv b/src/test/resources/formatter/generated/TestResult00000109.csv new file mode 100644 index 00000000..97672f2c --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000109.csv @@ -0,0 +1,7 @@ +1 ,"Eldon Base for stackable storage shelf, platinum" ,Muhammed MacIntyre ,3 ,-213.25 ,38.94 +2 ," 1.7 Cubic Foot Compact ""Cube"" Office Refrigerators" ,Barry French ,293 ,457.81 ,208.16 + +3 ,"Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl " ,Barry French ,293 ,46.71 ,8.69 +4 ,R380 ,Clay Rozendal ,483 ,1198.97 ,195.99 +3.1 +5 ,Holmes HEPA Air Purifier ,Carlos Soltero ,515 ,30.94 ,21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000110.csv b/src/test/resources/formatter/generated/TestResult00000110.csv new file mode 100644 index 00000000..eff31bad --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000110.csv @@ -0,0 +1,7 @@ +1, "Eldon Base for stackable storage shelf, platinum", Muhammed MacIntyre, 3, -213.25, 38.94 +2, " 1.7 Cubic Foot Compact ""Cube"" Office Refrigerators", Barry French, 293, 457.81, 208.16 + +3, "Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl ", Barry French, 293, 46.71, 8.69 +4, R380, Clay Rozendal, 483, 1198.97, 195.99 +3.1 +5, Holmes HEPA Air Purifier, Carlos Soltero, 515, 30.94, 21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000111.csv b/src/test/resources/formatter/generated/TestResult00000111.csv new file mode 100644 index 00000000..af1e51ef --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000111.csv @@ -0,0 +1,7 @@ +1 , "Eldon Base for stackable storage shelf, platinum" , Muhammed MacIntyre , 3 , -213.25 , 38.94 +2 , " 1.7 Cubic Foot Compact ""Cube"" Office Refrigerators" , Barry French , 293 , 457.81 , 208.16 + +3 , "Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl " , Barry French , 293 , 46.71 , 8.69 +4 , R380 , Clay Rozendal , 483 , 1198.97 , 195.99 +3.1 +5 , Holmes HEPA Air Purifier , Carlos Soltero , 515 , 30.94 , 21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000112.csv b/src/test/resources/formatter/generated/TestResult00000112.csv new file mode 100644 index 00000000..5f3c1946 --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000112.csv @@ -0,0 +1,7 @@ + 1, "Eldon Base for stackable storage shelf, platinum",Muhammed MacIntyre, 3,-213.25, 38.94 + 2," 1.7 Cubic Foot Compact ""Cube"" Office Refrigerators", Barry French,293, 457.81,208.16 + + 3, "Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl ", Barry French,293, 46.71, 8.69 + 4, R380, Clay Rozendal,483,1198.97,195.99 +3.1 + 5, Holmes HEPA Air Purifier, Carlos Soltero,515, 30.94, 21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000113.csv b/src/test/resources/formatter/generated/TestResult00000113.csv new file mode 100644 index 00000000..6b568c4f --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000113.csv @@ -0,0 +1,7 @@ + 1 , "Eldon Base for stackable storage shelf, platinum" ,Muhammed MacIntyre , 3 ,-213.25 , 38.94 + 2 ," 1.7 Cubic Foot Compact ""Cube"" Office Refrigerators" , Barry French ,293 , 457.81 ,208.16 + + 3 , "Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl " , Barry French ,293 , 46.71 , 8.69 + 4 , R380 , Clay Rozendal ,483 ,1198.97 ,195.99 +3.1 + 5 , Holmes HEPA Air Purifier , Carlos Soltero ,515 , 30.94 , 21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000114.csv b/src/test/resources/formatter/generated/TestResult00000114.csv new file mode 100644 index 00000000..562bd7fd --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000114.csv @@ -0,0 +1,7 @@ + 1, "Eldon Base for stackable storage shelf, platinum", Muhammed MacIntyre, 3, -213.25, 38.94 + 2, " 1.7 Cubic Foot Compact ""Cube"" Office Refrigerators", Barry French, 293, 457.81, 208.16 + + 3, "Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl ", Barry French, 293, 46.71, 8.69 + 4, R380, Clay Rozendal, 483, 1198.97, 195.99 +3.1 + 5, Holmes HEPA Air Purifier, Carlos Soltero, 515, 30.94, 21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000115.csv b/src/test/resources/formatter/generated/TestResult00000115.csv new file mode 100644 index 00000000..3dafcba9 --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000115.csv @@ -0,0 +1,7 @@ + 1 , "Eldon Base for stackable storage shelf, platinum" , Muhammed MacIntyre , 3 , -213.25 , 38.94 + 2 , " 1.7 Cubic Foot Compact ""Cube"" Office Refrigerators" , Barry French , 293 , 457.81 , 208.16 + + 3 , "Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl " , Barry French , 293 , 46.71 , 8.69 + 4 , R380 , Clay Rozendal , 483 , 1198.97 , 195.99 +3.1 + 5 , Holmes HEPA Air Purifier , Carlos Soltero , 515 , 30.94 , 21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000116.csv b/src/test/resources/formatter/generated/TestResult00000116.csv new file mode 100644 index 00000000..5f3c1946 --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000116.csv @@ -0,0 +1,7 @@ + 1, "Eldon Base for stackable storage shelf, platinum",Muhammed MacIntyre, 3,-213.25, 38.94 + 2," 1.7 Cubic Foot Compact ""Cube"" Office Refrigerators", Barry French,293, 457.81,208.16 + + 3, "Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl ", Barry French,293, 46.71, 8.69 + 4, R380, Clay Rozendal,483,1198.97,195.99 +3.1 + 5, Holmes HEPA Air Purifier, Carlos Soltero,515, 30.94, 21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000117.csv b/src/test/resources/formatter/generated/TestResult00000117.csv new file mode 100644 index 00000000..6b568c4f --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000117.csv @@ -0,0 +1,7 @@ + 1 , "Eldon Base for stackable storage shelf, platinum" ,Muhammed MacIntyre , 3 ,-213.25 , 38.94 + 2 ," 1.7 Cubic Foot Compact ""Cube"" Office Refrigerators" , Barry French ,293 , 457.81 ,208.16 + + 3 , "Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl " , Barry French ,293 , 46.71 , 8.69 + 4 , R380 , Clay Rozendal ,483 ,1198.97 ,195.99 +3.1 + 5 , Holmes HEPA Air Purifier , Carlos Soltero ,515 , 30.94 , 21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000118.csv b/src/test/resources/formatter/generated/TestResult00000118.csv new file mode 100644 index 00000000..562bd7fd --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000118.csv @@ -0,0 +1,7 @@ + 1, "Eldon Base for stackable storage shelf, platinum", Muhammed MacIntyre, 3, -213.25, 38.94 + 2, " 1.7 Cubic Foot Compact ""Cube"" Office Refrigerators", Barry French, 293, 457.81, 208.16 + + 3, "Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl ", Barry French, 293, 46.71, 8.69 + 4, R380, Clay Rozendal, 483, 1198.97, 195.99 +3.1 + 5, Holmes HEPA Air Purifier, Carlos Soltero, 515, 30.94, 21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000119.csv b/src/test/resources/formatter/generated/TestResult00000119.csv new file mode 100644 index 00000000..3dafcba9 --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000119.csv @@ -0,0 +1,7 @@ + 1 , "Eldon Base for stackable storage shelf, platinum" , Muhammed MacIntyre , 3 , -213.25 , 38.94 + 2 , " 1.7 Cubic Foot Compact ""Cube"" Office Refrigerators" , Barry French , 293 , 457.81 , 208.16 + + 3 , "Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl " , Barry French , 293 , 46.71 , 8.69 + 4 , R380 , Clay Rozendal , 483 , 1198.97 , 195.99 +3.1 + 5 , Holmes HEPA Air Purifier , Carlos Soltero , 515 , 30.94 , 21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000120.csv b/src/test/resources/formatter/generated/TestResult00000120.csv new file mode 100644 index 00000000..5f3c1946 --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000120.csv @@ -0,0 +1,7 @@ + 1, "Eldon Base for stackable storage shelf, platinum",Muhammed MacIntyre, 3,-213.25, 38.94 + 2," 1.7 Cubic Foot Compact ""Cube"" Office Refrigerators", Barry French,293, 457.81,208.16 + + 3, "Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl ", Barry French,293, 46.71, 8.69 + 4, R380, Clay Rozendal,483,1198.97,195.99 +3.1 + 5, Holmes HEPA Air Purifier, Carlos Soltero,515, 30.94, 21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000121.csv b/src/test/resources/formatter/generated/TestResult00000121.csv new file mode 100644 index 00000000..6b568c4f --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000121.csv @@ -0,0 +1,7 @@ + 1 , "Eldon Base for stackable storage shelf, platinum" ,Muhammed MacIntyre , 3 ,-213.25 , 38.94 + 2 ," 1.7 Cubic Foot Compact ""Cube"" Office Refrigerators" , Barry French ,293 , 457.81 ,208.16 + + 3 , "Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl " , Barry French ,293 , 46.71 , 8.69 + 4 , R380 , Clay Rozendal ,483 ,1198.97 ,195.99 +3.1 + 5 , Holmes HEPA Air Purifier , Carlos Soltero ,515 , 30.94 , 21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000122.csv b/src/test/resources/formatter/generated/TestResult00000122.csv new file mode 100644 index 00000000..562bd7fd --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000122.csv @@ -0,0 +1,7 @@ + 1, "Eldon Base for stackable storage shelf, platinum", Muhammed MacIntyre, 3, -213.25, 38.94 + 2, " 1.7 Cubic Foot Compact ""Cube"" Office Refrigerators", Barry French, 293, 457.81, 208.16 + + 3, "Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl ", Barry French, 293, 46.71, 8.69 + 4, R380, Clay Rozendal, 483, 1198.97, 195.99 +3.1 + 5, Holmes HEPA Air Purifier, Carlos Soltero, 515, 30.94, 21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000123.csv b/src/test/resources/formatter/generated/TestResult00000123.csv new file mode 100644 index 00000000..3dafcba9 --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000123.csv @@ -0,0 +1,7 @@ + 1 , "Eldon Base for stackable storage shelf, platinum" , Muhammed MacIntyre , 3 , -213.25 , 38.94 + 2 , " 1.7 Cubic Foot Compact ""Cube"" Office Refrigerators" , Barry French , 293 , 457.81 , 208.16 + + 3 , "Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl " , Barry French , 293 , 46.71 , 8.69 + 4 , R380 , Clay Rozendal , 483 , 1198.97 , 195.99 +3.1 + 5 , Holmes HEPA Air Purifier , Carlos Soltero , 515 , 30.94 , 21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000124.csv b/src/test/resources/formatter/generated/TestResult00000124.csv new file mode 100644 index 00000000..5f3c1946 --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000124.csv @@ -0,0 +1,7 @@ + 1, "Eldon Base for stackable storage shelf, platinum",Muhammed MacIntyre, 3,-213.25, 38.94 + 2," 1.7 Cubic Foot Compact ""Cube"" Office Refrigerators", Barry French,293, 457.81,208.16 + + 3, "Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl ", Barry French,293, 46.71, 8.69 + 4, R380, Clay Rozendal,483,1198.97,195.99 +3.1 + 5, Holmes HEPA Air Purifier, Carlos Soltero,515, 30.94, 21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000125.csv b/src/test/resources/formatter/generated/TestResult00000125.csv new file mode 100644 index 00000000..6b568c4f --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000125.csv @@ -0,0 +1,7 @@ + 1 , "Eldon Base for stackable storage shelf, platinum" ,Muhammed MacIntyre , 3 ,-213.25 , 38.94 + 2 ," 1.7 Cubic Foot Compact ""Cube"" Office Refrigerators" , Barry French ,293 , 457.81 ,208.16 + + 3 , "Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl " , Barry French ,293 , 46.71 , 8.69 + 4 , R380 , Clay Rozendal ,483 ,1198.97 ,195.99 +3.1 + 5 , Holmes HEPA Air Purifier , Carlos Soltero ,515 , 30.94 , 21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000126.csv b/src/test/resources/formatter/generated/TestResult00000126.csv new file mode 100644 index 00000000..562bd7fd --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000126.csv @@ -0,0 +1,7 @@ + 1, "Eldon Base for stackable storage shelf, platinum", Muhammed MacIntyre, 3, -213.25, 38.94 + 2, " 1.7 Cubic Foot Compact ""Cube"" Office Refrigerators", Barry French, 293, 457.81, 208.16 + + 3, "Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl ", Barry French, 293, 46.71, 8.69 + 4, R380, Clay Rozendal, 483, 1198.97, 195.99 +3.1 + 5, Holmes HEPA Air Purifier, Carlos Soltero, 515, 30.94, 21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/generated/TestResult00000127.csv b/src/test/resources/formatter/generated/TestResult00000127.csv new file mode 100644 index 00000000..3dafcba9 --- /dev/null +++ b/src/test/resources/formatter/generated/TestResult00000127.csv @@ -0,0 +1,7 @@ + 1 , "Eldon Base for stackable storage shelf, platinum" , Muhammed MacIntyre , 3 , -213.25 , 38.94 + 2 , " 1.7 Cubic Foot Compact ""Cube"" Office Refrigerators" , Barry French , 293 , 457.81 , 208.16 + + 3 , "Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl " , Barry French , 293 , 46.71 , 8.69 + 4 , R380 , Clay Rozendal , 483 , 1198.97 , 195.99 +3.1 + 5 , Holmes HEPA Air Purifier , Carlos Soltero , 515 , 30.94 , 21.78 \ No newline at end of file diff --git a/src/test/resources/formatter/header/1/TestResult00000016.csv b/src/test/resources/formatter/header/1/TestResult00000016.csv new file mode 100644 index 00000000..3d0b49a3 --- /dev/null +++ b/src/test/resources/formatter/header/1/TestResult00000016.csv @@ -0,0 +1,2 @@ + , +0000000000, \ No newline at end of file diff --git a/src/test/resources/formatter/header/1/TestResult00000017.csv b/src/test/resources/formatter/header/1/TestResult00000017.csv new file mode 100644 index 00000000..60d0aca9 --- /dev/null +++ b/src/test/resources/formatter/header/1/TestResult00000017.csv @@ -0,0 +1,2 @@ + , +0000000000 , \ No newline at end of file diff --git a/src/test/resources/formatter/header/1/TestResult00000018.csv b/src/test/resources/formatter/header/1/TestResult00000018.csv new file mode 100644 index 00000000..5ccd7614 --- /dev/null +++ b/src/test/resources/formatter/header/1/TestResult00000018.csv @@ -0,0 +1,2 @@ + , +0000000000, \ No newline at end of file diff --git a/src/test/resources/formatter/header/1/TestResult00000019.csv b/src/test/resources/formatter/header/1/TestResult00000019.csv new file mode 100644 index 00000000..c6e5af6c --- /dev/null +++ b/src/test/resources/formatter/header/1/TestResult00000019.csv @@ -0,0 +1,2 @@ + , +0000000000 , \ No newline at end of file diff --git a/src/test/resources/formatter/header/1/TestResult00000048.csv b/src/test/resources/formatter/header/1/TestResult00000048.csv new file mode 100644 index 00000000..3d0b49a3 --- /dev/null +++ b/src/test/resources/formatter/header/1/TestResult00000048.csv @@ -0,0 +1,2 @@ + , +0000000000, \ No newline at end of file diff --git a/src/test/resources/formatter/header/1/TestResult00000080.csv b/src/test/resources/formatter/header/1/TestResult00000080.csv new file mode 100644 index 00000000..eebff20d --- /dev/null +++ b/src/test/resources/formatter/header/1/TestResult00000080.csv @@ -0,0 +1,2 @@ + , +0000000000, \ No newline at end of file diff --git a/src/test/resources/formatter/header/1/TestResult00000112.csv b/src/test/resources/formatter/header/1/TestResult00000112.csv new file mode 100644 index 00000000..eebff20d --- /dev/null +++ b/src/test/resources/formatter/header/1/TestResult00000112.csv @@ -0,0 +1,2 @@ + , +0000000000, \ No newline at end of file diff --git a/src/test/resources/formatter/header/2/TestResult00000016.csv b/src/test/resources/formatter/header/2/TestResult00000016.csv new file mode 100644 index 00000000..e364a8d2 --- /dev/null +++ b/src/test/resources/formatter/header/2/TestResult00000016.csv @@ -0,0 +1,2 @@ +t , +0000000000, \ No newline at end of file diff --git a/src/test/resources/formatter/header/2/TestResult00000017.csv b/src/test/resources/formatter/header/2/TestResult00000017.csv new file mode 100644 index 00000000..49594942 --- /dev/null +++ b/src/test/resources/formatter/header/2/TestResult00000017.csv @@ -0,0 +1,2 @@ +t , +0000000000 , \ No newline at end of file diff --git a/src/test/resources/formatter/header/2/TestResult00000018.csv b/src/test/resources/formatter/header/2/TestResult00000018.csv new file mode 100644 index 00000000..433001ec --- /dev/null +++ b/src/test/resources/formatter/header/2/TestResult00000018.csv @@ -0,0 +1,2 @@ +t , +0000000000, \ No newline at end of file diff --git a/src/test/resources/formatter/header/2/TestResult00000019.csv b/src/test/resources/formatter/header/2/TestResult00000019.csv new file mode 100644 index 00000000..7e171d2e --- /dev/null +++ b/src/test/resources/formatter/header/2/TestResult00000019.csv @@ -0,0 +1,2 @@ +t , +0000000000 , \ No newline at end of file diff --git a/src/test/resources/formatter/header/2/TestResult00000048.csv b/src/test/resources/formatter/header/2/TestResult00000048.csv new file mode 100644 index 00000000..e364a8d2 --- /dev/null +++ b/src/test/resources/formatter/header/2/TestResult00000048.csv @@ -0,0 +1,2 @@ +t , +0000000000, \ No newline at end of file diff --git a/src/test/resources/formatter/header/2/TestResult00000080.csv b/src/test/resources/formatter/header/2/TestResult00000080.csv new file mode 100644 index 00000000..42995891 --- /dev/null +++ b/src/test/resources/formatter/header/2/TestResult00000080.csv @@ -0,0 +1,2 @@ + t, +0000000000, \ No newline at end of file diff --git a/src/test/resources/formatter/header/2/TestResult00000112.csv b/src/test/resources/formatter/header/2/TestResult00000112.csv new file mode 100644 index 00000000..42995891 --- /dev/null +++ b/src/test/resources/formatter/header/2/TestResult00000112.csv @@ -0,0 +1,2 @@ + t, +0000000000, \ No newline at end of file diff --git a/src/test/resources/formatter/header/3/TestResult00000016.csv b/src/test/resources/formatter/header/3/TestResult00000016.csv new file mode 100644 index 00000000..eec7debc --- /dev/null +++ b/src/test/resources/formatter/header/3/TestResult00000016.csv @@ -0,0 +1,2 @@ +"t ", +0000000000, \ No newline at end of file diff --git a/src/test/resources/formatter/header/3/TestResult00000017.csv b/src/test/resources/formatter/header/3/TestResult00000017.csv new file mode 100644 index 00000000..da23ec73 --- /dev/null +++ b/src/test/resources/formatter/header/3/TestResult00000017.csv @@ -0,0 +1,2 @@ +"t " , +0000000000 , \ No newline at end of file diff --git a/src/test/resources/formatter/header/3/TestResult00000018.csv b/src/test/resources/formatter/header/3/TestResult00000018.csv new file mode 100644 index 00000000..e546402d --- /dev/null +++ b/src/test/resources/formatter/header/3/TestResult00000018.csv @@ -0,0 +1,2 @@ +"t ", +0000000000, \ No newline at end of file diff --git a/src/test/resources/formatter/header/3/TestResult00000019.csv b/src/test/resources/formatter/header/3/TestResult00000019.csv new file mode 100644 index 00000000..f5ae87d7 --- /dev/null +++ b/src/test/resources/formatter/header/3/TestResult00000019.csv @@ -0,0 +1,2 @@ +"t " , +0000000000 , \ No newline at end of file diff --git a/src/test/resources/formatter/header/3/TestResult00000048.csv b/src/test/resources/formatter/header/3/TestResult00000048.csv new file mode 100644 index 00000000..d26854fb --- /dev/null +++ b/src/test/resources/formatter/header/3/TestResult00000048.csv @@ -0,0 +1,2 @@ +"t" , +0000000000, \ No newline at end of file diff --git a/src/test/resources/formatter/header/3/TestResult00000080.csv b/src/test/resources/formatter/header/3/TestResult00000080.csv new file mode 100644 index 00000000..8603888b --- /dev/null +++ b/src/test/resources/formatter/header/3/TestResult00000080.csv @@ -0,0 +1,2 @@ +" t", +0000000000, \ No newline at end of file diff --git a/src/test/resources/formatter/header/3/TestResult00000112.csv b/src/test/resources/formatter/header/3/TestResult00000112.csv new file mode 100644 index 00000000..5e5d2a66 --- /dev/null +++ b/src/test/resources/formatter/header/3/TestResult00000112.csv @@ -0,0 +1,2 @@ + "t", +0000000000, \ No newline at end of file diff --git a/src/test/resources/formatter/header/4/TestResult00000016.csv b/src/test/resources/formatter/header/4/TestResult00000016.csv new file mode 100644 index 00000000..e364a8d2 --- /dev/null +++ b/src/test/resources/formatter/header/4/TestResult00000016.csv @@ -0,0 +1,2 @@ +t , +0000000000, \ No newline at end of file diff --git a/src/test/resources/formatter/header/4/TestResult00000017.csv b/src/test/resources/formatter/header/4/TestResult00000017.csv new file mode 100644 index 00000000..49594942 --- /dev/null +++ b/src/test/resources/formatter/header/4/TestResult00000017.csv @@ -0,0 +1,2 @@ +t , +0000000000 , \ No newline at end of file diff --git a/src/test/resources/formatter/header/4/TestResult00000018.csv b/src/test/resources/formatter/header/4/TestResult00000018.csv new file mode 100644 index 00000000..433001ec --- /dev/null +++ b/src/test/resources/formatter/header/4/TestResult00000018.csv @@ -0,0 +1,2 @@ +t , +0000000000, \ No newline at end of file diff --git a/src/test/resources/formatter/header/4/TestResult00000019.csv b/src/test/resources/formatter/header/4/TestResult00000019.csv new file mode 100644 index 00000000..7e171d2e --- /dev/null +++ b/src/test/resources/formatter/header/4/TestResult00000019.csv @@ -0,0 +1,2 @@ +t , +0000000000 , \ No newline at end of file diff --git a/src/test/resources/formatter/header/4/TestResult00000048.csv b/src/test/resources/formatter/header/4/TestResult00000048.csv new file mode 100644 index 00000000..e364a8d2 --- /dev/null +++ b/src/test/resources/formatter/header/4/TestResult00000048.csv @@ -0,0 +1,2 @@ +t , +0000000000, \ No newline at end of file diff --git a/src/test/resources/formatter/header/4/TestResult00000080.csv b/src/test/resources/formatter/header/4/TestResult00000080.csv new file mode 100644 index 00000000..42995891 --- /dev/null +++ b/src/test/resources/formatter/header/4/TestResult00000080.csv @@ -0,0 +1,2 @@ + t, +0000000000, \ No newline at end of file diff --git a/src/test/resources/formatter/header/4/TestResult00000112.csv b/src/test/resources/formatter/header/4/TestResult00000112.csv new file mode 100644 index 00000000..42995891 --- /dev/null +++ b/src/test/resources/formatter/header/4/TestResult00000112.csv @@ -0,0 +1,2 @@ + t, +0000000000, \ No newline at end of file diff --git a/src/test/resources/formatter/header/5/TestResult00000016.csv b/src/test/resources/formatter/header/5/TestResult00000016.csv new file mode 100644 index 00000000..eec7debc --- /dev/null +++ b/src/test/resources/formatter/header/5/TestResult00000016.csv @@ -0,0 +1,2 @@ +"t ", +0000000000, \ No newline at end of file diff --git a/src/test/resources/formatter/header/5/TestResult00000017.csv b/src/test/resources/formatter/header/5/TestResult00000017.csv new file mode 100644 index 00000000..da23ec73 --- /dev/null +++ b/src/test/resources/formatter/header/5/TestResult00000017.csv @@ -0,0 +1,2 @@ +"t " , +0000000000 , \ No newline at end of file diff --git a/src/test/resources/formatter/header/5/TestResult00000018.csv b/src/test/resources/formatter/header/5/TestResult00000018.csv new file mode 100644 index 00000000..e546402d --- /dev/null +++ b/src/test/resources/formatter/header/5/TestResult00000018.csv @@ -0,0 +1,2 @@ +"t ", +0000000000, \ No newline at end of file diff --git a/src/test/resources/formatter/header/5/TestResult00000019.csv b/src/test/resources/formatter/header/5/TestResult00000019.csv new file mode 100644 index 00000000..f5ae87d7 --- /dev/null +++ b/src/test/resources/formatter/header/5/TestResult00000019.csv @@ -0,0 +1,2 @@ +"t " , +0000000000 , \ No newline at end of file diff --git a/src/test/resources/formatter/header/5/TestResult00000048.csv b/src/test/resources/formatter/header/5/TestResult00000048.csv new file mode 100644 index 00000000..d26854fb --- /dev/null +++ b/src/test/resources/formatter/header/5/TestResult00000048.csv @@ -0,0 +1,2 @@ +"t" , +0000000000, \ No newline at end of file diff --git a/src/test/resources/formatter/header/5/TestResult00000080.csv b/src/test/resources/formatter/header/5/TestResult00000080.csv new file mode 100644 index 00000000..8603888b --- /dev/null +++ b/src/test/resources/formatter/header/5/TestResult00000080.csv @@ -0,0 +1,2 @@ +" t", +0000000000, \ No newline at end of file diff --git a/src/test/resources/formatter/header/5/TestResult00000112.csv b/src/test/resources/formatter/header/5/TestResult00000112.csv new file mode 100644 index 00000000..5e5d2a66 --- /dev/null +++ b/src/test/resources/formatter/header/5/TestResult00000112.csv @@ -0,0 +1,2 @@ + "t", +0000000000, \ No newline at end of file diff --git a/src/test/resources/formatter/header/6/TestResult00000016.csv b/src/test/resources/formatter/header/6/TestResult00000016.csv new file mode 100644 index 00000000..eec7debc --- /dev/null +++ b/src/test/resources/formatter/header/6/TestResult00000016.csv @@ -0,0 +1,2 @@ +"t ", +0000000000, \ No newline at end of file diff --git a/src/test/resources/formatter/header/6/TestResult00000017.csv b/src/test/resources/formatter/header/6/TestResult00000017.csv new file mode 100644 index 00000000..da23ec73 --- /dev/null +++ b/src/test/resources/formatter/header/6/TestResult00000017.csv @@ -0,0 +1,2 @@ +"t " , +0000000000 , \ No newline at end of file diff --git a/src/test/resources/formatter/header/6/TestResult00000018.csv b/src/test/resources/formatter/header/6/TestResult00000018.csv new file mode 100644 index 00000000..e546402d --- /dev/null +++ b/src/test/resources/formatter/header/6/TestResult00000018.csv @@ -0,0 +1,2 @@ +"t ", +0000000000, \ No newline at end of file diff --git a/src/test/resources/formatter/header/6/TestResult00000019.csv b/src/test/resources/formatter/header/6/TestResult00000019.csv new file mode 100644 index 00000000..f5ae87d7 --- /dev/null +++ b/src/test/resources/formatter/header/6/TestResult00000019.csv @@ -0,0 +1,2 @@ +"t " , +0000000000 , \ No newline at end of file diff --git a/src/test/resources/formatter/header/6/TestResult00000048.csv b/src/test/resources/formatter/header/6/TestResult00000048.csv new file mode 100644 index 00000000..1e298249 --- /dev/null +++ b/src/test/resources/formatter/header/6/TestResult00000048.csv @@ -0,0 +1,2 @@ +" t " , +0000000000, \ No newline at end of file diff --git a/src/test/resources/formatter/header/6/TestResult00000080.csv b/src/test/resources/formatter/header/6/TestResult00000080.csv new file mode 100644 index 00000000..8603888b --- /dev/null +++ b/src/test/resources/formatter/header/6/TestResult00000080.csv @@ -0,0 +1,2 @@ +" t", +0000000000, \ No newline at end of file diff --git a/src/test/resources/formatter/header/6/TestResult00000112.csv b/src/test/resources/formatter/header/6/TestResult00000112.csv new file mode 100644 index 00000000..7b587bf4 --- /dev/null +++ b/src/test/resources/formatter/header/6/TestResult00000112.csv @@ -0,0 +1,2 @@ + " t ", +0000000000, \ No newline at end of file diff --git a/src/test/resources/formatter/special/TestResult00000016.csv b/src/test/resources/formatter/special/TestResult00000016.csv new file mode 100644 index 00000000..5d6103fc --- /dev/null +++ b/src/test/resources/formatter/special/TestResult00000016.csv @@ -0,0 +1,69 @@ +0000000000,0000000000,0000000000,0000000000,0000000000,0000000000,0000000000,0000000000,0000000000,0000000000,0000000000,0000000000,0000000000 +this ,is ,a test ," "," ", , ," "," ","1 ","2 ","3 ",end + + , + , + , +t , +t , +t , +t , +t , +t , +t , +" ", +" ", +" ", +" ", +" ", +" ", +" ", +"t ", +"t ", +"t ", +"t ", +"t ", +"t ", +"t ", +"t ", +"t ", +"t ", +"t ", +"t ", +"t ", +"t ", +"t ", +"t ", +"t ", +"t ", +"t ", +"t ", +"t ", +"t ", +"t ", +"t ", +"t ", +"t ", +"t ", +"t ", +"t ", +"t ", +"t ", +"t ", +"t ", +"t ", +"t ", +"t ", +"t ", +"t ", +"t ", +"t ", +"t ", +"t ", +"t ", +"t ", +"t ", +"t ", +"t ", +"t ", +"t ", \ No newline at end of file diff --git a/src/test/resources/formatter/special/TestResult00000017.csv b/src/test/resources/formatter/special/TestResult00000017.csv new file mode 100644 index 00000000..d952ac65 --- /dev/null +++ b/src/test/resources/formatter/special/TestResult00000017.csv @@ -0,0 +1,69 @@ +0000000000 ,0000000000 ,0000000000 ,0000000000 ,0000000000 ,0000000000 ,0000000000 ,0000000000 ,0000000000 ,0000000000 ,0000000000 ,0000000000 ,0000000000 +this ,is ,a test ," " ," " , , ," " ," " ,"1 " ,"2 " ,"3 " ,end + + , + , + , +t , +t , +t , +t , +t , +t , +t , +" " , +" " , +" " , +" " , +" " , +" " , +" " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , \ No newline at end of file diff --git a/src/test/resources/formatter/special/TestResult00000018.csv b/src/test/resources/formatter/special/TestResult00000018.csv new file mode 100644 index 00000000..6b81cf7d --- /dev/null +++ b/src/test/resources/formatter/special/TestResult00000018.csv @@ -0,0 +1,69 @@ +0000000000, 0000000000, 0000000000, 0000000000, 0000000000, 0000000000, 0000000000, 0000000000, 0000000000, 0000000000, 0000000000, 0000000000, 0000000000 +this , is , a test , " ", " ", , , " ", " ", "1 ", "2 ", "3 ", end + + , + , + , +t , +t , +t , +t , +t , +t , +t , +" ", +" ", +" ", +" ", +" ", +" ", +" ", +"t ", +"t ", +"t ", +"t ", +"t ", +"t ", +"t ", +"t ", +"t ", +"t ", +"t ", +"t ", +"t ", +"t ", +"t ", +"t ", +"t ", +"t ", +"t ", +"t ", +"t ", +"t ", +"t ", +"t ", +"t ", +"t ", +"t ", +"t ", +"t ", +"t ", +"t ", +"t ", +"t ", +"t ", +"t ", +"t ", +"t ", +"t ", +"t ", +"t ", +"t ", +"t ", +"t ", +"t ", +"t ", +"t ", +"t ", +"t ", +"t ", \ No newline at end of file diff --git a/src/test/resources/formatter/special/TestResult00000019.csv b/src/test/resources/formatter/special/TestResult00000019.csv new file mode 100644 index 00000000..2b382c96 --- /dev/null +++ b/src/test/resources/formatter/special/TestResult00000019.csv @@ -0,0 +1,69 @@ +0000000000 , 0000000000 , 0000000000 , 0000000000 , 0000000000 , 0000000000 , 0000000000 , 0000000000 , 0000000000 , 0000000000 , 0000000000 , 0000000000 , 0000000000 +this , is , a test , " " , " " , , , " " , " " , "1 " , "2 " , "3 " , end + + , + , + , +t , +t , +t , +t , +t , +t , +t , +" " , +" " , +" " , +" " , +" " , +" " , +" " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , \ No newline at end of file diff --git a/src/test/resources/formatter/special/TestResult00000048.csv b/src/test/resources/formatter/special/TestResult00000048.csv new file mode 100644 index 00000000..71b82324 --- /dev/null +++ b/src/test/resources/formatter/special/TestResult00000048.csv @@ -0,0 +1,69 @@ +0000000000,0000000000,0000000000,0000000000,0000000000,0000000000,0000000000,0000000000,0000000000,0000000000,0000000000,0000000000,0000000000 +this ,is ,a test ,"" ," " , , ," " ," " ," 1" ,"2 " ," 3 " ,end + + , + , + , +t , +t , +t , +t , +t , +t , +t , +"" , +"" , +"" , +"" , +"" , +"" , +"" , +"t" , +"t" , +"t" , +"t" , +"t" , +"t" , +"t" , +" t" , +" t" , +" t" , +" t" , +" t" , +" t" , +" t" , +" t" , +" t" , +" t" , +" t" , +" t" , +" t" , +" t" , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t " , +"t" , +"t" , +"t" , +" t " , +" t " , +" t " , +" t " , +" t " , +" t " , +" t " , +" t " , +" t " , +" t " , +" t " , \ No newline at end of file diff --git a/src/test/resources/formatter/special/TestResult00000080.csv b/src/test/resources/formatter/special/TestResult00000080.csv new file mode 100644 index 00000000..6801a942 --- /dev/null +++ b/src/test/resources/formatter/special/TestResult00000080.csv @@ -0,0 +1,69 @@ +0000000000,0000000000,0000000000,0000000000,0000000000,0000000000,0000000000,0000000000,0000000000,0000000000,0000000000,0000000000,0000000000 + this, is, a test," "," ", , ," "," "," 1"," 2"," 3", end + + , + , + , + t, + t, + t, + t, + t, + t, + t, +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" t", +" t", +" t", +" t", +" t", +" t", +" t", +" t", +" t", +" t", +" t", +" t", +" t", +" t", +" t", +" t", +" t", +" t", +" t", +" t", +" t", +" t", +" t", +" t", +" t", +" t", +" t", +" t", +" t", +" t", +" t", +" t", +" t", +" t", +" t", +" t", +" t", +" t", +" t", +" t", +" t", +" t", +" t", +" t", +" t", +" t", +" t", +" t", +" t", \ No newline at end of file diff --git a/src/test/resources/formatter/special/TestResult00000112.csv b/src/test/resources/formatter/special/TestResult00000112.csv new file mode 100644 index 00000000..8ba62a05 --- /dev/null +++ b/src/test/resources/formatter/special/TestResult00000112.csv @@ -0,0 +1,69 @@ +0000000000,0000000000,0000000000,0000000000,0000000000,0000000000,0000000000,0000000000,0000000000,0000000000,0000000000,0000000000,0000000000 + this, is, a test, "", " ", , , " ", " ", " 1", "2 ", " 3 ", end + + , + , + , + t, + t, + t, + t, + t, + t, + t, + "", + "", + "", + "", + "", + "", + "", + "t", + "t", + "t", + "t", + "t", + "t", + "t", + " t", + " t", + " t", + " t", + " t", + " t", + " t", + " t", + " t", + " t", + " t", + " t", + " t", + " t", + "t ", + "t ", + "t ", + "t ", + "t ", + "t ", + "t ", + "t ", + "t ", + "t ", + "t ", + "t ", + "t ", + "t ", + "t", + "t", + "t", + " t ", + " t ", + " t ", + " t ", + " t ", + " t ", + " t ", + " t ", + " t ", + " t ", + " t ", \ No newline at end of file diff --git a/src/test/resources/formatter/widechar/TestData.csv b/src/test/resources/formatter/widechar/TestData.csv new file mode 100644 index 00000000..80be3de4 --- /dev/null +++ b/src/test/resources/formatter/widechar/TestData.csv @@ -0,0 +1,7 @@ +000,000,000,000 +this,is,a,"test", +, 汉字宋, "汉字宋", + +, +汉字宋, +"汉字宋", diff --git a/src/test/resources/formatter/widechar/TestResult00000128.csv b/src/test/resources/formatter/widechar/TestResult00000128.csv new file mode 100644 index 00000000..80be3de4 --- /dev/null +++ b/src/test/resources/formatter/widechar/TestResult00000128.csv @@ -0,0 +1,7 @@ +000,000,000,000 +this,is,a,"test", +, 汉字宋, "汉字宋", + +, +汉字宋, +"汉字宋", diff --git a/src/test/resources/formatter/widechar/TestResult00000129.csv b/src/test/resources/formatter/widechar/TestResult00000129.csv new file mode 100644 index 00000000..bd3fb060 --- /dev/null +++ b/src/test/resources/formatter/widechar/TestResult00000129.csv @@ -0,0 +1,7 @@ +000 ,000 ,000 ,000 +this ,is ,a ,"test" , + , 汉字宋 , "汉字宋" , + + , +汉字宋 , +"汉字宋" , diff --git a/src/test/resources/formatter/widechar/TestResult00000144.csv b/src/test/resources/formatter/widechar/TestResult00000144.csv new file mode 100644 index 00000000..7b8ef6ed --- /dev/null +++ b/src/test/resources/formatter/widechar/TestResult00000144.csv @@ -0,0 +1,7 @@ +000 ,000 ,000 ,000 +this ,is ,a ,"test", + ,汉字宋,"汉字宋", + + , +汉字宋 , +"汉字宋", diff --git a/src/test/resources/formatter/widechar/TestResult00000145.csv b/src/test/resources/formatter/widechar/TestResult00000145.csv new file mode 100644 index 00000000..48e4a951 --- /dev/null +++ b/src/test/resources/formatter/widechar/TestResult00000145.csv @@ -0,0 +1,7 @@ +000 ,000 ,000 ,000 +this ,is ,a ,"test" , + ,汉字宋 ,"汉字宋" , + + , +汉字宋 , +"汉字宋" , diff --git a/src/test/resources/formatter/widechar/TestResult00000146.csv b/src/test/resources/formatter/widechar/TestResult00000146.csv new file mode 100644 index 00000000..ff9806f9 --- /dev/null +++ b/src/test/resources/formatter/widechar/TestResult00000146.csv @@ -0,0 +1,7 @@ +000 , 000 , 000 , 000 +this , is , a , "test", + , 汉字宋, "汉字宋", + + , +汉字宋 , +"汉字宋", diff --git a/src/test/resources/formatter/widechar/TestResult00000147.csv b/src/test/resources/formatter/widechar/TestResult00000147.csv new file mode 100644 index 00000000..7704c1b4 --- /dev/null +++ b/src/test/resources/formatter/widechar/TestResult00000147.csv @@ -0,0 +1,7 @@ +000 , 000 , 000 , 000 +this , is , a , "test" , + , 汉字宋 , "汉字宋" , + + , +汉字宋 , +"汉字宋" , diff --git a/src/test/resources/formatter/widechar/TestResult00000176.csv b/src/test/resources/formatter/widechar/TestResult00000176.csv new file mode 100644 index 00000000..7b8ef6ed --- /dev/null +++ b/src/test/resources/formatter/widechar/TestResult00000176.csv @@ -0,0 +1,7 @@ +000 ,000 ,000 ,000 +this ,is ,a ,"test", + ,汉字宋,"汉字宋", + + , +汉字宋 , +"汉字宋", diff --git a/src/test/resources/formatter/widechar/TestResult00000208.csv b/src/test/resources/formatter/widechar/TestResult00000208.csv new file mode 100644 index 00000000..a0044dd3 --- /dev/null +++ b/src/test/resources/formatter/widechar/TestResult00000208.csv @@ -0,0 +1,7 @@ + 000, 000, 000, 000 + this, is, a,"test", + ,汉字宋,"汉字宋", + + , + 汉字宋, +"汉字宋", diff --git a/src/test/resources/formatter/widechar/TestResult00000240.csv b/src/test/resources/formatter/widechar/TestResult00000240.csv new file mode 100644 index 00000000..a0044dd3 --- /dev/null +++ b/src/test/resources/formatter/widechar/TestResult00000240.csv @@ -0,0 +1,7 @@ + 000, 000, 000, 000 + this, is, a,"test", + ,汉字宋,"汉字宋", + + , + 汉字宋, +"汉字宋", diff --git a/src/test/resources/formatter/widecharambiguous/TestData.csv b/src/test/resources/formatter/widecharambiguous/TestData.csv new file mode 100644 index 00000000..40e3f321 --- /dev/null +++ b/src/test/resources/formatter/widecharambiguous/TestData.csv @@ -0,0 +1,7 @@ +000,000,000,000 +this,is,®,"test", +, 汉®宋, "汉®宋", + +, +汉®宋, +"汉®宋", diff --git a/src/test/resources/formatter/widecharambiguous/TestResult00000384.csv b/src/test/resources/formatter/widecharambiguous/TestResult00000384.csv new file mode 100644 index 00000000..40e3f321 --- /dev/null +++ b/src/test/resources/formatter/widecharambiguous/TestResult00000384.csv @@ -0,0 +1,7 @@ +000,000,000,000 +this,is,®,"test", +, 汉®宋, "汉®宋", + +, +汉®宋, +"汉®宋", diff --git a/src/test/resources/formatter/widecharambiguous/TestResult00000400.csv b/src/test/resources/formatter/widecharambiguous/TestResult00000400.csv new file mode 100644 index 00000000..0b77f8d9 --- /dev/null +++ b/src/test/resources/formatter/widecharambiguous/TestResult00000400.csv @@ -0,0 +1,7 @@ +000 ,000 ,000 ,000 +this ,is ,® ,"test", + ,汉®宋,"汉®宋", + + , +汉®宋 , +"汉®宋", diff --git a/src/test/resources/formatter/widecharambiguous/TestResult00000496.csv b/src/test/resources/formatter/widecharambiguous/TestResult00000496.csv new file mode 100644 index 00000000..af751f18 --- /dev/null +++ b/src/test/resources/formatter/widecharambiguous/TestResult00000496.csv @@ -0,0 +1,7 @@ + 000, 000, 000, 000 + this, is, ®,"test", + ,汉®宋,"汉®宋", + + , + 汉®宋, +"汉®宋",