First public contribution.
1 // Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
2 // All rights reserved.
3 // This component and the accompanying materials are made available
4 // under the terms of "Eclipse Public License v1.0"
5 // which accompanies this distribution, and is available
6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
8 // Initial Contributors:
9 // Nokia Corporation - initial contribution.
16 #include "srtdecoder.h"
17 #include "srtreader.h"
18 #include "testsrtdecoderregionfuncs.h"
20 _LIT( KSampleSubtitleSRTFilepath1, "c:\\mm\\subtitle1.srt" );
22 // Implementation of RTestSrtDecoderStep0001
24 RTestSrtDecoderStep0001::RTestSrtDecoderStep0001()
26 iTestStepName = _L("MM-MMF-SUBTITLE-SRTDECODER-U-0001-HP");
29 TVerdict RTestSrtDecoderStep0001::DoTestStepPreambleL()
31 InitializeTestStepL(EFalse, KSampleSubtitleSRTFilepath1);
36 TVerdict RTestSrtDecoderStep0001::DoTestStepPostambleL()
38 UnInitializeTestStep();
43 TVerdict RTestSrtDecoderStep0001::DoTestStepL()
45 INFO_PRINTF1(_L("Enter DoTestStepL"));
46 TVerdict result = TestCalculateSubtitleRegion();
49 ERR_PRINTF1(_L("Error - RTestSrtDecoderStep0001::TestCalculateSubtitleRegion failed. "));
50 INFO_PRINTF1(_L("Exit DoTestStepL"));
54 result = TestSetVideoPosition();
57 ERR_PRINTF1(_L("Error - RTestSrtDecoderStep0001::TestSetVideoPosition failed. "));
58 INFO_PRINTF1(_L("Exit DoTestStepL"));
62 result = TestStartStop();
65 ERR_PRINTF1(_L("Error - RTestSrtDecoderStep0001::TestStartStop failed. "));
66 INFO_PRINTF1(_L("Exit DoTestStepL"));
70 INFO_PRINTF1(_L("Exit DoTestStepL"));
75 TVerdict RTestSrtDecoderStep0001::TestCalculateSubtitleRegion()
77 TVerdict result = EPass;
78 const TInt KSrtSubtitleRegionYFactor = 33;
80 inputRegion.iTl.iX = 1;
81 inputRegion.iTl.iY = 1;
82 inputRegion.iBr.iX = 240;
83 inputRegion.iBr.iY = 160;
89 while((inputRegion.iBr.iX > inputRegion.iTl.iX) && (inputRegion.iBr.iY > inputRegion.iTl.iY))
91 TInt error = iSrtDecoder->CalculateSubtitleRegion(inputRegion, outputRegion);
92 if (KErrNone != error)
97 expectedRegion.SetRect(
99 inputRegion.iTl.iY + inputRegion.Height() * (100 - KSrtSubtitleRegionYFactor) / 100,
103 if (expectedRegion != outputRegion)
105 ERR_PRINTF5(_L("Error - MSubtitleDecoder::CalculateSubtitleRegion failed to handle rect(%d, %d, %d, %d). "),
106 inputRegion.iTl.iX, inputRegion.iTl.iY, inputRegion.iBr.iX, inputRegion.iBr.iY);
110 inputRegion.iTl.iX += deltaValue;
111 inputRegion.iTl.iY += deltaValue;
112 inputRegion.iBr.iX -= deltaValue;
113 inputRegion.iBr.iY -= deltaValue;
119 TVerdict RTestSrtDecoderStep0001::TestSetVideoPosition()
121 TVerdict result = EPass;
125 for (TInt i = 0; i < 20; i++)
128 iSrtDecoder->SetVideoPosition(val);
134 TVerdict RTestSrtDecoderStep0001::TestStartStop()
136 TVerdict result = EPass;
138 for (TInt i = 0; i < 10; i++)
140 iSrtDecoder->Start();
147 // Implementation of RTestSrtDecoderStep0102
149 RTestSrtDecoderStep0102::RTestSrtDecoderStep0102()
151 iTestStepName = _L("MM-MMF-SUBTITLE-SRTDECODER-U-0102-HP");
154 TVerdict RTestSrtDecoderStep0102::DoTestStepPreambleL()
156 InitializeTestStepL(EFalse, KSampleSubtitleSRTFilepath1);
161 TVerdict RTestSrtDecoderStep0102::DoTestStepPostambleL()
163 UnInitializeTestStep();
168 TVerdict RTestSrtDecoderStep0102::DoTestStepL()
170 INFO_PRINTF1(_L("Enter DoTestStepL"));
171 TVerdict result = EPass;
173 result = TestCalculateSubtitleRegion();
176 ERR_PRINTF1(_L("Error - RTestSrtDecoderStep0102::TestCalculateSubtitleRegion failed. "));
177 INFO_PRINTF1(_L("Exit DoTestStepL"));
181 result = TestStartStop();
184 ERR_PRINTF1(_L("Error - RTestSrtDecoderStep0102::TestStartStop failed. "));
185 INFO_PRINTF1(_L("Exit DoTestStepL"));
189 INFO_PRINTF1(_L("Exit DoTestStepL"));
193 TVerdict RTestSrtDecoderStep0102::TestCalculateSubtitleRegion()
195 TInt error = KErrNone;
196 TInt expectedErr = KErrArgument;
199 const TInt KTestSubtitleRegionValueNum = 4;
200 const TInt KTestSubtitleInvalidRegionTypeNum = 5;
201 const TInt KTestSubtitleRegionValues[KTestSubtitleRegionValueNum] = {10, 20, 20, 200};
202 TInt testSubtitleRegionFactors[KTestSubtitleRegionValueNum] = {0, 0, 0, 0};
203 const TInt KTestSubtitleRegionFactorIndex[KTestSubtitleInvalidRegionTypeNum][KTestSubtitleRegionValueNum] =
205 // test inverted rect
207 // test inverted rect
209 // test a vertical line
211 // test a horizontal line
219 for (i = 0; i < KTestSubtitleRegionValueNum; i++)
222 KTestSubtitleRegionValues[0] * testSubtitleRegionFactors[0],
223 KTestSubtitleRegionValues[1] * testSubtitleRegionFactors[1],
224 KTestSubtitleRegionValues[2] * testSubtitleRegionFactors[2],
225 KTestSubtitleRegionValues[3] * testSubtitleRegionFactors[3]);
226 error = iSrtDecoder->CalculateSubtitleRegion(inputRegion, outputRegion);
228 if (expectedErr != error)
230 ERR_PRINTF5(_L("Error - MSubtitleDecoder::CalculateSubtitleRegion failed to handle invalid rect(%d, %d, %d, %d). "),
231 inputRegion.iTl.iX, inputRegion.iTl.iY, inputRegion.iBr.iX, inputRegion.iBr.iY);
235 // initialize factors
236 testSubtitleRegionFactors[i] = 1;
240 for (i = 0; i < KTestSubtitleRegionValueNum; i++)
242 // in each loop, the factors will have different number of minus value.
243 testSubtitleRegionFactors[i] = -1;
245 KTestSubtitleRegionValues[0] * testSubtitleRegionFactors[0],
246 KTestSubtitleRegionValues[1] * testSubtitleRegionFactors[1],
247 KTestSubtitleRegionValues[2] * testSubtitleRegionFactors[2],
248 KTestSubtitleRegionValues[3] * testSubtitleRegionFactors[3]);
249 error = iSrtDecoder->CalculateSubtitleRegion(inputRegion, outputRegion);
251 if (expectedErr != error)
253 ERR_PRINTF5(_L("Error - MSubtitleDecoder::CalculateSubtitleRegion failed to handle invalid rect(%d, %d, %d, %d). "),
254 inputRegion.iTl.iX, inputRegion.iTl.iY, inputRegion.iBr.iX, inputRegion.iBr.iY);
259 // Test various invalid rectangles
260 for (i = 0; i < KTestSubtitleInvalidRegionTypeNum; i++)
263 KTestSubtitleRegionValues[KTestSubtitleRegionFactorIndex[i][0]],
264 KTestSubtitleRegionValues[KTestSubtitleRegionFactorIndex[i][1]],
265 KTestSubtitleRegionValues[KTestSubtitleRegionFactorIndex[i][2]],
266 KTestSubtitleRegionValues[KTestSubtitleRegionFactorIndex[i][3]]);
267 error = iSrtDecoder->CalculateSubtitleRegion(inputRegion, outputRegion);
268 if (expectedErr != error)
270 ERR_PRINTF5(_L("Error - MSubtitleDecoder::CalculateSubtitleRegion failed to handle invalid rect(%d, %d, %d, %d). "),
271 inputRegion.iTl.iX, inputRegion.iTl.iY, inputRegion.iBr.iX, inputRegion.iBr.iY);
279 TVerdict RTestSrtDecoderStep0102::TestStartStop()
281 TVerdict result = EPass;
283 // Do not call Start before Stop because it will panic
284 // Call Stop() multiple times with and without calling Start() first
285 for (TInt i = 0; i < 10; i++)
287 if ((0 == i) || (i % 4))
293 iSrtDecoder->Start();
302 // Implementation of RTestSrtDecoderStep0104
304 RTestSrtDecoderStep0104::RTestSrtDecoderStep0104()
306 iTestStepName = _L("MM-MMF-SUBTITLE-SRTDECODER-U-0104-HP");
309 TVerdict RTestSrtDecoderStep0104::DoTestStepL()
311 INFO_PRINTF1(_L("Enter DoTestStepL"));
312 TVerdict result = EPass;
314 iSrtReader = CSrtReader::NewL(KSampleSubtitleSRTFilepath1);
316 User::LeaveIfError(iRbsSession.Connect());
317 CleanupStack::PushL(&iRbsSession);
318 iSrtDecoder = CSrtSubtitleDecoder::NewL(*iSrtReader);
320 iSrtDecoder->SetVideoPosition(-100);
322 INFO_PRINTF1(_L("Exit DoTestStepL"));