如何为数据集描述创建spock风格的DSL?

时间:2012-12-19 22:46:31

标签: java groovy spock

我希望以spock数据驱动的规范格式获得数据集描述:

'Key'   |    'Value'    |    'Comments'
1       |    'foo'      |    'something'
2       |    'bar'      |    'something else'

必须将其转换为2D数组(或任何可能实现的内容)。

如何实现此数据描述的任何想法?

P.S。最大的问题是换行检测,其余的可以通过在对象的or上重载metaClass来实现。

1 个答案:

答案 0 :(得分:5)

|运算符是左关联的,因此该表中的一行将被解析为:

('Key' | 'Value') | 'Comments'

然后你可以做些什么来检测每一行开始和结束的位置是让| opeator返回一个包含其操作数的列表,然后为每个|询问是否左边的操作数(即{ {1}})是一个列表。如果是,则意味着它是一行的延续;如果它不是列表,则表示它是一个新行。

以下是使用Category解析这些数据集的DSL的完整示例,以避免覆盖Object元类的内容:

this

在这个例子中,我将表解析为地图列表,但是在DSL闭包运行之后,您应该可以使用DatasetCategory的结果执行任何操作。