Установка атрибута, используемого JavaScript-кодом JSLint в RhinoUnit - PullRequest
1 голос
/ 23 июля 2011

Я пытаюсь использовать RhinoUnit для модульного тестирования автономного приложения на основе XUL на JavaScript.Я успешно изменил много путей в данном build.xml - в основном меняя пути к скриптам RhinoUnit, которые я предпочитаю помещать в другой каталог, чем каталог по умолчанию (то есть я помещаю файлы RhinoUnit в chrome/content/rhino и файлы JSLint вchrome/content/lint).Однако в какой-то момент у меня появляется эта ошибка:

/<project-path>/build.xml:52: javax.script.ScriptException: 
sun.org.mozilla.javascript.internal.WrappedException: Wrapped 
java.io.FileNotFoundException: /<project-path>/jslint/fulljslint.js
(No such file or directory) (<Unknown source>#31) in <Unknown source>
at line number 31

Нет ссылки на jslint/fulljslint.js в build.xml, но я нашел этот код в jslintant.js:

var jsLintPath = "jslint/fulljslint.js";
if (attributes.get("jslintpath")) {
    jsLintPath = attributes.get("jslintpath");
}

Мне показалось, что этот код устанавливает значение по умолчанию для переменной, а затем пытается использовать значение из некоторого объекта attributes.Я предполагаю, что эти attributes могут быть установлены вне скрипта, например, с помощью некоторого тега <atttribute /> int build.xml или какого-либо файла конфигурации.

Мой вопрос: как я могу изменить значение из объекта?Это возможно?Или я должен изменить жестко закодированную строку из скрипта?

1 Ответ

1 голос
/ 23 июля 2011

Вот возможность рассмотреть.

Как выяснить, что происходит: Если вы вставите это в файл jslintant.js, непосредственно перед указанным вами назначением jsLintPath:

echo = project.createTask( "echo" );
echo.setMessage( attributes );
echo.perform( );

Затем запустите сборку RhinoUnit, вы должны увидеть что-то вроде:

run-js-lint:
     [echo] {options={eqeqeq : false, white: true, plusplus : false, bitwise :  ... }}

Как сделать то, что вы хотите: «Опции» определяются как атрибут jslintant scriptdef. Чтобы распространить значение для jslintpath, вам нужно добавить его в качестве атрибута в scriptdef, а затем установить его, когда вы используете задачу, определенную таким образом. Например:

<scriptdef name="jslintant"
           src="jslint/jslintant.js"
           language="javascript">
    <attribute name="options" />
    <attribute name="jslintpath" /> <!-- This line added. -->
    <element name="fileset" type="fileset" />
</scriptdef>

затем используйте задание:

<jslintant options="{eqeqeq : false, ... }"
           jslintpath="your_path_here/fulljslint.js" />

Если вы перезапустите сборку, вы должны увидеть:

run-js-lint:
     [echo] {jslintpath=your_path_here/fulljslint.js, options={eqeqeq : false, ... }}

И выбранный вами путь будет использоваться для поиска fulljslint.js.

...