Есть ли способ автоформатирования (Javascript) кода в TestComplete?

Так похоже на ALt-Shift-F в Netbeans, есть ли возможность сделать это прямо в ide в TestComplete? Не уверен, что это возможно или кто-нибудь может придумать обходной путь для автоматического форматирования, не выходя из окна TestComplete.

Я пытаюсь заставить приведенное ниже решение работать с http://jsbeautifier.org/ для кода javascript/Jscript в Тест завершен.

Спасибо


person Frank Visaggio    schedule 18.07.2012    source источник


Ответы (2)


Отличный вопрос!

Для этого нет встроенной функции. Таким образом, мы не должны ожидать, что какое-либо решение будет на 100% удобным - просто непростая задача изменить текущее содержимое редактора скриптов (если это вообще возможно). Так что, что бы вы ни делали, это все равно будет неким компромиссом.

В общем задача троякая:

  1. Получить текущий код устройства.

  2. Отформатируйте код.

  3. Верните код в устройство.

Насколько я понимаю, пункты 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
comment
Давайте, люди, дерзайте! Предложите свое решение! :) Со сложной частью уже разобрались - вам просто нужно изменить реализацию подпрограммы DesignTimeExecute своим кодом. Я бы даже начал баунти здесь, но, похоже, я пока не могу этого сделать... - person Alex; 20.07.2012
comment
Я думаю, может быть, люди просто не используют testComplete ide? Я время от времени бросал свой код в netbeans и обратно в testComplete для его форматирования. - person Frank Visaggio; 23.07.2012
comment
jsbeautifier.org Я пытаюсь включить это, чтобы ваше решение работало для Javascript. - person Frank Visaggio; 23.07.2012
comment
Что ж... хотя это может быть так, я не думаю, что многие люди так делают - подход просто не прост для повседневной работы. При этом, если в редакторе скриптов TC такой возможности нет, то для многих других сценариев использования он вполне годится. Так может само задание не так уж и популярно? Каковы варианты использования, когда вам нужно переформатировать код? - person Alex; 23.07.2012
comment
Ой, изначально я не нашел jsbeautifier.org. Было бы здорово увидеть ваше решение здесь! Дайте мне знать, если вам нужен совет относительно реализации. Я также думал об использовании локальной утилиты командной строки, чтобы избежать использования Интернета, но не имел подходящего инструмента под рукой. - person Alex; 23.07.2012

к вашему сведению

Я сделал. Судя по вашим сообщениям.

JSFormat.tcx

https://drive.google.com/uc?export=download&id=0B1x_73bHRc2Jcm8wbTJ2dUpZQTQ

Для установки расширения скопируйте прикрепленный файл JSFormat.tcx в папку C:\Program Files (x86)\SmartBear\TestComplete 10\Bin\Extensions\ScriptExtensions.

Чтобы использовать просмотр следующего изображения:

https://drive.google.com/uc?export=download&id=0B1x_73bHRc2Jc3RuLXFpTnlCSnc

С уважением

person TioJack    schedule 26.06.2015