Enabled some TrackDataHub tests.

This commit is contained in:
Dennis Guse
2019-08-14 08:04:02 +02:00
parent 45b1fafdd5
commit 4f5e87f87d
2 changed files with 302 additions and 341 deletions
@@ -19,73 +19,69 @@ import android.content.Context;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.content.SharedPreferences.OnSharedPreferenceChangeListener; import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import android.database.ContentObserver; import android.database.ContentObserver;
import android.database.Cursor;
import android.database.MatrixCursor;
import android.location.Location; import android.location.Location;
import android.provider.BaseColumns;
import android.test.RenamingDelegatingContext;
import android.test.mock.MockContentResolver;
import androidx.test.ext.junit.runners.AndroidJUnit4; import androidx.test.core.app.ApplicationProvider;
import de.dennisguse.opentracks.Constants; import org.junit.After;
import de.dennisguse.opentracks.TrackStubUtils; import org.junit.Assert;
import de.dennisguse.opentracks.content.ContentProviderUtils.LocationFactory;
import de.dennisguse.opentracks.content.ContentProviderUtils.LocationIterator;
import de.dennisguse.opentracks.services.TrackRecordingServiceTest.MockContext;
import de.dennisguse.opentracks.util.PreferencesUtils;
import de.dennisguse.opentracks.R;
import com.google.android.testing.mocking.AndroidMock;
import com.google.android.testing.mocking.UsesMocks;
import org.easymock.Capture;
import org.easymock.IAnswer;
import org.junit.Before; import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import java.util.EnumSet; import java.util.EnumSet;
import java.util.HashSet; import java.util.HashSet;
import java.util.Set; import java.util.Set;
import static com.google.android.testing.mocking.AndroidMock.capture; import de.dennisguse.opentracks.R;
import static com.google.android.testing.mocking.AndroidMock.eq; import de.dennisguse.opentracks.content.ContentProviderUtils.LocationFactory;
import static com.google.android.testing.mocking.AndroidMock.expect; import de.dennisguse.opentracks.content.ContentProviderUtils.LocationIterator;
import static com.google.android.testing.mocking.AndroidMock.isA; import de.dennisguse.opentracks.util.PreferencesUtils;
import static org.mockito.Mockito.eq;
import static org.mockito.Mockito.isA;
import static org.mockito.Mockito.reset;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
/** /**
* Tests for {@link TrackDataHub}. * Tests for {@link TrackDataHub}.
* *
* @author Rodrigo Damazio * @author Rodrigo Damazio
*/ */
@RunWith(AndroidJUnit4.class) @RunWith(MockitoJUnitRunner.class)
public class TrackDataHubTest { public class TrackDataHubTest {
private static final long TRACK_ID = 42L; private static final long TRACK_ID = 42L;
private static final int TARGET_POINTS = 50; private static final int TARGET_POINTS = 50;
private MockContext context; private Context context = ApplicationProvider.getApplicationContext();
private SharedPreferences sharedPreferences; private SharedPreferences sharedPreferences;
@Mock
private ContentProviderUtils contentProviderUtils; private ContentProviderUtils contentProviderUtils;
@Mock
private DataSource dataSource; private DataSource dataSource;
private TrackDataManager trackDataManager; private TrackDataManager trackDataManager;
private TrackDataHub trackDataHub; private TrackDataHub trackDataHub;
@Mock
private TrackDataListener trackDataListener1; private TrackDataListener trackDataListener1;
@Mock
private TrackDataListener trackDataListener2; private TrackDataListener trackDataListener2;
private Capture<OnSharedPreferenceChangeListener> preferenceChangeListenerCapture = new Capture< private ArgumentCaptor<OnSharedPreferenceChangeListener> preferenceChangeListenerCapture = ArgumentCaptor.forClass(OnSharedPreferenceChangeListener.class);
SharedPreferences.OnSharedPreferenceChangeListener>();
@Before @Before
@UsesMocks({ContentProviderUtils.class, DataSource.class, TrackDataListener.class}) public void setUp() {
@Override
protected void setUp() {
context = new MockContext(new MockContentResolver(), new RenamingDelegatingContext(
getContext(), getContext(), "test."));
sharedPreferences = PreferencesUtils.getSharedPreferences(context); sharedPreferences = PreferencesUtils.getSharedPreferences(context);
contentProviderUtils = AndroidMock.createMock(ContentProviderUtils.class);
dataSource = AndroidMock.createMock(DataSource.class, context);
trackDataManager = new TrackDataManager(); trackDataManager = new TrackDataManager();
trackDataHub = new TrackDataHub( trackDataHub = new TrackDataHub(context, trackDataManager, contentProviderUtils, TARGET_POINTS) {
context, trackDataManager, contentProviderUtils, TARGET_POINTS) {
@Override @Override
protected DataSource newDataSource() { protected DataSource newDataSource() {
return dataSource; return dataSource;
@@ -97,56 +93,46 @@ public class TrackDataHubTest {
runnable.run(); runnable.run();
} }
}; };
trackDataListener1 = AndroidMock.createStrictMock(
"trackDataListener1", TrackDataListener.class);
trackDataListener2 = AndroidMock.createStrictMock(
"trackDataListener2", TrackDataListener.class);
PreferencesUtils.setLong(context, R.string.recording_track_id_key, TRACK_ID); PreferencesUtils.setLong(context, R.string.recording_track_id_key, TRACK_ID);
} }
@Override @After
protected void tearDown() throws Exception { public void tearDown() {
AndroidMock.reset(dataSource); reset(dataSource);
// Expect everything to be unregistered. // Expect everything to be unregistered.
dataSource.unregisterContentObserver(isA(ContentObserver.class)); dataSource.unregisterContentObserver(isA(ContentObserver.class));
AndroidMock.expectLastCall().times(3); //TODO
dataSource.unregisterOnSharedPreferenceChangeListener( // AndroidMock.expectLastCall().times(3);
isA(OnSharedPreferenceChangeListener.class)); dataSource.unregisterOnSharedPreferenceChangeListener(isA(OnSharedPreferenceChangeListener.class));
AndroidMock.replay(dataSource); verify(dataSource);
trackDataHub.stop(); trackDataHub.stop();
trackDataHub = null; trackDataHub = null;
super.tearDown();
} }
/** /**
* Tests registering for tracks table update. * Tests registering for tracks table update.
*/ */
@Test
public void testTracksTableUpdate() { public void testTracksTableUpdate() {
// Register two listeners // Register two listeners
Capture<ContentObserver> contentObserverCapture = new Capture<ContentObserver>(); ArgumentCaptor<ContentObserver> contentObserverCapture = ArgumentCaptor.forClass(ContentObserver.class);
Track track = new Track(); Track track = new Track();
expect(contentProviderUtils.getTrack(TRACK_ID)).andStubReturn(track); when(contentProviderUtils.getTrack(TRACK_ID)).thenReturn(track);
dataSource.registerContentObserver( dataSource.registerContentObserver(eq(TracksColumns.CONTENT_URI), contentObserverCapture.capture());
eq(TracksColumns.CONTENT_URI), capture(contentObserverCapture));
trackDataListener1.onTrackUpdated(track); trackDataListener1.onTrackUpdated(track);
trackDataListener2.onTrackUpdated(track); trackDataListener2.onTrackUpdated(track);
replay(); replay();
trackDataHub.start(); trackDataHub.start();
trackDataHub.loadTrack(TRACK_ID); trackDataHub.loadTrack(TRACK_ID);
trackDataHub.registerTrackDataListener( trackDataHub.registerTrackDataListener(trackDataListener1, EnumSet.of(TrackDataType.TRACKS_TABLE));
trackDataListener1, EnumSet.of(TrackDataType.TRACKS_TABLE)); trackDataHub.registerTrackDataListener(trackDataListener2, EnumSet.of(TrackDataType.TRACKS_TABLE));
trackDataHub.registerTrackDataListener(
trackDataListener2, EnumSet.of(TrackDataType.TRACKS_TABLE));
verifyAndReset(); verifyAndReset();
// Causes tracks table update // Causes tracks table update
ContentObserver contentObserver = contentObserverCapture.getValue(); ContentObserver contentObserver = contentObserverCapture.getValue();
expect(contentProviderUtils.getTrack(TRACK_ID)).andStubReturn(track); when(contentProviderUtils.getTrack(TRACK_ID)).thenReturn(track);
trackDataListener1.onTrackUpdated(track); trackDataListener1.onTrackUpdated(track);
trackDataListener2.onTrackUpdated(track); trackDataListener2.onTrackUpdated(track);
replay(); replay();
@@ -155,7 +141,7 @@ public class TrackDataHubTest {
verifyAndReset(); verifyAndReset();
// Unregister one listener // Unregister one listener
expect(contentProviderUtils.getTrack(TRACK_ID)).andStubReturn(track); when(contentProviderUtils.getTrack(TRACK_ID)).thenReturn(track);
trackDataListener2.onTrackUpdated(track); trackDataListener2.onTrackUpdated(track);
replay(); replay();
@@ -172,111 +158,117 @@ public class TrackDataHubTest {
verifyAndReset(); verifyAndReset();
} }
//TODO
/** /**
* Tests registering for waypoints table update. * Tests registering for waypoints table update.
*/ */
public void testWaypointsTableUpdate() { // @Test
Waypoint waypoint1 = new Waypoint(); // public void testWaypointsTableUpdate() {
Waypoint waypoint2 = new Waypoint(); // Waypoint waypoint1 = new Waypoint();
Waypoint waypoint3 = new Waypoint(); // Waypoint waypoint2 = new Waypoint();
Waypoint waypoint4 = new Waypoint(); // Waypoint waypoint3 = new Waypoint();
Location location = new Location("gps"); // Waypoint waypoint4 = new Waypoint();
location.setLatitude(10.0); // Location location = new Location("gps");
location.setLongitude(8.0); // location.setLatitude(10.0);
waypoint1.setLocation(location); // location.setLongitude(8.0);
waypoint2.setLocation(location); // waypoint1.setLocation(location);
waypoint3.setLocation(location); // waypoint2.setLocation(location);
waypoint4.setLocation(location); // waypoint3.setLocation(location);
// waypoint4.setLocation(location);
// Register two listeners //
Capture<ContentObserver> contentObserverCapture = new Capture<ContentObserver>(); // // Register two listeners
expect(contentProviderUtils.getWaypointCursor( // ArgumentCaptor<ContentObserver> contentObserverCapture = ArgumentCaptor.forClass(ContentObserver.class);
eq(TRACK_ID), AndroidMock.leq(-1L), eq(TrackDataHub.MAX_DISPLAYED_WAYPOINTS))) // when(contentProviderUtils.getWaypointCursor(
.andStubAnswer(new FixedSizeCursorAnswer(2)); // eq(TRACK_ID), AndroidMock.leq(-1L), eq(TrackDataHub.MAX_DISPLAYED_WAYPOINTS)))
expect(contentProviderUtils.createWaypoint(isA(Cursor.class))) // .andStubAnswer(new FixedSizeCursorAnswer(2));
.andReturn(waypoint1).andReturn(waypoint2).andReturn(waypoint1).andReturn(waypoint2); // when(contentProviderUtils.createWaypoint(isA(Cursor.class)))
dataSource.registerContentObserver( // .thenReturn(waypoint1)
eq(WaypointsColumns.CONTENT_URI), capture(contentObserverCapture)); // .thenReturn(waypoint2)
trackDataListener1.clearWaypoints(); // .thenReturn(waypoint1)
trackDataListener2.clearWaypoints(); // .thenReturn(waypoint2);
trackDataListener1.onNewWaypoint(waypoint1); // dataSource.registerContentObserver(eq(WaypointsColumns.CONTENT_URI), contentObserverCapture.capture());
trackDataListener2.onNewWaypoint(waypoint1); // trackDataListener1.clearWaypoints();
trackDataListener1.onNewWaypoint(waypoint2); // trackDataListener2.clearWaypoints();
trackDataListener2.onNewWaypoint(waypoint2); // trackDataListener1.onNewWaypoint(waypoint1);
trackDataListener1.onNewWaypointsDone(); // trackDataListener2.onNewWaypoint(waypoint1);
trackDataListener2.onNewWaypointsDone(); // trackDataListener1.onNewWaypoint(waypoint2);
replay(); // trackDataListener2.onNewWaypoint(waypoint2);
// trackDataListener1.onNewWaypointsDone();
trackDataHub.start(); // trackDataListener2.onNewWaypointsDone();
trackDataHub.loadTrack(TRACK_ID); // replay();
trackDataHub.registerTrackDataListener( //
trackDataListener1, EnumSet.of(TrackDataType.WAYPOINTS_TABLE)); // trackDataHub.start();
trackDataHub.registerTrackDataListener( // trackDataHub.loadTrack(TRACK_ID);
trackDataListener2, EnumSet.of(TrackDataType.WAYPOINTS_TABLE)); // trackDataHub.registerTrackDataListener(trackDataListener1, EnumSet.of(TrackDataType.WAYPOINTS_TABLE));
verifyAndReset(); // trackDataHub.registerTrackDataListener(trackDataListener2, EnumSet.of(TrackDataType.WAYPOINTS_TABLE));
// verifyAndReset();
// Cause waypoints table update //
ContentObserver contentObserver = contentObserverCapture.getValue(); // // Cause waypoints table update
expect(contentProviderUtils.getWaypointCursor( // ContentObserver contentObserver = contentObserverCapture.getValue();
eq(TRACK_ID), AndroidMock.leq(-1L), eq(TrackDataHub.MAX_DISPLAYED_WAYPOINTS))) // when(contentProviderUtils.getWaypointCursor(
.andStubAnswer(new FixedSizeCursorAnswer(3)); // eq(TRACK_ID), AndroidMock.leq(-1L), eq(TrackDataHub.MAX_DISPLAYED_WAYPOINTS)))
expect(contentProviderUtils.createWaypoint(isA(Cursor.class))) // .andStubAnswer(new FixedSizeCursorAnswer(3));
.andReturn(waypoint1).andReturn(waypoint2).andReturn(waypoint3); // when(contentProviderUtils.createWaypoint(isA(Cursor.class)))
trackDataListener1.clearWaypoints(); // .thenReturn(waypoint1)
trackDataListener2.clearWaypoints(); // .thenReturn(waypoint2)
trackDataListener1.onNewWaypoint(waypoint1); // .thenReturn(waypoint3);
trackDataListener2.onNewWaypoint(waypoint1); // trackDataListener1.clearWaypoints();
trackDataListener1.onNewWaypoint(waypoint2); // trackDataListener2.clearWaypoints();
trackDataListener2.onNewWaypoint(waypoint2); // trackDataListener1.onNewWaypoint(waypoint1);
trackDataListener1.onNewWaypoint(waypoint3); // trackDataListener2.onNewWaypoint(waypoint1);
trackDataListener2.onNewWaypoint(waypoint3); // trackDataListener1.onNewWaypoint(waypoint2);
trackDataListener1.onNewWaypointsDone(); // trackDataListener2.onNewWaypoint(waypoint2);
trackDataListener2.onNewWaypointsDone(); // trackDataListener1.onNewWaypoint(waypoint3);
replay(); // trackDataListener2.onNewWaypoint(waypoint3);
// trackDataListener1.onNewWaypointsDone();
contentObserver.onChange(false); // trackDataListener2.onNewWaypointsDone();
verifyAndReset(); // replay();
//
// Unregister one listener // contentObserver.onChange(false);
expect(contentProviderUtils.getWaypointCursor( // verifyAndReset();
eq(TRACK_ID), AndroidMock.leq(-1L), eq(TrackDataHub.MAX_DISPLAYED_WAYPOINTS))) //
.andStubAnswer(new FixedSizeCursorAnswer(4)); // // Unregister one listener
expect(contentProviderUtils.createWaypoint(isA(Cursor.class))) // when(contentProviderUtils.getWaypointCursor(
.andReturn(waypoint1).andReturn(waypoint2).andReturn(waypoint3).andReturn(waypoint4); // eq(TRACK_ID), AndroidMock.leq(-1L), eq(TrackDataHub.MAX_DISPLAYED_WAYPOINTS)))
trackDataListener2.clearWaypoints(); // .andStubAnswer(new FixedSizeCursorAnswer(4));
trackDataListener2.onNewWaypoint(waypoint1); // when(contentProviderUtils.createWaypoint(isA(Cursor.class)))
trackDataListener2.onNewWaypoint(waypoint2); // .thenReturn(waypoint1)
trackDataListener2.onNewWaypoint(waypoint3); // .thenReturn(waypoint2)
trackDataListener2.onNewWaypoint(waypoint4); // .thenReturn(waypoint3)
trackDataListener2.onNewWaypointsDone(); // .thenReturn(waypoint4);
replay(); // trackDataListener2.clearWaypoints();
// trackDataListener2.onNewWaypoint(waypoint1);
trackDataHub.unregisterTrackDataListener(trackDataListener1); // trackDataListener2.onNewWaypoint(waypoint2);
contentObserver.onChange(false); // trackDataListener2.onNewWaypoint(waypoint3);
verifyAndReset(); // trackDataListener2.onNewWaypoint(waypoint4);
// trackDataListener2.onNewWaypointsDone();
// Unregister the second listener // replay();
dataSource.unregisterContentObserver(contentObserver); //
replay(); // trackDataHub.unregisterTrackDataListener(trackDataListener1);
// contentObserver.onChange(false);
trackDataHub.unregisterTrackDataListener(trackDataListener2); // verifyAndReset();
contentObserver.onChange(false); //
verifyAndReset(); // // Unregister the second listener
} // dataSource.unregisterContentObserver(contentObserver);
// replay();
//
// trackDataHub.unregisterTrackDataListener(trackDataListener2);
// contentObserver.onChange(false);
// verifyAndReset();
// }
/** /**
* Tests track points table update. * Tests track points table update.
*/ */
@Test
public void testTrackPointsTableUpdate() { public void testTrackPointsTableUpdate() {
// Register one listener // Register one listener
Capture<ContentObserver> contentObserverCapture = new Capture<ContentObserver>(); ArgumentCaptor<ContentObserver> contentObserverCapture = ArgumentCaptor.forClass(ContentObserver.class);
dataSource.registerContentObserver( dataSource.registerContentObserver(eq(TrackPointsColumns.CONTENT_URI), contentObserverCapture.capture());
eq(TrackPointsColumns.CONTENT_URI), capture(contentObserverCapture));
FixedSizeLocationIterator locationIterator = new FixedSizeLocationIterator(1, 10, 5); FixedSizeLocationIterator locationIterator = new FixedSizeLocationIterator(1, 10, 5);
expect(contentProviderUtils.getTrackPointLocationIterator( when(contentProviderUtils.getTrackPointLocationIterator(eq(TRACK_ID), eq(0L), eq(false), isA(LocationFactory.class))).thenReturn(locationIterator);
eq(TRACK_ID), eq(0L), eq(false), isA(LocationFactory.class))).andReturn(locationIterator); when(contentProviderUtils.getLastTrackPointId(TRACK_ID)).thenReturn(10L);
expect(contentProviderUtils.getLastTrackPointId(TRACK_ID)).andReturn(10L);
trackDataListener1.clearTrackPoints(); trackDataListener1.clearTrackPoints();
locationIterator.expectLocationsDelivered(trackDataListener1); locationIterator.expectLocationsDelivered(trackDataListener1);
trackDataListener1.onNewTrackPointsDone(); trackDataListener1.onNewTrackPointsDone();
@@ -284,30 +276,26 @@ public class TrackDataHubTest {
trackDataHub.start(); trackDataHub.start();
trackDataHub.loadTrack(TRACK_ID); trackDataHub.loadTrack(TRACK_ID);
trackDataHub.registerTrackDataListener( trackDataHub.registerTrackDataListener(trackDataListener1, EnumSet.of(TrackDataType.SAMPLED_IN_TRACK_POINTS_TABLE));
trackDataListener1, EnumSet.of(TrackDataType.SAMPLED_IN_TRACK_POINTS_TABLE));
verifyAndReset(); verifyAndReset();
// Register a second listener // Register a second listener
locationIterator = new FixedSizeLocationIterator(1, 10, 5); locationIterator = new FixedSizeLocationIterator(1, 10, 5);
expect(contentProviderUtils.getTrackPointLocationIterator( when(contentProviderUtils.getTrackPointLocationIterator(eq(TRACK_ID), eq(0L), eq(false), isA(LocationFactory.class))).thenReturn(locationIterator);
eq(TRACK_ID), eq(0L), eq(false), isA(LocationFactory.class))).andReturn(locationIterator); when(contentProviderUtils.getLastTrackPointId(TRACK_ID)).thenReturn(10L);
expect(contentProviderUtils.getLastTrackPointId(TRACK_ID)).andReturn(10L);
trackDataListener2.clearTrackPoints(); trackDataListener2.clearTrackPoints();
locationIterator.expectLocationsDelivered(trackDataListener2); locationIterator.expectLocationsDelivered(trackDataListener2);
trackDataListener2.onNewTrackPointsDone(); trackDataListener2.onNewTrackPointsDone();
replay(); replay();
trackDataHub.registerTrackDataListener( trackDataHub.registerTrackDataListener(trackDataListener2, EnumSet.of(TrackDataType.SAMPLED_IN_TRACK_POINTS_TABLE));
trackDataListener2, EnumSet.of(TrackDataType.SAMPLED_IN_TRACK_POINTS_TABLE));
verifyAndReset(); verifyAndReset();
// Deliver more points - should go to both listeners without clearing // Deliver more points - should go to both listeners without clearing
ContentObserver contentObserver = contentObserverCapture.getValue(); ContentObserver contentObserver = contentObserverCapture.getValue();
locationIterator = new FixedSizeLocationIterator(11, 10, 1); locationIterator = new FixedSizeLocationIterator(11, 10, 1);
expect(contentProviderUtils.getTrackPointLocationIterator( when(contentProviderUtils.getTrackPointLocationIterator(eq(TRACK_ID), eq(11L), eq(false), isA(LocationFactory.class))).thenReturn(locationIterator);
eq(TRACK_ID), eq(11L), eq(false), isA(LocationFactory.class))).andReturn(locationIterator); when(contentProviderUtils.getLastTrackPointId(TRACK_ID)).thenReturn(20L);
expect(contentProviderUtils.getLastTrackPointId(TRACK_ID)).andReturn(20L);
locationIterator.expectLocationsDelivered(trackDataListener1); locationIterator.expectLocationsDelivered(trackDataListener1);
locationIterator.expectLocationsDelivered(trackDataListener2); locationIterator.expectLocationsDelivered(trackDataListener2);
trackDataListener1.onNewTrackPointsDone(); trackDataListener1.onNewTrackPointsDone();
@@ -319,10 +307,10 @@ public class TrackDataHubTest {
// Unregister one listener and change track // Unregister one listener and change track
locationIterator = new FixedSizeLocationIterator(101, 10); locationIterator = new FixedSizeLocationIterator(101, 10);
expect(contentProviderUtils.getTrackPointLocationIterator( when(contentProviderUtils.getTrackPointLocationIterator(
eq(TRACK_ID + 1), eq(0L), eq(false), isA(LocationFactory.class))) eq(TRACK_ID + 1), eq(0L), eq(false), isA(LocationFactory.class)))
.andReturn(locationIterator); .thenReturn(locationIterator);
expect(contentProviderUtils.getLastTrackPointId(TRACK_ID + 1)).andReturn(110L); when(contentProviderUtils.getLastTrackPointId(TRACK_ID + 1)).thenReturn(110L);
trackDataListener2.clearTrackPoints(); trackDataListener2.clearTrackPoints();
locationIterator.expectLocationsDelivered(trackDataListener2); locationIterator.expectLocationsDelivered(trackDataListener2);
trackDataListener2.onNewTrackPointsDone(); trackDataListener2.onNewTrackPointsDone();
@@ -336,17 +324,16 @@ public class TrackDataHubTest {
/** /**
* Tests track points table update with registering the same listener. * Tests track points table update with registering the same listener.
*/ */
@Test
public void testTrackPointsTableUpdate_reRegister() { public void testTrackPointsTableUpdate_reRegister() {
// Register one listener // Register one listener
Capture<ContentObserver> contentObserverCapture = new Capture<ContentObserver>(); ArgumentCaptor<ContentObserver> contentObserverCapture = ArgumentCaptor.forClass(ContentObserver.class);
dataSource.registerContentObserver( dataSource.registerContentObserver(eq(TrackPointsColumns.CONTENT_URI), contentObserverCapture.capture());
eq(TrackPointsColumns.CONTENT_URI), capture(contentObserverCapture));
FixedSizeLocationIterator locationIterator = new FixedSizeLocationIterator(1, 10, 5); FixedSizeLocationIterator locationIterator = new FixedSizeLocationIterator(1, 10, 5);
expect(contentProviderUtils.getTrackPointLocationIterator( when(contentProviderUtils.getTrackPointLocationIterator(
eq(TRACK_ID), eq(0L), eq(false), isA(LocationFactory.class))).andReturn(locationIterator); eq(TRACK_ID), eq(0L), eq(false), isA(LocationFactory.class))).thenReturn(locationIterator);
expect(contentProviderUtils.getLastTrackPointId(TRACK_ID)).andReturn(10L); when(contentProviderUtils.getLastTrackPointId(TRACK_ID)).thenReturn(10L);
trackDataListener1.clearTrackPoints(); trackDataListener1.clearTrackPoints();
locationIterator.expectLocationsDelivered(trackDataListener1); locationIterator.expectLocationsDelivered(trackDataListener1);
@@ -355,8 +342,7 @@ public class TrackDataHubTest {
trackDataHub.start(); trackDataHub.start();
trackDataHub.loadTrack(TRACK_ID); trackDataHub.loadTrack(TRACK_ID);
trackDataHub.registerTrackDataListener( trackDataHub.registerTrackDataListener(trackDataListener1, EnumSet.of(TrackDataType.SAMPLED_IN_TRACK_POINTS_TABLE));
trackDataListener1, EnumSet.of(TrackDataType.SAMPLED_IN_TRACK_POINTS_TABLE));
verifyAndReset(); verifyAndReset();
// Unregister the listener // Unregister the listener
@@ -368,36 +354,32 @@ public class TrackDataHubTest {
verifyAndReset(); verifyAndReset();
// Register again // Register again
dataSource.registerContentObserver( dataSource.registerContentObserver(eq(TrackPointsColumns.CONTENT_URI), contentObserverCapture.capture());
eq(TrackPointsColumns.CONTENT_URI), capture(contentObserverCapture));
locationIterator = new FixedSizeLocationIterator(1, 10, 5); locationIterator = new FixedSizeLocationIterator(1, 10, 5);
expect(contentProviderUtils.getTrackPointLocationIterator( when(contentProviderUtils.getTrackPointLocationIterator(eq(TRACK_ID), eq(0L), eq(false), isA(LocationFactory.class))).thenReturn(locationIterator);
eq(TRACK_ID), eq(0L), eq(false), isA(LocationFactory.class))).andReturn(locationIterator); when(contentProviderUtils.getLastTrackPointId(TRACK_ID)).thenReturn(10L);
expect(contentProviderUtils.getLastTrackPointId(TRACK_ID)).andReturn(10L);
trackDataListener1.clearTrackPoints(); trackDataListener1.clearTrackPoints();
locationIterator.expectLocationsDelivered(trackDataListener1); locationIterator.expectLocationsDelivered(trackDataListener1);
trackDataListener1.onNewTrackPointsDone(); trackDataListener1.onNewTrackPointsDone();
replay(); replay();
trackDataHub.registerTrackDataListener( trackDataHub.registerTrackDataListener(trackDataListener1, EnumSet.of(TrackDataType.SAMPLED_IN_TRACK_POINTS_TABLE));
trackDataListener1, EnumSet.of(TrackDataType.SAMPLED_IN_TRACK_POINTS_TABLE));
verifyAndReset(); verifyAndReset();
} }
/** /**
* Tests tracks point able change. Register a listener after a track change. * Tests tracks point able change. Register a listener after a track change.
*/ */
@Test
public void testTrackPointsTableUpdate_reRegisterAfterTrackChange() { public void testTrackPointsTableUpdate_reRegisterAfterTrackChange() {
// Register one listener // Register one listener
Capture<ContentObserver> observerCapture = new Capture<ContentObserver>(); ArgumentCaptor<ContentObserver> observerCapture = ArgumentCaptor.forClass(ContentObserver.class);
dataSource.registerContentObserver( dataSource.registerContentObserver(eq(TrackPointsColumns.CONTENT_URI), observerCapture.capture());
eq(TrackPointsColumns.CONTENT_URI), capture(observerCapture));
FixedSizeLocationIterator locationIterator = new FixedSizeLocationIterator(1, 10, 5); FixedSizeLocationIterator locationIterator = new FixedSizeLocationIterator(1, 10, 5);
expect(contentProviderUtils.getTrackPointLocationIterator( when(contentProviderUtils.getTrackPointLocationIterator(
eq(TRACK_ID), eq(0L), eq(false), isA(LocationFactory.class))).andReturn(locationIterator); eq(TRACK_ID), eq(0L), eq(false), isA(LocationFactory.class))).thenReturn(locationIterator);
expect(contentProviderUtils.getLastTrackPointId(TRACK_ID)).andReturn(10L); when(contentProviderUtils.getLastTrackPointId(TRACK_ID)).thenReturn(10L);
trackDataListener1.clearTrackPoints(); trackDataListener1.clearTrackPoints();
locationIterator.expectLocationsDelivered(trackDataListener1); locationIterator.expectLocationsDelivered(trackDataListener1);
trackDataListener1.onNewTrackPointsDone(); trackDataListener1.onNewTrackPointsDone();
@@ -419,12 +401,12 @@ public class TrackDataHubTest {
// Register the listener after a new track // Register the listener after a new track
dataSource.registerContentObserver( dataSource.registerContentObserver(
eq(TrackPointsColumns.CONTENT_URI), capture(observerCapture)); eq(TrackPointsColumns.CONTENT_URI), observerCapture.capture());
locationIterator = new FixedSizeLocationIterator(1, 10); locationIterator = new FixedSizeLocationIterator(1, 10);
expect(contentProviderUtils.getTrackPointLocationIterator( when(contentProviderUtils.getTrackPointLocationIterator(
eq(TRACK_ID + 1), eq(0L), eq(false), isA(LocationFactory.class))) eq(TRACK_ID + 1), eq(0L), eq(false), isA(LocationFactory.class)))
.andReturn(locationIterator); .thenReturn(locationIterator);
expect(contentProviderUtils.getLastTrackPointId(TRACK_ID + 1)).andReturn(10L); when(contentProviderUtils.getLastTrackPointId(TRACK_ID + 1)).thenReturn(10L);
trackDataListener1.clearTrackPoints(); trackDataListener1.clearTrackPoints();
locationIterator.expectLocationsDelivered(trackDataListener1); locationIterator.expectLocationsDelivered(trackDataListener1);
trackDataListener1.onNewTrackPointsDone(); trackDataListener1.onNewTrackPointsDone();
@@ -436,55 +418,50 @@ public class TrackDataHubTest {
verifyAndReset(); verifyAndReset();
} }
//TODO
/** /**
* Tests track points table update with large track sampling. * Tests track points table update with large track sampling.
*/ */
public void testTrackPointsTableUpdate_largeTrackSampling() { // @Test
Capture<ContentObserver> contentObserverCapture = new Capture<ContentObserver>(); // public void testTrackPointsTableUpdate_largeTrackSampling() {
dataSource.registerContentObserver( // ArgumentCaptor<ContentObserver> contentObserverCapture = ArgumentCaptor.forClass(ContentObserver.class);
eq(TrackPointsColumns.CONTENT_URI), capture(contentObserverCapture)); // dataSource.registerContentObserver(eq(TrackPointsColumns.CONTENT_URI), contentObserverCapture.capture());
//
expect(contentProviderUtils.getLastTrackPointId(TRACK_ID)).andReturn(200L); // when(contentProviderUtils.getLastTrackPointId(TRACK_ID)).thenReturn(200L);
AndroidMock.expectLastCall().anyTimes(); // AndroidMock.expectLastCall().anyTimes();
FixedSizeLocationIterator locationIterator1 = new FixedSizeLocationIterator( // FixedSizeLocationIterator locationIterator1 = new FixedSizeLocationIterator(1, 200, 4, 25, 71, 120);
1, 200, 4, 25, 71, 120); // when(contentProviderUtils.getTrackPointLocationIterator(eq(TRACK_ID), eq(0L), eq(false), isA(LocationFactory.class))).thenReturn(locationIterator1);
expect(contentProviderUtils.getTrackPointLocationIterator( // FixedSizeLocationIterator locationIterator2 = new FixedSizeLocationIterator(1, 200, 4, 25, 71, 120);
eq(TRACK_ID), eq(0L), eq(false), isA(LocationFactory.class))).andReturn(locationIterator1); // when(contentProviderUtils.getTrackPointLocationIterator(eq(TRACK_ID), eq(0L), eq(false), isA(LocationFactory.class))).thenReturn(locationIterator2);
FixedSizeLocationIterator locationIterator2 = new FixedSizeLocationIterator( //
1, 200, 4, 25, 71, 120); // trackDataListener1.clearTrackPoints();
expect(contentProviderUtils.getTrackPointLocationIterator( // locationIterator1.expectSampledLocationsDelivered(trackDataListener1, 4, false);
eq(TRACK_ID), eq(0L), eq(false), isA(LocationFactory.class))).andReturn(locationIterator2); // trackDataListener1.onNewTrackPointsDone();
// trackDataListener2.clearTrackPoints();
trackDataListener1.clearTrackPoints(); // locationIterator2.expectSampledLocationsDelivered(trackDataListener2, 4, true);
locationIterator1.expectSampledLocationsDelivered(trackDataListener1, 4, false); // trackDataListener2.onNewTrackPointsDone();
trackDataListener1.onNewTrackPointsDone(); // replay();
trackDataListener2.clearTrackPoints(); //
locationIterator2.expectSampledLocationsDelivered(trackDataListener2, 4, true); // trackDataHub.start();
trackDataListener2.onNewTrackPointsDone(); // trackDataHub.loadTrack(TRACK_ID);
replay(); // trackDataHub.registerTrackDataListener(trackDataListener1, EnumSet.of(TrackDataType.SAMPLED_IN_TRACK_POINTS_TABLE));
// trackDataHub.registerTrackDataListener(trackDataListener2, EnumSet.of(TrackDataType.SAMPLED_IN_TRACK_POINTS_TABLE, TrackDataType.SAMPLED_OUT_TRACK_POINTS_TABLE));
trackDataHub.start(); // verifyAndReset();
trackDataHub.loadTrack(TRACK_ID); // }
trackDataHub.registerTrackDataListener(
trackDataListener1, EnumSet.of(TrackDataType.SAMPLED_IN_TRACK_POINTS_TABLE));
trackDataHub.registerTrackDataListener(trackDataListener2, EnumSet.of(
TrackDataType.SAMPLED_IN_TRACK_POINTS_TABLE, TrackDataType.SAMPLED_OUT_TRACK_POINTS_TABLE));
verifyAndReset();
}
/** /**
* Tests track points table update with resampling. * Tests track points table update with resampling.
*/ */
@Test
public void testTrackPointsTableUpdate_resampling() { public void testTrackPointsTableUpdate_resampling() {
Capture<ContentObserver> observerCapture = new Capture<ContentObserver>(); ArgumentCaptor<ContentObserver> observerCapture = ArgumentCaptor.forClass(ContentObserver.class);
dataSource.registerContentObserver( dataSource.registerContentObserver(eq(TrackPointsColumns.CONTENT_URI), observerCapture.capture());
eq(TrackPointsColumns.CONTENT_URI), capture(observerCapture));
// Deliver 30 points (no sampling happens) // Deliver 30 points (no sampling happens)
FixedSizeLocationIterator locationIterator = new FixedSizeLocationIterator(1, 30, 5); FixedSizeLocationIterator locationIterator = new FixedSizeLocationIterator(1, 30, 5);
expect(contentProviderUtils.getTrackPointLocationIterator( when(contentProviderUtils.getTrackPointLocationIterator(
eq(TRACK_ID), eq(0L), eq(false), isA(LocationFactory.class))).andReturn(locationIterator); eq(TRACK_ID), eq(0L), eq(false), isA(LocationFactory.class))).thenReturn(locationIterator);
expect(contentProviderUtils.getLastTrackPointId(TRACK_ID)).andReturn(30L); when(contentProviderUtils.getLastTrackPointId(TRACK_ID)).thenReturn(30L);
trackDataListener1.clearTrackPoints(); trackDataListener1.clearTrackPoints();
locationIterator.expectLocationsDelivered(trackDataListener1); locationIterator.expectLocationsDelivered(trackDataListener1);
@@ -493,16 +470,14 @@ public class TrackDataHubTest {
trackDataHub.start(); trackDataHub.start();
trackDataHub.loadTrack(TRACK_ID); trackDataHub.loadTrack(TRACK_ID);
trackDataHub.registerTrackDataListener( trackDataHub.registerTrackDataListener(trackDataListener1, EnumSet.of(TrackDataType.SAMPLED_IN_TRACK_POINTS_TABLE));
trackDataListener1, EnumSet.of(TrackDataType.SAMPLED_IN_TRACK_POINTS_TABLE));
verifyAndReset(); verifyAndReset();
// Now deliver 30 more (incrementally sampled) // Now deliver 30 more (incrementally sampled)
ContentObserver observer = observerCapture.getValue(); ContentObserver observer = observerCapture.getValue();
locationIterator = new FixedSizeLocationIterator(31, 30); locationIterator = new FixedSizeLocationIterator(31, 30);
expect(contentProviderUtils.getTrackPointLocationIterator( when(contentProviderUtils.getTrackPointLocationIterator(eq(TRACK_ID), eq(31L), eq(false), isA(LocationFactory.class))).thenReturn(locationIterator);
eq(TRACK_ID), eq(31L), eq(false), isA(LocationFactory.class))).andReturn(locationIterator); when(contentProviderUtils.getLastTrackPointId(TRACK_ID)).thenReturn(60L);
expect(contentProviderUtils.getLastTrackPointId(TRACK_ID)).andReturn(60L);
locationIterator.expectSampledLocationsDelivered(trackDataListener1, 2, false); locationIterator.expectSampledLocationsDelivered(trackDataListener1, 2, false);
trackDataListener1.onNewTrackPointsDone(); trackDataListener1.onNewTrackPointsDone();
replay(); replay();
@@ -512,9 +487,9 @@ public class TrackDataHubTest {
// Now another 30 (triggers resampling) // Now another 30 (triggers resampling)
locationIterator = new FixedSizeLocationIterator(1, 90); locationIterator = new FixedSizeLocationIterator(1, 90);
expect(contentProviderUtils.getTrackPointLocationIterator( when(contentProviderUtils.getTrackPointLocationIterator(
eq(TRACK_ID), eq(0L), eq(false), isA(LocationFactory.class))).andReturn(locationIterator); eq(TRACK_ID), eq(0L), eq(false), isA(LocationFactory.class))).thenReturn(locationIterator);
expect(contentProviderUtils.getLastTrackPointId(TRACK_ID)).andReturn(90L); when(contentProviderUtils.getLastTrackPointId(TRACK_ID)).thenReturn(90L);
trackDataListener1.clearTrackPoints(); trackDataListener1.clearTrackPoints();
locationIterator.expectSampledLocationsDelivered(trackDataListener1, 2, false); locationIterator.expectSampledLocationsDelivered(trackDataListener1, 2, false);
trackDataListener1.onNewTrackPointsDone(); trackDataListener1.onNewTrackPointsDone();
@@ -527,66 +502,50 @@ public class TrackDataHubTest {
/** /**
* Tests preferences change. * Tests preferences change.
*/ */
@Test
public void testPreferencesChange() throws Exception { public void testPreferencesChange() throws Exception {
// Register two listeners // Register two listeners
PreferencesUtils.setString( PreferencesUtils.setString(context, R.string.stats_rate_key, PreferencesUtils.STATS_RATE_DEFAULT);
context, R.string.stats_rate_key, PreferencesUtils.STATS_RATE_DEFAULT); PreferencesUtils.setString(context, R.string.stats_units_key, PreferencesUtils.STATS_UNITS_DEFAULT);
PreferencesUtils.setString( PreferencesUtils.setInt(context, R.string.recording_gps_accuracy_key, PreferencesUtils.RECORDING_GPS_ACCURACY_DEFAULT);
context, R.string.stats_units_key, PreferencesUtils.STATS_UNITS_DEFAULT); PreferencesUtils.setInt(context, R.string.recording_distance_interval_key, PreferencesUtils.RECORDING_DISTANCE_INTERVAL_DEFAULT);
PreferencesUtils.setInt(context, R.string.recording_gps_accuracy_key,
PreferencesUtils.RECORDING_GPS_ACCURACY_DEFAULT);
PreferencesUtils.setInt(context, R.string.recording_distance_interval_key,
PreferencesUtils.RECORDING_DISTANCE_INTERVAL_DEFAULT);
dataSource.registerOnSharedPreferenceChangeListener(capture(preferenceChangeListenerCapture)); dataSource.registerOnSharedPreferenceChangeListener(preferenceChangeListenerCapture.capture());
expect(trackDataListener1.onMetricUnitsChanged(true)).andReturn(false); when(trackDataListener1.onMetricUnitsChanged(true)).thenReturn(false);
expect(trackDataListener1.onReportSpeedChanged(true)).andReturn(false); when(trackDataListener1.onReportSpeedChanged(true)).thenReturn(false);
expect( when(trackDataListener1.onRecordingGpsAccuracy(PreferencesUtils.RECORDING_GPS_ACCURACY_DEFAULT)).thenReturn(false);
trackDataListener1.onRecordingGpsAccuracy(PreferencesUtils.RECORDING_GPS_ACCURACY_DEFAULT)) when(trackDataListener1.onRecordingDistanceIntervalChanged(PreferencesUtils.RECORDING_DISTANCE_INTERVAL_DEFAULT)).thenReturn(false);
.andReturn(false);
expect(trackDataListener1.onRecordingDistanceIntervalChanged(
PreferencesUtils.RECORDING_DISTANCE_INTERVAL_DEFAULT)).andReturn(false);
expect(trackDataListener1.onMapTypeChanged(PreferencesUtils.MAP_TYPE_DEFAULT)).andReturn(false);
expect(trackDataListener2.onMetricUnitsChanged(true)).andReturn(false); when(trackDataListener2.onMetricUnitsChanged(true)).thenReturn(false);
expect(trackDataListener2.onReportSpeedChanged(true)).andReturn(false); when(trackDataListener2.onReportSpeedChanged(true)).thenReturn(false);
expect( when(trackDataListener2.onRecordingGpsAccuracy(PreferencesUtils.RECORDING_GPS_ACCURACY_DEFAULT)).thenReturn(false);
trackDataListener2.onRecordingGpsAccuracy(PreferencesUtils.RECORDING_GPS_ACCURACY_DEFAULT)) when(trackDataListener2.onRecordingDistanceIntervalChanged(PreferencesUtils.RECORDING_DISTANCE_INTERVAL_DEFAULT)).thenReturn(false);
.andReturn(false);
expect(trackDataListener2.onRecordingDistanceIntervalChanged(
PreferencesUtils.RECORDING_DISTANCE_INTERVAL_DEFAULT)).andReturn(false);
expect(trackDataListener2.onMapTypeChanged(PreferencesUtils.MAP_TYPE_DEFAULT)).andReturn(false);
replay(); replay();
trackDataHub.start(); trackDataHub.start();
trackDataHub.registerTrackDataListener( trackDataHub.registerTrackDataListener(trackDataListener1, EnumSet.of(TrackDataType.PREFERENCE));
trackDataListener1, EnumSet.of(TrackDataType.PREFERENCE)); trackDataHub.registerTrackDataListener(trackDataListener2, EnumSet.of(TrackDataType.PREFERENCE));
trackDataHub.registerTrackDataListener(
trackDataListener2, EnumSet.of(TrackDataType.PREFERENCE));
verifyAndReset(); verifyAndReset();
// Change report speed to false // Change report speed to false
expect(trackDataListener1.onReportSpeedChanged(false)).andReturn(false); when(trackDataListener1.onReportSpeedChanged(false)).thenReturn(false);
expect(trackDataListener2.onReportSpeedChanged(false)).andReturn(false); when(trackDataListener2.onReportSpeedChanged(false)).thenReturn(false);
replay(); replay();
PreferencesUtils.setString( PreferencesUtils.setString(
context, R.string.stats_rate_key, context.getString(R.string.stats_rate_pace)); context, R.string.stats_rate_key, context.getString(R.string.stats_rate_pace));
OnSharedPreferenceChangeListener listener = preferenceChangeListenerCapture.getValue(); OnSharedPreferenceChangeListener listener = preferenceChangeListenerCapture.getValue();
listener.onSharedPreferenceChanged( listener.onSharedPreferenceChanged(sharedPreferences, PreferencesUtils.getKey(context, R.string.stats_rate_key));
sharedPreferences, PreferencesUtils.getKey(context, R.string.stats_rate_key));
verifyAndReset(); verifyAndReset();
// Change metric units to false // Change metric units to false
expect(trackDataListener1.onMetricUnitsChanged(false)).andReturn(false); when(trackDataListener1.onMetricUnitsChanged(false)).thenReturn(false);
expect(trackDataListener2.onMetricUnitsChanged(false)).andReturn(false); when(trackDataListener2.onMetricUnitsChanged(false)).thenReturn(false);
replay(); replay();
String imperialUnits = context.getString(R.string.stats_units_imperial); String imperialUnits = context.getString(R.string.stats_units_imperial);
PreferencesUtils.setString(context, R.string.stats_units_key, imperialUnits); PreferencesUtils.setString(context, R.string.stats_units_key, imperialUnits);
listener.onSharedPreferenceChanged( listener.onSharedPreferenceChanged(sharedPreferences, PreferencesUtils.getKey(context, R.string.stats_units_key));
sharedPreferences, PreferencesUtils.getKey(context, R.string.stats_units_key));
verifyAndReset(); verifyAndReset();
} }
@@ -594,125 +553,128 @@ public class TrackDataHubTest {
* Replays mocks. * Replays mocks.
*/ */
private void replay() { private void replay() {
AndroidMock.replay(contentProviderUtils, dataSource, trackDataListener1, trackDataListener2); // AndroidMock.replay(contentProviderUtils, dataSource, trackDataListener1, trackDataListener2);
} }
/** /**
* Verifies and resets mocks. * Verifies and resets mocks.
*/ */
private void verifyAndReset() { private void verifyAndReset() {
AndroidMock.verify(contentProviderUtils, dataSource, trackDataListener1, trackDataListener2); verify(contentProviderUtils);
AndroidMock.reset(contentProviderUtils, dataSource, trackDataListener1, trackDataListener2); verify(dataSource);
verify(trackDataListener1);
verify(trackDataListener2);
reset(contentProviderUtils, dataSource, trackDataListener1, trackDataListener2);
} }
//TODO
/** /**
* Tests the method {@link TrackDataHub#start()}. * Tests the method {@link TrackDataHub#start()}.
*/ */
public void testRegisterTracksTableListener() { // @Test
Capture<ContentObserver> observerCapture = new Capture<ContentObserver>(); // public void testRegisterTracksTableListener() {
dataSource.registerContentObserver(eq(TracksColumns.CONTENT_URI), capture(observerCapture)); // ArgumentCaptor<ContentObserver> observerCapture = ArgumentCaptor.forClass(ContentObserver.class);
Track track = TrackStubUtils.createTrack(1); // dataSource.registerContentObserver(eq(TracksColumns.CONTENT_URI), observerCapture.capture());
expect(contentProviderUtils.getTrack(capture(new Capture<Long>()))).andReturn(track); // Track track = TrackStubUtils.createTrack(1);
// Make the track id is unique. //
PreferencesUtils.setLong(context, R.string.recording_track_id_key, System.currentTimeMillis()); // when(contentProviderUtils.getTrack(capture(new Capture<Long>())).thenReturn(track);
trackDataListener1.onTrackUpdated(track); // // Make the track id is unique.
replay(); // PreferencesUtils.setLong(context, R.string.recording_track_id_key, System.currentTimeMillis());
trackDataHub.start(); // trackDataListener1.onTrackUpdated(track);
trackDataHub.registerTrackDataListener( // replay();
trackDataListener1, EnumSet.of(TrackDataType.TRACKS_TABLE)); // trackDataHub.start();
verifyAndReset(); // trackDataHub.registerTrackDataListener(trackDataListener1, EnumSet.of(TrackDataType.TRACKS_TABLE));
} // verifyAndReset();
// }
//TODO
/** /**
* Tests the method {@link TrackDataHub#start()}. * Tests the method {@link TrackDataHub#start()}.
*/ */
public void testRegisterWaypointsTableListener() { // @Test
Capture<ContentObserver> observerCapture = new Capture<ContentObserver>(); // public void testRegisterWaypointsTableListener() {
dataSource.registerContentObserver(eq(WaypointsColumns.CONTENT_URI), capture(observerCapture)); // ArgumentCaptor<ContentObserver> observerCapture = ArgumentCaptor.forClass(ContentObserver.class);
expect(contentProviderUtils.getWaypointCursor( // dataSource.registerContentObserver(eq(WaypointsColumns.CONTENT_URI), observerCapture.capture());
capture(new Capture<Long>()), capture(new Capture<Long>()), // when(contentProviderUtils.getWaypointCursor(
capture(new Capture<Integer>()))).andReturn(null); // capture(new Capture<Long>()), capture(new Capture<Long>()),
trackDataListener1.clearWaypoints(); // capture(new Capture<Integer>()))).thenReturn(null);
trackDataListener1.onNewWaypointsDone(); // trackDataListener1.clearWaypoints();
replay(); // trackDataListener1.onNewWaypointsDone();
trackDataHub.start(); // replay();
trackDataHub.registerTrackDataListener( // trackDataHub.start();
trackDataListener1, EnumSet.of(TrackDataType.WAYPOINTS_TABLE)); // trackDataHub.registerTrackDataListener(trackDataListener1, EnumSet.of(TrackDataType.WAYPOINTS_TABLE));
verifyAndReset(); // verifyAndReset();
} // }
/** /**
* Tests the method {@link TrackDataHub#notifyPreferenceChanged(String)} when * Tests the method {@link TrackDataHub#notifyPreferenceChanged(String)} when
* the key is R.string.min_required_accuracy_key. * the key is R.string.min_required_accuracy_key.
*/ */
@Test
public void testNotifyPreferenceChanged_minRequiredAccuracy() { public void testNotifyPreferenceChanged_minRequiredAccuracy() {
int value = 1; int value = 1;
PreferencesUtils.setInt(context, R.string.recording_gps_accuracy_key, value); PreferencesUtils.setInt(context, R.string.recording_gps_accuracy_key, value);
trackDataHub.notifyPreferenceChanged(PreferencesUtils trackDataHub.notifyPreferenceChanged(PreferencesUtils.getKey(context, R.string.recording_gps_accuracy_key));
.getKey(context, R.string.recording_gps_accuracy_key)); Assert.assertEquals(value, trackDataHub.getRecordingGpsAccuracy());
assertEquals(value, trackDataHub.getRecordingGpsAccuracy());
PreferencesUtils.setInt(context, R.string.recording_gps_accuracy_key, value + 1); PreferencesUtils.setInt(context, R.string.recording_gps_accuracy_key, value + 1);
trackDataHub.notifyPreferenceChanged(PreferencesUtils trackDataHub.notifyPreferenceChanged(PreferencesUtils.getKey(context, R.string.recording_gps_accuracy_key));
.getKey(context, R.string.recording_gps_accuracy_key)); Assert.assertEquals(value + 1, trackDataHub.getRecordingGpsAccuracy());
assertEquals(value + 1, trackDataHub.getRecordingGpsAccuracy());
} }
/** /**
* Tests the method {@link TrackDataHub#notifyPreferenceChanged(String)} when * Tests the method {@link TrackDataHub#notifyPreferenceChanged(String)} when
* the key is R.string.metric_units_key. * the key is R.string.metric_units_key.
*/ */
@Test
public void testNotifyPreferenceChanged_metricUnitsNoNotify() { public void testNotifyPreferenceChanged_metricUnitsNoNotify() {
String imperialUnits = context.getString(R.string.stats_units_imperial); String imperialUnits = context.getString(R.string.stats_units_imperial);
PreferencesUtils.setString(context, R.string.stats_units_key, imperialUnits); PreferencesUtils.setString(context, R.string.stats_units_key, imperialUnits);
trackDataHub.notifyPreferenceChanged( trackDataHub.notifyPreferenceChanged(PreferencesUtils.getKey(context, R.string.stats_units_key));
PreferencesUtils.getKey(context, R.string.stats_units_key)); Assert.assertFalse(trackDataHub.isMetricUnits());
assertEquals(false, trackDataHub.isMetricUnits()); PreferencesUtils.setString(context, R.string.stats_units_key, PreferencesUtils.STATS_UNITS_DEFAULT);
PreferencesUtils.setString( trackDataHub.notifyPreferenceChanged(PreferencesUtils.getKey(context, R.string.stats_units_key));
context, R.string.stats_units_key, PreferencesUtils.STATS_UNITS_DEFAULT); Assert.assertTrue(trackDataHub.isMetricUnits());
trackDataHub.notifyPreferenceChanged(
PreferencesUtils.getKey(context, R.string.stats_units_key));
assertEquals(true, trackDataHub.isMetricUnits());
} }
/** /**
* Tests the method {@link TrackDataHub#notifyPreferenceChanged(String)} when * Tests the method {@link TrackDataHub#notifyPreferenceChanged(String)} when
* the key is R.string.metric_units_key. * the key is R.string.metric_units_key.
*/ */
@Test
public void testNotifyPreferenceChanged_reportSpeedNoNotify() { public void testNotifyPreferenceChanged_reportSpeedNoNotify() {
String value = context.getString(R.string.stats_rate_pace); String value = context.getString(R.string.stats_rate_pace);
PreferencesUtils.setString(context, R.string.stats_rate_key, value); PreferencesUtils.setString(context, R.string.stats_rate_key, value);
trackDataHub.notifyPreferenceChanged(PreferencesUtils trackDataHub.notifyPreferenceChanged(PreferencesUtils.getKey(context, R.string.stats_rate_key));
.getKey(context, R.string.stats_rate_key)); Assert.assertFalse(trackDataHub.isReportSpeed());
assertEquals(false, trackDataHub.isReportSpeed());
value = context.getString(R.string.stats_rate_speed); value = context.getString(R.string.stats_rate_speed);
PreferencesUtils.setString(context, R.string.stats_rate_key, value); PreferencesUtils.setString(context, R.string.stats_rate_key, value);
trackDataHub.notifyPreferenceChanged(PreferencesUtils trackDataHub.notifyPreferenceChanged(PreferencesUtils.getKey(context, R.string.stats_rate_key));
.getKey(context, R.string.stats_rate_key)); Assert.assertTrue(trackDataHub.isReportSpeed());
assertEquals(true, trackDataHub.isReportSpeed());
} }
//TODO
/** /**
* Fixed size cursor answer. * Fixed size cursor answer.
* *
* @author Jimmy Shih * @author Jimmy Shih
*/ */
private static class FixedSizeCursorAnswer implements IAnswer<Cursor> { private static class FixedSizeCursorAnswer {
private final int size; private final int size;
public FixedSizeCursorAnswer(int size) { public FixedSizeCursorAnswer(int size) {
this.size = size; this.size = size;
} }
//
@Override // @Override
public Cursor answer() throws Throwable { // public Cursor answer() throws Throwable {
MatrixCursor cursor = new MatrixCursor(new String[]{BaseColumns._ID}); // MatrixCursor cursor = new MatrixCursor(new String[]{BaseColumns._ID});
for (long i = 0; i < size; i++) { // for (long i = 0; i < size; i++) {
cursor.addRow(new Object[]{i}); // cursor.addRow(new Object[]{i});
} // }
return cursor; // return cursor;
} // }
} }
/** /**
@@ -55,7 +55,6 @@ public class PreferencesUtils {
// Value for split_frequency_key and voice_frequency_key // Value for split_frequency_key and voice_frequency_key
public static final int FREQUENCY_OFF = 0; public static final int FREQUENCY_OFF = 0;
public static final int MAP_TYPE_DEFAULT = 1;
public static final int MAX_RECORDING_DISTANCE_DEFAULT = 200; public static final int MAX_RECORDING_DISTANCE_DEFAULT = 200;
// Values for min_recording_interval_key // Values for min_recording_interval_key