blob: 2ad4620c6006bdaf58febf76f11461288dcce8c2 [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.tools.idea.gradle.service.notification.errors;
import com.google.common.collect.Lists;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.externalSystem.model.ExternalSystemException;
import com.intellij.openapi.externalSystem.service.notification.NotificationCategory;
import com.intellij.openapi.externalSystem.service.notification.NotificationData;
import com.intellij.openapi.externalSystem.service.notification.NotificationSource;
import com.intellij.openapi.project.Project;
import com.intellij.testFramework.IdeaTestCase;
import org.jetbrains.annotations.NotNull;
import java.util.List;
import static org.easymock.EasyMock.createMock;
public class ClassLoadingErrorHandlerTest extends IdeaTestCase {
private ExternalSystemException myError;
private NotificationData myNotification;
private Project myProject;
private ClassLoadingErrorHandler myErrorHandler;
@Override
protected void setUp() throws Exception {
super.setUp();
myError = new ExternalSystemException("Test");
myNotification = new NotificationData("Test", "Testing", NotificationCategory.ERROR, NotificationSource.PROJECT_SYNC);
myProject = createMock(Project.class);
myErrorHandler = new ClassLoadingErrorHandler();
}
public void testHandleErrorWhenClassNotLoaded() throws Exception {
assertQuickFixHyperlinksAreDisplayed("Unable to load class 'java.util.List'");
}
public void testHandleErrorWhenMethodNotFound() throws Exception {
assertQuickFixHyperlinksAreDisplayed("Unable to find method 'org.slf4j.spi.LocationAwareLogger.log'");
}
public void testHandleErrorWhenClassCannotBeCast() throws Exception {
assertQuickFixHyperlinksAreDisplayed("Cause: org.slf4j.impl.JDK14LoggerFactory cannot be cast to ch.qos.logback.classic.LoggerContext");
}
private void assertQuickFixHyperlinksAreDisplayed(@NotNull String errorMsg) {
List<String> message = Lists.newArrayList(errorMsg);
assertTrue(myErrorHandler.handleError(message, myError, myNotification, myProject));
String notification = myNotification.getMessage();
assertTrue(notification.contains("Some versions of JDK 1.7 (e.g. 1.7.0_10) may cause class loading errors in Gradle"));
assertTrue(notification.contains("Re-download dependencies and sync project"));
boolean restartCapable = ApplicationManager.getApplication().isRestartCapable();
String quickFix = restartCapable ? "Stop Gradle build processes (requires restart)" : "Open Gradle Daemon documentation";
assertTrue(notification.contains(quickFix));
}
}