/*
* Copyright 2012 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package com.google.android.apps.mytracks.endtoendtest.common;
import com.google.android.apps.mytracks.TrackListActivity;
import com.google.android.apps.mytracks.endtoendtest.EndToEndTestUtils;
import com.google.android.maps.mytracks.R;
import android.app.Instrumentation;
import android.test.ActivityInstrumentationTestCase2;
import android.widget.CheckBox;
import junit.framework.Assert;
/**
* Tests the settings.
*
* @author Youtao Liu
*/
public class SettingsTest extends ActivityInstrumentationTestCase2<TrackListActivity> {
private static final String GMAIL_COM = "gmail.com";
private static final String NEW_ACTIVITY_TYPE = "NewActivityType";
private Instrumentation instrumentation;
private TrackListActivity trackListActivity;
public SettingsTest() {
super(TrackListActivity.class);
}
@Override
protected void setUp() throws Exception {
super.setUp();
instrumentation = getInstrumentation();
trackListActivity = getActivity();
EndToEndTestUtils.setupForAllTest(instrumentation, trackListActivity);
}
@Override
protected void tearDown() throws Exception {
EndToEndTestUtils.SOLO.finishOpenedActivities();
super.tearDown();
}
/**
* Tests changing preferred units to imperial.
*/
public void testPreferredUnits_imperial() {
testPreferredUnits(R.string.unit_mile);
}
/**
* Tests changing preferred units to metric.
*/
public void testPreferredUnits_metric() {
testPreferredUnits(R.string.unit_kilometer);
}
/**
* Tests changing preferred units while recording and viewing the chart tab.
*/
public void testPreferredUnitsRecording_chart() {
testPreferredUnitsRecording(R.string.track_detail_chart_tab);
}
/**
* Tests changing preferred units while recording and viewing the stats tab.
*/
public void testPreferredUnitsRecording_stats() {
testPreferredUnitsRecording(R.string.track_detail_stats_tab);
}
/**
* Tests changing preferred units while recording and viewing the map tab.
*/
public void testPreferredUnitsRecording_map() {
testPreferredUnitsRecording(R.string.track_detail_map_tab);
}
/**
* Tests grade/elevation and latitude/longitude..
*/
public void testGradeElevationAndLatitudeLongitude() {
// Ennable grade/elevation and latitude/longitude
EndToEndTestUtils.findMenuItem(trackListActivity.getString(R.string.menu_settings), true);
EndToEndTestUtils.SOLO.clickOnText(
trackListActivity.getString(R.string.track_detail_stats_tab));
assertTrue(EndToEndTestUtils.SOLO.waitForText(
trackListActivity.getString(R.string.settings_stats_units_title)));
EndToEndTestUtils.SOLO.clickOnText(
trackListActivity.getString(R.string.settings_stats_grade_elevation));
EndToEndTestUtils.SOLO.clickOnText(
trackListActivity.getString(R.string.settings_stats_coordinate));
EndToEndTestUtils.SOLO.goBack();
EndToEndTestUtils.SOLO.goBack();
// Start recording and check stats tab
EndToEndTestUtils.startRecording();
instrumentation.waitForIdleSync();
EndToEndTestUtils.SOLO.clickOnText(
trackListActivity.getString(R.string.track_detail_stats_tab));
assertTrue(EndToEndTestUtils.SOLO.waitForText(
trackListActivity.getString(R.string.stats_elevation), 1,
EndToEndTestUtils.NORMAL_WAIT_TIME, true));
assertTrue(
EndToEndTestUtils.SOLO.waitForText(trackListActivity.getString(R.string.stats_grade)));
assertTrue(
EndToEndTestUtils.SOLO.waitForText(trackListActivity.getString(R.string.stats_latitude)));
assertTrue(
EndToEndTestUtils.SOLO.waitForText(trackListActivity.getString(R.string.stats_longitude)));
// Stop recording and check stats tab
EndToEndTestUtils.stopRecording(true);
assertTrue(EndToEndTestUtils.SOLO.waitForText(
trackListActivity.getString(R.string.stats_elevation), 1,
EndToEndTestUtils.NORMAL_WAIT_TIME, true));
assertTrue(
EndToEndTestUtils.SOLO.waitForText(trackListActivity.getString(R.string.stats_grade)));
assertNull(
EndToEndTestUtils.findTextView(trackListActivity.getString(R.string.stats_latitude)));
assertNull(
EndToEndTestUtils.findTextView(trackListActivity.getString(R.string.stats_longitude)));
}
/**
* Tests default track name and default activity type.
*/
public void testDefaultTrackNameAndDefaultActivityType() {
EndToEndTestUtils.findMenuItem(trackListActivity.getString(R.string.menu_settings), true);
EndToEndTestUtils.SOLO.clickOnText(trackListActivity.getString(R.string.settings_recording));
// Change the default track name to number
EndToEndTestUtils.SOLO.clickOnText(
trackListActivity.getString(R.string.settings_recording_track_name_title));
EndToEndTestUtils.SOLO.clickOnText(
trackListActivity.getString(R.string.settings_recording_track_name_number_option));
// Change the default activity type to NEW_ACTIVITY_TYPE
EndToEndTestUtils.SOLO.clickOnText(
trackListActivity.getString(R.string.settings_recording_default_activity_title));
EndToEndTestUtils.enterTextAvoidSoftKeyBoard(0, NEW_ACTIVITY_TYPE);
EndToEndTestUtils.getButtonOnScreen(
trackListActivity.getString(R.string.generic_ok), true, true);
EndToEndTestUtils.SOLO.goBack();
EndToEndTestUtils.SOLO.goBack();
EndToEndTestUtils.startRecording();
instrumentation.waitForIdleSync();
EndToEndTestUtils.stopRecording(false);
assertTrue(EndToEndTestUtils.SOLO.searchText(
trackListActivity.getString(R.string.track_name_format).split(" ")[0]));
assertTrue(EndToEndTestUtils.SOLO.searchText(NEW_ACTIVITY_TYPE));
EndToEndTestUtils.SOLO.clickOnText(trackListActivity.getString(R.string.generic_save));
}
/**
* Tests track color setting for fixed thresholds.
*/
public void testTrackColor_fixed() {
testTrackColor(R.string.settings_map_track_color_mode_fixed,
R.string.settings_map_track_color_mode_fixed_summary);
}
/**
* Tests track color setting for dynamic thresholds.
*/
public void testTrackColorSettings_dynamic() {
testTrackColor(R.string.settings_map_track_color_mode_dynamic,
R.string.settings_map_track_color_mode_dynamic_summary);
}
/**
* Tests track color setting for single color.
*/
public void testTrackColorSettings_single() {
testTrackColor(R.string.settings_map_track_color_mode_single,
R.string.settings_map_track_color_mode_single);
}
/**
* Tests allow access.
*/
public void testAllowAccess() {
EndToEndTestUtils.findMenuItem(trackListActivity.getString(R.string.menu_settings), true);
EndToEndTestUtils.SOLO.clickOnText(trackListActivity.getString(R.string.settings_advanced));
assertTrue(EndToEndTestUtils.SOLO.waitForText(
trackListActivity.getString(R.string.settings_sharing_allow_access), 1,
EndToEndTestUtils.NORMAL_WAIT_TIME));
EndToEndTestUtils.SOLO.clickOnCheckBox(0);
assertTrue(EndToEndTestUtils.SOLO.waitForText(
trackListActivity.getString(R.string.settings_sharing_allow_access_confirm_message), 1,
EndToEndTestUtils.NORMAL_WAIT_TIME));
EndToEndTestUtils.SOLO.clickOnButton(trackListActivity.getString(R.string.generic_yes));
instrumentation.waitForIdleSync();
assertEquals(true, EndToEndTestUtils.SOLO.getCurrentViews(CheckBox.class).get(0).isChecked());
EndToEndTestUtils.SOLO.goBack();
}
/**
* Tests sync.
*/
public void testSync() {
EndToEndTestUtils.findMenuItem(trackListActivity.getString(R.string.menu_settings), true);
EndToEndTestUtils.SOLO.clickOnText(trackListActivity.getString(R.string.menu_sync_drive));
// Whether there is a gmail.com account
if (!EndToEndTestUtils.SOLO.waitForText(GMAIL_COM, 1, EndToEndTestUtils.TINY_WAIT_TIME)) {
return;
}
// Click the first gmail.com account
EndToEndTestUtils.SOLO.clickOnText(GMAIL_COM, 0);
instrumentation.waitForIdleSync();
EndToEndTestUtils.getButtonOnScreen(
trackListActivity.getString(R.string.generic_ok), true, true);
EndToEndTestUtils.SOLO.waitForText(
trackListActivity.getString(R.string.sync_drive_confirm_message).split("%")[0], 1,
EndToEndTestUtils.SHORT_WAIT_TIME);
EndToEndTestUtils.SOLO.clickOnText(trackListActivity.getString(R.string.generic_no));
EndToEndTestUtils.SOLO.goBack();
assertEquals(false,
EndToEndTestUtils.findMenuItem(trackListActivity.getString(R.string.menu_sync_now), false));
}
/**
* Tests preferred units.
*
* @param unitId the unit id
*/
private void testPreferredUnits(int unitId) {
EndToEndTestUtils.findMenuItem(trackListActivity.getString(R.string.menu_settings), true);
EndToEndTestUtils.SOLO.clickOnText(
trackListActivity.getString(R.string.track_detail_stats_tab));
Assert.assertTrue(EndToEndTestUtils.SOLO.waitForText(
trackListActivity.getString(R.string.settings_stats_units_title)));
EndToEndTestUtils.SOLO.clickOnText(
trackListActivity.getString(R.string.settings_stats_units_title));
instrumentation.waitForIdleSync();
String unit = trackListActivity.getString(unitId);
EndToEndTestUtils.SOLO.clickOnText(unit);
EndToEndTestUtils.SOLO.searchText(unit);
EndToEndTestUtils.SOLO.goBack();
EndToEndTestUtils.SOLO.goBack();
}
/**
* Tests preferred units while recording.
*
* @param tabId the tab id
*/
private void testPreferredUnitsRecording(int tabId) {
testPreferredUnits(R.string.unit_kilometer);
EndToEndTestUtils.startRecording();
EndToEndTestUtils.SOLO.clickOnText(trackListActivity.getString(tabId));
EndToEndTestUtils.sendGps(3);
testPreferredUnits(R.string.unit_mile);
EndToEndTestUtils.sendGps(3, 3);
EndToEndTestUtils.stopRecording(true);
}
/**
* Tests track color setting.
*
* @param modeId the mode id
* @param summaryId the summary id
*/
private void testTrackColor(int modeId, int summaryId) {
EndToEndTestUtils.findMenuItem(trackListActivity.getString(R.string.menu_settings), true);
EndToEndTestUtils.SOLO.clickOnText(trackListActivity.getString(R.string.menu_map));
EndToEndTestUtils.SOLO.clickOnText(
trackListActivity.getString(R.string.settings_map_track_color_mode));
instrumentation.waitForIdleSync();
EndToEndTestUtils.SOLO.clickOnText(trackListActivity.getString(modeId));
instrumentation.waitForIdleSync();
EndToEndTestUtils.SOLO.waitForText(trackListActivity.getString(summaryId));
}
}