// =====================================================================
//
// Copyright (C) 2012 - 2016, Philip Graf
//
// All rights reserved. This program and the accompanying materials
// are made available under the terms of the Eclipse Public License v1.0
// which accompanies this distribution, and is available at
// http://www.eclipse.org/legal/epl-v10.html
//
// =====================================================================
package ch.acanda.eclipse.pmd.java.resolution;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import java.util.Collection;
import org.eclipse.ui.IMarkerResolution;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
import org.osgi.framework.Version;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableList.Builder;
import ch.acanda.eclipse.pmd.java.resolution.basic.ExtendsObjectQuickFix;
import ch.acanda.eclipse.pmd.marker.PMDMarker;
@RunWith(value = Parameterized.class)
public class JavaQuickFixGeneratorTest {
private final String ruleId;
private final String javaVersion;
private final Class<? extends IMarkerResolution>[] expectedQuickFixClasses;
private PMDMarker marker;
private JavaQuickFixContext context;
@SafeVarargs
@SuppressWarnings("PMD.ArrayIsStoredDirectly")
public JavaQuickFixGeneratorTest(final String ruleId, final int javaVersion,
final Class<? extends IMarkerResolution>... expectedQuickFixClasses) {
this.ruleId = ruleId;
this.javaVersion = "1." + javaVersion + ".0";
this.expectedQuickFixClasses = expectedQuickFixClasses;
}
@Parameters
public static Collection<Object[]> getTestData() {
final Builder<Object[]> testData = ImmutableList.builder();
testData.add(createTestData("java.basic.ExtendsObject", 4, ExtendsObjectQuickFix.class));
testData.add(createTestData("java.basic.ExtendsObject", 8, SuppressWarningsQuickFix.class));
testData.add(createTestData("java.basic.ExtendsObject", 5, ExtendsObjectQuickFix.class, SuppressWarningsQuickFix.class));
return testData.build();
}
@SafeVarargs
private static Object[] createTestData(final String ruleId, final int javaVersion,
final Class<? extends IMarkerResolution>... classes) {
return new Object[] { ruleId, javaVersion, classes };
}
@Before
public void setUp() {
marker = mock(PMDMarker.class);
when(marker.getRuleId()).thenReturn(ruleId);
context = new JavaQuickFixContext(new Version(javaVersion));
}
@Test
public void hasQuickFixes() {
final boolean hasQuickFixes = new JavaQuickFixGenerator().hasQuickFixes(marker, context);
assertEquals("hasQuickFixes should return whether the generator has quick fixes for the rule " + ruleId
+ " and java version: " + javaVersion, expectedQuickFixClasses.length > 0, hasQuickFixes);
}
@Test
public void testGetQuickFixes() {
final ImmutableList<IMarkerResolution> quickFixes = new JavaQuickFixGenerator().getQuickFixes(marker, context);
final Class<?>[] actualQuickFixClasses = new Class<?>[quickFixes.size()];
for (int i = 0; i < quickFixes.size(); i++) {
actualQuickFixClasses[i] = quickFixes.get(i).getClass();
}
assertArrayEquals("Quick fixes for rule " + ruleId + " and java version " + javaVersion, expectedQuickFixClasses,
actualQuickFixClasses);
}
}