如何测试CSS解析器?

如何测试CSS解析器?,css,testing,parsing,code-coverage,Css,Testing,Parsing,Code Coverage,我正在编写一个解析器来解析CSS 我首先修改,以使用我正在使用的支持的语法和词法分析器语法 我想我已经完成了语法编码:解析器生成器现在能够为我的语法生成状态转换表 结果(解析器生成器的输出)约为116条“规则”,对应于switch语句中的116种情况。这些规则/开关语句的示例如下: 样式表以指定字符集开始 样式表开始时不指定字符集: 样式表为空 样式表以空格开头 ……等等 解析器生成器已经为我做了一切,现在我开始(手工)编写switch语句的各种情况,这将构建我认为人们所谓的“抽象语法树” 我的

我正在编写一个解析器来解析CSS

我首先修改,以使用我正在使用的支持的语法和词法分析器语法

我想我已经完成了语法编码:解析器生成器现在能够为我的语法生成状态转换表

结果(解析器生成器的输出)约为116条“规则”,对应于
switch
语句中的116种情况。这些规则/开关语句的示例如下:

  • 样式表以指定字符集开始
  • 样式表开始时不指定字符集:
  • 样式表为空
  • 样式表以空格开头
  • ……等等
  • 解析器生成器已经为我做了一切,现在我开始(手工)编写switch语句的各种情况,这将构建我认为人们所谓的“抽象语法树”

    我的问题是如何测试这一点。我想我想要的是一组CSS文件,它们可以实现各种组合和可能性:例如,一个CSS文件指定一个字符集;另一个未指定字符集的文件;等等

    • 对于任意语法或规则集,是否有通用的方法自动生成这组输入数据

    • 或者,是否有一组特定的CSS文件,其目的是涵盖标准CSS语法允许的组合和可能性

    如果我在这件事上完全错了,请随时发表评论

    目前我不需要:

    • 用于测试非法输入处理情况的文件(即不符合语法的文件)

    • 测试各种浏览器如何基于对CSS的解析进行渲染


      • 微软为IE8与CSS规范的一致性进行了数千次CSS测试。

        虽然他们专注于测试浏览器的兼容性,但您可能可以对他们进行调整

        还有一些较旧的W3C测试套件,它们并不完整,但可能满足您的需要:
        上下文无关语法隐式地提出了一组无限的(解析)树。每一棵树都有一组叶子,用该语法所接受的语言组成一个具体的句子。通过探索建议树的集合(例如,根据可能的备选方案扩展每个非终结符),您可以生成该语言的任意实例。您可以通过遍历树建议并进行随机选择来生成一组测试。一种更为集中的方法是使用迭代深化搜索生成按大小排序的句子。使用任何有趣的语法,您可能会得到大量的实例,但嘿,这就是自动化测试的目的


        我不会从你的产出语法中生成这样的句子,因为你生成的句子,根据定义,就是它所接受的句子:-{您应该做的是使用引用语法构造您的句子生成器,以利用它接受的内容和实现的内容可能不同这一事实。

        OP迟了4年,但对于解析器来说似乎是一个不错的测试套件。

        对于我的语法,我有大约55个非终结符。如果我将其作为自顶向下的解析器进行评估,则n与顶级非终端关联的方法调用与低级非终端关联的方法,依此类推。每个非终端方法调用大约1到3个低级方法(通过方法中的
        开关
        语句),并由1个或有时2个不同的更高级方法调用。甚至只需获得完整的代码覆盖率就可以了:确保每种可能性至少测试一次(而不是希望每种可能性的每种组合都测试一次),……其顺序可能为(55 x 3=)150个测试用例。我想我同意你的观点,从语法自动生成这些测试用例没有什么好处。但是我问这个问题是因为我在学校从来没有被正式告知过语法分析,而其他人是:我想知道你是否被教过是否有一些著名的算法用于测试语法分析器。没有人教我如何测试语法分析器,无论是在学校还是在学校。只是不在课程中。我构建了很多语法分析器,但主要依靠从真实代码中获得无数测试用例,因为大多数编译器的参考语言与编译器人员真正实现的语言不匹配(以微软和C#为例,他们费了很大的劲才得到了一个标准,但没有实现!)你似乎很幸运,因为你有一个真正的参考语法……关于很多测试用例,你可以在“足够”的时候停止生成它们如果您没有获得完全覆盖。如果您使用迭代深化方案,您可以停止使用一百万个测试用例,并确保具有良好的覆盖率:-}运行它们不会花那么长时间。microsoft链接已失效