2012-07-18 93 views

回答

2

伟大的问题!

这没有内置功能。因此,我们不应该期望任何解决方案100%方便 - 修改当前脚本编辑器内容(如果可能的话)并不是一件简单的任务。所以,无论你做什么,它仍然是某种妥协。

一般来说,任务有三方面:

  1. 获取当前单元代码。

  2. 格式化代码。

  3. 将代码放回单元。

根据我的了解,项目1和3只能通过创建一个TestComplete插件来完成 - 项目节点访问的编辑并不是一件容易的事情。

更新:傻我!有一种方法可以访问脚本编辑器代码 - 我已经更新了下面的部分。

什么会帮助我们避免切换到不同的应用程序,是Script Extensions

  • 我们在一个脚本扩展的形式创建一个自定义检查点,并将其安装到TestComplete。因此,我们可以在工具栏上找到一个按钮,我们可以通过点击来调用我们的代码。

  • 在设计时间操作中,我们调用一些读取编辑器内容的代码,然后使用外部代码格式化功能,并用格式化代码替换编辑器内容。

看到其他TestComplete用户可以推荐的实现会非常有趣!首先,我发布了一个解决方案,其中包括使用外部网站格式化VBScript代码(http://www.vbindent.com/)。我知道这篇文章的起始者可能使用了JScript,但我还没有找到JScript格式化器。

我的解决方案是一个简单的脚本扩展。我不能在这里发表的文件,所以我将发布两个脚本扩展文件的代码:

说明文件:

<!-- 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代码。

因此,这是为了清楚了解解决方案的外观。欢迎提供更好的建议!分享你的意见!

+0

来吧,人 - 敢走!建议您的解决方案! :)复杂的部分已经被整理出来 - 您只需要使用代码更改DesignTimeExecute例程实现。我甚至会在这里开始赏金,但看起来我不能这样做...... – Alex 2012-07-20 08:56:07

+0

我的想法可能是人们不使用testComplete IDE?我经常在netbeans中抛出我的代码,然后回到testComplete中对其进行格式化。 – 2012-07-23 00:38:54

+0

http://jsbeautifier.org/我试图合并这个,以便让你的解决方案适用于Javascript – 2012-07-23 16:19:55

相关问题