diff -r f5050f1da672 -r 04becd199f91 javaextensions/location/tsrc/vipertest/src/GetLocationTest.java --- /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); + } + } + } + +}