Skip to content
Snippets Groups Projects
Commit 171ad5b7 authored by felmer's avatar felmer
Browse files

LMS-1647 fixed: trailing empty cells beyond number of headers are ignored.

SVN: 17051
parent f5c01f8d
No related branches found
No related tags found
No related merge requests found
......@@ -187,10 +187,15 @@ public class TabSeparatedValueTable
return null;
}
List<String> row = getRowCells(line);
// remove trailing empty cells beyond number of headers
while (row.size() > headers.size() && row.get(row.size() - 1).length() == 0)
{
row.remove(row.size() - 1);
}
if (strictRowSize && row.size() != headers.size())
{
throw new UserFailureException(rowLineIterator.getCurrentLineNumber() - 1
+ ". row has " + row.size() + " instead of " + headers.size() + " cells.");
+ ". data row has " + row.size() + " instead of " + headers.size() + " cells.");
}
for (int i = row.size(); i < headers.size(); i++)
{
......
......@@ -143,10 +143,57 @@ public class TabSeparatedValueTableTest extends AssertJUnit
}
@Test
public void testParsingStrictRowSize()
public void testParsingTrailingEmptyCells()
{
StringReader source = new StringReader("alpha\tbeta\n1\t2\t\n");
TabSeparatedValueTable table = new TabSeparatedValueTable(source, "", true, true, true);
List<Column> columns = table.getColumns();
assertEquals(2, columns.size());
assertEquals("alpha", columns.get(0).getHeader());
assertEquals("[1]", columns.get(0).getValues().toString());
assertEquals("beta", columns.get(1).getHeader());
assertEquals("[2]", columns.get(1).getValues().toString());
assertEquals(false, table.hasMoreRows());
assertEquals(null, table.tryToGetNextRow());
}
@Test
public void testParsingTooLongRows()
{
StringReader source = new StringReader("alpha\tbeta\n1\t2\t\t\t4\n");
TabSeparatedValueTable table = new TabSeparatedValueTable(source, "", true, true, true);
try
{
table.getColumns();
fail("UserFailureException expected");
} catch (UserFailureException ex)
{
assertEquals("1. data row has 5 instead of 2 cells.", ex.getMessage());
}
}
@Test
public void testParsingTrailingEmptyCellsNoStrictRowSize()
{
StringReader source = new StringReader("alpha\tbeta\n1\t\t\t \n");
TabSeparatedValueTable table = new TabSeparatedValueTable(source, "", true, false, true);
List<Column> columns = table.getColumns();
assertEquals(2, columns.size());
assertEquals("alpha", columns.get(0).getHeader());
assertEquals("[1]", columns.get(0).getValues().toString());
assertEquals("beta", columns.get(1).getHeader());
assertEquals("[]", columns.get(1).getValues().toString());
assertEquals(false, table.hasMoreRows());
assertEquals(null, table.tryToGetNextRow());
}
@Test
public void testParsingStrictRowSize()
{
StringReader source = new StringReader("alpha\tbeta\n1\t2\t3\n");
TabSeparatedValueTable table = new TabSeparatedValueTable(source, "", true, true, true);
try
{
......@@ -154,7 +201,7 @@ public class TabSeparatedValueTableTest extends AssertJUnit
fail("UserFailureException expected");
} catch (UserFailureException ex)
{
assertEquals("1. row has 3 instead of 2 cells.", ex.getMessage());
assertEquals("1. data row has 3 instead of 2 cells.", ex.getMessage());
}
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment