我想要实现的是一种解决方案,其中使用XSL中的现有映射来验证是否支持许多项。要测试的项目存储在属性中(由空格分隔)。
<items>
<item name="item1" supported="true">
<item name="item2" supported="false">
<item name="item3" supported="true">
</items>
我们正在使用一个额外的XML文件来说明一些测试用例。
<testsuite name="suite1">
<testcases>
<testcase name="test1">
<required_item name="item1"/>
</testcase>
</testcases>
<testcases>
<testcase name="test2">
<required_item name="item1"/>
<required_item name="item2"/>
</testcase>
</testcases>
<testcases>
<testcase name="test3">
<required_item name="item1"/>
<required_item name="item3"/>
</testcase>
</testcases>
<testcases>
<testcase name="test4"></testcase>
</testcases>
</testsuite>
问题:我们如何实现以下伪代码?
FOREACH testcase
IF "required_items" is EMPTY
THEN
print TEST_TO_RUN += testcase
ELSE
IF __ALL__ "required_items" are SUPPORTED
print TEST_TO_RUN += testcase
END IF
END IF
END FOREACH
生成的Makefile中的预期结果如下所示。
TEST_TO_RUN+= test1 test3 test4
答案 0 :(得分:0)
给出以下格式良好的(!)测试输入:
<强> XML 强>
<items>
<item name="item1" supported="true"/>
<item name="item2" supported="true"/>
<item name="item3" supported="false"/>
<item name="item4" supported="false"/>
</items>
和另一份文件:
<强> testsuite.xml 强>
<testsuite name="suite1">
<testcases>
<testcase name="test1">
<required_item name="item1"/>
</testcase>
</testcases>
<testcases>
<testcase name="test2">
<required_item name="item1"/>
<required_item name="item2"/>
</testcase>
</testcases>
<testcases>
<testcase name="test3">
<required_item name="item2"/>
<required_item name="item3"/>
</testcase>
</testcases>
<testcases>
<testcase name="test4">
<required_item name="item3"/>
<required_item name="item4"/>
</testcase>
</testcases>
<testcases>
<testcase name="test5"></testcase>
</testcases>
</testsuite>
以下样式表:
XSLT 2.0
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="UTF-8"/>
<xsl:param name="path-to-testsuite" select="'testsuite.xml'"/>
<xsl:key name="item-by-name" match="item" use="@name" />
<xsl:template match="/">
<xsl:text>TEST_TO_RUN+= </xsl:text>
<xsl:value-of select="document($path-to-testsuite)/testsuite/testcases/testcase[every $i in key('item-by-name', required_item/@name, current()) satisfies $i/@supported='true']/@name"/>
</xsl:template>
</xsl:stylesheet>
将返回:
TEST_TO_RUN+= test1 test2 test5