﻿$engine JScript
$uname test_xUnitAddTestsDesc
$dname Тесты работы xUnitAddTestsDesc.js
$addin global
$addin stdcommands
$addin stdlib

//global.connectGlobals(SelfScript);

// регулярка для поиска всех функций JScript - удобно юзать в Notepad++ 
//      ^function\s*([^\(]+)\(
//      (^function\s*[^\(\s]+\s*\()|(^[^\.\s]+\.prototype\.[^\.\s]+\s+)

stdlib.require('jsUnitCore.js', SelfScript);

var mainFolder = profileRoot.getValue("Snegopat/MainFolder");
var testDir = mainFolder + 'scripts\\Tests\\Automated\\xUnitFor1C\\AddTestsDesc\\';
var pluginAppender = stdlib.require(mainFolder + 'scripts\\xUnitAddTestsDesc.js'); //, SelfScript); // чтобы вызывать функции из основного скрипта

var TWW = stdlib.require('TextWindow.js');

var textDoc = null;
var twnd = null;
    
var appender = null;

function setUp()
{
    textDoc = v8New("TextDocument");
	var text = "Таб = Новый ТаблицаЗначений;\nТаб";
    textDoc.SetText(text);

    textDoc.Show();
    
    twnd = TWW.GetTextWindow();

    appender = new pluginAppender._AppenderTestCaseDescriptionsIntoText(twnd);
}

function tearDown()
{
    destroyTextWindow();
}

function destroyTextWindow()
{
    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);
}

SelfScript.self['macrosTest В модуле уже есть описания тестовых случаев'] = function() {

    var textDoc = v8New("TextDocument");
	textDoc.Read(testDir+'xUnitAddTestsDesc_УжеЕстьОписанияТестов.txt')
	
	var predLineCount = textDoc.LineCount();
	var text = textDoc.GetText();
	twnd.SetText(text)
	
	appender.parseSources();
	var procNames = appender.getTestCases();
		assertEquals(procNames.length, 2);
		
	var procName = 'ТестСОпциями_БезПараметра'
		var reTestCaseDesc = new RegExp( '^\\s*ВсеТесты\\.Добавить\\(\\s*"'+procName+'"\\s*\\)\\s*;\\s*$', "igm");
		assertFalse('Не нашли описание теста '+procName, reTestCaseDesc.test(text));
	
	success = appender.addTestCaseDescriptionsIntoText();
		assertTrue('Не успешно выполнили тест!', success);
		assertEquals(twnd.LinesCount(), predLineCount+2);
		
	appender.parseSources();
	var procNames = appender.getTestCases();
		assertEquals(procNames.length, 2);
		
	var text = twnd.GetText();
	
	for(i=0; i < procNames.length; i++) {
		var reTestCaseDesc = new RegExp( '^\\s*ВсеТесты\\.Добавить\\(\\s*"'+procNames[i]+'"\\s*\\)\\s*;\\s*$', "igm");
			//logger.debug('Регулярное выражение шаблона замены '+reTestCaseDesc.source)
		assertTrue('Не нашли описание теста '+procNames[i], reTestCaseDesc.test(text));
	}

		//var txt = "перем Пример;\nПример = 2;";
		//var arrStrings = txt.split("\n");
		//assertTrue('Не успешно выполнили тест!', obInts.removeComments(arrStrings));
}

SelfScript.self['macrosTest В модуле вообще нет функции ПолучитьСписокТестов, но сами тестовые случаи определены'] = function() {
	//pluginAppender.logger.setLevel(pluginAppender.Log4js.Level.DEBUG);
	
    var textDoc = v8New("TextDocument");
	textDoc.Read(testDir+'xUnitAddTestsDesc_НетПолучитьСписокТестов.txt')
	
	predLineCount = textDoc.LineCount()
	var text = textDoc.GetText();
	twnd.SetText(text)
	
	appender.parseSources();
	var procNames = appender.getTestCases();
		assertEquals(procNames.length, 2);
		
	var procName = 'ТестСОпциями_БезПараметра'
		var reTestCaseDesc = new RegExp( '^\\s*ВсеТесты\\.Добавить\\(\\s*"'+procName+'"\\s*\\)\\s*;\\s*$', "igm");
		assertFalse('Не нашли описание теста '+procName, reTestCaseDesc.test(text));
	
	success = appender.addTestCaseDescriptionsIntoText();
		assertTrue('Не успешно выполнили тест!', success);
		assertEquals(twnd.LinesCount(), predLineCount + 15);
		
	appender.parseSources();
	var procNames = appender.getTestCases();
		assertEquals(procNames.length, 2);
		
	var text = twnd.GetText();
	
	for(i=0; i < procNames.length; i++) {
		var reTestCaseDesc = new RegExp( '^\\s*ВсеТесты\\.Добавить\\(\\s*"'+procNames[i]+'"\\s*\\)\\s*;\\s*$', "igm");
			//logger.debug('Регулярное выражение шаблона замены '+reTestCaseDesc.source)
		assertTrue('Не нашли описание теста '+procNames[i], reTestCaseDesc.test(text));
	}
}

SelfScript.self['macrosTest В модуле вообще нет тестовых случаев'] = function() {
	
    var textDoc = v8New("TextDocument");
	textDoc.Read(testDir+'xUnitAddTestsDesc_НетОпределенийТестов.txt')
	
	predLineCount = textDoc.LineCount()
	predText = textDoc.GetText()
	twnd.SetText(predText)
	
	appender.parseSources();
	var procNames = appender.getTestCases();
		assertEquals(procNames, null);
	
	success = appender.addTestCaseDescriptionsIntoText();
		assertFalse('Не успешно выполнили тест!', success);
		assertEquals(predText, textDoc.GetText());
		//assertEquals(TrimAll(predText), TrimAll(textDoc.GetText()));
		assertEquals(twnd.LinesCount(), predLineCount);
	
	appender.parseSources();
	var procNames = appender.getTestCases();
		assertEquals(procNames, null);
		
}

function TrimAll(src) {
    return src.replace(/(^\s*)|(\s*$)/g, ""); //trim
}
