blob: 259e6080a73e60ec02cef001203487cbb8d5a022 [file] [log] [blame]
/*
* Copyright (C) 2016 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.tools.idea.gradle.project.sync.setup.post.upgrade;
import com.android.ide.common.repository.GradleVersion;
import com.android.tools.idea.gradle.plugin.AndroidPluginInfo;
import com.android.tools.idea.gradle.plugin.LatestKnownPluginVersionProvider;
import com.android.tools.idea.gradle.plugin.AndroidPluginVersionUpdater;
import com.android.tools.idea.gradle.project.sync.GradleSyncState;
import com.android.tools.idea.project.messages.SyncMessage;
import com.android.tools.idea.gradle.project.sync.messages.GradleSyncMessagesStub;
import com.android.tools.idea.testing.IdeComponents;
import com.android.tools.idea.testing.TestMessagesDialog;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.Messages;
import com.intellij.openapi.ui.TestDialog;
import com.intellij.testFramework.IdeaTestCase;
import org.mockito.Mock;
import java.util.List;
import static com.android.SdkConstants.GRADLE_LATEST_VERSION;
import static com.google.common.truth.Truth.assertThat;
import static com.intellij.openapi.ui.Messages.OK;
import static org.mockito.Mockito.*;
import static org.mockito.MockitoAnnotations.initMocks;
/**
* Tets for {@link ForcedPluginVersionUpgradeStep}.
*/
public class ForcedPluginPreviewVersionUpgradeStepIdeaTest extends IdeaTestCase {
@Mock private AndroidPluginInfo myPluginInfo;
@Mock private LatestKnownPluginVersionProvider myLatestKnownPluginVersionProvider;
@Mock private AndroidPluginVersionUpdater myVersionUpdater;
@Mock private GradleSyncState mySyncState;
private GradleSyncMessagesStub mySyncMessages;
private TestDialog myOriginalTestDialog;
private ForcedPluginVersionUpgradeStep myVersionUpgrade;
@Override
protected void setUp() throws Exception {
super.setUp();
initMocks(this);
Project project = getProject();
new IdeComponents(project).replaceProjectService(GradleSyncState.class, mySyncState);
new IdeComponents(project).replaceProjectService(AndroidPluginVersionUpdater.class, myVersionUpdater);
mySyncMessages = GradleSyncMessagesStub.replaceSyncMessagesService(project);
myVersionUpgrade = new ForcedPluginVersionUpgradeStep();
}
@Override
protected void tearDown() throws Exception {
try {
if (myOriginalTestDialog != null) {
ForcedPluginPreviewVersionUpgradeDialog.setTestDialog(myOriginalTestDialog);
}
}
finally {
super.tearDown();
}
}
public void testCheckAndPerformUpgradeWhenUpgradeNotNeeded() {
GradleVersion latestPluginVersion = GradleVersion.parse("2.0.0");
when(myPluginInfo.getLatestKnownPluginVersionProvider()).thenReturn(myLatestKnownPluginVersionProvider);
when(myLatestKnownPluginVersionProvider.get()).thenReturn(latestPluginVersion.toString());
when(myPluginInfo.getPluginVersion()).thenReturn(GradleVersion.parse("3.0.0"));
boolean upgraded = myVersionUpgrade.performUpgradeAndSync(getProject(), myPluginInfo);
assertFalse(upgraded);
verify(mySyncState, never()).syncEnded();
verify(myVersionUpdater, never()).updatePluginVersionAndSync(latestPluginVersion, GradleVersion.parse(GRADLE_LATEST_VERSION), true);
assertThat(mySyncMessages.getReportedMessages()).isEmpty();
}
public void testCheckAndPerformUpgradeWhenUserAcceptsUpgrade() {
GradleVersion latestPluginVersion = GradleVersion.parse("2.0.0");
when(myPluginInfo.getLatestKnownPluginVersionProvider()).thenReturn(myLatestKnownPluginVersionProvider);
when(myLatestKnownPluginVersionProvider.get()).thenReturn(latestPluginVersion.toString());
when(myPluginInfo.getPluginVersion()).thenReturn(GradleVersion.parse("2.0.0-alpha9"));
// Simulate user accepting the upgrade.
myOriginalTestDialog = ForcedPluginPreviewVersionUpgradeDialog.setTestDialog(new TestMessagesDialog(OK));
boolean upgraded = myVersionUpgrade.performUpgradeAndSync(getProject(), myPluginInfo);
assertTrue(upgraded);
verify(mySyncState).syncEnded();
verify(myVersionUpdater).updatePluginVersionAndSync(latestPluginVersion, GradleVersion.parse(GRADLE_LATEST_VERSION), true);
assertThat(mySyncMessages.getReportedMessages()).isEmpty();
}
// See https://code.google.com/p/android/issues/detail?id=227927
public void testCheckAndPerformUpgradeWhenUserDeclinesUpgrade() {
GradleVersion latestPluginVersion = GradleVersion.parse("2.0.0");
when(myPluginInfo.getLatestKnownPluginVersionProvider()).thenReturn(myLatestKnownPluginVersionProvider);
when(myLatestKnownPluginVersionProvider.get()).thenReturn(latestPluginVersion.toString());
when(myPluginInfo.getPluginVersion()).thenReturn(GradleVersion.parse("2.0.0-alpha9"));
// Simulate user canceling upgrade.
myOriginalTestDialog = ForcedPluginPreviewVersionUpgradeDialog.setTestDialog(new TestMessagesDialog(Messages.CANCEL));
boolean upgraded = myVersionUpgrade.performUpgradeAndSync(getProject(), myPluginInfo);
assertTrue(upgraded);
List<SyncMessage> messages = mySyncMessages.getReportedMessages();
assertThat(messages).hasSize(1);
String message = messages.get(0).getText()[1];
assertThat(message).contains("Please update your project to use version 2.0.0.");
verify(mySyncState).syncEnded();
verify(myVersionUpdater, never()).updatePluginVersionAndSync(latestPluginVersion, GradleVersion.parse(GRADLE_LATEST_VERSION), true);
}
}