/** * This file is licensed under the University of Illinois/NCSA Open Source License. See LICENSE.TXT for details. */ package edu.illinois.codingspectator.ui.tests; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import java.util.Arrays; import java.util.HashSet; import java.util.Set; import org.eclipse.ltk.core.refactoring.codingspectator.Logger; import org.eclipse.ltk.core.refactoring.codingspectator.NavigationHistory; import org.eclipse.ltk.core.refactoring.codingspectator.NavigationHistory.ParseException; import org.eclipse.ltk.core.refactoring.codingspectator.NavigationHistoryItem; import edu.illinois.codingspectator.refactorings.parser.CapturedRefactoringDescriptor; /** * @author Mohsen Vakilian * @author Balaji Ambresh Rajkumar * */ public class DescriptorComparator { public static void assertMatches(CapturedRefactoringDescriptor expectedRefactoringDescriptor, CapturedRefactoringDescriptor actualRefactoringDescriptor) { assertEquals(expectedRefactoringDescriptor.getComment(), actualRefactoringDescriptor.getComment()); assertEquals(expectedRefactoringDescriptor.getDescription(), actualRefactoringDescriptor.getDescription()); assertEquals(expectedRefactoringDescriptor.getFlags(), actualRefactoringDescriptor.getFlags()); assertEquals(expectedRefactoringDescriptor.getID(), actualRefactoringDescriptor.getID()); assertEquals(expectedRefactoringDescriptor.getProject(), actualRefactoringDescriptor.getProject()); assertTrue(actualRefactoringDescriptor.getTimestamp() > 0); Set<String> expectedAttributeKeys= expectedRefactoringDescriptor.getAttributeKeys(); assertEquals(expectedAttributeKeys, actualRefactoringDescriptor.getAttributeKeys()); HashSet<String> attributesWithoutTimestamps= new HashSet<String>(expectedAttributeKeys); attributesWithoutTimestamps.removeAll(Arrays.asList(Logger.NAVIGATION_HISTORY_ATTRIBUTE)); for (String attribute : attributesWithoutTimestamps) { assertEquals(String.format("Expected another value for the attribute \"%s\"", attribute), expectedRefactoringDescriptor.getAttribute(attribute), actualRefactoringDescriptor.getAttribute(attribute)); } if (expectedAttributeKeys.contains(Logger.NAVIGATION_HISTORY_ATTRIBUTE)) { try { assertEquals(getNavigationHistoryWithoutTimestamps(expectedRefactoringDescriptor), getNavigationHistoryWithoutTimestamps(actualRefactoringDescriptor)); } catch (ParseException e) { throw new AssertionError(String.format("Failed to parse the value of the %s attribute.\n%s", Logger.NAVIGATION_HISTORY_ATTRIBUTE, e.getMessage())); } } } private static String getNavigationHistoryWithoutTimestamps(CapturedRefactoringDescriptor refactoringDescriptor) throws ParseException { return getNavigationHistoryWithoutTimestamps(refactoringDescriptor.getAttribute(Logger.NAVIGATION_HISTORY_ATTRIBUTE)); } private static String getNavigationHistoryWithoutTimestamps(String navigationHistory) throws ParseException { return getNavigationHistoryWithoutTimestamps(NavigationHistory.parse(navigationHistory)).toString(); } private static NavigationHistory getNavigationHistoryWithoutTimestamps(NavigationHistory navigationHistory) { NavigationHistory navigationHistoryWithoutTimestamps= new NavigationHistory(); for (Object navigationHistoryItem : navigationHistory.getNavigationHistoryItems()) { navigationHistoryWithoutTimestamps.addItem(getNavigationHistoryItemWithoutTimestamps((NavigationHistoryItem)navigationHistoryItem)); } return navigationHistoryWithoutTimestamps; } private static NavigationHistoryItem getNavigationHistoryItemWithoutTimestamps(NavigationHistoryItem navigationHistoryItem) { return new NavigationHistoryItem(navigationHistoryItem.getDialogID(), navigationHistoryItem.getButtonLabel(), -1); } }