首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何基于AST按层次顺序提取origen_testers测试名称?

如何基于AST按层次顺序提取origen_testers测试名称?
EN

Stack Overflow用户
提问于 2020-06-27 09:27:24
回答 1查看 37关注 0票数 1

我们在origen_testers中使用了n个外部绑定规则引擎与使用本机绑定API的方法,并且需要按照正确的顺序传递测试名称的列表。当我们使用包含on_failon_pass流参数的procs时,就会出现问题。这些子测试可以包含几层类似的proc调用。子测试在父测试之前先被处理,因此二进制顺序被颠倒。是否有一种方法可以提取一组测试名称,以保留父级到子级的关系?我知道flow.atp.raw显示了层次结构。

如何按照正确的顺序选择TestSuite名称?

thx

编辑

下面是ATP的一个例子:

代码语言:javascript
复制
s(:test,
s(:object, <TestSuite: jtag_ccra_all_vmin>),
s(:name, "jtag_ccra_all_vmin"),
s(:number, 0),
s(:id, "jtag_ccra_all_vmin"),
s(:on_fail,
  s(:if_flag, "$Alarm",
    s(:render, "multi_bin;")),
  s(:test,
    s(:object, <TestSuite: jtag_ccra_top_vmin>),
    s(:name, "jtag_ccra_top_vmin"),
    s(:number, 0),
    s(:id, "jtag_ccra_top_vmin"),
    s(:on_fail,
      s(:if_flag, "$Alarm",
        s(:render, "multi_bin;")))),
  s(:test,
    s(:object, <TestSuite: jtag_ccra_gasket_vmin>),
    s(:name, "jtag_ccra_gasket_vmin"),
    s(:number, 0),
    s(:id, "jtag_ccra_gasket_vmin"),
    s(:on_fail,

我想知道是否有办法按顺序提取姓名:

代码语言:javascript
复制
['jtag_ccra_all_vmin', 'jtag_ccra_top_vmin', 'jtag_ccra_gasket_vmin']

flow.atp.raw.children按照数组的顺序返回它们,但是我只想查询name属性和name节点对象。

thx

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-01 20:27:59

从AST中提取信息的方法是制作一个处理器,如下所示:https://github.com/Origen-SDK/origen_testers/blob/master/lib/origen_testers/atp/processors/extract_set_flags.rb

在您的处理器中,您将创建一个名为on_test的方法,然后从该方法中提取名称。这是未经测试的,但类似的情况如下:

代码语言:javascript
复制
class ExtractTestNames < OrigenTesters::ATP::Processor
  def run(node)
    @results = []
    process(node)
    @results
  end

  # All 'test' nodes in the AST will be handed to this method, all nodes which don't have
  # a specific handler defined will pick up a default handler which simply processes
  # (looks for a handler for) all of the node's children
  def on_test(node)
    @results << node.find(:name).value
    # Keep processing the children of this node, so that any tests embedded
    # in on_fail nodes, etc. are picked up
    process_all(node.children)
  end
end

称之为:

代码语言:javascript
复制
ExtractTestNames.new.run(flow.atp.raw)  # => ['jtag_ccra_all_vmin', 'jtag_ccra_top_vmin', ...]
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62608217

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档