package org.beanfabrics.swing.table;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertSame;
import junit.framework.JUnit4TestAdapter;
import org.beanfabrics.Path;
import org.beanfabrics.model.AbstractPM;
import org.beanfabrics.model.IntegerPM;
import org.beanfabrics.model.ListPM;
import org.beanfabrics.model.MapPM;
import org.beanfabrics.model.PMManager;
import org.beanfabrics.model.TextPM;
import org.junit.Before;
import org.junit.Test;
public class BnTableSortingTest {
public static junit.framework.Test suite() {
return new JUnit4TestAdapter(BnTableSortingTest.class);
}
private BnTable table;
private MyListPM listPm;
private MyMapPM mapPm;
/**
* @throws java.lang.Exception
*/
@Before
public void setUp()
throws Exception {
table = new BnTable();
listPm = new MyListPM();
mapPm = new MyMapPM();
}
private class RowPM extends AbstractPM {
TextPM text = new TextPM();
IntegerPM number = new IntegerPM();
public RowPM(String aText, Integer aNumber) {
text.setText(aText);
number.setInteger(aNumber);
PMManager.setup(this);
}
}
private class MyListPM extends ListPM<RowPM> {
public MyListPM() {
PMManager.setup(this);
}
public void fill(RowPM... rows) {
clear();
for( RowPM aRow: rows) {
add(aRow);
}
}
public String getContentString() {
StringBuilder builder = new StringBuilder();
for( RowPM row: this) {
builder.append( row.text.getText());
builder.append( "\t");
builder.append( row.number.getText());
builder.append( "\n");
}
return builder.toString();
}
}
private class MyMapPM extends MapPM<Integer,RowPM> {
public MyMapPM() {
PMManager.setup(this);
}
public void fill(RowPM... rows) {
clear();
int i=0;
for( RowPM aRow: rows) {
put(i++, aRow);
}
}
public String getContentString() {
StringBuilder builder = new StringBuilder();
for( RowPM row: this) {
builder.append( row.text.getText());
builder.append( "\t");
builder.append( row.number.getText());
builder.append( "\n");
}
return builder.toString();
}
}
@Test
public void invertSortingOnList() {
RowPM[] rows = new RowPM[] {
new RowPM("a",1),
new RowPM("z",1),
new RowPM("b",1),
new RowPM("y",1),
new RowPM("e",2),
new RowPM("f",2),
new RowPM("g",2),
};
listPm.fill(rows);
assertEquals("pm.size()", rows.length, listPm.size());
listPm.sortBy(true, new Path("number"));
//System.out.println(listPm.getContentString());
listPm.sortBy(false, new Path("number"));
//System.out.println();
//System.out.println(listPm.getContentString());
for(int i=0, k=rows.length-1; i<rows.length; ++i, --k) {
assertSame("pm.getAt(i="+i+")==rows[k="+k+"]", rows[k], listPm.getAt(i));
}
}
@Test
public void invertSortingOnMap() {
RowPM[] rows = new RowPM[] {
new RowPM("a",1),
new RowPM("z",1),
new RowPM("b",1),
new RowPM("y",1),
new RowPM("e",2),
new RowPM("f",2),
new RowPM("g",2),
};
mapPm.fill(rows);
assertEquals("pm.size()", rows.length, mapPm.size());
mapPm.sortBy(true, new Path("number"));
//System.out.println(mapPm.getContentString());
mapPm.sortBy(false, new Path("number"));
//System.out.println();
//System.out.println(mapPm.getContentString());
for(int i=0, k=rows.length-1; i<rows.length; ++i, --k) {
assertSame("pm.getAt(i="+i+")==rows[k="+k+"]", rows[k], mapPm.getAt(i));
}
}
}