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: // sl@0: sl@0: #include "testvideoplayer_subtitles.h" sl@0: sl@0: const TUint KCacheSize = 1000000; //1MB sl@0: const TUint KMaxCacheSize = 50000000; //50MB sl@0: sl@0: sl@0: CPlayTimer* CPlayTimer::NewL(RTestVclnt2Subtitle& aTestStep) sl@0: { sl@0: CPlayTimer* self = new (ELeave) CPlayTimer(aTestStep); sl@0: CleanupStack::PushL(self); sl@0: self->ConstructL(); sl@0: CleanupStack::Pop(); sl@0: return self; sl@0: } sl@0: sl@0: CPlayTimer::CPlayTimer(RTestVclnt2Subtitle& aTestStep) sl@0: : CTimer(EPriorityHigh), iTestStep(aTestStep) sl@0: { sl@0: CActiveScheduler::Add(this); sl@0: } sl@0: sl@0: void CPlayTimer::RunL() sl@0: { sl@0: iTestStep.DoDuringPlaybackActionsL(); sl@0: } sl@0: sl@0: TInt CPlayTimer::RunError(TInt aError) sl@0: { sl@0: // Tell the test to fail with error code aError. sl@0: iTestStep.FailTest(aError); sl@0: return KErrNone; sl@0: } sl@0: sl@0: // sl@0: // RTestVclnt2Subtitle sl@0: // sl@0: sl@0: RTestVclnt2Subtitle* RTestVclnt2Subtitle::NewL(const TDesC& aTestName, const TDesC& aSectName, const TDesC& aKeyName, TInt aExpectedError) sl@0: { sl@0: return new (ELeave) RTestVclnt2Subtitle(aTestName, aSectName, aKeyName, aExpectedError); sl@0: } sl@0: sl@0: RTestVclnt2Subtitle::RTestVclnt2Subtitle(const TDesC& aTestName, const TDesC& aSectName, const TDesC& aKeyName, TInt aExpectedError) sl@0: : RTestVclnt2AviPlayerStep(aTestName, aSectName, aKeyName, aExpectedError) sl@0: { sl@0: } sl@0: sl@0: void RTestVclnt2Subtitle::FailTest(TInt aError) sl@0: { sl@0: ERR_PRINTF2(_L("Test step failed with error %d."), aError); sl@0: iError = aError; sl@0: iTestStepResult = EFail; sl@0: CActiveScheduler::Stop(); sl@0: } sl@0: sl@0: TVerdict RTestVclnt2Subtitle::DoTestStepPreambleL() sl@0: { sl@0: User::LeaveIfError(SetCacheSize()); sl@0: TVerdict result = RTestVclnt2AviPlayerStep::DoTestStepPreambleL(); sl@0: sl@0: if (result == EPass) sl@0: { sl@0: iPlayTimer = CPlayTimer::NewL(*this); sl@0: } sl@0: sl@0: return result; sl@0: } sl@0: sl@0: TVerdict RTestVclnt2Subtitle::DoTestStepPostambleL() sl@0: { sl@0: User::LeaveIfError(RevertCacheSize()); sl@0: sl@0: delete iPlayTimer; sl@0: iPlayTimer = NULL; sl@0: return RTestVclnt2AviPlayerStep::DoTestStepPostambleL(); sl@0: } sl@0: sl@0: void RTestVclnt2Subtitle::DoBeforePlaybackActionsL() sl@0: { sl@0: if (!iVideoPlayer2->SubtitlesAvailable()) sl@0: { sl@0: ERR_PRINTF1(_L("SubtitlesAvailable() returned EFalse. Expected ETrue.")); sl@0: User::Leave(KErrNotSupported); sl@0: } sl@0: sl@0: iVideoPlayer2->EnableSubtitlesL(); sl@0: } sl@0: sl@0: void RTestVclnt2Subtitle::DoDuringPlaybackActionsL() sl@0: { sl@0: } sl@0: sl@0: void RTestVclnt2Subtitle::FsmL(TVclntTestPlayEvents aEventCode) sl@0: { sl@0: if (FsmCheck(aEventCode)) sl@0: { sl@0: switch (aEventCode) sl@0: { sl@0: case EVPIdle: sl@0: // Open iVideoPlayer2 sl@0: LOG_CALL(iVideoPlayer2->OpenFileL(iFilename, KMmfTestAviPlayControllerUid)); sl@0: PrepareState(EVPOpenComplete, KErrNone); sl@0: break; sl@0: sl@0: case EVPOpenComplete: sl@0: // Prepare iVideoPlayer2 sl@0: LOG_CALL(iVideoPlayer2->Prepare()); sl@0: PrepareState(EVPPrepareComplete, KErrNone); sl@0: break; sl@0: sl@0: case EVPPrepareComplete: sl@0: // Add display window using default values - ie. video extent & window clipping sl@0: // defaulted to whole window. sl@0: LOG_CALL(iVideoPlayer2->AddDisplayWindowL(iWs, *iScreen, *iWindow)); sl@0: sl@0: // Perform any actions that the class or subclasses need before starting video playback. sl@0: DoBeforePlaybackActionsL(); sl@0: sl@0: // trigger the video to start playing sl@0: iError = KErrTimedOut; sl@0: PrepareState(EVPPlayComplete, KErrNone); sl@0: LOG_CALL(iVideoPlayer2->Play()); sl@0: sl@0: // Trigger a call to DoDuringPlaybackActionsL sl@0: iPlayTimer->After(KOneSecond); sl@0: break; sl@0: sl@0: case EVPPlayComplete: sl@0: iTestStepResult = EPass; sl@0: iPlayTimer->Cancel(); sl@0: CActiveScheduler::Stop(); sl@0: break; sl@0: } sl@0: } sl@0: } sl@0: sl@0: TInt RTestVclnt2Subtitle::SetCacheSize() sl@0: { sl@0: TInt error=UserSvr::HalFunction(EHalGroupVM,EVMHalSetCacheSize,(TAny*)KCacheSize,(TAny*)KMaxCacheSize); sl@0: TInt ret=CheckCacheError(error); sl@0: sl@0: return ret; sl@0: } sl@0: sl@0: TInt RTestVclnt2Subtitle::CheckCacheError(TInt aError) sl@0: { sl@0: TInt ret=KErrNone; sl@0: #ifdef __WINSCW__ sl@0: //Winscw does not support getting cache size. Ignoring -5 error sl@0: if(aError!=KErrNone) sl@0: { sl@0: if(aError!=KErrNotSupported) sl@0: { sl@0: INFO_PRINTF2(_L("Could not get the cache size %d"),aError); sl@0: ret=aError; sl@0: } sl@0: } sl@0: #else sl@0: if(aError!=KErrNone) sl@0: {//For ARMV5 we stop for all errors sl@0: INFO_PRINTF2(_L("Could not get the cache size %d"),aError); sl@0: ret=aError; sl@0: } sl@0: #endif sl@0: return ret; sl@0: } sl@0: sl@0: TInt RTestVclnt2Subtitle::RevertCacheSize() sl@0: { sl@0: TUint defaultCacheSize = 0; sl@0: //Done with the test. Setting 0 makes the cache size revert back to boot up values sl@0: TInt error=UserSvr::HalFunction(EHalGroupVM,EVMHalSetCacheSize,(TAny*)defaultCacheSize,(TAny*)defaultCacheSize); sl@0: return CheckCacheError(error); sl@0: } sl@0: sl@0: sl@0: // sl@0: // RTestVclnt2SubtitleEnableDuringPlayback sl@0: // sl@0: sl@0: RTestVclnt2SubtitleEnableDuringPlayback* RTestVclnt2SubtitleEnableDuringPlayback::NewL(const TDesC& aTestName, const TDesC& aSectName, const TDesC& aKeyName, TInt aExpectedError) sl@0: { sl@0: return new (ELeave) RTestVclnt2SubtitleEnableDuringPlayback(aTestName, aSectName, aKeyName, aExpectedError); sl@0: } sl@0: sl@0: RTestVclnt2SubtitleEnableDuringPlayback::RTestVclnt2SubtitleEnableDuringPlayback(const TDesC& aTestName, const TDesC& aSectName, const TDesC& aKeyName, TInt aExpectedError) sl@0: : RTestVclnt2Subtitle(aTestName, aSectName, aKeyName, aExpectedError) sl@0: { sl@0: } sl@0: sl@0: void RTestVclnt2SubtitleEnableDuringPlayback::DoBeforePlaybackActionsL() sl@0: { sl@0: INFO_PRINTF1(_L("Don't enable subtitles before playback; do nothing in DoBeforePlaybackActionsL()")); sl@0: } sl@0: sl@0: void RTestVclnt2SubtitleEnableDuringPlayback::DoDuringPlaybackActionsL() sl@0: { sl@0: if (!iVideoPlayer2->SubtitlesAvailable()) sl@0: { sl@0: ERR_PRINTF1(_L("SubtitlesAvailable() returned EFalse. Expected ETrue.")); sl@0: User::Leave(KErrNotSupported); sl@0: } sl@0: sl@0: iVideoPlayer2->EnableSubtitlesL(); sl@0: } sl@0: sl@0: // sl@0: // RTestVclnt2SubtitleDisableDuringPlayback sl@0: // sl@0: sl@0: RTestVclnt2SubtitleDisableDuringPlayback* RTestVclnt2SubtitleDisableDuringPlayback::NewL(const TDesC& aTestName, const TDesC& aSectName, const TDesC& aKeyName, TInt aExpectedError) sl@0: { sl@0: return new (ELeave) RTestVclnt2SubtitleDisableDuringPlayback(aTestName, aSectName, aKeyName, aExpectedError); sl@0: } sl@0: sl@0: RTestVclnt2SubtitleDisableDuringPlayback::RTestVclnt2SubtitleDisableDuringPlayback(const TDesC& aTestName, const TDesC& aSectName, const TDesC& aKeyName, TInt aExpectedError) sl@0: : RTestVclnt2Subtitle(aTestName, aSectName, aKeyName, aExpectedError) sl@0: { sl@0: } sl@0: sl@0: void RTestVclnt2SubtitleDisableDuringPlayback::DoDuringPlaybackActionsL() sl@0: { sl@0: iVideoPlayer2->DisableSubtitles(); sl@0: } sl@0: sl@0: // sl@0: // RTestVclnt2SubtitleDisableTwice sl@0: // sl@0: sl@0: RTestVclnt2SubtitleDisableTwice* RTestVclnt2SubtitleDisableTwice::NewL(const TDesC& aTestName, const TDesC& aSectName, const TDesC& aKeyName, TInt aExpectedError) sl@0: { sl@0: return new (ELeave) RTestVclnt2SubtitleDisableTwice(aTestName, aSectName, aKeyName, aExpectedError); sl@0: } sl@0: sl@0: RTestVclnt2SubtitleDisableTwice::RTestVclnt2SubtitleDisableTwice(const TDesC& aTestName, const TDesC& aSectName, const TDesC& aKeyName, TInt aExpectedError) sl@0: : RTestVclnt2Subtitle(aTestName, aSectName, aKeyName, aExpectedError) sl@0: { sl@0: } sl@0: sl@0: void RTestVclnt2SubtitleDisableTwice::DoBeforePlaybackActionsL() sl@0: { sl@0: iVideoPlayer2->DisableSubtitles(); sl@0: } sl@0: sl@0: void RTestVclnt2SubtitleDisableTwice::DoDuringPlaybackActionsL() sl@0: { sl@0: iVideoPlayer2->DisableSubtitles(); sl@0: } sl@0: sl@0: // sl@0: // RTestVclnt2SubtitleWindowClipBefore sl@0: // sl@0: sl@0: RTestVclnt2SubtitleWindowClipBefore* RTestVclnt2SubtitleWindowClipBefore::NewL(const TDesC& aTestName, const TDesC& aSectName, const TDesC& aKeyName, TInt aExpectedError) sl@0: { sl@0: return new (ELeave) RTestVclnt2SubtitleWindowClipBefore(aTestName, aSectName, aKeyName, aExpectedError); sl@0: } sl@0: sl@0: RTestVclnt2SubtitleWindowClipBefore::RTestVclnt2SubtitleWindowClipBefore(const TDesC& aTestName, const TDesC& aSectName, const TDesC& aKeyName, TInt aExpectedError) sl@0: : RTestVclnt2Subtitle(aTestName, aSectName, aKeyName, aExpectedError) sl@0: { sl@0: } sl@0: sl@0: void RTestVclnt2SubtitleWindowClipBefore::DoBeforePlaybackActionsL() sl@0: { sl@0: RTestVclnt2Subtitle::DoBeforePlaybackActionsL(); sl@0: sl@0: TSize windowSize(iWindow->Size().iWidth / 2, iWindow->Size().iHeight / 2); sl@0: sl@0: // shrink the window clipping rect by half the height & width sl@0: iVideoPlayer2->SetWindowClipRectL(*iWindow, TRect(windowSize)); sl@0: } sl@0: sl@0: // sl@0: // RTestVclnt2SubtitleWindowClipDuring sl@0: // sl@0: sl@0: RTestVclnt2SubtitleWindowClipDuring* RTestVclnt2SubtitleWindowClipDuring::NewL(const TDesC& aTestName, const TDesC& aSectName, const TDesC& aKeyName, TInt aExpectedError) sl@0: { sl@0: return new (ELeave) RTestVclnt2SubtitleWindowClipDuring(aTestName, aSectName, aKeyName, aExpectedError); sl@0: } sl@0: sl@0: RTestVclnt2SubtitleWindowClipDuring::RTestVclnt2SubtitleWindowClipDuring(const TDesC& aTestName, const TDesC& aSectName, const TDesC& aKeyName, TInt aExpectedError) sl@0: : RTestVclnt2Subtitle(aTestName, aSectName, aKeyName, aExpectedError) sl@0: { sl@0: } sl@0: sl@0: void RTestVclnt2SubtitleWindowClipDuring::DoDuringPlaybackActionsL() sl@0: { sl@0: TSize windowSize(iWindow->Size().iWidth / 2, iWindow->Size().iHeight / 2); sl@0: sl@0: // shrink the window clipping rect by half the height & width sl@0: iVideoPlayer2->SetWindowClipRectL(*iWindow, TRect(windowSize)); sl@0: } sl@0: sl@0: // sl@0: // RTestVclnt2SubtitleRotateBefore sl@0: // sl@0: sl@0: RTestVclnt2SubtitleRotateBefore* RTestVclnt2SubtitleRotateBefore::NewL(const TDesC& aTestName, const TDesC& aSectName, const TDesC& aKeyName, TInt aExpectedError) sl@0: { sl@0: return new (ELeave) RTestVclnt2SubtitleRotateBefore(aTestName, aSectName, aKeyName, aExpectedError); sl@0: } sl@0: sl@0: RTestVclnt2SubtitleRotateBefore::RTestVclnt2SubtitleRotateBefore(const TDesC& aTestName, const TDesC& aSectName, const TDesC& aKeyName, TInt aExpectedError) sl@0: : RTestVclnt2Subtitle(aTestName, aSectName, aKeyName, aExpectedError) sl@0: { sl@0: } sl@0: sl@0: void RTestVclnt2SubtitleRotateBefore::DoBeforePlaybackActionsL() sl@0: { sl@0: RTestVclnt2Subtitle::DoBeforePlaybackActionsL(); sl@0: iVideoPlayer2->SetRotationL(*iWindow, EVideoRotationClockwise180); sl@0: } sl@0: sl@0: // sl@0: // RTestVclnt2SubtitleRotateDuring sl@0: // sl@0: sl@0: RTestVclnt2SubtitleRotateDuring* RTestVclnt2SubtitleRotateDuring::NewL(const TDesC& aTestName, const TDesC& aSectName, const TDesC& aKeyName, TInt aExpectedError) sl@0: { sl@0: return new (ELeave) RTestVclnt2SubtitleRotateDuring(aTestName, aSectName, aKeyName, aExpectedError); sl@0: } sl@0: sl@0: RTestVclnt2SubtitleRotateDuring::RTestVclnt2SubtitleRotateDuring(const TDesC& aTestName, const TDesC& aSectName, const TDesC& aKeyName, TInt aExpectedError) sl@0: : RTestVclnt2Subtitle(aTestName, aSectName, aKeyName, aExpectedError) sl@0: { sl@0: } sl@0: sl@0: void RTestVclnt2SubtitleRotateDuring::DoDuringPlaybackActionsL() sl@0: { sl@0: iVideoPlayer2->SetRotationL(*iWindow, EVideoRotationClockwise180); sl@0: } sl@0: sl@0: // sl@0: // RTestVclnt2SubtitleRemoveDisplayDuring sl@0: // sl@0: sl@0: RTestVclnt2SubtitleRemoveDisplayDuring* RTestVclnt2SubtitleRemoveDisplayDuring::NewL(const TDesC& aTestName, const TDesC& aSectName, const TDesC& aKeyName, TInt aExpectedError) sl@0: { sl@0: return new (ELeave) RTestVclnt2SubtitleRemoveDisplayDuring(aTestName, aSectName, aKeyName, aExpectedError); sl@0: } sl@0: sl@0: RTestVclnt2SubtitleRemoveDisplayDuring::RTestVclnt2SubtitleRemoveDisplayDuring(const TDesC& aTestName, const TDesC& aSectName, const TDesC& aKeyName, TInt aExpectedError) sl@0: : RTestVclnt2Subtitle(aTestName, aSectName, aKeyName, aExpectedError) sl@0: { sl@0: } sl@0: sl@0: void RTestVclnt2SubtitleRemoveDisplayDuring::DoDuringPlaybackActionsL() sl@0: { sl@0: iVideoPlayer2->RemoveDisplayWindow(*iWindow); sl@0: iVideoPlayer2->AddDisplayWindowL(iWs, *iScreen, *iWindow); sl@0: } sl@0: sl@0: // sl@0: // RTestVclnt2SubtitleNotAvailable sl@0: // sl@0: sl@0: RTestVclnt2SubtitleNotAvailable* RTestVclnt2SubtitleNotAvailable::NewL(const TDesC& aTestName, const TDesC& aSectName, const TDesC& aKeyName, TInt aExpectedError) sl@0: { sl@0: return new (ELeave) RTestVclnt2SubtitleNotAvailable(aTestName, aSectName, aKeyName, aExpectedError); sl@0: } sl@0: sl@0: RTestVclnt2SubtitleNotAvailable::RTestVclnt2SubtitleNotAvailable(const TDesC& aTestName, const TDesC& aSectName, const TDesC& aKeyName, TInt aExpectedError) sl@0: : RTestVclnt2Subtitle(aTestName, aSectName, aKeyName, aExpectedError) sl@0: { sl@0: } sl@0: sl@0: void RTestVclnt2SubtitleNotAvailable::DoBeforePlaybackActionsL() sl@0: { sl@0: if (iVideoPlayer2->SubtitlesAvailable()) sl@0: { sl@0: ERR_PRINTF1(_L("SubtitlesAvailable() returned ETrue. Expected EFalse.")); sl@0: User::Leave(KErrGeneral); sl@0: } sl@0: sl@0: TRAPD(err, iVideoPlayer2->EnableSubtitlesL()); sl@0: sl@0: if (KErrNotFound != err) sl@0: { sl@0: ERR_PRINTF3(_L("EnableSubtitlesL() left with %d. Expected %d."), err, KErrNotFound); sl@0: User::Leave(KErrGeneral); sl@0: } sl@0: } sl@0: sl@0: // sl@0: // RTestVclnt2SubtitleLanguage sl@0: // sl@0: sl@0: RTestVclnt2SubtitleLanguage* RTestVclnt2SubtitleLanguage::NewL(const TDesC& aTestName, const TDesC& aSectName, const TDesC& aKeyName, TInt aExpectedError) sl@0: { sl@0: return new (ELeave) RTestVclnt2SubtitleLanguage(aTestName, aSectName, aKeyName, aExpectedError); sl@0: } sl@0: sl@0: RTestVclnt2SubtitleLanguage::RTestVclnt2SubtitleLanguage(const TDesC& aTestName, const TDesC& aSectName, const TDesC& aKeyName, TInt aExpectedError) sl@0: : RTestVclnt2Subtitle(aTestName, aSectName, aKeyName, aExpectedError) sl@0: { sl@0: } sl@0: sl@0: void RTestVclnt2SubtitleLanguage::DoBeforePlaybackActionsL() sl@0: { sl@0: RTestVclnt2Subtitle::DoBeforePlaybackActionsL(); sl@0: sl@0: TLanguage lang = ELangNone; sl@0: TRAPD(err, lang = iVideoPlayer2->SubtitleLanguageL()); sl@0: if (KErrNone != err) sl@0: { sl@0: ERR_PRINTF3(_L("SubtitleLanguageL() left with %d. Expected %d."), err, KErrNone); sl@0: User::Leave(err); sl@0: } sl@0: else if (ELangNone != lang) sl@0: { sl@0: // Languages are not supported; ELangNone should be returned. sl@0: ERR_PRINTF3(_L("SubtitleLanguageL() returned %d. Expected %d."), lang, ELangNone); sl@0: User::Leave(KErrGeneral); sl@0: } sl@0: sl@0: TInt count = -1; sl@0: TRAP(err, count = iVideoPlayer2->SupportedSubtitleLanguagesL().Count()); sl@0: if (KErrNone != err) sl@0: { sl@0: ERR_PRINTF3(_L("SupportedSubtitleLanguagesL() left with %d. Expected %d."), err, KErrNone); sl@0: User::Leave(KErrGeneral); sl@0: } sl@0: if (count != 0) sl@0: { sl@0: ERR_PRINTF1(_L("SupportedSubtitleLanguagesL() returned a non-empty array")); sl@0: User::Leave(KErrGeneral); sl@0: } sl@0: sl@0: TRAP(err, iVideoPlayer2->SetSubtitleLanguageL(lang)); sl@0: sl@0: if (KErrNotSupported != err) sl@0: { sl@0: ERR_PRINTF3(_L("SetSubtitleLanguageL() left with %d. Expected %d."), err, KErrNone); sl@0: User::Leave(KErrGeneral); sl@0: } sl@0: } sl@0: sl@0: // sl@0: // RTestVclnt2SubtitleRedraw sl@0: // sl@0: sl@0: RTestVclnt2SubtitleRedraw* RTestVclnt2SubtitleRedraw::NewL(const TDesC& aTestName, const TDesC& aSectName, const TDesC& aKeyName, TInt aExpectedError, TBool aEnableSubtitles) sl@0: { sl@0: return new (ELeave) RTestVclnt2SubtitleRedraw(aTestName, aSectName, aKeyName, aExpectedError, aEnableSubtitles); sl@0: } sl@0: sl@0: RTestVclnt2SubtitleRedraw::RTestVclnt2SubtitleRedraw(const TDesC& aTestName, const TDesC& aSectName, const TDesC& aKeyName, TInt aExpectedError, TBool aEnableSubtitles) sl@0: : RTestVclnt2Subtitle(aTestName, aSectName, aKeyName, aExpectedError), iEnableSubtitles(aEnableSubtitles) sl@0: { sl@0: } sl@0: sl@0: void RTestVclnt2SubtitleRedraw::DoBeforePlaybackActionsL() sl@0: { sl@0: if (iEnableSubtitles) sl@0: { sl@0: // The parent class will enable subtitle support sl@0: RTestVclnt2Subtitle::DoBeforePlaybackActionsL(); sl@0: } sl@0: } sl@0: sl@0: void RTestVclnt2SubtitleRedraw::DoDuringPlaybackActionsL() sl@0: { sl@0: // Redraw the whole subtitle sl@0: iWindow->Invalidate(); sl@0: LOG_CALL(iVideoPlayer2->RedrawSubtitle(*iWindow, TRect(iWindow->Size()))); sl@0: } sl@0: sl@0: // sl@0: // RTestVclnt2SubtitleRotateClipRedraw sl@0: // sl@0: sl@0: RTestVclnt2SubtitleRotateClipRedraw* RTestVclnt2SubtitleRotateClipRedraw::NewL(const TDesC& aTestName, const TDesC& aSectName, const TDesC& aKeyName, TInt aExpectedError) sl@0: { sl@0: return new (ELeave) RTestVclnt2SubtitleRotateClipRedraw(aTestName, aSectName, aKeyName, aExpectedError); sl@0: } sl@0: sl@0: RTestVclnt2SubtitleRotateClipRedraw::RTestVclnt2SubtitleRotateClipRedraw(const TDesC& aTestName, const TDesC& aSectName, const TDesC& aKeyName, TInt aExpectedError) sl@0: : RTestVclnt2Subtitle(aTestName, aSectName, aKeyName, aExpectedError) sl@0: { sl@0: } sl@0: sl@0: void RTestVclnt2SubtitleRotateClipRedraw::DoBeforePlaybackActionsL() sl@0: { sl@0: RTestVclnt2Subtitle::DoBeforePlaybackActionsL(); sl@0: sl@0: iVideoPlayer2->SetRotationL(*iWindow, EVideoRotationClockwise90); sl@0: sl@0: // shrink the window clipping rect by half the height & width sl@0: TSize windowSize(iWindow->Size().iWidth / 3, iWindow->Size().iHeight / 2); sl@0: iVideoPlayer2->SetWindowClipRectL(*iWindow, TRect(windowSize)); sl@0: } sl@0: sl@0: void RTestVclnt2SubtitleRotateClipRedraw::DoDuringPlaybackActionsL() sl@0: { sl@0: // Redraw the whole subtitle sl@0: iWindow->Invalidate(); sl@0: iVideoPlayer2->RedrawSubtitle(*iWindow, TRect(iWindow->Size())); sl@0: } sl@0: sl@0: // sl@0: // RTestVclnt2SubtitleMultipleWindows sl@0: // sl@0: sl@0: RTestVclnt2SubtitleMultipleWindows* RTestVclnt2SubtitleMultipleWindows::NewL(const TDesC& aTestName, const TDesC& aSectName, const TDesC& aKeyName, TInt aExpectedError) sl@0: { sl@0: return new (ELeave) RTestVclnt2SubtitleMultipleWindows(aTestName, aSectName, aKeyName, aExpectedError); sl@0: } sl@0: sl@0: RTestVclnt2SubtitleMultipleWindows::RTestVclnt2SubtitleMultipleWindows(const TDesC& aTestName, const TDesC& aSectName, const TDesC& aKeyName, TInt aExpectedError) sl@0: : RTestVclnt2Subtitle(aTestName, aSectName, aKeyName, aExpectedError) sl@0: { sl@0: } sl@0: sl@0: TVerdict RTestVclnt2SubtitleMultipleWindows::DoTestStepPreambleL() sl@0: { sl@0: TVerdict result = RTestVclnt2Subtitle::DoTestStepPreambleL(); sl@0: sl@0: if (result != EPass) sl@0: { sl@0: return result; sl@0: } sl@0: sl@0: iSecondaryWin = new(ELeave) RWindow(iWs); sl@0: sl@0: // Construct an RWindow with a unique id. Use this pointer to get a unique number. sl@0: User::LeaveIfError(iSecondaryWin->Construct(iRootWindow, ((TInt) this) + 3)); sl@0: iSecondaryWin->SetRequiredDisplayMode(EColor16MA); sl@0: iSecondaryWin->SetExtent(TPoint(0,0), TSize(100,100)); sl@0: iSecondaryWin->SetVisible(ETrue); sl@0: iSecondaryWin->SetBackgroundColor(TRgb(0, 0)); sl@0: iSecondaryWin->Activate(); sl@0: iSecondaryWin->BeginRedraw(); sl@0: iSecondaryWin->EndRedraw(); sl@0: iWs.Flush(); sl@0: sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict RTestVclnt2SubtitleMultipleWindows::DoTestStepPostambleL() sl@0: { sl@0: sl@0: delete iVideoPlayer2; sl@0: iVideoPlayer2 = NULL; sl@0: sl@0: iSecondaryWin->Close(); sl@0: delete iSecondaryWin; sl@0: iSecondaryWin = NULL; sl@0: sl@0: // Base DoTestStepPostambleL sl@0: return RTestVclnt2Subtitle::DoTestStepPostambleL(); sl@0: } sl@0: sl@0: void RTestVclnt2SubtitleMultipleWindows::DoBeforePlaybackActionsL() sl@0: { sl@0: TRAPD(err, iVideoPlayer2->AddDisplayWindowL(iWs, *iScreen, *iSecondaryWin)); sl@0: sl@0: if (err != KErrNone) sl@0: { sl@0: ERR_PRINTF3(_L("Adding second display window with AddDisplayWindowL() left with %d. Expected %d."), err, KErrNone); sl@0: User::Leave(err); sl@0: } sl@0: sl@0: RTestVclnt2Subtitle::DoBeforePlaybackActionsL(); sl@0: } sl@0: sl@0: // sl@0: // RTestVclnt2SubtitleEnableTwice sl@0: // sl@0: sl@0: RTestVclnt2SubtitleEnableTwice* RTestVclnt2SubtitleEnableTwice::NewL(const TDesC& aTestName, const TDesC& aSectName, const TDesC& aKeyName, TInt aExpectedError) sl@0: { sl@0: return new (ELeave) RTestVclnt2SubtitleEnableTwice(aTestName, aSectName, aKeyName, aExpectedError); sl@0: } sl@0: sl@0: RTestVclnt2SubtitleEnableTwice::RTestVclnt2SubtitleEnableTwice(const TDesC& aTestName, const TDesC& aSectName, const TDesC& aKeyName, TInt aExpectedError) sl@0: : RTestVclnt2Subtitle(aTestName, aSectName, aKeyName, aExpectedError) sl@0: { sl@0: } sl@0: sl@0: void RTestVclnt2SubtitleEnableTwice::DoBeforePlaybackActionsL() sl@0: { sl@0: RTestVclnt2Subtitle::DoBeforePlaybackActionsL(); sl@0: sl@0: // Enable subtitles again sl@0: TRAPD(err, iVideoPlayer2->EnableSubtitlesL()); sl@0: sl@0: if (KErrInUse != err) sl@0: { sl@0: ERR_PRINTF3(_L("Calling EnableSubtitlesL twice left with %d. Expected %d."), err, KErrInUse); sl@0: // Leave with KErrGeneral if err is no error. Otherwise leave with err. sl@0: User::Leave(KErrNone == err ? KErrGeneral : err); sl@0: } sl@0: } sl@0: sl@0: // sl@0: // RTestVclnt2SubtitleEnableDisableStress sl@0: // sl@0: sl@0: RTestVclnt2SubtitleEnableDisableStress* RTestVclnt2SubtitleEnableDisableStress::NewL(const TDesC& aTestName, const TDesC& aSectName, const TDesC& aKeyName, TInt aExpectedError) sl@0: { sl@0: return new (ELeave) RTestVclnt2SubtitleEnableDisableStress(aTestName, aSectName, aKeyName, aExpectedError); sl@0: } sl@0: sl@0: RTestVclnt2SubtitleEnableDisableStress::RTestVclnt2SubtitleEnableDisableStress(const TDesC& aTestName, const TDesC& aSectName, const TDesC& aKeyName, TInt aExpectedError) sl@0: : RTestVclnt2Subtitle(aTestName, aSectName, aKeyName, aExpectedError) sl@0: { sl@0: // Expect subtitles to be available if this is not being run with "subtitlesUnavailable" file. sl@0: iExpectAvailable = (aKeyName != _L("subtitleUnavailable")); sl@0: } sl@0: sl@0: void RTestVclnt2SubtitleEnableDisableStress::DoBeforePlaybackActionsL() sl@0: { sl@0: TBool subtitlesAvail = iVideoPlayer2->SubtitlesAvailable(); sl@0: sl@0: if (iExpectAvailable != subtitlesAvail) sl@0: { sl@0: ERR_PRINTF1(_L("SubtitlesAvailable() gave unexpected result")); sl@0: User::Leave(KErrGeneral); sl@0: } sl@0: sl@0: if (subtitlesAvail) sl@0: { sl@0: INFO_PRINTF1(_L("Enabling subtitles")); sl@0: iVideoPlayer2->EnableSubtitlesL(); sl@0: } sl@0: else sl@0: { sl@0: INFO_PRINTF1(_L("Subtitles not available")); sl@0: } sl@0: sl@0: iDisableNext = ETrue; sl@0: } sl@0: sl@0: void RTestVclnt2SubtitleEnableDisableStress::DoDuringPlaybackActionsL() sl@0: { sl@0: TBool subtitlesAvail = iVideoPlayer2->SubtitlesAvailable(); sl@0: sl@0: if (iExpectAvailable != subtitlesAvail) sl@0: { sl@0: ERR_PRINTF1(_L("SubtitlesAvailable() gave unexpected result")); sl@0: User::Leave(KErrGeneral); sl@0: } sl@0: sl@0: if (iDisableNext) sl@0: { sl@0: INFO_PRINTF1(_L("Disabling subtitles")); sl@0: iVideoPlayer2->DisableSubtitles(); sl@0: } sl@0: else if (subtitlesAvail) sl@0: { sl@0: INFO_PRINTF1(_L("Enabling subtitles")); sl@0: iVideoPlayer2->EnableSubtitlesL(); sl@0: } sl@0: else sl@0: { sl@0: INFO_PRINTF1(_L("Subtitles not available... cannot enable")); sl@0: } sl@0: sl@0: iDisableNext = !iDisableNext; sl@0: iPlayTimer->After(KOneSecond / 4); sl@0: } sl@0: sl@0: // sl@0: // RTestVclnt2SubtitleAlloc sl@0: // sl@0: sl@0: RTestVclnt2SubtitleAlloc* RTestVclnt2SubtitleAlloc::NewL(const TDesC& aTestName, const TDesC& aSectName, const TDesC& aKeyName, TInt aExpectedError) sl@0: { sl@0: return new (ELeave) RTestVclnt2SubtitleAlloc(aTestName, aSectName, aKeyName, aExpectedError); sl@0: } sl@0: sl@0: RTestVclnt2SubtitleAlloc::RTestVclnt2SubtitleAlloc(const TDesC& aTestName, const TDesC& aSectName, const TDesC& aKeyName, TInt aExpectedError) sl@0: : RTestVclnt2Subtitle(aTestName, aSectName, aKeyName, aExpectedError) sl@0: { sl@0: } sl@0: sl@0: TVerdict RTestVclnt2SubtitleAlloc::DoTestStepPreambleL() sl@0: { sl@0: // Don't do the normal initialization here. It will be done before each alloc test iteration. sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict RTestVclnt2SubtitleAlloc::DoTestStepPostambleL() sl@0: { sl@0: // Don't do the normal cleanup here. It will be done after each alloc test iteration. sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict RTestVclnt2SubtitleAlloc::PerformTestL() sl@0: { sl@0: TVerdict result = EFail; sl@0: TRAPD(err, result = RTestVclnt2Subtitle::DoTestStepPreambleL()); sl@0: if (iError != KErrNone) sl@0: { sl@0: err = iError; sl@0: } sl@0: sl@0: if (err == KErrNone && result == EPass && iError == KErrNone) sl@0: { sl@0: TRAP(err, result = RTestVclnt2AviPlayerStep::DoTestStepL()); sl@0: sl@0: if (iError != KErrNone) sl@0: { sl@0: err = iError; sl@0: } sl@0: } sl@0: sl@0: // Call postable function, but don't overwrite verdict from previous test call results. sl@0: TVerdict postResult = RTestVclnt2Subtitle::DoTestStepPostambleL(); sl@0: sl@0: if (iError != KErrNone) sl@0: { sl@0: err = iError; sl@0: } sl@0: sl@0: User::LeaveIfError(err); sl@0: if (EPass != result) sl@0: { sl@0: return result; sl@0: } sl@0: if (EPass != postResult) sl@0: { sl@0: return postResult; sl@0: } sl@0: sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict RTestVclnt2SubtitleAlloc::DoTestStepL() sl@0: { sl@0: TVerdict allocTestResult = EFail; sl@0: TVerdict result = EFail; sl@0: sl@0: TRAPD(err, result = PerformTestL()); sl@0: sl@0: if (err != KErrNone || result != EPass) sl@0: { sl@0: ERR_PRINTF1(_L("Failed to run test iteration without setting heap allocation failure flag")); sl@0: return allocTestResult; sl@0: } sl@0: sl@0: TBool completed = EFalse; sl@0: sl@0: for (TInt rate = 1; !completed; rate++) sl@0: { sl@0: __UHEAP_SETFAIL(RHeap::EFailNext, rate); sl@0: __MM_HEAP_MARK; sl@0: sl@0: result = EFail; sl@0: TRAPD(err, result = PerformTestL()); sl@0: sl@0: INFO_PRINTF3(_L("Iteration %d. Alloc failed %d times"), rate, __UHEAP_CHECKFAILURE); sl@0: sl@0: if (__UHEAP_CHECKFAILURE == 0) sl@0: { sl@0: // Heap did not fail. Test should have passed with no errors. sl@0: if (KErrNone != result) sl@0: { sl@0: ERR_PRINTF2(_L("Failed on iteration %d. Test failed when no heap allocation failed"), rate); sl@0: allocTestResult = EFail; sl@0: } sl@0: else sl@0: { sl@0: INFO_PRINTF2(_L("Passed on iteration %d."), rate); sl@0: allocTestResult = EPass; sl@0: } sl@0: sl@0: completed = ETrue; // Finished iterating the test sl@0: } sl@0: else if ((err == KErrNone && result == EPass) || (err == KErrNoMemory)) sl@0: { sl@0: // Continue with next iteration if (a) alloc fail was handled and no error and a pass or sl@0: // (b) we got an out of memory error. sl@0: INFO_PRINTF3(_L("Iteration result is %d, error is %d. Starting next iteration"), result, err); sl@0: } sl@0: else sl@0: { sl@0: ERR_PRINTF4(_L("Failed on iteration %d. Test failed with error %d. Expected %d."), rate, err, KErrNoMemory); sl@0: completed = ETrue; sl@0: allocTestResult = EFail; sl@0: } sl@0: sl@0: __MM_HEAP_MARKEND; sl@0: } sl@0: sl@0: __UHEAP_SETFAIL(RHeap::ENone, 0); sl@0: sl@0: return allocTestResult; sl@0: }