@Test public void should_accept_custom_value_accessor() { // given Sorter sorter = new Sorter( Arrays.asList(new Column(Types.text(), "foo", new ReversingValueAccessor())), Arrays.asList(SortOrder.ASC)); List<Something> rows = TestUtils.load("3"); // when List<?> processedRows = sorter.process(rows); // then assertThat(processedRows).isEqualTo(TestUtils.load("3_foo_asc_revacc")); }
public class SorterTest { private Column fooColumn = new Column(Types.text(), "foo"); private Column barColumn = new Column(Types.numeric(), "bar"); @Test @SuppressWarnings("unchecked") public void should_do_nothing_if_there_are_no_sortable_columns() { // given Sorter sorter = new Sorter(Collections.EMPTY_LIST, Collections.EMPTY_LIST); List<Something> rows = TestUtils.load("4"); // when List<?> processed = sorter.process(rows); // then assertThat(processed).isSameAs(rows); } @Test public void should_not_change_order_of_input_rows() { // given List<Something> rows = TestUtils.load("1"); Sorter sorter = new Sorter(Arrays.asList(fooColumn), Arrays.asList(SortOrder.ASC)); // when sorter.process(rows); // then assertThat(rows).isEqualTo(TestUtils.load("1")); } @Test public void should_sort_by_one_column_asc() { // given List<Something> rows = TestUtils.load("1"); Sorter sorter = new Sorter(Arrays.asList(fooColumn), Arrays.asList(SortOrder.ASC)); // when List<?> processedRows = sorter.process(rows); // then assertThat(processedRows).isEqualTo(TestUtils.load("1_foo_asc")); } @Test public void should_sort_by_one_column_desc() { // given List<Something> rows = TestUtils.load("1"); Sorter sorter = new Sorter(Arrays.asList(fooColumn), Arrays.asList(SortOrder.DESC)); // when List<?> processedRows = sorter.process(rows); // then assertThat(processedRows).isEqualTo(TestUtils.load("1_foo_desc")); } @Test public void should_preserve_order_of_elements_having_same_value_in_column() { // given List<Something> rows = TestUtils.load("2"); Sorter sorter = new Sorter(Arrays.asList(fooColumn), Arrays.asList(SortOrder.ASC)); // when List<?> processedRows = sorter.process(rows); // then assertThat(processedRows).isEqualTo(TestUtils.load("2_foo_asc")); } @Test public void should_sort_by_two_columns_both_asc() { // given List<Something> rows = TestUtils.load("2"); Sorter sorter = new Sorter( Arrays.asList(fooColumn, barColumn), Arrays.asList(SortOrder.ASC, SortOrder.ASC)); // when List<?> processedRows = sorter.process(rows); // then assertThat(processedRows).isEqualTo(TestUtils.load("2_foo_asc_bar_asc")); } @Test public void should_sort_by_two_columns_asc_desc() { // given List<Something> rows = TestUtils.load("2"); Sorter sorter = new Sorter( Arrays.asList(fooColumn, barColumn), Arrays.asList(SortOrder.ASC, SortOrder.DESC)); // when List<?> processedRows = sorter.process(rows); // then assertThat(processedRows).isEqualTo(TestUtils.load("2_foo_asc_bar_desc")); } @Test public void should_accept_custom_value_accessor() { // given Sorter sorter = new Sorter( Arrays.asList(new Column(Types.text(), "foo", new ReversingValueAccessor())), Arrays.asList(SortOrder.ASC)); List<Something> rows = TestUtils.load("3"); // when List<?> processedRows = sorter.process(rows); // then assertThat(processedRows).isEqualTo(TestUtils.load("3_foo_asc_revacc")); } }