Skip to content
This repository was archived by the owner on Jan 22, 2019. It is now read-only.

Extra column delimiter added when column is escaped and follows empty column #38

@Magrath

Description

@Magrath

See below unit test:-

package com.fasterxml.jackson.dataformat.csv.failing;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectWriter;
import com.fasterxml.jackson.dataformat.csv.CsvMapper;
import com.fasterxml.jackson.dataformat.csv.CsvSchema;
import com.fasterxml.jackson.dataformat.csv.ModuleTestBase;
import com.google.common.collect.ImmutableMap;

public class TestWriterWithSomeMoreMissingValues extends ModuleTestBase {

    public void testWithAStringAndAUuid() throws JsonProcessingException {
        final CsvSchema schema = new CsvSchema.Builder()
                .addColumn("string1", CsvSchema.ColumnType.STRING)
                .addColumn("string2", CsvSchema.ColumnType.STRING)
                .build();
        final ObjectWriter writer = new CsvMapper().writer().withSchema(schema);

        final ImmutableMap.Builder<String, String> builder = new ImmutableMap.Builder<String, String>();
        builder.put("string1", "hello");
        builder.put("string2", "2a36b911-9699-45d2-abd5-b9f2d2c9c4a3");

        final String csv = writer.writeValueAsString(builder.build());

        assertEquals("hello,\"2a36b911-9699-45d2-abd5-b9f2d2c9c4a3\"\n", csv);
    }

    public void testWithTwoStringsAndAUuid() throws JsonProcessingException {

        final CsvSchema schema = new CsvSchema.Builder()
                .addColumn("string1", CsvSchema.ColumnType.STRING)
                .addColumn("string2", CsvSchema.ColumnType.STRING)
                .addColumn("string3", CsvSchema.ColumnType.STRING)
                .build();
        final ObjectWriter writer = new CsvMapper().writer().withSchema(schema);

        final ImmutableMap.Builder<String, String> builder = new ImmutableMap.Builder<String, String>();
        builder.put("string1", "hello");
        builder.put("string2", "world");
        builder.put("string3", "2a36b911-9699-45d2-abd5-b9f2d2c9c4a3");

        final String csv = writer.writeValueAsString(builder.build());

        assertEquals("hello,world,\"2a36b911-9699-45d2-abd5-b9f2d2c9c4a3\"\n", csv);
    }

    public void testWithANullAStringAndAUuid() throws JsonProcessingException {

        final CsvSchema schema = new CsvSchema.Builder()
                .addColumn("string1", CsvSchema.ColumnType.STRING)
                .addColumn("string2", CsvSchema.ColumnType.STRING)
                .addColumn("string3", CsvSchema.ColumnType.STRING)
                .build();
        final ObjectWriter writer = new CsvMapper().writer().withSchema(schema);

        final ImmutableMap.Builder<String, String> builder = new ImmutableMap.Builder<String, String>();
        builder.put("string2", "world");
        builder.put("string3", "2a36b911-9699-45d2-abd5-b9f2d2c9c4a3");

        final String csv = writer.writeValueAsString(builder.build());

        assertEquals(",world,\"2a36b911-9699-45d2-abd5-b9f2d2c9c4a3\"\n", csv);
    }

    public void testWithAStringANullAndAUuid() throws JsonProcessingException {

        final CsvSchema schema = new CsvSchema.Builder()
                .addColumn("string1", CsvSchema.ColumnType.STRING)
                .addColumn("string2", CsvSchema.ColumnType.STRING)
                .addColumn("string3", CsvSchema.ColumnType.STRING)
                .build();
        final ObjectWriter writer = new CsvMapper().writer().withSchema(schema);

        final ImmutableMap.Builder<String, String> builder = new ImmutableMap.Builder<String, String>();
        builder.put("string1", "hello");
        builder.put("string3", "2a36b911-9699-45d2-abd5-b9f2d2c9c4a3");

        final String csv = writer.writeValueAsString(builder.build());

        assertEquals("hello,,\"2a36b911-9699-45d2-abd5-b9f2d2c9c4a3\"\n", csv);
    }

    public void testWithThreeStringsAndAUuid() throws JsonProcessingException {

        final CsvSchema schema = new CsvSchema.Builder()
                .addColumn("string1", CsvSchema.ColumnType.STRING)
                .addColumn("string2", CsvSchema.ColumnType.STRING)
                .addColumn("string3", CsvSchema.ColumnType.STRING)
                .addColumn("string4", CsvSchema.ColumnType.STRING)
                .build();
        final ObjectWriter writer = new CsvMapper().writer().withSchema(schema);

        final ImmutableMap.Builder<String, String> builder = new ImmutableMap.Builder<String, String>();
        builder.put("string1", "hello");
        builder.put("string2", "dear");
        builder.put("string3", "world");
        builder.put("string4", "2a36b911-9699-45d2-abd5-b9f2d2c9c4a3");

        final String csv = writer.writeValueAsString(builder.build());

        assertEquals("hello,dear,world,\"2a36b911-9699-45d2-abd5-b9f2d2c9c4a3\"\n", csv);
    }

    public void testWithANullAStringAStringAndAUuid() throws JsonProcessingException {

        final CsvSchema schema = new CsvSchema.Builder()
                .addColumn("string1", CsvSchema.ColumnType.STRING)
                .addColumn("string2", CsvSchema.ColumnType.STRING)
                .addColumn("string3", CsvSchema.ColumnType.STRING)
                .addColumn("string4", CsvSchema.ColumnType.STRING)
                .build();
        final ObjectWriter writer = new CsvMapper().writer().withSchema(schema);

        final ImmutableMap.Builder<String, String> builder = new ImmutableMap.Builder<String, String>();
        builder.put("string2", "hello");
        builder.put("string3", "world");
        builder.put("string4", "2a36b911-9699-45d2-abd5-b9f2d2c9c4a3");

        final String csv = writer.writeValueAsString(builder.build());

        assertEquals(",hello,world,\"2a36b911-9699-45d2-abd5-b9f2d2c9c4a3\"\n", csv);
    }

    public void testWithAStringANullAStringAndAUuid() throws JsonProcessingException {

        final CsvSchema schema = new CsvSchema.Builder()
                .addColumn("string1", CsvSchema.ColumnType.STRING)
                .addColumn("string2", CsvSchema.ColumnType.STRING)
                .addColumn("string3", CsvSchema.ColumnType.STRING)
                .addColumn("string4", CsvSchema.ColumnType.STRING)
                .build();
        final ObjectWriter writer = new CsvMapper().writer().withSchema(schema);

        final ImmutableMap.Builder<String, String> builder = new ImmutableMap.Builder<String, String>();
        builder.put("string1", "hello");
        builder.put("string3", "world");
        builder.put("string4", "2a36b911-9699-45d2-abd5-b9f2d2c9c4a3");

        final String csv = writer.writeValueAsString(builder.build());

        assertEquals("hello,,world,\"2a36b911-9699-45d2-abd5-b9f2d2c9c4a3\"\n", csv);
    }

    public void testWithTwoStringsANullAndAUuid() throws JsonProcessingException {

        final CsvSchema schema = new CsvSchema.Builder()
                .addColumn("string1", CsvSchema.ColumnType.STRING)
                .addColumn("string2", CsvSchema.ColumnType.STRING)
                .addColumn("string3", CsvSchema.ColumnType.STRING)
                .addColumn("string4", CsvSchema.ColumnType.STRING)
                .build();
        final ObjectWriter writer = new CsvMapper().writer().withSchema(schema);

        final ImmutableMap.Builder<String, String> builder = new ImmutableMap.Builder<String, String>();
        builder.put("string1", "hello");
        builder.put("string2", "world");
        builder.put("string4", "2a36b911-9699-45d2-abd5-b9f2d2c9c4a3");

        final String csv = writer.writeValueAsString(builder.build());

        assertEquals("hello,world,,\"2a36b911-9699-45d2-abd5-b9f2d2c9c4a3\"\n", csv);
    }

    public void testWithTwoStringsANullAndAString() throws JsonProcessingException {

        final CsvSchema schema = new CsvSchema.Builder()
                .addColumn("string1", CsvSchema.ColumnType.STRING)
                .addColumn("string2", CsvSchema.ColumnType.STRING)
                .addColumn("string3", CsvSchema.ColumnType.STRING)
                .addColumn("string4", CsvSchema.ColumnType.STRING)
                .build();
        final ObjectWriter writer = new CsvMapper().writer().withSchema(schema);

        final ImmutableMap.Builder<String, String> builder = new ImmutableMap.Builder<String, String>();
        builder.put("string1", "hello");
        builder.put("string2", "world");
        builder.put("string4", "again");

        final String csv = writer.writeValueAsString(builder.build());

        assertEquals("hello,world,,again\n", csv);
    }

}

All tests except testWithAStringANullAStringAndAUuid pass.

testWithAStringANullAStringAndAUuid expects hello,,world,"2a36b911-9699-45d2-abd5-b9f2d2c9c4a3" but gets hello,,world,,"2a36b911-9699-45d2-abd5-b9f2d2c9c4a3".

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions