/* * Copyright 2006-2007 the original author or authors. * * Licensed 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.springframework.batch.item.file.transform; import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; import org.junit.Before; import org.junit.Test; /** * Unit tests for {@link FormatterLineAggregator} * * @author Dave Syer */ public class FormatterLineAggregatorTests { // object under test private FormatterLineAggregator<String[]> aggregator; private FieldExtractor<String[]> defaultFieldExtractor = new FieldExtractor<String[]>() { @Override public Object[] extract(String[] item) { return item; } }; @Before public void setup() { aggregator = new FormatterLineAggregator<String[]>(); aggregator.setFieldExtractor(defaultFieldExtractor); } /** * If no ranges are specified, IllegalArgumentException is thrown */ @Test public void testAggregateNullRecordDescriptor() { String[] args = { "does not matter what is here" }; try { aggregator.aggregate(args); fail("should not work with no format specified"); } catch (IllegalArgumentException expected) { // expected } } /** * Text length exceeds the length of the column. */ @Test public void testAggregateInvalidInputLength() { String[] args = { "Oversize" }; aggregator.setMaximumLength(3); aggregator.setFormat("%3s"); try { aggregator.aggregate(args); fail("Invalid text length, exception should have been thrown"); } catch (IllegalStateException expected) { // expected } } /** * Test aggregation */ @Test public void testAggregate() { String[] args = { "Matchsize", "Smallsize" }; aggregator.setFormat("%9s%9s"); String result = aggregator.aggregate(args); assertEquals("MatchsizeSmallsize", result); } /** * Test aggregation with last range unbound */ @Test public void testAggregateWithLastRangeUnbound() { String[] args = { "Matchsize", "Smallsize" }; aggregator.setFormat("%-12s%s"); String result = aggregator.aggregate(args); assertEquals("Matchsize Smallsize", result); } /** * Test aggregation with right alignment */ @Test public void testAggregateFormattedRight() { String[] args = { "Matchsize", "Smallsize" }; aggregator.setFormat("%13s%10s"); String result = aggregator.aggregate(args); assertEquals(23, result.length()); assertEquals(" Matchsize Smallsize", result); } /** * Test aggregation with center alignment */ @Test public void testAggregateFormattedCenter() { String[] args = { "Matchsize", "Smallsize" }; aggregator.setFormat("%13s%12s"); aggregator.setMinimumLength(25); aggregator.setMaximumLength(25); aggregator.setFieldExtractor(new FieldExtractor<String[]>() { private int[] widths = new int[] { 13, 12 }; @Override public Object[] extract(String[] item) { String[] strings = new String[item.length]; for (int i = 0; i < strings.length; i++) { strings[i] = item[i]; if (item[i].length() < widths[i]) { StringBuilder buffer = new StringBuilder(strings[i]); for (int j = 0; j < (widths[i] - item[i].length() + 1) / 2; j++) { buffer.append(" "); } strings[i] = buffer.toString(); } } return strings; } }); String result = aggregator.aggregate(args); assertEquals(" Matchsize Smallsize ", result); } /** * Test aggregation with left alignment */ @Test public void testAggregateWithCustomPadding() { String[] args = { "Matchsize", "Smallsize" }; aggregator.setFormat("%13s%11s"); aggregator.setMinimumLength(24); aggregator.setMaximumLength(24); aggregator.setFieldExtractor(new FieldExtractor<String[]>() { private int[] widths = new int[] { 13, 11 }; @Override public Object[] extract(String[] item) { String[] strings = new String[item.length]; for (int i = 0; i < strings.length; i++) { strings[i] = item[i]; if (item[i].length() < widths[i]) { StringBuilder buffer = new StringBuilder(strings[i]); for (int j = 0; j < widths[i] - item[i].length(); j++) { buffer.append("."); } strings[i] = buffer.toString(); } } return strings; } }); String result = aggregator.aggregate(args); assertEquals("Matchsize....Smallsize..", result); } /** * Test aggregation with left alignment */ @Test public void testAggregateFormattedLeft() { String[] args = { "Matchsize", "Smallsize" }; aggregator.setFormat("%-13s%-11s"); String result = aggregator.aggregate(args); assertEquals("Matchsize Smallsize ", result); } /** * If one of the passed arguments is null, string filled with spaces should * be returned */ @Test public void testAggregateNullArgument() { String[] args = { "foo", null, "bar" }; aggregator.setFormat("%3s%3s%3s"); assertEquals("foo bar", aggregator.aggregate(args)); } }