diff -r 000000000000 -r e4d67989cc36 lowlevellibsandfws/pluginfw/Test_Bed/UnitTestTest/UnitTestTransitionValidation.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lowlevellibsandfws/pluginfw/Test_Bed/UnitTestTest/UnitTestTransitionValidation.h Tue Feb 02 02:01:42 2010 +0200 @@ -0,0 +1,664 @@ +// Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of "Eclipse Public License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.eclipse.org/legal/epl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// The definitions of the transition classes upon the CUnitTest class methods. +// +// + +#ifndef __UNITTESTTRANSITIONVALIDATION_H__ +#define __UNITTESTTRANSITIONVALIDATION_H__ + +#include "UnitTestTransitions.h" + +// ______________________________________________________________________________ +// +/** + @internalComponent + + Comments : Provide all the CtorUnit Test's specific + validatation for the state of a transition before and after its execution. + on the CUnitTest test class for a transition. + */ +class TUnitTest_Ctor_TransitionValidator : public TTransitionValidator + { +public: + /** + @fn TUnitTest_Ctor_TransitionValidator(CUnitTestContext& aUTContext) + Intended Usage : Default constructor. + @leave KErrNoMemory + @since 7.0 + @param aUTContext The context within which this transition is executing + */ + inline TUnitTest_Ctor_TransitionValidator(CUnitTestContext& aUTContext); + + /** + @fn ValidatePreConditions() + Intended Usage : Implemented by the developer to check the + end state of the transition behaviour. + Error Condition : Invalid pre-conditions + @since 7.0 + @return TBool ETrue if the pre-conditions were valid, EFalse otherwise. + @pre TUnitTest_Ctor_TransitionValidator is fully constructed. + @post No change to the iUTContext class. + */ + virtual inline TBool ValidatePreConditions(); + + /** + @fn ValidatePostConditions(TTestBedAsyncState aAsyncState) + Intended Usage : Implemented by the developer to check the + end state of the transition behaviour. + When overriding, if the transition calls an asynchronous function + ValidatePostConditions will be called twice. Firstly, after the + asynchronous function has been called and, secondly, after the + asynchronous request has completed. The parameter aAsyncState can + be used to distinguish between these two cases. + Error Condition : Invalid post-conditions. + @since 7.0 + @param aAsyncState EAsyncCalled if the async function has been just been called, + EAsyncCompleted if the function has completed. + @return TBool ETrue if the post-conditions were valid, EFalse otherwise. + @pre TUnitTest_Ctor_TransitionValidator is fully constructed. + @post No change to the iUTContext class. + */ + virtual inline TBool ValidatePostConditions(TTestBedAsyncState aAsyncState); + }; // TUnitTest_Ctor_TransitionValidator + +// ______________________________________________________________________________ +// +/** + @internalComponent + + Comments : Provide all the DtorUnit Test's specific + validatation for the state of a transition before and after its execution. + on the CUnitTest test class for a transition. + */ +class TUnitTest_Dtor_TransitionValidator : public TTransitionValidator + { +public: + /** + @fn TUnitTest_Dtor_TransitionValidator(CUnitTestContext& aUTContext) + Intended Usage : + @leave KErrNoMemory + @since 7.0 + @param aUTContext The context within which this transition is executing + */ + inline TUnitTest_Dtor_TransitionValidator(CUnitTestContext& aUTContext); + + /** + @fn ValidatePreConditions() + Intended Usage : Implemented by the developer to check the + end state of the transition behaviour. + Error Condition : Invalid pre-conditions + @since 7.0 + @return TBool ETrue if the pre-conditions were valid, EFalse otherwise. + @pre TUnitTest_Dtor_TransitionValidator is fully constructed. + @post No change to the iUTContext class. + */ + virtual inline TBool ValidatePreConditions(); + + /** + @fn ValidatePostConditions(TTestBedAsyncState aAsyncState) + Intended Usage : Implemented by the developer to check the + end state of the transition behaviour. + When overriding, if the transition calls an asynchronous function + ValidatePostConditions will be called twice. Firstly, after the + asynchronous function has been called and, secondly, after the + asynchronous request has completed. The parameter aAsyncState can + be used to distinguish between these two cases. + Error Condition : Invalid post-conditions. + @since 7.0 + @param aAsyncState EAsyncCalled if the async function has been just been called, + EAsyncCompleted if the function has completed. + @return TBool ETrue if the post-conditions were valid, EFalse otherwise. + @pre TUnitTest_Dtor_TransitionValidator is fully constructed. + @post No change to the iUTContext class. + */ + virtual inline TBool ValidatePostConditions(TTestBedAsyncState aAsyncState); + }; // TUnitTest_Dtor_TransitionValidator + +// ______________________________________________________________________________ +// +/** + @internalComponent + + Comments : Provide all the TransitionSetUnit Test's specific + validatation for the state of a transition before and after its execution. + on the CUnitTest test class for a transition. + */ +class TUnitTest_TransitionSet_TransitionValidator : public TTransitionValidator + { +public: + /** + @fn TUnitTest_TransitionSet_TransitionValidator(CUnitTestContext& aUTContext) + Intended Usage : + @leave KErrNoMemory + @since 7.0 + @param aUTContext The context within which this transition is executing + */ + inline TUnitTest_TransitionSet_TransitionValidator(CUnitTestContext& aUTContext); + + /** + @fn ValidatePreConditions() + Intended Usage : Implemented by the developer to check the + end state of the transition behaviour. + Error Condition : Invalid pre-conditions + @since 7.0 + @return TBool ETrue if the pre-conditions were valid, EFalse otherwise. + @pre TUnitTest_TransitionSet_TransitionValidator is fully constructed. + @post No change to the iUTContext class. + */ + virtual inline TBool ValidatePreConditions(); + + /** + @fn ValidatePostConditions(TTestBedAsyncState aAsyncState) + Intended Usage : Implemented by the developer to check the + end state of the transition behaviour. + When overriding, if the transition calls an asynchronous function + ValidatePostConditions will be called twice. Firstly, after the + asynchronous function has been called and, secondly, after the + asynchronous request has completed. The parameter aAsyncState can + be used to distinguish between these two cases. + Error Condition : Invalid post-conditions. + @since 7.0 + @param aAsyncState EAsyncCalled if the async function has been just been called, + EAsyncCompleted if the function has completed. + @return TBool ETrue if the post-conditions were valid, EFalse otherwise. + @pre TUnitTest_TransitionSet_TransitionValidator is fully constructed. + @post No change to the iUTContext class. + */ + virtual inline TBool ValidatePostConditions(TTestBedAsyncState aAsyncState); + }; // TUnitTest_TransitionSet_TransitionValidator + +// ______________________________________________________________________________ +// +/** + @internalComponent + + Comments : Provide all the GetCurrentTransitionUnit Test's specific + validatation for the state of a transition before and after its execution. + on the CUnitTest test class for a transition. + */ +class TUnitTest_GetCurrentTransition_TransitionValidator : public TTransitionValidator + { +public: + /** + @fn TUnitTest_GetCurrentTransition_TransitionValidator(CUnitTestContext& aUTContext) + Intended Usage : + @leave KErrNoMemory + @since 7.0 + @param aUTContext The context within which this transition is executing + */ + inline TUnitTest_GetCurrentTransition_TransitionValidator(CUnitTestContext& aUTContext); + + /** + @fn ValidatePreConditions() + Intended Usage : Implemented by the developer to check the + end state of the transition behaviour. + Error Condition : Invalid pre-conditions + @since 7.0 + @return TBool ETrue if the pre-conditions were valid, EFalse otherwise. + @pre TUnitTest_GetCurrentTransition_TransitionValidator is fully constructed. + @post No change to the iUTContext class. + */ + virtual inline TBool ValidatePreConditions(); + + /** + @fn ValidatePostConditions(TTestBedAsyncState aAsyncState) + Intended Usage : Implemented by the developer to check the + end state of the transition behaviour. + When overriding, if the transition calls an asynchronous function + ValidatePostConditions will be called twice. Firstly, after the + asynchronous function has been called and, secondly, after the + asynchronous request has completed. The parameter aAsyncState can + be used to distinguish between these two cases. + Error Condition : Invalid post-conditions. + @since 7.0 + @param aAsyncState EAsyncCalled if the async function has been just been called, + EAsyncCompleted if the function has completed. + @return TBool ETrue if the post-conditions were valid, EFalse otherwise. + @pre TUnitTest_GetCurrentTransition_TransitionValidator is fully constructed. + @post No change to the iUTContext class. + */ + virtual inline TBool ValidatePostConditions(TTestBedAsyncState aAsyncState); + }; // TUnitTest_GetCurrentTransition_TransitionValidator + +// ______________________________________________________________________________ +// +/** + @internalComponent + + Comments : Provide all the SetCurrentTransitionUnit Test's specific + validatation for the state of a transition before and after its execution. + on the CUnitTest test class for a transition. + */ +class TUnitTest_SetCurrentTransition_TransitionValidator : public TTransitionValidator + { +public: + /** + @fn TUnitTest_SetCurrentTransition_TransitionValidator(CUnitTestContext& aUTContext) + Intended Usage : + @leave KErrNoMemory + @since 7.0 + @param aUTContext The context within which this transition is executing + */ + inline TUnitTest_SetCurrentTransition_TransitionValidator(CUnitTestContext& aUTContext); + + /** + @fn ValidatePreConditions() + Intended Usage : Implemented by the developer to check the + end state of the transition behaviour. + Error Condition : Invalid pre-conditions + @since 7.0 + @return TBool ETrue if the pre-conditions were valid, EFalse otherwise. + @pre TUnitTest_SetCurrentTransition_TransitionValidator is fully constructed. + @post No change to the iUTContext class. + */ + virtual inline TBool ValidatePreConditions(); + + /** + @fn ValidatePostConditions(TTestBedAsyncState aAsyncState) + Intended Usage : Implemented by the developer to check the + end state of the transition behaviour. + When overriding, if the transition calls an asynchronous function + ValidatePostConditions will be called twice. Firstly, after the + asynchronous function has been called and, secondly, after the + asynchronous request has completed. The parameter aAsyncState can + be used to distinguish between these two cases. + Error Condition : Invalid post-conditions. + @since 7.0 + @param aAsyncState EAsyncCalled if the async function has been just been called, + EAsyncCompleted if the function has completed. + @return TBool ETrue if the post-conditions were valid, EFalse otherwise. + @pre TUnitTest_SetCurrentTransition_TransitionValidator is fully constructed. + @post No change to the iUTContext class. + */ + virtual inline TBool ValidatePostConditions(TTestBedAsyncState aAsyncState); + }; // TUnitTest_SetCurrentTransition_TransitionValidator + +// ______________________________________________________________________________ +// +/** + @internalComponent + + Comments : Provide all the SetParametersUnit Test's specific + validatation for the state of a transition before and after its execution. + on the CUnitTest test class for a transition. + */ +class TUnitTest_SetParameters_TransitionValidator : public TTransitionValidator + { +public: + /** + @fn TUnitTest_SetParameters_TransitionValidator(CUnitTestContext& aUTContext) + Intended Usage : + @leave KErrNoMemory + @since 7.0 + @param aUTContext The context within which this transition is executing + */ + inline TUnitTest_SetParameters_TransitionValidator(CUnitTestContext& aUTContext); + + /** + @fn ValidatePreConditions() + Intended Usage : Implemented by the developer to check the + end state of the transition behaviour. + Error Condition : Invalid pre-conditions + @since 7.0 + @return TBool ETrue if the pre-conditions were valid, EFalse otherwise. + @pre TUnitTest_SetParameters_TransitionValidator is fully constructed. + @post No change to the iUTContext class. + */ + virtual inline TBool ValidatePreConditions(); + + /** + @fn ValidatePostConditions(TTestBedAsyncState aAsyncState) + Intended Usage : Implemented by the developer to check the + end state of the transition behaviour. + When overriding, if the transition calls an asynchronous function + ValidatePostConditions will be called twice. Firstly, after the + asynchronous function has been called and, secondly, after the + asynchronous request has completed. The parameter aAsyncState can + be used to distinguish between these two cases. + Error Condition : Invalid post-conditions. + @since 7.0 + @param aAsyncState EAsyncCalled if the async function has been just been called, + EAsyncCompleted if the function has completed. + @return TBool ETrue if the post-conditions were valid, EFalse otherwise. + @pre TUnitTest_SetParameters_TransitionValidator is fully constructed. + @post No change to the iUTContext class. + */ + virtual inline TBool ValidatePostConditions(TTestBedAsyncState aAsyncState); + }; // TUnitTest_SetParameters_TransitionValidator + +// ______________________________________________________________________________ +// +/** + @internalComponent + + Comments : Provide all the PrepareUnitTestUnit Test's specific + validatation for the state of a transition before and after its execution. + on the CUnitTest test class for a transition. + */ +class TUnitTest_PrepareUnitTest_TransitionValidator : public TTransitionValidator + { +public: + /** + @fn TUnitTest_PrepareUnitTest_TransitionValidator(CUnitTestContext& aUTContext) + Intended Usage : + @leave KErrNoMemory + @since 7.0 + @param aUTContext The context within which this transition is executing + */ + inline TUnitTest_PrepareUnitTest_TransitionValidator(CUnitTestContext& aUTContext); + + /** + @fn ValidatePreConditions() + Intended Usage : Implemented by the developer to check the + end state of the transition behaviour. + Error Condition : Invalid pre-conditions + @since 7.0 + @return TBool ETrue if the pre-conditions were valid, EFalse otherwise. + @pre TUnitTest_PrepareUnitTest_TransitionValidator is fully constructed. + @post No change to the iUTContext class. + */ + virtual inline TBool ValidatePreConditions(); + + /** + @fn ValidatePostConditions(TTestBedAsyncState aAsyncState) + Intended Usage : Implemented by the developer to check the + end state of the transition behaviour. + When overriding, if the transition calls an asynchronous function + ValidatePostConditions will be called twice. Firstly, after the + asynchronous function has been called and, secondly, after the + asynchronous request has completed. The parameter aAsyncState can + be used to distinguish between these two cases. + Error Condition : Invalid post-conditions. + @since 7.0 + @param aAsyncState EAsyncCalled if the async function has been just been called, + EAsyncCompleted if the function has completed. + @return TBool ETrue if the post-conditions were valid, EFalse otherwise. + @pre TUnitTest_PrepareUnitTest_TransitionValidator is fully constructed. + @post No change to the iUTContext class. + */ + virtual inline TBool ValidatePostConditions(TTestBedAsyncState aAsyncState); + }; // TUnitTest_PrepareUnitTest_TransitionValidator + +// ______________________________________________________________________________ +// +/** + @internalComponent + + Comments : Provide all the RunTestUnit Test's specific + validatation for the state of a transition before and after its execution. + on the CUnitTest test class for a transition. + */ +class TUnitTest_RunTest_TransitionValidator : public TTransitionValidator + { +public: + /** + @fn TUnitTest_RunTest_TransitionValidator(CUnitTestContext& aUTContext) + Intended Usage : + @leave KErrNoMemory + @since 7.0 + @param aUTContext The context within which this transition is executing + */ + inline TUnitTest_RunTest_TransitionValidator(CUnitTestContext& aUTContext); + + /** + @fn ValidatePreConditions() + Intended Usage : Implemented by the developer to check the + end state of the transition behaviour. + Error Condition : Invalid pre-conditions + @since 7.0 + @return TBool ETrue if the pre-conditions were valid, EFalse otherwise. + @pre TUnitTest_RunTest_TransitionValidator is fully constructed. + @post No change to the iUTContext class. + */ + virtual inline TBool ValidatePreConditions(); + + /** + @fn ValidatePostConditions(TTestBedAsyncState aAsyncState) + Intended Usage : Implemented by the developer to check the + end state of the transition behaviour. + When overriding, if the transition calls an asynchronous function + ValidatePostConditions will be called twice. Firstly, after the + asynchronous function has been called and, secondly, after the + asynchronous request has completed. The parameter aAsyncState can + be used to distinguish between these two cases. + Error Condition : Invalid post-conditions. + @since 7.0 + @param aAsyncState EAsyncCalled if the async function has been just been called, + EAsyncCompleted if the function has completed. + @return TBool ETrue if the post-conditions were valid, EFalse otherwise. + @pre TUnitTest_RunTest_TransitionValidator is fully constructed. + @post No change to the iUTContext class. + */ + virtual inline TBool ValidatePostConditions(TTestBedAsyncState aAsyncState); + }; // TUnitTest_RunTest_TransitionValidator + +// ______________________________________________________________________________ +// +/** + @internalComponent + + Comments : Provide all the AddTransitionUnit Test's specific + validatation for the state of a transition before and after its execution. + on the CUnitTest test class for a transition. + */ +class TUnitTest_AddTransition_TransitionValidator : public TTransitionValidator + { +public: + /** + @fn TUnitTest_AddTransition_TransitionValidator(CUnitTestContext& aUTContext) + Intended Usage : + @leave KErrNoMemory + @since 7.0 + @param aUTContext The context within which this transition is executing + */ + inline TUnitTest_AddTransition_TransitionValidator(CUnitTestContext& aUTContext); + + /** + @fn ValidatePreConditions() + Intended Usage : Implemented by the developer to check the + end state of the transition behaviour. + Error Condition : Invalid pre-conditions + @since 7.0 + @return TBool ETrue if the pre-conditions were valid, EFalse otherwise. + @pre TUnitTest_AddTransition_TransitionValidator is fully constructed. + @post No change to the iUTContext class. + */ + virtual inline TBool ValidatePreConditions(); + + /** + @fn ValidatePostConditions(TTestBedAsyncState aAsyncState) + Intended Usage : Implemented by the developer to check the + end state of the transition behaviour. + When overriding, if the transition calls an asynchronous function + ValidatePostConditions will be called twice. Firstly, after the + asynchronous function has been called and, secondly, after the + asynchronous request has completed. The parameter aAsyncState can + be used to distinguish between these two cases. + Error Condition : Invalid post-conditions. + @since 7.0 + @param aAsyncState EAsyncCalled if the async function has been just been called, + EAsyncCompleted if the function has completed. + @return TBool ETrue if the post-conditions were valid, EFalse otherwise. + @pre TUnitTest_AddTransition_TransitionValidator is fully constructed. + @post No change to the iUTContext class. + */ + virtual inline TBool ValidatePostConditions(TTestBedAsyncState aAsyncState); + }; // TUnitTest_AddTransition_TransitionValidator + +// ______________________________________________________________________________ +// +/** + @internalComponent + + Comments : Provide all the AddBlockingTransitionUnit Test's specific + validatation for the state of a transition before and after its execution. + on the CUnitTest test class for a transition. + */ +class TUnitTest_AddBlockingTransition_TransitionValidator : public TTransitionValidator + { +public: + /** + @fn TUnitTest_AddBlockingTransition_TransitionValidator(CUnitTestContext& aUTContext) + Intended Usage : + @leave KErrNoMemory + @since 7.0 + @param aUTContext The context within which this transition is executing + */ + inline TUnitTest_AddBlockingTransition_TransitionValidator(CUnitTestContext& aUTContext); + + /** + @fn ValidatePreConditions() + Intended Usage : Implemented by the developer to check the + end state of the transition behaviour. + Error Condition : Invalid pre-conditions + @since 7.0 + @return TBool ETrue if the pre-conditions were valid, EFalse otherwise. + @pre TUnitTest_AddBlockingTransition_TransitionValidator is fully constructed. + @post No change to the iUTContext class. + */ + virtual inline TBool ValidatePreConditions(); + + /** + @fn ValidatePostConditions(TTestBedAsyncState aAsyncState) + Intended Usage : Implemented by the developer to check the + end state of the transition behaviour. + When overriding, if the transition calls an asynchronous function + ValidatePostConditions will be called twice. Firstly, after the + asynchronous function has been called and, secondly, after the + asynchronous request has completed. The parameter aAsyncState can + be used to distinguish between these two cases. + Error Condition : Invalid post-conditions. + @since 7.0 + @param aAsyncState EAsyncCalled if the async function has been just been called, + EAsyncCompleted if the function has completed. + @return TBool ETrue if the post-conditions were valid, EFalse otherwise. + @pre TUnitTest_AddBlockingTransition_TransitionValidator is fully constructed. + @post No change to the iUTContext class. + */ + virtual inline TBool ValidatePostConditions(TTestBedAsyncState aAsyncState); + }; // TUnitTest_AddBlockingTransition_TransitionValidator + +// ______________________________________________________________________________ +// +/** + @internalComponent + + Comments : Provide all the AddLeaveErrorCodeUnit Test's specific + validatation for the state of a transition before and after its execution. + on the CUnitTest test class for a transition. + */ +class TUnitTest_AddLeaveErrorCode_TransitionValidator : public TTransitionValidator + { +public: + /** + @fn TUnitTest_AddLeaveErrorCode_TransitionValidator(CUnitTestContext& aUTContext) + Intended Usage : + @leave KErrNoMemory + @since 7.0 + @param aUTContext The context within which this transition is executing + */ + inline TUnitTest_AddLeaveErrorCode_TransitionValidator(CUnitTestContext& aUTContext); + + /** + @fn ValidatePreConditions() + Intended Usage : Implemented by the developer to check the + end state of the transition behaviour. + Error Condition : Invalid pre-conditions + @since 7.0 + @return TBool ETrue if the pre-conditions were valid, EFalse otherwise. + @pre TUnitTest_AddLeaveErrorCode_TransitionValidator is fully constructed. + @post No change to the iUTContext class. + */ + virtual inline TBool ValidatePreConditions(); + + /** + @fn ValidatePostConditions(TTestBedAsyncState aAsyncState) + Intended Usage : Implemented by the developer to check the + end state of the transition behaviour. + When overriding, if the transition calls an asynchronous function + ValidatePostConditions will be called twice. Firstly, after the + asynchronous function has been called and, secondly, after the + asynchronous request has completed. The parameter aAsyncState can + be used to distinguish between these two cases. + Error Condition : Invalid post-conditions. + @since 7.0 + @param aAsyncState EAsyncCalled if the async function has been just been called, + EAsyncCompleted if the function has completed. + @return TBool ETrue if the post-conditions were valid, EFalse otherwise. + @pre TUnitTest_AddLeaveErrorCode_TransitionValidator is fully constructed. + @post No change to the iUTContext class. + */ + virtual inline TBool ValidatePostConditions(TTestBedAsyncState aAsyncState); + }; // TUnitTest_AddLeaveErrorCode_TransitionValidator + +// ______________________________________________________________________________ +// +/** + @internalComponent + + Comments : Provide all the UnitTestNameUnit Test's specific + validatation for the state of a transition before and after its execution. + on the CUnitTest test class for a transition. + */ +class TUnitTest_UnitTestName_TransitionValidator : public TTransitionValidator + { +public: + /** + @fn TUnitTest_UnitTestName_TransitionValidator(CUnitTestContext& aUTContext) + Intended Usage : + @leave KErrNoMemory + @since 7.0 + @param aUTContext The context within which this transition is executing + */ + inline TUnitTest_UnitTestName_TransitionValidator(CUnitTestContext& aUTContext); + + /** + @fn ValidatePreConditions() + Intended Usage : Implemented by the developer to check the + end state of the transition behaviour. + Error Condition : Invalid pre-conditions + @since 7.0 + @return TBool ETrue if the pre-conditions were valid, EFalse otherwise. + @pre TUnitTest_UnitTestName_TransitionValidator is fully constructed. + @post No change to the iUTContext class. + */ + virtual inline TBool ValidatePreConditions(); + + /** + @fn ValidatePostConditions(TTestBedAsyncState aAsyncState) + Intended Usage : Implemented by the developer to check the + end state of the transition behaviour. + When overriding, if the transition calls an asynchronous function + ValidatePostConditions will be called twice. Firstly, after the + asynchronous function has been called and, secondly, after the + asynchronous request has completed. The parameter aAsyncState can + be used to distinguish between these two cases. + Error Condition : Invalid post-conditions. + @since 7.0 + @param aAsyncState EAsyncCalled if the async function has been just been called, + EAsyncCompleted if the function has completed. + @return TBool ETrue if the post-conditions were valid, EFalse otherwise. + @pre TUnitTest_UnitTestName_TransitionValidator is fully constructed. + @post No change to the iUTContext class. + */ + virtual inline TBool ValidatePostConditions(TTestBedAsyncState aAsyncState); + }; // TUnitTest_UnitTestName_TransitionValidator + + + +#include "UnitTestTransitionValidation.inl" + +#endif // __UNITTESTTRANSITIONVALIDATION_H__ +