blob: adfb0e9bf8434cdf89d731986983988115945a80 [file] [log] [blame]
/*
* Copyright (C) 2014 The Android Open Source Project
*
* 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.android.sdklib.internal.repository.updater;
import com.android.sdklib.AndroidLocationTestCase;
import com.android.sdklib.internal.repository.updater.ISettingsPage.SettingsChangedCallback;
import com.android.sdklib.internal.repository.updater.SettingsController.OnChangedListener;
import com.android.sdklib.internal.repository.updater.SettingsController.Settings;
import com.android.sdklib.io.FileOp;
import com.android.sdklib.io.IFileOp;
import com.android.sdklib.mock.MockLog;
import java.util.Properties;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicReference;
public class SettingsControllerTest extends AndroidLocationTestCase {
private IFileOp mFileOp;
private MockLog mMockLog;
private SettingsController m;
@Override
public void setUp() throws Exception {
super.setUp();
mFileOp = new FileOp();
mMockLog = new MockLog();
m = new SettingsController(mFileOp, mMockLog);
}
@Override
public void tearDown() throws Exception {
super.tearDown();
}
public final void testDefaultSettings() {
m.loadSettings();
Settings s = m.getSettings();
assertFalse(s.getAskBeforeAdbRestart());
assertFalse(s.getEnablePreviews());
assertFalse(s.getForceHttp());
assertTrue (s.getShowUpdateOnly());
assertTrue (s.getUseDownloadCache());
assertEquals(-1, s.getMonitorDensity());
}
public final void testSetSettings() {
m.loadSettings();
Settings s1 = m.getSettings();
assertFalse(s1.getAskBeforeAdbRestart());
assertFalse(s1.getEnablePreviews());
assertFalse(s1.getForceHttp());
assertTrue (s1.getShowUpdateOnly());
assertTrue (s1.getUseDownloadCache());
assertEquals(-1, s1.getMonitorDensity());
m.setSetting(ISettingsPage.KEY_ASK_ADB_RESTART, true);
m.setSetting(ISettingsPage.KEY_ENABLE_PREVIEWS, true);
m.setSetting(ISettingsPage.KEY_FORCE_HTTP, true);
m.setShowUpdateOnly(false);
m.setSetting(ISettingsPage.KEY_USE_DOWNLOAD_CACHE, false);
m.setMonitorDensity(320);
Settings s2 = m.getSettings();
assertSame(s2, s1);
assertTrue (s2.getAskBeforeAdbRestart());
assertTrue (s2.getEnablePreviews());
assertTrue (s2.getForceHttp());
assertFalse(s2.getShowUpdateOnly());
assertFalse(s2.getUseDownloadCache());
assertEquals(320, s2.getMonitorDensity());
m.saveSettings();
// create a new instance
SettingsController m3 = new SettingsController(mFileOp, mMockLog);
m3.loadSettings();
Settings s3 = m3.getSettings();
assertNotSame(s3, s1);
assertTrue (s3.getAskBeforeAdbRestart());
assertTrue (s3.getEnablePreviews());
assertTrue (s3.getForceHttp());
assertFalse(s3.getShowUpdateOnly());
assertFalse(s3.getUseDownloadCache());
assertEquals(320, s3.getMonitorDensity());
}
public final void testSettingsPage() {
final AtomicBoolean pageLoadSettingsCalled = new AtomicBoolean(false);
final AtomicBoolean pageRetrieveSettingsCalled = new AtomicBoolean(false);
final AtomicBoolean pageSetOnSettingsChangedCalled = new AtomicBoolean(false);
final AtomicReference<SettingsChangedCallback> pageSettingsChangedCallback =
new AtomicReference<ISettingsPage.SettingsChangedCallback>();
ISettingsPage mockPage = new ISettingsPage() {
@Override
public void loadSettings(Properties inSettings) {
pageLoadSettingsCalled.set(true);
}
@Override
public void setOnSettingsChanged(SettingsChangedCallback settingsChangedCallback) {
pageSetOnSettingsChangedCalled.set(true);
pageSettingsChangedCallback.set(settingsChangedCallback);
}
@Override
public void retrieveSettings(Properties outSettings) {
pageRetrieveSettingsCalled.set(true);
}
};
// Setting the page loads settings into it and then registers a changed-callback
// that will call m.onSettingsChanged.
m.setSettingsPage(mockPage);
assertTrue(pageLoadSettingsCalled.get());
assertTrue(pageSetOnSettingsChangedCalled.get());
assertFalse(pageRetrieveSettingsCalled.get());
final AtomicBoolean listener1Called = new AtomicBoolean(false);
OnChangedListener listener1 = new OnChangedListener() {
@Override
public void onSettingsChanged(SettingsController controller, Settings oldSettings) {
listener1Called.set(true);
}
};
final AtomicBoolean listener2Called = new AtomicBoolean(false);
OnChangedListener listener2 = new OnChangedListener() {
@Override
public void onSettingsChanged(SettingsController controller, Settings oldSettings) {
listener1Called.set(true);
}
};
m.registerOnChangedListener(listener1);
m.registerOnChangedListener(listener2);
m.unregisterOnChangedListener(listener2);
m.unregisterOnChangedListener(listener2);
assertFalse(listener1Called.get());
assertFalse(listener2Called.get());
// When the settings page changes, it calls the callback that it was given
// (which we captured earlier)
assertNotNull(pageSettingsChangedCallback.get());
pageSettingsChangedCallback.get().onSettingsChanged(mockPage);
// That triggers SettingsController.onSettingsChanged which calls retrieve() on the
// page to get the settings and save them and then call all the registered listeners
// with the settings.
assertTrue(pageRetrieveSettingsCalled.get());
assertTrue(listener1Called.get());
assertFalse(listener2Called.get());
}
}