在输入任务实现中过滤选项卡完成

皮埃尔·达拉

我目前正在为Gatling实现SBT插件其功能之一是在SBT的新浏览器选项卡中打开最后生成的报告。由于每次运行都可以具有不同的“模拟ID”(基本上是一个简单的字符串),因此我想在模拟ID上提供制表符补全。

一个例子 :

运行在加特林SBT插件会产生几个文件夹(从报告generaation的simulationId +日期命名)target/gatling,例如mysim-20140204234534myothersim-20140203124534yetanothersim-20140204234534

让我们称之为任务lastReport如果有人开始输入文字lastReport my,我希望过滤掉制表符补全,仅建议mysimmyothersim

获得仿真ID轻而易举,但是如何帮助解析器过滤掉建议,使其仅建议现有的仿真ID?

综上所述,我想以testOnly某种方式做些什么:我只想建议适合我的情况。

预先感谢您的回答,

皮埃尔

编辑:由于我最近一次尝试后卡住了,这是我的inputTask的代码,处于当前状态:

package io.gatling.sbt

import sbt._
import sbt.complete.{ DefaultParsers, Parser }

import io.gatling.sbt.Utils._

object GatlingTasks {

val lastReport = inputKey[Unit]("Open last report in browser")

val allSimulationIds = taskKey[Set[String]]("List of simulation ids found in reports folder")

val allReports = taskKey[List[Report]]("List of all reports by simulation id and timestamp")

def findAllReports(reportsFolder: File): List[Report] = {
    val allDirectories = (reportsFolder ** DirectoryFilter.&&(new PatternFilter(reportFolderRegex.pattern))).get
    allDirectories.map(file => (file, reportFolderRegex.findFirstMatchIn(file.getPath).get)).map {
        case (file, regexMatch) => Report(file, regexMatch.group(1), regexMatch.group(2))
    }.toList
}

def findAllSimulationIds(allReports: Seq[Report]): Set[String] = allReports.map(_.simulationId).distinct.toSet

def openLastReport(allReports: List[Report], allSimulationIds: Set[String]): Unit = {
    def simulationIdParser(allSimulationIds: Set[String]): Parser[Option[String]] =
        DefaultParsers.ID.examples(allSimulationIds, check = true).?

    def filterReportsIfSimulationIdSelected(allReports: List[Report], simulationId: Option[String]): List[Report] =
        simulationId match {
            case Some(id) => allReports.filter(_.simulationId == id)
            case None => allReports
        }

    Def.inputTaskDyn {
        val selectedSimulationId = simulationIdParser(allSimulationIds).parsed
        val filteredReports = filterReportsIfSimulationIdSelected(allReports, selectedSimulationId)
        val reportsSortedByDate = filteredReports.sorted.map(_.path)
        Def.task(reportsSortedByDate.headOption.foreach(file => openInBrowser((file / "index.html").toURI)))
    }
}

}

当然,openReport使用的结果叫allReportsallSimulationIds任务。我认为我已经接近功能正常的输入任务,但是我仍然缺少一些东西...

马克·哈拉
  1. Def.inputTaskDyn返回类型的值,InputTask[T]并且不执行任何副作用。结果需要绑定到InputKey,如lastReport返回类型openLastReportUnit,这意味着openLastReport将构造一个将被丢弃的值,实际上无济于事。相反,有:

    def openLastReport(...): InputTask[...] = ...
    
    lastReport := openLastReport(...).evaluated
    

    (或者,实现openLastReport可以内联到的右侧:=

  2. 您可能不需要inputTaskDyn,只是inputTaskinputTaskDyn在需要返回任务时才需要否则,请使用inputTask和删除Def.task

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

SSIS 错误输入选项卡错误中的 Web 服务任务

来自分类Dev

带选项卡自动完成的用户输入文件路径

来自分类Dev

如何从bash选项卡完成选项中删除记录

来自分类Dev

在Intellij中关闭自动完成选项卡删除

来自分类Dev

Zsh中的Git选项卡完成抛出错误

来自分类Dev

文件夹中参数的命令选项卡完成

来自分类Dev

Sublime Text中的未知CSS选项卡完成

来自分类Dev

如何在Fragment类中实现选项卡?

来自分类Dev

切换到tabView中的选项卡,输入无效

来自分类Dev

通过选项卡使边栏中的输入持久化

来自分类Dev

C#从Readline输入中删除选项卡

来自分类Dev

按扩展名过滤每个应用程序的选项卡完成

来自分类Dev

符号名称的LLDB选项卡完成

来自分类Dev

jQuery终端选项卡完成

来自分类Dev

zsh选项卡完成。到 。/

来自分类Dev

目录的vim选项卡完成

来自分类Dev

禁用腻子选项卡完成声音

来自分类Dev

取消zsh选项卡完成

来自分类Dev

禁用bash选项卡完成

来自分类Dev

取消zsh选项卡完成

来自分类Dev

LLDB选项卡完成的符号名称

来自分类Dev

zsh选项卡完成。到 。/

来自分类Dev

禁用腻子选项卡完成声音

来自分类Dev

刷新bash选项卡完成

来自分类Dev

自定义bash选项卡补全显示可能的补全,但未实际完成输入

来自分类Dev

如何调用“自定义”选项卡中的“添加任务”操作以显示销售订单的任务?

来自分类Dev

删除特定任务的任务计划的历史记录选项卡中的条目?

来自分类Dev

表单中的选项卡

来自分类Dev

阻止Internet Explorer选项卡在任务栏中打开堆栈中的选项卡