如何以groovy方式实现DSL?

时间:2015-01-20 06:05:07

标签: groovy

我已经成功编写了用于转换以下DSL的apis:

testCase 
            { 
                name = 'test' 
                params { 
                    name = "var" 
                    value = 'randomValue' 
                } 
} 

<testCase name='test'>
     <params name='var' value='randomValue' />
</testCase>

这完美无缺。但我也想这样做(类似于Spock)。如果用户给出了这个:

testCase 
            { 
                name = 'test' 
                params { 
                    name  |  value 
                       1       |     2 
                       3       |    5 
                } 
} 

这样就变成了:

<testCase name='test'>
     <params name='1' value='2' />
</testCase>

<testCase name='test'>
     <params name='3' value='5' />
</testCase>

请注意,这里的名称和值都可以是任何字符串。我该怎么办?我现在面临的问题是,当我看到像这样的参数时,我需要创建单独的testCase。 testCase可以有这样的其他嵌入标签:

testCase { 
      someTag { 
        someTag2 { 
             params { 
                    name  |  value 
                       1       |     2 
                       3       |    5 
            } 
       } 
} 

所以这就像

一样生成
<testCase>
     <someTag>
        <someTag2>
                   <params name='1' value='2' />
        </someTag2>
     </someTag>
</testCase>

<testCase>
     <someTag>
        <someTag2>
                   <params name='3' value='5' />
        </someTag2>
     </someTag>
</testCase>

所以在时髦的世界里,我该如何解决这个问题呢?

0 个答案:

没有答案