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
Комментариев нет:
Отправить комментарий