ARRAY FUNCTION .fold> ARRAY IN anArray %SUMMARY 'Преобразует список списков в один плоский список.' ; [empty] anArray .for> ( SWAP JOIN ) >>> Result ; // .fold> ARRAY FUNCTION .transform> ARRAY IN anArray ^ IN aLambda %SUMMARY 'Применяет aLambda к каждому элементу anArray.' 'Предполагается, что aLambda возвращает список.' 'Результатом явлется объединённый список результатов aLambda.' ; anArray .map> ( aLambda DO ) .fold> >>> Result ; // .transform>
Пример использования:
elem_iterator ImplUses
Cached:
(
GarantModel::l3ImplUses .ToArray
if ( Self .IsScriptKeywordsPack ) then
begin
.join> ( Self .NeededElementsFromInheritsOrImplements )
end // ( Self .IsScriptKeywordsPack )
.join> ( Self .NeededElements: .IsForImplementation )
.join> ( Self .NeededElementsTotal: .IsForImplementation )
.join> ( Self .UsedTotal )
if ( Self .IsScriptKeywordsPack ) then
begin
.join> ( Self .ChildrenWithOwnFile )
.join> ToArray: GarantModel::SysUtils
.join> ToArray: GarantModel::TtfwTypeRegistrator(Proxy)
.join> ToArray: GarantModel::TypeInfoExt
end // ( Self .IsScriptKeywordsPack )
if ( Self .IsTarget ) then
begin
.join> ( Self .ChildrenWithOwnFile )
end // ( Self .IsTarget )
if ( Self .IsVCMFormsPack ) then
begin
.join> ( Self .ChildrenWithOwnFile )
.join> (
Self .ChildrenWithOwnFile
.map> .ImplementsEx
.fold>
.filter> .IsVCMFormDefinition
) // .join>
end // ( Self .IsVCMFormsPack )
if ( Self .IsVCMForm ) then
begin
if ( Self .Abstraction at_final != ) then
begin
.join> ToArray: GarantModel::StdRes
end // ( Self .Abstraction at_final != )
end // ( Self .IsVCMForm )
if ( Self .IsVCMFormSetFactory ) then
begin
.join> ToArray: GarantModel::SysUtils
.join> ( Self .ChildrenWithOwnFile )
end // ( Self .IsVCMFormSetFactory )
if ( Self .IsVCMApplication ) then
begin
.join> ( Self .ChildrenWithOwnFile )
.join> ToArray: GarantModel::evExtFormat
if ( Self .Abstraction at_final == ) then
begin
.join> ToArray: GarantModel::StdRes
end // ( Self .Abstraction at_final == )
end // ( Self .IsVCMApplication )
if ( Self .IsVCMUseCaseRealization ) then
begin
.join> ( Self .ChildrenWithOwnFile )
end // ( Self .IsVCMUseCaseRealization )
if ( Self .IsTestLibrary ) then
begin
.join> ( Self .ChildrenWithOwnFile .filter> .IsTestUnit )
end // ( Self .IsTestLibrary )
if ( Self .IsTestUnit ) then
begin
.join> ( Self .ChildrenWithOwnFile .filter> .IsTestForTestLibrary )
end // ( Self .IsTestUnit )
if ( Self .IsClassOrMixIn ) then
begin
.join> ( Self .AbstractUses )
end // ( Self .IsClassOrMixIn )
if ( Self .IsTestClass ) then
begin
.join> ToArray: GarantModel::Variants
.join> ToArray: GarantModel::ActiveX
.join> ToArray: GarantModel::tc5OpenAppClasses
.join> ToArray: GarantModel::tc5PublicInfo
.join> ToArray: GarantModel::tc6OpenAppClasses
.join> ToArray: GarantModel::tc6PublicInfo
end // ( Self .IsTestClass )
if ( Self .Name 'l3IID' == ) then
begin
.join> ToArray: GarantModel::Windows
.join> ToArray: GarantModel::SysUtils
end // ( Self .Name 'l3IID' == )
RULES
( Self .IsTestTarget )
begin
.join> ToArray: GarantModel::SysUtils
.join> ToArray: GarantModel::l3Base
.join> ToArray: GarantModel::TKBridge
.join> ToArray: GarantModel::KTestRunner
.join> ToArray: GarantModel::TextTestRunner
.join> ToArray: GarantModel::GUITestRunner
if ( Self .UPisTrue "no scripts" ! ) then
begin
.join> ToArray: GarantModel::TvcmInsiderTest
end // ( Self .UPisTrue "no scripts" ! )
end // ( Self .IsTestTarget )
; // RULES
RULES
( Self .IsVCMTestTarget )
begin
RULES
(
Self .DependsVCMGUI
.filter> ( .GetUP "F1Like" false ?== )
.IsEmpty
)
( .join> ToArray: GarantModel::TF1AutoTestSuite )
DEFAULT
( .join> ToArray: GarantModel::TAutoTestsSuite )
; // RULES
.join> ToArray: GarantModel::StdRes
end // ( Self .IsVCMTestTarget )
( Self .IsTestTarget )
begin
if ( Self .UPisTrue "is insider test" ! ) then
begin
if ( Self .UPisTrue "no scripts" ! ) then
begin
.join> ToArray: GarantModel::TAutoTestsSuite
.join> ToArray: GarantModel::TtfwScriptEngineEX
end // ( Self .UPisTrue "no scripts" ! )
end // ( Self .UPisTrue "is insider test" ! )
end // ( Self .IsTestTarget )
( Self .IsVCMGUI )
( .join> ToArray: GarantModel::StdRes )
; // RULES
RULES
( Self .IsTestLibrary )
begin
.join> ( Self .DependsTestLibrary )
RULES
(
Self .ChildrenEx
.filter> .IsTestUnit
.filter> (
.ChildrenEx
.filter> .IsTestClass
.NotEmpty
) // .filter>
.NotEmpty
)
begin
.join> ToArray: GarantModel::tc5OpenApp
.join> ToArray: GarantModel::tc6OpenApp
end
; // RULES
end // ( Self .IsTestLibrary )
( Self .IsTestTarget )
begin
VAR l_Parent
Self .Parent >>> l_Parent
// Сначала перебираем чужие тестовые библиотеки:
.join> (
Self .DependsTestLibrary
.filter> ( .Parent l_Parent .IsSameModelElement ! )
array:Copy
) // .join>
// Потом перебираем свои тестовые библиотеки:
.join> (
Self .DependsTestLibrary
.filter> ( .Parent l_Parent .IsSameModelElement )
array:Copy
) // .join>
end // ( Self .IsTestTarget )
( Self .IsDLL )
begin
VAR l_Parent
Self .Parent >>> l_Parent
Self .DependsEx
.filter> .IsLibrary
.filter> ( .Parent l_Parent .IsSameModelElement )
.for> (
IN aLibrary
aLibrary .ChildrenEx
.for> (
IN aChild
.join> ToArray: aChild
) // .for>
aLibrary .ChildrenEx
.filter> .IsUnit
.for> (
IN aUnit
aUnit .ChildrenEx
.for> (
IN aClass
.join> ToArray: aClass
) // .for>
) // .for>
) // .for>
end // ( Self .IsDLL )
( Self .IsVCMGUI )
begin
.join> ( Self .DependsTestLibrary )
Self .DependsEx
.filter> .IsVCMUseCase
.for> (
IN aUseCase
aUseCase .ChildrenEx
.filter> .IsVCMUseCaseRealization
.for> (
IN aUseCaseRealization
.join> ToArray: aUseCaseRealization
) // .for>
) // .for>
end // ( Self .IsVCMGUI )
; // RULES
)
>>> Result
; // ImplUses
Комментариев нет:
Отправить комментарий