//package org.molgenis.matrix.component.legacy;
//
//import org.testng.Assert;
//import org.testng.annotations.BeforeClass;
//import org.testng.annotations.Test;
//
//public class TestMatrixComponent
//{
//
// MatrixRenderer<SomeRowType, SomeColType, SomeValueType> renderer;
// MatrixRendererHelper<SomeRowType, SomeColType, SomeValueType> helper;
//
// /*
//
// Reference: original complete matrix (without col/row attributes)
//
// MYB28 HOX3 CCR1 SRF2 AOP2 COL7A1 RAS
// Laura 56 112 168 224 280 336 392
// Karl 57 114 171 228 285 342 399
// Bill 58 116 174 232 290 348 406
// Lee 59 118 177 236 295 354 413
// Kara 60 120 180 240 300 360 420
// Gaius 61 122 183 244 305 366 427
// Saul 62 124 186 248 310 372 434
// Sharon 63 126 189 252 315 378 441
//
// */
//
// @BeforeClass
// public void setup() throws Exception
// {
// TestImpl t = new TestImpl();
// renderer = new MatrixRenderer<SomeRowType, SomeColType, SomeValueType>(
// "testName", t, t, "noScreenName");
// helper = new MatrixRendererHelper<SomeRowType, SomeColType, SomeValueType>();
// }
//
// @Test
// public void creation() throws Exception
// {
// Assert.assertEquals(renderer.getRendered().getValues()[0][0].getValue().intValue(), 56);
// Assert.assertEquals(renderer.getRendered().getValues()[1][1].getValue().intValue(), 114);
//
//
// //etc
//
// //Assert.assertEquals(helper.colHeaderToStringForTest(renderer.getRendered()), "MYB28 HOX3 CCR1 SRF2 AOP2 ");
// //Assert.assertEquals(helper.rowHeaderToStringForTest(renderer.getRendered()), "Laura Karl Bill Lee Kara Gaius Saul Sharon ");
//
// //remove filters and print original
// //renderer.removeFilter(0);
// //renderer.removeFilter(0);
// //renderer.filterAndRender();
// //System.out.println(helper.matrixToString(renderer.getRendered()));
//
//// System.out.println("column headers: " + helper.colHeaderToStringForTest(renderer.getRendered()));
//// System.out.println("row headers: " + helper.rowHeaderToStringForTest(renderer.getRendered()));
//// System.out.println("values: " + helper.valuesToStringForTest(renderer.getRendered()));
// }
//
// @Test(dependsOnMethods="creation")
// public void paging1() throws Exception
// {
// renderer.updatePaging(1, 1);
// renderer.filterAndRender();
//
// // System.out.println(renderer.getRendered().toString());
//
// Assert.assertEquals(renderer.getRendered().getRowHeaders().size(), 1);
// Assert.assertEquals(renderer.getRendered().getColHeaders().size(), 1);
// Assert.assertEquals(renderer.getRendered().getValues().length, 1);
// Assert.assertEquals(renderer.getRendered().getValues()[0].length, 1);
// Assert.assertEquals(renderer.getRendered().getValues()[0][0].getValue().intValue(), 56);
//
// //etc
// }
//
// @Test(dependsOnMethods="paging1")
// public void paging2() throws Exception
// {
//
// renderer.updatePaging(1, 1, 2);
// renderer.filterAndRender();
// renderer.moveRight();
// renderer.moveDown();
// renderer.filterAndRender();
//
// Assert.assertEquals(renderer.getRendered().getValues()[0][0].getValue().intValue(), 174);
//
// //etc
// }
//
// /**
// * brainstormy...
// *
// * Questions:
// *
// * Behaviour of filters: need clear definition for some cases:
// *
// * Should filters always be 'rollbacked' when the apply fails? or keep bad filters and let people sort it out?
// * or evaluate filters until exception, and report status back in gui?
// * Can people drag the paging filters 'through' the other filters? Ie. rowlimit -> colvalue -> collimit
// * instead of always moving paging filters to the back of the stack
// * Can people filter using an already excluded subset? Ie. remove a row with a rowheader filter, but
// * use the values of that row still to slice the remaining columns
// *
// *
// * Tests needed:
// * creation
// * paging per-step
// * paging per-step out of range
// * paging to top / bottom
// * paging to far left/right
// * paging with large stepsize (out of range) vs big/small window
// * paging with small stepsize vs big/small window
// * ....
// *
// * index filtering in various combinations eg.
// * just 1 dimension, 1 filter
// *
// * 2+ filters, behaviour tests..
// *
// * 2+ filters interacting as inclusion ( > i, < i+x )
// * 2+ filters interacting as exclusion ( < i, > i+x )
// * ....
// *
// * two dimensional filters:
// * inclusion/exclusion scenarios such as..
// * > i, < i+x & > n, < n+x
// * > i, < i+x & < n, > n+x
// * < i, > i+x & > n, < n+x
// * < i, > i+x & < n, > n+x
// * ....
// *
// * column value filters
// * ....
// *
// * row value filters
// * ....
// *
// * header value filters
// * ....
// *
// * INTEGRATION:
// *
// * paging on index filter results!
// * (paging on) index filters + value filters
// * (paging on) index filters + value filters + header filters
// *
// * etc :)
// *
// */
//
// }