javaextensions/location/tsrc/vipertest/src/GetLocationTest.java
branchRCL_3
changeset 14 04becd199f91
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javaextensions/location/tsrc/vipertest/src/GetLocationTest.java	Tue Apr 27 16:30:29 2010 +0300
@@ -0,0 +1,316 @@
+/*
+* Copyright (c) 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:
+*
+*/
+import javax.microedition.location.*;
+
+class GetLocationTest extends ViperUnitTest
+{
+    private Location iLoc;
+
+    GetLocationTest()
+    {
+        super("GetLocationTest");
+    }
+
+    protected void runTest() throws Throwable
+    {
+        testBadArguments();
+        testGetLocation();
+        testAltitudeData();
+        testSpeedData();
+        testAddressInfo();
+        testGetLocationTimeout();
+        testReset();
+        testGetLatest();
+        testGetLocationOutOfService();
+    }
+
+    void testBadArguments() throws Exception
+    {
+        setCurrentTest("testBadArguments()");
+        providerSetUp(null);
+        assertTrue(iLP != null, "LocationProvider is null");
+
+        assertBad(0);
+        assertBad(-2);
+        assertBad(-12345); // Sanity check
+        assertBad(Integer.MIN_VALUE);
+    }
+
+    void testGetLocation() throws Exception
+    {
+        setCurrentTest("testGetLocation()");
+        providerSetUp(null);
+        assertTrue(iLP != null, "LocationProvider is null");
+        simpleGetLocation();
+    }
+
+    void testAltitudeData() throws Exception
+    {
+        setCurrentTest("testAltitudeData()");
+
+        Criteria criteria = new Criteria();
+        criteria.setAltitudeRequired(true);
+        criteria.setPreferredResponseTime(100); // 100 ms
+
+        providerSetUp(criteria);
+        assertTrue(iLP != null, "LocationProvider is null");
+        simpleGetLocation();
+
+        QualifiedCoordinates coords = iLoc.getQualifiedCoordinates();
+        float altitude = coords.getAltitude();
+        assertTrue(!Float.isNaN(altitude), "No altitude included");
+        // echo("Altitude = " + altitude);
+    }
+
+    void testSpeedData() throws Exception
+    {
+        setCurrentTest("testSpeedData()");
+
+        Criteria criteria = new Criteria();
+        criteria.setPreferredResponseTime(100); // 100 ms
+        criteria.setSpeedAndCourseRequired(true);
+
+        providerSetUp(criteria);
+        assertTrue(iLP != null, "LocationProvider is null");
+        simpleGetLocation();
+
+        float speed = iLoc.getSpeed();
+        assertTrue(!Float.isNaN(speed), "No speed included");
+        float course = iLoc.getCourse();
+        assertTrue(!Float.isNaN(course), "No course included");
+        // echo("Speed = " + speed + ", Course = " + course);
+    }
+
+    void testAddressInfo() throws Exception
+    {
+        setCurrentTest("testAddressInfo()");
+
+        Criteria criteria = new Criteria();
+        criteria.setPreferredResponseTime(100); // 100 ms
+        criteria.setAddressInfoRequired(true);
+
+        providerSetUp(criteria);
+        if (iLP != null)
+        {
+            assertTrue(iLP != null, "LocationProvider is null");
+            simpleGetLocation();
+
+            AddressInfo addr = iLoc.getAddressInfo();
+            if (addr != null)
+            {
+                boolean hasNonNullField = false;
+                for (int i = 1; i <= 17; ++i)
+                {
+                    String field = addr.getField(i);
+                    if (field != null)
+                    {
+                        hasNonNullField = true;
+                        // echo("Field #" + i + ": " + field);
+                    }
+                }
+                assertTrue(hasNonNullField, "All AddressInfo fields are null");
+            }
+        }
+    }
+
+    void testGetLocationTimeout() throws Exception
+    {
+        setCurrentTest("testGetLocationTimeout()");
+
+        Criteria criteria = new Criteria();
+        criteria.setCostAllowed(false); // This will select the right provider
+        providerSetUp(criteria);
+        assertTrue(iLP != null, "LocationProvider is null");
+        iLoc = null;
+
+        try
+        {
+            int TIMEOUT = 1; // seconds
+            iLoc = iLP.getLocation(TIMEOUT);
+            assertTrue(false, "No timeout for getLocation");
+        }
+        catch (LocationException le)
+        {
+            // Timed out correctly
+        }
+
+        // Sanity check - test that normal request works ok
+        simpleGetLocation();
+
+        try
+        {
+            int TIMEOUT = 10; // seconds
+            long startTime = System.currentTimeMillis();
+            iLoc = iLP.getLocation(TIMEOUT);
+            long duration = System.currentTimeMillis() - startTime;
+            assertTrue(duration <= TIMEOUT * 1000, "GetLocation took too long");
+            checkLocationData(iLoc);
+        }
+        catch (LocationException le)
+        {
+            assertTrue(false, "Illegal timeout");
+        }
+    }
+
+    void testReset() throws Exception
+    {
+        setCurrentTest("testReset()");
+
+        Criteria criteria = new Criteria();
+        criteria.setCostAllowed(false); // This will select the right provider
+        providerSetUp(criteria);
+        assertTrue(iLP != null, "LocationProvider is null");
+
+        LocThread t1 = new LocThread(iLP);
+        LocThread t2 = new LocThread(iLP);
+
+        t1.start();
+        t2.start();
+
+        try
+        {
+            // Sleep to let LocThreads get a chance to call getLocation
+            Thread.sleep(1000);
+            // Reset should cancel all getLocation calls
+            iLP.reset();
+            t1.join();
+            t2.join();
+        }
+        finally
+        {
+            assertTrue(!t1.iGotPosition, "Thread1 got a position");
+            assertTrue(!t2.iGotPosition, "Thread2 got a position");
+            assertTrue(t1.iGotReset, "Thread1 was never reset");
+            assertTrue(t2.iGotReset, "Thread2 was never reset");
+        }
+    }
+
+    void testGetLatest()
+    {
+        setCurrentTest("testGetLatest()");
+
+        iLP = null;
+        iLoc = null;
+
+        // Get the last known location
+        iLoc = LocationProvider.getLastKnownLocation();
+    }
+
+    void testGetLocationOutOfService() throws Exception
+    {
+        setCurrentTest("testGetLocationOutOfService()");
+
+        Criteria criteria = new Criteria();
+        criteria.setCostAllowed(false); // This will select the right provider
+        providerSetUp(criteria);
+
+        assertTrue(iLP != null, "LocationProvider is null");
+
+        simpleGetLocation();
+
+        userMessage("Disable all PSYs");
+
+        // now we get the last known Location:
+        Location lastKnownLocation = LocationProvider.getLastKnownLocation();
+        checkLocationData(lastKnownLocation);
+
+        assertTrue(lastKnownLocation.getTimestamp() == iLoc.getTimestamp(),
+                   "Not the last known location returned");
+
+        long start = System.currentTimeMillis();
+        long end = 0;
+        try
+        {
+            iLoc = iLP.getLocation(-1);
+            assertTrue(false, "No exception thrown for getLocation");
+        }
+        catch (LocationException le)
+        {
+            // Exception thrown correctly
+            end = System.currentTimeMillis();
+        }
+        assertTrue(end - start < 500, "Expected LocationException immediately");
+
+        userMessage("Test passed. Enable PSYs again");
+    }
+
+    // ------------------------ Helper methods -----------------------
+
+    void simpleGetLocation() throws Exception
+    {
+        iLoc = null;
+
+        try
+        {
+            iLoc = iLP.getLocation(-1);
+            checkLocationData(iLoc);
+        }
+        catch (LocationException le)
+        {
+            assertTrue(false, "Could not get location: " + le);
+        }
+    }
+
+    void assertBad(int aBadParam) throws Exception
+    {
+        try
+        {
+            iLoc = iLP.getLocation(aBadParam);
+            assertTrue(false, "IllegalArgumentException was not thrown for: "
+                       + aBadParam);
+        }
+        catch (IllegalArgumentException iae)
+        {
+            // Exception thrown correctly
+        }
+    }
+
+    // ------------------------ Helper class -----------------------
+
+    private class LocThread extends Thread
+    {
+        private LocationProvider iLP;
+
+        boolean iGotReset = false;
+
+        boolean iGotPosition = false;
+
+        LocThread(LocationProvider aLP)
+        {
+            iLP = aLP;
+        }
+
+        public void run()
+        {
+            try
+            {
+                int TIMEOUT = 10; // seconds
+                Location l = iLP.getLocation(TIMEOUT);
+                iGotPosition = true;
+            }
+            catch (InterruptedException ie)
+            {
+                iGotReset = true;
+            }
+            catch (Exception e)
+            {
+                echo("Unexpected exception thrown: " + e);
+            }
+        }
+    }
+
+}