$engine JScript
$uname testSyntaxAnalysis_AnalyseTextDoc
$dname Тесты для класса SyntaxAnalysis (AnalyseTextDocument)
$addin global
$addin stdcommands
$addin stdlib
stdlib.require('jsUnitCore.js', SelfScript);
stdlib.require('SyntaxAnalysis.js', SelfScript);
var TWW = stdlib.require('TextWindow.js');
var moduleText = ""
+ "Перем мПеременнаяМодуля;\n"
+ "\n"
+ "Перем ЕщеОднаПеременная;\n"
+ "Перем ЭкспортнаяПеременная Экспорт;\n"
+ "Перем ЭкспортныйМассив[10] Экспорт, ЛокальныйМассив[3], ПростоПеременная;\n"
+ "Процедура МояПроцедура(Парам1, Парам2)\n"
+ " Перем МояПерем1;\n"
+ "\n"
+ " МояПерем1 = 42;\n"
+ "\n"
+ " АвтоматическаяПеременная = 10;\n"
+ " мПеременнаяМодуля = \"\";\n"
+ "КонецПроцедуры\n"
+ "\n"
+ "Функция МояФункция(ПараметрФункции)\n"
+ " Сообщить(мПеременнаяМодуля); \n"
+ " Возврат Истина; \n"
+ "КонецФункции\n"
+ "\n"
+ "МояПроцедура(1, 2);\n"
+ "Результат = МояФункция();\n"
var textDoc = null;
var twnd = null;
function setUp()
{
textDoc = v8New("TextDocument");
textDoc.SetText(moduleText);
textDoc.Show();
twnd = TWW.GetTextWindow();
}
function tearDown()
{
if (twnd)
delete twnd;
// Чтобы при закрытии не выдавалось сообщение "Записать?", сохраним документ во временный файл.
var tempFile = globalContext("{4A993AB7-2F75-43CF-B34A-0AD9FFAEE7E3}").GetTempFileName();
textDoc.Write(tempFile);
// Закроем окно текстового документа.
stdcommands.Frame.FileClose.send();
// Удалим временный файл.
var f = v8New("File", tempFile);
globalContext("{22A21030-E1D6-46A0-9465-F0A5427BE011}").DeleteFiles(f.Path, f.Name);
}
//{ tests of AnalyseTextDocument
function macrosTestAnalyseTextDocument_GetMethodSource1() {
var module = SyntaxAnalysis.AnalyseTextDocument(twnd);
var src = ""
+ "Процедура МояПроцедура(Парам1, Парам2)\n"
+ " Перем МояПерем1;\n\n"
+ " МояПерем1 = 42;\n\n"
+ " АвтоматическаяПеременная = 10;\n"
+ " мПеременнаяМодуля = \"\";\n"
+ "КонецПроцедуры";
//debugger;
assertEquals(src, module.getMethodSource("МояПроцедура"));
}
function macrosTestAnalyseTextDocument_GetMethodSource2() {
var module = SyntaxAnalysis.AnalyseTextDocument(twnd);
assertUndefined(module.getMethodSource("НесуществующийМетод"));
}
function macrosTestAnalyseTextDocument_getMethodByLineNumber1_СтрокаВнутриПроцедуры() {
var module = SyntaxAnalysis.AnalyseTextDocument(twnd);
var method = module.getMethodByLineNumber(6);
assertNotUndefined(method);
assertEquals('МояПроцедура', method.Name);
}
function macrosTestAnalyseTextDocument_getMethodByLineNumber2_ПоПервойСтроке() {
var module = SyntaxAnalysis.AnalyseTextDocument(twnd);
//debugger;
var method = module.getMethodByLineNumber(6);
assertNotUndefined(method);
assertEquals('МояПроцедура', method.Name);
}
function macrosTestAnalyseTextDocument_getMethodByLineNumber3_ПоПоследнейСтроке() {
var module = SyntaxAnalysis.AnalyseTextDocument(twnd);
//debugger;
var method = module.getMethodByLineNumber(13);
assertNotUndefined(method);
assertEquals('МояПроцедура', method.Name);
}
function macrosTestAnalyseTextDocument_getMethodByLineNumber4_ВнеПроцедуры_Выше() {
var module = SyntaxAnalysis.AnalyseTextDocument(twnd);
var method = module.getMethodByLineNumber(2);
assertUndefined(method);
}
function macrosTestAnalyseTextDocument_getMethodByLineNumber4_ВнеПроцедуры_Ниже() {
var module = SyntaxAnalysis.AnalyseTextDocument(twnd);
var method = module.getMethodByLineNumber(21);
assertUndefined(method);
}
//} tests of AnalyseTextDocument