USES
WordsTranslation.script
WordsTuning.script
SysUtils.script
Mouse.script
Editor.script
Controls.script
Forms.script
;
CONST mbOk 1
CONST mbYes 2
CONST mbNo 3
CONST "Серый цвет" 15790320
// TnsFileFormat = (ns_ffRTF, ns_ffTxt, ns_ffHTML, ns_ffXML, ns_ffEvd, ns_ffNull);
CONST ns_ffRTF 0
CONST ns_ffTxt 1
CONST ns_ffHTML 2
CONST ns_ffXML 3
CONST ns_ffEvd 4
: " и проверить наличие диалога с кнопкой" IN aProc INTEGER IN aButton
aButton CASE
mbOk wait:Ok
mbYes wait:Yes
mbNo wait:No
DEFAULT ( 'Неизвестная кнопка диалога' RAISE )
ENDCASE
TRY
aProc DO
FINALLY
TRY
waited:? 'Не дождались диалога' ASSERTS
// - убеждаемся, что диалог про конец поиска таки был
EXCEPT
"Сравнить текущее исключение с эталоном"
DROP
// - удаляем результат waited:? со стека, т.к. прилетела ересь 'Нарушен баланс скобок Wait'
RAISE
END
END
;
: "и проверить наличие диалога" IN aProc
"{(aProc)} и проверить наличие диалога с кнопкой {(mbOk)}"
;
: " и проверить наличие диалога с кнопкой Да" IN aProc
"{(aProc)} и проверить наличие диалога с кнопкой {(mbYes)}"
;
: " и проверить наличие диалога с кнопкой Нет" IN aProc
"{(aProc)} и проверить наличие диалога с кнопкой {(mbNo)}"
;
: " и проверить наличие диалога с кнопкой Ok" IN aProc
"{(aProc)} и проверить наличие диалога с кнопкой {(mbOk)}"
;
: " и проверить наличие диалога с кнопкой Ок" IN aProc
"{(aProc)} и проверить наличие диалога с кнопкой Ok"
;
: " и проверить отсутствие диалога" IN aProc
TRY
"{(aProc)} и проверить наличие диалога"
EXCEPT
"Сравнить текущее исключение с эталоном"
END
;
USES
F1ControlsDefinition.script
;
OBJECT FUNCTION "Найти основное меню"
"Найти окно по имени {(форма::MainMenuNew)}" =: Result
; // "Найти основное меню"
: "Установить фокус в документ"
OBJECT VAR l_FocusedControl
nil =: l_FocusedControl
: FindLocally
DocumentText byname:control:push pop:control:SetFocus
[[
'Не удалось поставить фокус в документ.'
' Текущий контрол: ' l_FocusedControl pop:component:Name
]] strings:Cat
ASSERTS
;
: FindGlobally
true ANYUSERTYPE DocumentText Форма_документа TryFocusOnForm
[[
'Не удалось поставить фокус в документ на форме: ' Форма_документа
' Текущий контрол: ' l_FocusedControl pop:component:Name
]] strings:Cat
ASSERTS
;
focused:control:push =: l_FocusedControl
l_FocusedControl IsVoid ? (
'Не нашлось контрола в фокусе' RAISE
)
l_FocusedControl pop:object:IsNil ? (
'Контрол в фокусе почему-то равен nil' RAISE
)
l_FocusedControl pop:component:Name контрол::ContentsTree SameText ? (
FindGlobally
EXIT
)
l_FocusedControl pop:component:Name контрол::lstExternalObjects SameText ? (
FindGlobally
EXIT
)
l_FocusedControl pop:component:Name контрол::lstComments SameText ? (
FindGlobally
EXIT
)
l_FocusedControl pop:component:Name контрол::lstBookmarks SameText ? (
FindGlobally
EXIT
)
l_FocusedControl pop:component:Name контрол::pnRight SameText ? (
FindGlobally
EXIT
) // - это для сборки ААК
l_FocusedControl pop:component:Name DocumentFlash SameText ? (
EXIT
)
FindLocally
; //"Установить фокус в документ"
USES
EVDSchema.script
DocumentNumbers.script
;
: "Открываем"
Открыть
3 LOOP ProcessMessages
OnTest
"Установить фокус в документ"
;
: "Найти далее"
"Найти далее без проверки"
"Сравнить абзац текущего редактора с эталоном"
;
: "Найти далее и убедиться, что ничего не нашлось"
"{(@ "Найти далее без проверки")} и проверить наличие диалога"
;
: "Удалось перевести фокус в оглавление?"
"Удалось перевести фокус в {(контрол::ContentsTree)}?"
;
: "Проверить, что удалось перевести фокус в оглавление"
"Удалось перевести фокус в оглавление?" 'Не удалось перевести фокус в оглавление' ASSERTS
;
: "Перевести фокус в оглавление"
"Перевести фокус в {(контрол::ContentsTree)} на форме {(форма::Contents)}"
;
: "Перевести фокус в комментарии"
"Перевести фокус в {(контрол::lstComments)} на форме {(форма::Contents)}"
;
: "Перевести фокус в закладки"
"Перевести фокус в {(контрол::lstBookmarks)} на форме {(форма::Contents)}"
;
: "Перевести фокус в панель контекстного поиска на вкладке Структура документа"
"Перевести фокус в {(контрол::ContextFilter)} на форме {(форма::Contents)}"
"Дождаться переключения вкладок"
focused:control:push pop:component:Name 'InternalEditor' SameStr 'Не удалось поставить фокус в оглавление' ASSERTS
focused:control:push pop:object:ClassName 'TnscComboBoxWithFilter' SameStr 'Не смоли встать в контекстный фильтр оглавления' ASSERTS
// - здесь на самом деле нужна проверка, что фокус встал во вложенный редактор
;
: "Во время фильтрации не должно быть ошибок"
f1::WasBeep ! 'Во время фильтрации били ошибки' ASSERTS
;
: "Импортировать консультацию"
VAR l_File
script:FileName '.xml' sysutils:ChangeFileExt
sysutils:ExtractFileName >>> l_File
l_File f1::ImportConsultation
OnTest
;
: "Перевести фокус в консультации"
"Перевести фокус в {(контрол::FoldersTree)} на форме {(форма::FoldersTree)}"
;
: "Перевести фокус в Документы на контроле"
true ANYUSERTYPE контрол::UnderControlList форма::UnderControl TryFocusOnForm
'Не смогли поставить фокус в Документы на контроле'
ASSERTS
//"Перевести фокус в {(контрол::UnderControlList)} на форме {(форма::UnderControl)}"
;
: "Проверить активность вкладки Предупреждение"
OnTest
"Перевести фокус в {(контрол::Viewer)} на форме {(форма::Warning)} типа {(Простое_предупреждение)}"
// - тут надо проверить, что предупреждение таки открылось
"Сравнить текст редактора {(контрол::Viewer:push)} с эталоном"
;
: "А активна ли вкладка предупреждения?"
false Простое_предупреждение контрол::Viewer форма::Warning TryFocusOnForm
;
: "Открыть вкладку Предупреждение с жёлтой медали с часами"
оп::Предупреждение_о_неактуальной_редакции_Показать_текст_предупреждения
"А активна ли вкладка предупреждения?" !
IF
// - тут обрабатываем ситуацию, когда вкладка только что спряталась
оп::Предупреждение_о_неактуальной_редакции_Показать_текст_предупреждения
ENDIF
;
: "Открыть вкладку Предупреждение с жёлтой медали с восклицательным знаком"
OnTest
оп::Предупреждение_(юридическое)_Показать_текст_предупреждения
"А активна ли вкладка предупреждения?" !
IF
// - тут обрабатываем ситуацию, когда вкладка только что спряталась
оп::Предупреждение_(юридическое)_Показать_текст_предупреждения
ENDIF
;
: "Открыта ли форма БП?"
false 0 контрол::ContextEdit форма::NewBaseSearch TryFocusOnForm
;
: "Проверить, что открыта форма БП"
"Открыта ли форма БП?" 'Форма БП не открыта' ASSERTS
;
: "Проверить, что НЕ открыта форма БП"
"Открыта ли форма БП?" ! 'Форма БП ОТКРЫТА. А не должна бы' ASSERTS
;
: "В БП ищем контекст" STRING IN aString
"Открыта ли форма БП?" ! IF
// - проверяем, что форма БП - не открыта (чтобы не сбить текущую вкладку ручным вызовом)
БП
// - иначе - открываем её
ELSE
"Выделить весь текст в текущем редакторе"
// - выделяем содержимое редактора, чтобы перетереть его
ENDIF
"Ввести строку {(aString)}"
// - ещё бы сделать нажатие на вкладку, но для этого надо уметь искать её по имени
"Нажать {('Enter')}"
;
: "В БП ищем контекст по типу" STRING IN aString STRING IN aType
VAR l_VG
"Открыта ли форма БП?" ! IF
// - проверяем, что форма БП - не открыта (чтобы не сбить текущую вкладку ручным вызовом)
БП
// - иначе - открываем её
ELSE
"Выделить весь текст в текущем редакторе"
// - выделяем содержимое редактора, чтобы перетереть его
ENDIF
"Ввести строку {(aString)}"
//[[ 'Для начала поиска выбираем вид "' aType '"' ]] strings:Cat ToDo
// - ещё бы сделать нажатие на вкладку, но для этого надо уметь искать её по имени
aType focused:control:push pop:control:GetParentForm pop:control:FindVGControlByName =: l_VG
l_VG vg:control:GetIsChecked IF
// - если вкладка уже выбрана, то по SetIsChecked не произойдёт OnChange
"Нажать {('Enter')}"
//aType vg:control:Click
// - Click в БП не обрабатывается
ELSE
true l_VG vg:control:SetIsChecked
ENDIF
// - нажимаем на кнопку, соответствующую выбраному типу
OnTest
200 SLEEP
// - шаманство, чтобы выставилось правильное значение в кнопке Ещё, наверное это как-то с триггерами связано
OnTest
//"Нажать {('Enter')}"
;
: "Жмём кнопку Искать раз" INTEGER IN aCount
"{(aCount)} раз {(@ "Найти далее")}"
;
: "Открываем новостную ленту"
wait:Ok
TRY
моп::Мониторинги_Новостная_лента
OnTest
FINALLY
waited:? ASSERT
END
"Дождаться переключения вкладок"
;
: "Проверить вкладку документа" IN aUserType
"Перевести фокус в {(DocumentText)} на форме {(форма::Text)} типа {(aUserType)}"
// - тут надо проверить, что вкладка таки открылась
"Сравнить текст с эталоном"
;
: "Открыть вкладку" IN aProc IN aUserType
aProc DO
"Проверить вкладку {(aUserType)} документа"
;
: "Открываем справку"
"Открыть вкладку {(@ оп::Документ_Справка_к_документу)} {(dftRelatedDoc)}"
;
WordAlias "Открываем Справку" "Открываем справку"
: "Открываем аннотацию"
"Открыть вкладку {(@ оп::Документ_Аннотация)} {(dftAnnotation)}"
;
: "Закрыть вкладку консультаций"
"Перевести фокус в консультации"
"Закрыть текущую вкладку"
// Иначе получаем некорректный результат при повторном прогоне K266418093
// С этой функциональностью вообще-то неплохо бы разобраться отдельно.
;
: "А активна ли вкладка Документы на контроле?"
false 0 контрол::UnderControlList форма::UnderControl TryFocusOnForm
; // "А активна ли вкладка Документы на контроле?"
: "Закрыть вкладку Документы на контроле"
"А активна ли вкладка Документы на контроле?" IF
"Перевести фокус в Документы на контроле"
"Закрыть текущую вкладку"
ENDIF
; // "Закрыть вкладку Документы на контроле"
: "Ищем в названии и в тексте" STRING IN aStr1 STRING IN aStr2
OBJECT VAR l_QC
ППР
"Убедиться, что фокус в редакторе"
focused:control:push >>> l_QC
'AT_TEXT_NAME' aStr1 l_QC pop:QueryCard:SetAttribute
'AT_TEXT_BODY' aStr2 l_QC pop:QueryCard:SetAttribute
"Нажать Искать"
;
: "Ищем в названии" STRING IN aStr1
OBJECT VAR l_QC
ППР
"Убедиться, что фокус в редакторе"
focused:control:push >>> l_QC
'AT_TEXT_NAME' aStr1 l_QC pop:QueryCard:SetAttribute
//"Ввести {(aStr1)}"
"Нажать Искать"
;
: "Перевести фокус в список"
focused:control:push pop:component:Name tvList ?!= ? (
"Перевести фокус в {(tvList)} на форме {(форма::List)}"
)
;
: "Открыть текущий документ списка"
"Перевести фокус в список"
"Нажать {('Enter')}"
OnTest
;
: "Открыть текущий документ списка и сравнить его с эталоном"
"Открыть текущий документ списка"
"Сравнить текст с эталоном"
;
: "Сравнить текст информации о списке с эталоном"
"Сравнить текст редактора {(контрол::ListInfoViewer:push)} с эталоном"
;
: "Открыть информацию о списке"
оп::Список_Справка_к_списку
OnTest
"Дождаться переключения вкладок"
OnTest
; // "Открыть информацию о списке"
: "Проверить информацию о списке"
"Открыть информацию о списке"
"Сравнить текст информации о списке с эталоном"
;
: "Проверить информацию о списке и первый документ"
"Проверить информацию о списке"
"Перевести фокус в список"
"Открыть текущий документ списка и сравнить его с эталоном"
;
: "Перевести фокус в документ"
"Перевести фокус в {(DocumentText)} на форме {(Форма_документа)}"
OnTest
;
: "Перевести фокус в правую редакцию"
"Перевести фокус в {(DocumentText)} на форме {(форма::RightEdition)}"
;
: "Перевести фокус в левую редакцию"
"Перевести фокус в {(DocumentText)} на форме {(форма::LeftEdition)}"
;
: "Перевести фокус в список редакций левой редакции"
"Перевести фокус в {(контрол::EditionChoose)} на форме {(форма::LeftEdition)}"
;
: "Перевести фокус в список редакций правой редакции"
"Перевести фокус в {(контрол::EditionChoose)} на форме {(форма::RightEdition)}"
;
: "Сравнить даты обеих редакций с эталоном"
"Перевести фокус в список редакций левой редакции"
контрол::EditionChoose:push pop:control:Caption .
"Перевести фокус в список редакций правой редакции"
контрол::EditionChoose:push pop:control:Caption .
;
: "Нажать Del"
"Нажать {('Del')}"
;
: "Встать на последнюю консультацию"
OnTest
cc:End
контрол::FoldersTree:push pop:control:Caption 'Неподтвержденные' SameStr 'Не попали на папку неподтверждённых консультаций' ASSERTS
cc:Up
контрол::FoldersTree:push pop:control:Caption 'Ответы' SameStr
IF
cc:TreeExpand
// - обрабатываем ситуацию, когда папка Отвеченные оказывается закрытой
// всё остальное шаманство с OnTest похоже не нужно, но пусть пока будет
ELSE
контрол::FoldersTree:push pop:control:Caption 'Неподтвержденные' SameStr
IF
cc:Up
контрол::FoldersTree:push pop:control:Caption 'Ответы' SameStr 'Не встали на папку Ответы' ASSERTS
cc:TreeExpand
ELSE
//false контрол::FoldersTree:push pop:control:Caption ASSERTS
ENDIF
ENDIF
cc:End
cc:Up
// Перейти к импортированной консультации
;
: "Удалить последнюю консультацию"
"Перевести фокус в консультации"
OnTest
"Встать на последнюю консультацию"
wait:Yes
TRY
//cc:Del
// - данная команда OVC на этом дереве не работает поэтому посылаем кнопку
// но по-хорошему вообще надо вызывать операцию сущности
"Нажать Del"
// - удаляем один элемент списка
FINALLY
waited:? 'Не было диалога подтверждения удаления консультации' ASSERTS
// - убеждаемся, что диалог удаления таки был
END
;
: "Выполнить со вкладкой консультаций" IN aProc
"Открыть вкладку консультаций"
TRY
aProc DO
FINALLY
"Закрыть вкладку консультаций"
END
;
: "Выполнить с импортированой консультацией" IN aProc
"Перевести фокус в консультации"
"Импортировать консультацию"
TRY
aProc DO
FINALLY
"Удалить последнюю консультацию"
END
;
USES
Reminders.script
;
: "Импортировать консультацию, проверить наличие баллона и текст консультации"
: Действия
: Действия
: TryHarder
: TryHarder1
3 LOOP OnTest
"Перевести фокус в консультации"
; // TryHarder
2 LOOP TryHarder1
3 LOOP OnTest
; // TryHarder
TryHarder
"Нажать на медаль {("Синяя медаль о наличии консультаций")} и проверить наличие баллона"
TryHarder
"Встать на последнюю консультацию"
// Перейти к импортированной консультации
"Нажать {('Enter')}"
// Открыть выбранную консультацию
"Сравнить текст с эталоном"
;
"Выполнить {(@ Действия)} с импортированой консультацией"
;
"Выполнить {(@ Действия)} со вкладкой консультаций"
;
: "Прокрутить документ от конца к началу"
: "Достигли начала документа"
"Убедиться, что фокус в редакторе"
focused:control:push pop:editor:AtTop
;
: "Не достигли начала документа"
"Достигли начала документа" !
;
"Установить фокус в документ"
ProcessMessages
cc:LastPage
ProcessMessages
VAR "Предельное количество"
800 >>> "Предельное количество"
ПОКА ( "Не достигли начала документа" И ( "Предельное количество" >0 ) )
BEGIN
--! "Предельное количество"
"Установить фокус в документ"
cc:PrevPage
ProcessMessages
END
"Предельное количество" >0 'Не добежали до начала документа' ASSERTS
// - проверяем, что таки добежали до начала документа
;
: "Открыть список конфигураций"
BOOLEAN VAR l_Found
"Удалось перевести фокус в {(контрол::tvConfs)}?" =: l_Found
l_Found ! IF
моп::Установки_Список_конфигураций
"Дождаться переключения вкладок"
ENDIF // l_Found ! IF
; // "Открыть список конфигураций"
: "Закрыть список конфигураций"
BOOLEAN VAR l_Found
"Удалось перевести фокус в {(контрол::tvConfs)}?" =: l_Found
l_Found IF
моп::Установки_Список_конфигураций
OnTest
"Дождаться переключения вкладок"
ENDIF // l_Found IF
; // "Закрыть список конфигураций"
: "Открыть список конфигураций и перевести туда фокус"
"Открыть список конфигураций"
"Перевести фокус в {(контрол::tvConfs)} на форме {(форма::ConfigurationList)}"
"Дождаться переключения вкладок"
; // "Открыть список конфигураций и перевести туда фокус"
: "Проверить, что текущая конфигурация стандартная"
"Открыть список конфигураций и перевести туда фокус"
TRY
INTERFACE VAR l_Node
TRY
контрол::tvConfs:push tree:CurrentNode =: l_Node
l_Node Node:Text 'Основная (активная)' SameStr
[[ 'Похоже, что конфигурация не стандартная Текст ноды: ' l_Node Node:Text ]] strings:Cat
ASSERTS
FINALLY
nil =: l_Node
END
FINALLY
"Закрыть текущую вкладку"
END
; // "Проверить, что текущая конфигурация стандартная"
: "Сравнить список с эталоном" OBJECT IN aList
aList ЯВЛЯЕТСЯ class::TvtLister IF
aList pop:control:Caption .
ELSE
INTEGER VAR Count
INTEGER VAR Item
0 >>> Item
aList tree:GetItemsCount =: Count
Item Count FOR
Item aList tree:GetItem Node:Text "Заменить непечатаемые символы" .
++! Item
NEXT
ENDIF
; // "Сравнить список с эталоном"
: "Сравнить текущий список с эталоном"
"Сравнить список {(focused:control:push)} с эталоном"
;
BOOLEAN FUNCTION "Расширенно найти ссылку в дереве" BOOLEAN IN aProc STRING IN aContext STRING IN aControl
false =: Result
STRING VAR l_Name
focused:control:push pop:component:Name =: l_Name
l_Name РАВНО aControl
[[ 'Почему то в фокусе ' l_Name ' а не ' aControl ]] strings:Cat
ASSERTS
: "Ищем ноду по контексту" IN aProc
INTEGER VAR "Предельное количество"
500 >>> "Предельное количество"
BOOLEAN VAR Сделано
НЕТ >>> Сделано
INTERFACE VAR l_Node
VAR l_CompareOp
контрол::tvConfs РАВНО aControl IF
@ StartsStr =: l_CompareOp
ELSE
@ SameStr =: l_CompareOp
ENDIF
TRY
ПОКА ( НЕ Сделано И ( "Предельное количество" >0 ) )
BEGIN
--! "Предельное количество"
aControl byname:control:push tree:CurrentNode >>> l_Node
STRING VAR l_Text
l_Node Node:Text =: l_Text
aContext l_Text l_CompareOp DO IF
ДА >>> Сделано
true =: Result
ELSE
// l_Node Node:IsLast IF
// ДА >>> Сделано
// ELSE
// "Стрелка вниз"
// ENDIF
// Node:IsLast - не совсем нам подходит, она говорит в РОДИТЕЛЕ, а не во ВСЁМ ДЕРЕВЕ
TRY
aProc DO
EXCEPT
// - наверное добежали до конца дерева
ДА >>> Сделано
END
ENDIF
END
FINALLY
nil =: l_Node
END
; // "Ищем ноду по контексту"
@ "Стрелка вниз" "Ищем ноду по контексту"
Result IF
aProc ? ( "Нажать {('Enter')}" )
OnTest
ELSE
контрол::tvConfs РАВНО aControl IF
// - Заплатка для борьбы с непереключением конфигураций
@ "Стрелка вверх" "Ищем ноду по контексту"
Result IF
aProc ? ( "Нажать {('Enter')}" )
OnTest
ENDIF // Result IF
ENDIF // контрол::tvConfs РАВНО aControl IF
ENDIF // Result IF
; // "Расширенно найти ссылку в дереве"
: "Найти документ в списке" STRING IN aContext
"Расширенно {(false)} найти ссылку {(aContext)} в дереве {(контрол::tvList)}"
; // "Найти документ в списке"
: "Найти документ в списке и открыть его" STRING IN aContext
"Расширенно {(false)} найти ссылку {(aContext)} в дереве {(контрол::tvList)}" IF
"Нажать {('Enter')}"
ELSE
'Документ в списке не найден!' .
ENDIF
; // "Найти документ в списке"
BOOLEAN FUNCTION "Перейти по ссылке в дереве" STRING IN aContext STRING IN aControl
false =: Result
"Расширенно {(true)} найти ссылку {(aContext)} в дереве {(aControl)}" IF
true =: Result
ENDIF
; // Перейти по ссылке в дереве"
: "Переключиться на конфигурацию" STRING IN aContext
"Открыть список конфигураций и перевести туда фокус"
"Переместиться в начало дерева"
"Перейти по ссылке {(aContext)} в дереве {(контрол::tvConfs)}" ! IF
"Открыть список конфигураций и перевести туда фокус"
"Переместиться в начало дерева"
"Сравнить текущий список с эталоном"
"Закрыть список конфигураций"
false
[[ 'Не удалось переключить конфигурацию на :' aContext ]] strings:Cat
ASSERTS
ELSE
"Закрыть список конфигураций"
// - т.к. конфигурация могла быть активной и Enter мог не срабоать
ENDIF // "Перейти по ссылке {(aContext)} в дереве {(aControl)}" !
"Дождаться переключения вкладок"
; // "Переключиться на конфигурацию"
: "Поработать с расширенной конфигурацией" IN aProc
"Переключиться на конфигурацию {('Расширенная')}"
TRY
aProc DO
FINALLY
"Открыть список конфигураций и перевести туда фокус"
// Это для того, чтобы фокус не потерять, а то он почему-то теряется
"Переключиться на конфигурацию {('Основная')}"
END // TRY..FINALLY
; // "Поработать с расширенной конфигурацией"
: "Сделать в расширенной конфигурации" IN aProc
aProc "Поработать с расширенной конфигурацией"
; // "Сделать в расширенной конфигурации"
: "Вернуться к найденному"
"Вернуться к найденному без проверки"
"Сравнить абзац текущего редактора с эталоном"
;
: "Вернуться к найденному, что ничего не нашлось"
false 'Не реализовано' ASSERTS
// - по-хорошему тут видимо надо курсор запоминать и сравнивать после попытки поиска
// т.к. код, который написан ниже - не приводит к желаемому результату
wait:Ok
TRY
"Вернуться к найденному без проверки"
FINALLY
waited:? 'Не было диалога про конец поиска' ASSERTS
// - убеждаемся, что диалог про конец поиска таки был
END
;
CONST
cWaitDelta 300
// см. Diff_Form cWaitDelta
: "Следующее изменение"
оп::Редакция_Следующее_изменение
cWaitDelta SLEEP
OnTest
;
: "Предыдущее изменение"
оп::Редакция_Предыдущее_изменение
cWaitDelta SLEEP
OnTest
;
: "Переключить базу на" STRING IN aNewBase
[[
'callbubat.cmd'
( aNewBase "НЕ РАВНО" '' ) ? ( ' "' aNewBase '"' )
]] strings:Cat WinExec
2000 SLEEP
OnTest
;
: "Переключаем базы"
"Переключить базу на {('')}"
;
: "Поработать с переключённой базой" IN aProc
TRY
"Переключаем базы"
aProc DO
FINALLY
"Переключаем базы"
END
;
: "Выполнить с переключённой базой" IN aProc
aProc "Поработать с переключённой базой"
;
// CONST tb24Date '24.09.2004'
// CONST tb27Date '27.09.2004'
CONST tb24Date '24.05.2013'
CONST tb27Date '27.05.2013'
STRING VAR tb24Name
[ tb24Date '.2004' '04' string:Replace '.' '' string:Replace =: tb24Name ]
STRING VAR tb27Name
[ tb27Date '.2004' '04' string:Replace '.' '' string:Replace =: tb27Name ]
: ТБ24
f1:BaseDate tb24Date SameText !
IF
"Переключаем базы"
f1:BaseDate tb24Date SameText 'База не ТБ24, а ' f1:BaseDate Cat ASSERTS
ENDIF
;
: ТБ27
f1:BaseDate tb27Date SameText !
IF
"Переключаем базы"
f1:BaseDate tb27Date SameText 'База не ТБ27, а ' f1:BaseDate Cat ASSERTS
ENDIF
;
USES
DocumentProcessing.script
;
: "Проверить наличие комментария и удалить его" IN aProc
aProc CheckCommentAndDeleteIfExists
;
: "Открываем 2006 документ"
: "Таки открываем"
"Открываем {(2006)}"
cc:Down
//cc:Down
;
@ "Таки открываем" "Проверить наличие комментария и удалить его"
;
: "Вставляем любой комментарий в начало документа"
"В начало документа"
"Ввести {('любой комментарий')}"
Ctrl-Z
;
: "Вставляем из буфера обмена любой комментарий в начало документа"
"В начало документа"
//cc:Down
cc:Down
cc:ExtendEnd
cc:Copy
"В начало документа"
cc:Paste
//Ctrl-Z
//Ctrl-Z
cc:Up
cc:Up
"Удалить текущий комментарий и проверить что он удалился"
// - подчищаем за собой
;
: "Установить фокус во флеш"
OnTest
OBJECT VAR Parent
focused:control:push pop:control:GetAnotherParentForm =: Parent
"Найти контрол {(DocumentFlash)} на форме {(Parent)}" pop:control:SetFocus
'Не удалось установить фокус во флеш' ASSERTS
;
: "Проверить что номер кадра флеша равен" IN aNum
DocumentFlash byname:control:push pop:flash:GetFrame РАВНО aNum 'Номера кадров не совпадают' ASSERTS
;
: "Открыть Гражданский кодекс"
"Открываем {(ГК)}"
;
: "Открыть ГК"
"Открываем {(ГК)}"
;
: "Открыть НК"
"Открываем {(НК)}"
;
: "Открываем НК"
"Открываем {(НК)}"
;
: "Сравнить обе редакции с эталоном"
"Перевести фокус в правую редакцию"
"Сравнить текст с эталоном"
"Перевести фокус в левую редакцию"
"Сравнить текст с эталоном"
;
: "Сравнить текущие абзацы обеих редакций с эталоном"
"Перевести фокус в правую редакцию"
"Сравнить абзац текущего редактора с эталоном"
"Перевести фокус в левую редакцию"
"Сравнить абзац текущего редактора с эталоном"
;
: "Потянуть вертикальный скроллер контрола вниз" OBJECT IN aControl
aControl pop:control:VScrollerVisible 'У контрола нет вертикального скроллбара' ASSERTS
VAR X
VAR Y
// Получаем верхний правый угол контрола
"Померить ширину {(aControl)}" >>> X
0 >>> Y
// Переводим в координаты экрана
"Привести координаты {( @ X @ Y )} для контрола {(aControl)} к экранным"
// поправка на размер скроллера. Надо бы GetSystemMetrics использовать...или как там его
X 10 - >>> X
Y 25 + >>> Y
: Тянем_потянем
"Установить курсор мыши по координатам {(X Y)}"
Y 100 + >>> Y
THREAD (
"Зажать левую кнопку мыши"
"Установить курсор мыши по координатам {(X Y)}"
"Отпустить левую кнопку мыши"
)
50 SLEEP
;
"Запомнить позицию мыши и выполнить {(@ Тянем_потянем)}"
;
: "Перевести фокус в дерево терминов"
"Перевести фокус в {('WordsTree')} на форме {(форма::Diction)}"
OnTest
;
: "Перевести фокус в текст"
"Перевести фокус в документ"
;
: "Проверить, что имя комментария в оглавлении поменялось"
//'Проверить, что имя комментария в оглавлении поменялось' ToDo
"Перевести фокус в комментарии"
"Сравнить текущий список с эталоном"
; // "Проверить, что имя комментария в оглавлении поменялось"
: "Поставить на контроль"
wait:No
TRY
TRY
оп::Документ_Поставить_на_контроль
EXCEPT
// - давим ошибку от диалога о том, что документ таки был поставлен на контроль
// а по-хорошему надо сделать слово waitforsome:No:Ok
wait:No
TRY
оп::Документ_Поставить_на_контроль
FINALLY
waited:? ASSERT
END
// - это такая хитрая проверка, что документ таки поставился на контроль
// но по-хорошему надо просто сделать ручку для того, чтобы проверить на контроле документ или нет
END
FINALLY
waited:? IF
// - документ уже был на контроле
ENDIF
END
;
: "Снять с контроля"
wait:Yes
TRY
оп::Документ_Поставить_на_контроль
FINALLY
waited:? 'Не было подтверждения про снятие с контроля' ASSERTS
END
;
: "Выполнить с документом установленным на контроль" IN aProc IN aDoc
"Открываем {(aDoc)}"
"Поставить на контроль"
TRY
aProc DO
FINALLY
"Открываем {(aDoc)}"
"Снять с контроля"
END
;
: "Выполнить с документами на контроле" IN aProc
"Открыть вкладку Документы на контроле"
TRY
aProc DO
FINALLY
"Закрыть вкладку Документы на контроле"
END
;
: "Сравнить список изменённых параграфов с эталоном"
//OnTest
// http://mdp.garant.ru/pages/viewpage.action?pageId=296622673&focusedCommentId=296631645#comment-296631645
// - если раскомментировать, то разные списки будут получаться гораздо реже
OBJECT VAR l_Editor
"Убедиться, что фокус в редакторе"
focused:control:push >>> l_Editor
ПОКА ( DocumentText DiffIterator:HasNext )
BEGIN
VAR l_ParaNum
DocumentText DiffIterator:Next >>> l_ParaNum
l_ParaNum .
/* DocumentText */ l_ParaNum l_Editor pop:editor:GetParaByID
IF
Para:Text .
ELSE
'Параграф не найден' .
ENDIF
END
; // "Сравнить список изменённых параграфов с эталоном"
: "В левом окне из комбобокса выбрать редакцию с текстом" STRING IN aText
OBJECT VAR l_Tree
"Перевести фокус в список редакций левой редакции"
VAR "Предельное количество"
100 >>> "Предельное количество"
focused:control:push >>> l_Tree
ПОКА ( контрол::EditionChoose l_Tree pop:ComboTree:CurrentNode Node:Text aText SWAP StartsStr ! И ( "Предельное количество" >0 ) )
BEGIN
--! "Предельное количество"
"Нажать {('Down')}"
END
"Нажать {('Enter')}"
"Перевести фокус в список редакций левой редакции"
STRING VAR l_Text
контрол::EditionChoose:push pop:control:Caption >>> l_Text
aText l_Text StartsStr 'Выбралась неверная редакция: ' l_Text Cat ASSERTS
"Перевести фокус в список редакций правой редакции"
;
: "В левом окне из комбобокса выбрать редакцию с 15.08.2004 по 17.08.2004"
"В левом окне из комбобокса выбрать редакцию с текстом {('15.08.2004 - 17.08.2004')}"
;
: "Закрываем форму контекстного поиска"
"Вызываем форму контекстного поиска"
// - ставим фокус или открываем форму
"Нажать {('Esc')}"
;
: "Закрываем БП"
"Перевести фокус в {(контрол::ContextEdit)} на форме {(форма::NewBaseSearch)} типа {(0)}"
"Нажать {('Esc')}"
// БП
// "Нажать {('Esc')}"
;
: "Проверить, что форма БП одна"
: Действия_с_контролом OBJECT IN aCtrl
aCtrl ЯВЛЯЕТСЯ class::TNewBaseSearchForm IF
aCtrl pop:vcm:form:FormID .
ENDIF
; // Действия_с_контролом
"выполнить для всех контролов {("Найти главное окно")}" Действия_с_контролом
;
: "Проверить наличие формы БП"
"Проверить, что открыта форма БП"
//'Проверить наличие формы БП' ToDo
;
: "Проверить, что попали в Новости-онлайн"
OnTest
форма::InternetAgent byname:control:push pop:control:CanFocus
[[
'Не удалось перейти по интернет-ссылке. Текущая форма: '
focused:control:push pop:control:GetAnotherParentForm pop:object:ClassName
]] strings:Cat
ASSERTS
; // "Проверить, что попали в Новости-онлайн"
: "Проверить, что текущий контрол - браузер"
"Проверить, что попали в Новости-онлайн"
; // "Проверить, что текущий контрол - браузер"
: "Проверить, что находимся в ОМ"
OnTest
контрол::ContextEdit:push pop:control:CanFocus 'Не удалось перейти в ОМ' ASSERTS
;
: "Нажатием F7 открываем ППР"
ППР
OnTest
;
: "Открываем Конституцию"
"Открыть Конституцию"
;
: "Открываем вкладку Справка"
"Открываем Справку"
;
: "Выполнить и если было исключение, то выполнить" IN aProc1 IN aProc2
TRY
aProc1 DO
EXCEPT
"Сравнить текущее исключение с эталоном"
aProc2 DO
END
;
: "Боремся с плавающим оглавлением"
ANYUSERTYPE форма::Contents vcm:FindForm IF
OBJECT VAR l_ContentsForm
>>> l_ContentsForm
OBJECT VAR l_Form
l_ContentsForm pop:control:GetAnotherParentForm =: l_Form
l_Form pop:object:IsNil ! IF
l_Form pop:form:FormStyle РАВНО fsStayOnTop IF
// - только если оглавление в плавающем состоянии
l_Form pop:control:Visible IF
//l_Form pop:component:Name .
l_Form pop:control:Hide
//"Закрыть текущую вкладку"
ENDIF
ENDIF
ENDIF
ENDIF
;
: "Закрыть плавающее оглавление"
"Боремся с плавающим оглавлением"
;
: "Перевести фокус в дерево редакций"
true ANYUSERTYPE контрол::RedactionTree форма::Redactions TryFocusOnForm 'Не удалось поставить фокус в дерево редакций' ASSERTS
;
: "Список редакций без перевода фокуса"
"Боремся с плавающим оглавлением"
оп::Редакции_документа_Список_редакций
; // "Список редакций без перевода фокуса"
: "Список редакций"
"Список редакций без перевода фокуса"
OnTest
"Перевести фокус в дерево редакций"
; // "Список редакций"
: "Открываем вкладку 'Текст документа' в синхронном просмотре списка"
"Дождаться переключения вкладок"
OBJECT VAR "Нужная кнопка"
"Найти контрол {('bt_enSynchroView_ShowText')} на форме {("Найти главное окно")}" =: "Нужная кнопка"
"Нужная кнопка" "Узнать, существует ли объект" ! 'Не нашли кнопку Текст документа' ASSERTS
"Нужная кнопка" "Кликнуть"
; // "Открываем вкладку 'Текст документа' в синхронном просмотре списка"
: "Открыть вкладку синхронного просмотра текста без сравнения с эталоном"
//"Проверить вкладку {(dftDocSynchroView)} документа"
//"Перевести фокус в {(DocumentText)} на форме {(Форма_документа)} типа {(dftDocSynchroView)}"
true dftDocSynchroView DocumentText Форма_документа TryFocusOnForm ! ?
( true тип_формы::dftAnnotationSynchroView DocumentText Форма_документа TryFocusOnForm 'Не удалось переключиться на вкладку синхронного просмотра документа' ASSERTS )
оп::Синхронный_просмотр_Текст_документа
OnTest
"Дождаться переключения вкладок"
"Открываем вкладку 'Текст документа' в синхронном просмотре списка"
true dftDocSynchroView DocumentText Форма_документа TryFocusOnForm 'Таки не удалось переключиться на вкладку синхронного просмотра документа' ASSERTS
"Дождаться переключения вкладок"
;
: "Открыть вкладку синхронного просмотра текста"
"Открыть вкладку синхронного просмотра текста без сравнения с эталоном"
"Сравнить текст с эталоном"
;
: "в поле 'Утрата силы' поставить" STRING IN aStr
"Убедиться, что фокус в редакторе"
'AT_LC_ABOLISHED_DATE' aStr focused:control:push pop:QueryCard:SetAttribute
;
: "в поле 'Слова в названии' ввести" STRING IN aStr
"Убедиться, что фокус в редакторе"
'AT_TEXT_NAME' aStr focused:control:push pop:QueryCard:SetAttribute
;
: "в поле 'Слова в тексте' ввести" STRING IN aStr
"Убедиться, что фокус в редакторе"
'AT_TEXT_BODY' aStr focused:control:push pop:QueryCard:SetAttribute
;
: "в поле 'Тип' ввести" STRING IN aStr
"Убедиться, что фокус в редакторе"
'AT_TYPE' aStr focused:control:push pop:QueryCard:SetAttribute
;
: "в поле 'Орган/Источник' ввести с операцией" STRING IN aStr INTEGER IN aL
"Убедиться, что фокус в редакторе"
aL 'AT_SOURCE' aStr focused:control:push pop:QueryCard:Attribute:SetWithLogicOperation
;
: "в поле 'Орган/Источник' ввести" STRING IN aStr
"Убедиться, что фокус в редакторе"
'AT_SOURCE' aStr focused:control:push pop:QueryCard:SetAttribute
;
: "в поле 'Вступление в силу' поставить" STRING IN aStr
'AT_LC_IN_DATE' aStr focused:control:push pop:QueryCard:SetAttribute
;
: "в поле 'Искать в недействующих редакциях' поставить" STRING IN aStr
'AT_EDITION' aStr focused:control:push pop:QueryCard:SetAttribute
;
: "в поле 'Страна' ввести" STRING IN aStr
'AT_PHARM_COUNTRY' aStr focused:control:push pop:QueryCard:SetAttribute
;
: "Открыть вкладку Перевод"
true dftTranslation DocumentText Форма_документа TryFocusOnForm 'Не удалось переключиться на вкладку Перевод' ASSERTS
OnTest
"Дождаться переключения вкладок"
"Сравнить текст с эталоном"
; // "Открыть вкладку Перевод"
: БАЗА STRING IN aStr
'Нужно взять базу из: ' aStr Cat ToDo
; // БАЗА
: "Выбрать 'Текущая страница'"
OBJECT VAR "Текущая страница"
контрол::rbPrintCurrent
focused:control:push pop:control:GetAnotherParentForm
pop:control:FindControlByName =: "Текущая страница"
//"Текущая страница" pop:control:Click
//"Текущая страница" pop:RadioButton:GetChecked !
true
"Текущая страница" pop:RadioButton:SetChecked
OnTest
nil =: "Текущая страница"
//'Выбрать "Текущая страница"' ToDo
; // "Выбрать 'Текущая страница'"
: "Вызвать диалог печати по CTRL-P, выбрать в области печати 'Текущая страница' и нажать 'Печать'"
: Действия
//"Задержка имени Димы Инишева"
"Ctrl-P"
; // Действия
: Действия1
"Выбрать 'Текущая страница'"
//Ok
оп::Завершение_работы_Ок
OnTest
; // Действия1
//"Задержка имени Димы Инишева"
//Действия
@ Действия MODAL Действия1
;
: "Проверяем, что в кнопке Ещё выбран тип" STRING IN aType
//[[ 'Проверяем, что в кнопке Ещё выбран тип "' aType '"' ]] strings:Cat ToDo
"Открыта ли форма БП?" ! IF
"Дождаться переключения вкладок"
ENDIF
"Проверить, что открыта форма БП"
aType focused:control:push pop:control:GetParentForm pop:control:FindVGControlByName vg:control:GetIsChecked [[ 'Не выбран тип ' aType ]] strings:Cat ASSERTS
;
: "Сбрасываем вкладку БП в умолчательное состояние"
БП
// - пока так, за счёт ByUser
// http://mdp.garant.ru/pages/viewpage.action?pageId=300026165&focusedCommentId=319489482#comment-319489482
;
: "Посчитать количество кнопок для типов БП"
'Все документы' focused:control:push pop:control:GetParentForm pop:control:FindVGControlByName vg:control:CountSiblingLikeMe .
;
: "! Тест в разработке"
script:FileName sysutils:ExtractFileName ' в состоянии разработки' Cat ToDo
;
: "Список всех документов"
ППР "Нажать Искать"
//OnTest
;
: "Открыть вкладку Список редакций"
"Список редакций"
;
: "Поставить фокус в дерево ситуаций второго уровня в Стандартной ППС"
true тип_формы::astNone контрол::AttributeTree форма::TreeAttributeSelect TryFocusOnForm 'Поставить фокус в дерево ситуаций второго уровня в Стандартной ППС' ASSERTS
;
: "Открыть любую редакцию в новом окне"
"Перевести фокус в дерево редакций"
"Открыть текущую редакцию в новом окне"
;
: "Сравнить список документов типа с эталоном" INTEGER IN aListType
true aListType контрол::tvList форма::List TryFocusOnForm 'Не удалось поставить фокус в список для сравнения с эталоном' ASSERTS
//"Перевести фокус в список"
"Сравнить текущий список с эталоном"
; // "Сравнить список документов с эталоном"
: "Сравнить список документов с эталоном"
"Перевести фокус в список"
"Сравнить текущий список с эталоном"
; // "Сравнить список документов с эталоном"
: "В документе не должно быть комментариев"
INTEGER VAR "Номер документа"
"Номер документа" DocumentText textform:GetDocumentID =: "Номер документа"
BOOLEAN VAR "Есть комментарии"
true =: "Есть комментарии"
BOOLEAN VAR "Было удаление комментария"
false =: "Было удаление комментария"
INTEGER VAR l_Guard
0 =: l_Guard
ПОКА "Есть комментарии"
BEGIN
++! l_Guard
l_Guard 100 < 'Похоже что зациклились' ASSERTS
true ANYUSERTYPE контрол::lstComments форма::Contents TryFocusOnForm IF
OBJECT VAR "Текущий контрол"
focused:control:push =: "Текущий контрол"
"Текущий контрол" pop:component:Name РАВНО контрол::lstComments IF
"Текущий контрол" pop:control:Visible IF
"Нажать Del"
true =: "Было удаление комментария"
ENDIF // "Текущий контрол" pop:control:Visible IF
ENDIF // "Текущий контрол" pop:component:Name РАВНО контрол::lstComments IF
ELSE
false =: "Есть комментарии"
ENDIF
END // ПОКА "Есть комментарии"
"Было удаление комментария" IF
// - тут переоткрываем документ
"Закрыть F1."
"Открываем {("Номер документа")}"
"Установить фокус в документ"
ENDIF // "Было удаление комментария"
; // "В документе не должно быть комментариев"
: "Открываем первую пользовательскую вкладку"
"Дождаться переключения вкладок"
true тип_формы::lftUserCR1 tvList форма::List TryFocusOnForm
'Не удалось открыть первую пользовательскую вкладку'
ASSERTS
OnTest
"Дождаться переключения вкладок"
;
: "Открываем вторую пользовательскую вкладку"
"Дождаться переключения вкладок"
true тип_формы::lftUserCR2 tvList форма::List TryFocusOnForm
'Не удалось открыть вторую пользовательскую вкладку'
ASSERTS
OnTest
"Дождаться переключения вкладок"
;
: "Открываем вкладку 'Судебная практика'"
"Открываем первую пользовательскую вкладку"
;
USES
DocumentList.script
;
: "Найти в документе строку" STRING IN aText
: Действия
"Поиск контекста"
"Ввести строку {(aText)}"
"Нажать {('Enter')}"
OnTest
; // Действия
"Выполнить {(@ Действия)} и восстановить фокус"
; // "Найти в документе строку"
: "Ищем контекст и сравниваем с эталоном найденный абзац" STRING IN aText
"Найти в документе строку {(aText)}"
"Сравнить абзац текущего редактора с эталоном"
;
: "Выполняем . Проверяем, что комментарий таки удалился из базы и подчищаем за собой" IN aProc
// --------------
"Закрыть F1."
aProc DO
TRY
"Проверяем отсутствие комментария в текущем редакторе"
EXCEPT
"Удалить текущий комментарий и проверить что он удалился"
// - чистим за собой, чтобы другие тесты всё же прошли
RAISE
END
// http://mdp.garant.ru/pages/viewpage.action?pageId=280009251&focusedCommentId=321990725#comment-321990725
// Читаем ВСЮ ветку
// --------------
;
: "Ставим указатель мыши на ссылку в баллоне синей медали о наличии консультаций"
"Нажать на синюю медаль о наличии консультаций и проверить наличие баллона"
"Установить фокус в баллон синей медаль о наличии консультаций"
"Ставим указатель мыши на конец текущего параграфа редактора {(focused:control:push)} со смещением {(-20 -10)}"
;
: "Открыть структуру документа"
BOOLEAN VAR l_Found
true ANYUSERTYPE контрол::ContentsTree форма::Contents TryFocusOnForm =: l_Found
l_Found ! IF
true ANYUSERTYPE контрол::lstExternalObjects форма::Contents TryFocusOnForm =: l_Found
ENDIF
l_Found ! IF
оп::Документ_Структура_документа
OnTest
ENDIF
true ANYUSERTYPE контрол::ContentsTree форма::Contents TryFocusOnForm ! IF
true ANYUSERTYPE контрол::lstExternalObjects форма::Contents TryFocusOnForm
'Не смогли установить фокус в структуру документа'
ASSERTS
ENDIF
;
: "Закрыть структуру документа"
BOOLEAN VAR l_Found
true ANYUSERTYPE контрол::ContentsTree форма::Contents TryFocusOnForm =: l_Found
l_Found IF
оп::Документ_Структура_документа
OnTest
ENDIF
;
: "Сохранить активное окно"
//form:GetHandle
focused:control:push pop:control:GetTopParentForm pop:control:GetHandle
;
: "Выполнить с новым окном Гаранта и переключиться на предыдущее окно" IN aProc
VAR l_Main
"Сохранить активное окно" >>> l_Main
TRY
"Открыть новое окно гаранта"
aProc DO
FINALLY
l_Main "Восстановить активное окно"
END
;
: "Открыть новое окно Гаранта. Переключиться на старое. Выполнить и закрыть новое окно" IN aProc
VAR l_Main 0 >>> l_Main
: Действия
"Сохранить активное окно" >>> l_Main
;
"Выполнить {(@ Действия)} с новым окном Гаранта и переключиться на предыдущее окно"
TRY
OnTest
aProc DO
FINALLY
l_Main !=0 'Не удалось запомнить активное окно' ASSERTS
l_Main "Закрыть сохраненное окно"
END
;
VAR g_TimerNum
[ 0 >>> g_TimerNum ]
: "Померить время" IN aProc
++! g_TimerNum
VAR l_TimerNumS
g_TimerNum IntToStr >>> l_TimerNumS
StartTimer
TRY
aProc DO
application:ActionIdle
// - чтобы перечитались данные прецедента
FINALLY
'' l_TimerNumS StopTimerEx
END
; // "Померить время"
: "Померить время и сравнить с эталоном" IN aProc
++! g_TimerNum
VAR l_TimerNumS
g_TimerNum IntToStr >>> l_TimerNumS
// VAR l_ScriptName
// script:FileName sysutils:ExtractFileName >>> l_ScriptName
StartTimer
TRY
aProc DO
application:ActionIdle
// - чтобы перечитались данные прецедента
FINALLY
// l_ScriptName l_TimerNumS StopTimerEx
//l_TimerNumS StopTimer
'' l_TimerNumS StopTimerEx DROP
END
[[ 'Замер № ' l_TimerNumS '. Померить время и сравнить с эталоном' ]] strings:Cat ToDo
; // "Померить время и сравнить с эталоном"
: "Проверить навигацию по ссылкам"
"Перейти к следующей ссылке"
"Сравнить выделенный текст текущего редактора с эталоном"
"Перейти к следующей ссылке"
"Сравнить выделенный текст текущего редактора с эталоном"
"Перейти к предыдущей ссылке"
"Сравнить выделенный текст текущего редактора с эталоном"
//"Перейти по текущей ссылке"
// - ссылка там в пустоту, поэтому - закомментировано
;
: "Тут приехала эмуляция изменения документа МГО"
true DocumentText textform:SetNeedShowIntranetWarning
OnTest
;
: "Нажать на ссылку в баллоне медали" STRING IN medal
OBJECT VAR "Редактор из баллона"
medal byname:control:push pop:reminder:FindEditor =: "Редактор из баллона"
"Редактор из баллона" pop:object:IsNil ! 'Редактор из баллона не найден' ASSERTS
"Редактор из баллона" pop:editor:NextHyperlink
"Редактор из баллона" pop:editor:JumpToHyperlink
; // "Нажать на ссылку в баллоне медали"
: "Нажать на ссылку в баллоне МГО"
"Нажать на ссылку в баллоне медали {("Синяя медаль МГО")}"
; // "Нажать на ссылку в баллоне МГО"
: "В БП ищем контекст по типу и проверяем получившийся список" STRING IN aContext STRING IN aType
"В БП ищем контекст {(aContext)} по типу {(aType)}"
"Проверяем, что в кнопке Ещё выбран тип {(aType)}"
"Проверить информацию о списке"
;
: "Перебрать иерархию вложенности контролов" OBJECT IN aControl IN aProc
ПОКА ( aControl pop:object:IsNil ! )
BEGIN
aControl aProc DO
aControl pop:control:GetParent >>> aControl
END
;
: "Напечатать иерархию вложенности контролов" OBJECT IN aControl
: "Печатаем контрол" IN aControl
[[
aControl ЯВЛЯЕТСЯ class::TvcmForm IF
// - т.к. у формы к Name могут приклеиваться циферки, которые всю малину портят
aControl pop:vcm:form:FormID
ELSE
aControl pop:component:Name
ENDIF //class::TvcmForm aControl pop:object:Inherits
' : '
aControl pop:object:ClassName
]] strings:Cat .
;
aControl @ "Печатаем контрол" "Перебрать иерархию вложенности контролов"
;
: "Проверить, что высоты контролов больше 0" OBJECT IN aControl
: "Печатаем контрол" IN aControl
aControl pop:control:GetHeight >0
[[
'Высота контрола '
aControl pop:component:Name ' : '
aControl pop:object:ClassName
' почему-то меньше или равна 0'
]] strings:Cat ASSERTS
;
aControl @ "Печатаем контрол" "Перебрать иерархию вложенности контролов"
; // "Проверить, что высоты контролов больше 0"
: "Проверить, что форма БП вставлена в нужную зону"
"Проверить, что открыта форма БП"
VAR l_Form
0 >>> l_Form
ANYUSERTYPE форма::NewBaseSearch vcm:FindForm ASSERT
>>> l_Form
l_Form "Напечатать иерархию вложенности контролов"
l_Form "Проверить, что высоты контролов больше 0"
;
: "Ищем контекст и проверяем, что он нашёлся" STRING IN aContext
VAR l_WasDialog
false =: l_WasDialog
wait:Ok
TRY
"Ищем контекст {(aContext)} и сравниваем с эталоном найденный абзац"
FINALLY
TRY
waited:? IF
// - убеждаемся, что диалог про конец поиска таки был
true =: l_WasDialog
ENDIF
EXCEPT
"Сравнить текущее исключение с эталоном"
DROP
// - удаляем результат waited:? со стека, т.к. прилетела ересь 'Нарушен баланс скобок Wait'
END
END
l_WasDialog ! 'Контекст не найден' ASSERTS
;
: "Лекарственные средства, разрешённые к применению"
моп::Инфарм_Список_выпускаемых_препаратов
OnTest
; // "Лекарственные средства, разрешённые к применению"
: "Кнопка автораспахивания левого навигатора"
OnTest
OBJECT VAR "Форма в которую вставлено оглавление"
focused:control:push pop:control:GetAnotherParentForm =: "Форма в которую вставлено оглавление"
OBJECT VAR "Основная форма приложения"
"Форма в которую вставлено оглавление" pop:control:GetAnotherParentForm =: "Основная форма приложения"
OBJECT VAR "Левый навигатор"
контрол::LeftNavigator "Основная форма приложения" pop:control:FindControlByName =: "Левый навигатор"
"Левый навигатор" pop:object:IsNil ! 'Не удалось найти левый навигатор' ASSERTS
OBJECT VAR "Кнопка придочивания"
'AUTOHIDEOFF' "Левый навигатор" pop:control:FindControlByName =: "Кнопка придочивания"
"Кнопка придочивания" pop:object:IsNil ! 'Не удалось найти кнопку придочивания левого навигатора' ASSERTS
"Кнопка придочивания"
; // "Кнопка автораспахивания левого навигатора"
: "Сделать левый навигатор автораспахивающимся"
OBJECT VAR l_DockButton
"Кнопка автораспахивания левого навигатора" =: l_DockButton
l_DockButton pop:TB97Button:GetIsDown IF
l_DockButton pop:control:Click
ENDIF
OnTest
; // "Сделать левый навигатор автораспахивающимся"
: "Сделать левый навигатор НЕавтораспахивающимся"
OBJECT VAR l_DockButton
"Кнопка автораспахивания левого навигатора" =: l_DockButton
l_DockButton pop:TB97Button:GetIsDown ! IF
l_DockButton pop:control:Click
ENDIF
OnTest
; // "Сделать левый навигатор Неавтораспахивающимся"
CONST cBmpClose 'CLOSE'
: "Проверяем отсутствие крестика"
OBJECT VAR "Форма плавающего навигатора"
focused:control:push
pop:control:GetAnotherParentForm
pop:control:GetAnotherParentForm =: "Форма плавающего навигатора"
OBJECT VAR "Кнопка закрытия"
cBmpClose "Форма плавающего навигатора" pop:control:FindControlByName =: "Кнопка закрытия"
"Кнопка закрытия" pop:object:IsNil IF
false [[ 'Кнопка ' cBmpClose ' не была создана' ]] strings:Cat ASSERTS
ELSE
"Кнопка закрытия" pop:control:Visible ! 'Кнопка закрытия оглавления почему-то стала видимой' ASSERTS
ENDIF
; // "Проверяем отсутствие крестика"
: "Проверяем отсутствие крестика непосредственно в текущей форме"
OBJECT VAR "Текущий контрол"
focused:control:push =: "Текущий контрол"
"Текущий контрол" "Напечатать иерархию вложенности контролов"
OBJECT VAR "Форма оглавления"
"Текущий контрол" pop:control:GetAnotherParentForm =: "Форма оглавления"
OBJECT VAR "Объект в котором ищем кнопку закрытия"
"Форма оглавления" =: "Объект в котором ищем кнопку закрытия"
"Объект в котором ищем кнопку закрытия" "Напечатать иерархию вложенности контролов"
CONST BtnClose 'BtnClose'
OBJECT VAR "Кнопка закрытия"
BtnClose "Объект в котором ищем кнопку закрытия" pop:control:FindControlByName =: "Кнопка закрытия"
"Кнопка закрытия" pop:object:IsNil IF
//false [[ 'Кнопка ' BtnClose ' не была создана' ]] strings:Cat ASSERTS
// - типа всё хорошо, не создана, ну и хер бы с ней
ELSE
"Кнопка закрытия" pop:control:Visible ! 'Кнопка закрытия оглавления почему-то стала видимой' ASSERTS
ENDIF
; // "Проверяем отсутствие крестика непосредственно в текущей форме"
: "Сделать вкладку на форме плавающей" STRING IN aControl STRING IN aForm
"Перевести фокус в {(aControl)} на форме {(aForm)}"
OBJECT VAR "Текущий контрол"
focused:control:push =: "Текущий контрол"
OBJECT VAR "Форма вкладки"
"Текущий контрол" pop:control:GetAnotherParentForm =: "Форма вкладки"
"Форма вкладки" pop:object:IsNil ! 'Не нашли форму вкладки' ASSERTS
"Форма вкладки" pop:vcm:form:IsFloatingState ! IF
"Форма вкладки" pop:control:Undock
OnTest
"Перевести фокус в {(aControl)} на форме {(aForm)}"
ENDIF
; // "Сделать вкладку на форме плавающей"
: "Сделать вкладку на форме неплавающей" STRING IN aControl STRING IN aForm
"Перевести фокус в {(aControl)} на форме {(aForm)}"
OBJECT VAR "Текущий контрол"
focused:control:push =: "Текущий контрол"
OBJECT VAR "Форма вкладки"
"Текущий контрол" pop:control:GetAnotherParentForm =: "Форма вкладки"
"Форма вкладки" pop:object:IsNil ! 'Не нашли форму вкладки' ASSERTS
"Форма вкладки" pop:vcm:form:IsFloatingState IF
OBJECT VAR "Форма плавающего навигатора"
"Форма вкладки" pop:control:GetAnotherParentForm =: "Форма плавающего навигатора"
"Форма плавающего навигатора" pop:object:IsNil ! 'Не нашли форму плавающего навиатора' ASSERTS
OBJECT VAR "Кнопка придочивания"
'HIDELEFT' "Форма плавающего навигатора" pop:control:FindControlByName =: "Кнопка придочивания"
"Кнопка придочивания" pop:object:IsNil ! 'Не нашли кнопку придочивания' ASSERTS
"Кнопка придочивания" pop:control:Click
OnTest
"Перевести фокус в {(aControl)} на форме {(aForm)}"
ENDIF
; // "Сделать вкладку на форме неплавающей"
: "Сделать вкладку меню плавающей"
"Сделать вкладку {(контрол::NavigatorTree)} на форме {(форма::Navigator)} плавающей"
;
: "Сделать вкладку меню неплавающей"
"Сделать вкладку {(контрол::NavigatorTree)} на форме {(форма::Navigator)} неплавающей"
;
: "Сделать оглавление плавающим"
: X1
"Сделать вкладку {(контрол::ContentsTree)} на форме {(форма::Contents)} плавающей"
;
: X2
"Сделать вкладку {(контрол::lstExternalObjects)} на форме {(форма::Contents)} плавающей"
;
"Выполнить {(@ X1)} и если было исключение, то выполнить {(@ X2)}"
;
: "Сделать оглавление неплавающим"
: X1
"Сделать вкладку {(контрол::ContentsTree)} на форме {(форма::Contents)} неплавающей"
;
: X2
"Сделать вкладку {(контрол::lstExternalObjects)} на форме {(форма::Contents)} неплавающей"
;
"Выполнить {(@ X1)} и если было исключение, то выполнить {(@ X2)}"
;
: "Перевести фокус в список внешних объектов"
"Перевести фокус в {(контрол::lstExternalObjects)} на форме {(форма::Contents)}"
; // "Перевести фокус в список внешних объектов"
WORDWORKER "Выполнить подавив исключение"
VAR l_WasException
false =: l_WasException
"Выполнить {(@ ( WordToWork DO ) )} и если было исключение, то выполнить {(@ ( true =: l_WasException ) )}"
l_WasException
[[ 'Тест ' script:FileName ' почему-то стал проходить' ]] strings:Cat
ASSERTS
; // анти-тест
WORDWORKER анти-тест
VAR l_WasException
false =: l_WasException
"Выполнить {(@ ( WordToWork DO ) )} и если было исключение, то выполнить {(@ ( true =: l_WasException ) )}"
l_WasException
[[ 'Тест ' script:FileName ' почему-то стал проходить' ]] strings:Cat
ASSERTS
; // анти-тест
: "Проверить, что вкладка с атрибутами документа видимая"
OBJECT VAR "Форма с атрибутами документа"
nil =: "Форма с атрибутами документа"
ANYUSERTYPE форма::Attributes vcm:FindForm ASSERT =: "Форма с атрибутами документа"
"Форма с атрибутами документа" "Проверить, что высоты контролов больше 0"
; // "Проверить, что вкладка с атрибутами документа видимая"
: "Открыть вкладку на всё окно"
OBJECT VAR "Текущий контрол"
OBJECT VAR "Текущая форма"
OBJECT VAR "Кнопка открытия в текущем окне"
focused:control:push =: "Текущий контрол"
"Текущий контрол" pop:control:GetAnotherParentForm =: "Текущая форма"
'BtnOpen' "Текущая форма" pop:control:FindControlByName =: "Кнопка открытия в текущем окне"
"Кнопка открытия в текущем окне" pop:control:Click
; // "Открыть вкладку на всё окно"
: "Установить фокус в атрибуты документа"
false ANYUSERTYPE контрол::tvAttributes форма::Attributes TryFocusOnForm
'Не удалось поставить фокус в информацию о документе' ASSERTS
; // "Установить фокус в атрибуты документа"
: "Проверить что дерево атрибутов документа не пустое"
INTERFACE VAR l_Node
контрол::tvAttributes:push tree:CurrentNode =: l_Node
TRY
l_Node nil ?!= 'Дерево атрибутов пустое' ASSERTS
FINALLY
nil =: l_Node
END
; // "Проверить что дерево атрибутов документа не пустое"
: "Перейти по ссылке на в области" STRING IN aContext STRING IN aControl
ОМ
"Перевести фокус в {(aControl)} на форме {(форма::MainMenuNew)}"
"Переместиться в начало дерева"
"Перейти по ссылке {(aContext)} в дереве {(aControl)}" 'Не удалось перейти по ссылке' ASSERTS
; // "Перейти по ссылке на в области"
: "Сохранить таблицу стилей и сравнить с эталоном"
STRING VAR StylesFile
script:FileName '.evs' sysutils:ChangeFileExt sysutils:ExtractFileName =: StylesFile
StylesFile StyleTable:SaveToFile
StylesFile '%' tests:CheckEtalon
; // "Сохранить таблицу стилей и сравнить с эталоном"
: "Меню во вкладке"
true ANYUSERTYPE контрол::NavigatorTree форма::Navigator TryFocusOnForm ! ? "Меню во вкладке без проверки"
true ANYUSERTYPE контрол::NavigatorTree форма::Navigator TryFocusOnForm 'Не удалось поставить фокус в меню во вкладке' ASSERTS
; // "Меню во вкладке"
: "Закрыть меню во вкладке"
true ANYUSERTYPE контрол::NavigatorTree форма::Navigator TryFocusOnForm ? "Меню во вкладке без проверки"
; // "Меню во вкладке"
: "Выполнить с меню во вкладке и закрыть её" IN aProc
"Меню во вкладке"
TRY
aProc DO
FINALLY
"Закрыть меню во вкладке"
END
; // Выполнить с меню во вкладке и закрыть её"
: "Установить фокус в меню во вкладке"
false ANYUSERTYPE контрол::NavigatorTree форма::Navigator TryFocusOnForm
'Не удалось установить фокус в меню во вкладке' ASSERTS
; // "Установить фокус в меню во вкладке"
: "А активна ли вкладка Меню?"
false 0 контрол::NavigatorTree форма::Navigator TryFocusOnForm
; // "А активна ли вкладка Меню?"
: "Закрыть меню во вкладке после проверки"
"А активна ли вкладка Меню?" IF
"Установить фокус в меню во вкладке"
"Закрыть меню во вкладке"
ENDIF
; // "Закрыть меню во вкладке после проверки"
: "Уменьшить окно" OBJECT IN "Окно"
CONST wsNormal 0
wsNormal "Окно" pop:form:SetWindowState
; // "Уменьшить окно"
: "Развернуть окно" OBJECT IN "Окно"
CONST wsMaximized 2
wsMaximized "Окно" pop:form:SetWindowState
; // "Развернуть окно"
: "Свернуть окно" OBJECT IN "Окно"
CONST wsMinimized 1
wsMinimized "Окно" pop:form:SetWindowState
; // "Свернуть окно"
: "Сворачиваем дерево оглавления"
"Открыть структуру документа"
"Перевести фокус в оглавление"
оп::Дерево_Свернуть_все
"Переместиться в начало дерева"
; // "Сворачиваем дерево оглавления"
: "Спускаемся в дереве на уровень вниз"
cc:TreeExpand
"Стрелка вниз"
; // "Спускаемся в дереве на уровень вниз"
: "При помощи Shift выделяем элементов" IN aNum
VAR l_Finish
focused:control:push pop:Lister:GetCurrent aNum + >>> l_Finish // Подсчитываем конец выделения
l_Finish focused:control:push pop:Lister:SelectWithShift // Ну и выделяем
; // "При помощи Shift выделяем элементов"
: "Проверить, что медаль полностью видна" STRING IN aReminder
: "Получить окно по координатам и проверить, что оно совпадает с медалью"
"Найти контрол по дескриптору в стеке {(WindowFromPoint)}" pop:component:Name РАВНО aReminder ASSERT
; // "Получить окно по координатам и проверить, что оно совпадает с медалью"
INTEGER VAR m_left 0 >>> m_left
INTEGER VAR m_top 0 >>> m_top
INTEGER VAR m_height
INTEGER VAR m_width
INTEGER VAR m_height_half
INTEGER VAR m_width_half
OBJECT VAR l_Reminder
aReminder byname:control:push >>> l_Reminder
//0 0 aReminder byname:control:push pop:control:ClientToScreen =: m_top =: m_left
"Привести координаты {(@ m_left @ m_top)} для контрола {(l_Reminder)} к экранным"
//aReminder byname:control:push pop:control:GetHeight =: m_height
//aReminder byname:control:push pop:control:GetWidth =: m_width
"Померить высоту {(l_Reminder)}" >>> m_height
"Померить ширину {(l_Reminder)}" >>> m_width
m_height 2/ =: m_height_half
m_width 2/ =: m_width_half
INTEGER VAR X
INTEGER VAR Y
m_left =: X
m_top m_height_half + =: Y
X Y "Получить окно по координатам и проверить, что оно совпадает с медалью"
m_left m_width_half + =: X
m_top =: Y
X Y "Получить окно по координатам и проверить, что оно совпадает с медалью"
m_left m_width + 4 - =: X
m_top m_height_half + =: Y
X Y "Получить окно по координатам и проверить, что оно совпадает с медалью"
m_left m_width_half + =: X
m_top m_height + 4 - =: Y
X Y "Получить окно по координатам и проверить, что оно совпадает с медалью"
; // "Проверить, что медаль полностью видна"
: "Построить список ссылок на фрагмент и сравнить его с эталоном"
оп::Выделенные_элементы_Ссылки_на_фрагмент
//оп::Синхронный_просмотр_Список_ссылок_на_документ
true тип_формы::lftRCToPart контрол::tvList форма::List TryFocusOnForm 'Не удалось поставить фокус в список ссылок на фрагмент' ASSERTS
"Сравнить список документов типа {(тип_формы::lftRCToPart)} с эталоном"
//"Сравнить список документов с эталоном"
; // "Построить список ссылок на фрагмент и сравнить его с эталоном"
: "Сравнить историю навигации с эталоном"
VAR l_Index
0 =: l_Index
vcm:History:GetBackCount LOOP (
l_Index vcm:History:GetBackItem .
++! l_Index
)
; // "Сравнить историю навигации с эталоном"
: "Сравнить историю навигации на кнопке Вперед с эталоном"
VAR l_Index
0 =: l_Index
vcm:History:GetForwardCount LOOP (
l_Index vcm:History:GetForwardItem .
++! l_Index
)
; // "Сравнить историю навигации на кнопке Вперед с эталоном"
OBJECT FUNCTION "Найти саб-панель"
контрол::SubPanel focused:control:push
pop:control:GetAnotherParentForm
pop:control:FindControlByName =: Result
Result pop:object:IsNil ! 'Не нашли саб-панель' ASSERTS
;
WordAlias "Найти панель меток" "Найти саб-панель"
: "Установить указатель мыши на точку для вызова КМ для панели меток рядом с редактором" INTEGER IN X0 INTEGER IN Y0
VAR x
VAR y
focused:control:push
pop:editor:CursorCoordsToScreen >>> y >>> x
x X0 + >>> x
y Y0 + >>> y
x y "Найти панель меток" pop:control:ScreenToClient
;
: "Сравнить меню с эталоном расширенно" OBJECT IN aMenu BOOLEAN IN anItemName
FORWARD DoItem
INTEGER VAR l_Indent
: DoItem OBJECT IN anItem
VAR l_Index
0 =: l_Index
anItem menuitem:GetCount LOOP (
VAR l_Item
l_Index anItem menuitem:GetItem =: l_Item
l_Item menuitem:IsVisible ? (
[[
l_Indent #32 char:Dupe
anItemName ? ( 'name' l_Item pop:object:GetStrProp ':' Cat )
l_Item menuitem:GetCaption
l_Item menuitem:IsEnabled ! ? (
' [Запрещён]'
' ' l_Item pop:component:Name
)
]] strings:Cat .
++! l_Indent
TRY
l_Item DoItem
FINALLY
--! l_Indent
END // TRY..FINALLY
) // l_Item menuitem:IsVisible
++! l_Index
) // anItem menuitem:GetCount LOOP
; // DoItem
0 =: l_Indent
aMenu DoItem
; // "Сравнить меню с эталоном"
: "Сравнить меню с эталоном" OBJECT IN aMenu
"Сравнить меню {(aMenu)} с эталоном расширенно {(false)}"
;
: "Сравнить контекстное меню для контрола для точки с эталоном" OBJECT IN aControl INTEGER IN anX INTEGER IN anY
OBJECT VAR l_Menu
anX anY aControl pop:control:GetPopupMenu >>> l_Menu
( l_Menu pop:object:IsNil ) IF
'У контрола нет контекстного меню' .
ELSE
l_Menu "Сравнить меню с эталоном"
ENDIF
; // "Сравнить контекстное меню для контрола для точки с эталоном"
: "Сравнить контекстное меню для точки с эталоном" INTEGER IN anX INTEGER IN anY
"Сравнить контекстное меню для контрола {(focused:control:push)} для точки {(anX anY)} с эталоном"
;
: "Сравнить контекстное меню с эталоном"
"Сравнить контекстное меню для точки {(0 0)} с эталоном"
; // "Сравнить контекстное меню с эталоном"
: "Сравнить контекстное меню контрола с эталоном расширенно" OBJECT IN aControl
OBJECT VAR l_Menu
0 0 aControl pop:control:GetPopupMenu >>> l_Menu
"Сравнить меню {(l_Menu)} с эталоном расширенно {(true)}"
; // "Сравнить контекстное меню с эталоном"
: "Сравнить контекстное меню с эталоном расширенно"
"Сравнить контекстное меню {(focused:control:push)} контрола с эталоном расширенно"
; // "Сравнить контекстное меню с эталоном"
: "Проверить, что в контекстном меню нет операции Сравнение редакций"
"Сравнить контекстное меню с эталоном"
; // "Проверить, что в контекстном меню нет операции Сравнение редакций"
: "Двойной клик"
2 раза "Клик левой кнопкой мыши"
; // "Двойной клик"
: "Сравнить контекстное меню контрола с эталоном" STRING IN aControl
FORWARD DoItem
INTEGER VAR l_Indent
: DoItem OBJECT IN anItem
VAR l_Index
0 =: l_Index
anItem menuitem:GetCount LOOP (
VAR l_Item
l_Index anItem menuitem:GetItem =: l_Item
l_Item menuitem:IsVisible ? (
[[
l_Indent #32 char:Dupe
l_Item menuitem:GetCaption
]] strings:Cat .
++! l_Indent
TRY
l_Item DoItem
FINALLY
--! l_Indent
END // TRY..FINALLY
) // l_Item menuitem:IsVisible
++! l_Index
) // anItem menuitem:GetCount LOOP
; // DoItem
0 =: l_Indent
0 0 aControl byname:control:push pop:control:GetPopupMenu DoItem
; // "Сравнить контекстное меню контрола с эталоном"
WORDWORKER "Временно выключен"
'Временно выключен' ToDo
; // "Временно выключен"
: "Открыть журнал работы"
BOOLEAN VAR l_Found
true ANYUSERTYPE контрол::JournalTree форма::WorkJournal TryFocusOnForm =: l_Found
l_Found ! IF
моп::Журнал_работы_OpenJournal
"Перевести фокус в {(контрол::JournalTree)} на форме {(форма::WorkJournal)}"
"Дождаться переключения вкладок"
ENDIF
; // "Открыть журнал работы"
: "Закрыть журнал работы"
BOOLEAN VAR l_Found
true ANYUSERTYPE контрол::JournalTree форма::WorkJournal TryFocusOnForm =: l_Found
l_Found IF
моп::Журнал_работы_OpenJournal
"Дождаться переключения вкладок"
ENDIF
; // "Закрыть журнал работы"
: "Очистить журнал работы"
"Открыть журнал работы"
оп::Журнал_Очистить
"Закрыть журнал работы"
; // "Очистить журнал работы"
: "Перевести фокус в дерево медицинских терминов"
"Перевести фокус в {('WordsTree')} на форме {(форма::CommonDiction)}"
OnTest
;
: "Перевести фокус в последние открытые документы"
false ANYUSERTYPE контрол::tvLastOpenDocs форма::MainMenuNew TryFocusOnForm
'Не удалось перевести фокус в последние открытые документы' ASSERTS
;
: "в поле 'Орган/Источник' ОИЗ ввести" STRING IN aStr
"Убедиться, что фокус в редакторе"
'AT_SOURCE_REVIEW' aStr focused:control:push pop:QueryCard:SetAttribute
;
: "в поле 'Дата принятия С' ввести" STRING IN aStr
"Убедиться, что фокус в редакторе"
'AT_PUBLISHING_DATE' aStr focused:control:push pop:QueryCard:SetAttribute
;
: "в поле 'Дата принятия ПО' ввести" STRING IN aStr
"Убедиться, что фокус в редакторе"
'AT_PUBLISHING_DATE#2' aStr focused:control:push pop:QueryCard:SetAttribute
;
: "Сохранить выделенный текст в формате" STRING INTEGER IN aFormat
STRING VAR "Выделенный текст"
"Убедиться, что фокус в редакторе"
aFormat focused:control:push pop:editor:GetSelectionText =: "Выделенный текст"
;
: "в поле 'Тип' ввести с операцией" STRING IN aStr INTEGER IN aL
"Убедиться, что фокус в редакторе"
aL 'AT_TYPE' aStr focused:control:push pop:QueryCard:Attribute:SetWithLogicOperation
;
CONST cPagesNotFound 'Не нашли область вкладок'
OBJECT FUNCTION "Найти область вкладок"
: Действия OBJECT IN Контрол
( Контрол ЯВЛЯЕТСЯ class::TnscFormsPageControl )
И ( Контрол pop:component:Name РАВНО контрол::ChildZone )
И ( Контрол pop:control:Visible )
И ( Контрол pop:control:GetParent pop:control:Visible )
И ( Контрол pop:control:GetParent pop:control:GetParent pop:control:Visible )
// И ( Контрол pop:control:GetHeight БОЛЬШЕ 0 )
// И ( Контрол pop:control:GetParent pop:control:GetHeight БОЛЬШЕ 0 )
? (
Контрол =: Result
"Закончить перебор контролов"
)
;
nil =: Result
2 раза "Дождаться переключения вкладок"
focused:control:push pop:control:GetTopParentForm "выполнить для всех контролов" Действия
Result pop:object:IsNil ? (
2 раза "Дождаться переключения вкладок"
focused:control:push pop:control:GetTopParentForm "выполнить для всех контролов" Действия
)
Result pop:object:IsNil ! cPagesNotFound ASSERTS
;
/* "Дождаться переключения вкладок"
OBJECT VAR "Нужная форма"
OBJECT VAR "Форма толкового словаря"
focused:control:push 2 раза "Получить родительскую форму" =: "Форма толкового словаря"
// "Форма толкового словаря" .
"Контрол {("Форма толкового словаря")} является формой с именем {(форма::DictionContainer)}?" IF
// "Форма толкового словаря" =: "Нужная форма"
"Найти контрол {(контрол::ChildZone)} на форме {("Форма толкового словаря")}" =: "Нужная форма"
"Нужная форма" pop:object:IsNil ! 'Не нашли ChildZone в DictionContainer' ASSERTS
// "Нужная форма" .
0 "Нужная форма" pop:control:GetControl =: "Нужная форма"
"Нужная форма" pop:object:IsNil ! 'Не нашли вложенный контрол в ChildZone в DictionContainer' ASSERTS
// "Нужная форма" .
ELSE
"Найти главное окно" =: "Нужная форма"
ENDIF
контрол::ChildZone "Нужная форма" pop:control:FindControlByName =: Result
Result pop:object:IsNil ! 'Не нашли область вкладок' ASSERTS
;*/
OBJECT FUNCTION "Найти окно атрибутов"
"Найти окно по имени {('cfAttributeSelect')}" =: Result
;
: "Открыть по внешнему номеру" IN aNum
aNum 100000 - =: aNum
"Открываем {(aNum)}"
;
STRING FUNCTION CutNumbers STRING W-STRING IN "Текущая строка"
'' =: Result
CONST "Цифры" '1234567890'
CHAR VAR "Символ"
ПОКА ( "Текущая строка" WString:IsNil ! ) (
WString:[]++! "Текущая строка"
=: "Символ"
"Цифры" "Символ" WString:HasAnyOf ? BREAK
Result "Символ" char:ToString Cat =: Result
)
;
: "Поставить фокус в левую половину ААК"
"Перевести фокус в {(контрол::Text)} на форме {(форма::Text)} типа {(тип_формы::dftAACLeft)}"
;
: "Поставить фокус в правую половину ААК"
"Перевести фокус в {(контрол::Text)} на форме {(форма::Text)} типа {(тип_формы::dftAACRight)}"
;
WordAlias "Перевести фокус в левую половину ААК" "Поставить фокус в левую половину ААК"
WordAlias "Перевести фокус в правую половину ААК" "Поставить фокус в правую половину ААК"
: "См. ежедневные поступления новых документов в разделе Новости онлайн"
ОМ
OBJECT VAR "Рубрикатор"
"Перейти по ссылке на {('Новые поступления')} в области {(контрол::tvLawNews)}"
focused:control:push pop:control:GetAnotherParentForm =: "Рубрикатор"
'NewDocLabel' "Рубрикатор" pop:control:FindControlByName pop:control:SetFocus ASSERT
;
: "Сравнить оценку документа с эталоном"
DocumentText document:LikeState .
;
: "Открываем Справку из меню"
оп::Документ_Справка_к_документу
"Дождаться переключения вкладок"
;
CONST ActivePageProperty 'ActivePage'
: "Сравнить с эталоном имя активной вкладки"
OBJECT VAR "Область вкладок"
"Найти область вкладок" =: "Область вкладок"
"Область вкладок" pop:object:ClassName .
"Напечатать иерархию вложенности контролов {("Область вкладок")}"
ActivePageProperty "Область вкладок" pop:object:GetObjProp pop:control:Caption .
; // "Сравнить с эталоном имя активной вкладки"
: "В области вкладок перейти на" STRING IN aTab
OBJECT VAR PageControl
OBJECT VAR Page
INTEGER VAR i
"Найти область вкладок" =: PageControl
ActivePageProperty PageControl pop:object:GetObjProp pop:control:Caption РАВНО aTab ? ( EXIT )
0 >>> i
@ ( true ) WHILE (
i PageControl pop:PageControl:PageByIndex >>> Page
Page pop:control:Caption aTab == ? (
i 'TabIndex' PageControl pop:object:SetOrdProp
"Дождаться переключения вкладок"
ActivePageProperty PageControl pop:object:GetObjProp pop:control:Caption "НЕ РАВНО" aTab ? ( 'Не получилось переключить вкладку' ASSERTS )
EXIT
)
i 1 + >>> i
i 20 > ? ( 'Что-то многовато вкладок' RAISE )
)
;
: "Перевести фокус в справку"
"Перевести фокус в {(DocumentText)} на форме {(форма::Text)} типа {(dftRelatedDoc)}"
;
: "Сравнить первого ребёнка дерева с эталоном" STRING IN aList
aList byname:control:push tree:CurrentNode nil ?!= IF
ПОКА ( aList byname:control:push tree:CurrentNode:IsExpanded )
BEGIN
"Стрелка вниз"
END
aList byname:control:push tree:CurrentNode Node:Text .
ELSE
'Журнал работы пуст' .
ENDIF
;
: "Открыть документ через диалог ввода номера" STRING IN aDoc
@ ( "Нажать {('Alt+N')}" ) MODAL ( "Ввести {(aDoc)}" "Нажать {('Enter')}" )
;
: "Получить заголовок контрола" OBJECT IN aControl
"Дождаться переключения вкладок"
aControl pop:control:Caption .
;
: "Получить заголовок текущего контрола"
"Получить заголовок контрола {(focused:control:push)}"
;
: "Заголовок текущего контрола"
"Контрол в фокусе"pop:control:Caption
; // "Заголовок текущего контрола"
CONST DocInfoTabCaption 'Информация о документе'
: "Открыть информацию о документе"
OBJECT VAR "Область вкладок"
"Найти область вкладок" =: "Область вкладок"
( ActivePageProperty "Область вкладок" pop:object:GetObjProp pop:control:Caption "НЕ РАВНО" DocInfoTabCaption ) IF
оп::Документ_Информация_о_документе
ENDIF
;
: "Закрыть информацию о документе"
OBJECT VAR "Область вкладок"
"Найти область вкладок" =: "Область вкладок"
ActivePageProperty "Область вкладок" pop:object:GetObjProp pop:control:Caption РАВНО DocInfoTabCaption IF
оп::Документ_Информация_о_документе
ENDIF
;
WordAlias "Получить оценку документа" "Сравнить оценку документа с эталоном"
: "Проверить, что скроллера в левой части ААК нет"
OBJECT VAR "Текущая форма"
OBJECT VAR "Скроллер"
"Найти окно {(форма::AACContainer)} по имени" =: "Текущая форма"
"Найти контрол {(контрол::scrLeft)} на форме {("Текущая форма")}" =: "Скроллер"
"Скроллер" pop:control:Visible ! 'Скроллер виден, хотя не должен.' ASSERTS
OBJECT VAR "Текущий контрол"
"Найти контрол {(контрол::pnLeftEx)} на форме {("Текущая форма")}" =: "Текущий контрол"
"Текущий контрол" pop:control:VScrollerVisible ! 'Внутренний скроллер виден, хотя не должен.' ASSERTS
;
: "Выставить форме размеры и " INTEGER IN formW INTEGER IN formH OBJECT IN aProc
"Найти главное окно" "Уменьшить окно"
formW "Найти главное окно" "Установить ширину"
formH "Найти главное окно" "Установить высоту"
TRY
aProc DO
FINALLY
"Найти главное окно" "Развернуть окно"
END
;
OBJECT FUNCTION "Найти сплиттер в ААК"
OBJECT VAR "Текущая форма"
"Найти окно {(форма::AACContainer)} по имени" =: "Текущая форма"
"Текущая форма" pop:object:IsNil ! 'Форма ААК-Текст не найдена' ASSERTS
"Найти контрол {(контрол::pnLeftEx)} на форме {("Текущая форма")}" =: Result
Result pop:object:IsNil ! 'Сплиттер в ААК-Текст не найден' ASSERTS
;
: "Выставить форме размеры ширину левой части ААК в и " INTEGER IN formW INTEGER IN formH INTEGER IN aW OBJECT IN aProc
: Действия
OBJECT VAR "Сплиттер"
"Найти сплиттер в ААК" =: "Сплиттер"
INTEGER VAR width_left_aak
"Сплиттер" "Померить ширину" =: width_left_aak
aW "Сплиттер" "Установить ширину"
TRY
aProc DO
FINALLY
width_left_aak "Сплиттер" "Установить ширину"
END
; // Действия
"Выставить форме размеры {(formW formH)} и {(@ Действия)}"
;
: "Сравнить область вкладок с эталоном"
: Действия
"Найти область вкладок" pop:PageControl:GetAllPageCaptions .
;
"Дождаться переключения вкладок"
//"Выполнить {(@ Действия)} обработав исключение {(cPagesNotFound)}"
"Выполнить {(@ Действия)} и если было исключение, то выполнить {(@ NOP)}"
;
: "Сравнить список последних открытых документов с эталоном"
"Перевести фокус в последние открытые документы"
"Сравнить текущий список с эталоном"
;
: "Проверить иерархию вложенности текущего контрола"
focused:control:push "Напечатать иерархию вложенности контролов"
;
WORDWORKER "начинается с" W-STRING IN aStr
WordToWork DO aStr WString:Starts
; // "начинается с"
: "Получить пути к старой и новой базам" STRING IN aNewBase
STRING VAR "Имя входного файла"
'C:\Program Files\Garant-Server\garant.ini' =: "Имя входного файла"
"Имя входного файла" sysutils:FileExists ! ? (
'C:\Program Files (x86)\Garant-Server\garant.ini' =: "Имя входного файла"
)
STRING VAR "Старая база"
'' =: "Старая база"
STRING VAR "Новая база"
'' =: "Новая база"
INTEGER VAR l_BaseNum
0 =: l_BaseNum
: "Обработать строку входного файла" W-STRING IN "Строка считанная из входного файла"
WORDWORKER "Строка начинается с"
VAR l_Begin
WordToWork DO =: l_Begin
"Строка считанная из входного файла" "начинается с" l_Begin
; // "Строка начинается с"
STRING VAR l_String
"Строка считанная из входного файла" WString:ToString =: l_String
RULES
( "Строка начинается с" '-GCMActiveDataPath=' )
(
'=' string:SplitTo! l_String
//=: l_String
DROP
l_String StrToInt =: l_BaseNum
)
( "Строка начинается с" ( [[ '-GCMDataPath' l_BaseNum IntToStr '=' ]] strings:Cat ) )
(
'=' string:SplitTo! l_String
DROP
l_String =: "Старая база"
'\' string:RSplitTo! l_String
'' == IF
l_String =: "Старая база"
'\' string:RSplitTo! l_String
DROP
ENDIF
[[ l_String '\' aNewBase ]] strings:Cat =: l_String
l_String =: "Новая база"
)
; // RULES
; // "Обработать строку входного файла"
FILE VAR "Входной файл"
"Имя входного файла" file:OpenRead =: "Входной файл"
TRY
"Входной файл" file:ReadLines "Обработать строку входного файла"
FINALLY
nil =: "Входной файл"
END
"Старая база"
"Новая база"
;
: "Выполнить с базой" OBJECT IN aProc STRING IN aBase
STRING VAR "Предыдущая база"
STRING VAR "Новая база"
"Получить пути к старой и новой базам {(aBase)}"
=: "Новая база"
=: "Предыдущая база"
"Новая база" sysutils:DirectoryExists
[[ 'Директория базы не существует: ' "Новая база" ]] strings:Cat
ASSERTS
[[ "Новая база" '\' 'data.ndt' ]] strings:Cat sysutils:FileExists
[[ 'Похоже, что база не существует: ' "Новая база" ]] strings:Cat
ASSERTS
"Переключить базу на {("Новая база")}"
TRY
//"Новая база" .
//"Предыдущая база" .
aProc DO
FINALLY
"Переключить базу на {("Предыдущая база")}"
END
;
: "Сравнить информацию о базе с эталоном"
"Сравнить дату базы с эталоном"
"Сравнить имя комплекта с эталоном"
"Сравнить владельца комплекта с эталоном"
;
: "Кликнуть по скроллеру в левой половине ААК"
OBJECT VAR "Текущая форма"
OBJECT VAR "Скроллер"
"Найти окно {(форма::AACContainer)} по имени" =: "Текущая форма"
"Найти контрол {(контрол::scrLeft)} на форме {("Текущая форма")}" =: "Скроллер"
"Скроллер" "Кликнуть"
;
: "Проверить, что в левой половине ААК скроллер есть"
OBJECT VAR "Текущая форма"
OBJECT VAR "Скроллер"
"Найти окно {(форма::AACContainer)} по имени" =: "Текущая форма"
"Найти контрол {(контрол::scrLeft)} на форме {("Текущая форма")}" =: "Скроллер"
"Скроллер" pop:control:Visible 'Скроллер не виден, хотя должен быть видимым.' ASSERTS
;
: "Сравнить текст обоих частей ААК с эталоном"
"Перевести фокус в левую половину ААК"
"Выделить всё"
"Сравнить выделенный текст текущего редактора с эталоном"
'-------------------------------------------------------' .
"Перевести фокус в правую половину ААК"
"Выделить всё"
"Сравнить выделенный текст текущего редактора с эталоном"
;
FORWARD "Проверить видимость пунктов меню связанных с комментариями"
FORWARD "Проверить видимость пунктов меню связанных с сортировкой списка"
: "Сравнить с эталоном пункт главного меню" STRING IN aItem
aItem РАВНО 'Документы' ? (
"Проверить видимость пунктов меню связанных с комментариями"
"Проверить видимость пунктов меню связанных с сортировкой списка"
)
aItem "Найти главное окно" pop:form:FindMenuItem "Сравнить меню с эталоном"
;
: "Переключиться на вкладку" STRING IN aName
OBJECT VAR l_PageControl
OBJECT VAR "Закладка"
INTEGER VAR Ind
INTEGER VAR X
INTEGER VAR Y
"Найти область вкладок" >>> l_PageControl
aName l_PageControl pop:PageControl:FindPageByCaption =: Ind
Ind l_PageControl pop:PageControl:PageByIndex =: "Закладка"
"Закладка" pop:object:IsNil !
[[ 'Не нашли вкладку ' aName ]] strings:Cat
ASSERTS
"Запомнить позицию мыши"
TRY
20 >>> X
"Померить высоту {(l_PageControl)}" >>> Y
Y 10 - >>> Y
"Установить курсор мыши по координатам {(X Y)} относительно контрола {("Закладка")}"
"Клик левой кнопкой мыши"
FINALLY
"Восстановить позицию мыши"
END
OnTest
// описание работы слова [$424387103]
; // "Переключиться на вкладку"
: "Поставить фокус в левую половину ААК-Содержания"
true тип_формы::dftAACContentsLeft контрол::Text форма::Text TryFocusOnForm ASSERT
;
: "Поставить фокус в правую половину ААК-Содержания"
true тип_формы::dftAACContentsRight контрол::Text форма::Text TryFocusOnForm ASSERT
;
: "Установить фокус во вкладку Фильтры"
false ANYUSERTYPE контрол::FiltersList форма::Filters TryFocusOnForm
'Не удалось установить фокус во вкладку Фильтры' ASSERTS
;
OBJECT FUNCTION "Найти форму ААК"
"Найти окно по имени {(форма::AACContainer)}" =: Result
Result pop:object:IsNil ! 'Форма ААК не найдена' ASSERTS
;
OBJECT FUNCTION "Найти плашку в ААК"
контрол::edWriteToUs "Найти форму ААК" pop:control:FindControlByName =: Result
Result pop:object:IsNil ! 'Плашка не найдена' ASSERTS
;
: "Перейти по ссылке 'Напишите нам' в ААК"
"Найти плашку в ААК" pop:editor:NextHyperlink
"Найти плашку в ААК" pop:editor:JumpToHyperlink
;
: "Сравнить иконку элемента в списке с эталоном" INTEGER IN aItem STRING IN aList
aItem aList byname:control:push tree:GetItemImageIndex .
;
: "Получить список в массив" IN aMassive
INTERFACE VAR l_Node
INTERFACE VAR l_Node_next
BOOLEAN VAR Сделано
НЕТ >>> Сделано
ПОКА ( НЕ Сделано )
BEGIN
контрол::tvList:push tree:CurrentNode =: l_Node
l_Node Node:Text >>>[] aMassive
"Стрелка вниз"
контрол::tvList:push tree:CurrentNode =: l_Node_next
( l_Node_next Node:Text ) РАВНО ( l_Node Node:Text ) IF
ДА >>> Сделано
ENDIF
END
;
: "Проверить, что массив совпадает с массивом" IN aMass1 IN aMass2
INTEGER VAR item
0 >>> item
( aMass1 array:Count aMass2 "НЕ РАВНО" array:Count ) IF
false 'Массивы имеют разный размер' ASSERTS
ELSE
0 aMass1 array:Count FOR
( item aMass1 [i] ) РАВНО ( item aMass2 [i] ) IF
++! item
ELSE
false 'Массивы не совпадают' ASSERTS
ENDIF
NEXT
ENDIF
;
: "Получить имя вкладки с индексом" INTEGER IN aItem
aItem "Найти область вкладок" pop:PageControl:PageCaptionByIndex .
;
: "Построить список по первой ветке рубрикатора с историей"
"Меню во вкладке"
"Свернуть текущее дерево"
"Переместиться в начало дерева"
"Стрелка вниз"
"Спускаемся в дереве на уровень вниз"
"Нажать {('Enter')}"
"Установить фокус в меню во вкладке"
"Стрелка вниз"
"Нажать {('Enter')}"
"Установить фокус в меню во вкладке"
;
: "Получить имя текущего элемента дерева" STRING IN aControl
INTERFACE VAR l_Node
aControl byname:control:push tree:CurrentNode =: l_Node
l_Node Node:Text .
;
: "Сравнить контекстное меню для контрола с эталоном" OBJECT IN aControl
"Сравнить контекстное меню для контрола {(aControl)} для точки {(0 0)} с эталоном"
;
: "Вызвать из главного меню" STRING IN aItem
aItem "Найти главное окно" pop:form:FindMenuItem menuitem:Click
"Дать системе перерисоваться"
;
: "Перевести фокус в поле 'Слова в тексте' в ППР"
"Убедиться, что фокус в редакторе"
'AT_TEXT_BODY' focused:control:push pop:QueryCard:Attribute:SetFocus
;
: "Перевести фокус в поле 'Тип' в ППР"
"Убедиться, что фокус в редакторе"
'AT_TYPE' focused:control:push pop:QueryCard:Attribute:SetFocus
;
: "Перевести фокус в поле 'Номер' в ППР"
"Убедиться, что фокус в редакторе"
'AT_REG_NUM' focused:control:push pop:QueryCard:Attribute:SetFocus
;
: "Перевести фокус в поле 'Дата принятия' в ППР"
"Убедиться, что фокус в редакторе"
'AT_PUBLISHING_DATE' focused:control:push pop:QueryCard:Attribute:SetFocus
;
: "Перевести фокус в поле 'Вид правовой информации' в ППР"
"Убедиться, что фокус в редакторе"
'AT_PREFIX' focused:control:push pop:QueryCard:Attribute:SetFocus
;
: "Построить список по первой ветке рубрикатора"
"Меню во вкладке"
"Свернуть текущее дерево"
"Переместиться в начало дерева"
"Стрелка вниз"
2 раза "Спускаемся в дереве на уровень вниз"
"Нажать {('Enter')}"
"Закрыть меню во вкладке"
"Перевести фокус в список"
;
: "Пролистать список поэлементно вниз"
INTERFACE VAR l_Node
INTERFACE VAR l_Node_next
BOOLEAN VAR Сделано
НЕТ >>> Сделано
ПОКА ( НЕ Сделано )
BEGIN
контрол::tvList:push tree:CurrentNode =: l_Node
"Стрелка вниз"
контрол::tvList:push tree:CurrentNode =: l_Node_next
( l_Node_next Node:Text ) РАВНО ( l_Node Node:Text ) IF
ДА >>> Сделано
ENDIF
END
;
: "Получить размеры и координаты контрола" OBJECT IN aControl
[[ 'Left = ' aControl "Померить отступ слева" IntToStr ]] strings:Cat .
[[ 'Top = ' aControl "Померить отступ сверху" IntToStr ]] strings:Cat .
[[ 'Width = ' aControl "Померить ширину" IntToStr ]] strings:Cat .
[[ 'Height = ' aControl "Померить высоту" IntToStr ]] strings:Cat .
; // "Получить размеры и координаты контрола"
: "Сравнить с эталоном размеры контрола" OBJECT IN aControl
[[ 'Width = ' aControl "Померить ширину" IntToStr ]] strings:Cat .
[[ 'Height = ' aControl "Померить высоту" IntToStr ]] strings:Cat .
; // "Сравнить с эталоном размеры контрола"
OBJECT FUNCTION "Элемент статусбара окна" INTEGER IN aItem OBJECT IN aWindow
OBJECT VAR "Статусбар"
контрол::StatusBar aWindow pop:control:FindControlByName =: "Статусбар"
aItem "Статусбар" StatusBar:OrderedControl =: Result
Result pop:object:IsNil ! 'Не удалось найти на статусбаре этот элемент ' ASSERTS
;
: "Количество элементов статусбара окна" OBJECT IN aWindow
OBJECT VAR "Статусбар"
контрол::StatusBar aWindow pop:control:FindControlByName =: "Статусбар"
"Статусбар" pop:object:IsNil ! 'Не удалось найти на статусбаре этот элемент ' ASSERTS
"Статусбар" pop:control:ControlCount
; // "Количество элементов статусбара"
: "Сравнить статусбар окна с эталоном" OBJECT IN aWindow
OBJECT VAR "Панель статусбара"
CONST cSeparator 'Загрузка документа'
STRING VAR str1
STRING VAR str2
INTEGER VAR item
0 >>> item
"Дождаться переключения вкладок"
"Количество элементов статусбара окна {(aWindow)}" 1 - LOOP (
"Элемент {(item)} статусбара окна {(aWindow)}" =: "Панель статусбара"
"Панель статусбара" pop:control:Visible IF
"Панель статусбара" pop:control:Caption =: str1
( str1 "НЕ РАВНО" '' ) IF
str1 cSeparator string:Split =: str2 =: str1
( str2 "НЕ РАВНО" '' ) IF
[[ str2 '[' '' string:Replace ']' '' string:Replace >>> str2 ]]
str2 sysutils:ExtractFileName >>> str2
[[ str1 cSeparator ' ' str2 ]] strings:Cat >>> str1
ENDIF
"Панель статусбара" pop:control:Enabled IF
str1 .
ELSE
str1 ' [Запрещён]' Cat .
ENDIF
ENDIF
ENDIF
++! item )
; // "Сравнить статусбар окна с эталоном"
: "Сравнить статусбар с эталоном"
"Сравнить статусбар окна {( "Найти главное окно" )} с эталоном"
; // "Сравнить статусбар с эталоном"
: "Установить окно оболочки на передний план"
'ГАРАНТ аэро' FindWindowByCaption SetForegroundWindow
;
: "Сравнить развёрнутый список с эталоном" STRING IN aList
"Развернуть текущее дерево"
focused:control:push pop:object:ClassName 'TvtLister' SameText IF
aList byname:control:push pop:control:Caption .
ELSE
INTERFACE VAR l_Node
INTERFACE VAR l_Node_next
BOOLEAN VAR Сделано
НЕТ >>> Сделано
ПОКА ( НЕ Сделано )
BEGIN
aList byname:control:push tree:CurrentNode =: l_Node
l_Node Node:Text .
"Стрелка вниз"
aList byname:control:push tree:CurrentNode =: l_Node_next
( l_Node_next Node:Text ) РАВНО ( l_Node Node:Text ) IF
ДА >>> Сделано
ENDIF
END
ENDIF
; // "Сравнить развёрнутый список с эталоном"
: "Сравнить дерево атрибутов модального окна с эталоном"
"Обработать Enter модально" ( "Сравнить развёрнутый список {(контрол::AttributeTree)} с эталоном" )
;
: "Перенести элемент оглавления в текст" INTEGER IN aItem
OBJECT VAR "Элемент оглавления"
INTEGER VAR i_left
INTEGER VAR i_top
INTEGER VAR i_width
"Сделать оглавление неплавающим"
"Открыть структуру документа"
"Проверить, что удалось перевести фокус в оглавление"
focused:control:push =: "Элемент оглавления"
aItem контрол::ContentsTree:push tree:GetItem:Left =: i_left
aItem контрол::ContentsTree:push tree:GetItem:Top =: i_top
aItem контрол::ContentsTree:push tree:GetItem:Width =: i_width
i_top 5 + =: i_top
i_left 25 + =: i_left
i_width 2 * =: i_width
"Запомнить позицию мыши"
//i_left i_top "Элемент оглавления" pop:control:ClientToScreen mouse:SetCursorPosition
"Установить курсор мыши по координатам {(i_left i_top)} относительно контрола {("Элемент оглавления")}"
TRY
THREAD ( 1500 SLEEP
//i_width i_top "Элемент оглавления" pop:control:ClientToScreen mouse:SetCursorPosition
"Установить курсор мыши по координатам {(i_width i_top)} относительно контрола {("Элемент оглавления")}"
"Дать системе перерисоваться"
"Отпустить левую кнопку мыши"
"Дать системе перерисоваться" )
"Зажать левую кнопку мыши"
FINALLY
"Восстановить позицию мыши"
END
; // "Перенести элемент оглавления в текст"
: "Переключиться на вкладку в БП" STRING IN aType
БП
true aType focused:control:push pop:control:GetParentForm pop:control:FindVGControlByName vg:control:SetIsChecked
;
: "Вызвать диалог печати по CTRL-P, в поле 'Номера страниц' ввести и нажать 'Печать'" STRING IN aSym
: Действия
"Перевести фокус в {(контрол::edPrintInterval)} на форме {(форма::PrintDialog)}"
"Ввести {(aSym)}"
оп::Завершение_работы_Ок
"Дать системе перерисоваться"
;
@ "Ctrl-P" MODAL ( Действия )
;
: "Вызвать диалог печати по CTRL-P, в поле 'Сделать копий' ввести и нажать 'Печать'" STRING IN aSym
: Действия
"Перевести фокус в {(контрол::edCopyCount)} на форме {(форма::PrintDialog)}"
"Ввести {(aSym)}"
оп::Завершение_работы_Ок
"Дать системе перерисоваться"
;
@ "Ctrl-P" MODAL ( Действия )
;
: "Проверить, что в главном окне нет скроллера"
true "Найти основное меню" pop:control:VScrollerVisible ! 'Скроллер виден, хотя не должен' ASSERTS
;
: "Проверить, что в главном окне есть скроллер"
true "Найти основное меню" pop:control:VScrollerVisible 'Скроллер не виден, хотя должен' ASSERTS
;
: "Найти максимальное значение в массиве" IN aMass
INTEGER VAR it
INTEGER VAR max
0 >>> it
0 aMass [i] =: max
0 aMass array:Count FOR
it aMass [i] max > IF
it aMass [i] =: max
ENDIF
++! it
NEXT
max
; // "Найти максимальное значение в массиве"
: "Найти минимальное значение в массиве" IN aMass
INTEGER VAR it
INTEGER VAR min
0 >>> it
0 aMass [i] =: min
0 aMass array:Count FOR
it aMass [i] min < IF
it aMass [i] =: min
ENDIF
++! it
NEXT
min
; // "Найти минимальное значение в массиве"
: "Найти среднее значение в массиве" IN aMass
INTEGER VAR sum
INTEGER VAR aver
0 @ + ITERATE aMass =: sum
sum aMass array:Count / =: aver
aver
; // "Найти среднее значение в массиве"
: "Получить маскимальное, минимальное и среднее значения для массива" IN aMass
INTEGER VAR max
INTEGER VAR min
INTEGER VAR aver
"Найти максимальное значение в массиве {(aMass)}" =: max
"Найти минимальное значение в массиве {(aMass)}" =: min
"Найти среднее значение в массиве {(aMass)}" =: aver
[[ 'Max = ' max IntToStr ]] strings:Cat .
[[ 'Min = ' min IntToStr ]] strings:Cat .
[[ 'Average = ' aver IntToStr ]] strings:Cat .
; // "Получить маскимальное, минимальное и среднее значения для массива"
: "Установить фокус в контекстный фильтр вкладки Меню"
"Перевести фокус в {(контрол::ContextFilter)} на форме {(форма::Navigator)}"
;
: "Скопировать одно слово в буфер"
cc:ExtWordRight
"Копировать"
;
: "Переход к следующему термину с фокусом в тексте"
"Перевести фокус в дерево терминов"
"Переходим к следующему термину"
"Перевести фокус в документ"
;
: "Сравнить заголовок окна оболочки с эталоном"
"Найти главное окно" pop:control:Caption .
;
: "Закрыть форму по крестику" STRING IN aForm
OBJECT VAR "Текущая форма"
"Найти контрол {(aForm)} на форме {("Найти главное окно")}" =: "Текущая форма"
"Текущая форма" pop:object:IsNil ! [[ 'Не удалось найти форму ' aForm ]] strings:Cat ASSERTS
OBJECT VAR "Крестик"
'BtnClose' "Текущая форма" pop:control:FindControlByName =: "Крестик"
"Крестик" pop:object:IsNil ! 'Не удалось найти кнопку закрытия' ASSERTS
"Крестик" "Кликнуть"
; // "Закрыть форму по крестику"
: "Создать фильтр с именем и с параметром для" STRING IN aName IN aProc IN aKZ
aKZ DO
"Открыть фильтры"
: Действия1
: Действия2
"Ввести {(aName)}"
"Нажать Ok"
;
aProc DO
@ ( "Нажать Ok" ) MODAL ( Действия2 )
;
@ оп::Фильтры_Создать_новый_фильтр MODAL ( Действия1 )
"Дождаться переключения вкладок"
"Закрыть фильтры"
; // "Создать фильтр с именем и с параметром"
: "Удалить фильтр с именем для" STRING IN aName IN aKZ
VAR Сделано
НЕТ >>> Сделано
INTERFACE VAR l_Node
aKZ DO
"Открыть фильтры"
ПОКА ( НЕ Сделано )
BEGIN
контрол::FiltersList:push tree:CurrentNode =: l_Node
l_Node Node:IsLast IF
ДА >>> Сделано
ENDIF
( l_Node Node:Text "НЕ РАВНО" aName ) IF
"Стрелка вниз"
ELSE
wait:Yes
TRY
"Нажать {('Del')}"
FINALLY
waited:? ASSERT
END
ENDIF
END
"Дождаться переключения вкладок"
"Закрыть фильтры"
; // "Удалить фильтр с именем"
: "Применить фильтр с именем" STRING IN aFilter
OBJECT VAR l_Tree
VAR Сделано
НЕТ >>> Сделано
INTERFACE VAR l_Node
INTEGER VAR l_NodeIndex
0 >>> l_NodeIndex
"Открыть фильтры" // подразумевается, что мы тут можем открыть фильтры
контрол::FiltersList:push >>> l_Tree
"Переместиться в начало дерева"
ПОКА ( НЕ Сделано )
BEGIN
"Текущая нода дерева {(l_Tree)}" >>> l_Node
l_Node Node:IsLast >>> Сделано
( l_Node Node:Text "НЕ РАВНО" aFilter ) IF
"Стрелка вниз"
ELSE
ДА >>> Сделано
true l_NodeIndex l_Tree tree:SetSelected
ENDIF
l_NodeIndex 1 + >>> l_NodeIndex
END
;
: "Удалить фильтр с именем" STRING IN aFilter
OBJECT VAR l_Tree
VAR Сделано
НЕТ >>> Сделано
INTERFACE VAR l_Node
"Открыть фильтры" // подразумевается, что мы тут можем открыть фильтры
контрол::FiltersList:push >>> l_Tree
"Переместиться в начало дерева"
ПОКА ( НЕ Сделано )
BEGIN
"Текущая нода дерева {(l_Tree)}" >>> l_Node
l_Node Node:IsLast >>> Сделано
( l_Node Node:Text "НЕ РАВНО" aFilter ) IF
"Стрелка вниз"
ELSE
wait:Yes
TRY
"Нажать {('Del')}"
FINALLY
waited:? ASSERT
END
true =: Сделано
ENDIF
END
;
: "Перезаписать фильтр с именем новым параметром для" STRING IN aName IN aProc IN aKZ
VAR Сделано
НЕТ >>> Сделано
INTERFACE VAR l_Node
: Действия
aProc DO
wait:Yes
TRY
"Нажать Ok"
FINALLY
waited:? ASSERT
END
;
aKZ DO
"Открыть фильтры"
ПОКА ( НЕ Сделано )
BEGIN
контрол::FiltersList:push tree:CurrentNode =: l_Node
l_Node Node:IsLast IF
ДА >>> Сделано
ENDIF
( l_Node Node:Text "НЕ РАВНО" aName ) IF
"Стрелка вниз"
ELSE
@ оп::Фильтр_Редактировать_фильтр MODAL ( Действия )
ENDIF
END
"Дождаться переключения вкладок"
; // "Перезаписать фильтр с именем новым параметром"
: "Сравнить фильтр с именем с эталоном для" STRING IN aName IN aKZ
VAR Сделано
НЕТ >>> Сделано
INTERFACE VAR l_Node
aKZ DO
"Открыть фильтры"
ПОКА ( НЕ Сделано )
BEGIN
контрол::FiltersList:push tree:CurrentNode =: l_Node
l_Node Node:IsLast IF
ДА >>> Сделано
ENDIF
( l_Node Node:Text "НЕ РАВНО" aName ) IF
"Стрелка вниз"
ELSE
@ оп::Фильтр_Редактировать_фильтр MODAL ( "Сравнить текст редактора {(контрол::Editor:push)} с эталоном" )
ENDIF
END
"Дождаться переключения вкладок"
"Закрыть фильтры"
; // "Сравнить фильтр с именем с эталоном"
: "Померить минимальную ширину правой и левой частей ААК"
OBJECT VAR "Левая часть ААК"
OBJECT VAR "Правая часть ААК"
"Найти контрол {(контрол::pnLeftEx)} на форме {("Найти главное окно")}" =: "Левая часть ААК"
"Левая часть ААК" pop:object:IsNil ! 'Не найдена левая часть ААК' ASSERTS
"Найти контрол {(контрол::pnRightEx)} на форме {("Найти главное окно")}" =: "Правая часть ААК"
"Правая часть ААК" pop:object:IsNil ! 'Не найдена правая часть ААК' ASSERTS
INTEGER VAR width_form
"Найти главное окно" "Померить ширину" =: width_form
INTEGER VAR width_aak
"Левая часть ААК" "Померить ширину" =: width_aak
TRY
0 "Левая часть ААК" "Установить ширину"
[[ 'Минимальная ширина левой части ААК = ' ( "Левая часть ААК" "Померить ширину" ) IntToStr ]] strings:Cat .
width_form "Левая часть ААК" "Установить ширину"
[[ 'Минимальная ширина правой части ААК = ' ( "Правая часть ААК" "Померить ширину" ) IntToStr ]] strings:Cat .
FINALLY
width_aak "Левая часть ААК" "Установить ширину"
END
; // "Померить минимальную ширину правой и левой частей ААК"
: "Очистить историю"
vcm:History:GetBackCount раз "Удалить последний элемент истории"
;
: "Поставить на контроль и выполнить" IN aProc
"Поставить на контроль"
TRY
aProc DO
FINALLY
"Снять с контроля"
END
;
WordAlias "тест с падением" анти-тест
: ПЗ
OBJECT VAR "Панель задач"
форма::TasksPanel "Найти главное окно" pop:control:FindControlByName =: "Панель задач"
"Панель задач" pop:object:IsNil ? (
моп::Окна_Панель_задач
OnTest
)
;
: "Закрыть вкладку ПЗ"
OBJECT VAR "Панель задач"
форма::TasksPanel "Найти главное окно" pop:control:FindControlByName =: "Панель задач"
"Панель задач" pop:object:IsNil ! ? (
моп::Окна_Панель_задач
OnTest
)
;
: "Сравнить ПЗ с эталоном"
: Действия OBJECT IN aControl
: Действия1 OBJECT IN aControl
aControl ЯВЛЯЕТСЯ class::TnscTasksPanelTreeView ? (
aControl pop:control:SetFocus ASSERT
"Переместиться в начало дерева"
//aControl pop:control:Name .
aControl "Сравнить список с эталоном"
)
;
'' .
aControl pop:control:Caption .
'---------------' .
aControl EnumerateControls Действия1
;
ПЗ
TRY
OBJECT VAR "Панель задач"
форма::TasksPanel "Найти главное окно" pop:control:FindControlByName =: "Панель задач"
контрол::tpvMain "Панель задач" pop:control:FindControlByName =: "Панель задач"
"Панель задач" EnumerateControls Действия
FINALLY
"Закрыть вкладку ПЗ"
END
; // "Сравнить ПЗ с эталоном"
: "Установить закладку на документ"
: Действия
OBJECT VAR "Форма сохранения в МД"
OBJECT VAR "Кнопка ОК"
focused:control:push 2 раза "Получить родительскую форму" =: "Форма сохранения в МД"
"Форма сохранения в МД" pop:object:IsNil ! 'Не нашли форму сохранения в МД' ASSERTS
'bt_enResult_opOk' "Форма сохранения в МД" pop:control:FindControlByName =: "Кнопка ОК"
"Кнопка ОК" "Кликнуть"
;
3 раза "Дождаться переключения вкладок"
@ ( оп::Документ_Установить_закладку... ) MODAL ( Действия )
; // "Установить закладку на документ"
: "Мои документы"
BOOLEAN VAR l_Found
true ANYUSERTYPE контрол::FoldersTree форма::FoldersTree TryFocusOnForm =: l_Found
l_Found ! IF
моп::Папки_Мои_документы
ENDIF
true ANYUSERTYPE контрол::FoldersTree форма::FoldersTree TryFocusOnForm
'Не смогли установить фокус в МД' ASSERTS
"Переместиться в начало дерева"
"Свернуть текущее дерево"
;
: "Закрыть вкладку Мои документы"
BOOLEAN VAR l_Found
true ANYUSERTYPE контрол::FoldersTree форма::FoldersTree TryFocusOnForm =: l_Found
l_Found IF
моп::Папки_Мои_документы
"Дождаться переключения вкладок"
ENDIF
;
: "Закрыть синюю медаль документов на контроле"
ОМ
"Синяя медаль документов на контроле" byname:control:push pop:control:Visible ? (
"Синяя медаль документов на контроле" byname:control:push pop:control:Click
"Синяя медаль документов на контроле" byname:control:push pop:reminder:FindEditor pop:control:SetFocus 'Не удалось поставить фокус в редактор баллона' ASSERTS
OBJECT VAR "Форма баллона"
focused:control:push 2 раза ( "Получить родительскую форму" ) =: "Форма баллона"
OBJECT VAR "Крестик баллона"
'CloseButton' "Форма баллона" pop:control:FindVGControlByName =: "Крестик баллона"
"Крестик баллона" vg:control:Click
"Закрыть вкладку Документы на контроле" )
; // "Закрыть синюю медаль документов на контроле"
: "Сравнить содержимое тулбаров с эталоном расширенно" BOOLEAN IN aCheckEnabled
: Действия OBJECT IN aObj
( aObj ЯВЛЯЕТСЯ class::TvcmToolbar ) ? (
( aObj pop:control:Visible И ( aObj pop:control:ControlCount БОЛЬШЕ 1 ) ) ? (
aObj .
'Order = ' 'DockRow' aObj pop:object:GetOrdProp IntToStr Cat .
'---------------' .
aObj EnumerateControls ( OBJECT IN aControl
( aControl "НЕ ЯВЛЯЕТСЯ" class::Ttb97MoreButton ) ? (
aControl .
( aControl "НЕ ЯВЛЯЕТСЯ" class::TvcmComboBox ) ? (
aControl pop:control:Caption .
aCheckEnabled ? ( 'Активность:' aControl "Убедиться, что контрол активен" ToPrintable Cat . )
)
)
)
'' .
)
)
;
: "Получить содержимое тулбаров"
"Найти главное окно" "выполнить для всех контролов" Действия
;
"Выставить форме размеры {(1400 900)} и {(@ "Получить содержимое тулбаров")}"
; // "Сравнить содержимое тулбаров с эталоном расширенно"
: "Сравнить содержимое тулбаров с эталоном"
OnTest
"Сравнить содержимое тулбаров с эталоном расширенно {(false)}"
;
: "Сравнить содержимое тулбаров с эталоном полностью"
"Сравнить содержимое тулбаров с эталоном расширенно {(true)}"
;
: "Проверить, что нельзя перевести фокус в на форме типа" STRING IN aControl STRING IN aForm INTEGER IN aUserType
true aUserType aControl aForm TryFocusOnForm !
[[ 'Удалось поставить фокус в ' aControl ' на форме ' aForm ' типа ' aUserType IntToStr ', хотя такой возможности быть не должно!' ]] strings:Cat
ASSERTS
;
: "Проверить, что нельзя перевести фокус в на форме" STRING IN aControl STRING IN aForm
"Проверить, что нельзя перевести фокус в {(aControl)} на форме {(aForm)} типа {(ANYUSERTYPE)}"
;
: "Проверить, что нельзя перевести фокус в комментарии"
"Проверить, что нельзя перевести фокус в {(контрол::lstComments)} на форме {(форма::Contents)}"
;
: "Открыть список документов с комментариями"
"Мои документы"
"Развернуть текущее дерево"
TRY
"Перейти по ссылке {('Документы с комментариями пользователя')} в дереве {(контрол::FoldersTree)}"
"Перевести фокус в список"
FINALLY
"Закрыть вкладку Мои документы"
END
; // "Открыть список документов с комментариями"
: "Пункт меню видим?" OBJECT IN anItem
'Checked' anItem pop:object:GetOrdProp РАВНО 0 !
;
WORDWORKER "Выполнить с пунктом меню 'сортировка списка'"
VAR Item
'Документы' "Найти главное окно" pop:form:FindMenuItem =: Item
1 Item menuitem:GetItem =: Item
application:ActionIdle
Item "Пункт меню видим?"
Item
WordToWork DO
;
: "Проверить видимость пунктов меню связанных с сортировкой списка"
"Выполнить с пунктом меню 'сортировка списка'" ( BOOLEAN IN aVisible OBJECT IN anItem )
;
WORDWORKER "Выполнить с пунктом меню 'информация об изменениях документа'"
VAR Item
'Документы/Комментарии' "Найти главное окно" pop:form:FindMenuItem =: Item
1 Item menuitem:GetItem =: Item
application:ActionIdle
Item "Пункт меню видим?"
Item
WordToWork DO
;
: "Проверить видимость пунктов меню связанных с комментариями"
"Выполнить с пунктом меню 'информация об изменениях документа'" ( BOOLEAN IN aVisible OBJECT IN anItem )
;
: "Включить информацию об изменениях документа"
"Выполнить с пунктом меню 'информация об изменениях документа'" ( BOOLEAN IN aVisible OBJECT IN anItem aVisible ! ? ( anItem menuitem:Click )
'Включить информацию об изменениях документа' РАВНО ( anItem menuitem:GetCaption ) ASSERT )
;
: "Выключить информацию об изменениях документа"
"Выполнить с пунктом меню 'информация об изменениях документа'" ( BOOLEAN IN aVisible OBJECT IN anItem aVisible ? ( anItem menuitem:Click )
'Выключить информацию об изменениях документа' РАВНО ( anItem menuitem:GetCaption ) ASSERT )
;
: "Выполнить с включёнными версионными комментариями" IN aProc
"Выполнить с пунктом меню 'информация об изменениях документа'" ( BOOLEAN IN aVisible OBJECT IN anItem aVisible IF
aProc DO
ELSE
"Включить информацию об изменениях документа"
TRY
aProc DO
FINALLY
"Перевести фокус в текст"
"Выключить информацию об изменениях документа"
END
ENDIF )
; // "Выполнить с включёнными версионными комментариями"
: "Выполнить с выключенными версионными комментариями" IN aProc
"Выполнить с пунктом меню 'информация об изменениях документа'" ( BOOLEAN IN aVisible OBJECT IN anItem aVisible ! IF
aProc DO
ELSE
"Выключить информацию об изменениях документа"
TRY
aProc DO
FINALLY
"Перевести фокус в текст"
"Включить информацию об изменениях документа"
END
ENDIF )
; // "Выполнить с выключенными версионными комментариями"
: "Нажать в текущем редакторе на ссылку на графическую копию"
VAR Editor
VAR x
VAR y
"Стрелка вверх"
focused:control:push >>> Editor
Editor pop:editor:ParaCoordsToScreen >>> y >>> x
x 5 + >>> x
y 5 - >>> y
x y mouse:SetCursorPosition
"Клик левой кнопкой мыши"
;
: "Перейти на элемент свёрнутого списка" INTEGER IN aItem
оп::Дерево_Свернуть_все
aItem 1 - раз "Стрелка вниз"
;
: "Открыть мои документы и выполнить" IN aProc
"Мои документы"
TRY
aProc DO
FINALLY
"Закрыть вкладку Мои документы"
END
;
: "Открыть панель задач и выполнить" IN aProc
ПЗ
TRY
aProc DO
FINALLY
"Закрыть вкладку ПЗ"
END
;
: "Открываем НК из ОМ"
ОМ
"Перевести фокус в {(контрол::tvReferences)} на форме {(форма::MainMenuNew)}"
"Перейти по ссылке {('Кодексы Российской Федерации')} в дереве {(контрол::tvReferences)}"
"Нажать {('Enter')}"
;
: "Обновить главное меню приложения"
"Список всех документов"
"Дать системе перерисоваться"
"Проверить видимость пунктов меню связанных с сортировкой списка"
// - ХАК! это чтобы пункты про сортировку обновить
;
: "Выставить форме размеры ширину навигатора в и " INTEGER IN formW INTEGER IN formH INTEGER IN aW OBJECT IN aProc
: Действия
INTEGER VAR width_navigator
контрол::LeftNavigator:push "Померить ширину" =: width_navigator
aW контрол::LeftNavigator:push "Установить ширину"
TRY
aProc DO
FINALLY
width_navigator контрол::LeftNavigator:push "Установить ширину"
END
; // Действия
"Выставить форме размеры {(formW formH)} и {(@ Действия)}"
; // "Выставить форме размеры ширину навигатора в и "
OBJECT FUNCTION "Левый навигатор"
"Найти контрол {(контрол::LeftNavigator)} на форме {("Найти главное окно")}" =: Result
Result pop:object:IsNil ! 'Не удалось найти левый навигатор' ASSERTS
; // "Левый навигатор"
OBJECT FUNCTION "Кнопка свертывания левого навигатора"
"Дать системе перерисоваться"
'HIDELEFT' "Левый навигатор" pop:control:FindControlByName =: Result
Result pop:object:IsNil ! 'Не удалось найти кнопку свертывания левого навигатора' ASSERTS
; // "Кнопка свертывания левого навигатора"
: "Сделать левый навигатор свернутым"
"Левый навигатор" "Померить ширину" 31 <> IF
"Кнопка свертывания левого навигатора" "Кликнуть"
ENDIF
"Дать системе перерисоваться"
; // "Сделать левый навигатор свернутым"
: "Сделать левый навигатор развернутым"
"Левый навигатор" "Померить ширину" 31 == IF
"Кнопка свертывания левого навигатора" "Кликнуть"
ENDIF
"Дать системе перерисоваться"
; // "Сделать левый навигатор развернутым"
: "Запомнить ширину левого навигатора и выполнить" IN aProc
VAR aWidht
"Левый навигатор" "Померить ширину" >>> aWidht
TRY
aProc DO
FINALLY
aWidht "Левый навигатор" "Установить ширину"
END
; // "Запомнить ширину левого навигатора и выполнить"
: "Убедиться, что БП присутствует на форме и померить его высоту" OBJECT IN aForm
OBJECT VAR "Базовый поиск"
"Проверить, что открыта форма БП"
"Найти контрол {(контрол::BaseSearchPanel)} на форме {(aForm)}" =: "Базовый поиск"
"Проверить, что контрол {("Базовый поиск")} видимый"
"Базовый поиск" pop:control:GetHeight .
;
: "Сделать с изменением состояния и размеров окна" OBJECT IN aProc OBJECT IN aForm
VAR aState
VAR L
VAR T
VAR W
VAR H
aForm pop:form:GetWindowState >>> aState
aForm "Померить отступ слева" >>> L
aForm "Померить отступ сверху" >>> T
aForm "Померить ширину" >>> W
aForm "Померить высоту" >>> H
TRY
aProc DO
FINALLY
aState aForm pop:form:SetWindowState
L aForm pop:control:SetLeft
T aForm pop:control:SetTop
W aForm "Установить ширину"
H aForm "Установить высоту"
END
; // "Сделать с изменением состояния и размеров окна"
BOOLEAN FUNCTION "Является ли фильтр автоприменяемым?" INTEGER IN aItem
( aItem контрол::FiltersList:push tree:GetItemImageIndex РАВНО 25 ) =: Result
; // "Является ли фильтр автоприменяемым?"
: "Сделать фильтр автоприменяемым" INTEGER IN aItem
"Установить фокус во вкладку Фильтры"
"Является ли фильтр {(aItem)} автоприменяемым?" ! ? (
"Переместиться в начало дерева"
aItem раз "Стрелка вниз"
оп::Фильтр_Применять_автоматически )
; // "Сделать фильтр автоприменяемым"
: "Сделать фильтр НЕавтоприменяемым" INTEGER IN aItem
"Установить фокус во вкладку Фильтры"
"Является ли фильтр {(aItem)} автоприменяемым?" ? (
"Переместиться в начало дерева"
aItem раз "Стрелка вниз"
оп::Фильтр_Применять_автоматически )
; // "Сделать фильтр НЕавтоприменяемым"
: "Убедиться, что фильтр автоприменяемый" INTEGER IN aItem
"Установить фокус во вкладку Фильтры"
"Переместиться в начало дерева"
aItem раз "Стрелка вниз"
"Является ли фильтр {(aItem)} автоприменяемым?" 'Фильтр не является автоприменяемым' ASSERTS
; // "Убедиться, что фильтр автоприменяемый"
: "Сравнить левую часть ААК-Содержания с эталоном"
"Поставить фокус в левую половину ААК-Содержания"
"Выделить всё"
"Сравнить выделенный текст текущего редактора с эталоном"
; // "Сравнить левую часть ААК-Содержания с эталоном"
: "Сравнить правую часть ААК-Содержания с эталоном"
"Поставить фокус в правую половину ААК-Содержания"
"Выделить всё"
"Сравнить выделенный текст текущего редактора с эталоном"
; // "Сравнить правую часть ААК-Содержания с эталоном"
: "Сравнить текст обеих частей ААК-Содержания с эталоном"
"Сравнить левую часть ААК-Содержания с эталоном"
'-------------------------------------------------------' .
"Сравнить правую часть ААК-Содержания с эталоном"
; // "Сравнить текст обоих частей ААК-Содержания с эталоном"
BOOLEAN FUNCTION "Имеет ли документ на контроле статус изменён?" INTEGER IN aItem
( aItem контрол::UnderControlList:push tree:GetItemImageIndex РАВНО 8 ) =: Result
; // "Имеет ли документ на контроле статус изменён?"
: "Убедиться, что документ на контроле имеет статус изменён" INTEGER IN aItem
"Установить фокус в {(контрол::UnderControlList:push)}"
"Переместиться в начало дерева"
aItem раз "Стрелка вниз"
"Имеет ли документ {(aItem)} на контроле статус изменён?" 'Документ на контроле не имеет статуса изменён' ASSERTS
; // "Убедиться, что документ на контроле имеет статус изменён"
: "Поставить на контроль, подавив Нарушен баланс скобок Wait"
TRY
"Поставить на контроль"
EXCEPT
DROP
// - удаляем результат со стека, т.к. прилетела ересь 'Нарушен баланс скобок Wait'
END
; // "Поставить на контроль, подавив Нарушен баланс скобок Wait"
: "Удалить документ с вкладки Документы на контроле, подавив Нарушен баланс скобок Wait"
TRY
"Ответить один раз Да для {(@ "Нажать Del")}"
EXCEPT
DROP
// - удаляем результат со стека, т.к. прилетела ересь 'Нарушен баланс скобок Wait'
END
; // "Удалить документ с вкладки Документы на контроле, подавив Нарушен баланс скобок Wait"
: "Сделать с комментариями в документе" IN aProc IN aDoc
"Открываем {(aDoc)}"
TRY
aProc DO
FINALLY
"Открываем {(aDoc)}"
"В документе не должно быть комментариев"
END
; // "Сделать с комментариями в документе"
: "Установить фокус в контекстный фильтр списка Инфарма"
OBJECT VAR "Контекстный фильтр"
"Найти контрол {('InternalEditor')} на форме {("Найти главное окно")}" =: "Контекстный фильтр"
"Установить фокус в {("Контекстный фильтр")}"
; // "Установить фокус в контекстный фильтр списка Инфарма"
: "Основное меню Инфарма"
моп::Инфарм_Основное_меню_ИнФарм
; // "Основное меню Инфарма"
: "Список всех препаратов"
"Основное меню Инфарма"
"Нажать {('Enter')}"
"Нажать Искать"
; // "Список всех препаратов"
OBJECT FUNCTION "Проверить доступность кнопки" IN aControl
aControl "Найти главное окно" pop:control:FindControlByName =: Result
Result pop:control:Enabled .
; // "Проверить доступность кнопки"
STRING FUNCTION "Узнать, в каком поле КЗ стоит фокус" OBJECT IN aQueryCard
aQueryCard ЯВЛЯЕТСЯ class::TevQueryCardEditor ASSERT
aQueryCard pop:QueryCard:GetCurrentReqName >>> Result
; // "Узнать, в каком поле КЗ стоит фокус"
: "Сравнить с эталоном активное поле текущей КЗ"
focused:control:push "Узнать, в каком поле КЗ стоит фокус" .
; // "Сравнить с эталоном активное поле текущей КЗ"
: "Установить курсор мыши на ссылку в плашке ААК"
VAR x
VAR y
"Найти плашку в ААК" pop:editor:ParaEndCoordsToScreen >>> y >>> x
x 40 - >>> x
y 15 - >>> y
x y mouse:SetCursorPosition
; // "Установить курсор мыши на ссылку в плашке ААК"
: "Клик по встроенному скроллеру редактора" OBJECT IN anEditor
//"Найти главное окно" pop:control:GetHandle SetForegroundWindow
VAR X
VAR Y
VAR W
VAR H
anEditor ЯВЛЯЕТСЯ class::TnscEditor
[[ 'Фокус не в редакторе, а в ' anEditor pop:component:Name ':' anEditor pop:object:ClassName ]] strings:Cat
ASSERTS
anEditor pop:control:VScrollerVisible IF
"Запомнить позицию мыши"
TRY
anEditor pop:control:GetWidth >>> W
anEditor pop:control:GetHeight >>> H
W 5 - >>> X
H 2 / >>> Y
//X Y anEditor pop:control:ClientToScreen >>> Y >>> X
//X Y mouse:SetCursorPosition
"Установить курсор мыши по координатам {(X Y)} относительно контрола {(anEditor)}"
"Клик левой кнопкой мыши"
FINALLY
"Восстановить позицию мыши"
END
ENDIF
; // "Клик по встроенному скроллеру редактора"
: "Клик по встроенному скроллеру редактора в фокусе"
"Клик по встроенному скроллеру редактора {(focused:control:push)}"
;
: "в поле 'Вид правовой информации' ввести" STRING IN aStr
"Убедиться, что фокус в редакторе"
'AT_PREFIX' aStr focused:control:push pop:QueryCard:SetAttribute
; // "в поле 'Вид правовой информации' ввести"
: "Выполнить в списке документов с комментарями" IN aProc
"Мои документы"
"Развернуть текущее дерево"
TRY
"Перейти по ссылке {('Документы с комментариями пользователя')} в дереве {(контрол::FoldersTree)}"
"Перевести фокус в список"
aProc DO
FINALLY
"Закрыть вкладку Мои документы"
END
; // "Выполнить в списке документов с комментарями"
BOOLEAN FUNCTION "Имеет ли расширенная конфигурация признак измененности?"
( 1 контрол::tvConfs:push tree:GetItemImageIndex РАВНО 2 ) =: Result
; // "Имеет ли расширенная конфигурация признак измененности?"
: "Убедиться, что расширенная конфигурация имеет признак измененности"
"Установить фокус в {(контрол::tvConfs:push)}"
"Имеет ли расширенная конфигурация признак измененности?" 'Расширенная конфигурация не имеет признака измененности' ASSERTS
; //"Убедиться, что расширенная конфигурация имеет признак измененности"
: "Убедиться, что расширенная конфигурация не имеет признака измененности"
"Установить фокус в {(контрол::tvConfs:push)}"
"Имеет ли расширенная конфигурация признак измененности?" ! 'Расширенная конфигурация имеет признак измененности' ASSERTS
; //"Убедиться, что расширенная конфигурация не имеет признака измененности"
: "Перевести фокус в поле 'Запрос в службу Правовой поддержки онлайн' в ППО"
"Убедиться, что фокус в редакторе"
'AT_LAW_SUPPORT_TEXT' focused:control:push pop:QueryCard:Attribute:SetFocus
; // "Перевести фокус в поле 'Запрос в службу Правовой поддержки онлайн' в ППО"
: "Ищем в тексте КЗ Инфарма контекст" STRING IN aStr1
"Поиск лекарственного средства"
"Убедиться, что фокус в редакторе"
OBJECT VAR l_QC
focused:control:push >>> l_QC
'AT_PHARM_TEXT' aStr1 l_QC pop:QueryCard:SetAttribute
"Нажать Искать"
; // "Ищем в тексте КЗ Инфарма контекст" STRING IN aStr1
: "Сохранить текущий объект в Мои документы и выполнить" IN aProc
: Действия
OBJECT VAR "Форма сохранения в МД"
OBJECT VAR "Кнопка ОК"
focused:control:push 2 раза "Получить родительскую форму" =: "Форма сохранения в МД"
"Форма сохранения в МД" pop:object:IsNil ! 'Не нашли форму сохранения в МД' ASSERTS
'bt_enResult_opOk' "Форма сохранения в МД" pop:control:FindControlByName =: "Кнопка ОК"
"Кнопка ОК" "Кликнуть"
; // Действия
: Удаляем_объект
3 раза "Дождаться переключения вкладок"
"Дать системе перерисоваться"
"Развернуть текущее дерево"
"Стрелка вниз"
"Ответить один раз Да для {(@ "Нажать Del")}"
; // Удаляем_список
3 раза "Дождаться переключения вкладок"
@ ( "Сохранить в Мои документы" ) MODAL ( Действия )
TRY
aProc DO
FINALLY
"Дать системе перерисоваться"
"Открыть мои документы и выполнить {(@ Удаляем_объект )}"
END
; // "Сохранить текущий объект в Мои документы и выполнить"
: "Установить фокус в контекстный фильтр ТС"
"Перевести фокус в {(контрол::ContextFilter)} на форме {(форма::Diction)}"
; // "Установить фокус в контекстный фильтр ТС"
: "Проверить, что введено в контекстый фильтр"
OBJECT VAR "Контекстный фильтр"
"Найти контрол {('InternalEditor')} на форме {("Найти главное окно")}" =: "Контекстный фильтр"
"Контекстный фильтр" pop:control:Caption .
; // "Проверить, что введено в контекстый фильтр"
: "Сравнить название текущего термина с эталоном"
INTERFACE VAR l_Node
контрол::WordsTree:push tree:CurrentNode =: l_Node
l_Node Node:Text .
; //"Сравнить название текущего термина с эталоном"
: "Померить левые отступы для контрола" OBJECT IN aControl
aControl pop:editor:GetLeftIndentDelta .
aControl "Померить отступ слева" .
; // "Померить левые отступы для контрола"
OBJECT FUNCTION "Проверить доступность кнопки в модальном окне" IN aControl
OBJECT VAR "Модальная форма"
focused:control:push pop:control:GetAnotherParentForm =: "Модальная форма"
aControl "Модальная форма" pop:control:FindControlByName =: Result
Result pop:control:Enabled .
; // "Проверить доступность кнопки в модальном окне"
: "Восстановить все настройки текущей конфигурации"
: Действия
OBJECT VAR "Кнопка Восстановить все"
OBJECT VAR "Модальная форма"
focused:control:push pop:control:GetAnotherParentForm =: "Модальная форма"
"Найти контрол {('bt_enResult_opRestoreAllSettings')} на форме {("Модальная форма")}" =: "Кнопка Восстановить все"
"Кнопка Восстановить все" pop:object:IsNil ! 'Не нашли кнопку Восстановить все' ASSERTS
"Кнопка Восстановить все" "Кликнуть"
OnTest
; // Действия
: Сохраняем_размеры
"Найти главное окно" "Развернуть окно"
@ "Настройка конфигурации" MODAL ( "Ответить один раз Да для {(@ Действия )}" )
; // Сохраняем_размеры
"Сделать {(@ Сохраняем_размеры )} с изменением состояния и размеров окна {("Найти главное окно")}"
; // "Восстановить все настройки текущей конфигурации"
OBJECT FUNCTION "Видимый элемент статусбара" INTEGER IN aItem OBJECT IN aStatusBar
OBJECT VAR l_Item
INTEGER VAR I
INTEGER VAR l_VisibleIndex
0 >>> I
0 >>> l_VisibleIndex
aStatusBar StatusBar:OrderedControlsCount раз (
I aStatusBar StatusBar:OrderedControl =: l_Item
l_Item pop:control:Visible ? (
l_VisibleIndex РАВНО aItem ? (
l_Item >>> Result
EXIT
)
l_VisibleIndex 1 + >>> l_VisibleIndex
)
I 1 + >>> I
)
; // "Видимый элемент статусбара"
: "в поле 'Статус регистрации' ввести с операцией" STRING IN aStr INTEGER IN aL
"Убедиться, что фокус в редакторе"
'AT_PHARM_REG_STATUS' focused:control:push pop:QueryCard:Attribute:SetFocus
aL 'AT_PHARM_REG_STATUS' aStr focused:control:push pop:QueryCard:Attribute:SetWithLogicOperation
; // "в поле 'Статус регистрации' ввести с операцией"
: "Проверить, доступно ли изменение логического условия для поля КЗ" STRING IN aStr
"Убедиться, что фокус в редакторе"
aStr focused:control:push pop:QueryCard:Attribute:IsLogicOperationEnabled .
; // "Проверить, доступно ли изменение логического условия для поля КЗ"
: "Проверить, какое логическое условие введено для поля КЗ" STRING IN aStr
"Убедиться, что фокус в редакторе"
aStr focused:control:push pop:QueryCard:Attribute:GetLogicOperation .
; // "Проверить, какое логическое условие введено для поля КЗ"
: "Для всех видимых элементов статусбара выполнить" OBJECT IN aStatusBar OBJECT IN aProc
OBJECT VAR l_Item
INTEGER VAR I
INTEGER VAR l_VisibleIndex
INTEGER VAR l_Count
0 >>> I
0 >>> l_VisibleIndex
aStatusBar StatusBar:OrderedControlsCount >>> l_Count
l_Count раз (
I aStatusBar StatusBar:OrderedControl =: l_Item
l_Item pop:control:Visible ? (
l_VisibleIndex РАВНО l_Count ? (
EXIT
)
l_Item aProc DO
l_VisibleIndex 1 + >>> l_VisibleIndex
)
I 1 + >>> I
)
; // "Для всех видимых элементов статусбара выполнить"
: "Вызвать Список редакций из статусной строки и сделать" IN aProc
: Действия
OnTest
"Перевести фокус в дерево редакций"
aProc DO
OnTest
; // Действия
: "Открываем Список редакций из статусной строки"
: Ищем_нужную_кнопку OBJECT IN l_It
l_It "Заголовок контрола" РАВНО 'Выбрать другие редакции' IF
@ ( l_It "Кликнуть" ) MODAL Действия
ENDIF
; // Ищем_нужную_кнопку
"Для всех видимых элементов статусбара {(контрол::StatusBar:push)} выполнить {(@ Ищем_нужную_кнопку )}"
; // "Открываем Список редакций из статусной строки"
"Открываем Список редакций из статусной строки"
; // "Вызвать Список редакций из статусной строки и сделать"
: "Вызвать Список редакций из статусной строки"
"Вызвать Список редакций из статусной строки и сделать {(@ NOP)}"
; // "Вызвать Список редакций из статусной строки"
: "Открываем вкладку 'Комментарии' в синхронном просмотре списка"
"Дождаться переключения вкладок"
OBJECT VAR "Нужная кнопка"
"Найти контрол {('bt_enSynchroView_ShowUserCRList2')} на форме {("Найти главное окно")}" =: "Нужная кнопка"
"Нужная кнопка" pop:object:IsNil ! 'Не нашли кнопку Комментарии' ASSERTS
"Нужная кнопка" "Кликнуть"
OnTest
"Дождаться переключения вкладок"
; // "Открываем вкладку 'Комментарии' в синхронном просмотре списка"
: "Открыть сохраненный объект из Моих документов и выполнить" IN aProc
"Мои документы"
"Развернуть текущее дерево"
TRY
"Стрелка вниз"
"Нажать {('Enter')}"
aProc DO
FINALLY
"Закрыть вкладку Мои документы"
END
; // "Открыть список документов с комментариями"
OBJECT FUNCTION "Найти сплиттер в ААК-содержании"
OBJECT VAR "Текущая форма"
"Найти окно {(форма::AACContentsContainer)} по имени" =: "Текущая форма"
"Текущая форма" pop:object:IsNil ! 'Форма ААК-Содержание не найдена' ASSERTS
"Найти контрол {(контрол::pnLeftEx)} на форме {("Текущая форма")}" =: Result
Result pop:object:IsNil ! 'Сплиттер в ААК-Содержании не найден' ASSERTS
; // "Найти сплиттер в ААК-содержании"
: "Померить ширину левой части ААК-Содержания"
OBJECT VAR "Сплиттер"
"Найти сплиттер в ААК-содержании" =: "Сплиттер"
"Сплиттер" "Померить ширину" .
; // "Померить ширину левой части ААК-Содержания"
: "Выполнить над свернутой группой КЗ" IN aProc STRING IN aStr
ППР
BOOLEAN VAR l_Status
OBJECT VAR l_QC
"Убедиться, что фокус в редакторе"
focused:control:push >>> l_QC
aStr l_QC pop:QueryCard:Attribute:GetCollapsed >>> l_Status
aStr l_QC pop:QueryCard:Attribute:GetCollapsed IF
aStr true l_QC pop:QueryCard:Attribute:SetCollapsed
ENDIF
aProc DO
aStr l_Status ! l_QC pop:QueryCard:Attribute:SetCollapsed
; // "Выполнить над свернутой группой КЗ"
: "Сделать с документом , открытым из Журнала работы" IN aProc IN aDoc
"Очистить журнал работы"
"Открываем {(aDoc)}"
ОМ
TRY
"Открыть журнал работы"
2 раза "Спускаемся в дереве на уровень вниз"
"Нажать {('Enter')}"
aProc DO
FINALLY
"Закрыть журнал работы"
END
; // "Сделать с документом , открытым из Журнала работы"
: "Нажать кнопку Отмена в Настройке конфигурации"
OBJECT VAR "Отмена"
OBJECT VAR "Модальная форма"
focused:control:push pop:control:GetAnotherParentForm =: "Модальная форма"
"Найти контрол {('bt_enResult_opCancel')} на форме {("Модальная форма")}" =: "Отмена"
"Отмена" pop:object:IsNil ! 'Не нашли кнопку Отмена' ASSERTS
"Отмена" "Кликнуть"
; // "Нажать кнопку Отмена в Настройке конфигурации"
: "Кликаем Ок в Настройке конфигурации"
OBJECT VAR "Кнопка Ок"
OBJECT VAR "Модальная форма"
focused:control:push pop:control:GetAnotherParentForm =: "Модальная форма"
"Найти контрол {('bt_enResult_opOk')} на форме {("Модальная форма")}" =: "Кнопка Ок"
"Кнопка Ок" pop:object:IsNil ! 'Не нашли кнопку Ок' ASSERTS
"Кнопка Ок" "Кликнуть"
; // "Кликаем Ок в Настройке конфигурации"
: "Закрыть форму БП"
"Открыта ли форма БП?" IF
"Перевести фокус в {(контрол::ContextEdit)} на форме {(форма::NewBaseSearch)} типа {(0)}"
"Закрыть текущую вкладку"
ENDIF
; // "Закрыть форму БП"
OBJECT FUNCTION "Вкладка синхронного просмотра документа"
"Открыть вкладку синхронного просмотра текста без сравнения с эталоном"
"Дождаться переключения вкладок"
контрол::ChildZonePanel "Найти главное окно" pop:control:FindControlByName =: Result
Result pop:object:IsNil ! 'Вкладка синхронного просмотра не найдена' ASSERTS
; // "Вкладка синхронного просмотра документа"
: "Вывести окно оболочки на первый план"
"Найти главное окно" pop:control:GetHandle SetForegroundWindow
; // "Вывести окно оболочки на первый план"
BOOLEAN FUNCTION "Получить состояние чекбокса" OBJECT IN aCheckBox
'Checked' aCheckBox pop:object:GetOrdProp РАВНО 1 >>> Result
; // "Получить состояние чекбокса"
: "Убедиться, что контрол класса" OBJECT IN aControl STRING IN aClass
aControl ЯВЛЯЕТСЯ aClass [[ 'Контрол относится к другому классу: ' aControl pop:object:ClassName ', а не: ' aClass ]] strings:Cat ASSERTS
; // "Убедиться, что контрол класса"
: "Убедиться, что текущий контрол" STRING IN aClass
OBJECT VAR l_Control
focused:control:push =: l_Control
l_Control ЯВЛЯЕТСЯ aClass [[ 'Фокус на контроле, который относится к другому классу: ' l_Control pop:object:ClassName ', а не: ' aClass ]] strings:Cat ASSERTS
; // "Убедиться, что текущий контрол"
OBJECT FUNCTION "Панель задач"
OBJECT VAR "Панель задач"
форма::TasksPanel "Найти главное окно" pop:control:FindControlByName =: "Панель задач"
контрол::tpvMain "Панель задач" pop:control:FindControlByName =: Result
; // "Панель задач"
WORDWORKER "Выполнить с редактором стилей"
@ "Редактор стилей" MODAL ( WordToWork DO )
"Дать системе перерисоваться"
;
: "Нажать на кнопку контекстного фильтра"
OBJECT VAR "Кнопка контекстного фильтра"
"Найти контрол {('ContextFilterButton')} на форме {("Найти главное окно")}" =: "Кнопка контекстного фильтра"
"Кнопка контекстного фильтра" pop:object:IsNil ! 'Не нашли кнопку контекстного фильтра' ASSERTS
"Кнопка контекстного фильтра" "Кликнуть"
; // "Нажать на кнопку контекстного фильтра"
INTEGER FUNCTION "Количество открытых вкладок Хрома"
0 >>> Result
: "Перебор дочерних окон" INTEGER IN hChild
( hChild GetClassName РАВНО 'Chrome_WidgetWin_0' ) И
( hChild GetWindowText НЕРАВНО '' ) ?
( Result 1 + >>> Result )
;
: "Перебор главных окон Хрома" INTEGER IN hWnd
STRING VAR lClass
hWnd GetClassName >>> lClass
( lClass РАВНО 'Chrome_WidgetWin_0' ) ИЛИ
( lClass РАВНО 'Chrome_WidgetWin_1' ) ? (
@ "Перебор дочерних окон" hWnd IterateChildWindows
)
;
@ "Перебор главных окон Хрома" IterateWindows
; // "Количество открытых вкладок Хрома"
: "Выполнить и сравнить с эталоном количество вновь открытых вкладок Хрома" IN aProc
INTEGER VAR Count_Wnd_Start
INTEGER VAR Count_Wnd_Finish
"Количество открытых вкладок Хрома" >>> Count_Wnd_Start
TRY
aProc DO
FINALLY
1500 SLEEP
"Вывести окно оболочки на первый план"
"Количество открытых вкладок Хрома" >>> Count_Wnd_Finish
Count_Wnd_Finish Count_Wnd_Start - .
END
; // "Выполнить и сравнить с эталоном количество вновь открытых вкладок Хрома"
: "Сравнить с эталоном имя текущего контрола"
focused:control:push "Узнать имя контрола" .
; // "Сравнить с эталоном имя текущего контрола"
: "Перевести фокус в поле 'Орган/Источник' в ППР"
"Убедиться, что фокус в редакторе"
'AT_SOURCE' focused:control:push pop:QueryCard:Attribute:SetFocus
; // "Перевести фокус в поле 'Орган/Источник' в ППР"
: "А активна ли вкладка Совещание онлайн?"
false 0 контрол::trContactList форма::ContactList TryFocusOnForm
; // "А активна ли вкладка Совещание онлайн?"
: "Установить фокус в комбокс фильтра пользователей вкладки Совещание онлайн"
OBJECT VAR "Комбобокс"
"Найти контрол {('bt_enChat_opUserFilter')} на форме {("Найти главное окно")}" =: "Комбобокс"
"Установить фокус в {("Комбобокс")}"
; // "Установить фокус в комбокс фильтра пользователей вкладки Совещание онлайн"
: "Открыть вкладку Совещание онлайн"
"Открыть вкладку с контактами"
OBJECT VAR "Вкладка Совещание Онлайн"
"Найти контрол {(контрол::trContactList )} на форме {("Найти главное окно")}" >>> "Вкладка Совещание Онлайн"
"Вкладка Совещание Онлайн" pop:object:IsNil ! 'Вкладка Совещание онлайн не открылась' ASSERTS
; // "Открыть вкладку Совещание онлайн"
: "Закрыть вкладку Совещание онлайн"
"А активна ли вкладка Совещание онлайн?" IF
"Установить фокус в комбокс фильтра пользователей вкладки Совещание онлайн"
"Закрыть текущую вкладку"
ENDIF
; // "Закрыть вкладку Совещание онлайн"
: "Выполнить с вкладкой Совещание онлайн" IN aProc
"Открыть вкладку Совещание онлайн"
"Установить фокус в комбокс фильтра пользователей вкладки Совещание онлайн"
"Дать системе перерисоваться"
TRY
aProc DO
FINALLY
"Закрыть вкладку Совещание онлайн"
END
; // "Выполнить с вкладкой Совещание онлайн"
: "Установить фокус в редактор отправленных сообщений"
OBJECT VAR "Текущая форма"
"Найти окно {(форма::ChatWindow)} по имени" =: "Текущая форма"
"Найти контрол {( контрол::HistoryEditor)} на форме {( "Текущая форма" )}" pop:control:SetFocus
; // "Установить фокус в редактор отправленных сообщений"
: "Кликаем кнопку в окне чата" IN aControl
OBJECT VAR "Кнопка"
OBJECT VAR "Текущая форма"
"Найти окно {(форма::ChatWindow)} по имени" =: "Текущая форма"
"Найти контрол {( aControl )} на форме {( "Текущая форма" )}" =: "Кнопка"
"Кнопка" pop:object:IsNil ! 'Не нашли кнопку Восстановить все' ASSERTS
"Кнопка" "Кликнуть"
; // "Кликаем кнопку в окне чата"
: "Отправить сообщение"
"Кликаем кнопку {('bt_enResult_opOkExt')} в окне чата"
; // "Отправить сообщение"
: "Отменить отправку сообщений"
"Кликаем кнопку {('bt_enResult_opCancel')} в окне чата"
; // "Отменить отправку сообщений"
: "Установить фокус в список контактов"
OBJECT VAR "Список пользователей"
контрол::trContactList:push =: "Список пользователей"
"Установить фокус в {("Список пользователей")}"
; // "Установить фокус в список контактов"
: "Выбрать первого пользователя, открыть диалог и выполнить" IN aProc
@ ( "Добавить пользователя для переписки" ) MODAL ( "Нажать {('Enter')}" )
TRY
aProc DO
FINALLY
"Отменить отправку сообщений"
"Открыть историю переписки"
"Очистить историю переписки"
"Нажать {('Esc')}"
"Дать системе перерисоваться"
"Установить фокус в список контактов"
"Нажать {('Del')}"
END
; // "Выбрать первого пользователя, открыть диалог и выполнить"
: "Открываем вкладку 'Судебная практика' в синхронном просмотре списка"
"Дождаться переключения вкладок"
OBJECT VAR "Нужная кнопка"
"Найти контрол {('bt_enSynchroView_ShowUserCRList1')} на форме {("Найти главное окно")}" =: "Нужная кнопка"
"Нужная кнопка" pop:object:IsNil ! 'Не нашли кнопку Судебная практика' ASSERTS
"Нужная кнопка" "Кликнуть"
OnTest
"Дождаться переключения вкладок"
; // "Открываем вкладку 'Судебная практика' в синхронном просмотре списка"
: "Сравнить с эталоном количество найденных в документе вхождений с искомым контекстом"
"Убедиться, что фокус в редакторе"
"Найти далее без проверки"
'Text' "Форма БП" .TNewBaseSearchForm.FoundCountLabel pop:object:GetStrProp .
; // "Сравнить с эталоном количество найденных в документе вхождений с искомым контекстом"
: "Выполнить с развёрнутым полем Регистрация в МЮ" OBJECT IN aProc
OBJECT VAR КЗ focused:control:push >>> КЗ
'AT_REG_IN_MU' false КЗ pop:QueryCard:Attribute:SetCollapsed
TRY
aProc DO
FINALLY
'AT_REG_IN_MU' true КЗ pop:QueryCard:Attribute:SetCollapsed
END
; // "Выполнить с развёрнутым полем Регистрация в МЮ"
: "Удалить пользователя"
"Установить фокус в список контактов"
"Нажать {('Del')}"
;
: "Нажать на пункт главного меню на форме" STRING IN aStr OBJECT IN aForm
aStr aForm pop:form:FindMenuItem menuitem:Click
; // "Нажать на пункт главного меню на форме "
OBJECT FUNCTION "Найти пункт контекстного меню с именем" OBJECT IN aMenu STRING IN aStr
INTEGER VAR l_ItemIndex
0 >>> l_ItemIndex
BOOLEAN VAR l_Found
false >>> l_Found
aMenu menuitem:GetCount раз (
l_ItemIndex aMenu menuitem:GetItem >>> Result
Result menuitem:GetCaption aStr SameText >>> l_Found
l_Found ? EXIT
l_ItemIndex 1 + >>> l_ItemIndex
)
( l_Found ! ) ? ( nil >>> Result )
;
: "Нажать на пункт контекстного меню контрола" STRING IN aStr OBJECT IN aControl
// обработки второго и глубже уровней вложенности пунктов меню нет
// при необходимости допилим
OBJECT VAR l_Menu
OBJECT VAR l_Item
10 10 aControl pop:control:GetPopupMenu >>> l_Menu
"Найти пункт контекстного меню {(l_Menu)} с именем {(aStr)}" >>> l_Item
( l_Item "НЕ РАВНО" nil ) 'Не нашли пункт контекстного меню' ASSERTS
l_Item menuitem:Click
; //"Нажать на пункт контекстного меню контрола"
: "Выполнить с документом , открытым в новом окнe Гаранта и переключиться на предыдущее окно" IN aProc IN aDoc
VAR l_Main
"Сохранить активное окно" >>> l_Main
TRY
"Открываем {(aDoc)}"
"Открыть в новом окне"
aProc DO
FINALLY
l_Main "Восстановить активное окно"
END
; // "Выполнить с документом, открытым в новом окнe Гаранта и переключиться на предыдущее окно"
: "Поставить галочку в чекбоксе"
"Убедиться, что текущий контрол {( 'TvtCheckBox' )}"
OBJECT VAR l_CheckBox
"Контрол в фокусе" >>> l_CheckBox
"Получить состояние чекбокса {(l_CheckBox)}" ! IF
"Нажать {('Space')}"
ELSE
'Чекбокс уже отмечен!' .
ENDIF
; // "Поставить галочку в чекбоксе"
: "Выбрать следующее значение в комбобоксе"
"Убедиться, что текущий контрол {( 'TvtComboBoxQS' )}"
( "Контрол в фокусе" pop:control:Caption 'Слева' SameStr ) IF
( "Нажать {('Right')}" )
ELSE
'Значение комбобокса не Слева!' .
ENDIF
; // "Поставить галочку в чекбоксе"
: "Нажать кнопку Восстановить все в Настройке конфигурации"
OBJECT VAR "Восстановить все"
OBJECT VAR "Модальная форма"
"Контрол в фокусе" pop:control:GetAnotherParentForm =: "Модальная форма"
"Найти контрол {('bt_enResult_opRestoreAllSettings')} по имени на форме {("Модальная форма")}" >>> "Восстановить все"
"Восстановить все" "Кликнуть"
; // "Нажать кнопку Восстановить все в Настройке конфигурации"
: "Измерить высоту ноды дерева " OBJECT IN aControl
aControl "Высота ноды дерева" .
; // "Измерить высоту ноды дерева "
: "Установить фокус в Дерево стилей"
"Перевести фокус в {(контрол::f_StyleTreeView)} на форме {(форма::StyleEditorNavigator)}"
OnTest
; // "Установить фокус в Дерево стилей"
: "Сравнить контекстное меню скроллера контрола с эталоном" OBJECT IN aControl
INTEGER VAR X
OBJECT VAR Контрол
aControl >>> Контрол
Контрол "Померить ширину" =: X
X 5 - >>> X
"Сравнить контекстное меню для контрола {( Контрол )} для точки {( X 25 )} с эталоном"
; // "Сравнить контекстное меню скроллера контрола с эталоном"
: "Имитируя интеграцию с MS Word найти контекст в поле " STRING IN aContext STRING IN aQueryCard
[[ '
'aContext'
'
]] strings:Cat integration:OpenLink
; // "Имитируя интеграцию с MS Word найти контекст в поле "
: "Выполнить и нажать Да" IN aProc
wait:Yes
TRY
aProc DO
FINALLY
waited:? ASSERT
END
; // "Выполнить и нажать Да"
: "Получить выделенные элементы списка в формате" STRING INTEGER IN aFormat
// cc:Copy
// - затычка, иначе не будет правильно имя формата в код формата преобразовываться
aFormat "Контрол в фокусе" "Сравнить выделенные элементы списка в нужном формате"
; // "Сравнить выделенные элементы списка с эталоном в формате"
: "Сравнить выделенные элементы списка с эталоном в формате RTF"
"Получить выделенные элементы списка в формате {(ns_ffRTF)}" .
; // "Сравнить выделенные элементы списка с эталоном в формате RTF"
: "Ищем строку в эталоне списка" STRING IN aStr
STRING VAR Etalon
"Получить выделенные элементы списка в формате {(ns_ffRTF)}" >>> Etalon
Etalon aStr "Определить позицию найденной строки в эталоне" БОЛЬШЕ 0 IF
( [[ ' Строка: ' aStr ' найдена. ' ]] strings:Cat .
EXIT )
ELSE
( [[ ' Строка: ' aStr ' не найдена. ' ]] strings:Cat . )
ENDIF
; // "Ищем строку в эталоне списка"
: "Установить курсор по координатам относительно контрола и сравнить с эталоном хинт и контекстное меню" INTEGER IN X INTEGER IN Y OBJECT IN aControl
: Действия
"Установить курсор мыши по координатам {( X Y )} относительно контрола {(aControl)}"
9 раз ( "Дать системе перерисоваться"
100 SLEEP )
"Сравнить текст хинта с эталоном"
"Сравнить контекстное меню для контрола {(aControl)} для точки {( X Y )} с эталоном"
; // Действия
"Запомнить позицию мыши и выполнить {(@ Действия)}"
; // "Установить курсор по координатам относительно контрола и сравнить с эталоном хинт и контекстное меню"
: "Установить курсор по координатам относительно контрола и сравнить с эталоном его хинт" INTEGER IN X INTEGER IN Y OBJECT IN aControl
: Действия
"Установить курсор мыши по координатам {( X Y )} относительно контрола {(aControl)}"
"Дождаться переключения вкладок"
9 раз ( "Дать системе перерисоваться"
100 SLEEP )
"Сравнить текст хинта с эталоном"
; // Действия
"Запомнить позицию мыши и выполнить {(@ Действия)}"
; // "Установить курсор по координатам относительно контрола и сравнить с эталоном его хинт"
WORDWORKER "Выполнить с пунктом меню 'показ моих комментариев'"
VAR Item
'Документы/Комментарии' "Найти главное окно" pop:form:FindMenuItem =: Item
2 Item menuitem:GetItem =: Item
application:ActionIdle
Item "Пункт меню видим?"
Item
WordToWork DO
; // "Выполнить с пунктом меню 'показ моих комментариев'"
: "Включить показ моих комментариев"
"Выполнить с пунктом меню 'показ моих комментариев'" ( BOOLEAN IN aVisible OBJECT IN anItem aVisible ! ? ( anItem menuitem:Click )
'Показать мои комментарии' РАВНО ( anItem menuitem:GetCaption ) ASSERT )
;
: "Выключить показ моих комментариев"
"Выполнить с пунктом меню 'показ моих комментариев'" ( BOOLEAN IN aVisible OBJECT IN anItem aVisible ? ( anItem menuitem:Click )
'Скрыть мои комментарии' РАВНО ( anItem menuitem:GetCaption ) ASSERT )
;
: "Сделать с выключенными пользовательскими комментариями" IN aProc
"Выключить показ моих комментариев"
"Дать системе перерисоваться"
TRY
aProc DO
FINALLY
"Включить показ моих комментариев"
END
; // "Сделать с выключенными пользовательскими комментариями"
: "Имитируя интеграцию с MS Word найти контекст через БП" STRING IN aContext
[[ '
'aContext'
'aContext'
'
]] strings:Cat integration:OpenLink
; // "Имитируя интеграцию с MS Word найти контекст через БП"
: "Перевести фокус в дерево советов дня"
"Перевести фокус в {('WordsTree')} на форме {(форма::CommonDiction)}"
OnTest
; // "Перевести фокус в дерево советов дня"
: "Удалить фильтр без закрытия вкладки с именем для" STRING IN aName IN aKZ
VAR Сделано
НЕТ >>> Сделано
INTERFACE VAR l_Node
aKZ DO
"Открыть фильтры"
ПОКА ( НЕ Сделано )
BEGIN
контрол::FiltersList:push "Текущая нода дерева" =: l_Node
l_Node "Предыдущая нода" IF
ДА >>> Сделано
ENDIF
( l_Node "Текст ноды" "НЕ РАВНО" aName ) IF
"Стрелка вниз"
ELSE
: Нашли_фильтр
"Нажать Del"
; // Нашли_фильтр
"Выполнить {(@ Нашли_фильтр )} и нажать Да"
ENDIF
END
; // "Удалить фильтр без закрытия вкладки с именем для"
: "Сделать вкладку Список редакций плавающей"
"Сделать вкладку {(контрол::RedactionTree)} на форме {(форма::Redactions)} плавающей"
;
: "Сделать вкладку Список редакций неплавающей"
"Сделать вкладку {(контрол::RedactionTree)} на форме {(форма::Redactions)} неплавающей"
;
: "Стоит ли галочка у элемента дерева" INTEGER IN aNode OBJECT IN aControl
INTEGER VAR l_ImageIndex
BOOLEAN VAR l_Checked
aNode "Узнать индекс иконки в дереве {(aControl)}" >>> l_ImageIndex
( l_ImageIndex РАВНО 11 ) ИЛИ ( l_ImageIndex РАВНО 13 ) ИЛИ ( l_ImageIndex РАВНО 15 ) >>> l_Checked
l_Checked IF
[[ 'Галочка у редакции ' aNode IntToStr ' ЕСТЬ!' ]] strings:Cat .
ELSE
[[ 'Галочки у редакции ' aNode IntToStr ' НЕТ!' ]] strings:Cat .
ENDIF
;
: "Стоит ли галочка у верхней редакции?"
"Стоит ли галочка у элемента {(0)} дерева {(контрол::RedactionTree:push)}"
; // "Стоит ли галочка у верхней редакции?"
: "Стоит ли галочка у нижней редакции?"
INTEGER VAR ItemsCount
контрол::RedactionTree:push "Узнать количество элементов дерева" >>> ItemsCount
ItemsCount 1 - >>> ItemsCount
"Стоит ли галочка у элемента {(ItemsCount)} дерева {(контрол::RedactionTree:push)}"
; // "Стоит ли галочка у нижней редакции?"
BOOLEAN FUNCTION IsEven INTEGER IN aValue
aValue 2 / 2 * РАВНО aValue >>> Result
;
: "См. ежедневный мониторинг законодательства в разделе Новости онлайн"
ОМ
OBJECT VAR "Рубрикатор"
"Перейти по ссылке на {('Мониторинг законодательства')} в области {(контрол::tvLawNews)}"
"Контрол в фокусе" "Получить родительскую форму" =: "Рубрикатор"
'NewDocLabel' "Найти контрол по имени на форме {("Рубрикатор")}" "Установить фокус" ASSERT
;
: "Установить фокус в рубрикатор"
контрол::RubricatorList:push "Установить фокус"
'Не удалось установить фокус в рубрикатор' ASSERTS
;
: "Сравнить с эталоном имя последнего фильтра на вкладке Фильтры"
// Проверяем, что пользовательский фильтр удалился
ОМ
"Очистить историю"
ППР
"Открыть фильтры"
"Перейти к концу"
"Получить имя текущего элемента дерева {(контрол::FiltersList)}"
; // "Сравнить с эталоном имя последнего фильтра на вкладке Фильтры"
: "Установить фокус в контекстный фильтр"
"Установить фокус в контекстный фильтр списка Инфарма"
; // "Установить фокус в контекстный фильтр"
: "Перевести фокус в поле 'Страна' в КЗ ИнФарма"
"Убедиться, что фокус в редакторе"
'AT_PHARM_COUNTRY' "Контрол в фокусе" "Установить фокус в поле КЗ"
;
: "Установить фокус в поле 'Орган/Источник' в КЗ ОИЗ"
"Убедиться, что фокус в редакторе"
'AT_SOURCE_REVIEW' "Контрол в фокусе" "Установить фокус в поле КЗ"
;
: "Узнать, были ли во время фильтрации ошибки"
"Узнать, корректен ли контекст (был ли звуковой сигнал)" IF
'Некорретный контекст (звуковой сигнал был)' .
ELSE
'Корретный контекст (звукового сигнала не было)' .
ENDIF
; // "Узнать, были ли во время фильтрации ошибки"
: "Выполнить с вкладкой Список конфигураций" IN aProc
"Открыть список конфигураций и перевести туда фокус"
"Дать системе перерисоваться"
TRY
aProc DO
FINALLY
"Закрыть список конфигураций"
END
; // "Выполнить с вкладкой Список конфигураций"
: "в поле 'Раздел/Тема' ввести с операцией" STRING IN aStr INTEGER IN aL
"Убедиться, что фокус в редакторе"
aL 'AT_CLASS' aStr "Контрол в фокусе" "Ввести текст в поле КЗ с операцией"
;
: "Ввести контекст первого уровня" STRING IN aContext
// специальное слово для выбора контекста первого уровня (для КЗ)
"Обработать Enter модально" (
OBJECT VAR Parent
"Контрол в фокусе" "Получить родительскую форму" =: Parent
"Найти контрол {('InternalEditor')} на форме {( Parent )}" "Установить фокус"
"Ввести строку {(aContext)}"
"Дождаться переключения вкладок"
контрол::AttributeTree:push "Установить фокус"
"Перейти к концу"
"Нажать {('Enter')}" )
; // "Ввести контекст первого уровня"
: "Узнать позицию вертикального скроллбара у текущего редактора"
true "Контрол в фокусе" "Узнать положение скроллера"
; // "Узнать позицию вертикального скроллбара у текущего редактора"
: "Узнать позицию вертикального скроллбара у контрола" OBJECT IN aControl
true aControl "Узнать положение скроллера"
; // "Узнать позицию вертикального скроллбара у контрола"
: "Узнать максимальное положение вертикального скроллбара у текущего редактора"
true "Контрол в фокусе" "Узнать максимальное положение скроллера"
; // "Узнать позицию вертикального скроллбара у текущего редактора"
: "Убедиться, что вертикальный скроллер контрола прокручен до конца" OBJECT IN aCtrl
INTEGER VAR l_Pos
INTEGER VAR l_Min
INTEGER VAR l_Max
INTEGER VAR l_Page
true aCtrl "Информация о скроллбаре" >>> l_Max >>> l_Min >>> l_Page >>> l_Pos
( l_Pos "БОЛЬШЕ ИЛИ РАВНО" ( ( l_Max l_Min - ) l_Page - ) ) 'Вертикальный скроллер не в конце!' ASSERTS
; // "Убедиться, что вертикальный скроллер контрола прокручен до конца"
: "Перевести фокус в поле 'Информационный блок' в ППР"
"Убедиться, что фокус в редакторе"
'AT_BASES' "Контрол в фокусе" "Установить фокус в поле КЗ"
; // "Перевести фокус в поле 'Информационный блок' в ППР"
: "Установить фокус на кнопку Типа наследования группы Цвет"
'f_FontForeColorInheritanceButton' "Диалог редактора стилей" "Найти контрол по имени на форме" "Установить фокус"
OnTest
; // "Установить фокус на кнопку Типа наследования группы Цвет"
: "Установить фокус в комбобокс выбора цвета"
'f_FontForeColorBox' "Измененный диалог редактора стилей" "Найти контрол по имени на форме" "Установить фокус"
OnTest
; // "Установить фокус в комбобокс выбора цвета"
: "Установить фокус в поле 'E-mail' в ППО"
"Убедиться, что фокус в редакторе"
'AT_EMAIL' "Контрол в фокусе" "Установить фокус в поле КЗ"
; // "Установить фокус в поле 'E-mail' в ППО"
: "Потянуть вертикальный скроллер контрола вверх" OBJECT IN aControl
aControl pop:control:VScrollerVisible 'У контрола нет вертикального скроллбара' ASSERTS
VAR X
VAR Y
VAR Yy
// Получаем верхний правый угол контрола
"Померить ширину {(aControl)}" >>> X
"Померить высоту {(aControl)}" >>> Y
Y >>> Yy
// Переводим в координаты экрана
"Привести координаты {( @ X @ Y )} для контрола {(aControl)} к экранным"
// поправка на размер скроллера. Надо бы GetSystemMetrics использовать...или как там его
X 10 - >>> X
Y 50 - >>> Y
: Тянем_потянем
"Установить курсор мыши по координатам {(X Y)}"
Y ( Yy 80 - ) - >>> Y
THREAD ( "Зажать левую кнопку мыши"
"Установить курсор мыши по координатам {(X Y)}"
"Отпустить левую кнопку мыши" )
50 SLEEP
;
"Запомнить позицию мыши и выполнить {(@ Тянем_потянем)}"
; // "Потянуть вертикальный скроллер контрола вверх"
: "Создать фильтр и выполнить с ним , а потом удалить" OBJECT IN Действия
: aFilter "Полный путь скрипта" "Имя скрипта" ;
: Сохраняем_фильтр
"Дождаться переключения вкладок"
"Ввести строку {(aFilter)}"
Действия DO
"Нажать Ok"
; // Сохраняем_фильтр
: Создаем_фильтр
@ ( "Нажать Ok" ) MODAL ( Сохраняем_фильтр )
; // Создаем_фильтр
ППР
"Открыть фильтры"
@ ( "Создать новый фильтр" ) MODAL ( Создаем_фильтр )
ППР
"Дождаться переключения вкладок"
"Открыть фильтры"
5 раз ( 200 SLEEP OnTest )
"Удалить фильтр с именем {(aFilter)}"
; // "Создать фильтр и выполнить с ним а потом удалить
: "Свернуть и сразу развернуть главное окно"
"Дождаться переключения вкладок"
OBJECT VAR Главное_окно
"Найти главное окно" >>> Главное_окно
THREAD (
5 раз ( 100 SLEEP OnTest )
"Развернуть окно {(Главное_окно)}" )
"Свернуть окно {(Главное_окно)}"
20 раз ( 100 SLEEP OnTest )
"Дождаться переключения вкладок"
; // "Свернуть и сразу развернуть главное окно"
: "Выполнить с вкладкой Журнал работы" IN aProc
"Открыть журнал работы"
"Развернуть текущее дерево"
"Дождаться переключения вкладок"
TRY
aProc DO
FINALLY
"Закрыть журнал работы"
END
; // "Выполнить с вкладкой Журнал работы"
BOOLEAN FUNCTION "Узнать, активна ли кнопка Найти в панели БП?"
'Enabled' "Форма БП" .TNewBaseSearchForm.FindBtn pop:object:GetOrdProp РАВНО 1 >>> Result
;
: "Выделена ли нода дерева ?" INTEGER IN aNode OBJECT IN aControl
aNode aControl "Узнать, выделена ли нода дерева?" .
; // "Выделена ли нода дерева ?"
: "Отделить текст в эталоне"
'----------' .
; // "Отделить текст в эталоне"
: "Открыть гиперссылку в новом окне, выполнить в нём и переключиться на предыдущее окно" IN aProc
VAR l_Main
"Сохранить активное окно" >>> l_Main
TRY
"Открыть гиперссылку в новом окне"
aProc DO
FINALLY
l_Main "Восстановить активное окно"
END
; // "Открыть гиперссылку в новом окне, выполнить в нём и переключиться на предыдущее окно"
: "Установить фокус в поле 'Дата принятия С' "
"Убедиться, что фокус в редакторе"
'AT_PUBLISHING_DATE' "Контрол в фокусе" "Установить фокус в поле КЗ"
;
: "в поле 'Международное наименование' ввести" STRING IN aStr
"Убедиться, что фокус в редакторе"
'AT_PHARM_INTERNATIONAL_NAME' aStr "Контрол в фокусе" pop:QueryCard:SetAttribute
;
: "Проверить, что введено в контексный фильтр левого навигатора"
OBJECT VAR "Контекстный фильтр"
"Найти контрол {('InternalEditor')} на форме {("Левый навигатор")}" =: "Контекстный фильтр"
"Контекстный фильтр" "Заголовок контрола" .
; // "Проверить, что введено в контексный фильтр левого навигатора"
: "Проверить, выделен ли элемент в контроле класса TvtLister" IN aNum IN aControl
OBJECT VAR Lister
"Найти контрол {(aControl)} на форме {("Найти главное окно")}" >>> Lister
aNum Lister "Узнать, выделен ли элемент в списке" IF
[[ 'Элемент ' aNum IntToStr ' выделен!' ]] strings:Cat .
ELSE
[[ 'Элемент ' aNum IntToStr ' не выделен!' ]] strings:Cat .
ENDIF
; //"Проверить, выделен ли элемент в контроле "
: "Выбрать в дереве атрибутов контекст" STRING IN aString
@ ( "Нажать {('Enter')}" ) MODAL (
( "Перейти по ссылке {( aString )} в дереве {(контрол::AttributeTree)}" ) )
; // "Выбрать в дереве атрибутов контекст"
: "Установить фокус в поле 'Раздел/Тема' "
"Убедиться, что фокус в редакторе"
'AT_CLASS' "Контрол в фокусе" "Установить фокус в поле КЗ"
; // "Установить фокус в поле 'Раздел/Тема' "
: "Выполнить с включёнными метками на саб-панели" IN aProc
"Показывать метки"
TRY
aProc DO
FINALLY
"Перевести фокус в текст"
"Показывать метки"
END
; // "Выполнить с включёнными метками на саб-панели"
: "Выполнить для проверки скрипта " IN aProc IN aNum
: Действия
"Открываем {(3000)}"
aNum раз ( "Перейти к следующей ссылке" )
"Перейти по текущей ссылке"
'Запускаем скрипт по ссылке:' .
"Сравнить текущий список с эталоном"
"Отделить текст в эталоне"
"Дождаться переключения вкладок"
: скрипт
'Запускаем скрипт вручную:' .
aProc DO
; // скрипт
@ скрипт RunSearch
"Сравнить текущий список с эталоном"
; // Действия
"Выполнить {(@ Действия)} с базой {('scripts')}"
; // "Выполнить для проверки скрипта "
: "Проверка, закрылся ли баллон 'Информация об изменениях' "
"Открываем НК"
"В документе не должно быть комментариев"
6 раза ( "Перейти на параграф вниз" )
"Переместиться в начало строки"
"Выделить слово справа"
"Контрол в фокусе" "Выделенный текст редактора" "Заменить непечатаемые символы" РАВНО 'Часть ' ! IF
'Вероятно, не закрылся баллон Информация об изменениях!' .
ENDIF
; // "Проверка, закрылся ли баллон 'Информация об изменениях' "
: "Установить курсор мыши на ссылку 'информация об изменениях' в НК"
VAR Editor
VAR x
VAR y
"Открываем НК"
"Контрол в фокусе" >>> Editor
Editor pop:editor:ParaMiddleCoordsToScreen >>> y >>> x
y 80 + >>> y
x y "Установить курсор мыши по координатам"
"Узнать индекс курсора мыши" "Узнать имя индекс курсора мыши" РАВНО 'crHandPoint' ! IF
'Не попали на ссылку Информация об изменениях! Тест прератил работу!' .
HALT
ENDIF
; // "Установить курсор мыши на ссылку 'информация об изменениях' в НК"
: "Сравнить с эталоном курсор мыши и хинт над выделенной сссылкой"
: Действия
VAR x
VAR y
"Контрол в фокусе" pop:editor:CursorCoordsToScreen >>> y >>> x
y 18 - >>> y
x 30 - >>> x
x y "Установить курсор мыши по координатам"
9 раз ( "Дать системе перерисоваться"
100 SLEEP )
[[ 'Курсор: ' "Узнать индекс курсора мыши" "Узнать имя индекс курсора мыши" ]] strings:Cat .
[[ 'Хинт: ' "Узнать текущий хинт" ]] strings:Cat .
; // Действия
"Запомнить позицию мыши и выполнить {(@ Действия )}"
; // "Сравнить с эталоном курсор мыши и хинт над выделенной сссылкой"
: "Выполнить с зажатой клавишей" IN aProc STRING IN aString
TRY
"Зажать кнопку {(aString)}"
aProc DO
FINALLY
"Отпустить кнопку {(aString)}"
END
; // "Выполнить с зажатой клавишей"
: "Открываем вкладку 'Справка к документу' в синхронном просмотре списка"
"Дождаться переключения вкладок"
OBJECT VAR "Нужная кнопка"
"Найти контрол {('bt_enSynchroView_ShowRelated')} на форме {("Найти главное окно")}" =: "Нужная кнопка"
"Нужная кнопка" "Узнать, существует ли объект" ! 'Не нашли кнопку Справка к документу' ASSERTS
"Нужная кнопка" "Кликнуть"
; // "Открываем вкладку 'Справка к документу' в синхронном просмотре списка"
: "Кликаем кнопку на тулбаре" IN aControl
"Дождаться переключения вкладок"
OBJECT VAR "Нужная кнопка"
"Найти контрол {(aControl)} на форме {("Найти главное окно")}" =: "Нужная кнопка"
"Нужная кнопка" "Кликнуть"
; // "Кликаем кнопку на тулбаре"
: "Путь до контрола: раз вниз, раз Tab" IN aNumDown IN aNumTab
aNumDown ( "Стрелка вниз" )
aNumTab ( "Нажать {('Tab')}" )
; // "Путь до контрола: раз вниз, раз Tab"
: "Проверка хинта для контрола" OBJECT IN aControl
: Действия
"Установить курсор мыши по координатам {( 5 5 )} относительно контрола {(aControl)}"
"Дождаться переключения вкладок"
9 раз ( "Дать системе перерисоваться"
100 SLEEP )
"Узнать, виден ли хинт" IF
'Хинт:' .
"Сравнить текст хинта с эталоном"
ELSE
'Хинта нет.' .
ENDIF
; // Действия
"Запомнить позицию мыши и выполнить {(@ Действия)}"
; // "Проверка хинта для контрола"
: "Сохраняем объект в папку Мои документы с именем " STRING IN aName
: Действия
"Ввести строку {(aName)}"
OBJECT VAR "Форма сохранения в МД"
OBJECT VAR "Кнопка ОК"
"Контрол в фокусе" 2 раза "Получить родительскую форму" =: "Форма сохранения в МД"
"Форма сохранения в МД" "Узнать, существует ли объект" ! 'Не нашли форму сохранения в МД' ASSERTS
'bt_enResult_opOk' "Форма сохранения в МД" "Найти контрол по имени на форме" =: "Кнопка ОК"
"Кнопка ОК" "Кликнуть"
; // Действия
3 раза "Дождаться переключения вкладок"
@ ( "Сохранить в Мои документы" ) MODAL ( Действия )
; // "Сохраняем объект в папку Мои документы с именем "
....
USES
WordsTranslation.script
WordsTuning.script
SysUtils.script
Mouse.script
Editor.script
Controls.script
Forms.script
HLTCLike.script
;
: "Сравнить с эталоном текст редактора " OBJECT IN aControl
aControl "Установить фокус"
"Дождаться переключения вкладок"
"Выделить всё"
"Сравнить выделенный текст текущего редактора с эталоном"
; // "Сравнить с эталоном текст редактора"
: "Вывести в эталон размеры и координаты контрола с округлением до " OBJECT IN aControl IN aNum
VAR L
VAR T
VAR W
VAR H
( ( aControl "Померить отступ слева" aNum / ) aNum * ) >>> L
[[ 'Left = ' L IntToStr ]] strings:Cat .
( ( aControl "Померить отступ сверху" aNum / ) aNum * ) >>> T
[[ 'Top = ' T IntToStr ]] strings:Cat .
( ( aControl "Померить ширину" aNum / ) aNum * ) >>> W
[[ 'Width = ' W IntToStr ]] strings:Cat .
( ( aControl "Померить высоту" aNum / ) aNum * ) >>> H
[[ 'Height = ' H IntToStr ]] strings:Cat .
; // "Получить размеры и координаты контрола"
: "Вывести в эталон размеры контрола с округлением до " OBJECT IN aControl IN aNum
VAR W
VAR H
( ( aControl "Померить ширину" aNum / ) aNum * ) >>> W
[[ 'Width = ' W IntToStr ]] strings:Cat .
( ( aControl "Померить высоту" aNum / ) aNum * ) >>> H
[[ 'Height = ' H IntToStr ]] strings:Cat .
; // "Сравнить с эталоном размеры контрола"
: "Аккуратно сравнить с эталоном целочисленное свойство объекта" STRING IN aProp OBJECT IN anObj
aProp anObj pop:object:HasProp ? (
STRING VAR l_Value
aProp anObj pop:object:GetOrdProp IntToStr >>> l_Value
[[ aProp ': ' l_Value ]] strings:Cat .
)
;
: "Аккуратно сравнить с эталоном объектное свойство объекта" STRING IN aProp OBJECT IN anObj
aProp anObj pop:object:HasProp ? (
STRING VAR l_Value
aProp anObj pop:object:GetObjProp pop:object:IsNil IF 'nil' ELSE 'assigned' ENDIF >>> l_Value
[[ aProp ': ' l_Value ]] strings:Cat .
)
;
: "Аккуратно сравнить с эталоном целочисленные свойства объекта" IN anOrdProps OBJECT IN anObj
INTEGER VAR l_Loop
0 >>> l_Loop
anOrdProps array:Count раз (
"Аккуратно сравнить с эталоном целочисленное свойство {( l_Loop anOrdProps [i] )} объекта {(anObj)}"
l_Loop 1 + >>> l_Loop
)
;
: "Проверить расширенно параметры и контекстное меню контролов, содержимое тулбаров для формы" BOOLEAN IN aToolbar STRING IN aForm
OBJECT FUNCTION "Форма от которой начинаем перебор"
"Найти окно по имени {(aForm)}" =: Result
;
: Действия_с_контролом OBJECT IN aCtrl
aCtrl "Узнать, существует ли объект" ! IF
( 'TvcmDockPanel' aCtrl pop:object:Inherits )
ИЛИ ( 'TvcmToolButtonDef' aCtrl pop:object:Inherits )
ИЛИ ( 'TvcmDockDef' aCtrl pop:object:Inherits )
ИЛИ ( 'TvcmToolbar' aCtrl pop:object:Inherits )
ИЛИ ( aCtrl "Узнать имя контрола" РАВНО '' ) IF
EXIT
ELSE
( aCtrl ЯВЛЯЕТСЯ class::Ten_MainMenuNew ) IF
'en_MainMenuNew : Ten_MainMenuNew' .
aCtrl "Заголовок контрола" .
// такая вот заплатка, чтобы не получать разницы с эталоном из-за разного номера en_MainMenuNew
ELSE
aCtrl .
( aCtrl "Имя компонента" РАВНО контрол::ShellInfoLabel )
ИЛИ ( aCtrl "Имя компонента" РАВНО 'dD1EqD2' )
ИЛИ ( aCtrl "Имя компонента" РАВНО 'dD1Only' )
ИЛИ ( aCtrl "Имя компонента" РАВНО 'dD2Only' )
ИЛИ ( aCtrl "Имя компонента" РАВНО 'dD1' )
ИЛИ ( aCtrl "Имя компонента" РАВНО 'dD2' )
ИЛИ ( aCtrl "Имя компонента" РАВНО контрол::trContactList )
IF
'Заголовок не сравниваем' .
ELSE
aCtrl "Заголовок контрола" .
ENDIF // заголовок контрола
ENDIF // исключаю MainMenuNew
( 'TPanel' aCtrl pop:object:Inherits )
ИЛИ ( aCtrl ЯВЛЯЕТСЯ class::TvtPanel )
ИЛИ ( aCtrl ЯВЛЯЕТСЯ class::TnscEditor ) IF
"Аккуратно сравнить с эталоном целочисленные свойства {( [[ 'BevelWidth' 'BorderStyle' 'BevelOuter' 'BevelInner' ]] )} объекта {(aCtrl)}"
ENDIF
( aCtrl "Перейти к родительской форме" "Узнать, существует ли объект" ) И
( aCtrl "Форма от которой начинаем перебор" ?== ) IF
// ( aCtrl pop:control:GetMainForm aCtrl ?== ) IF
'Position:' 'Position' aCtrl "Узнать численную переменную объекта" IntToStr Cat .
// "Сравнить с эталоном размеры контрола {(aCtrl)}"
"Вывести в эталон размеры контрола {(aCtrl)} с округлением до {(5)}"
ELSE
// "Получить размеры и координаты контрола {(aCtrl)}"
"Вывести в эталон размеры и координаты контрола {(aCtrl)} с округлением до {(5)}"
ENDIF // исключаем координаты
"Аккуратно сравнить с эталоном целочисленные свойства {( [[ 'TabOrder' 'ImageIndex' 'TabStop' 'Align' 'Anchors' 'BorderWidth' 'ReadOnly' ]] )} объекта {(aCtrl)}"
"Аккуратно сравнить с эталоном объектное свойство {('Images')} объекта {(aCtrl)}"
( aCtrl ЯВЛЯЕТСЯ class::TvtLabel ) IF
"Аккуратно сравнить с эталоном целочисленное свойство {('Transparent')} объекта {(aCtrl)}"
ENDIF // Transparent
( aCtrl ЯВЛЯЕТСЯ class::TnscTreeView )
ИЛИ ( aCtrl ЯВЛЯЕТСЯ class::TnscEditor ) IF
'Вертикальный скроллер:' aCtrl "Узнать, есть ли у контрола вертикальный скроллер" ToPrintable Cat .
'Горизонтальный скроллер:' aCtrl "Узнать, есть ли у контрола горизонтальный скроллер" ToPrintable Cat .
ENDIF // скроллеры для деревьев и редакторов
( 'Ttb97MoreButton' aCtrl pop:object:Inherits ) IF
'Не сравниваем контекстное меню' .
ELSE
"Сравнить контекстное меню для контрола {(aCtrl)} для точки {( 0 0 )} с эталоном"
ENDIF // исключаем контекстное меню для Ttb97MoreButton
aCtrl ЯВЛЯЕТСЯ class::TnscEditor IF
'--- Текст редактора: ---' .
"Сравнить с эталоном текст редактора {(aCtrl)}"
ENDIF
ENDIF // исключаем TvcmDockPanel
'---------------' .
ENDIF // проверка контрола
; // Действия_с_контролом
'--------------- Контрол в фокусе: ------------------' .
"Контрол в фокусе" .
'--------------- Перечень дочерних контролов, их размеры, координаты и контекстное меню: -------------------' .
'Форма:' .
"Аккуратно сравнить с эталоном целочисленное свойство {('BorderStyle')} объекта {("Форма от которой начинаем перебор")}" '---------------' .
"выполнить для всех контролов {("Форма от которой начинаем перебор")}" Действия_с_контролом
aToolbar ? ( '--------------- Содержимое тулбаров: -------------------' .
"Сравнить содержимое тулбаров с эталоном полностью" )
; // "Проверить расширенно параметры и контекстное меню контролов, содержимое тулбаров для окна
: "Проверить параметры и контекстное меню контролов, содержимое тулбаров для формы" STRING IN aForm
"Проверить расширенно параметры и контекстное меню контролов, содержимое тулбаров {(true)} для формы {(aForm)}"
; // "Проверить параметры и контекстное меню контролов, содержимое тулбаров для формы"
: "Проверить параметры и контекстное меню контролов для формы" STRING IN aForm
"Проверить расширенно параметры и контекстное меню контролов, содержимое тулбаров {(false)} для формы {(aForm)}"
; // "Проверить параметры и контекстное меню контролов для формы"
: "Подготовить окно Гаранта (запомнить состояние и размеры) к сравнению формы с эталоном и выполнить для ее открытия и сравнения " STRING IN aForm OBJECT IN aProc
: Сравнить_контролы_и_их_контекстные_меню_с_эталоном
aProc DO
; // Сравнить_контролы_и_их_контекстные_меню_с_эталоном
: Установить_размеры_окну
"Выставить форме размеры {( 1150 800 )} и {(@ Сравнить_контролы_и_их_контекстные_меню_с_эталоном )}"
; // Установить_размеры_окну
"Восстановить все настройки текущей конфигурации"
"Сделать {(@ Установить_размеры_окну )} с изменением состояния и размеров окна {("Найти главное окно")}"
; // "Подготовить окно Гаранта (запомнить состояние и размеры) к сравнению формы с эталоном и выполнить для ее открытия и сравнения "
: "Сравнить содержимое тулбара на форме с эталоном" STRING IN aForm
: Действия OBJECT IN aObj
( aObj ЯВЛЯЕТСЯ class::TvcmToolbar ) ? (
( aObj pop:control:Visible И ( aObj pop:control:ControlCount БОЛЬШЕ 1 ) ) ? (
aObj .
'Order = ' 'DockRow' aObj pop:object:GetOrdProp IntToStr Cat .
'---------------' .
aObj EnumerateControls ( OBJECT IN aControl
( aControl "НЕ ЯВЛЯЕТСЯ" class::Ttb97MoreButton ) ? (
aControl .
( aControl "НЕ ЯВЛЯЕТСЯ" class::TvcmComboBox ) ? (
aControl pop:control:Caption .
'Активность:' aControl "Убедиться, что контрол активен" ToPrintable Cat .
'---' .
)
)
)
'' .
)
)
;
OBJECT VAR work_form
"Найти окно по имени {(aForm)}" >>> work_form
work_form "выполнить для всех контролов" Действия
; // "Сравнить содержимое тулбара на форме с эталоном"
: "Сделать в обеих конфигурациях" OBJECT IN Действия
Действия DO
'*********------------Расширенная конфигурация:---------------********' .
ОМ
"Сделать {(Действия)} в расширенной конфигурации"
;
///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////
STRING FUNCTION "пробелов" INTEGER IN aCount
aCount ' ' char:Dupe >>> Result
;
: "Аккуратно сравнить с эталоном целочисленное свойство объекта с отступом" STRING IN aProp OBJECT IN anObj INTEGER IN aLevel
STRING VAR l_Indent
"{(aLevel)} пробелов" >>> l_Indent
aProp anObj pop:object:HasProp ? (
STRING VAR l_Value
aProp anObj pop:object:GetOrdProp IntToStr >>> l_Value
[[ l_Indent aProp ': ' l_Value ]] strings:Cat .
)
;
: "Аккуратно сравнить с эталоном объектное свойство объекта с отступом" STRING IN aProp OBJECT IN anObj INTEGER IN aLevel
STRING VAR l_Indent
"{(aLevel)} пробелов" >>> l_Indent
aProp anObj pop:object:HasProp ? (
STRING VAR l_Value
aProp anObj pop:object:GetObjProp pop:object:IsNil IF 'nil' ELSE 'assigned' ENDIF >>> l_Value
[[ l_Indent aProp ': ' l_Value ]] strings:Cat .
)
;
: "Аккуратно сравнить с эталоном целочисленные свойства объекта с отступом" IN anOrdProps OBJECT IN anObj INTEGER IN aLevel
INTEGER VAR l_Loop
0 >>> l_Loop
anOrdProps array:Count раз (
"Аккуратно сравнить с эталоном целочисленное свойство {( l_Loop anOrdProps [i] )} объекта {(anObj)} с отступом {(aLevel)}"
l_Loop 1 + >>> l_Loop
)
;
: "Вывести в эталон размеры и координаты контрола с округлением до и отступом" OBJECT IN aControl INTEGER IN aNum INTEGER IN aLevel
VAR L
VAR T
VAR W
VAR H
STRING VAR l_Indent
"{(aLevel)} пробелов" >>> l_Indent
( ( aControl "Померить отступ слева" aNum / ) aNum * ) >>> L
[[ l_Indent 'Left: ' L IntToStr ]] strings:Cat .
( ( aControl "Померить отступ сверху" aNum / ) aNum * ) >>> T
[[ l_Indent 'Top: ' T IntToStr ]] strings:Cat .
( ( aControl "Померить ширину" aNum / ) aNum * ) >>> W
[[ l_Indent 'Width: ' W IntToStr ]] strings:Cat .
( ( aControl "Померить высоту" aNum / ) aNum * ) >>> H
[[ l_Indent 'Height: ' H IntToStr ]] strings:Cat .
; // "Получить размеры и координаты контрола"
: "Сравнить с эталоном свойства контрола с отступом" OBJECT IN aControl INTEGER IN aLevel
STRING VAR l_Indent
"{(aLevel)} пробелов" >>> l_Indent
( aControl ЯВЛЯЕТСЯ class::TCustomForm ) И ( aControl pop:control:GetParent pop:object:IsNil ) IF
"Аккуратно сравнить с эталоном целочисленное свойство {('Position')} объекта {(aControl)} с отступом {(aLevel)}"
ELSE
"Вывести в эталон размеры и координаты контрола {(aControl)} с округлением до {(5)} и отступом {(aLevel)}"
ENDIF
"Аккуратно сравнить с эталоном целочисленные свойства {( [['BevelWidth' 'BorderStyle' 'BevelOuter'
'BevelInner' 'TabOrder' 'ImageIndex'
'TabStop' 'Align' 'Anchors' 'BorderWidth'
'ReadOnly' 'Transparent'
]] )} объекта {(aControl)} с отступом {(aLevel)}"
"Аккуратно сравнить с эталоном объектное свойство {('Images')} объекта {(aControl)} с отступом {(aLevel)}"
( aControl ЯВЛЯЕТСЯ class::TnscTreeView ) ИЛИ ( aControl ЯВЛЯЕТСЯ class::TnscEditor ) ? (
[[ l_Indent 'Вертикальный скроллер: ' "Узнать, есть ли у контрола {(aControl)} вертикальный скроллер" ToPrintable ]] strings:Cat .
[[ l_Indent 'Горизонтальный скроллер: ' "Узнать, есть ли у контрола {(aControl)} горизонтальный скроллер" ToPrintable ]] strings:Cat .
)
( aControl ЯВЛЯЕТСЯ 'Ttb97MoreButton' ) IF
l_Indent 'Не сравниваем контекстное меню' Cat .
ELSE
l_Indent 'Контекстное меню:' Cat .
"Сравнить контекстное меню для контрола {(aControl)} для точки {( 0 0 )} с эталоном"
l_Indent ';' Cat .
ENDIF // исключаем контекстное меню для Ttb97MoreButton
( aControl ЯВЛЯЕТСЯ class::TnscEditor ) IF
'--- Текст редактора: ---' .
"Сравнить с эталоном текст редактора {(aControl)}"
ENDIF
;
FORWARD "Сравнить с эталоном контрол с отступом"
: "Сравнить с эталоном контрол с отступом" OBJECT IN aControl INTEGER IN aLevel
STRING VAR l_Indent
"{(aLevel)} пробелов" >>> l_Indent
l_Indent aControl ToPrintable Cat .
"Сравнить с эталоном свойства контрола {(aControl)} с отступом {( 1 aLevel + )}"
( aControl ЯВЛЯЕТСЯ class::TWinControl ) ? (
ARRAY l_ControlsArray
: FillArray OBJECT IN aChildControl
aChildControl >>>[] l_ControlsArray
;
aControl EnumerateControls FillArray
INTEGER VAR l_Loop
0 >>> l_Loop
l_ControlsArray array:Count раз (
"Сравнить с эталоном контрол {( l_Loop l_ControlsArray [i] )} с отступом {( 1 aLevel + )}"
1 l_Loop + >>> l_Loop
)
)
l_Indent ';' Cat .
;
: "По-новому сравнить с эталоном форму" OBJECT IN aForm
"Сравнить с эталоном контрол {(aForm)} с отступом {(0)}"
;
Блог человека, который 18-ть лет программирует на Delphi. И 25 лет программирует вообще. VCL, UML, MDA, тесты. Это не "учебник", это - "заметки на полях".
пятница, 18 октября 2013 г.
Почти полный "промежуточный" словарь "тестов по-русски"
Подписаться на:
Комментарии к сообщению (Atom)
Там ещё "не совсем по-русски", но уже "не совсем" FORTH... Что - показательно...
ОтветитьУдалитьА удобно ли переключать раскладку клавиатуры туда-сюда? Ведь код на двух языках по сути.
ОтветитьУдалить1. "ПРОМЕЖУТОЧНЫЙ" словарь. Это - ВАЖНО. ПРОМЕЖУТОЧНЫЙ. НЕ для "конечных тестировщиков". Хотя, волей случая, "конечные тестировщики" являются и "РАЗРАБОТЧИКАМИ".
Удалить2. Punto Switcher - для "совсем ленивых".
3. Я ЛИЧНО и без Punto Switcher - обхожусь. "Cut'n'Paste".
4. СМЕШЕНИЕ языков - это КРИТЕРИЙ того, что "в коде что-то не так". СМЕШЕНИЕ "хорошо" ЛИШЬ для ПРОМЕЖУТОЧНОГО словаря.
Не хватает какой-то общей инструкции для добавления новых слов. По-этому получается немного запутанно и витиевато.
ОтветитьУдалитьАндрей, эта "инструкция" называется "применение шаблонов (паттернов) проектирования для построения тестов". Её физически - ДЕЙСТВИТЕЛЬНО нет. Пока. Она "размазана" по "умам разработчиков". И по вашему - в частности. Хорошо бы конечно, чтобы ОНА - БЫЛА. И это - следующий этап. "Нет ничего невозможного для людей с интеллектом" :-)
УдалитьЧасть "инструкции", касающейся "его" проекта, Дима вам сегодня кстати изобразил. Остаётся для начала только взять и записать её. Именно как инструкцию. А далее - следовать ей, дополнять и развивать. Ну и может быть - ПЕРЕСМАТРИВАТЬ. По мере необходимости. Если такая - возникнет.
Удалить