blob: d4b3f3bcd58b5124d8ec2c13f1cc5cc0eafa5290 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004, 2007 Mylyn project committers and others.
* 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 org.eclipse.mylyn.team.tests;
import java.io.ByteArrayInputStream;
import java.util.ArrayList;
import java.util.List;
import junit.framework.TestCase;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.mylyn.internal.team.ui.ContextChangeSet;
import org.eclipse.mylyn.internal.team.ui.FocusedTeamUiPlugin;
import org.eclipse.mylyn.internal.team.ui.properties.TeamPropertiesLinkProvider;
import org.eclipse.mylyn.tasks.tests.connector.MockTask;
import org.eclipse.team.core.diff.IDiff;
import org.eclipse.team.internal.core.subscribers.ActiveChangeSetManager;
/**
* @author Steffen Pingel
*/
public class TeamPropertiesLinkProviderTest extends TestCase {
private IProject project1;
private List<IResource> resources;
private IProject project2;
@Override
protected void setUp() throws Exception {
IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
project1 = root.getProject("Test Project1");
project1.create(null);
project1.open(null);
project2 = root.getProject("Test Project2");
project2.create(null);
project2.open(null);
resources = new ArrayList<IResource>();
}
@Override
protected void tearDown() throws Exception {
project1.delete(true, null);
project2.delete(true, null);
}
public void testCommitCommentTemplate() throws Exception {
MockTask task = new MockTask("1");
task.setSummary("summary");
task.setUrl("http://url");
ContextChangeSet changeSet = new ContextChangeSet(task, new StubChangeSetManager()) {
@Override
public IResource[] getChangedResources() {
return resources.toArray(new IResource[0]);
}
};
resources.add(project1);
FocusedTeamUiPlugin.getDefault().getPreferenceStore().setValue(FocusedTeamUiPlugin.COMMIT_TEMPLATE,
"${task.key}: ${task.description}");
assertEquals("1: summary", changeSet.getComment());
TeamPropertiesLinkProvider linkProvider = new TeamPropertiesLinkProvider();
assertNull(linkProvider.getCommitCommentTemplate(project1));
assertTrue(linkProvider.canAccessProperties(project1));
assertTrue(linkProvider.setCommitCommentTemplate(project1, "ab${task.url}cd"));
assertEquals("ab${task.url}cd", linkProvider.getCommitCommentTemplate(project1));
assertEquals("abhttp://urlcd", changeSet.getComment());
assertTrue(linkProvider.canAccessProperties(project1));
// create file
IFile file = project1.getFile("file");
file.create(new ByteArrayInputStream(new byte[0]), true, null);
resources.clear();
resources.add(file);
assertEquals("ab${task.url}cd", linkProvider.getCommitCommentTemplate(file));
assertEquals("abhttp://urlcd", changeSet.getComment());
assertTrue(linkProvider.canAccessProperties(file));
linkProvider.setCommitCommentTemplate(file, null);
assertNull(linkProvider.getCommitCommentTemplate(file));
assertNull(linkProvider.getCommitCommentTemplate(project1));
assertTrue(linkProvider.canAccessProperties(file));
assertTrue(linkProvider.canAccessProperties(project1));
}
public void testChangeSetCommitCommentMultipleProjects() throws Exception {
MockTask task = new MockTask("1");
task.setSummary("summary");
task.setUrl("http://url");
ContextChangeSet changeSet = new ContextChangeSet(task, new StubChangeSetManager()) {
@Override
public IResource[] getChangedResources() {
return resources.toArray(new IResource[0]);
}
};
resources.add(project1);
FocusedTeamUiPlugin.getDefault().getPreferenceStore().setValue(FocusedTeamUiPlugin.COMMIT_TEMPLATE,
"global template: ${task.key}");
// only set template on project 2
TeamPropertiesLinkProvider linkProvider = new TeamPropertiesLinkProvider();
assertTrue(linkProvider.setCommitCommentTemplate(project2, "project template: ${task.key}"));
resources.add(project1);
assertEquals("global template: 1", changeSet.getComment());
resources.add(project2);
assertEquals("project template: 1", changeSet.getComment());
}
public void testChangeSetCommitCommentChangedResources() throws Exception {
MockTask task = new MockTask("1");
task.setSummary("summary");
task.setUrl("http://url");
ContextChangeSet changeSet = new ContextChangeSet(task, new StubChangeSetManager()) {
@Override
public IResource[] getResources() {
return new IResource[] { project1, project2 };
}
@Override
public IResource[] getChangedResources() {
return new IResource[] { project2 };
}
};
FocusedTeamUiPlugin.getDefault().getPreferenceStore().setValue(FocusedTeamUiPlugin.COMMIT_TEMPLATE, "global");
// only the template project 2 should matter
TeamPropertiesLinkProvider linkProvider = new TeamPropertiesLinkProvider();
assertTrue(linkProvider.setCommitCommentTemplate(project1, "project1"));
assertEquals("global", changeSet.getComment());
assertTrue(linkProvider.setCommitCommentTemplate(project2, "project2"));
assertEquals("project2", changeSet.getComment());
}
public class StubChangeSetManager extends ActiveChangeSetManager {
@Override
public IDiff getDiff(IResource resource) throws CoreException {
return null;
}
@Override
protected String getName() {
return null;
}
@Override
protected void initializeSets() {
}
}
}