photosgallery/viewframework/medialists/tsrc/t_glxfromfocusoutwarditerator/t_glxfromfocusoutwarditerator.cpp
changeset 0 4e91876724a2
child 18 bcb43dc84c44
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/photosgallery/viewframework/medialists/tsrc/t_glxfromfocusoutwarditerator/t_glxfromfocusoutwarditerator.cpp	Thu Dec 17 08:45:44 2009 +0200
@@ -0,0 +1,680 @@
+/*
+* Copyright (c) 2006-2006 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:    TGlxFromFocusOutwardIterator unit tests
+*
+*/
+
+
+
+
+#include <digia/eunit/eunitmacros.h>
+
+#include "t_glxfromfocusoutwarditerator.h"
+
+// ----------------------------------------------------------------------------
+// NewL
+// ----------------------------------------------------------------------------
+//
+T_CGlxFromFocusOutwardIterator* T_CGlxFromFocusOutwardIterator::NewL()
+    {
+    T_CGlxFromFocusOutwardIterator* self = T_CGlxFromFocusOutwardIterator::NewLC();
+    CleanupStack::Pop();
+    return self;
+    }
+
+// ----------------------------------------------------------------------------
+// NewLC
+// ----------------------------------------------------------------------------
+//
+T_CGlxFromFocusOutwardIterator* T_CGlxFromFocusOutwardIterator::NewLC()
+    {
+    T_CGlxFromFocusOutwardIterator* self = new( ELeave ) T_CGlxFromFocusOutwardIterator();
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    return self;
+    }
+
+// ----------------------------------------------------------------------------
+// Destructor
+// ----------------------------------------------------------------------------
+//
+T_CGlxFromFocusOutwardIterator::~T_CGlxFromFocusOutwardIterator()
+    {
+    }
+
+// ----------------------------------------------------------------------------
+// Constructor
+// ----------------------------------------------------------------------------
+//
+T_CGlxFromFocusOutwardIterator::T_CGlxFromFocusOutwardIterator()
+    {
+    }
+
+// ----------------------------------------------------------------------------
+// Constructor
+// ----------------------------------------------------------------------------
+//
+void T_CGlxFromFocusOutwardIterator::ConstructL()
+    {
+    // The ConstructL from the base class CEUnitTestSuiteClass must be called.
+    // It generates the test case table.
+    CEUnitTestSuiteClass::ConstructL();
+    }
+
+// ----------------------------------------------------------------------------
+// Setup
+// ----------------------------------------------------------------------------
+//
+void T_CGlxFromFocusOutwardIterator::SetupL(  )
+    {
+    iOrder = &iFocusOrder;
+    iList.iCount = 0;
+    iList.iFocusIndex = -1;
+    iOrder->SetToFirst(&iList);
+    iFocusOrder.SetRangeOffsets(0, 0);
+    }
+
+// ----------------------------------------------------------------------------
+// Teardown
+// ----------------------------------------------------------------------------
+//
+void T_CGlxFromFocusOutwardIterator::Teardown(  )
+    {
+    } 
+
+// ----------------------------------------------------------------------------
+// UT_TestEmptyL
+// ----------------------------------------------------------------------------
+//
+void T_CGlxFromFocusOutwardIterator::UT_TestEmptyL(  )
+    {
+    EUNIT_ASSERT(iFocusOrder.iCurrentItem == 0 && iFocusOrder.iFrontOffset == 0 && 
+    	iFocusOrder.iRearOffset == 0 && iFocusOrder.iList == &iList);
+	TInt index;
+
+	// Test with empty list
+	index = (*iOrder)++;
+    EUNIT_ASSERT(iFocusOrder.iCurrentItem == 0 && index == KErrNotFound);
+    EUNIT_ASSERT(iFocusOrder.iFrontOffset == 0 && iFocusOrder.iRearOffset == 0 && iFocusOrder.iList == &iList);
+	index = (*iOrder)++;
+    EUNIT_ASSERT(iFocusOrder.iCurrentItem == 0 && index == KErrNotFound);
+    
+	// Test with a range
+    iOrder->SetToFirst(&iList); // (Does nothing)
+    iFocusOrder.SetRangeOffsets(1, 1);
+	index = (*iOrder)++;
+    EUNIT_ASSERT(iFocusOrder.iCurrentItem == 0 && index == KErrNotFound);
+    EUNIT_ASSERT(iFocusOrder.iFrontOffset == 1 && iFocusOrder.iRearOffset == 1 && iFocusOrder.iList == &iList);
+	index = (*iOrder)++;
+    EUNIT_ASSERT(iFocusOrder.iCurrentItem == 0 && index == KErrNotFound);    
+    
+	// Test with a range
+    iOrder->SetToFirst(&iList); // (Does nothing)
+    iFocusOrder.SetRangeOffsets(4, 0);
+	index = (*iOrder)++;
+    EUNIT_ASSERT(iFocusOrder.iCurrentItem == 0 && index == KErrNotFound);
+    EUNIT_ASSERT(iFocusOrder.iFrontOffset == 0 && iFocusOrder.iRearOffset == 4 && iFocusOrder.iList == &iList);
+	index = (*iOrder)++;
+    EUNIT_ASSERT(iFocusOrder.iCurrentItem == 0 && index == KErrNotFound);    
+    
+	// Test with a range
+    iOrder->SetToFirst(&iList); // (Does nothing)
+    iFocusOrder.SetRangeOffsets(0, 5);
+	index = (*iOrder)++;
+    EUNIT_ASSERT(iFocusOrder.iCurrentItem == 0 && index == KErrNotFound);
+    EUNIT_ASSERT(iFocusOrder.iFrontOffset == 5 && iFocusOrder.iRearOffset == 0 && iFocusOrder.iList == &iList);
+	index = (*iOrder)++;
+    EUNIT_ASSERT(iFocusOrder.iCurrentItem == 0 && index == KErrNotFound);    
+    }
+
+// ----------------------------------------------------------------------------
+// UT_TestSymmetricRangeL
+// ----------------------------------------------------------------------------
+//
+void T_CGlxFromFocusOutwardIterator::UT_TestSymmetricRangeL(  )
+	{
+    EUNIT_ASSERT(iFocusOrder.iCurrentItem == 0 && iFocusOrder.iFrontOffset == 0 && 
+    	iFocusOrder.iRearOffset == 0 && iFocusOrder.iList == &iList);
+	TInt index;
+
+	// Test with a list with 1 item, no range
+    iList.iCount = 1; 
+    iList.iFocusIndex = 0;
+	index = (*iOrder)++;
+    EUNIT_ASSERT(iFocusOrder.iCurrentItem == 1 && index == 0);
+    EUNIT_ASSERT(iFocusOrder.iFrontOffset == 0 && iFocusOrder.iRearOffset == 0 && iFocusOrder.iList == &iList);
+	index = (*iOrder)++;
+    EUNIT_ASSERT(iFocusOrder.iCurrentItem == 1 && index == KErrNotFound);
+    EUNIT_ASSERT(iFocusOrder.iFrontOffset == 0 && iFocusOrder.iRearOffset == 0 && iFocusOrder.iList == &iList);
+    
+	// Test with a list with 2 items, no range
+    iOrder->SetToFirst(&iList); 
+    iList.iCount = 2;
+    iList.iFocusIndex = 0; 
+	index = (*iOrder)++;
+    EUNIT_ASSERT(iFocusOrder.iCurrentItem == 1 && index == 0);
+	index = (*iOrder)++;
+    EUNIT_ASSERT(iFocusOrder.iCurrentItem == 1 && index == KErrNotFound);
+ 	index = (*iOrder)++;
+    EUNIT_ASSERT(iFocusOrder.iCurrentItem == 1 && index == KErrNotFound);
+
+	// Focus to 1   
+    iOrder->SetToFirst(&iList); 
+    iList.iFocusIndex = 1;
+	index = (*iOrder)++;
+    EUNIT_ASSERT(iFocusOrder.iCurrentItem == 1 && index == 1);
+	index = (*iOrder)++;
+    EUNIT_ASSERT(iFocusOrder.iCurrentItem == 1 && index == KErrNotFound);
+ 	index = (*iOrder)++;
+    EUNIT_ASSERT(iFocusOrder.iCurrentItem == 1 && index == KErrNotFound);
+
+	//////////////////////////////////////////////////////////////
+	// Test with a list with 2 items, 1-1 range
+    // indexes: 01
+    // focus:   F
+    // order:   01
+	TestSingleRange(2, 0, 1, 1, "01ee"); // count, focus, rear, front, result
+    // indexes: 01
+    // focus:    F
+    // order:   10
+	TestSingleRange(2, 1, 1, 1, "10ee"); // count, focus, rear, front, result
+    
+	//////////////////////////////////////////////////////////////
+    // Test with a list with 3 items, 1-1 range
+    // indexes: 012
+    // focus:   F
+    // order:   012
+	TestSingleRange(3, 0, 1, 1, "012ee"); // count, focus, rear, front, result
+    // indexes: 012
+    // focus:    F
+    // order:   201
+	TestSingleRange(3, 1, 1, 1, "120ee"); // count, focus, rear, front, result
+    // indexes: 012
+    // focus:     F
+    // order:   201
+	TestSingleRange(3, 2, 1, 1, "201ee"); // count, focus, rear, front, result
+    
+	//////////////////////////////////////////////////////////////
+    // Test with a list with 4 items, 1-1 range
+    // indexes: 0123
+    // focus:   F
+    // order:   01 2
+	TestSingleRange(4, 0, 1, 1, "013ee"); // count, focus, rear, front, result
+    // indexes: 0123
+    // focus:    F
+    // order:   201 
+	TestSingleRange(4, 1, 1, 1, "120ee"); // count, focus, rear, front, result
+    // indexes: 0123
+    // focus:     F
+    // order:    201 
+	TestSingleRange(4, 2, 1, 1, "231ee"); // count, focus, rear, front, result
+    // indexes: 0123
+    // focus:      F
+    // order:   1 20
+	TestSingleRange(4, 3, 1, 1, "302ee"); // count, focus, rear, front, result
+  	}
+  	
+// ----------------------------------------------------------------------------
+// UT_TestAsymmetricRangeL
+// ----------------------------------------------------------------------------
+//
+void T_CGlxFromFocusOutwardIterator::UT_TestAsymmetricRangeL(  )
+	{
+ 	// Test with a list with 5 items, 1-2 range
+    // indexes: 01234
+    // focus:   F
+    // order:   013 2
+	TestSingleRange(5, 0, 1, 2, "0142ee"); // count, focus, rear, front, result
+    // indexes: 01234
+    // focus:    F
+    // order:   2013 
+	TestSingleRange(5, 1, 1, 2, "1203ee"); // count, focus, rear, front, result
+    // indexes: 01234
+    // focus:     F
+    // order:    2013 
+	TestSingleRange(5, 2, 1, 2, "2314ee"); // count, focus, rear, front, result
+    // indexes: 01234
+    // focus:      F
+    // order:   3 201
+	TestSingleRange(5, 3, 1, 2, "3420ee"); // count, focus, rear, front, result
+    // indexes: 01234
+    // focus:       F
+    // order:   13 20
+	TestSingleRange(5, 4, 1, 2, "4031ee"); // count, focus, rear, front, result
+
+	//////////////////////////////////////////////////////////////
+	// Test with a list with 5 items, 2-1 range
+    // indexes: 01234
+    // focus:   F
+    // order:   01 32 
+	TestSingleRange(5, 0, 2, 1, "0143ee"); // count, focus, rear, front, result
+    // indexes: 01234
+    // focus:    F
+    // order:   201 3 
+	TestSingleRange(5, 1, 2, 1, "1204ee"); // count, focus, rear, front, result
+    // indexes: 01234
+    // focus:     F
+    // order:   3201 
+	TestSingleRange(5, 2, 2, 1, "2310ee"); // count, focus, rear, front, result
+    // indexes: 01234
+    // focus:      F
+    // order:    3201
+	TestSingleRange(5, 3, 2, 1, "3421ee"); // count, focus, rear, front, result
+    // indexes: 01234
+    // focus:       F
+    // order:   1 320
+	TestSingleRange(5, 4, 2, 1, "4032ee"); // count, focus, rear, front, result
+
+	//////////////////////////////////////////////////////////////
+	// Test with a list with 6 items, 4-2 range
+    // indexes: 012345
+    // focus:   F
+    // order:   013542
+	TestSingleRange(6, 0, 4, 2, "015243ee"); // count, focus, rear, front, result
+    // indexes: 012345
+    // focus:    F
+    // order:   201354  
+	TestSingleRange(6, 1, 4, 2, "120354ee"); // count, focus, rear, front, result
+    // indexes: 012345
+    // focus:     F
+    // order:   420135 
+	TestSingleRange(6, 2, 4, 2, "231405ee"); // count, focus, rear, front, result
+    // indexes: 012345
+    // focus:      F
+    // order:   542013
+	TestSingleRange(6, 3, 4, 2, "342510ee"); // count, focus, rear, front, result
+    // indexes: 012345
+    // focus:       F
+    // order:   354201
+	TestSingleRange(6, 4, 4, 2, "453021ee"); // count, focus, rear, front, result
+    // indexes: 012345
+    // focus:        F
+    // order:   135420
+	TestSingleRange(6, 5, 4, 2, "504132ee"); // count, focus, rear, front, result
+
+	//////////////////////////////////////////////////////////////
+	// Test with a list with 7 items, 4-2 range
+    // indexes: 0123456
+    // focus:   F
+    // order:   0136542
+	TestSingleRange(7, 0, 4, 2, "0162543ee"); // count, focus, rear, front, result
+    // indexes: 0123456
+    // focus:    F
+    // order:   2013654 
+	TestSingleRange(7, 1, 4, 2, "1203654ee"); // count, focus, rear, front, result
+    // indexes: 0123456 
+    // focus:     F
+    // order:   4201365
+	TestSingleRange(7, 2, 4, 2, "2314065ee"); // count, focus, rear, front, result
+    // indexes: 0123456
+    // focus:      F
+    // order:   5420136
+	TestSingleRange(7, 3, 4, 2, "3425106ee"); // count, focus, rear, front, result
+    // indexes: 0123456
+    // focus:       F
+    // order:   6542013
+	TestSingleRange(7, 4, 4, 2, "4536210ee"); // count, focus, rear, front, result
+    // indexes: 0123456
+    // focus:        F
+    // order:   3654201
+	TestSingleRange(7, 5, 4, 2, "5640321ee"); // count, focus, rear, front, result
+    // indexes: 0123456
+    // focus:         F
+    // order:   1365420  
+	TestSingleRange(7, 6, 4, 2, "6051432ee"); // count, focus, rear, front, result
+
+	//////////////////////////////////////////////////////////////
+	// Test with a list with 8 items, 4-2 range
+    // indexes: 01234567
+    // focus:   F
+    // order:   013 6542
+	TestSingleRange(8, 0, 4, 2, "0172654ee"); // count, focus, rear, front, result
+    // indexes: 01234567
+    // focus:    F
+    // order:   2013 654 
+	TestSingleRange(8, 1, 4, 2, "1203765ee"); // count, focus, rear, front, result
+    // indexes: 01234567 
+    // focus:     F
+    // order:   42013 65
+	TestSingleRange(8, 2, 4, 2, "2314076ee"); // count, focus, rear, front, result
+    // indexes: 01234567
+    // focus:      F
+    // order:   542013 6
+	TestSingleRange(8, 3, 4, 2, "3425107ee"); // count, focus, rear, front, result
+    // indexes: 01234567
+    // focus:       F
+    // order:   6542013
+	TestSingleRange(8, 4, 4, 2, "4536210ee"); // count, focus, rear, front, result
+    // indexes: 01234567
+    // focus:        F
+    // order:    6542013
+	TestSingleRange(8, 5, 4, 2, "5647321ee"); // count, focus, rear, front, result
+    // indexes: 01234567
+    // focus:         F
+    // order:   3 654201  
+	TestSingleRange(8, 6, 4, 2, "6750432ee"); // count, focus, rear, front, result
+    // indexes: 01234567
+    // focus:          F
+    // order:   13 65420  
+	TestSingleRange(8, 7, 4, 2, "7061543ee"); // count, focus, rear, front, result
+  	}
+  	
+// ----------------------------------------------------------------------------
+// UT_TestOneSideRangeL
+// ----------------------------------------------------------------------------
+//
+void T_CGlxFromFocusOutwardIterator::UT_TestOneSideRangeL(  )
+	{
+	// 1 item, 1-0 range
+	TestSingleRange(1, 0, 1, 0, "0ee"); // count, focus, rear, front, result
+	// 1 item, 0-1 range
+	TestSingleRange(1, 0, 0, 1, "0ee"); // count, focus, rear, front, result
+
+	//////////////////////////////////////////////////////////////
+	// Test with a list with 2 items, 1-0 range
+    // indexes: 01
+    // focus:   F
+    // order:   01
+	TestSingleRange(2, 0, 1, 0, "01ee"); // count, focus, rear, front, result
+    // indexes: 01
+    // focus:    F
+    // order:   01
+	TestSingleRange(2, 1, 1, 0, "10ee"); // count, focus, rear, front, result
+	//////////////////////////////////////////////////////////////
+	// Test with a list with 2 items, 0-1 range
+    // indexes: 01
+    // focus:   F
+    // order:   01
+	TestSingleRange(2, 0, 0, 1, "01ee"); // count, focus, rear, front, result
+    // indexes: 01
+    // focus:    F
+    // order:   01
+	TestSingleRange(2, 1, 0, 1, "10ee"); // count, focus, rear, front, result
+    
+	//////////////////////////////////////////////////////////////
+    // Test with a list with 3 items, 0-1 range
+    // indexes: 012
+    // focus:   F
+    // order:   01
+	TestSingleRange(3, 0, 0, 1, "01ee"); // count, focus, rear, front, result
+    // indexes: 012
+    // focus:    F
+    // order:    01
+	TestSingleRange(3, 1, 0, 1, "12ee"); // count, focus, rear, front, result
+    // indexes: 012
+    // focus:     F
+    // order:   1 0
+	TestSingleRange(3, 2, 0, 1, "20ee"); // count, focus, rear, front, result
+    
+	//////////////////////////////////////////////////////////////
+    // Test with a list with 3 items, 1-0 range
+    // indexes: 012
+    // focus:   F
+    // order:   0 1
+	TestSingleRange(3, 0, 1, 0, "02ee"); // count, focus, rear, front, result
+    // indexes: 012
+    // focus:    F
+    // order:   10
+	TestSingleRange(3, 1, 1, 0, "10ee"); // count, focus, rear, front, result
+    // indexes: 012
+    // focus:     F
+    // order:    10
+	TestSingleRange(3, 2, 1, 0, "21ee"); // count, focus, rear, front, result
+
+	//////////////////////////////////////////////////////////////
+    // Test with a list with 3 items, 0-2 range
+    // indexes: 012
+    // focus:   F
+    // order:   012
+	TestSingleRange(3, 0, 0, 2, "012ee"); // count, focus, rear, front, result
+    // indexes: 012
+    // focus:    F
+    // order:   201
+	TestSingleRange(3, 1, 0, 2, "120ee"); // count, focus, rear, front, result
+    // indexes: 012
+    // focus:     F
+    // order:   120
+	TestSingleRange(3, 2, 0, 2, "201ee"); // count, focus, rear, front, result
+    
+	//////////////////////////////////////////////////////////////
+    // Test with a list with 3 items, 2-0 range
+    // indexes: 012
+    // focus:   F
+    // order:   021
+	TestSingleRange(3, 0, 2, 0, "021ee"); // count, focus, rear, front, result
+    // indexes: 012
+    // focus:    F
+    // order:   102
+	TestSingleRange(3, 1, 2, 0, "102ee"); // count, focus, rear, front, result
+    // indexes: 012
+    // focus:     F
+    // order:   210
+	TestSingleRange(3, 2, 2, 0, "210ee"); // count, focus, rear, front, result
+
+	//////////////////////////////////////////////////////////////
+    // Test with a list with 2 items, 0-2 range
+    // indexes: 01
+    // focus:   F
+    // order:   01
+	TestSingleRange(2, 0, 0, 2, "01ee"); // count, focus, rear, front, result
+    // indexes: 01
+    // focus:    F
+    // order:   10
+	TestSingleRange(2, 1, 0, 2, "10ee"); // count, focus, rear, front, result
+    
+	//////////////////////////////////////////////////////////////
+    // Test with a list with 3 items, 2-0 range
+    // indexes: 01
+    // focus:   F
+    // order:   01
+	TestSingleRange(2, 0, 2, 0, "01ee"); // count, focus, rear, front, result
+    // indexes: 01
+    // focus:    F
+    // order:   10
+	TestSingleRange(2, 1, 2, 0, "10ee"); // count, focus, rear, front, result
+  	}
+
+// ----------------------------------------------------------------------------
+// Run a single test
+// ----------------------------------------------------------------------------
+//
+void T_CGlxFromFocusOutwardIterator::TestSingleRange(TInt aCount, 
+		TInt aFocusIndex, TInt aRearOffset, TInt aFrontOffset, char* aResults)
+	{
+    __ASSERT_DEBUG(aFocusIndex >= 0 && aFocusIndex < aCount && aCount >= 0, Panic(EGlxPanicIllegalArgument)); // Make sure is testing all cases, also failed case
+
+	// Test with a list with 5 items, 1-2 range
+    iFocusOrder.SetRangeOffsets(aRearOffset, aFrontOffset);
+    iOrder->SetToFirst(&iList); 
+    iList.iCount = aCount; 
+    iList.iFocusIndex = aFocusIndex;
+    
+    // poor man's strlen...
+    TInt resultCount = 0;
+    char* tmp = aResults;
+    while (*tmp) 
+    	{
+    	resultCount++;
+    	tmp++;
+    	}
+    	
+    __ASSERT_DEBUG(resultCount > aFrontOffset + aRearOffset + 1, Panic(EGlxPanicIllegalArgument)); // Make sure is testing all cases, also failed case
+    
+    for (TInt i = 0; i < resultCount; i++)
+    	{
+    	TInt result = (*iOrder)++;
+    	char c = aResults[i];
+    	TInt expectedResult = c - '0';
+    	if (c == 'e') 
+    		{
+    		expectedResult = KErrNotFound;
+    		}
+    	EUNIT_ASSERT(result == expectedResult);
+    	}
+	}
+	
+// ----------------------------------------------------------------------------
+// Run a single in range test
+// ----------------------------------------------------------------------------
+//
+void T_CGlxFromFocusOutwardIterator::TestSingleInRange(TInt aCount, 
+		TInt aFocusIndex, TInt aRearOffset, TInt aFrontOffset, char* aResults)
+	{
+    __ASSERT_DEBUG(aFocusIndex >= 0 && aFocusIndex < aCount && aCount >= 0, Panic(EGlxPanicIllegalArgument)); // Make sure is testing all cases, also failed case
+
+	// Test with a list with 5 items, 1-2 range
+    iFocusOrder.SetRangeOffsets(aRearOffset, aFrontOffset);
+    iOrder->SetToFirst(&iList); 
+    iList.iCount = aCount; 
+    iList.iFocusIndex = aFocusIndex;
+    
+    for (TInt i = 0; i < aCount; i++)
+    	{
+    	char c = aResults[i];
+     	__ASSERT_DEBUG(c != 0, Panic(EGlxPanicIllegalArgument)); // Not enough results
+   	
+    	TBool inRange = iOrder->InRange(i);
+    	EUNIT_ASSERT((inRange && c == 'x') || (!inRange && c == ' '));
+    	}
+	}
+		
+// ----------------------------------------------------------------------------
+// Run a single test
+// ----------------------------------------------------------------------------
+//
+void T_CGlxFromFocusOutwardIterator::UT_TestInRangeL()
+	{
+	// List of 1
+	// indexes: 0
+	// focus:   F
+	// range:   x
+	TestSingleInRange(1, 0, 0, 0, "x"); // count, focus, rear range, front range, result per index
+	TestSingleInRange(1, 0, 2, 0, "x"); // count, focus, rear range, front range, result per index
+	TestSingleInRange(1, 0, 0, 2, "x"); // count, focus, rear range, front range, result per index
+	TestSingleInRange(1, 0, 2, 2, "x"); // count, focus, rear range, front range, result per index
+
+	// List of 3
+	// indexes: 012
+	// focus:   F
+	// range:   x
+	TestSingleInRange(3, 0, 0, 0, "x  "); // count, focus, rear range, front range, result per index
+	TestSingleInRange(3, 1, 0, 0, " x "); // count, focus, rear range, front range, result per index
+	TestSingleInRange(3, 2, 0, 0, "  x"); // count, focus, rear range, front range, result per index
+
+	// List of 4, range of 1
+	// indexes: 0123
+	// focus:   F
+	TestSingleInRange(4, 0, 1, 1, "xx x"); // count, focus, rear range, front range, result per index
+	TestSingleInRange(4, 1, 1, 1, "xxx "); // count, focus, rear range, front range, result per index
+	TestSingleInRange(4, 2, 1, 1, " xxx"); // count, focus, rear range, front range, result per index
+	TestSingleInRange(4, 3, 1, 1, "x xx"); // count, focus, rear range, front range, result per index
+
+	// List of 4, range of 2-3
+	// indexes: 0123
+	// focus:   F
+	// range:   xxxx
+	TestSingleInRange(4, 0, 2, 3, "xxxx"); // count, focus, rear range, front range, result per index
+
+	// List of 7, range of 2-4
+	// indexes: 0123456
+	// focus:   F
+	// range:   xxxxxxx
+	TestSingleInRange(7, 0, 2, 4, "xxxxxxx"); // count, focus, rear range, front range, result per index
+	TestSingleInRange(7, 1, 2, 4, "xxxxxxx"); // count, focus, rear range, front range, result per index
+	TestSingleInRange(7, 3, 2, 4, "xxxxxxx"); // count, focus, rear range, front range, result per index
+	TestSingleInRange(7, 6, 2, 4, "xxxxxxx"); // count, focus, rear range, front range, result per index
+
+	// List of 8, range of 2-4
+	// indexes: 01234567
+	// focus:   F
+	// range:   xxx xxxx
+	TestSingleInRange(8, 0, 4, 2, "xxx xxxx"); // count, focus, rear range, front range, result per index
+	// indexes: 01234567
+	// focus:    F
+	// range:   xxxx xxx
+	TestSingleInRange(8, 1, 4, 2, "xxxx xxx"); // count, focus, rear range, front range, result per index
+	// indexes: 01234567
+	// focus:     F
+	// range:   xxxxx xx
+	TestSingleInRange(8, 2, 4, 2, "xxxxx xx"); // count, focus, rear range, front range, result per index
+	// indexes: 01234567
+	// focus:      F
+	// range:   xxxxxx x
+	TestSingleInRange(8, 3, 4, 2, "xxxxxx x"); // count, focus, rear range, front range, result per index
+	// indexes: 01234567
+	// focus:       F
+	// range:   xxxxxxx 
+	TestSingleInRange(8, 4, 4, 2, "xxxxxxx "); // count, focus, rear range, front range, result per index
+	// indexes: 01234567
+	// focus:        F
+	// range:    xxxxxxx 
+	TestSingleInRange(8, 5, 4, 2, " xxxxxxx"); // count, focus, rear range, front range, result per index
+	// indexes: 01234567
+	// focus:         F
+	// range:   x xxxxxx 
+	TestSingleInRange(8, 6, 4, 2, "x xxxxxx"); // count, focus, rear range, front range, result per index
+	// indexes: 01234567
+	// focus:          F
+	// range:   xx xxxxx 
+	TestSingleInRange(8, 7, 4, 2, "xx xxxxx"); // count, focus, rear range, front range, result per index
+	
+	}
+	
+// ----------------------------------------------------------------------------
+// Test table
+// ----------------------------------------------------------------------------
+//
+
+EUNIT_BEGIN_TEST_TABLE(
+    T_CGlxFromFocusOutwardIterator,
+    "Unit tests for TGlxFromFocusOutwardItemOrder",
+    "UNIT" )
+ 
+EUNIT_TEST(
+    "Test empty list",
+    "TGlxFromFocusOutwardItemOrder",
+    "++",
+    "FUNCTIONALITY",
+    SetupL, UT_TestEmptyL, Teardown)
+
+EUNIT_TEST(
+    "Test symmetric ranges",
+    "TGlxFromFocusOutwardItemOrder",
+    "++",
+    "FUNCTIONALITY",
+    SetupL, UT_TestSymmetricRangeL, Teardown)
+
+EUNIT_TEST(
+    "Test asymmetric ranges",
+    "TGlxFromFocusOutwardItemOrder",
+    "++",
+    "FUNCTIONALITY",
+    SetupL, UT_TestAsymmetricRangeL, Teardown)
+
+EUNIT_TEST(
+    "Test one-sided ranges",
+    "TGlxFromFocusOutwardItemOrder",
+    "++",
+    "FUNCTIONALITY",
+    SetupL, UT_TestOneSideRangeL, Teardown)
+
+EUNIT_TEST(
+    "Test in range",
+    "TGlxFromFocusOutwardItemOrder",
+    "InRange",
+    "FUNCTIONALITY",
+    SetupL, UT_TestInRangeL, Teardown)
+
+EUNIT_END_TEST_TABLE
+//  END OF FILE