sl@0: /* sl@0: * Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). sl@0: * All rights reserved. sl@0: * This component and the accompanying materials are made available sl@0: * under the terms of "Eclipse Public License v1.0" sl@0: * which accompanies this distribution, and is available sl@0: * at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: * sl@0: * Initial Contributors: sl@0: * Nokia Corporation - initial contribution. sl@0: * sl@0: * Contributors: sl@0: * sl@0: * Description: sl@0: * @file sl@0: * sl@0: * sl@0: */ sl@0: sl@0: sl@0: sl@0: #ifndef __TEF_LOG_EXTENSIONS__ sl@0: #define __TEF_LOG_EXTENSIONS__ sl@0: sl@0: #include sl@0: sl@0: /* sl@0: This file contains extensions to the TEF macros used for logging, defined in sl@0: tefunit.h. sl@0: */ sl@0: sl@0: /* sl@0: Wrapper to check for an error, then print it and leave with it if not KErrNone. sl@0: do ... while (0) ensures the macro can be treated like a single statement. A sl@0: macro is used to get the line number information. sl@0: Note that p1 will be evaluated once and only once. sl@0: */ sl@0: #define PRINT_ON_ERROR2_L(test, p1, p2) \ sl@0: do \ sl@0: { \ sl@0: TInt result = (test); \ sl@0: if (result != KErrNone) \ sl@0: { \ sl@0: Logger().LogExtra(((TText8*)__FILE__), __LINE__, ESevrErr, (p1), (p2)); \ sl@0: User::Leave(result); \ sl@0: } \ sl@0: } \ sl@0: while (0) sl@0: sl@0: #define PRINT_ON_ERROR3_L(test, p1, p2, p3) \ sl@0: do \ sl@0: { \ sl@0: TInt result = (test); \ sl@0: if (result != KErrNone) \ sl@0: { \ sl@0: Logger().LogExtra(((TText8*)__FILE__), __LINE__, ESevrErr, (p1), (p2), (p3)); \ sl@0: User::Leave(result); \ sl@0: } \ sl@0: } \ sl@0: while (0) sl@0: sl@0: /* sl@0: Modified version of ASSERT_EQUALS() that will log the expression tested, the sl@0: expected result and the actual one. sl@0: */ sl@0: #define ASSERT_CONDITION(c) _LIT(KExpression, c); sl@0: sl@0: #define ASSERT_EQUALS_X(aExpression, aExpected) \ sl@0: do \ sl@0: { \ sl@0: TInt result = (TInt)(aExpression); \ sl@0: TInt expected = (TInt)(aExpected); \ sl@0: if (result != expected) \ sl@0: { \ sl@0: ASSERT_CONDITION(#aExpression); \ sl@0: Logger().LogExtra(((TText8*)__FILE__), __LINE__, ESevrErr, _L("%S == %d, not %d"), &KExpression(), result, expected ); \ sl@0: User::Leave(KErrTEFUnitFail); \ sl@0: } \ sl@0: } \ sl@0: while (0) sl@0: sl@0: #define ASSERT_NOT_EQUALS_X(aExpression, aUnexpected) \ sl@0: do \ sl@0: { \ sl@0: TInt result = (TInt)(aExpression); \ sl@0: TInt unexpected = (TInt)(aUnexpected); \ sl@0: if (result == unexpected) \ sl@0: { \ sl@0: ASSERT_CONDITION(#aExpression); \ sl@0: Logger().LogExtra(((TText8*)__FILE__), __LINE__, ESevrErr, _L("%S == %d, unexpectedly"), &KExpression(), result ); \ sl@0: User::Leave(KErrTEFUnitFail); \ sl@0: } \ sl@0: } \ sl@0: while (0) sl@0: sl@0: #define ASSERT_TRUE_X(aExpression) \ sl@0: do \ sl@0: { \ sl@0: TBool result = (TBool)(aExpression); \ sl@0: if (!result) \ sl@0: { \ sl@0: ASSERT_CONDITION(#aExpression); \ sl@0: Logger().LogExtra(((TText8*)__FILE__), __LINE__, ESevrErr, _L("%S false"), &KExpression() ); \ sl@0: User::Leave(KErrTEFUnitFail); \ sl@0: } \ sl@0: } \ sl@0: while (0) sl@0: sl@0: #endif // __TEF_LOG_EXTENSIONS__ sl@0: