我想开发用于测试各种nattables的测试用例和API。我坚持从卑鄙的无形细胞中读取数据。 以下是我的要求:
测试代码库没有对Layer对象的dircet访问权限。我必须通过nattable.getLayer()或NatTable.class给出的类似api来获取它们。我也可以使用其他静态的东西,比如LayerUtil。
我不能假设任何特定的图层堆栈,因为测试API需要用于各种nattables。在这些nattables中,图层堆栈可以是不同的。 所以我想我不能将nattable.getLayer()类型转换为任何特定的图层。
用于行/列标题的行数可以不同。可能存在不存在列/行标题的情况。如果它们存在,那么它们也可以具有不同数量的行/列。例如一些nattables可以有1行用于列标题,有些可以消耗3行,依此类推。 我能知道哪些行号包含第一个数据元素?
我使用NatTable的getRowCount()和getPreferredRowCount()来确定给定的单元格位置是否可见。
我正在尝试使用ShowCellInViewportCommand,这样我就可以通过使隐藏单元格中的数据可见来读取数据。但由于我不能假设任何明确的堆栈结构,我应该如何调用ShowCellInViewportCommand成功? e.g。
natTable.doCommand(new ShowCellInViewportCommand(natTable.getLayer(), 10, 40));
这里假设有20行可见,第40行是不可见的,但它是有效的单元格。 UI中没有任何事情发生。 是否有任何单个API可用于此通用方案?我是否需要为不同的配置编写一组API?但是可以有很多这样的组合。
我还想过使用PAGE_UP,PAGE_DOWN,UP,DOWN键击并让单元格可见而不是使用NatTable API。但对于它,我需要先点击一些单元格。我担心某些nattables可能存在关键约束。
我该怎么办?请建议。
答案 0 :(得分:0)
由于NatTable中的各种配置,转换和抽象,没有简单的通用测试解决方案。您需要在图层堆栈上进行假设才能进行测试。例如,如果没有涉及SelectionLayer
,您如何测试选择行为?您已经在声明中假设调用NatTable#getRowCount()
仅返回可见行数,只有在层堆栈中涉及ViewportLayer
时才会出现这种情况。
首先要意识到的是,你必须实现一些代码来验证你的假设。与NatTable配置本身一样,您可以通过检查标签来完成此操作。对于上面的问题,这将是一些代码,用于检查NatTable本身的底层是否为CompositeLayer类型,在这种情况下,它应该检查GridRegion#BODY
的区域标签。如果您找到了具有该区域标签的图层堆栈,则您已找到显示该内容的图层。至少建议使用区域标签GridRegion#BODY
。如果有人因为自定义而错过了这个,那么它也会失败。
关于使"不可见单元格可见"的具体问题,这在技术上意味着触发滚动以在视口中移动单元格。 ShowCellInViewportCommand
由注册到ShowCellInViewportCommandHandler
的{{1}}处理。如果这一切都到位,它应该工作。如果你试图使一行不可见(请注意索引位置转换),就不会发生任何事情。
这意味着我认为行索引40是示例中的最后一行,因此索引可能不正确。由于Java使用基于0索引的集合,因此您需要使用行索引39。