Отличный вопрос!
Для этого нет встроенной функции. Таким образом, мы не должны ожидать, что какое-либо решение будет на 100% удобным - просто непростая задача изменить текущее содержимое редактора скриптов (если это вообще возможно). Так что, что бы вы ни делали, это все равно будет неким компромиссом.
В общем задача троякая:
Получить текущий код устройства.
Отформатируйте код.
Верните код в устройство.
Насколько я понимаю, пункты 1 и 3 можно выполнить, только создав плагин TestComplete — доступ к редакторам для узлов проекта — дело непростое.
ОБНОВЛЕНИЕ: глупый я! Есть способ получить доступ к коду редактора сценариев — я обновил приведенную ниже часть.
Что поможет нам избежать переключения на другое приложение, так это расширения скрипта:
Мы создаем пользовательскую контрольную точку в виде расширения сценария и устанавливаем ее в 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 в активном в данный момент редакторе.
Итак, это должно дать четкое представление о том, как может выглядеть решение. Лучшие предложения приветствуются! Поделитесь своими мыслями!
person
Alex
schedule
19.07.2012