/sigmah/src/test/java/org/sigmah/client/page/table/ColumnMappingTest.java

http://sigma-h.googlecode.com/ · Java · 107 lines · 80 code · 26 blank · 1 comment · 10 complexity · 472fb011b0d2a17cc15e3626d904b1c8 MD5 · raw file

  1. package org.sigmah.client.page.table;
  2. import java.util.Arrays;
  3. import java.util.Collections;
  4. import org.junit.Test;
  5. import org.sigmah.shared.domain.AdminEntity;
  6. import org.sigmah.shared.report.content.DimensionCategory;
  7. import org.sigmah.shared.report.content.EntityCategory;
  8. import org.sigmah.shared.report.content.PivotTableData;
  9. import org.sigmah.shared.report.content.PivotTableData.Axis;
  10. import org.sigmah.shared.report.model.AdminDimension;
  11. import org.sigmah.shared.report.model.Dimension;
  12. import org.sigmah.shared.report.model.DimensionType;
  13. import org.sigmah.shared.report.model.PivotTableElement;
  14. import com.extjs.gxt.ui.client.widget.grid.ColumnModel;
  15. import com.extjs.gxt.ui.client.widget.grid.HeaderGroupConfig;
  16. import com.google.gwt.junit.GWTMockUtilities;
  17. public class ColumnMappingTest {
  18. @Test
  19. public void unbalancedColumnTree() {
  20. AdminDimension province = new AdminDimension(1);
  21. AdminDimension territory = new AdminDimension(2);
  22. AdminDimension groupement = new AdminDimension(3);
  23. Dimension site = new Dimension(DimensionType.Site);
  24. Dimension indicator = new Dimension(DimensionType.Indicator);
  25. PivotTableData data = new PivotTableData(Arrays.asList(indicator), Arrays.asList(province, territory, groupement, site));
  26. PivotTableData.Axis kinshasa = data.getRootColumn().addChild(province, entity(1, "Kinshasa"));
  27. PivotTableData.Axis citeDeJoix = kinshasa.addChild(site, entity(1, "Cite de Joix"));
  28. PivotTableData.Axis nordKivu = data.getRootColumn().addChild(province, entity(2, "Nord Kivu"));
  29. PivotTableData.Axis goma = nordKivu.addChild(site, entity(2, "Goma"));
  30. PivotTableData.Axis lubero = nordKivu.addChild(territory, entity(3, "Lubero"));
  31. PivotTableData.Axis baswali = lubero.addChild(groupement, entity(4, "Baswali"));
  32. PivotTableData.Axis beni = baswali.addChild(site, entity(3, "Beni"));
  33. PivotTableElement element = new PivotTableElement();
  34. ColumnMapping mapping = new ColumnMapping(data, new ProviderStub(), new HeaderDecoratorStub());
  35. /* row, col, rowSpan, colSpan */
  36. assertGroupPos(mapping, kinshasa, 0, 1, 3, 1);
  37. assertGroupPos(mapping, nordKivu, 0, 2, 1, 2);
  38. assertGroupPos(mapping, lubero, 1, 3, 1, 1);
  39. assertGroupPos(mapping, baswali, 2, 3, 1, 1);
  40. }
  41. private void assertGroupPos(ColumnMapping mapping, Axis axis, int row,
  42. int col, int rowSpan, int colSpan) {
  43. for(HeaderGroupConfig group : mapping.getColumnModel().getHeaderGroups()) {
  44. if(group.getHtml().equals(axis.getLabel())) {
  45. if(group.getRow() != row || group.getColumn() != col || group.getRowspan() != rowSpan || group.getColspan() != colSpan) {
  46. throw new AssertionError(String.format("Expected header group '%s' at (%d, %d) with rowspan %d, colspan %d, but found at (%d, %d), rowspan %d, colspan %d",
  47. axis.getLabel(),
  48. row,
  49. col,
  50. rowSpan,
  51. colSpan,
  52. group.getRow(),
  53. group.getColumn(),
  54. group.getColspan(),
  55. group.getRowspan()));
  56. }
  57. return;
  58. }
  59. }
  60. throw new AssertionError(String.format("Did not find header group '%s'", axis.getLabel()));
  61. }
  62. private EntityCategory entity(int id, String label) {
  63. return new EntityCategory(id, label);
  64. }
  65. private static class ProviderStub implements PivotCellRendererProvider {
  66. @Override
  67. public PivotCellRenderer getRendererForColumn(Axis column) {
  68. return null;
  69. }
  70. }
  71. private static class HeaderDecoratorStub implements HeaderDecorator {
  72. @Override
  73. public String decorateHeader(Axis axis) {
  74. return axis.getLabel();
  75. }
  76. @Override
  77. public String cornerCellHtml() {
  78. return "";
  79. }
  80. }
  81. }