blob: 3312a7296e039f6f337387381bf5f7077b4672f9 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.camel.dataformat.csv;
import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVRecord;
import org.apache.commons.csv.QuoteMode;
import org.junit.Test;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
/**
* This class tests the creation of the proper {@link org.apache.commons.csv.CSVFormat} based on the properties of
* {@link org.apache.camel.dataformat.csv.CsvDataFormat}.
* It doesn't test the marshalling and unmarshalling based on the CSV format.
*/
public class CsvDataFormatTest {
@Test
public void shouldUseDefaultFormat() {
CsvDataFormat dataFormat = new CsvDataFormat();
// Properly initialized
assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
// Properly used
assertEquals(CSVFormat.DEFAULT, dataFormat.getActiveFormat());
}
@Test
public void shouldUseFormatFromConstructor() {
CsvDataFormat dataFormat = new CsvDataFormat(CSVFormat.EXCEL);
// Properly initialized
assertSame(CSVFormat.EXCEL, dataFormat.getFormat());
// Properly used
assertEquals(CSVFormat.EXCEL, dataFormat.getActiveFormat());
}
@Test
public void shouldUseSpecifiedFormat() {
CsvDataFormat dataFormat = new CsvDataFormat()
.setFormat(CSVFormat.MYSQL);
// Properly saved
assertSame(CSVFormat.MYSQL, dataFormat.getFormat());
// Properly used
assertEquals(CSVFormat.MYSQL, dataFormat.getActiveFormat());
}
@Test
public void shouldFallbackToDefaultFormat() {
CsvDataFormat dataFormat = new CsvDataFormat(CSVFormat.EXCEL)
.setFormat(null);
// Properly saved
assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
// Properly used
assertEquals(CSVFormat.DEFAULT, dataFormat.getActiveFormat());
}
@Test
public void shouldDefineFormatByName() {
CsvDataFormat dataFormat = new CsvDataFormat()
.setFormatName("EXCEL");
// Properly saved
assertSame(CSVFormat.EXCEL, dataFormat.getFormat());
// Properly used
assertEquals(CSVFormat.EXCEL, dataFormat.getActiveFormat());
}
@Test
public void shouldDisableCommentMarker() {
CsvDataFormat dataFormat = new CsvDataFormat()
.setCommentMarkerDisabled(true)
.setCommentMarker('c');
// Properly saved
assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
assertTrue(dataFormat.isCommentMarkerDisabled());
assertEquals(Character.valueOf('c'), dataFormat.getCommentMarker());
// Properly used
assertNull(dataFormat.getActiveFormat().getCommentMarker());
}
@Test
public void shouldOverrideCommentMarker() {
CsvDataFormat dataFormat = new CsvDataFormat()
.setCommentMarker('c');
// Properly saved
assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
assertEquals(Character.valueOf('c'), dataFormat.getCommentMarker());
// Properly used
assertEquals(Character.valueOf('c'), dataFormat.getActiveFormat().getCommentMarker());
}
@Test
public void shouldOverrideDelimiter() {
CsvDataFormat dataFormat = new CsvDataFormat()
.setDelimiter('d');
// Properly saved
assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
assertEquals(Character.valueOf('d'), dataFormat.getDelimiter());
// Properly used
assertEquals('d', dataFormat.getActiveFormat().getDelimiter());
}
@Test
public void shouldDisableEscape() {
CsvDataFormat dataFormat = new CsvDataFormat()
.setEscapeDisabled(true)
.setEscape('e');
// Properly saved
assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
assertTrue(dataFormat.isEscapeDisabled());
assertEquals(Character.valueOf('e'), dataFormat.getEscape());
// Properly used
assertNull(dataFormat.getActiveFormat().getEscapeCharacter());
}
@Test
public void shouldOverrideEscape() {
CsvDataFormat dataFormat = new CsvDataFormat()
.setEscape('e');
// Properly saved
assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
assertEquals(Character.valueOf('e'), dataFormat.getEscape());
// Properly used
assertEquals(Character.valueOf('e'), dataFormat.getActiveFormat().getEscapeCharacter());
}
@Test
public void shouldDisableHeader() {
CsvDataFormat dataFormat = new CsvDataFormat()
.setHeaderDisabled(true)
.setHeader(new String[]{"a", "b", "c"});
// Properly saved
assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
assertTrue(dataFormat.isHeaderDisabled());
assertArrayEquals(new String[]{"a", "b", "c"}, dataFormat.getHeader());
// Properly used
assertNull(dataFormat.getActiveFormat().getHeader());
}
@Test
public void shouldOverrideHeader() {
CsvDataFormat dataFormat = new CsvDataFormat()
.setHeader(new String[]{"a", "b", "c"});
// Properly saved
assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
assertArrayEquals(new String[]{"a", "b", "c"}, dataFormat.getHeader());
// Properly used
assertArrayEquals(new String[]{"a", "b", "c"}, dataFormat.getActiveFormat().getHeader());
}
@Test
public void shouldAllowMissingColumnNames() {
CsvDataFormat dataFormat = new CsvDataFormat()
.setAllowMissingColumnNames(true);
// Properly saved
assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
assertEquals(Boolean.TRUE, dataFormat.getAllowMissingColumnNames());
// Properly used
assertTrue(dataFormat.getActiveFormat().getAllowMissingColumnNames());
}
@Test
public void shouldNotAllowMissingColumnNames() {
CsvDataFormat dataFormat = new CsvDataFormat()
.setAllowMissingColumnNames(false);
// Properly saved
assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
assertEquals(Boolean.FALSE, dataFormat.getAllowMissingColumnNames());
// Properly used
assertFalse(dataFormat.getActiveFormat().getAllowMissingColumnNames());
}
@Test
public void shouldIgnoreEmptyLines() {
CsvDataFormat dataFormat = new CsvDataFormat()
.setIgnoreEmptyLines(true);
// Properly saved
assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
assertEquals(Boolean.TRUE, dataFormat.getIgnoreEmptyLines());
// Properly used
assertTrue(dataFormat.getActiveFormat().getIgnoreEmptyLines());
}
@Test
public void shouldNotIgnoreEmptyLines() {
CsvDataFormat dataFormat = new CsvDataFormat()
.setIgnoreEmptyLines(false);
// Properly saved
assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
assertEquals(Boolean.FALSE, dataFormat.getIgnoreEmptyLines());
// Properly used
assertFalse(dataFormat.getActiveFormat().getIgnoreEmptyLines());
}
@Test
public void shouldIgnoreSurroundingSpaces() {
CsvDataFormat dataFormat = new CsvDataFormat()
.setIgnoreSurroundingSpaces(true);
// Properly saved
assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
assertEquals(Boolean.TRUE, dataFormat.getIgnoreSurroundingSpaces());
// Properly used
assertTrue(dataFormat.getActiveFormat().getIgnoreSurroundingSpaces());
}
@Test
public void shouldNotIgnoreSurroundingSpaces() {
CsvDataFormat dataFormat = new CsvDataFormat()
.setIgnoreSurroundingSpaces(false);
// Properly saved
assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
assertEquals(Boolean.FALSE, dataFormat.getIgnoreSurroundingSpaces());
// Properly used
assertFalse(dataFormat.getActiveFormat().getIgnoreSurroundingSpaces());
}
@Test
public void shouldDisableNullString() {
CsvDataFormat dataFormat = new CsvDataFormat()
.setNullStringDisabled(true)
.setNullString("****");
// Properly saved
assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
assertTrue(dataFormat.isNullStringDisabled());
assertEquals("****", dataFormat.getNullString());
// Properly used
assertNull(dataFormat.getActiveFormat().getNullString());
}
@Test
public void shouldOverrideNullString() {
CsvDataFormat dataFormat = new CsvDataFormat()
.setNullString("****");
// Properly saved
assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
assertEquals("****", dataFormat.getNullString());
// Properly used
assertEquals("****", dataFormat.getActiveFormat().getNullString());
}
@Test
public void shouldDisableQuote() {
CsvDataFormat dataFormat = new CsvDataFormat()
.setQuoteDisabled(true)
.setQuote('q');
// Properly saved
assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
assertTrue(dataFormat.isQuoteDisabled());
assertEquals(Character.valueOf('q'), dataFormat.getQuote());
// Properly used
assertNull(dataFormat.getActiveFormat().getQuoteCharacter());
}
@Test
public void shouldOverrideQuote() {
CsvDataFormat dataFormat = new CsvDataFormat()
.setQuote('q');
// Properly saved
assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
assertEquals(Character.valueOf('q'), dataFormat.getQuote());
// Properly used
assertEquals(Character.valueOf('q'), dataFormat.getActiveFormat().getQuoteCharacter());
}
@Test
public void shouldOverrideQuoteMode() {
CsvDataFormat dataFormat = new CsvDataFormat()
.setQuoteMode(QuoteMode.ALL);
// Properly saved
assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
assertEquals(QuoteMode.ALL, dataFormat.getQuoteMode());
// Properly used
assertEquals(QuoteMode.ALL, dataFormat.getActiveFormat().getQuoteMode());
}
@Test
public void shouldDisableRecordSeparator() {
CsvDataFormat dataFormat = new CsvDataFormat()
.setRecordSeparatorDisabled(true)
.setRecordSeparator("separator");
// Properly saved
assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
assertTrue(dataFormat.isRecordSeparatorDisabled());
assertEquals("separator", dataFormat.getRecordSeparator());
// Properly used
assertNull(dataFormat.getActiveFormat().getRecordSeparator());
}
@Test
public void shouldOverrideRecordSeparator() {
CsvDataFormat dataFormat = new CsvDataFormat()
.setRecordSeparator("separator");
// Properly saved
assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
assertEquals("separator", dataFormat.getRecordSeparator());
// Properly used
assertEquals("separator", dataFormat.getActiveFormat().getRecordSeparator());
}
@Test
public void shouldSkipHeaderRecord() {
CsvDataFormat dataFormat = new CsvDataFormat()
.setSkipHeaderRecord(true);
// Properly saved
assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
assertEquals(Boolean.TRUE, dataFormat.getSkipHeaderRecord());
// Properly used
assertTrue(dataFormat.getActiveFormat().getSkipHeaderRecord());
}
@Test
public void shouldNotSkipHeaderRecord() {
CsvDataFormat dataFormat = new CsvDataFormat()
.setSkipHeaderRecord(false);
// Properly saved
assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
assertEquals(Boolean.FALSE, dataFormat.getSkipHeaderRecord());
// Properly used
assertFalse(dataFormat.getActiveFormat().getSkipHeaderRecord());
}
@Test
public void shouldHandleLazyLoad() {
CsvDataFormat dataFormat = new CsvDataFormat()
.setLazyLoad(true);
// Properly saved
assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
assertTrue(dataFormat.isLazyLoad());
// Properly used (it doesn't modify the format)
assertEquals(CSVFormat.DEFAULT, dataFormat.getActiveFormat());
}
@Test
public void shouldHandleUseMaps() {
CsvDataFormat dataFormat = new CsvDataFormat()
.setUseMaps(true);
// Properly saved
assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
assertTrue(dataFormat.isUseMaps());
// Properly used (it doesn't modify the format)
assertEquals(CSVFormat.DEFAULT, dataFormat.getActiveFormat());
}
@Test
public void shouldHandleRecordConverter() {
CsvRecordConverter<String> converter = new CsvRecordConverter<String>() {
@Override
public String convertRecord(CSVRecord record) {
return record.toString();
}
};
CsvDataFormat dataFormat = new CsvDataFormat()
.setRecordConverter(converter);
// Properly saved
assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
assertSame(converter, dataFormat.getRecordConverter());
// Properly used (it doesn't modify the format)
assertEquals(CSVFormat.DEFAULT, dataFormat.getActiveFormat());
}
@Test
public void testTrim() {
// Set to TRUE
CsvDataFormat dataFormat = new CsvDataFormat().setTrim(true);
// Properly saved
assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
assertEquals(Boolean.TRUE, dataFormat.getTrim());
// Properly used
assertTrue(dataFormat.getActiveFormat().getTrim());
// NOT set
dataFormat = new CsvDataFormat();
// Properly saved
assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
assertEquals(null, dataFormat.getTrim());
// Properly used
assertFalse(dataFormat.getActiveFormat().getTrim());
// Set to false
dataFormat = new CsvDataFormat().setTrim(false);
// Properly saved
assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
assertEquals(Boolean.FALSE, dataFormat.getTrim());
// Properly used
assertFalse(dataFormat.getActiveFormat().getTrim());
}
@Test
public void testIgnoreHeaderCase() {
// Set to TRUE
CsvDataFormat dataFormat = new CsvDataFormat().setIgnoreHeaderCase(true);
// Properly saved
assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
assertEquals(Boolean.TRUE, dataFormat.getIgnoreHeaderCase());
// Properly used
assertTrue(dataFormat.getActiveFormat().getIgnoreHeaderCase());
// NOT set
dataFormat = new CsvDataFormat();
// Properly saved
assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
assertEquals(null, dataFormat.getIgnoreHeaderCase());
// Properly used
assertFalse(dataFormat.getActiveFormat().getIgnoreHeaderCase());
// Set to false
dataFormat = new CsvDataFormat().setIgnoreHeaderCase(false);
// Properly saved
assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
assertEquals(Boolean.FALSE, dataFormat.getIgnoreHeaderCase());
// Properly used
assertFalse(dataFormat.getActiveFormat().getIgnoreHeaderCase());
}
@Test
public void testTrailingDelimiter() {
// Set to TRUE
CsvDataFormat dataFormat = new CsvDataFormat().setTrailingDelimiter(true);
// Properly saved
assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
assertEquals(Boolean.TRUE, dataFormat.getTrailingDelimiter());
// Properly used
assertTrue(dataFormat.getActiveFormat().getTrailingDelimiter());
// NOT set
dataFormat = new CsvDataFormat();
// Properly saved
assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
assertEquals(null, dataFormat.getTrailingDelimiter());
// Properly used
assertFalse(dataFormat.getActiveFormat().getTrailingDelimiter());
// Set to false
dataFormat = new CsvDataFormat().setTrailingDelimiter(false);
// Properly saved
assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
assertEquals(Boolean.FALSE, dataFormat.getTrailingDelimiter());
// Properly used
assertFalse(dataFormat.getActiveFormat().getTrailingDelimiter());
}
}