好问题!
没有内置函数。因此,我们不应该期望任何解决方案都是 100% 方便的 - 修改当前脚本编辑器内容(如果可能的话)并不是一项简单的任务。所以,无论你做什么,它仍然是某种妥协。
一般来说,任务分为三部分:
获取当前单位代码。
格式化代码。
将代码放回单元。
据我了解,第1、3项只能通过创建TestComplete插件来完成——访问项目节点的编辑器并不是一件容易的事。
更新:愚蠢的我!有一种方法可以访问脚本编辑器代码 - 我更新了以下部分。
Script Extensions 可以帮助我们避免切换到其他应用程序:
看看其他 TestComplete 用户可以建议的实现会非常有趣!首先,我发布了一个解决方案,其中包括使用外部网站格式化 VBScript 代码 (http://www.vbindent.com/)。我知道帖子的开头可能是使用 JScript,但我还没有找到 JScript 格式化程序。
我的解决方案是一个简单的脚本扩展。这里不能发文件,所以把两个Script Extension文件的代码贴出来:
描述文件:
<!-- Description.xml -->
<?xml version="1.0" encoding="UTF-8"?>
<ScriptExtensionGroup>
<Category Name="Checkpoints">
<ScriptExtension Name="VBScript Code Indent" Author="SmartBear Software" Version="0.1" HomePage="smartbear.com">
<Script Name="VBIndent.js">
<DesignTimeAction Name="Indent Current VBScript Unit" Routine="DesignTimeExecute"/>
</Script>
<Description>
Indents VBScript code in the currently active unit.
</Description>
</ScriptExtension>
</Category>
</ScriptExtensionGroup>
代码文件:
// VBIndent.js
function DesignTimeExecute()
{
if (CodeEditor.IsEditorActive)
{
var newCode = IndentVBSCode_Through_VBIndent(CodeEditor.Text);
if (null == newCode)
return;
CodeEditor.Text = newCode;
}
}
function IndentVBSCode_Through_VBIndent(codeToIndent)
{
var URL_VBIndent = "http://www.vbindent.com/?indent";
var httpObj = Sys.OleObject("MSXML2.XMLHTTP");
httpObj.open("POST", URL_VBIndent, false);
httpObj.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
httpObj.send("thecode=" + escape(codeToIndent));
var responseText = httpObj.responseText;
// Extract the indented code from the response
var rx = /<textarea name=\"thecode\".*?>((.*\n)*?)<\/textarea>/;
matches = rx.exec(responseText);
if (null == matches)
{
return null;
}
codeIndented = matches[1];
return codeIndented;
}
创建这些文件后,将它们放到“\Bin\Extensions\ScriptExtensions\VBIndent”之类的位置,然后单击“文件|安装脚本扩展|重新加载”,您将看到一个新的“缩进当前VBScript单元”项在工具工具栏上的自定义检查点下拉按钮中。单击该元素将在当前活动的编辑器中格式化 VBScript 代码。
因此,这是为了清楚地了解解决方案的外观。欢迎提出更好的建议!分享你的想法!